内容来源:DevOps案例深度研究 – Netflix的文化与工程实践战队(本文只展示部分案例PPT及研究成果,更多细节请关注案例分享活动,及本公众号)。

本案例内容贡献者:高金梅,李晓莉,潘雄鹰,潘晓华,任广印,孙亚雄,王英伟

本次案例解读:潘晓华

原文首发于简书-潘晓华Michael

(捣乱猴子)
本篇来自于本人6月-7月参加的“DevOps案例深度研究”活动Netflix案例研究的第五部分,详细介绍了Netflix的混沌工程。
经过一个月的战斗,四个版本的迭代,Netflix战队最后交付了让所有人满意的战果,并获得了全场唯一的案例研究最佳小组奖杯。感谢我们的战友,还有指导老师,姚冬老师和徐磊老师。

(本案例所有研究人员)

一、Netflix实施混沌工程的背景

(混沌工程)
08年Netflix决定把它的业务迁移到aws上,从自身运维的角度考虑,它有很多担忧的地方。
  • 很长时间内有两套系统在同时运行,运维的复杂度更高了。
  • Netflix的用户量已经达到了1亿,对应用稳定性依赖很高,如果出现故障对用户的影响非常大,甚至是致命的。
  • 它的业务不断复杂,引入微服务架构,对应用的高可用性要求越来越高。
  • 生产环境非常复杂,是多样性的,很难在测试环境中完全模拟生产的状态。
因此,Netflix决心探索一种在生产环境验证应用高可用性的一种方法,这就是现在大家所熟知的混沌工程。

二、混乱工程的发展

(混乱工程的发展)
  • 2010年,捣乱猴子诞生

  • 2011年,猴子军团,有了更多场景下的工具集

  • 2012年,开源了捣乱猴子的代码,建立社区,影响了越来越多的公司混沌工程的发展

  • 2014年,Netflix创建了新的工作角色,混沌工程师,代表了Netflix将混沌工程融入了公司的运维文化中

  • 2015年,Netflix与社区正式提出混沌工程原则,从此混沌工程不只是一些工具的集合,而有了一套理论支撑

  • 2016年,Netflix前员工Kolton Andrus创立了Gremlin,正式将混沌实验工具商用化,可以看到混沌工程影响着越来越多的企业。

  • 2017年,Chaos Monkey 2.0

从一只猴子,发展成庞大的猴子军团,是Netflix在生产实践中不断探索与不断进化的结果。

三、Netflix猴子军团

(Netflix猴子军团)

Netflix猴子军团包括很多工具:
  • Chaos Monkey,捣乱猴子,可以随机关闭生产环境中的实例,确保网站系统能够经受故障的考验,同时不会影响客户的正常使用。

  • Latency Monkey,延迟猴子,在RESTful服务的调用中引入人为的延时来模拟服务降级,测量上游服务是否会做出恰当响应。通过引入长时间延时,还可以模拟节点甚至整个服务不可用。

  • Conformity Monkey,一致性猴子,查找不符合最佳实践的实例,并将其关闭。例如,如果某个实例不在自动伸缩组里,那么就该将其关闭,让服务所有者能重新让其正常启动。

  • Doctor Monkey,医生猴子,查找不健康实例的工具,除了运行在每个实例上的健康检查,还会监控外部健康信号,一旦发现不健康实例就会将其移出服务组。

  • Janitor Monkey,守卫猴子,查找不再需要的资源,将其回收,这能在一定程度上降低云资源的浪费。

  • Security Monkey,安全猴子,这是Conformity Monkey的一个扩展,检查系统的安全漏洞,同时也会保证SSL和DRM证书仍然有效。

  • 10-18 Monkey,本地化猴子,进行本地化及国际化的配置检查,确保不同地区、使用不同语言和字符集的用户能正常使用Netflix。

  • Chaos Gorilla,捣乱大猩猩,Chaos Monkey的升级版,可以模拟整个Amazon Availability Zone故障,以此验证在不影响用户,且无需人工干预的情况下,能够自动进行可用区的重新平衡。

  • Chaos Kong,捣乱金刚,Chaos Gorilla的升级版,可以模拟整个Region的故障。

这些工具向我们展示了Netflix的一套方法论,混沌工程并不是一些测试工具的集合,而是一种思想:在生产实践中遇到问题时,利用混沌工程的思想,实施自己的一些混沌实践,引入新的猴子。相信以后会有越来越多的猴子加入到猴子军团。
使用 Simian Army 进行混沌工程实验,看起来似乎已经很完美。在生产上做这样不可控的实验,是很危险的。

四、混沌工程的原则

