容错主题:这次大考,关键在“心跳”与“错误预算”。盯住 SLO,不被重试风暴拖垮,才是真的稳。
今日要点
- 错误预算:
Error Budget = 1 - SLO;SLO 99.9% ⇒ 本月预算约 43 分钟 - 心跳策略:间隔、超时、阈值要成体系;避免误判导致无谓切换
- 故障优先:与其追 100% 可用,不如盯 MTTR,练“快恢复”
- 观测基线:Metrics/Logs/Traces 三件套必须可追可证
- 变更即风险:发布窗口、金丝雀、回滚路径要事先走通
- 错误预算:
快速术语
- 心跳 Heartbeat:定期探测活性;建议“超时 > 3×RTT + 抖动”
- 重试抖动:指数退避 + 随机抖动,防止“同步雪崩”
- 容错与降级:不影响核心路径的能力先降级再修复
指标与公式
- 可用性:
A = 1 - (故障时间 / 总时间) - MTTR/MTBF:越短的 MTTR 对用户体感提升最大
- 重试策略:
backoff = min(base * 2^n, cap) + jitter
- 可用性:
实战清单(5 分钟过一遍)
- 健康检查:区分 liveness/readiness;业务探针要能发现依赖异常
- 超时边界:每条调用链明确超时与预算分配,端到端不超 SLO
- 熔断与限流:并发上限、排队超时、拒绝策略统一配置
- 数据降级:缓存/只读/延迟一致性预案,关键读写各一条兜底路
- 回滚按钮:一键回滚与数据回退脚本可随时演练
常见坑
- 误把“健康 = 进程存活”;忽略依赖/资源枯竭
- 重试无上限导致放大故障;批量任务与高峰重叠
- 多机房心跳漂移引发抖动切换;时钟漂移未对齐
小练兵(今天就做)
- 对一个核心接口:开启金丝雀 5% 流量 → 人工注入 300ms 延迟 10 分钟 → 观察 p95/p99、错误率、重试量与熔断触发 → 记录 MTTR 与回滚耗时
工具建议
- 压测/混沌:k6/Vegeta + Chaos Mesh/Litmus
- 可观测:OpenTelemetry + Prometheus + Loki + Tempo/Grafana
结语
- 容错玩的不是惊险,而是把“心跳”和“预算”玩明白。先可观测,后可控,再可恢复。