故障演练在稳定性测试中的应用与实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 故障演练在稳定性测试中的
应用与实践
美团金融服务平台
2. 自我介绍
毛伟宁,2018年加入美团,
从事支付业务质量和稳定性保障相关工作,
故障演练、质量运营等专项主R。
2018
3. 线上故障发生时,故障处理的几个段位
4. 目录
01 业务介绍及面临的挑战
02 解决策略分析
03 故障演练介绍
04 故障演练实践
5. 业务介绍-用户视角的美团支付
线上支付场景
线下支付场景
6. 业务介绍-架构视角的美团支付
7. 面临的挑战-业务和系统规模大、稳定性要求高
业务承载量持续增加
系统复杂度不断提升
团队规模不断变大
数据来源于美团2021Q4财报
早中晚高峰特征明显
亿级用户 百万级商户
亿级日订单 上千个服务
......
高峰期1分钟不可用,就将产生严重线上故障。
8. 目录
01 业务介绍及面临的挑战
02 解决策略分析
03 故障演练介绍
04 故障演练实践
9. 解决策略-稳定性保障的常见策略
链路梳理
技术实现
监控报警
应急预案
流程规范
10. 解决策略-数据分析(找到突破点)
合计 70%
合计 67%
如果预案完备、监控报警健全、人员处理得当,
线上严重故障数量会不会减少呢?
11. 解决策略-理论与实践过程分析
•成熟性:软件产品避免由于软件故障而导致失效的能力;
•容错性:在软件出现故障或者违反指定接口的情况下,软件产品维持规定的性能级别的能力;
•易恢复性:在失效发生的情况下,软件产品重建规定的性能级别并恢复受直接影响的数据的能力。
提高发现问题能力和响应速度
故障发生
监控报警
人员应急
降低故障程度、缩小影响范围
预案处理
迭代能力:故障不再发生、或者快速响应
统计恢复
12. 目录
01 业务介绍及面临的挑战
02 解决策略分析
03 故障演练介绍
04 故障演练实践
13. 故障演练是什么?
混沌工程:是一门新兴的技术学科,它的初衷是通过
实验性的方法,让人们建立复杂分布式系统能够在生
产中抵御突发事件能力的信心。
--Principles of Chaos Engineering
故障演练之我见:是遵循混沌工程实验原理并结合业
务实践,模拟故障场景,沉淀故障预案,并验证其有
效性,从而帮助系统提升容错性和可恢复性的手段。
14. 故障演练的主要作用
验证平台健壮
性,验证已
知、防范未知
校验监控报警
有效性
考察故障处理
流程、人员应
急能力
15. 故障演练的整体方案
16. 人员应急通用预案
常见预案及关注项
人员应急:
• 网络问题、人员互备;
• ACK: Acknowledge,表示告知已收到。
通用预案:
• 机器禁用:宿主机故障、服务节点异常,服务发布异常;
• 服务回滚:服务发布后不符合预期,需要优先回滚止损再排查问题;
• 服务重启:服务节点异常,但是无法确定原因,可以通过重启尝试恢复;
• 服务扩容:请求量变大,服务容量不够,服务扩容。
17. 场景及预案-服务内部
常见问题及故障场景
外部依赖
自身功能缺陷、线程池等系统参数设置不合理、不具备容错能力;
导致订单错误(状态机不一致等)、订单丢失甚至系统不可用。
系统间调用
常见预案及关注项
• Bugfix、回滚
服务内部
• 主动GC
• 一致性检查(BCP、对账等);
• 自动补偿机制(业务重试、补单系统、对账补单等);
• 人工补偿机制(数据清洗、人工补单等)
18. 场景及预案-系统间调用
常见问题及故障场景
外部依赖
系统间调用
服务雪崩
服务内部
下游服务不可用
常见预案及关注项
• 超时机制:防止线程长时间等待;
• 熔断降级:采用备用逻辑或者功能丢弃。
• 限流:控制流速或者流量整形;
流量激增
19. 场景及预案-外部依赖之基础组件
常见问题及故障场景
外部依赖
系统间调用
常见预案及关注项
• 业务本身的容错补偿能力、主从切换、降级(链路梳理与
服务内部
依赖分级);
• 切换或者降级前确认:
1) 是否需要业务代码上线、配置变更;
2) 是否为单机部署,能否操作;
3) 操作的业务补偿机制等。
20. 场景及预案-外部依赖之机房、网络
常见问题及故障场景
网络问题可能导致业务超时、慢查询等,甚至产生因业务逻辑处理不当
导致的成功率下降等线上故障。
常见预案及关注项
机房:机房切换,分为业务维度的切换、包括基础组件在内切换两种。
1)单机房性能及容载力进行有效评估;2)经历一个线上高峰期;3)快速切换。
网络:
• 动态路由、丢包重传、自动补包、自动排序;
• 超时参数设置是否合理;
• 业务兼容重试、幂等、并发逻辑。
21. 故障注入核心原理
SDK接入方式
基础资源故障原理
• 依赖agent插件,作为一个go服务运行在root权限下,通过
执行脚本模拟故障。
故障类型 原理
杀实例
磁盘故障
网络故障
DNS故障 kill
DD命令
tc/iptables命令
篡改/etc/hosts
Java Agent机制
• 使开发者可以动态改写目标类底层字节码,
从而实现jvm层面的AOP。
• 需要注入的位置硬编码接入,注解方式或者调用API。
22. 演练环境
23. 监控报警
关注项
监控:
•关键节点和指标的监控埋点是否有效;
•监控阈值是否合理。
报警:
•是否配置报警;
•报警接收人;
•报警方式;
•报警升级机制等(短信、电话、上级)
24. 过程和结果观测
系统维度
业务维度
25. 故障周知
关注项
• 故障级别:故障定级标准;
• 谁来做通知;
• 故障通知形式;
• 故障通知的时间点;
• 故障周知范围及升级机制;
• 故障模板内容。
26. 故障处理SOP
27. 目录
01 业务介绍及面临的挑战
02 解决策略分析
03 故障演练介绍
04 故障演练实践
28. 平台能力建设
平台化演练
工具支持演练
人工组织演练
29. 人工组织演练
人工电话演练
通讯工具人工发报警
问题
•
•
•
•
人工成本高;
支持场景少;
演练方式缺乏真实感;
技术同学的演练参与度和实际
效果有限。
30. 工具支持演练
报警演练平台
提高演练平台易用性,降低演练成本;
31. 平台化演练-整体架构
优点
•
•
•
•
•
•
场景丰富;
功能健全;
形式多样;
支持手动演练和自动化演练;
报告可视化;
等等。
32. 常态化故障演练
•常态化演练:每周/月/季度针对所有团队全部演练一
次,避免遗忘生疏、加深印象。
•节假日前演练:如中秋国庆春节,集中演练基本功,
保障节假日值班。
•新人针对性演练:集中演练基本功,更快融入工作,
熟悉基本功操作。
33. 专项故障演练
职责划分
运营机制
结果统计 演练场景
与迭代 及计划
演练实施
34. 最终的成果展示
典型问题
2021年常态化应急+专项演练
演练次数
参与人次
• 重度依赖,无法降级;
• 预案缺失或者无效;
缺少监控、报警或阈值不合理;
• 故障导致的功能性缺陷;
1000+ 7000+ • • 系统容量问题;
演练达标率 发现问题数 • 系统流量分配不均等;
80%+ 100+ • 人员不会或者操作不熟练等。
故障演练最佳实践
20+
收获
• 有效提高了系统的容灾、容错能力
• 增强了员工的安全意识和故障应对能力
• 流程更加清晰、团队协作更加高效。
• 从而帮助系统稳定性显著提升。
35. 未来规划
丰富演练场景
演练自动化
演练智能化
36. 更多技术干货
欢迎关注“美团技术团队”