系统健壮性-面向失败设计
上一篇系统健壮性分享了系统健壮性的一般的方法,比如负载均衡、限流、服务降级等方案。这篇文档基于孤尽老师更高层次的思考,给出如何应对一些不可抗力的情况下,面向失败的机构设计。
一、不可抗力场景
网络抖动:甚至是断网,如何提示、恢复、切换;
服务超时:任何服务都要考虑超时没有返回的可能性;
弱点断电:多云,多地部署能力;
洪峰流量:流量打爆服务器后的架构健壮性。
二、面向失败设计
2.1 软件面临的风险
从面向对象角度来看,这还是面向功能或者业务视角的,是功能的性能、功能的容量、功能的稳定性。面向失败的设计,就是以“失败”为对象,天然为了失败而存在的设计思想。
软件如同人一样,在孕育及成长过程中,受先天基因及后天成长环境影响,都会遇到不同程度影响生命安全的问题。
在软件生命周期内,也会出现各式各样的问题,我们需要通过面向失败的设计,防范和监控已知的确定性风险及未知的不确定性风险:
- 任何环境都是不可信赖的
- 任何外部依赖接口都有可能出错的
- 任何异常都需要响应和处理;
- 任何行为都需要日志记录的
- 任何系统的上线都需要严酷的测试
2.2 健壮性测试
- 功能测试:想象用户一些可能行为,进行正确性验证
- 性能测试:系统能够提供的最大服务级别的能力
- 稳定性测试:确定系统长时间在正常压力情况下运行的有效性
- 混沌工程:确定线上系统故障的恢复能力
分支覆盖?
2.3 混沌工程
什么是混沌工程
混沌工程(chaos Engineering):是在分布式系统上进行实验的学科,是一种未雨绸缪的心态。有薄弱环节上,做到自我发现。特点是放置一个炸弹进去,控制爆炸半径,评估损伤和自我修复的能力。
混沌原则
在进行混沌工程实验是,可遵循以下原则,将有助于实验设计:
- 建立稳定状态的假设;
- 多样化现实世界事件;
- 在生产环境运行实验;
- 持续自动化运行实验;
- 最小化爆炸半径
混沌工程设计
识别业务系统的稳定性指标,并建立观测体系。
- 最小化爆炸半径:按照影响从小到大进行演练,控制演练业务的故障半径,防止从演练转化为线上事故;
- 在真实生产环境演练:可以从非在线逐步进行到线上环境
- 例行化演练:因为业务系统也是在持续变化,因此需要例行化、自动化进行演练
- 模拟现实中真实会发生的故障
混沌场景推荐
混沌工程执行流程
混沌平台
三、总结
学完这节课,我已经很混沌了。
这个思想确实很重要,在业务开发平稳后,确实要为系统的未来想一想,考虑一下系统的稳定性。