每年宕机不超10分钟,Netflix如何使用混沌工程创建弹性系统

Neo Kim 2024-10-03 10:12:00

 

前言:在复杂系统中,从不同微服务之间的交互到现实世界的破坏性事件,不可预测的结果随时笼罩着生产环境,混沌工程的初衷就是让工程师建立应对复杂系统中未知问题的信心。作为混沌工程的鼻祖 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 每年的停机时间仅有几分钟,并且仍然是全球最大的流媒体服务平台。

 

这个案例研究表明,测试对确保复杂系统稳定运行至关重要。

 

作者丨Neo Kim   编译丨Rio
来源丨https://substack.com/@systemdesignone/p-146865156
 
*本文为dbaplus社群编译整理,如需转载请取得授权并标明出处!欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
最新评论
访客 2024年04月08日

如果字段的最大可能长度超过255字节,那么长度值可能…

访客 2024年03月04日

只能说作者太用心了,优秀

访客 2024年02月23日

感谢详解

访客 2024年02月20日

一般干个7-8年(即30岁左右),能做到年入40w-50w;有…

访客 2023年08月20日

230721

活动预告