混沌工程平台ChaosBlade-Box
新版重磅发布
——蔡铭霞
ChaosBlade Maintainer
一、混沌工程是什么
2020 年 11 月,AWS 服务大面积故障,多个云服务受到影响,最终问题定位花费 4 小时,完全修复花费 15 小时。在不到一月时间里,谷歌出现了当年第三次大规模宕机,持续45 分钟,波及 20 亿用户,预估损失 170 万美元广告收入。
从早期的单机架构到微服务架构,再到现在的云原生架构,系统架构越来越复杂。在这样复杂的系统架构里如何快速定位问题,或将问题前置以提前暴露解决从而提高整个系统的韧性,变得尤为重要。
混沌工程是通过主动注入故障的方式来暴露系统薄弱点,从而提高系统韧性的一种方法。
云原生架构的原则可以与混沌工程原则实现多对多匹配。
以服务化原则为例,服务化的潜在挑战是服务如何治理,也可以转化为强弱依赖问题,即服务之间是强依赖还是弱依赖。混沌工程通过不断最小化其爆炸半径,从机器到应用再到某个接口,通过对应用接口进行故障注入来判断服务之间的调用是否正常,最终判断其依赖关系是强还是弱。
混沌工程的目标是打造韧性架构,包括韧性系统和韧性组织两个维度。
韧性系统包括冗余性、扩展性、不可变基础设施以及避免级联故障。比如,系统有多个单元或集群,对某单元或集群进行断网演练,通过整个系统是否能够自动扩展或自动扩缩容,是否能够正常提供服务来判断其是否具有冗余和扩展性。
韧性组织指高效交付效率、面向失败设计和应急响应机制。阿里内部主要通过“1-5-10”演练以及红蓝攻防演练来不断打造组织的韧性。
综上所述,混沌工程即通过主动注入故障的方式,提前发现系统薄弱点,推进架构改进,最后实现业务韧性。
混沌工程对于不同身份都能够带来不同的业务价值:对于价架构师而言,它可以验证系统架构的容错能力;对于开发或运维而言,它能够不断提高故障应急效率;对于测试人员而言,它能够提早暴露线上问题,降低故障复发率;对于产品和设计而言,它能够提高提升客户体验。
二、如何落地混沌工程
企业或业务如何快速落地混沌工程?
可以通过混沌工程实验实施工具 ChaosBlade。
ChaosBlade 提供了 3+4 环境、200+ 场景以及 3000 + 参数。3+4 环境指能够支持在 Linux 环境、Linux 环境的物理机或虚拟机上、 Docker 以及 K8S 环境下进行部署,支持 Java、C++、Node.js 等不同应用层的故障注入。
ChaosBlade 是一个端侧工具,在业务实际落地过程中还会遇到其他问题,比如如何方便地、可视化地进行故障注入,如何对多个集群进行故障注入,如何整体演练统计信息等。想要解决上述问题,需要在故障注入工具层上再加一层平台侧来管控和编排这些演练工具,从而帮助企业进行落地。
上图为 ChaosBlade 新版开源平台架构。主要分为前端用户界面交互层、后端逻辑处理层、部署在不同业务集群或业务主机上Agent 层以及端侧故障注入工具ChaosBlade 。
后端服务侧包括以下几个部分:
- 演练引擎:包括流量编排、安全管控、演练报告等功能。
- 演练执行:能够支持不同工具,不仅支持 ChaosBlade,也支持开源工具LitmusChaos 。
- 演练经验库:将演练编排沉淀成经验库,供其他人复用。
- 探针管理:支持主机和 K8S 不同环境下部署,并且能够对探针进行自动安装部署以及应用管理功能。
探针侧主要提供以下几个功能:
- 对外提供 API 接口。
- 与 server 侧进行注册建联。
- 与 server 端保持心跳。
- 上报 k8s 内 pod 数据。
- 作为演练命令下发通道。
上图为新版ChaosBlade 平台概览。此次新版ChaosBlade支持中英文切换、全局命名空间切换,提供了快速启动导航,能够对演练记录进行统计以及提供演练日志大屏。
演练空间指对演练进行管理与统计,并且可以进行演练编排和故障注入。演练场景罗列了支持的所有演练场景,演练经验库即将历史演练沉淀为经验库,探针管理会对对探针上报的数据在应用管理侧进行统一管理,以及对探针进行自动安装和卸载等管理,支持主机和 k8s 环境。一键迁移功能支持从社区版一键迁移到企业版。
应用管理支持主机和k8s两种环境。在 k8s环境下,能够主动收集 Pod 相关数据,根据 pod 标签判断其属于哪一些应用并进行自动分类,不再需要获取集群上所有 pod 信息或 content 信息再进行演练,无须手动填写参数,而是以自动填充或选择和筛选的方式取而代之。
演练场景包括k8s和主机,可以分为系统资源和 Java 应用资源。演练经验库能够将之前编排好演练沉淀为演练经验库,供其他用户复用。
新版ChaosBlade-Box 的演练流程如下:首先需要选择k8s 或主机演练,k8s 又分为应用和非应用演练。应用演练可以通过应用管理来筛选具体的应用,此处选择非应用。然后选择集群,再选择演练场景。演练场景包括两种,分别是节点上 CPU 满载以及节点上网络乱序。
演练可支持两种编排模式,分别是顺序执行和阶段执行。顺序执行指先执行 CPU 满载再对 CPU 满载进行恢复,再进行网络乱序并对网络乱序进行恢复,两种故障依次生效;阶段执行指同时进行 CPU 满载和网络乱序,执行生效后再进行恢复,两种故障同时生效。
执行演练后可查看演练结果,如上图。页面上方展示了演练整体进度,支持自动停止和手动触发两种方式终止演练,能够避免因为系统问题导致演练意外故障而无法停止演练。比如可以设置为 15 分钟后自动恢复,如果server 端与 agent 失联,即使平台侧无法点击手动恢复按钮,也可以通过设置好的 15 分钟自动恢复策略自动恢复。
页面展示的结果确认包括执行结果、错误信息、执行日志以及配置参数。
新版 ChaosBlade-box 还支持从社区版到企业版一键迁移,也可将数据同步到企业版。
三、新版优势是什么?
新版 ChaosBlade 与企业版进行了内核统一,其优势主要体现在以下三个方面:
①用户前端界面与企业版进行统一,支持更完善的中英文切换,并且支持命名空间切换。
②后端侧提供了更流畅的演练编排、更完善的应用管理以及更好的对探针的管控。此外,还包括多种故障恢复策略以保障安全可恢复,支持一键迁移到社区版。
③Agent 侧支持了多环境部署,支持不同环境演练通道,提供了更加完善的 API ,支持自动安装和卸载功能,能够主动收集数据并上报 server 端。