主页 topics 什么是混沌工程 什么是混沌工程?
探索 IBM Instana
描绘一串 1 和 0 的图形

混沌工程是在生产或预生产环境中有意以受控方式造成故障,以了解故障影响并规划更好的防御态势和事件维护策略。

组织的关键应用程序或基础架构每天都会面临新的故障风险,有可能会威胁到组织向客户提供服务的能力。故障原因可能因各个问题而异,包括安全漏洞、配置错误或服务中断。更多的应用程序和数据托管在云端,更有可能会出现错误或中断,进而可能会导致安全问题增加。

解决中断的一种方法便是混沌工程。这不是工程师终止实例或服务或以其他方式导致系统无故失败的随机过程。此过程可识别未来的潜在问题,使工程团队能够主动解决问题,避免在未来的实际环境中出现这些问题。

混沌工程很重要,因为错误或中断可能会减慢组织的发展势头,随着停机时间的增加,组织要花费大量宝贵时间来即时寻求解决方案。Netflix 在从本地切换到云时亲身体验到了这一点1(ibm.com 外部链接);他们经历了一次中断,导致 2008 年的服务交付中断了三天。该情况是在向视频流媒体业务转型之前发生的,否则停机的成本将呈指数级增长。因此,Netflix 决定尽一切可能来最大限度地减少中断,并开始将混沌工程引入其工作流。借助混沌工程,他们能够在问题发生之前识别问题,并在发生不可避免的故障时将损失降至最低。

Netflix 创建了 Chaos Monkey2(ibm.com 外部链接),这是一款开源工具,可在 IT 服务和基础架构中创建旨在识别漏洞的随机事件,当它从私有数据中心迁移到 Amazon Web Services (AWS) 以应对云端的不可靠时,可通过自动恢复程序修复或解决这些漏洞。许多组织现在都使用 Chaos Monkey 来运行其混沌工程实验。

混沌工程是用于应对组织生产环境中的基础架构故障、中断或组件丢失的重要防御措施。可帮助站点可靠性工程师 (SRE) 和 DevOps 团队的其他成员避免服务出现重大中断,更好地了解其漏洞,并了解如何在发生中断时最大程度地减少影响,从而持续交付服务。

因程序的依赖关系不同,即使代码中的一个小问题也可能对整个生产环境产生灾难性影响。例如,金融服务公司的交易软件系统中的错误可能会造成数百万美元的损失3(ibm.com 外部链接)。组织可能无法避免所有 IT 事件,但他们可以通过混沌管理来了解可能的情况及其最佳解决方案,从而最大限度地减少损失。

查看产品导览

利用 IBM Instana Observability,企业中的每个人都能以用户友好的方式访问他们想要的数据和需要的环境,快速预防和修复问题。

相关内容

订阅 IBM 时事通讯

受益于混沌工程的组织

通过仪表板和其他工具获得高弹性、数字成熟度和高度可观察性的组织应该采用混沌工程,因为他们可以对实验中出现的问题立即采取行动。缺乏这种可观察性的组织4(ibm.com 外部链接)可能需要很长时间才能解析他们通过混沌工程创建的实验。

对于使用(特别是公有云)和云原生应用程序的组织来说,混沌工程也是必备操作。公有云引入了潜在的中断问题,需要与云提供商协调解决,这就创建了一种与处理本地问题不同的方法。

根据 Constellation Research5 的数据,使用云的企业仍然经常处理 IT 事件,而不考虑云和软件即服务 (SaaS) 对这些事件的不同影响。(ibm.com 外部链接)

此外,微服务使用不断攀升,增加了系统中运行的主机或容器的数量,也带来了独特挑战(ibm.com 外部链接),这些挑战可通过混沌实验来发现和解决。它将复杂性从代码设计转移到系统操作,这并没有消除复杂性,但提高了自动化程度。

混沌工程还可以帮助组织提高持续集成持续交付 (CI/CD) 管道的速度。像 Netflix 那样将混沌工程纳入 CI/CD6(ibm.com 外部链接),组织便能够自动进行持续实验,同时控制其潜在影响。

最后,组织越来越多地通过 API 与合作伙伴建立联系,这意味着其系统中的问题可能会对其他组织产生连锁影响。

