使用混沌工程工具检查生产可靠性

探索混沌工程工具以确保生产环境的可靠性

让我们一起研究如何利用混沌工程工具来维护生产系统的可靠性。

混沌工程是一种实践方法,通过对系统或应用程序进行有计划的实验,来揭示其潜在的脆弱点和可能发生的故障。这些故障往往是在系统创建之初未曾预料到的。因此,通过有意识地在系统中制造故障,我们可以暴露其弱点,从而进行修复,并最终增强系统和应用程序的弹性和稳定性。

许多知名企业,如Netflix、LinkedIn和Facebook,都在积极实践混沌工程,以更深入地了解其微服务架构和分布式系统。这种方法有助于他们比用户投诉更快地发现潜在问题,并及时采取必要的纠正措施。 这也正是这些组织能够为数百万用户提供服务、提升生产效率并节省大量资金的关键因素。

混沌工程带来的益处包括:

  • 通过尽早发现关键问题来避免收入损失
  • 减少系统或应用程序的故障次数
  • 提升用户体验,减少中断,并提高服务可用性
  • 帮助深入了解系统并增强对系统的信心

您对生产系统的可靠性有多大信心? 您的系统是否真正做好了应对灾难的准备?

让我们借助以下几种流行的混沌测试工具来找出答案。

Chaos Mesh

Chaos Mesh 是一种专门用于管理混沌工程的解决方案,它可以在Kubernetes系统的各个层次注入故障,包括Pod、网络、系统I/O以及内核。 Chaos Mesh 可以自动化地终止Kubernetes Pod并模拟延迟。 它可以中断Pod之间的通信并模拟读写错误。它还能够为实验制定规则并定义其范围。 这些实验是通过YAML文件来配置的。

Chaos Mesh 提供了一个仪表板,用于查看实验分析结果。它在Kubernetes之上运行,并支持大多数云平台。作为一个开源项目,它最近被CNCF接受为沙箱项目。通过运用混沌工程的原则,您可以将Chaos Mesh融入DevOps工作流程中,以构建更具弹性的应用程序。

Chaos Mesh 的主要特性包括:

  • 易于部署在Kubernetes集群上,无需修改部署逻辑
  • 部署无需依赖任何特定的外部组件
  • 使用 CustomResourceDefinitions (CRD) 来定义混沌对象
  • 提供仪表板以跟踪所有实验的进展

Chaos Toolkit 是一款开源且简单的工具,用于自动化混沌工程实验。

您可以利用一系列驱动程序或插件,例如对AWS、Google Cloud、Slack、Prometheus等的支持,将Chaos Toolkit与您的系统集成。

Chaos Toolkit 的特点包括:

  • 提供声明式的开放API,用于创建独立于供应商或技术的混沌实验
  • 可以轻松地嵌入到CI/CD管道中以实现自动化
  • 通过 ChaosIQ 提供商业和企业级支持

Chaoskube

正如其名称所示,这款工具是为Kubernetes设计的。

Chaoskube 是一款开源的混沌工具,它可以定期随机地终止Kubernetes集群中的Pod。这有助于您了解当Pod发生故障时,您的系统会如何反应。 默认情况下,它每10分钟会终止任何命名空间中的一个Pod。您可以使用命名空间、标签和注释等来筛选Chaoskube的目标Pod。Chaoskube的安装过程简单易行。

Chaos Monkey

Chaos Monkey 是一款用于检测云系统弹性的工具,其工作原理是故意在这些系统中制造故障,以观察它们的反应。Netflix创建此工具是为了测试其AWS基础设施的弹性和可恢复性。它之所以被命名为“混沌猴”,是因为它像一只不受约束的猴子一样制造混乱,以此来测试系统的容错能力。

正是Chaos Monkey催生了新的工程实践——混沌工程。它的核心理念是:与其等待重大故障突然发生,不如主动地模拟失败,以避免未来可能出现的意外。

Chaos Monkey 的特点包括:

  • 帮助您为随机实例故障做好准备
  • 鼓励针对意外故障进行冗余设计
  • 通过Spinnaker实现跨云兼容性
  • 提供可配置的时间表来模拟故障
  • 通过 Govendor 集成,可以向Chaos Monkey添加任何新的依赖项

Simmy

Simmy 是一款故障注入混沌工具,与.NET的Polly弹性项目集成。它允许您通过执行代码的Polly创建混沌注入策略。它提供不同的策略,例如在系统中注入异常的异常策略、注入任何新行为的行为策略等。这些策略旨在随机地注入行为。

