LabHub
学习 学习路径 课程

面对陌生系统

先把影响范围画出来

在 LabHub 中继续学习

一句话总结

进行任何变更之前,都必须能在纸上画出谁会受到影响、什么会受到影响。如果画不出来,就说明还没有准备好执行这次变更。

概念图: 谁会受到影响、什么会受到影响 · 1. 谁会调用这个组件(上游) · 2. 它会调用什么(下游) · 3. 是否共享状态

为什么需要它

以“只改一行配置就行”开头,最后却让服务停止的事故之所以反复发生,是因为没有人确认这一行会触及什么。在陌生系统中尤其如此:系统对我们是新的,对客户却可能已经运行了十年,其间积累了许多从未被记录的依赖。

描绘影响范围的四个问题

1. 谁会调用这个组件(上游) 即使只修改一个配置文件,也必须知道哪些系统会向该进程发送请求。访问日志中的源 IP 分布、ss -tnp 显示的连接对端、以及防火墙规则,都是线索。

2. 它会调用什么(下游) 变更结果可能把负载集中到下游。延长超时就是典型例子:我们以为只是留出了更多余量,下游连接却会因此被占用更久。

3. 是否共享状态 要确认是否还有其他系统使用同一个数据库、文件系统或缓存。共享状态很少被画进架构图,事故却常常发生在这里。

4. 什么时候安全 要考虑批处理运行时间、截止日期、结算日。即使技术上安全,时间选错也会造成事故。这一点只有询问客户才能知道。

先写回滚方案

变更计划的第一行不应是变更内容,而应是如何回滚

변경:   /etc/app/config.yml 의 pool_size 10 → 30
백업:   cp config.yml config.yml.2026-08-20
되돌림: cp config.yml.2026-08-20 config.yml && systemctl reload app
확인:   curl -s localhost:8080/healthz 가 200, 에러율 5분간 관찰
소요:   되돌림 2분

如果能够明确写出“回滚:2 分钟”,这次变更才可以执行;写不出来,就说明时机未到。

预先确定观察窗口

变更后要观察到什么时候,应提前决定。只看 5 分钟就离开,那么 10 分钟后发生的问题会被排除在原因候选之外;但也不可能无限期守着,因此应明确写成“观察 30 分钟,关注三个指标:错误率、延迟、队列长度”。

在实际项目中

接下来的实验要做什么

你将接手一个既没有架构图、也没有 Wiki 的客户系统。手头只有两个配置文件、访问日志、轮转设置和 crontab。

需要从这些材料中亲自找出上游、下游、共享状态与批处理窗口,并制定一个把回滚方案写在最前面的变更计划。评分器会故意修改配置,再运行你的回滚脚本,确认是否恢复到原始状态。