Chaos Monkey技术原理

技术原理

Chaos Monkey 是一个测试弹性和恢复能力的工具。Chaos Monkey 的工作原则是避免大多数失效的主要方式就是经常失效。Chaos Monkey 破坏实例的主要方法有关闭服务实例、提高 CPU 占用率、阻塞网络 IO、写满硬盘空间等。Chaos Monkey 通过关停一个或多个虚拟机来模拟虚拟机实例的失效;也可以通过主动破坏自身环境来发现弱点,主要给用户检测自身环境中的失败条件;也可以随机关闭生产环境中的实例,确保网站系统能够经受故障的考验,同时不会影响客户的正常使用;通过终结自动伸缩群中的虚拟机实例,来检验系统是否能承受服务器的失效。

通过 Spinnaker Web UI,可以配置 Chaos Monkey 终止每个应用程序实例的频率。单击 Spinnaker 中的“配置”选项卡。应该有一个“混沌猴子”窗口小部件,你可以在其中为应用启用/禁用混沌猴子,以及配置其行为。默认情况下,Chaos Monkey 配置为终止两天之间的平均时间,这意味着,Chaos Monkey 平均将为该应用程序中的每个组每两天终止一次实例。Chaos Monkey 在终止之间也有最短时间,默认为一天。这意味着,每个组每天都不会给混沌猴子多杀一次的机会。即使部署了多个 Chaos Monkey,只要它们都配置为使用同一数据库,它们将遵守终止之间的最短时间。

混沌猴子对实例组进行操作。在每个工作日,对于每个已启用实例组,Chaos Monkey 都会掷出偏向硬币,以确定是否应从该组实例中杀死它。如果是这样,它将从组中随机选择一个实例。用户可以配置 Chaos Monkey 认为的组。这三个选项是:应用程式、堆、簇。如果将分组设置为“应用程序”,则无论这些实例如何组织为集群,Chaos Monkey 每天都会终止每个应用程序最多一个实例。如果将分组设置为“堆栈”,那么 Chaos Monkey 每天将在每个堆栈中最多终止一个实例。例如,如果一个应用程序定义了三个堆栈,那么 Chaos Monkey 每天可能会在该应用程序中杀死多达三个实例。如果将分组设置为“集群”,那么“混沌猴子”每天将在每个集群中最多终止一个实例。

默认情况下,混沌猴子将分别对待每个区域。但是,如果未选中“区域是独立的”选项,那么 Chaos Monkey 将不会终止位于同一组但位于不同区域中的实例。这旨在支持跨区域复制的数据库,而跨区域的同时终止是不可取的。但是也会有例外情况,也可以选择退出账户,区域,堆栈和明细的组合。在上面显示的示例配置中,Chaos Monkey 不会终止 us-west-2 区域中 prod 账户中带有“staging”堆栈和空白明细字段的实例。

解密器可以使用 MySQL 数据库密码和 Spinnaker p12 证书的密码的加密版本。Chaos Monkey 将在使用密码之前调用解密器解密密码。Chaos Monkey 不附带任何解密器实现。如果希望使用此功能,则需要实现自己的功能。如果要存储加密的密码并在运行时使用解密系统,则需要:给解密器起一个名字,在 Go 中编码一个实现 Decryptor 接口的类型,修改 decryptor.go,使其可以识别你的解密器,编辑配置文件以指定解密器。

错误计数器用于将 Chaos Monkey 生成的错误率记录到外部系统(例如度量标准或警报系统)。在 Netflix 内部,我们使用错误计数器将错误计数记录到度量系统 1:Atlas 中。如果希望使用外部系统记录错误计数,则需要:给错误计数器起一个名字,在 Go 中编写一个实现 ErrotCounter 接口的类型,修改 errorcounter.go,使其可以识别你的错误计数器,编辑配置文件以指定错误计数器。

-------------本文结束 感谢您的阅读-------------