使用混沌工程工具来检查生产可靠性
让我们看看如何借助混沌工程工具来保持生产的可靠性。
混沌工程是一种实验系统或应用程序的学科,以揭示其弱点和容量故障。这些都是在创建它时您没有想到会发生的事情。因此,您将故意在系统上造成一些故障,以显示其弱点,进行修复,并使您的系统和应用程序更具弹性。
像Netflix、LinkedIn和Facebook这样的许多知名组织都会进行混沌工程,以更好地了解其架构和分布式系统。它有助于尽早发现新的问题,并采取必要的措施加以纠正,而不是等到真正的用户投诉。这就是这些组织能够为数百万用户提供服务、提高生产力并节省数百万美元的方式🤑。
混沌工程的好处:
- 通过发现关键问题来控制收入损失
- 减少系统或应用程序故障
- 提供更少的中断和高可用性,从而提供更好的用户体验
- 它可以帮助您了解系统并增强信心。
您对生产的可靠性有多有信心?它真的能抵御灾难吗?
让我们借助以下热门混沌测试工具来找出答案。
混沌 Mesh
Chaos Mesh是一种混沌工程管理解决方案,可以在系统的每个层次中注入错误。这包括Pod、网络、系统I/O和内核。混沌 Mesh 可以自动终止 Kubernetes Pod 并模拟延迟。它可以中断 Pod 之间的通信并模拟读/写错误。它可以为实验安排规则并定义其范围。这些实验是使用 YAML 文件指定的。
混沌 Mesh 有一个仪表板,用于查看实验的分析数据。它运行在 Kubernetes 之上,支持大多数云平台。它是一个开源项目,最近被接受为 CNCF 的沙盒项目。使用混沌工程原则,您可以将混沌 Mesh 添加到您的 DevOps 工作流中,构建具有弹性的应用程序。
混沌工程特点:
- 可轻松部署在 Kubernetes 集群上,无需修改部署逻辑
- 不需要特定的依赖项
- 使用 CustomResourceDefinitions(CRD)定义混沌对象
- 提供仪表板以跟踪所有实验
混沌工具包
Chaos ToolKit是一个开源且简单的混沌工程实验自动化工具。
您可以使用混沌工具包与您的系统集成,使用其支持的一组驱动程序或插件,包括 AWS、Google Cloud、Slack、Prometheus 等。
混沌工具包特点:
- 提供声明性 Open API,可以独立于供应商或技术创建混沌实验
- 可以轻松嵌入 CICD 流水线进行自动化
- 还可以通过 ChaosIQ 提供商和企业支持
混沌 Kube
从名字可以猜到,它是为 Kubernetes 设计的。
Chaoskube是一个开源的混沌工具,它会定期终止 Kubernetes 集群中的随机 Pod。它可以帮助您了解当 Pod 失败时系统的反应。默认情况下,它会每 10 分钟终止一个命名空间中的 Pod。您可以在 Chaoskube 中使用命名空间、标签、注释等来过滤目标 Pod。可以轻松使用 Chaoskube 进行安装。
混沌猴
Chaos Monkey是一种用于检查云系统弹性的工具,它会故意创建故障,以了解系统的反应。Netflix 创建了这个工具,用于测试其 AWS 基础架构的弹性和可恢复性。它被命名为混沌猴,因为它像一只狂野和武装的猴子一样制造破坏,以测试故障。
此外,混沌猴子还催生了新的工程实践——混沌工程。它的创造基于这样一个原则:相较于突然发生重大故障,最好是反复地遭遇小规模故障。
混沌猴子的特点:
- 它帮助你应对随机实例故障。
- 鼓励在出现意外故障时进行冗余备份。
- 使用Spinnaker实现跨云兼容性。
- 提供可配置的计划表以模拟故障。
- 与govendor集成,以向混沌猴子添加任何新的依赖。
Simmy
Simmy是一种故障注入混沌工具,与.NET的Polly弹性项目集成。它允许您通过Polly为执行代码的位置创建混沌注入策略。它提供了不同的策略,例如异常策略(在系统中注入异常)、行为策略(注入任何新行为)等。这些策略旨在随机注入行为。
Simmy的特点:
- 提供猴子策略或混沌策略以注入混沌。
- 轻松测试任何依赖故障。
- 帮助快速恢复到正常模式,并控制冲击范围。
- 达到生产级准备。
- 还可以基于外部因素定义故障(例如,全局配置引起的故障)。
Pystol
Pystol是用于在云原生环境中注入故障的工具。它通过Kubernetes操作员监视ETCD中的事件。当执行故障注入操作时,操作员创建容器并运行一些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上运行的应用程序提供一个完整的框架,以发现其中的弱点。
它具有一个混沌操作器和围绕其的CRDs(CustomResourceDefinitions),允许即插即用的能力。这一切都是关于将混沌逻辑放入一个Docker镜像中,将其投入到一个Litmus框架中,并使用CRDs进行编排。
Litmus功能:
- 帮助站点可靠性工程师和开发人员找到Kubernetes系统中的弱点
- 提供现成的通用实验
- 提供用于混沌工作流管理的混沌API
- Litmus SDK支持Go、Python和Ansible,用于创建自己的实验。
Gremlin
Gremlin帮助工程师构建更具弹性的软件。它提供一个安全、可靠、简单的平台来运行混沌工程实验。
无论主机或容器在何处,Gremlin都可以有针对性地注入故障,无论是公共云还是您自己的数据中心。
Gremlin功能:
- 在主机或容器上安装轻量级代理以注入故障
- 提供10多种不同的基础设施攻击模式
- 状态混乱器可以让您操纵系统时间,关闭或重启主机以及终止处理器。
- 网络混乱器可以注入延迟,引入数据包丢失或丢弃流量。
- 通过Web应用程序、API或CLI,可以配置、启动和停止Gremlin的Alfi库攻击。
- 允许您精确地攻击所需的影响范围
- 允许您停止所有攻击并将系统恢复到稳定状态
Steadybit
Steadybit旨在主动减少停机时间,并提供对系统问题的可见性。您可以在基础架构或云上作为服务(SaaS)上本地运行此工具。
要使用Steadybit,您需要定义情况,模拟实验,对生产环境执行模拟实验,并自动化所有实验。它在您的系统上运行智能代理以发现潜在问题和弱点。它可以轻松集成多个系统。
结论
勇敢地应用混沌工程原则,并使用上述工具测试您的生产环境。这些工具将帮助您发现系统中的多个弱点,并使您的系统更具弹性。