Debugging 您使用什么样的保护措施来避免意外地对生产环境进行意外更改?

Debugging 您使用什么样的保护措施来避免意外地对生产环境进行意外更改?,debugging,production,production-environment,Debugging,Production,Production Environment,因为我们没有一个好的登台环境,我们经常不得不调试生产系统上的问题。我们有web、应用程序和数据库服务器 在执行此操作时,您使用什么样的保护措施来避免意外地对生产环境进行意外更改 编辑: 该应用程序是一个非常复杂的B2B垂直web应用程序。涉及的数据很多。有些表有近1亿条记录 编辑: 我们现有的登台环境没有镜像生产的能力。除了实际的数据库数据外,还涉及数百GB的数据文件 编辑: 我们对代码使用源代码控制,但对存储过程不使用源代码控制。在源代码管理中有一些旧的存储过程,但是没有人再保持更新 主

因为我们没有一个好的登台环境,我们经常不得不调试生产系统上的问题。我们有web、应用程序和数据库服务器

在执行此操作时,您使用什么样的保护措施来避免意外地对生产环境进行意外更改


编辑: 该应用程序是一个非常复杂的B2B垂直web应用程序。涉及的数据很多。有些表有近1亿条记录


编辑: 我们现有的登台环境没有镜像生产的能力。除了实际的数据库数据外,还涉及数百GB的数据文件


编辑: 我们对代码使用源代码控制,但对存储过程不使用源代码控制。在源代码管理中有一些旧的存储过程,但是没有人再保持更新

主要关注的是数据库和文件系统上的数据


顺便说一句,我是这家公司的顾问,不是真正的员工。

最直接的回答是:“不要那样做。”

源代码管理。当事情变得不可挽回的错误时,没有什么比这更像是倒退了。此外,diff还可以帮助您将更改复制到其他生产系统。

只允许某些帐户进行写访问,因此您必须以不同的方式登录才能进行更改

在web服务器上,有两个目录结构,它们相互镜像,一个只有一个ID可以写入,另一个是staging dir,每个人都可以写入

在数据库服务器上,有一个生产数据库,其中只有一个ID可以写入,有一个暂存数据库,每个人都可以写入。临时数据库可以恢复夜间备份


但是,如果您的登台系统中存在错误的查询或某些资源占用,则资源将从生产中提取,并且机器可能会挂起。

只读/来宾帐户。认真地这与您不总是以root用户或管理员身份登录的原因相同。

新的生产版本通过我们的系统人员进行发布,程序员和开发人员只能请求让他们的新系统上线,还需要批准,并且我们表明所做的每项更改都经过测试(通过在生产请求中包含此版本中测试的所有内容的快照)

我们保留以前的生产版本,以备出现问题时使用

如果出现故障(他们不应该经常使用正确的测试过程和托管版本),那么我们可以回滚,或者进行热修复。通常,当现场出现故障且修复很小时,我们可以进行热修复,然后将修复移到测试以进行适当的测试


无论如何,有时候事情会过去…

< P>如果你真的别无选择,而且很可能是一种慢性情况……考虑增加一些应用程序数据(文件或数据库)的方式。要将一组数据标记为“请上帝不要使用此数据实际主动更改生产状态”,再加上激活此标记时流程中关键位置的数据转储,您可能能够在不实际操作数据的情况下执行大多数生产逻辑。

这是一件困难的事情,而且与terri“无暂存环境”的历史

出于许多原因,最好有一个专用的(复制的)PROD,您可以使用它来进行阶段部署…并进行调试,但我知道,有时候当您开始工作时,它不会像我们希望的那样快速或彻底

我见过的一件事是VM的使用:除了调试环境之外,您还可以在VM中创建一个迷你产品并使用它进行调试。考虑到您正在开发的应用程序的类型,这可能不实用,因此该领域的其他细节将很有帮助


至于在调试过程中避免对PROD进行更改:您是否有理由需要更改任何内容以方便调试?如果有,可能值得研究另一种解决方法。

对于Web和应用程序服务器,我会尝试将环境复制到新位置(但在同一环境中)并让受影响的人在副本上复制行为。这至少会让你与100%的客户发生意外性关系有一定程度的隔离


对于数据库服务器,我会将生产系统上的用户帐户配置为只读权限。

版本控制对于控制生产环境的更改非常有用-只需将您的生产环境设置为存储库中相应目录的工作副本即可更新时,您的源代码管理系统确保复制所有更改的文件。当更新中断时,您可以将生产工作副本回滚到未中断的上一个版本。此外,您还可以从标记而不是从主干签出生产WC;这样您就可以决定应用于哪个存储库版本通过调整标记来更改生产环境

如果你不熟悉版本控制系统的概念,我建议你做一些研究。它们在概念上很复杂,但非常有用和强大。维基百科文章是一个很好的起点:

很抱歉,您必须有一个暂存环境。这是无法回避的。如果这意味着您必须挑选数据集的大小,那么这就是您必须做的。如果您有生产系统,请在停机期间使用VMware和VMware converter导入生产系统(这是一个多小时的过程,因此可能不实用)

如果不完全访问生产数据库(或副本),就无法解决某些类型的问题,性能就是其中之一。但您确实应该构建一个暂存环境,即使它位于具有精简数据集的个人台式机上

除此之外,在过去的生活中,我不得不使用其中的一些,实际上,除了大量备份之外,你什么也做不了