Professional Documents
Culture Documents
3 朱仕智 大规模混沌工程自动演练实践
3 朱仕智 大规模混沌工程自动演练实践
演讲人:朱仕智
全球敏捷运维峰会 广州站
1 混沌工程价值探讨
2 去哪儿网混沌工程平台
3 大规模自动演练
4 故障注入攻防演练
全球敏捷运维峰会 广州站
混沌工程价值探讨
全球敏捷运维峰会 广州站
喜闻乐见的吃瓜
全球敏捷运维峰会 广州站
复杂的系统群
全球敏捷运维峰会 广州站
不可靠的基础设施
全球敏捷运维峰会 广州站
常见故障原因
全球敏捷运维峰会 广州站
混沌工程介绍
◆ 混沌工程概念
In software development, a given software system's ability to tolerate failures
while still ensuring adequate quality of service—often generalized as
resiliency—is typically specified as a requirement. However, development teams
often fail to meet this requirement due to factors such as short deadlines or lack
of knowledge of the field. Chaos engineering is a technique to meet the
resilience requirement.
◆ 混沌工程目标
⚫ 建立对系统抵御生产环境中失控条件的能力以及信心。
⚫ 把不确定变确定。
全球敏捷运维峰会 广州站
混沌工程的收益
全球敏捷运维峰会 广州站
去哪儿网混沌工程平台
全球敏捷运维峰会 广州站
混沌工程的最佳实践是随机攻防演练吗?
功能支持 ≠ 实践模型
全球敏捷运维峰会 广州站
应用架构层次
全球敏捷运维峰会 广州站
混沌工程实践路径
全球敏捷运维峰会 广州站
一、关机演练
◆ 能力目标
⚫ 同一机房某业务线所有服务节点全部关机(单次1k节点以上)
◆ 关键点
⚫ 机房聚合信息查询,方便应用改造
⚫ 自动建立沟通群,进度周知
⚫ 真实关机
⚫ 接入告警,告警事件关联推送
⚫ 虚拟机开机后关联服务自动恢复
全球敏捷运维峰会 广州站
关机演练实现
◆ 控制维度
⚫ 机房
⚫ 应用
⚫ 机器
◆ 技术
⚫ openstack API
⚫ saltstack
⚫ 自研控制面
全球敏捷运维峰会 广州站
关机演练效果
◆ 机房演练
⚫ 49次
⚫ 4000+机器
⚫ 500+应用
⚫ 问题10+个/次
◆ 关机演练
⚫ 71次
⚫ 3000+机器
⚫ 250+应用
全球敏捷运维峰会 广州站
二、应用演练
◆ 能力目标
⚫ 对所有应用可以选择多策略故障注入
◆ 关键点
⚫ 线上环境
⚫ 可靠的注入工具
⚫ 丰富的演练策略
⚫ 生效面可控
全球敏捷运维峰会 广州站
注入工具技术选型
ChAP VM 丰富 否 好 高 实验参照对比
全球敏捷运维峰会 广州站
chaosblade介绍
全球敏捷运维峰会 广州站
chaosblade功能
全球敏捷运维峰会 广州站
企业场景开源共建
◆ HTTP超时能力目标
◆ fullGC
◆ 日志拥堵
◆ 调用点区分
◆ 全链路匹配
全球敏捷运维峰会 广州站
演练流程
全球敏捷运维峰会 广州站
新建演练效果图
全球敏捷运维峰会 广州站
三、依赖演练
◆ 死道友不死贫道
⚫ 依赖关系导致的蝴蝶效应
⚫ 弱依赖超时是否合理,熔断是否符合预期,异常是否被处理等
⚫ 强依赖太多,能否降级为弱依赖
⚫ ......
全球敏捷运维峰会 广州站
依赖演练关键点
◆ 能力目标
⚫ 对应用层外部依赖可以进行多策略演练,并断言强弱依赖
◆ 关键点
⚫ 应用元数据采集
⚫ 可视化的应用拓扑结构
⚫ 区分不同场景的同一个依赖
⚫ 强弱依赖关系标注
全球敏捷运维峰会 广州站
应用元数据采集
全球敏捷运维峰会 广州站
依赖关系标注
全球敏捷运维峰会 广州站
闭环逻辑
全球敏捷运维峰会 广州站
依赖演练效果
◆ 1200+次演练
◆ 接口依赖3000+个
◆ 2021五一演练发现问题136个
全球敏捷运维峰会 广州站
平台架构
全球敏捷运维峰会 广州站
大规模自动演练
全球敏捷运维峰会 广州站
常态化演练成本收益比合理吗?
质量类工作性价比要求天然更高
全球敏捷运维峰会 广州站
持续可靠
◆ 常用常新
⚫ 避免运动式可靠性保证运动
⚫ 将人工成本降到最低
⚫ 将覆盖面提升到最大
◆ 关键点
⚫ 自动化执行的流量和断言
⚫ 可用的环境
全球敏捷运维峰会 广州站
周期性自动演练机制
◆ 增量演练
⚫ 每天把新增的依赖全部演练一遍
◆ 全量演练
⚫ 每二周重复执行一遍
⚫ 变更:调用点的代码可能有变更,导致强弱依赖、降级处理等结论产生变化
全球敏捷运维峰会 广州站
自动演练流程
全球敏捷运维峰会 广州站
演练结论
◆ 效果数据
⚫ 不符合预期:占比73%
⚫ 符合预期:占比27%
◆ 问题
⚫ 不合理的强依赖
⚫ 单应用演练口径过严
⚫ 自动化测试平台覆盖不足
⚫ 没办法全线上化
全球敏捷运维峰会 广州站
是否可以全链路进行?
全球敏捷运维峰会 广州站
全链路依赖关系
全球敏捷运维峰会 广州站
全链路演练流量
全球敏捷运维峰会 广州站
全链路演练断言
全球敏捷运维峰会 广州站
全链路演练流程
全球敏捷运维峰会 广州站
命中率优化
◆ 命中率
⚫ 口径:用例经过目标接口比例
⚫ 问题:入口用例未必经过接口
⚫ 随机策略:40%左右
◆ 办法
⚫ 精准策略:利用trace反查
⚫ 命中率提升到90%以上
⚫ 剩余原因:缓存等逻辑
全球敏捷运维峰会 广州站
全链路自动演练效果
◆ 覆盖
⚫ 55个核心入口
⚫ 80%以上的应用
◆ 人工成本
⚫ 报告分析
全球敏捷运维峰会 广州站
故障注入攻防演练
全球敏捷运维峰会 广州站
故障处理慢
◆ 处理慢原因
⚫ 处理人为各系统开发,经验难以积累
⚫ 故障原因种类繁多
⚫ 没有预案
⚫ 恢复和验证困难
全球敏捷运维峰会 广州站
攻防演练流程
全球敏捷运维峰会 广州站
故障注入流程
全球敏捷运维峰会 广州站
积分例子
全球敏捷运维峰会 广州站
攻防演练关键点
◆ 培养混沌文化
◆ 时间和策略随机
◆ 信息干扰:异常栈、流量标识等
全球敏捷运维峰会 广州站
THANK YOU!
全球敏捷运维峰会 广州站