混沌工程实践:微软的多样化故障与实验优先级

系统在现实世界中会面临各种问题,包括错误的接线、极端的气温、船舶在恶劣天气中上下颠簸时低质量的用户数据输入等。这些会带来巨大的代价,项目延期、远离家人等。混沌工程的一项高级原则是在实验中引入现实世界的事件。

简单系统仅是冰山一角,由软件、硬件、抽象和服务提供商所组成的所有这些附加层次,都是影响我们所关注的系统行为的全局的一部分。许多现实世界所暴露出的事情之前是无法预料的。在设计和构建软件时,要深思熟虑地考虑接口、组件契约和服务等级协议,这已经是一项复杂的任务。考虑依赖链时,情况更加复杂。我们系统所依赖的一个个黑匣子组件,都会出现影响执行方式的状况,硬件故障、软件缺陷、被错误记录的程序、天灾人祸等。

当为生产系统交付混沌工程方案时,会遇到以下几种情况: 已知事件与预期后果、已知事件与意外后果、未知事件与意外后果。

软件更新可能出错的一些情况: 服务的版本存在错误,必须回滚或修复。服务存在缺陷,并且破坏了数据的持久状态,因此无法回滚以进入上一个已知的正确状态,部署过程因故中断,造成服务的新版本无法部署。部署过程因故中断,但在中断前存在问题的服务的新版本的部署速度过快,导致故障切换成本过高。以确状态情况的任意组合。

可以从三个角度定义故障优先级:事件发生的频率有多高?优雅地处理该事件的可能性有多大?事件发生的可能性有多大?上述问题的答案应基于产品或服务的业务需求。业务需求的可靠性目标的满足程度应与客户设定的期望相匹配。

考虑整个服务依赖链中预期的事件、耐受度以及即将到来的偶发威胁。对依赖进行威胁建模。要考虑每次故障都可能受多个依赖项的影响,依赖之间又互相依赖。

在设计混沌工程系统,并在孤立性故障、组合性故障和传递性故障之间进行选择时,使用为服务和依赖选择实验场景时所使用的优先级排序方法。一旦在解决单独依赖项方面取得进展,就可以开始考虑整个系统的运动,实验内部和外部每个运动部分的执行效果各不相同,并且会随机出现故障。

从小处着手,并将爆炸半径控制到最小。记住优先级,从执行最高优先级的实验开始。为紧急情况准备好行动预案。你所做的就是真实发生的事情,你只不过加快了这些事件的自然进程,以消除意外。对正确的事件进行优先级排序能让产品的混沌工程实践更加实用。

8966cc13f3458ac44c136a51b53685b8.jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值