(混沌工程的原则)
引入混沌实践时需要了解混沌工程的五大原则。
1)建立稳定状态的假设
在做混沌工程实验的时候,首先得确定需要测试的指标已经做了高可用的工作,才能进行验证指标对业务的是否有影响。如果没有做好高可用工作,而引入混沌工程实验的话,对业务而言将会是一声灾难。
2)多样化现实世界事件
不能够凭空想像出一些事件来验证,而是引入那些真实存在的,频繁发生的,且影响重大的事件。对我们而言给这些事件做混沌实验才具有价值。如磁盘故障、网络延时、主机宕机等。
3)在生产环境运行实验
尽量在类生产环境中进行测试,生产环境的多样性是任何其它环境无法比拟的。混沌工程的价值就是保证生产上的业务连续不中断。
4)持续自动化运行实验
实施混沌工程实验一般最开始是人工手动操作,当我们对业务有足够的信心时,要把混沌实验做成持续自动化。在版本升级、不断迭代的过程中,持续不断自动化地做验证,最大程序保证业务的连续性验证。
5)最小化影响范围
做混沌工程的意义就是保证生产上的业务。在我们实施混沌实验时也必须保证对线上业务影响最小。在实施实验时,从小范围开始,不断扩大范围,避开高风险时段,如选择业务量最小的时候实施实验。

五、混沌工程实践步骤

(混沌工程实践步骤)

有了这些原则,就可以根据业务的真实场景设计混沌工程实验。

在真实展开实验时分为两个阶段:准备阶段、执行阶段。

1)准备阶段

  • 确认本次实验需要验证的目标。遵循建立稳定状态的假设、多样化现实世界事件的原则。例如:Redis的超时不会对系统影响。代码中已经对Redis超时的情况做了相关的工作,保证业务的可靠。实验只是用来测试验证。
  • 选择实验范围。遵循对线上业务影响最小、尽量与生产环境相近的原则。例如先测试环境验证,生产环境选择最小量用户验证。
  • 确认监控指标。例如:订单成交量、应用请求响应时间、应用响应错误率,做好监控实时查看状态。
  • 团队成员沟通。遵循最小化影响范围。确保团队相关成员了解实施情况,关注业务状态。准备阶段一般只是第一次实验的时候操作,一旦验证好了以后以后,后续重复执行本次工程不需要重新准备,除非对实验过程有变动。

2)执行阶段

  • 执行实验。遵循最小化影响范围。执行过程中实时关注指标,如果有异常,随时终止实验。例如,把Redis延时调大,查看监控指标是否有异常。
  • 分析结果。遵循最小化影响范围。根据收集的指标数据确认假设Redis的超时不会对系统影响。如果验证假设不成立,则需要分析代码,确认好原因,再组织下一次的混沌工程实验。
  • 扩大实验范围。遵循最小化影响范围。先小范围测试,再逐步扩大测试范围。
  • 自动化。遵循持续自动化运行实验。当对代码有足够的信心之后,将混沌工程实践做成自动化,让混沌工程实验能够持续保证业务的可用性,获得最大的价值。

六、Chaos Monkey在K8S集群下的应用

(Chaos Monkey在K8S集群下的应用)
Kubernetes是容器编排市场的领导者。如何保证K8S集群及运行在上面的应用能够抵御生产中动荡环境的能力和信心呢?正确地使用混沌工程实践是这里面的关键。我做了一些调研,找到了常用的三款在K8S环境下的混沌工程工具。
  • Kube-monkey:模拟在指定时间随机删除K8s集群中的pod。

  • Powerfulseal:控制K8S中的Pod及Node节点的状态。

  • Gremlin:是一个商业版工具。通过web/API/CLI的方式对容器、主机,提供数十种攻击方式,方便与其它工具进行集成。

总结

可见混沌工程并不仅仅是在传统运维、云平台发挥着作用,在最新的基础架构设施容器平台中也发挥着它的价值。我相信会有越来越多的企业将意识到混沌工程给系统带来的各种好处,不久的将来,混沌工程实践也许会成为基础设施运维与应用运维不可或缺的一部分。

参考文章

  • Netflix 混沌工程手册:https://www.infoq.cn/theme/13

  • Unleash the Chaos Monkey:https://www.ibm.com/developerworks/agile/library/a-devops4/index.html

  • Netflix的Chaos Monkey的一个实现用于Kubernetes集群:https://go.ctolib.com/kube-monkey.html

  • 获得1.25亿用户以后,Netflix总结了这些系统可用性经验:https://www.huxiu.com/article/258949.html?rec=similar

  • Istio Chaos Engineering: I Meant to Do That:https://developers.redhat.com/blog/2018/04/10/istio-chaos-engineering/

  • AWS云上混沌工程实践之启动篇:https://aws.amazon.com/cn/blogs/china/aws-chaos-engineering-start/

拓展阅读:

