产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

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:011576
用户头像

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

关注

评论 1 条评论

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

前端面试指南之JS面试题总结

loveX001

JavaScript

Curve 文件存储:如何支撑百亿级文件?

网易数帆

文件存储 分布式存储 云原生存储 curve 企业号十月 PK 榜

带你从0到1开发AI图像分类应用

华为云开发者联盟

人工智能 华为云 图像分类 企业号十月 PK 榜

TiDB 的 graceful shutdown

TiDB 社区干货传送门

上新丨Kyligence Zen 上线海量指标模板,轻松变身指标达人

Kyligence

数据分析 指标管理 指标中台

被老板忽悠入局后,我如何在三年内让产品「起死回生」?

LigaAI

产品经理 产品管理 产品管理成功秘诀 产品负责人 企业号十月PK榜

盒马 iOS Live Activity &“灵动岛”配送场景实践

阿里巴巴终端技术

ios 灵动岛

震惊,改密码这件小事竟然让他差点累到吐血...

嘉为蓝鲸

运维 IT #WeOps

经验分享|用 Flutter 如何开发一个可运行小程序的 App

FinClip

一文了解 DataLeap 中的 Notebook

字节跳动数据平台

大数据 火山引擎 DataLeap

TiKV 源码阅读三部曲(二)读流程

TiDB 社区干货传送门

天翼云打造自研云操作系统TeleCloudOS4.0 推动算力蓬勃发展

Geek_2d6073

来自2年前端的面经

loveX001

JavaScript

云原生可观测套件:构建无处不在的可观测基础设施

阿里巴巴云原生

阿里云 云原生 可观测

备战双11,送你一份解压壁纸!

OceanBase 数据库

从“一云多芯”支持,看多元算力的全栈云方案

华为云开发者联盟

云计算 华为云 企业号十月 PK 榜 多元算力

2022年11月中国数据库排行榜:GaussDB获认证进前五,GBase得融资竞逐鹿

墨天轮

数据库 opengauss TiDB 国产数据库 KingBase

HDC 2022重磅首发《鸿蒙生态应用开发白皮书》,附全文

HarmonyOS开发者

HarmonyOS

WeOps赋能制造业数字化,助力坚美铝业IT高效管理

嘉为蓝鲸

DevOps 运维 AIOPS weops 嘉为蓝鲸

号称Java圣经!Github上爆火的1058页JVM全栈小册到底有什么魅力

Java全栈架构师

程序人生 JVM 架构师 java面试 jvm调优

开源共建携手并进 OpenHarmony使能千行百业生态成果亮相HDC2022

OpenHarmony开发者

OpenHarmony

CSS 边框也能动画?background-origin 和 -clip 来施加魔法~

掘金安东尼

CSS 11月月更

DevOps工具链的国产化之道

嘉为蓝鲸

DevOps 运维 IT

焱融全闪系列科普|固态存储核心技术 SSD

焱融科技

云计算 分布式 高性能 文件存储 全闪存储

DDL 毫秒级同步,Light Schema Change 的设计与实现|新版本揭秘

SelectDB

数据库 大数据 Doris schema 企业号十月 PK 榜

TiDB 2022 Hackathon 产品组决赛“不负责任”点评

TiDB 社区干货传送门

共筑行业标准,亚信科技AntDB数据库参与多项数据库行业标准研讨会

亚信AntDB数据库

AntDB aisware antdb AntDB数据库

带你了解NLP的词嵌入

华为云开发者联盟

人工智能 自然语言处理 华为云 企业号十月 PK 榜

即时通讯技术文集(第5期):零基础通信技术入门 [共15篇]

JackJiang

即时通信

PingCAP 携手阿里云,探索 TiDB 云原生的进阶之路

TiDB 社区干货传送门

案例故事丨MySQL or TiDB?HTAP 数据库在中国 SaaS 行业头部服务商的应用实践

TiDB 社区干货传送门

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