知识卡片
定位生产问题的三步法:事件→行为→结构
内容
把[[观察系统的三个层次:事件、行为、结构|事件/行为/结构三个层次]]用于实际定位生产问题,可以按顺序走三步。第一步,最初观察到的往往只是一个事件(比如高并发系统出现请求响应超时)——仅凭一个事件就制定解决方案,理由并不充分,需要继续深入分析。第二步,分析系统行为——判断这次请求超时是偶发的,还是响应时间逐步升高、最终导致超时;同时要把与这次超时相关的其他事件串联起来看,寻找一条可疑的链路(比如某台服务器日志短时间内暴涨、或某台服务节点CPU使用率突然飙升,都要纳入考虑范围);通过分析行为,通常能发现系统中一些异常或可疑实体、以及它们之间的交互模式——这种交互模式其实就是系统里的回路,回路长时间运行会形成特定的行为模式,一旦其中的不良趋势没有被及时调整,就可能导致负面事件浮现。第三步,做结构分析——在第二步基础上进一步分析出系统的组成要素及其交互关系(即系统的结构模型),因为结构决定了系统可能出现的行为和事件,从结构可以推导出存量、流量变化以及回路的运作机制,并验证这次事件是否真的与这个结构相吻合。只有走完这三步才能定位到问题的根本原因,否则很容易陷入治标不治本、甚至解决一个问题又引发另一个问题的境地——定位和解决问题的本质,要求我们对系统有足够深入的理解。可迁移启发:排查一次线上故障时,把复盘报告按”这次事故的表面事件是什么→背后的行为模式是什么(偶发还是渐进、涉及哪条可疑链路)→是什么结构性设计导致了这种行为模式会反复出现”这三段来写,比只写”发生了什么、怎么临时修复的”更能确保团队真正抓住了根因,而不是下次同一处结构继续制造类似的事件。
结构图:
flowchart TB
A["第一步:观察到的事件<br/>(如请求响应超时)"]
A --> B["第二步:分析系统行为<br/>(偶发还是渐进?串联可疑关联事件,找出可疑链路/回路)"]
B --> C["第三步:结构分析<br/>(组成要素+交互关系,验证事件是否与结构吻合)"]
C --> D["定位到根本原因<br/>(否则治标不治本,甚至引发新问题)"]
参考来源
- 位置:《架构师启示录:知识模型、落地方法与思维模式》第9章《系统维护》之"9.1.3 定位问题的三步法"(源文件:_epub-src/EPUB/xhtml/chapter13.xhtml)
- 结论依据:原文说明"第一步,在出现问题时,我们最初观察到的往往是一个事件……第二步,对系统行为进行分析……第三步是对系统进行结构分析……经过以上3个步骤,我们才能定位到问题的根本原因,否则很可能会出现治标不治本的问题,或在解决一个问题时引发另一个问题等", 直接支撑本卡关于定位生产问题三步法的结构图。
- 原始内容:某台服务器上的日志突然在短时间内变大,或者某一台服务节点的CPU使用率突然飙升,这都是可以纳入考虑范围的事件。