1、自我介自我介绍绍ChaosBlade:云原生架构下的混云原生架构下的混沌沌 工程探索与实践工程探索与实践肖长军阿里巴巴技术专家自我介绍自我介绍 肖长军,花名 穹谷,阿里巴巴高可用架构团队 多年应用性能监控研发和分布式系统高可用架构经验 阿里云 AHAS、APDS 产品核心开发 开源项目 ChaosBlade 负责人 混沌工程布道师自我介自我介绍绍目录目录1.混沌实验工具 ChaosBlade2.面向云原生的混沌工程实践3.混沌实验平台 AHAS Chaos自我介自我介绍绍阿里巴巴混沌工程演进阿里巴巴混沌工程演进2012EOS?噰2012?2018ACP2016MonkeyKing?2015!2
2、0192018?$+$62019?自我介自我介绍绍ChaosBlade 开源的背景开源的背景上手难度大难于控制 爆炸半径使用方式不统一 平台适配难度大缺少实验模型 场景难于沉淀缺少场景规范 很难扩展场景能力分散自我介自我介绍绍ChaosBlade 的定位与特点的定位与特点ChaosBlade(混沌之刃)是一款遵循混沌实验模型,简单易用,功能强大的混沌实验工具Github 地址:https:/ 场景丰富度高 使用简洁,易于理解 动态加载,无侵入 场景扩展方便自我介自我介绍绍ChaosBlade 的基石的基石-混沌实验模型混沌实验模型实验靶点:实验的组件实验范围:集群、机器、Pod规则匹配器:匹配
3、条件实验行为:具体执行的实验规则TargetScopeMatcherAction简洁简洁,层次清晰通俗易懂 四层,边界清晰通用通用,覆盖目前所有故障场景基础资源、应用、容器或 serverless 架构易实现易实现,实验场景共建简单 定义清晰的接口规范语言、领域无关语言、领域无关可以扩展多语言、多领域实现自我介自我介绍绍ChaosBlade 丰富的实验场景丰富的实验场景基础资源应用服务容器服务云平台chaosblade-exec-oschaosblade-exec-jvmchaosblade-exec-cpluschaosblade-exec-nodejschaosblade-exec-gol
4、angchaosblade-exec-dockerchaosblade-exec-k8schaosblade-exec-aliyunchaosblade-exec-awskubernetesECSOSSFCrocketmq/notify dubbo/hsf/httpService Mesh网关监控度量分布式跟踪分布式事务消息RPC 框架服务发现缓存熔断限流定时任务web容器数据库语言本身druid/tddl/mysql/postgresqlnacos tair/redis sentinel quartzservletdubbo/hsf scgateway prometheus eagleeye
5、 seataCPU 负载、内存占用、网络延迟/丢包/阻塞、杀进程、宕机、重启、磁盘填充、IO Hang、IO burn、shell 脚本调用延迟、异常、超时打标识别投递延迟、异常、超时、重发调用延迟、异常、超时调用延迟、异常、超时、修改返回值限流失效、异常请求延迟、异常连接池满、调用延迟、异常动态脚本能力(java&groovy),内存溢出,进程 CPU 负载,指定类和方法做延迟、异常、修改返回值、修改参数同基础资源场景、删、停容器杀 POD、停止 POD、kubelet 异常、断网、删容器、容器服务异常、etcd 异常等;容器内应用进程、基础资源场景自我介自我介绍绍ChaosBlade 简洁
6、易用简洁易用完善的命令提示CLI 方式执行Web 方式执行自我介自我介绍绍ChaosBlade 整体架构设计整体架构设计 开箱即用,无需安装 支持命令提示 所有变量参数化 所有参数规范化 模块化,支持动态扩展 对象化,方便管理基础资源 演练执行器K 8 s 演练 执行器命令初始化Yaml 解析器模型实现 解析器CLI 命令 转换器命令注册(Cobra)实验模型对象Name Desc NoArgs RequeiredName ShortDesc LongDesc Example Actions Flags PreExecutorName ShortDesc LongDesc Example Ma
7、tchers Flags Executor解 析Java YamlJava 执行器C+YamlC+执行器自我介自我介绍绍ChaosBlade 实践案例实践案例blade create mysql delay-time 600-database demo-table d_discount-sqltype select-effect-percent 50实验场景:数据库调用延迟监控指标:慢 SQL 数,告警信息期望假设:慢 SQL 数增加,钉钉群收到慢 SQL 告警混沌实验:对 demo-provider 注入调用 mk-demo 数据库延迟故障 监控指标:慢 SQL 数增加,钉钉群收到告警问题排
8、查:通过 ARMS 慢调用链路排查备注:应用架构拓扑图来自于阿里云 AHAS 产品 告警和链路跟踪来自于阿里云 ARMS 产品自我介自我介绍绍ChaosBlade 实践案例实践案例实验场景:数据库调用延迟监控指标:慢 SQL 数,告警信息期望假设:慢 SQL 数增加,钉钉群收到慢 SQL 告警混沌实验:对 demo-provider 注入调用 mk-demo 数据库延迟故障 监控指标:慢 SQL 数增加,钉钉群收到告警问题排查:通过 ARMS 慢调用链路排查备注:应用架构拓扑图来自于阿里云 AHAS 产品 告警和链路跟踪来自于阿里云 ARMS 产品自我介自我介绍绍混沌工程的价混沌工程的价值值流
9、程人员验证系统的高可用性-架构师 提升故障的应急效率-开发&运维提早暴露线上问题,降低故障复发率-测试提升用户体验-产品&设计系统韧性-提升系统容错、容灾能力基础能力-具备可监控、可灰度、可回滚运维高可用-提升监控运维系统的高可用能力故障应急-故障等级划分的合理性,联系人的有效性,紧急预案的可行性故障复盘,故障统计,问题持续演练验证-故障管理自我介自我介绍绍云原生时代下,混沌工程的价值是什么?云原生时代下,混沌工程的价值是什么?自我介自我介绍绍云原生架构下的稳定性挑云原生架构下的稳定性挑战战云设施云设施微服务微服务容器容器服务网格服务网格Serverless自我介自我介绍绍云原生时代下,通过混
10、沌工程推进云原生时代下,通过混沌工程推进“云原生云原生”化化自我介自我介绍绍面向云原生场景面向云原生场景的的 ChaosBlade 实现方实现方案案ChaosBlade CRChaosBlade OperatorPodContainerChaosBladeVolumeChaosBlade PodChaosBladeNodeapiVersion:chaosblade.io/v1 kind:ChaosBlademetadata:name:cpu-load spec:experiments:-scope:nodetarget:cpu action:loaddesc:“cpu 50%load”flag
11、s:-name:cpu-percent value:“50”applyscope:nodescope:containerscope:podmountsidecar声明式实验场景配置自我介自我介绍绍面向云原生架构面向云原生架构的的 ChaosBlade 实践案实践案例例实验场景:随机删除业务 Pod,验证业务的稳定性 监控指标:业务指标和 Pod 数期望假设:业务不受影响,Pod 副本数在预期之内混沌实验:随机删除包含 system=demo 标签的 Pod,同类 Pod 删除数量为 1 验证结果:业务受影响,不符合预期apiVersion:chaosblade.io/v1 kind:Chaos
12、Blademetadata:name:random-delete-pods spec:experiments:-scope:pod target:pod action:deletedesc:“delete business pods randomly”flags:-name:mode value:random-name:countvalue:“1”Matchers:-name:selectorvalue:“system=demo”-name:groupKey value:“app”自我介自我介绍绍混沌实验平混沌实验平台台 AHAS Chaos自我介自我介绍绍AHAS Chaos 平台设计理念平
13、台设计理念集成集成&被集成被集成操作简洁操作简洁编排灵活编排灵活专家经验专家经验自我介自我介绍绍AHAS Chaos 平台架构设计平台架构设计上层业务平台模块流程引擎底层能力基础设施日常 演练突 袭 演 练攻 防 演 练资 损 演 练上 云 演 练权限管理机器集群管理应用管理标签管理演练空间演练管理演练运行演练通知演练推荐演练计划场景分类场景检索场景扩展场景配置演练报表流程编排流程执行节点扩展小程序ChaosBlade应用高可用服务 AHAS阿里云 ACK自建的 Kubernetes阿里云 ECS非 ECS自我介自我介绍绍面向云原生架构面向云原生架构的的 AHAS Chaos 实践案例实践案例实验场景:调用数据库延迟,验证 Pod 的水平扩容能力 监控指标:业务 RT 和 Pod 数期望假设:业务 RT 会短暂的升高,但很快恢复混沌实验:对指定的业务 Pod 做数据库端口访问延迟自我介绍自我介绍