开课吧孤尽T31训练营学习笔记-DAY30-面向失败架构

242 阅读3分钟

系统健壮性-面向失败设计

上一篇系统健壮性分享了系统健壮性的一般的方法,比如负载均衡、限流、服务降级等方案。这篇文档基于孤尽老师更高层次的思考,给出如何应对一些不可抗力的情况下,面向失败的机构设计。

一、不可抗力场景

网络抖动:甚至是断网,如何提示、恢复、切换;

服务超时:任何服务都要考虑超时没有返回的可能性;

弱点断电:多云,多地部署能力;

洪峰流量:流量打爆服务器后的架构健壮性。

二、面向失败设计

2.1 软件面临的风险

从面向对象角度来看,这还是面向功能或者业务视角的,是功能的性能、功能的容量、功能的稳定性。面向失败的设计,就是以“失败”为对象,天然为了失败而存在的设计思想。

软件如同人一样,在孕育及成长过程中,受先天基因及后天成长环境影响,都会遇到不同程度影响生命安全的问题。

在软件生命周期内,也会出现各式各样的问题,我们需要通过面向失败的设计,防范和监控已知的确定性风险及未知的不确定性风险:

  1. 任何环境都是不可信赖的
  2. 任何外部依赖接口都有可能出错的
  3. 任何异常都需要响应和处理;
  4. 任何行为都需要日志记录的
  5. 任何系统的上线都需要严酷的测试

2.2 健壮性测试

  1. 功能测试:想象用户一些可能行为,进行正确性验证
  2. 性能测试:系统能够提供的最大服务级别的能力
  3. 稳定性测试:确定系统长时间在正常压力情况下运行的有效性
  4. 混沌工程:确定线上系统故障的恢复能力

分支覆盖?

2.3 混沌工程

什么是混沌工程

混沌工程(chaos Engineering):是在分布式系统上进行实验的学科,是一种未雨绸缪的心态。有薄弱环节上,做到自我发现。特点是放置一个炸弹进去,控制爆炸半径,评估损伤和自我修复的能力。

混沌原则

在进行混沌工程实验是,可遵循以下原则,将有助于实验设计:

  1. 建立稳定状态的假设;
  2. 多样化现实世界事件;
  3. 在生产环境运行实验;
  4. 持续自动化运行实验;
  5. 最小化爆炸半径

混沌工程设计

识别业务系统的稳定性指标,并建立观测体系。

  1. 最小化爆炸半径:按照影响从小到大进行演练,控制演练业务的故障半径,防止从演练转化为线上事故;
  2. 在真实生产环境演练:可以从非在线逐步进行到线上环境
  3. 例行化演练:因为业务系统也是在持续变化,因此需要例行化、自动化进行演练
  4. 模拟现实中真实会发生的故障

混沌场景推荐

image.png

混沌工程执行流程

image.png

混沌平台

image.png

三、总结

学完这节课,我已经很混沌了。

这个思想确实很重要,在业务开发平稳后,确实要为系统的未来想一想,考虑一下系统的稳定性。