部署混沌工程可以帮助组织了解架构中的漏洞并加以纠正,最终能够预测未来的故障。成功的混沌工程可帮助组织最大限度地减少对客户产生重大影响的技术故障,同时支持构建更强大、更具弹性的复杂系统架构。一旦组织决定采用混沌工程,下一步就是确定是否预生产环境还是生产环境中执行。

混沌工程实验的类型

DevOps 团队可通过多种选项运行混沌工程实验,以测试各种系统流程。

  • 延迟注入:DevOps 团队有意创建模拟缓慢或失败网络连接的场景。其中包括引入网络延迟或拖慢响应时间。
  • 故障注入:可能会故意向系统引入错误,以确定错误将如何影响其他依赖系统以及是否会中断服务。故障注入的例子包括诱发磁盘故障、终止进程、关闭主机,或导致功率或温度上升。故障注入可帮助组织识别任何单点故障,如果发生问题,可能会导致整个系统发生故障。
  • 负载生成:这有关于通过发送远超正常运营的显著流量水平来故意对系统施加压力。此举有助于站点可靠性工程师 (SRE) 了解系统中的任何瓶颈,从而使他们能够构建更具可扩展性的系统。
  • 金丝雀测试:指的是向一小部分用户发布新产品或功能。这样,任何故障或错误都只会影响一定比例的访客,而其他受众仍获得访问现有网站的体验。

 

混沌工程的最佳实践

创建理想的混沌工程流程需要遵循多种原则,以确保组织能够拥有一个大规模的分布式系统。

  • 了解系统:包括全面了解整体系统、系统的新增特性和功能,以及系统的拓扑、架构、依赖关系、稳态行为、输出响应,以及可用性、延迟和吞吐量等特征。
  • 采用失败:对于软件工程师来说,他们本来是为了防止此类事件发生,却又允许事件发生,这似乎自相矛盾。然而,IT 服务中总会发生中断,较好的做法是先在受控环境中体验中断,以便先行一步找到解决方案,而不是在组织团队下班后,或在以前未遇到此类特定问题时,延后几小时才找到解决办法。
  • 建立稳态行为:首先,工程团队必须定义系统正常运行时的行为方式,这样才能比较实验对稳定状态的影响。
  • 识别实际事件:混沌工程实验应尽可能接近一天的正常运行情况,而不是创造不可能的情况。网络和基础架构故障、错误代码、电源问题和流量过载情况都有可能发生。
  • 创建比赛日:混沌工程可以研究比赛日的环境,在特定某天内进行多次测试,以最大限度地利用资源来识别和解决尽可能多的问题。
  • 使用自动化:各种规模的组织都可以通过自动开展实验来使用混沌工程,如果公司手动进行实验,则工作强度太大。这减轻了混沌工程流程中 IT 团队部分负担。组织可以在实验设计、故障注入和基础架构配置等各个方面实现自动化
  • 注意爆炸半径:混沌工程师必须尽最大努力来缩小爆炸半径,尽可能减少对客户造成的实际伤害。可通过以下方式来最小化爆炸半径:
    • 瞄准服务子集:混沌工程不应从根本上中断组织的服务,尤其是在生产设置中。瞄准特定服务子集可以最大限度地减少事件发生时造成的影响,确保事件不会导致整个系统瘫痪。
    • 在有限时间内运行实验:实验应该有开始和结束时间。实验的重点是创造一个事件并将其解决,而不是让事件长期不受控制地运行。
    • 远离高峰流量进行实验:组织应尽量避免在高峰时段进行实验,除非在特殊情况下,他们试图评估事件发生期间高容量对系统造成的影响。
    • 在开发环境中运行实验:确保不会出现客户体验服务中断的最简单方法是在预生产环境中运行。然而,这意味着条件将与生产环境不同,可能会错误地描述正在发生的情况。为了最大限度地减少这种情况,请确保预生产环境和生产环境尽可能相互镜像。
    • 针对每个组件进行实验:组织系统不断发生变化,因而混沌实验永远不会结束。目标同样应该是“全面”测试;检查整个过程中的所有组件、层级、服务及其依赖关系。
生产环境与预生产环境

利用混沌工程的组织必须决定是在其生产环境还是预生产环境中使用混沌测试。混沌工程能在生产环境中发挥最大作用的原因有几点。实时环境最为准确,有助于了解事件如何影响客户体验。另一个原因是预生产环境的设置可能与实际环境并不完全相同,因此给实验引入了一些可变性。

