如何利用混沌工程打造健壮的分布式系统?
极客时间编辑部
讲述:子阳大小:2.18M时长:04:46
混沌工程作为一项处于普及阶段的技术,国内开发者对混沌工程的理解及实践尚处于初期阶段,日前,InfoQ 采访了 PingCAP 首席架构师唐刘,了解了他对混沌工程的理解以及 PingCAP 如何利用混沌工程打造健壮的分布式系统。
其实,混沌工程的理念很早之前就存在,唐刘表示,过去使用的错误注入就可以理解为混沌工程的一种表现方式,只不过 Netflix 将其提炼出来变成了通用准则,只要照着相关方法就能实施混沌工程,而这一技术诞生之际就与分布式系统密切相关,在《Chaos Engineering》一书中是这样表述的:
混沌工程是在分布式系统上进行实验的学科,目的是建立对系统抵御生产环境中失控条件的能力以及信心。
即使可预见所有在控制范围内系统的状态,也总是会出现意外情况,唐刘表示,混沌工程主要是解决常规测试不能覆盖的问题。对于分布式系统来说,因为其异常的复杂性,加上错误可能在任何时候、任何地点发生,众多常规测试方法并不能保证系统正确。
相比较而言,唐刘认为混沌工程比较适合对数据安全性要求较高的场景。此外,如果业务对故障容错有所承诺,也需要通过混沌工程验证系统是否可以支持容错。量化到具体指标来看,如果开发人员确定系统会宕机并且清楚宕机之后会造成较大损失,可以通过“支持快速终止实验”和“最小化实验造成的‘爆炸半径’”等方式实施混沌工程。
当执行任何混沌工程实验前,应该先有一个用来立即终止实验的“红色按钮”,更好的方法则是自动化该功能,当其监测到对稳定状态有潜在危害时立即自动终止实验。第二个策略涉及在设计实验时,考虑从实验中获得有意义结论的同时,兼顾最小化实验可能造成的潜在危害。
在开始研发 TiDB 时,PingCAP 就决定引入混沌工程,原因是起初开发分布式数据库时,整个团队很自然就想到需要保证开发的数据库能够让用户放心使用,这就需要进行各种各样的测试。当时,Netflix 开发的 Chaos Monkey 已经非常知名,得益于 Netflix 成功的部署经验,PingCAP 团队想到利用该工具解决稳定性问题。
回顾整个实践历程,唐刘表示大概可以分为三个阶段,第一个阶段是 2017 年之前,那时并没有自动化的概念,所有实验全部需要手动完成,包括申请机器、手动部署等。虽然比较繁琐,但也在系统上线之前发现了不少问题。
第二个阶段是从 2017 年到 2019 年初,PingCAP 基于 K8s 搭建了一套自动化 Chaos 框架,叫做 Schrodinger,这套系统极大提升了整体生产力,只需自定义要做的实验,Schrodinger 就能搞定。
第三个阶段则是 2019 年初至今,PingCAP 一直在做 Schrodinger Cloud,Schrodinger 主要是为测试 TiDB,也可用来测试 TiDB 的周边工具,甚至是合作伙伴的业务。面对这些需求,PingCAP 考虑基于 K8s 做一套更加通用的 Chaos 框架,采用 Operator 的方式,任何 Chaos 在 K8s 里面都是 CRD,用户只需要定义好自己的 CRD,Schrodinger 就可以自动完成后续事宜。
在开发混沌工程实验时,唐刘建议可遵循以下原则,将有助于实验设计:
建立稳定状态的假设;
多样化现实世界事件;
在生产环境运行实验;
持续自动化运行实验;
最小化“爆炸半径”。
具体来说,系统稳态可以通过一些指标,比如延迟和 QPS 数据等来定义,当系统指标在测试完成后,无法快速恢复稳态要求,可以认为这个系统是不稳定的;其次,引进多样化的现实变量,比如网卡、磁盘故障等;然后,最为重要的是在生产环境中进行验证,这样做是存在风险的,因此最好提前与协作部门同步;最后,自动化可以让整个过程的效率更高,最小化“爆炸半径”可以避免不必要的损失。
此外,根据过往实践经验,唐刘建议希望使用混沌工程的开发者可以参考混沌工程主页列出的步骤和原则。但是,要想真正实践,还需要做很多工作,包括更好地对系统进行错误注入,更好地发现系统问题,这些其实业界没有通用的解决方案,因此实践起来还是比较麻烦的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- 加菲猫混沌工程是Netflix产物,为什么称为混沌,是一套以不变应万变的方法论吗?
收起评论