什么是混沌工程(混沌工程是什么)

什么是混沌工程(混沌工程是什么)

浏览次数:
信息来源: 用户投稿
更新日期: 2026-03-13
文章简介

在分布式系统中查找故障超出了标准应用程序测试的能力。公司需要更智能的方法来持续测试微服务。一种越来越受欢迎的策略是混沌工程。使用这种主动测试实践,组织可以在故障导致代价高昂的停机之前寻找并修复故障。继

2025阿里云双十一服务器活动

在分布式系统中查找故障超出了标准应用程序测试的能力。公司需要更智能的方法来持续测试微服务。一种越来越受欢迎的策略是混沌工程。使用这种主动测试实践,组织可以在故障导致代价高昂的停机之前寻找并修复故障。继续阅读以了解混沌工程如何提高大型分布式系统的可靠性。

混沌工程是一种发现分布式系统漏洞的策略。这种做法需要在生产过程中将故障和错误注入软件。一旦你故意造成错误,监控效果以查看系统如何响应压力。通过故意“破坏”,您会发现可能影响组件和最终用户的新问题。在导致数据丢失或服务影响之前解决已识别的弱点。

  • 识别系统中的弱点。
  • 实时查看系统如何响应压力。
  • 让团队为真正的失败做好准备。
  • 识别尚未导致系统范围问题的错误。
  • Netflix是第一个引入混沌工程的组织。2010年,该公司发布了一款名为ChaosMonkey的工具。使用此工具,管理员能够以随机间隔在随机位置造成故障。这种测试方法使Netflix的分布式基于云的系统对故障更具弹性。

    许多科技公司采用混沌工程来提高分布式系统的弹性。Netflix继续开创这种做法,但Facebook、谷歌、微软和亚马逊等公司也有类似的测试模型。更多的传统组织也开始使用混沌测试。例如,澳大利亚国民银行应用混乱随机关闭服务器并建立系统弹性。

    SunMicrosystem的PeterDeutsch和他的同事列出了程序员通常对分布式系统做出的八个错误假设:

  • 拓扑永远不会改变。
  • 这些谬误显示了在微服务架构中设计的分布式应用程序的动态性。这种系统有很多活动部件,管理员对云基础设施几乎没有控制权。对设置的不断更改会导致意外的系统行为。无法预测这些行为,但我们可以通过混沌工程重现和测试它们。

    混沌工程与故障测试之间的区别

    失败测试检查单个条件并确定属性是真还是假。这样的测试以先入为主的方式破坏了系统。结果通常是二进制的,它们不会发现有关应用程序的新信息。混沌测试的目标是生成关于系统的新知识。更广泛的范围和不可预测的结果使您能够了解系统的行为、属性和性能。您开辟了新的探索途径,并了解如何改进系统。

    虽然不同,但混乱和故障测试确实在关注点和使用的工具上有一些重叠。当您使用这两个学科来测试应用程序时,您会获得最佳结果。

    混沌工程中的所有测试都是通过所谓的混沌实验进行的。每个实验都从将特定故障注入系统开始,例如延迟、CPU故障或网络黑洞。然后,管理员观察并比较他们认为会发生的事情与实际发生的事情。一个实验通常涉及两组工程师。第一组控制故障注入,第二组处理效果。

    以下是混沌实验的分步流程:

    工程师分析系统并选择导致什么故障。混沌工程的核心步骤是预测系统遇到特定错误后的行为方式。

    工程师还需要在开始测试之前确定关键指标阈值。指标通常分为两组:

  • 关键指标:这些是实验的主要指标。例如,您可以衡量对延迟、每秒请求数或系统资源的影响。
  • 客户指标:这些是预防性指标,可以告诉您测试是否太过分。客户指标的示例是每分钟订单数或每秒流启动数。如果测试开始影响客户指标,这表明管理员停止试验。
  • 在某些测试中,这两个指标可能重叠。

    工程师将特定故障添加到系统中。由于无法确定应用程序的行为方式,因此始终有一个备份计划。大多数混沌工程工具都有反向选项。这样,如果出现问题,您可以安全地中止测试并返回应用程序的稳定状态。

    当错误导致重大问题时,工程师会监控系统。关键指标是主要关注点,但始终监控整个系统。如果测试开始模拟中断,团队会寻找修复它的最佳方法。

    第4步:验证(或反驳)你的假设

    成功的混沌测试有两种结果之一。您要么验证系统的弹性,要么找到需要修复的问题。两者都是很好的结果。

    虽然名称可能暗示其他情况,但混沌工程中没有任何随机性。

    这种测试方法遵循严格的原则,包括以下原则:

    什么是混沌工程,混沌工程是什么

    所有实验都应反映现实和可能的情况。当您注入现实生活中的故障时,您会很好地了解哪些流程和技术需要升级。

    如果将测试应用于生产环境,您只能看到中断对系统的影响。如果您的团队几乎没有混沌测试经验,让他们开始在开发环境中进行试验。准备好后测试生产环境。

    始终最小化混沌测试的爆炸半径。由于这些测试发生在生产环境中,因此测试可能会影响最终用户。另一个标准预防措施是让团队为实际事件响应做好准备,以防万一。

    您可以将混沌实验自动化到与CI/CD管道相同的级别。持续的混乱使您的团队能够不断改进当前和未来的系统。

    混沌工程的好处跨越多个业务领域:

    混沌工程通过防止长时间的中断来帮助阻止巨大的收入损失。这种做法还允许公司在不损失服务可靠性的情况下快速扩展。

    来自混沌实验的见解可以减少事故,但这并不是技术优势的终点。团队对系统模式和依赖关系有了更深入的了解,从而使他们能够构建更强大的系统设计。混沌测试对于工程团队来说也是极好的随叫随到的培训。

    更少的中断意味着对最终用户的干扰更少。改进的服务可用性和持久性是混沌工程的两个主要客户优势。

    这些是最常见的混沌工程工具:

  • ChaosMonkey:这是Netflix创建的原始工具。虽然它于2010年问世,但ChaosMonkey仍然会定期更新,并且是首选的混沌测试工具。
  • Gremlin:?Gremlin帮助客户设置和控制混沌测试。该工具的免费版本提供基本测试,例如关闭机器和模拟高CPU负载。
  • ChaosToolkit:这个开源计划通过开放API和标准JSON格式使测试更容易。
  • Pumba:?Pumba是Docker的混沌测试和网络仿真工具。
  • Litmus:用于Kubernetes上的有状态工作负载的混沌工程工具。
  • 为了跟上新工具的步伐,请为ChaosEngineeringSlack社区创建的图表添加书签。除了工具之外,该图表还记录了从事混沌测试的已知工程师。

    混沌实验没有限制。您运行的测试类型取决于您的分布式系统的架构和业务目标。

    以下是最常见的混沌测试列表:

  • 模拟微型组件的故障。
  • 关闭虚拟机以查看依赖项如何反应。
  • 断开系统与数据中心的连接。
  • 在服务之间注入延迟。
  • 随机导致函数抛出异常(也称为基于函数的混乱)。
  • 向程序添加指令并允许故障注入(也称为代码插入)。
  • 破坏系统时钟之间的同步。
  • 导致流量突然激增。
  • 注入拜占庭式故障。
  • 混沌工程是DevOps文化中的一种常见做法。这样的测试使DevOps能够彻底分析应用程序,同时跟上敏捷开发的节奏。DevOps团队通常使用混沌测试来定义基础设施的功能基线和容差。测试还通过阐明稳态和混沌输出来帮助创建更好的政策和流程。一些公司更喜欢将混沌工程集成到他们的软件开发生命周期中。集成混乱使公司能够确保每个新功能的可靠性。

    任何大型分布式系统的必备工具

    对软件的持续检查对于应用程序的安全性和功能性都至关重要。通过主动检查系统,您可以减轻运营负担、提高系统可用性和弹性。

    标签:
    专用服务器托管(服务器托管是干什么的)
    « 上一篇
    返回列表
    下一篇 »

    如本文对您有帮助,就请抽根烟吧!