混沌工程详细介绍——Netflix持续交付实践探寻相关推荐

  1. 【混沌工程】什么是混沌工程? 介绍、定义及更多

    软件和系统开发是创新和解决未知问题的练习.软件和系统是容易出错的,因为它们是由具有不同观点和技能的人(很可能是多人)制作的.技术变得越来越分散和复杂,尤其是随着微服务的推动.很少有人拥有完整的端到端知 ...

  2. 大型金融企业DevOps持续交付实践

    作者介绍 符强,新炬网络DevOps专家,从事IT行业10余年,拥有丰富的开发.测试.运维工作经验.现致力于DevOps相关建设与实施推广的研究,具有多个大型电信.金融企业DevOps项目经验. De ...

  3. 「芒果TV」叶静涛:芒果TV的Spinnaker多云持续交付实践

    亚太内容分发大会暨CDN峰会一直致力于推动CDN产业深度融合发展和市场普及,现已成为亚太地区影响力最大的内容分发网络盛会.十年来,在以阿里云.网宿科技.腾讯云等亚太CDN产业联盟成员孜孜不辍的努力下, ...

  4. 云效平台:企业级互联网架构下的持续集成与持续交付实践

    摘要:本文的整理自2017云栖大会-南京峰会上阿里云高级技术专家鲁小川的分享讲义,讲义主要分享了阿里云云效平台对于企业级互联网架构下的持续集成与持续交付的实践经验,首先介绍了阿里云云效平台的起源,之后 ...

  5. 关于《在Windows与.NET平台上的持续交付实践》的问答录

    <在Windows与.NET平台上的持续交付实践>(Continuous Delivery with Windows and .Net)(免费下载)是由Matthew Skelton与Ch ...

  6. 产品迭代发布如何更快速?阿里持续集成与持续交付实践之路全解析

    2017年5月9日,云效平台资深研发工程师向禹通过直播分享了<持续集成与持续交付实践之路>.他从云效背景.云效方案.云效价值三个方面进行了分享.他主要分享了持续集成持续交付的解决方案和案例 ...

  7. DevOps与持续交付实践

    Danilo Sato表示:DevOps是旨在打破开发团队与运维团队之间的壁垒的一次尝试,这两者对于成功的软件交付来说都是必不可少的.他的新作<实战DevOps:可靠的自动化软件交付>(D ...

  8. OPPO粟俊娥:OPPO研发云持续交付实践之路

    嘉宾 | 粟俊娥   整理 | 孙正印 出品 | CSDN云原生 2022年5月17日,在CSDN云原生系列在线峰会第5期"DevOps峰会"上,OPPO研发云产品负责人粟俊娥分享 ...

  9. [持续交付实践] 最后一公里,你需要一套具备质量思维的发布平台!

    [持续交付实践] 最后一公里,你需要一套具备质量思维的发布平台! 前言 发布是持续交付的最后一公里. 传统上,软件的最终发布是个充满压力的过程,需要大量的手工配置.操作和团队配合.为了发布的可靠性,开 ...

最新文章

  1. html中表格的页眉页脚,有一个标准的页眉页脚布局HTML网页,而无需使用table标签...
  2. 不同频率数据的处理方法V2
  3. Dotnet Core IHttpClientFactory深度研究
  4. 结对项目 刘静 201303014059 计科高职13-2
  5. 骁龙865确定:年底发布 支持5G!
  6. Mongoose的增删改查
  7. python调用win32api详解_Python调用Win32 API实现截图
  8. 酒店管理系统(前台后台管理)
  9. 致谢zyf2000,仅是你的备份,留念和记录学习C++的足迹
  10. 20多岁的生活方式决定了你30岁的打开方式_演讲稿
  11. Falled to crcate the site. Peaseauthorize ArcGIS Server by navigating to the Apps page
  12. MediBangPaint Pro for mac(优秀漫画制作软件)
  13. 【论文阅读】SABRE: Protecting Bitcoin against Routing Attacks
  14. 在iOS中进行Mapbox地图开发杂谈
  15. Keras防止过拟合(一)Dropout层源码细节
  16. 企业对接Walmart平台API流程(一)
  17. html的静态网页花艺彼岸的花,【花艺分享】插花艺术(之二)
  18. adc0809 c语言程序,单片机C语言程序设计:ADC0809数模转换与显示
  19. SteamVR脚本解析
  20. 超聚变服务器操作系统FusionOS与阿里云PolarDB数据库完成兼容性认证

热门文章

  1. Stay Hungry Stay Foolish——网络学习平台分享
  2. 构建微型数据中心——在laptop上运行Rancher
  3. 雷兽的数据库CAP乱谈之(一)阐述
  4. bitmapdata的知识点
  5. Servlet学习一
  6. 16 个 Linux 服务器监控命令和watch
  7. 12 月份 10 个新鲜的 jQuery 插件和教程
  8. .net framework3.0_
  9. RHEL5.1下安装GCC
  10. 万万没想到,一个 MongoDB.Driver 的 bug 导致 .NET5 程序死锁!