混沌工程初体验

简介

    在微服务模式下,单个请求可以遍历多个服务以获得聚合响应来满足用户或其他服务的请求。服务之间的每个远程请求都在遍历额外的基础设施并跨越不同的应用程序边界,所有这些都可能失败,而当依赖的任何一方发生问题都有可能引发线上故障的产生。明确各服务间的强弱依赖关系,探究在下游不可用时的影响范围,才能有针对性的优化系统弹性,提高服务稳定性。

     混沌工程(Chaos engineering)是一种通过有意地在系统中引入随机性和不确定性,以验证系统的健壮性和安全性的工程实践。混沌工程旨在模拟系统中的故障,并评估这些故障对系统性能和可用性的影响。通过混沌工程的实践,可以帮助开发团队识别和处理系统中的潜在的脆弱点,提高系统的可靠性和稳定性。

混沌工程指导原则

    对于一个理性的混沌实验,应尽可能满足以下几个原则,且落地过程中对于这些原则的匹配程度可以作为衡量系统稳定性的重要指标。

假定稳定状态

确定产品的稳定状态,是进行混沌的基础,对不稳定的系统运行混沌工程并没有提供太多价值,因为这些系统已经不可靠并且不稳定性是已知的。在一个复杂系统中,我们有特别多的组件,有很多不同的输入输出,我们需要有一个通用的方式来区别系统哪些行为是可以接受的,而哪一些则是不合适的,在强依赖下哪些行为可以接受,弱依赖发生问题时预期的产品形态,我们可以认为当系统处于预期内的状态就是稳定状态。

目前的混沌现状,我们将接口的 response 断言成功当做预期内的稳态。

多样化世界的真实事件

扫描二维码关注公众号,回复: 14951676 查看本文章

在真实的线上环境中,我们会遇见各种来自不同业务不同链路的问题,任何有可能会导致稳态中断的事件都可以作为混沌中的扰动变量,参考阿里的故障总结,按照IaaS、PaaS、SaaS层的角度绘制了故障画像,如下图: 

在生产环境实验

系统的行为会依据环境和流量模式都会有所不同。由于资源使用率变化的随时可能发生, 为了保证系统执行方式的真实性与当前部署系统的相关性, 因此线上环境的流量是混沌的首选,但同样线上环境的选择也会带来较大的风险,没有控制好爆炸半径或及时恢复服务带的后果往往是灾难性的。

因此在混沌实验中,我们考虑到风险以及各业务不同特点对混沌理念的接受程度不同,所以定义了实验选择的原则,可供各业务线根据实际情况自行决定:

  • 接口巡检 + 测试分支,优势在于低成本的快速进行混沌验证,对线上业务无影响,只需关联 接口巡检任务即可快速执行
  • 线上环境直接部署,风险较大,现状不推荐,等混沌本身完善爆炸范围控制的能力后再进行
  • 流量回放录制 + 测试分支,与巡检平台的构造请求不同,录制线上真实流量进行实验,能够更贴合混沌执行原则,获得更好的收益效果

自动持续执行

混沌的自动化主要包括两个方向

  • 自动执行,通过前期能力建设,我们可以通过接入混沌流水线的方式在提交分支代码时自动执行与之绑定的巡检任务,筛选目标接口、自动对目标依赖进行混沌实验,生成对应的实验报告结果
  • 对实验结果的自动分析,例如强弱依赖的自动化梳理。给出我们对于目标依赖的强弱关系,混沌平台即可自动对目标依赖的强弱判定是否符合我们的预期。

混沌工程的实践通常包括以下步骤:

    1. 开始小规模测试:在系统中引入混沌和故障测试时,应始于小规模测试,以确保混沌工程测试系统的有效性。 

    2. 定义合适的指标:制定指标以确定混沌测试的影响。可以定义一些指标,例如系统响应时间、服务的成功失败率、错误信息的数量等。还可以使用监控工具对指标进行实时监控。 

    3. 制定混沌测试计划:混沌测试应包括测试时间、频率、范围和测试目的等方面的计划。

    4. 设计故障场景:根据实际的生产故障场景,设计相应的混沌测试方案,例如网络延迟、资源耗尽或服务停机。 

    5. 减小风险:在进行混沌测试之前,可以将测试环境与生产环境隔离开来,以减少风险和避免系统损坏。

    6. 自动化混沌测试:可以使用自动化工具来实现混沌测试,以确保测试覆盖面,并降低人为操作错误的风险。 

    7. 监控和跟踪:在混沌测试期间,需要实时监控和跟踪系统指标,以了解应对故障的效果,并对混沌测试结果进行评估和总结。需要注意的是,混沌工程并不是为了制造无法解决的问题,而是为了排除生产环境中可能出现的问题,提高系统的稳定性和可靠性。因此在进行混沌测试时,应严格遵守操作规程。

总之,混沌工程是一种重要的工程实践,可以帮助开发团队识别系统中的薄弱环节,提高系统的可靠性和稳定性,为系统的长期运行保驾护航。

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】

在这里插入图片描述

 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

猜你喜欢

转载自blog.csdn.net/wx17343624830/article/details/130486446