混沌工程:建立稳定状态的假设

微服务的稳定性测试没有明确的断言(给定一个特定的条件,系统会输出一个特定的结果),怎么通过一次一次的实验来找出系统中脆弱的、易出故障的环节和不稳定的因素?系统总有个稳定状态的假设来区分系统行为是在预料之内还是在预料之外的,只要满足系统稳定状态的假设,就可以断定系统是否是正常的。2个问题来了:1) 如何描述稳定状态呢? 2) 基于稳定状态如何建立假设呢?

如何描述稳定状态?

在系统思维领域,稳定状态表示一个系统倾向于维持在一定范围或模式内的属性,就像人体系统将体温维持在一定范围内一样。我们期望通过一个模型,基于所期望的业务指标来描述系统的稳定状态。

稳定状态的注意事项:

1) 稳定状态一定要和客户接受程度一致。

2) 在定义稳定状态时,要把客户和服务之间的服务水平协议(SLA)纳入考量的范围。

什么是业务指标呢?通常回答以下问题:1) 我们正在流失用户吗? 2) 用户目前可以操作网站的关键功能吗?比如将商品加入购物车等。3) 目前存在较高的延迟致使用户不能正常使用我们的服务吗?

比如腾讯视频VIP开通月份个数,这个指标会关注但不能反映整体系统的健康状况。我们真正想要的是一个可以反映当前活跃用户满意状况的指标,但不容易找到一个可以直接地、实时地反映用户满意度的指标。终于找到一个可以间接反映用户满意度的指标:VIP视频播放按钮的点击率,我们称之为VIP视频每秒开始播放数SPS(Starts Per Second),因为用户购买VIP的直接目的就是看VIP视频。

选指标的注意事项:

1) 如果不能直接获得和业务直接相关的指标,可以暂时利用一些系统指标,如系统吞吐率,错误率,99%以上延迟。

2) 可以把和业务强相关性的指标想像成系统的生命特征指标,如脉搏,血压和体温等。

3) 很多业务指标不像体温那样稳定,也许经常剧烈波动。VIP视频每秒开始播放数SPS随时间波动的,毕竟大多数人更倾向于在晚餐时间看视频。因为SPS随时间变化可以预期的,我们可以用一周前的SPS波动图作为稳定状态的模型。

牢记我们的目标:期望通过一个模型,基于所期望的业务指标来描述系统的稳定状态。描述稳定状态是在建立一个有意义的假设所必须的前提条件。

如何建立假设?

定义好指标并理解稳定状态的行为后,可以用这些指标来建立实验的假设。

建立实验的假设的一般形式:向系统注入的事件不会导致系统稳定状态发生明显的变化。

还是拿腾讯视频来举例,假设注入的故障不会对SPS产生影响,换句话说,我们的假设是:实验措施不会使系统行为偏离稳定状态。

最后要想下如何衡量稳定状态行为的变化,当偏离稳定状态行为发生时如何测量这个偏差。定义这个和偏差是否在合理的范围内很具有挑战性,如果将正常的偏差范围定义清楚,将获得一套验证假设的完善的测试集。

参考资料:侯杰翻译的《混沌工程》之建立稳定状态的假设

你可能感兴趣的:(混沌工程:建立稳定状态的假设)