混沌工程-基于ChaosBlade的故障注入
一、概述
随着敏捷开发、DevOps、微服务、云原生架构和治理的出现,应用的交付能力大大提升,但系统的复杂度也日益增加,在业务快速迭代的同时,如何保障业务持续的高可用性和稳定性面临着很大的挑战。与此同时混沌工程随着云原生的发展逐渐进入大家的视野,混沌工程通过主动注入故障的方式,可以很好地发现和解决在云原生化过程中的高可用问题,提前发现系统的薄弱点,推进架构的改进,最终实现业务韧性。
二、现状
随着办公应用系统的逐渐增多,面临的维护工作也逐步增大,如何在保证系统的稳定运行情况下,提前发现系统的薄弱点是至关重要的。目前我们主要采用zabbix监控及人工定期巡检的方式,虽然可以提前发现危险点,但是效果不明显,且依赖于人工,无法自动化。通过引入混沌工程主要改善以下几个方面:
验证监控告警的时效性
通过对系统注入故障,验证监控指标是否准确,监控维度是否完善,告警阈值是否合理,告警是否快速,告警接收人是否正确,通知渠道是否可用等,提升监控告警的准确和时效性。
定位与解决问题的应急能力
通过故障突袭,随机对系统注入故障,考察相关人员对问题的应急能力,以及问题上报、处理流程是否合理,达到以战养战,锻炼人定位与解决问题的能力
衡量服务的容错能力
通过模拟调用延迟、服务不可用、机器资源满载等,查看发生故障的节点或实例是否被自动隔离、下线,流量调度是否正确,预案是否有效,同时观察系统整体的 QPS 是否受影响。在此基础上可以缓慢增加故障节点范围,验证上游服务限流降级、熔断等是否有效。最终故障节点增加到请求服务超时,估算系统容错红线,衡量系统容错能力。
验证容器编排配置是否合理
通过模拟杀服务 Pod、杀节点、增大 Pod 资源负载,观察系统服务可用性,验证副本配置、资源限制配置以及 Pod 下部署的容器是否合理。
三、解决方案
通过使用阿里巴巴开源的混沌测试工具ChaosBlade来完成故障的注入。ChaosBlade 是一款遵循混沌工程实验原理,建立在阿里巴巴近十年故障测试和演练实践基础上,并结合了其集团各业务的最佳创意和实践,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具。
Chaosblade 可直接编译运行,cli 命令提示使执行混沌实验更加简单。目前支持的演练场景有操作系统类的 CPU、磁盘、进程、网络,Java 应用类的 Dubbo、MySQL、Servlet 和自定义类方法延迟或抛异常等以及杀容器、杀 Pod。
四、未来规划
先完成传统架构操作系统、应用和数据库方面的故障注入,后续对微服务的容错能力和编排配置合理性进行验证。
? 通过ChaosBlade工具完成操作系统层面的故障注入,如CPU跑满、内存溢出、磁盘空间不足、网络延时,验证告警机制、系统的容错能力、主备切换是否正常等。
? 通过ChaosBlade工具完成JAVA类应用故障注入,如返回值变更、方法执行延迟,抛异常验证应用程序的健壮性。
? 通过ChaosBlade工具完成微服务故障注入,创建 docker 相关的混沌实验,比如杀容器,容器网络延迟、丢包,杀容器里的进程,验证容错能力和编排配置是否合理。
混沌工程的目标建设韧性架构,一部分是韧性系统,比如具备冗余性、扩展性、降级熔断、故障隔离等,避免级联故障,构建容灾容错的韧性系统;另一部分是韧性组织,包含高效交付、故障预案、应急响应等组织协同建设。高度韧性的系统也会出现预期之外的故障,所以韧性的组织能弥补韧性系统缺失的部分,通过混沌工程构建极致的韧性架构。