2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Netflix 如何在 7 分钟内完成失效备援

  • 2018-07-23
  • 本文字数:2508 字

    阅读完需:约 8 分钟

2012 年冬季,美国东部区域的 AWS Elastic Load Balancer 服务出现问题,导致 Netflix 出现长达 7 个小时的服务中断。(Netflix 运行在 AWS 上,没有自己的数据中心。除了视频流,用户与 Netflix 的所有交互都是由 AWS 来处理的。用户在点击“播放”按钮后,我们的 CDN 服务器会提供视频内容。)在服务中断期间,所有进入美国东部的流量都无法访问我们的服务。

为了防止这种情况再次发生,我们决定建立一个区域失效备援系统。失效备援是一种计算机系统保护措施,在主系统发生故障时,备用设备自动接管主系统的工作。

区域失效备援降低了风险

我们扩展到三个 AWS 区域:美国两个(美国东部和美国西部),欧盟(EU)一个。我们保留足够的容量来执行失效备援,足以承担单个区域的服务中断带来的风险。

典型的失效备援如下所示:

  1. 发现其中的一个区域出现问题。
  2. 增大“救世主”区域的容量。
  3. 将一些来自问题区域的流量引到救世主区域。
  4. 将 DNS 从问题区域切换到救世主区域。

让我们来详细解释每一个步骤。

  1. 定位问题

我们需要度量指标,最好是一个可以告诉我们系统健康状况的度量指标。在 Netflix,我们使用一种称为每秒流启动量(简称 SPS)的业务度量指标,也就是已成功开始播放节目的客户端数量。

我们按照区域对这些数据进行分区,可以随时绘制出每个区域的 SPS 数据,并将它们与前一天和前一周的 SPS 数据进行比较。如果 SPS 图出现下降,表示用户无法播放流式节目,说明我们遇到麻烦了。

问题不一定出在云基础设施上。Netflix 生态系统由数百种微服务组成,问题有可能是糟糕的代码部署导致的,也有可能是因为海底电缆被切断,等等。我们可能不知道具体的原因,只知道出问题了。



如果只发现一个区域出现 SPS 下降,那么这是进行区域失效备援的最佳时机。如果多个区域都出现 SPS 下降,那我们就不走运了,因为我们一次只能对一个区域进行失效备援。这就是为什么我们要通过交错的方式,每次只在一个区域里部署微服务。如果部署出现问题,我们可以立即回滚,并调试问题。

  1. 加大救世主区域的容量

一旦确定了问题区域,我们就要准备让救世主区域接收问题区域的流量。在打开开关之前,需要适当地加大救世主区域的容量。

在这种情况下,多少容量才合适呢?Netflix 的流量模式在一天当中不是固定不变的。高峰期通常发生在下午 6 至 9 点左右,不过高峰期在不同区域达到的时间是不一样的。美国东部的高峰流量比美国西部要早 3 个小时,比欧盟区域晚了 8 个小时。

在对美国东部进行失效备援时,我们将来自美国东部的流量发送到欧盟区域,将来自南美洲的流量发送到到美国西部。这样做是为了减少延迟,并为客户提供最佳的体验。

我们可以基于每个微服务的历史数据,使用线性回归的方式预测在一天中的某个时间段被发送到救世主区域的流量。

一旦确定了每个微服务需要承担的流量大小,我们就通过设置每个集群的期望流量来触发伸缩,剩下的就是让 AWS 发挥它的魔力。

  1. 重定向流量

现在,微服务集群已经扩展好了,我们开始重定向从问题区域流向救世主区域的流量。 Netflix 开发了一款名为 Zuul 的高性能、跨地域的边缘代理服务器,并已经将它开源。

这些代理服务用于验证请求、对负载进行分片、重试失败的请求等。Zuul 还可以进行跨区域代理。我们用它将流量从问题区域发送出去,并逐渐增加需要重新路由的流量,直到达到 100%。

有了这种渐进式的代理,我们的服务就可以使用自己的伸缩策略进行反应式的伸缩,以便应对预测伸缩和实际伸缩之间存在的流量变化。

Zuul 承担了繁重的工作,将所有来自问题区域的流量转移到救世主区域。接下来是时候放弃问题区域了,而 DNS 切换在这个时候开始闪亮登场。

  1. 切换 DNS

失效备援的最后一步是更新指向问题区域的 DNS 记录,并将它们重定向到救世主区域。这将导致所有的用户流量从问题区域移走,而 DNS 缓存没有过期的客户端仍然被路由到问题区域。

以上就是有关 Netflix 进行失效备援的背景情况。这个过程需要很长时间才能完成——大约 45 分钟(还是在最好的情况下)。



用闪亮的新技术加速这一过程

我们注意到,大部分时间(大约 35 分钟)都花在等待救世主区域的扩容上。尽管 AWS 可以在几分钟内为我们提供新实例,但启动服务、进行预热、在注册 UP 之前处理其他启动任务占用了太多的时间。

我们认为这个时间太长了。我们希望在 10 分钟内完成失效备援,在不增加业务负担的情况下做到这一点,并且把成本控制在一定范围之内。

