场景:
- 您推动生产
- 推动打破了多件事
- 相同的构建没有破坏质量保证或开发
- 作为开发人员,您没有产品访问权限。
- 来自上层的压力很大,促使事情不断发展。
细节:
- 在Zend中由API驱动的PHP / MVC应用程序。
- 部署到几个服务器。
我的问题:
在调查时,可以说我有种直觉,认为出了什么问题。但是,我不确定。而且,当然,我无法测试生产中的东西。如果我有基于这种想法的建议修复程序,那么在理解问题所在之前,尝试并应用它并查看它是否有效是否明智?
场景:
细节:
我的问题:
在调查时,可以说我有种直觉,认为出了什么问题。但是,我不确定。而且,当然,我无法测试生产中的东西。如果我有基于这种想法的建议修复程序,那么在理解问题所在之前,尝试并应用它并查看它是否有效是否明智?
Answers:
如何以及你理解这个问题?您的直觉会使事情变得更糟的风险是什么?是否可以返回并在DEV / QA地区重现该问题?您可以如何同步DEV / QA区域以使其更接近PROD?也许您必须更改某些环境或数据库设置,也许您必须将PROD数据导入DEV,也许您必须更改一些调试设置。
通常,除非您可以确认在其他地区确实是正确的,否则我不建议您对PROD提出解决方案。我了解PROD中发生错误并且无法在其他任何地方重现时会出现的问题。到那时,您就可以查看DEV / QA和PROD之间还有什么不同,并专注于这些。以我的经验,通常是环境设置或某些配置有所不同,特别是对于PROD。而且我知道上面可能有很大的压力要解决此问题,因此有可能回滚到以前的工作状态,然后尝试在DEV中重现该问题,在DEV中提出解决方案,然后再尝试再次在PROD中?那就是我的建议。
取决于修复的种类。通常,没有出现在dev中的生产问题与数据库中的争夺有关。因此,应用一个更改数据库内容而不确定确切的“错误”的bug可能是大灾难的第一步。如果您可以轻松取回更改,则可以尝试一下。但是通常,如果您没有直接访问权限,则至少应有数据库的副本或整个服务器的副本以进行测试。具有正确特权的人仍然必须运行新代码,但至少没有数据丢失的风险。(但是有时数据库的大小或基础架构的复杂性会阻止这种设置)
这真的很困难,因为存在许多可能性,例如不同的设置,库和软件版本。
如果您对错误源的猜测是正确的,那么也许您可以先编写一段代码,然后用一些调试输出进行评估,然后再应用实际的错误修正。
当您的环境是PHP时,我已经做了一个关于如何考虑Java的演讲:http : //www.infoq.com/presentations/maintaining-production-java-apps
核心问题是相同的-了解可能的问题来排除故障,例如:网络,文件系统访问,日志文件,死锁等。此外,还要知道如何提出正确的问题:“系统停机”-“您具体做什么?意思是:网页运行缓慢,是否存在特定的错误消息,是否存在超时”,等等。
另外,还有一些工具可以使故障排除更加容易:用于网络故障排除的Wireshark绝对是最好的选择,值得学习。其他取决于您使用的操作系统。对于Windows,来自SysInternal(现在是Microsoft的一部分)的任何功能都很棒。对于Unix / Linux,请查看truss / strace。
在访问生产时,操作组应该知道如何使用这些工具/技术,或者您有一个与他们一起的业务案例以学习如何使用它们。之后,他们需要一组特定的故障排除协议才能在出现问题时运行,因此您可以脱机进行分析。