如何 0 成本启动全员 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:012043
用户头像

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

关注

评论 1 条评论

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

2021年,最新Java硬核技能微服务、虚拟机、高并发,掌握轻松拿大厂offer

Java架构师迁哥

硬核!阿里自爆虐心万字面试手册,Github上获赞89.7K

Java架构师迁哥

优秀的开发者每天都在做什么?

学神来啦

程序员 码农 编码 经验分享

又到一年“粽子节”,快来测测你包的粽子颜值几分

华为云开发者联盟

端午节 华为云 modelarts 粽子

从零开始学习3D可视化之场景层级(2)

ThingJS数字孪生引擎

大前端 可视化 数字孪生

股价预测的基本思路(1)

Qien Z.

6月日更 量化投资 股价预测

重仓AI人才培养,打造产业落地升级护城河

百度大脑

人工智能

Python接口自动化之request请求封装

行者AI

接口 测试 自动化测试 封装

拆分电商系统为微服务

Vincent

架构训练营

一图读懂丨索信达灵枢如何助力金融机构提升模型管理效能

索信达控股

大数据 金融科技 监管平台 模型开发 数据管理平台

☕【JVM 技术探索】Class字节码指令操作介绍(上)

码界西柚

Java JVM Class字节码 6月日更

java异常分类和处理机制

加百利

Java 后端 异常 6月日更

深入了解一些字符串函数,内存函数(c语言)

小写丶H

c 字符串函数

iOS 面试秘籍全套

程序员 编程之路 iOS 知识体系

Vue3.0 组合式 API 分析与实践

百度开发者中心

开发者

动手实践,Linux安装php-vld全过程实录

架构精进之路

插件 6月日更 笔记分享

花了60天的时间肝出了这些spring,jvm,并发编程等学习笔记,春暖花开再战大厂!

Java架构师迁哥

从理论到实战只需七天!阿里P10撰写的Spring全家桶有多全面?

Java架构追梦

Java 阿里巴巴 架构 springboot SpringCloud

Github全面爆火,这份阿里Java面试复盘笔记到底有何魅力?

Java 程序员 架构 面试

极狐(GitLab)开课了!实践进阶五步走,助你成为DevOps专家

极狐GitLab

DevOps

Hadoop Committer如何炼成?爱奇艺新晋核心贡献人给出了这份攻略!

爱奇艺技术产品团队

hadoop 开源 程序员 Apache社区

一文带你,彻底了解,零拷贝Zero-Copy技术

奔着腾讯去

c++ Linux 缓存 零拷贝 Linux服务器开发

四面阿里巴巴如愿拿到offer定级P7,为此我筹备了半年

Java架构师迁哥

爱奇艺M2VOC挑战赛落幕,6篇论文被ICASSP2021收录

爱奇艺技术产品团队

Apache hadoop 开源 程序员 成长

狂刷了29天的阿里面试参考指南(恒山版),竟成功收到了12个offer

Java 程序员 架构 面试

推理综艺的正确打开方式!爱奇艺玩转智能技术,“互动+内容”引爆迷综季

爱奇艺技术产品团队

综艺节目 智能 影视制作

10大流行软件测试工具

百度开发者中心

测试工具

Electron 开发音视频

anyRTC开发者

Java 音视频 WebRTC Electron RTC

泰山版震撼来袭!阿里巴巴2021年Java程序员面试指导小册已开源

Java架构师迁哥

Boss直聘转发超90W次,Java面试突击手册 火遍全网,却遭封杀

Java架构师迁哥

奇亚矿机分币系统搭建,Bzz云算力挖矿系统

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