Simmy 的特点包括:

  • 提供Monkey策略或Chaos策略来注入混乱
  • 便于测试任何依赖项的故障
  • 有助于快速恢复到正常模式并控制故障影响范围
  • 已准备好用于生产环境
  • 还可以根据外部因素定义故障(例如,由于全局配置导致的故障)

Pystol

Pystol 是一款用于在云原生环境中注入故障的工具。它通过Kubernetes Operator监视ETCD中的事件。当执行故障注入操作时,Operator会创建Pod并运行一些Ansible集合。因此,开发人员无需编写自己的操作来执行。

Pystol提供了现成的操作来测试系统。 不过,如果开发人员想要创建新操作,可以使用GoLang和Python来完成。

它提供了一个持续集成仪表板,以提供所有作业操作的摘要视图。 您可以在本地运行Pystol,也可以使用其Docker镜像将其部署在容器中。 Pystol提供了两种界面,一种是Web UI,一种是通过CLI。显然,Web UI是更好的选择。

Muxy

Muxy 是一款用于测试系统弹性和容错模式的代理,可以模拟真实世界分布式系统中的故障。它能够篡改传输层(第4层)、TCP会话层(第5层)以及HTTP协议层(第7层)。

Muxy 的特点包括:

  • 模块化架构,易于扩展
  • 提供官方的Docker容器
  • 易于安装,无需依赖
  • 是持续测试系统弹性的理想选择
  • 模拟分布式系统和移动设备的网络连接问题

Pumba

Pumba 是一款命令行工具,用于对Docker容器进行混沌测试。使用Pumba,您可以故意使应用程序的Docker容器崩溃,以观察系统的反应。您还可以对容器资源进行压力测试,例如CPU、内存、文件系统、输入/输出等。

您还可以在Kubernetes集群上运行Pumba。 您必须使用DaemonSets在Kubernetes节点上部署Pumba。您可以使用多个Pumba容器在同一个DaemonSet中运行多个Pumba命令。

ChaosBlade

ChaosBlade 是阿里巴巴为系统注入实验的开源工具。它汇总了阿里巴巴过去十年中所经历的各种故障,并应用了最佳实践来避免这些故障。它遵循混沌工程的原则,来检查分布式系统的容错能力。

ChaosBlade 的特点包括:

  • 提供CPU、网络、内存、磁盘等多种资源的实验场景
  • 提供Kubernetes平台上节点、网络和Pod的实验场景
  • 提供易于使用的CLI命令来执行实验

Litmus

Litmus 遵循云原生混沌工程的原则。 Litmus工具旨在提供一个全面的框架,用于发现Kubernetes系统以及在Kubernetes上运行的应用程序中的弱点。

它包含一个混沌Operator以及围绕它的CRD (CustomResourceDefinitions),从而实现了即插即用的功能。这一切的目的是将您的混沌逻辑放入Docker镜像中,将其放入Litmus框架,并通过CRD进行编排。

Litmus 的特点包括:

  • 帮助站点可靠性工程师和开发人员发现Kubernetes系统中的弱点
  • 提供即开即用的通用实验
  • 为混沌工作流程管理提供混沌API
  • Litmus SDK支持Go、Python和Ansible,用于创建自定义实验。

Gremlin

Gremlin 致力于帮助工程师构建更具弹性的软件。它提供了一个安全、可靠且直接的平台,用于运行混沌工程实验。

无论您的系统部署在哪里,无论是公共云还是您自己的数据中心,您都可以使用Gremlin将故障注入到主机或容器中。

Gremlin 的特点包括:

  • 在您的主机或容器上安装轻量级代理,以注入故障
  • 提供10多种不同的基础设施攻击模式
  • 状态Gremlins允许您操纵系统时间、关闭或重启主机以及终止处理器。
  • 网络Gremlins可以注入延迟以模拟数据包丢失或丢弃流量。
  • Gremlin的Alfi库攻击可以通过Web应用程序、API或CLI进行配置、启动和停止。
  • 允许您精确控制想要攻击的影响范围
  • 允许您停止所有攻击并将系统回滚到稳定状态

Steadybit

Steadybit 的目标是主动减少停机时间,并提供对系统问题的可见性。 您可以在本地基础架构或云即服务 (SaaS) 上运行此工具。

要使用Steadybit,您需要定义情景、模拟实验、在生产环境中执行模拟实验,并将所有实验自动化。它会在您的系统上运行智能代理,以发现潜在问题和弱点。它可以轻松地与多个系统集成。

结论

继续积极应用混沌工程的原则,并使用上述工具来测试您的产品。这些工具将帮助您发现系统中许多未知的弱点,并帮助您提高系统的弹性。