从实验到文化 - “混沌日”与持续混沌
第一部分:锻炼团队的“免疫系统” - 混沌日 (Game Day)
什么是“混沌日”?
混沌日是一场有计划、有组织的演习活动。在活动中,团队成员们齐聚一堂(无论是线上还是线下),在一个受控的环境中(理想情况是生产环境,但从预生产环境开始是更安全的选择),主动触发一次模拟的真实故障场景。它就像一次针对技术团队和系统的消防演习。
它的价值何在?
混沌实验不仅仅测试机器,它同样也测试人和流程。
- 检验“人”: 在模拟的故障压力下,On-call 工程师是否知道该联系谁?开发者能否快速定位问题?团队之间的沟通是否顺畅?
- 检验“流程”: 我们的监控仪表盘是否足够清晰,能帮助我们快速发现异常?我们的告警是否能准确触达正确的人?我们的应急预案(Runbook)是否清晰、有效且没有过时?
- 建立“肌肉记忆”: 通过反复演练,团队成员会对故障响应流程越来越熟悉,从而在真正的危机到来时,能够减少恐慌,更有条不紊地进行处理。
如何组织一次成功的混沌日
一次成功的混沌日,需要周密的计划、执行和复盘。
1. 计划阶段 (Before)
- 确定范围和假设: 选择一个具体的、有意义的故障场景。例如:“我们的核心数据库主节点发生故障切换”。然后,提出一个关于系统和团队响应的假设:“我们假设,数据库的故障切换将在2分钟内自动完成,应用层会短暂报错后自动重连,并且相关的业务指标告警会立即通知到数据库团队和核心业务团队。”
- 召集参与者:
- 执行者: 负责触发故障的 SRE 或混沌工程师。
- 响应者: 相关的 On-call 工程师、核心服务的开发者。
- 观察者/主持人: 负责记录整个过程、把控节奏,但不直接参与响应。
- 准备工具: 编写好要执行的 Chaos Mesh YAML 文件;打开所有相关的监控仪表盘;确保沟通渠道(如 Slack/Teams 频道)已准备就绪。
- 发布通知: 提前向所有相关的利益方(包括产品、运营等)发布通知,告知演习的时间和可能存在的(受控)风险。
2. 执行阶段 (During)
- 集结“作战室”: 所有参与者进入一个共同的会议室或在线会议。
- 确认稳定状态: 在注入故障前,共同确认当前系统的各项指标均处于正常状态。
- 注入故障: 主持人宣布开始,由执行者