例如,预生产环境中的事件可能不会产生实际响应,因为它缺乏与实时环境相同的流量水平。此外,预生产环境的安全配置与生产环境可能也不同。

一些组织担心会故意造成自己的实时站点出现问题,因此他们在预生产或开发站点上运行实验。这样可确保发生的任何问题都不会影响实时客户体验。为了缓解这种情况,一些组织从预生产环境开始,在迁移到实时生产环境之前便处理该过程。

组织会根据其风险承受能力选择要使用的环境。最终,混沌工程的目标是测试大规模出现的实际问题,因此,生产环境将提供最准确的事件信息,以及需要修复的问题。

混沌工程的优势

混沌工程为组织提供了几个关键优势。

更好的客户服务

客户对于从公司所购买服务的可用性期望很高。任何停机或无法访问他们为之付费的内容都会严重影响客户满意度,造成收入损失和声誉受损。测试系统和确定解决方案意味着系统长时间瘫痪的风险有所降低。

 

提高数据安全性

中断可能来自不良代码、服务器问题或外部威胁。即使有出色的安全措施,也无法杜绝外部威胁。混沌工程有助于识别可能会遭到利用的问题,因此组织可以引入补丁和错误修复(ibm.com 外部连接),以确保服务安全。

最大程度减少停机时间

利用混沌工程,组织能够为如何应对未来发生的问题制定更明智的蓝图。采用混沌工程的组织将为多起事件制定具体的应对计划,从而更快修复问题,减少停机时间。混沌工程可以将停机时间减少7(ibm.com 外部链接)高达 20%。

 

提高可扩展性

混沌工程实验可确定系统如何分配资源。引入实验将演示系统如何处理负载,并显示瓶颈出现或可能出现的位置。

 

为未来软件开发提供信息

混沌工程可帮助团队提高系统弹性和灵活性,更加高效地开发软件。因此,组织可以更智能地编码新软件和解决方案,因为他们知道当前系统如何处理问题。

探索混沌工程产品
可观察性 IBM Instana APM

利用 IBM 的可观察性解决方案获取更快解决事件所需的上下文。

探索 IBM Instana

可观察性 Flexera One with IBM Observability

优化软件使用和成本

 

深入了解 Flexera One with IBM Observability

混沌工程资源 什么是 AIOps?

了解 IT 运营人工智能 (AIOps) 如何使用数据和机器学习来改进和自动化 IT 服务管理

什么是应用程序性能管理?

利用应用程序性能管理,预测性能问题,防止此类问题影响业务

什么是 IT 运营?

IT 运营和 AIOps 负责监督和自动化整个组织内 IT 服务的管理、交付和支持

什么是 IT 服务管理?

ITSM 是指组织如何确保其 IT 服务按照用户和业务需要的方式工作

什么是站点可靠性工程?

利用站点可靠性工程自动化 IT 运营任务、加速软件交付并最大限度降低 IT 风险

什么是智能自动化?

智能自动化结合了 AI 和自动化技术,可自动处理企业内的低级任务

采取后续步骤

IBM Instana 提供人人都能使用的实时可观察性。它可以快速实现价值,同时确保您的可观察性策略能够跟上当今和未来环境的动态复杂性。从移动设备到大型机,Instana 支持超过 250 种技术,并且还在不断增加。

探索 IBM Instana 预约实时演示
脚注

1 混沌工程:实际的系统弹性,(ibm.com 外部链接)Casey Rosenthal,Nora Jones,2020 年
什么是 Chaos Monkey?混沌工程有所解释,(ibm.com 外部链接)InfoWorld,2020 年 5 月 13 日
Knight Capital Says Trading Glitch Cost It $440 Million,(ibm.com 外部链接)New York Times,2012 年
4 There Is No Resilience without Chaos, The New Stack,(ibm.com 外部链接)2023 年 4 月 13 日 
5 Incident Management in the Cloud Era,(ibm.com 外部链接)Constellation Research,2023 年
6 ChAP: Chaos Automation Platform,(ibm.com 外部链接)Netflix 博客,2017 年 7 月 26 日
7 The I&O Leader’s Guide to Chaos Engineering,(ibm.com 外部链接)Gartner,2021 年 10 月 28 日