前言:在复杂系统中,从不同微服务之间的交互到现实世界的破坏性事件,不可预测的结果随时笼罩着生产环境,混沌工程的初衷就是让工程师建立应对复杂系统中未知问题的信心。作为混沌工程的鼻祖 Netflix,在混沌工程的探索上,有着丰富的经验, 接下来让我们Netflix 的混沌工程实践。
曾经有一段时间,Netflix 通过邮件提供 DVD 租赁服务,但由于增长率有限,因此他们转而创建流媒体服务,并建立一个整体技术栈。
随着业务的爆炸性增长,IT基础设施拓展也迎来了挑战。
继而Netflix 团队建立了微服务,但这也带来了一些新挑战:
1. 可靠的网络
计算机网络受到以下影响:
延迟问题
网络故障
带宽限制
因此服务之间存在通信失败的风险。
2. 弹性
分布式系统的弹性能力取决于其最薄弱的组件,而最薄弱的组件通常等到发生故障影响服务后才会被发现。
为了更好地管理分布式系统,Netflix 团队进行了混沌工程实践。方法如下:
1. 实施
不存在停机时间为0的系统,但可以通过自动化来最大限度地减少停机时间。
因此,Netflix 团队会在办公时间主动发现潜在故障,然后自动修复。
这意味着如果故障再次发生,可以通过自动化快速修复,这种在受控实验中观察分布式系统的行为称为混沌工程,有助于在潜在问题导致生产中断之前发现它。
Chaos Monkey 关闭主数据库的流量
Netflix 团队创建了一个随机关闭服务器的工具,并将其命名为Chaos Monkey:
它通过持续交付平台获取有关可用服务器的信息
它通过持续交付平台进行交互以关闭服务器
然后他们检查流量是否被路由到另一台服务器而不会影响用户。
混沌工程的系统方法
他们进行混沌工程的方法如下:
对系统在故障期间的表现进行假设
运行一个小测试来引入故障 - 关闭服务器或更改网络配置
观察系统的行为并衡量故障影响
自动修复问题
然后重新运行测试以检查自动修复是否按预期工作,并在生产中运行混沌工程以确保准确性,但爆炸半径必须加以控制,以免影响用户。方法如下:
制定备用计划,应对最坏情况
如果出现问题,使用功能标记快速回滚更改
在生产前运行预生产测试
先运行小规模测试然后扩展
一次引入一个混沌变量,不要一次性破坏
此外,他们适当测量测试影响以防止不必要的损坏。
2. 原则
混沌工程原理
Netflix 团队围绕以下原则创建了混沌工程:
自动化测试以节省成本和时间
在生产中运行测试以获得相同的流量模式和可靠的结果
根据潜在影响和频率运行事件测试 - 服务器崩溃、错误的 API 响应、流量激增
关注可测量的输出来检查系统是否正常工作——吞吐量、延迟
控制并最小化爆炸半径
3.用例
混沌工程用例
以下是Netflix 团队利用混沌工程所做的事情:
减少故障次数
提高系统可用性 - 99.9%
查找潜在故障并自动修复
检查故障转移机制是否按预期工作
查找系统瓶颈和单点故障
检查数据备份和恢复是否按预期工作
检查系统如何响应服务依赖性故障
通过研究系统对各种流量的响应来制定更好的容量规划
检查系统是否能快速从故障中恢复——(MTTR )
此外,他们还创建了Chaos Monkey变体来处理更多用例。
他们用 Go 编写了 Chaos Monkey,并将其开源。
目前, Netflix 每年的停机时间仅有几分钟,并且仍然是全球最大的流媒体服务平台。
这个案例研究表明,测试对确保复杂系统稳定运行至关重要。
如果字段的最大可能长度超过255字节,那么长度值可能…
只能说作者太用心了,优秀
感谢详解
一般干个7-8年(即30岁左右),能做到年入40w-50w;有…
230721