《高可用恢复思路》笔记
遇到线上问题,经常陷入一个误区:一定要找到问题的根因(root cause)。但实际上对线上应用而言,最重要的是恢复可用性,所以在开发设计环境除了完成功能性需求以外,还需要加入非功能性设计的需求:
- 限流保护。抵挡来自突发流量冲垮整个集群。
- 降级保护,对调用的服务接口保持警惕,其各种因素导致不可用,可以对齐降级,从而确保核心功能可用。
- 削峰填谷(traffic shaping),不因突发数据来袭,造成任务消费陡增,造成调用系统的连串抖动。
这些基本的系统保护,是应对未来的各种突发不确定事件的高可用思考。
以上描述的是问题的应对机制设计,问题的发现机制,也需要结构化地考虑,体系化地建设:
- 发现机制,是我们的眼睛,也是基础。
- 监控主指标,需要找对业务的主要指标,常见的主指标一般是:RT(响应时间)、总量、成功量、失败量、成功率。
- 主指标有异常,还要有细分维度(即结果还可以内部 group by aggregation)。
- 快速恢复
- 根据监控快速寻找问题发生的方向和位置。
- 找对恢复的人、恢复的预案。
- 倾向于选择成本低的恢复手段。—— 并不是所有的恢复都用大招(熔断、限流),大招一定有损且有风险
- 最后执行恢复
- 一般我们都会对恢复预案做演练,避免恢复预案失效。或者因执行了预案产生更大的问题。
- 执行恢复动作要谨慎。一切线上操作都为变更,都有风险。
经验告诉我们:线上问题70%来自变更,找到变更快速回滚是第一优先级,其余30%的问题需要做好预案及防护,快速对应不同的线上突然事件。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.