You are on page 1of 50

大规模混沌工程自动演练实践

演讲人:朱仕智

全球敏捷运维峰会 广州站
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 VM/K8S 丰富 是 差 低 简单易用、扩展性好、社区活跃

Chaos Mesh K8s 丰富 是 好 无 云原生、社区活跃

全球敏捷运维峰会 广州站
chaosblade介绍

全球敏捷运维峰会 广州站
chaosblade功能

全球敏捷运维峰会 广州站
企业场景开源共建

◆ HTTP超时能力目标
◆ fullGC
◆ 日志拥堵
◆ 调用点区分
◆ 全链路匹配

全球敏捷运维峰会 广州站
演练流程

全球敏捷运维峰会 广州站
新建演练效果图

全球敏捷运维峰会 广州站
三、依赖演练

◆ 死道友不死贫道
⚫ 依赖关系导致的蝴蝶效应
⚫ 弱依赖超时是否合理,熔断是否符合预期,异常是否被处理等
⚫ 强依赖太多,能否降级为弱依赖
⚫ ......

全球敏捷运维峰会 广州站
依赖演练关键点

◆ 能力目标
⚫ 对应用层外部依赖可以进行多策略演练,并断言强弱依赖

◆ 关键点
⚫ 应用元数据采集
⚫ 可视化的应用拓扑结构
⚫ 区分不同场景的同一个依赖
⚫ 强弱依赖关系标注

全球敏捷运维峰会 广州站
应用元数据采集

全球敏捷运维峰会 广州站
依赖关系标注

全球敏捷运维峰会 广州站
闭环逻辑

全球敏捷运维峰会 广州站
依赖演练效果

◆ 1200+次演练
◆ 接口依赖3000+个
◆ 2021五一演练发现问题136个

全球敏捷运维峰会 广州站
平台架构

全球敏捷运维峰会 广州站
大规模自动演练

全球敏捷运维峰会 广州站
常态化演练成本收益比合理吗?
质量类工作性价比要求天然更高

全球敏捷运维峰会 广州站
持续可靠

◆ 常用常新
⚫ 避免运动式可靠性保证运动
⚫ 将人工成本降到最低
⚫ 将覆盖面提升到最大

◆ 关键点
⚫ 自动化执行的流量和断言
⚫ 可用的环境

全球敏捷运维峰会 广州站
周期性自动演练机制

◆ 增量演练
⚫ 每天把新增的依赖全部演练一遍

◆ 全量演练
⚫ 每二周重复执行一遍
⚫ 变更:调用点的代码可能有变更,导致强弱依赖、降级处理等结论产生变化

全球敏捷运维峰会 广州站
自动演练流程

全球敏捷运维峰会 广州站
演练结论

◆ 效果数据
⚫ 不符合预期:占比73%
⚫ 符合预期:占比27%
◆ 问题
⚫ 不合理的强依赖
⚫ 单应用演练口径过严
⚫ 自动化测试平台覆盖不足
⚫ 没办法全线上化

全球敏捷运维峰会 广州站
是否可以全链路进行?

全球敏捷运维峰会 广州站
全链路依赖关系

全球敏捷运维峰会 广州站
全链路演练流量

全球敏捷运维峰会 广州站
全链路演练断言

全球敏捷运维峰会 广州站
全链路演练流程

全球敏捷运维峰会 广州站
命中率优化

◆ 命中率
⚫ 口径:用例经过目标接口比例
⚫ 问题:入口用例未必经过接口
⚫ 随机策略:40%左右

◆ 办法
⚫ 精准策略:利用trace反查
⚫ 命中率提升到90%以上
⚫ 剩余原因:缓存等逻辑

全球敏捷运维峰会 广州站
全链路自动演练效果

◆ 覆盖
⚫ 55个核心入口
⚫ 80%以上的应用

◆ 人工成本
⚫ 报告分析

全球敏捷运维峰会 广州站
故障注入攻防演练

全球敏捷运维峰会 广州站
故障处理慢

◆ 处理慢原因
⚫ 处理人为各系统开发,经验难以积累
⚫ 故障原因种类繁多
⚫ 没有预案
⚫ 恢复和验证困难

全球敏捷运维峰会 广州站
攻防演练流程

全球敏捷运维峰会 广州站
故障注入流程

全球敏捷运维峰会 广州站
积分例子

全球敏捷运维峰会 广州站
攻防演练关键点

◆ 培养混沌文化
◆ 时间和策略随机
◆ 信息干扰:异常栈、流量标识等

全球敏捷运维峰会 广州站
THANK YOU!

全球敏捷运维峰会 广州站

You might also like