我们保留所有三个区域的容量,用于容纳失效备援流量。既然我们已经为这些容量付过钱了,为什么不用它们呢?于是,我们启动了 Nimble 项目。

我们的想法是为每个微服务维护一个热备份实例池。当我们准备好进行失效备援时,可以简单地将热备份实例注入到群集中,让它们处理实时的流量。

未使用的预留容量称为槽(trough)。 Netflix 的一些团队使用槽容量来运行批量作业,所以我们不能简单地将所有可用的槽变成热备份。相反,我们可以为每个微服务维护一个影子集群,并为这些影子集群准备足够多的实例,以便在一天当中的某个时间段处理失效备援流量。剩下的实例可用于批处理作业,其他人可以自由使用。

在进行失效备援时,我们并不是通过传统的伸缩方法触发 AWS 为我们提供实例,而是将影子集群中的实例注入到实时集群中。这个过程大约需要 4 分钟,而过去需要 35 分钟。

由于容量注入很快,我们不必谨慎地通过代理来移动流量,以便触发伸缩策略。我们只需要简单地切换 DNS 并打开闸门,就能极大地缩短服务中断的时间。

我们在影子集群中添加了过滤器,防止暗实例发出错误的度量指​​标。错误的度量指标会给度量空间造成混乱,影响正常的运营。

我们还通过修改服务发现客户端来阻止影子集群中的实例自己注册到注册服务上。在触发失效备援之前,这些实例将一直呆在小黑屋中(这当然是一句俏皮话了)。

现在,我们可以在 7 分钟内完成区域失效备援。因为利用了现有的预留容量,所以不会产生任何额外的基础设施成本。用于编排失效备援的软件由三名工程师组成的团队使用 Python 开发。

英文原文: https://opensource.com/article/18/4/how-netflix-does-failovers-7-minutes-flat

感谢张婵对本文的审校。

2018-07-23 18:012070
用户头像

发布了 731 篇内容, 共 480.0 次阅读, 收获喜欢 2008 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

一次故障演练,十分钟自动搞定?

华为云开发者联盟

运维 华为云 企业号2024年4月PK榜 华为云开发和联盟

国产化替代进程中金融行业的中间件

Onegun

信创 国产化

物资管理的挑战与机遇:利用技术提升效率与可持续性

天津汇柏科技有限公司

大模型Chatbots评估新视角:结合定性与程序方法的实践探索

百度开发者中心

人工智能 大模型

大模型区域落地再加速!百度“文心中国行”西部首站落地成都锦江

飞桨PaddlePaddle

百度 BAIDU 百度飞桨 文心一言 文心大模型

Appium控件互动攻略:提升自动化测试效率的必备方法大揭秘!

测吧(北京)科技有限公司

测试

企业为什么需要MES,万界星空科技MES系统的解决方案

万界星空科技

数字化转型 工业互联网 制造业 mes 万界星空科技

一文了解AI长文本工具:马斯克打脸OpenAI,全球最大巨无霸模型Grok-1开源!

蓉蓉

openai

大模型下B端前端代码辅助生成的思考与实践 | 得物技术

得物技术

JavaScript AI web前端 ChatGPT 企业号 4 月 PK 榜

魔搭×函数计算:实现大模型快速部署,加速AI应用落地

百度开发者中心

人工智能 大模型

以算力深挖数据应用价值!和鲸助力北京市市场监管数据应用创新竞赛圆满收官!

ModelWhale

大数据 数据应用 数据大模型

《2023年度快团团行业洞察报告》呱呱爆品重磅发布!

极客天地

捷途山海T2携手坦克300 Hi4-T上市,消费者该如何选择?

极客天地

Appium控件交互策略:优化自动化测试效率的关键方法

霍格沃兹测试开发学社

如何延长LED显示屏的使用寿命

Dylan

环境 角色 LED显示屏 全彩LED显示屏 led显示屏厂家

观测云产品更新 | 管理、容器、异常追踪、场景图表、DQL等

观测云

监控

OpenHarmony NAPI开发 主讲人:连志安

Laval小助手

百度沈抖:智能,生成无限可能

百度Geek说

AI 百度智能云 企业号 4 月 PK 榜

Penpad获Gate Labs以及Scroll联创Sandy的投资

西柚子

Appium控件互动攻略:提升自动化测试效率的必备方法大揭秘!

测试人

软件测试 自动化测试 测试开发

火山引擎ByteHouse:OLAP如何支持超高QPS点查?

字节跳动数据平台

大数据 企业号2024年4月PK榜

淘宝/天猫商品评论API:实时追踪用户反馈,洞悉市场动态

技术冰糖葫芦

api 货币化 API 文档 pinduoduo API

文本向量化模型新突破——acge_text_embedding 勇夺 C-MTEB 榜首

中杯可乐多加冰

rag 文本嵌入模型 文本向量化 文本嵌入

Netflix如何在7分钟内完成失效备援_架构_Amjith Ramanujam_InfoQ精选文章