首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >混沌工程实践

混沌工程实践

作者头像
无涯WuYa
发布2022-12-03 12:13:54
发布2022-12-03 12:13:54
8260
举报

一个系统的复杂性往往是无法预知的,而且这种状态是很难琢磨,因为任何的系统总是在确定性的状态下存在一种不可预知的非确定性,这样的案例可以说是有很多的,比如XX城市的X系统由于网络故障导致系统不可用,可以说这样的案例太多。所以针对每个系统而言都是存在稳定状态和不稳定状态,很说明确的说混沌与不确定性是一回事。其实在系统的边界而言,或者是从系统最初设计以及保障角度而言,混沌状态它首先代表的是系统是处于一个稳定性的状态,只是系统在运行的过程中由于局部技术问题以及可能存在的全局技术问题导致系统出现不稳定的状态,虽然我们很清楚这种现状是客观存在并且可能是无法改变的,但是作为技术团队,需要站在系统的高可用,可靠性,稳定性等等角度,需要最大寻求系统的确定性以及让系统的运行始终在可以掌控的范围内。混沌工程的核心需要解决的是模拟现实中可能会出现的不可预知的情况以及本身客观存在的情况,比如网络故障,云服务器大面积出现瘫痪等情况了,那么在这种情况发生后,如何能够使用成熟的技术方案保障产品的可用性以及保存数据的完整性,而不至于在现实中真的出现该问题的时候表现的束手无策。

所以首先需要明确的是混沌工程的思想它是科学实验的方法论,所有的一切都是在系统实验的基础上来寻求系统的平衡性。它的具体定义是:“混沌工程是一门在系统上进行实验的科学,目的是建立系统抵御生产环境中失控情况的能力以及信心”。所以在公司如果需要开展混沌工程,需要遵守混沌工程的五大原则,这些原则具体为:

  • 首先要定义系统的边界
  • 引入现实世界的真实案例事件。比如数据库超时,内存泄露,网络故障等
  • 在生产环境中运行。关于这点需要特别强调的是直接在生产环境中执行是不负责的一种行为,所以它的步骤是先在测试环境不断的进行实验验证在出现故障后成熟的技术解决方案,待技术解决方案成熟后再引入在生产环境中进行验证技术方案的可行性。
  • 选择最小爆炸半径。混沌实验毕竟是对系统造成冲击的,而且是在生产环境中进行,所以在实际开展的过程中,要选择影响范围小的,不能因为开展实验而导致系统出现故障,从而给系统带来一些破坏的行为。
  • 混沌实验最好是持续的自动化。可以在逐步开展的过程中,把这部分进行自动化,最后引入到CICD的流程体系中,让它成为产品质量保障的一部分。

混沌实验有非常成熟的工具,比如阿里巴巴开源的ChaosBlade,在前面的文章中详细地介绍了混沌实验模拟网络层故障,系统CPU,内存,OOM等案例,这里就不再重复。本质上是通过工具的方式来模拟系统在出现故障的情况下,如何能够和研发团队针对这种情况制定合理的解决方案,这样如果在真实的生产环境中出现了该问题,因为之前已经是预知到了该错误,而且有应对的解决方案,那么可以很快速的针对该问题进行解决,这样的目的以及好处是不会在使用用户的客户造成影响。通过混沌工程的实践方式,也是能够寻找出系统中可能设计不合理的地方,然后针对这些地方来进行具体的调整和程序的优化,当然它是一个持续推进的过程,很难说一步到位。只不过在测试的立场上而言,需要在服务端稳定性的角度而言,需要思考的是当被运行的系统出现网络故障,OOM,数据库调用延迟,Redis调用延迟,程序假死等情况下,除了报警的机制,是否还有另外一套机制来应对这些突发的情况,这些情况都是需要考虑在测试的风险之内并且有具体的场景说明,比如一个内存泄露的程序是无法提供它的基本业务保障功能的,其他异常情况也是,比如网络故障导致客户端调用服务端迟迟得不到服务端的响应导致客户端一直在加载的状态。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档