一.混沌工程简介
什么是混沌工程
混沌工程是在分布式系统上进行实验的学科,目的是建立对系统抵御生产环境中失控条件的能力以及信心。
混沌工程,是一种提高技术架构弹性能力的复杂技术手段,旨在将故障扼杀在襁褓之中,也就是在故障造成中断之前将它们识别出来。通过主动制造故障,测试系统在各种压力下的行为,识别并修复故障问题,避免造成严重后果。
混沌工程实验与传统测试
两者本质上是思维方式的不同。
1、故障注入首先要知道会发生什么故障,然后一个一个注入,然而在复杂分布式系统中,想要穷举所有可能的故障,本身就是奢望。
2、传统测试,旨在给定一个特定的条件,系统会输出一个特定的二元结果,它仅仅是对已知的系统属性可能的取值进行测验。
3、混沌工程的思维方式是主动去找故障,是探索性的,其结果是不确定的。虽然按计划做好了降级预案,但是关闭节点时却引发了上游服务故障,进而引发雪崩,这不是靠故障注入或预先计划能发现的。
4、混沌工程,旨在帮助我们获得更多的关于系统的新认知的实验方法,而且通常还能开辟出一个更广袤的对复杂系统的认知空间。
5、混沌工程实验的可能性是无限的,根据不同的分布式系统架构和不同的核心业务价值,实验可以千变万化。
二.角色扮演测试法
角色扮演
角色扮演是一种探索式测试方法(甚至是探索模型),它基于“以人为本”的要求,在测试设计和执行中尽量做到代表用户。
角色扮演是一个有趣的思维方式,首先,我们需要非常了解用户的典型画像,构建出了几类典型的用户特征,赋予了生动的行为标签,根据用户特征设计测试场景和用例,然后模拟该用户的行为习惯执行测试,刻意挖掘相关路径的问题。
测试流程
情景梳理:情景描述-角色人员分类-角色特征识别;
测试计划:不同角色特征-制定测试计划、编写用例;
测试执行:按照测试计划、执行测试,发现问题;
问题改进:问题分析修改、回归验证;
测试积累:积累测试场景、优化测试用例。
三.混沌工程-角色扮演实践场景
实践场景概述
角色扮演实践场景:根据角色扮演测试法的思路,结合混沌工程实验方法,我们可以扮演不同角色身份,根据身份特征来进行混沌工程试验,发现特定类型问题,解决后进行回放验证,提升系统稳定性。
通过角色扮演实践场景的实施,我们可以:
1.识别出高频/核心/重要业务,针对性地进行混沌工程实验,提升系统稳定性、提升用户体验;
2.还可以根据用户重要程度,确定不同服务降级、熔断策略并进行验证,提高系统韧性。
实验依赖
故障注入工具、日志采集、监控系统、告警系统、知识库管理
实践过程
我们以电商平台为例,看看角色扮演实践场景具体的实践过程:
主要的角色可以划分为几类,我们想象一个真实的身边的人(可以适度夸张和搞笑),具备下列特征:
小张,廉价消费用户,上电商网站的主要特征就是抠门,一分钱要掰成两分钱花,因此他特别关注秒杀活动,大折扣商品,热衷于计算优惠规则,比较不同店家的价格。
老王,理性消费用户,看重合理消费,希望不吃亏不上当,只看自己计划购买的物品及评价,会严格查阅产品规格和商家退换条款,退货频率比较高。
小李,品质消费者,看重高配置,大品牌,会从专业评测网站上获取心仪品牌和商品信息,参考相关专家的推荐意见,购买时会对客服咨询专业问题。购物车经常存了一堆最热门商品,但实际购买数量有限。
情景梳理:根据电商平台购物情景,对角色人员分类,识别出角色特征、角色行为,确定相应微服务使用频率及重要程度;
小张(廉价消费) 秒杀、折扣类商品
老王(理想消费) 贵重可退换货商品
小李(品质消费) 新品、高配置商品
演练计划:根据不同角色特征及行为,制定相应的演练方案、创建实验场景。通过注入微服务的网络调用延迟,超时等等故障,通过微服务熔断降级演练,微服务流量控制演练,消息中间件和数据库演练,来验证应用的RT是否受影响,全面检测应用的稳定性。
实验实施:模拟角色行为(故障工具/平台),观测对应指标。基于整体的演练方案,设置相关参数,执行实验场景,实验中观察监控、告警、日志数据,记录实验过程信息,有风险及时终止实验、并恢复环境。
问题改进:问题分析改进,回归验证,总结入库。针对每个实验场景,确认实验结果是否符合预期结果,如有差异,分析问题,并优化修改,通过实验场景进行故障回放,验证改进是否有效,最后总结整理所有实验场景,形成总结性报告。
情景优化:积累演练方案库、拓展实验场景。根据业务架构优化、业务拓展,不断积累演练方案,根据实验设计合理性、实验组织过程有效性、实验结果等等因素,调整和拓展实验场景。