混沌工程通常用于测试分布式计算系统,以确保其能够承受意外的中断。混沌工程基于随机和不可预知行为的混沌理念,混沌工程的目标是通过引入随机和不可预知行为的受控实验来识别系统中的弱点。
混沌工程的主要好处是组织可以在黑客入侵之前或系统故障之前使用它来识别漏洞。由于混沌工程测试而做出的改变增加了人们对系统的信心。
一些 IT 团队举办混沌工程游戏日,团队尝试破坏系统,使用故障模式、有效分析或其他策略来深入了解组织系统中的潜在故障点。
混沌工程背后的理念
混沌工程背后的主要理念是破坏系统收集相关信息,这将有助于提高系统的弹性。混沌工程是软件测试和质量保证的一种方法,非常适合现代分布式系统和流程。
混沌工程特别适用于分布式计算环境,分布式计算系统是一组通过网络连接并共享资源的计算机。当意外情况发生时,这些系统可能会中断。对于大型分布式系统,组件通常具有复杂且不可预知的依赖性,并且很难排除错误或预测何时会发生错误。
分布式系统有许多方式可能会失效。大小和复杂性可能导致看似随机的事件发生。系统越大、越复杂,其行为就越不可预测和混沌。
混沌工程实验故意在分布式系统中产生湍流条件,以测试系统并找出弱点。混沌实验可能发现问题的一些示例包括:
- 盲点:监控软件无法收集足够数据的地方。
- 隐藏的错误:故障或其他可能导致软件故障的问题。
- 性能瓶颈:效率和性能可以改进的情况。
随着越来越多的公司迁移到云或边缘计算,他们的系统变得越来越分散和复杂。强调持续交付的软件开发方法也是如此。这些发展过程也变得越来越复杂。随着组织在基础设施内工作的基础设施和流程变得更加复杂,适应混沌的需求也随之增加。
混沌工程如何运作
混沌工程类似于压力测试,旨在识别和纠正系统或网络问题。与压力测试不同,混沌工程不一次测试和校正一个组件。
混沌工程检查的问题,似乎有无限数量的可能原因。它超越了显而易见的问题,并针对不太可能发生的问题或一组问题测试分布式系统。目标是获得有关该系统的新知识。
该过程通常分为几个步骤:
- 设置基线:首先建立基线,测试人员必须确定系统应如何在最佳条件下运行,并指定什么是正常工作状态。
- 创建一个假设:考虑一个或多个潜在的弱点,并就这些弱点的影响提出一个假设。例如,软件测试人员可能想知道如果出现大流量峰值会发生什么情况。
- 测试:进行实验,以测量大峰值的后果。实验可能揭示关键过程中的错误或意外的因果关系。例如,流量峰值模拟可能会显示存储性能问题。
- 评估:衡量和评估假说如何成立,并确定需要解决哪些问题。
混沌工程团队在实验中采取有序的方法,测试如下:
· 了解和理解的事情。
· 意识到但并不完全理解的事情。
· 理解但不知道的事情。
· 并不完全了解和不完全理解的事情。
使用"如果"场景,可以触发故障和故障来评估系统的性能和完整性。
混沌工程的先进原则
计算机科学家彼得·德奇和他的同事在太阳微系统公司开发了一份分布式计算的八个谬论清单。这些是程序员和工程师经常对分布式系统做出的错误假设。在将混沌工程应用于问题时,它们是一个很好的起点。这八个谬论包括:
- 网络是可靠的。
- 没有延迟。
- 带宽是无限的。
- 网络是安全的。
- 拓扑永远不会改变。
- 有一个管理员。
- 运输成本为零。
- 网络是同质的。
关于这些谬论是否仍然是谬论,存在争议,但混沌的工程师们继续将谬论作为理解系统和网络问题的核心原则。其主题是系统和网络永远不完美或 100% 可靠。
正因为这样,对于高度可用的系统有了"五个九"的概念。最接近完美的工程师不是争取 100% 的可用性, 而是 99.999% 。
这些错误的假设在分布式计算环境中很容易做出,并且它们是复杂分布式系统产生的看似随机问题的基础。
混沌工程最佳实践
混沌工程很复杂,遵循这些最佳实践可以帮助避免上述谬论产生的问题:
· 了解系统的通常行为:在系统健康时对系统有一个坚实的理解将有助于诊断问题。
· 模拟逼真的场景:专注于可能的失败和错误。例如,如果延迟在过去是个问题,则关注诱导延迟的错误。
· 使用真实情况进行测试:这将产生最准确的结果。混沌工程通常在生产环境中进行,尤其是当它过于繁琐或昂贵,无法复制大型分布式系统进行测试时。
· 最大限度地减少爆炸半径:混沌工程可能具有高度破坏性。成功需要 IT 人员、开发人员和业务部门之间的协调。生产环境中的实验很少在高峰期进行,理想情况下,使用该系统的人无法判断正在进行混沌实验。应实行冗余,以确保如果实验确实造成问题,服务仍然可用。
混沌工程的例子
想象一下,一个分布式系统,可以处理一定数量的交易每秒。混沌工程测试可用于了解软件在达到交易限制时会如何响应。性能是否受到影响,或者系统是否会崩溃?
混沌工程还可用于测试分布式系统在资源短缺或单点故障时的行为。如果系统出现故障,开发人员可以实施设计更改。更改后,将重复测试以验证所需的结果。
一个值得注意的真实系统故障与混沌的工程连接有关。
2015年,亚马逊的 DynamoDB 在其一个区域遇到了可用性问题。这一失误导致20多个依靠DynamoDB的亚马逊网络服务在该地区失效。使用这些服务的网站(包括Netflix)关闭了几个小时。然而,Netflix 遇到的失败比其他网站少,因为它创建并使用了一种名为 Chaos Kong (混沌金刚)的混沌工程工具来为此类场景做准备。
Chaos Kong禁用了整个 AWS 可用性区域,即为地理区域提供服务的 AWS 数据中心。使用该工具为Netflix 提供了应对区域中断的经验,如 DynamoDB 问题造成的中断。在解释混沌工程的重要性时,经常提到公司处理停电问题的能力。
混沌工程工具
Netflix 是混沌工程的著名先驱,也是最早将其用于生产系统的公司之一。Netflix 设计并开源的混沌测试自动化平台统称为" Simian Army."。
Simian Army.套房中包括几种工具,包括:
· 混沌金刚:禁用整个 AWS 可用区。
· 混沌猴子:随机禁用生产环境实例会导致系统故障,但设计不会对客户活动产生影响。
· 混沌大猩猩:像混沌猴子,但在更大的规模。
· 延迟:引入延迟以模拟网络中断和退化。
混沌猴子是一种工具,通过在系统上制造问题来实现混沌工程。在这里它显示了服务终止实例。
随着更多引发混沌的节目被创建来测试流媒体服务的功能,Netflix Simian Arm继续增长。其他一些混沌工程工具包括:
Simoorg:开源故障诱导程序,LinkedIn使用这个程序进行混沌工程实验。
Monkey-Ops:在 Go 中实现并构建的开源工具,用于测试和终止随机组件和部署配置。
Gremlin:一个混沌的工程项目,与AWS和Kubernetes合作,专注于零售和金融行业。它附带了内置冗余,在混沌工程实验威胁系统时阻止它们。
AWS Fault Injection Simulator:AWS 可以注入生产实例的故障模板。该平台具有内置冗余和保护措施,以防止故障注入测试造成系统问题。
原文:https://searchitoperations.techtarget.com/definition/chaos-engineering?