在分布式系统架构下,服务组件之间的调用链路和访问关系愈发的复杂,同时很难评估单个服务组件故障对整个系统的影响。监控告警的不完善导致发现问题、定位问题难度增大,同时业务和技术迭代快,如何持续保障系统的稳定性和高可用性受到很大的挑战。为此,混沌工程的出现显得尤为重要,在可控范围或环境下,通过故障注入,来持续提升系统的稳定性和高可用能力,提高业务连续性。
1、混沌工程初识
1.1 混沌工程介绍
混沌工程(Chaos Engineering)是一种在分布式系统上进行由经验指导的受控实验,观察系统行为并发现系统弱点,以建立对系统在规模增大时因意外条件引发混乱的能力和信心。它的目标是提高系统对不确定事件的抵御能力。
混沌工程是在分布式系统上进行的实验科学,旨在提高系统容错性,建立系统抵御生产环境中发生不可预知问题的信心。
混沌工程最早是由Netflix公司工程师将系统迁移到AWS过程中,为保证EC2实例故障不会对业务造成影响,创建了Chaos Monkey,会随机终止在生产环境中运行的EC2实例。工程师可以快速了解他们正在构建的服务是否健壮,有足够的弹性,可以容忍计划外的故障。至此,混沌工程开始兴起。在国内像阿里巴巴这样的互联网公司对混沌工程的探索和实践也有十几年的时间,并有提供一些开源的混沌工程平台比如Chaos Blade。[1]

了解了混沌工程的发展历程,再来看看混沌工程在分布式基础架构下能做什么,带来什么样的价值。从系统产品的角色和应用场景两个不同角度来看,混沌工程能够验证系统稳定性和可靠性,增强系统的可预见性和可预测性。[2]
- 混沌工程对系统开发不同角色的提升
- 对于系统和应用架构师,可以验证系统架构的容错能力
- 对于运维和开发,可以提升故障的应急效率,实现故障的及时告警、精确定位和快速恢复
- 对于测试,从系统架构角度进行测试,弥补未知场景测试的空白
- 对于产品和设计,通过测试查看产品的表现,提升客户的体验
- 混沌工程的应用场景
- 容灾能力测试:通过故障注入,验证个别组件故障时对整个系统的影响,以及限流降级、熔断、切换、故障转移等应急手段的有效性;
- 微服务强弱依赖治理:在被调服务注入和去除故障中,观察主调服务的指标表现,获得核心服务和非核心服务之间的依赖关系和耦合度,对于不符合预期依赖的进一步优化;
- 验证系统配置的合理性:通过模拟系统资源的可用性,观察系统服务配置、副本配置和资源限制的合理性
- 监控告警:通过故障注入检测监控指标是否准确、监控维度是否完善、告警阈值是否合理、告警信息的及时性等;
- 应急演练:通过红蓝对抗等真实场景下的演练,验证相关问题处理的应急能力、应急预案和应急流程是否完善
1.2 混沌工程五大原则

在开发混沌工程实验时,牢记以下原则,将有助于实验的设计。
- 建立稳定状态的假设:一是定义能直接反应业务运行状态的指标,比如交易TPS和响应时间变化等;二是故障触发时能够对系统变化做出预期的反应及指标变化。
- 用多样的现实世界事件做验证:引入真实世界中存在的且频

本文介绍了混沌工程的概念、发展历史、在分布式系统中的应用价值,包括验证系统稳定性、提升故障应对能力、监控告警优化等方面。重点讲解了混沌工程的五大原则、成熟度模型和实践流程,以及阿里巴巴开源的ChaosBlade平台的使用案例。
最低0.47元/天 解锁文章
432

被折叠的 条评论
为什么被折叠?



