为什么他们不用996,却能做到“永不宕机”?
来源 | InfoQ(id:infoqchina)
整理 | 核子可乐、燕珊
如果运气好,Netflix 的方案可能最终会成为行业标准。
上个月,Netflix 出品的《鱿鱼游戏》剧集再次引爆全球无数观众。虽然“身经百战”的观众早已对这类大逃杀题材的作品建立起充分的心理预期,但 Netflix 凭借着对反乌托邦题材的极致挖掘再次证明,他们有决心打造一出迄今为止最成功的原创剧集,同时也向其他竞争对手证明自己的业务高度已然遥不可及。
与此同时,很多同类流媒体平台还深陷老大难问题而无法自拔:视频卡顿、控件失效或者服务崩溃等等。而 Netflix 却鲜少出现问题,这离不开其优秀的基础设施建设。近日,《The Verge》撰文谈 Netflix 庞大的服务器网络 Open Connect,其指出,正是这个不被太多人在意的技术细节,从根本上解决了大部分现代流媒体面临的共同难题。
Open Connect 的奥秘
过去十多年来,Netflix 流媒体服务出过多少次技术问题?不能说没有,但肯定屈指可数。服务的核心,也就是应用程序底层的工程方案,才是决定一切流媒体成功与否的关键。
Netflix 用了十年时间搭建起一套名为 Open Connect 的服务器网络。Netflix 公司 Open Connect 副总裁 Gina Haspilaire 表示,当初之所以要构建 Open Connect,是因为 Netflix“清醒地意识到,我们需要构建一定水平的基础设施技术才能维持起我们想要获得的预期流量。我们觉得自己能成功,也知道当时的互联网还支撑不起预期中的全球流量规模。”
没人能在应用程序不断崩溃、视频老在缓冲的情况下坚持看完一部电影。Netflix 对这个问题很有先见之明,他们知道要想保持稳定的质量水平,首先需要建立自己的内容分发系统。
Open Connect 是 Netflix 的内容交付网络,专门用于向全球用户分发电视节目与电影。项目始于 2012 年,包括由 Netflix 向互联网服务商提供物理设备,借此实现媒体流量本地化。这些设备存储着 Netflix 的内容副本,负责减少内容在抵达播放用户之前需要经过的通道数量,借此减轻网络压力。
大多数主要流媒体服务都依赖于第三方内容交付网络(即 CDN)实现视频传递,正是这种通行实践让 Netflix 的自有服务器网络变得鹤立鸡群。如果没有像 Open Connect 这样的系统或者其他第三方 CDN,互联网服务商所请求的内容必须“通过一个对等点、再经由四到五个其他网络,才能抵达数据源头或者内容存储位置。”内容交付网络厂商 Akamai 媒体工程首席架构师 Will Law 强调,这不仅会拖慢内容交付速度,而且考虑到互联网服务商可能需要付费才能完成内容访问,所以整个实现成本也更为高昂。
为了回避流量和成本问题,Netflix 会提前将内容副本发送至自有服务器,从而防止 Netflix 流量在流媒体峰值时段被播放端网络所阻塞。
如果您正在学习Spring Cloud,推荐一个连载多年还在继续更新的免费教程:https://blog.didispace.com/spring-cloud-learning/
而且,Netflix 的服务器几乎无处不在。目前,Netflix 表示已经在 158 个国家 / 地区部署有 17000 台服务器,而且未来还计划进一步扩展其内容交付网络。根据介绍,Netflix 会根据哪些位置周边的用户更多、哪些区域的互联网服务器商合作门槛更低对服务器部署做出优先级排序。
Law 解释道,“为了提高性能,流媒体服务商纷纷将服务器尽可能靠近最终用户,再由这些服务器提供最后一英里区域内的网络内容。 这就避免了把所有内容请求都返回源头,再将内容经由互联网整体传递的过程。这不仅减轻了互联网的传输负担,也缓解了对等点的承载强度。”
十年前 Open Connect 刚刚立项时,Netflix 也确定了与互联网服务商全面合作的基本部署思路。Netflix 免费为互联网服务商提供服务器,再由内部可靠性团队与这些服务商一道维护这些服务器设备。根据 Netflix 与 Akamai 的介绍,互联网服务商也能从中受益,因为就近获取内容副本可以降低他们的网络基础设施运营成本。
Law 称,“由此带来的运营职责不算特别繁重,但却带来了令人释怀的解脱。而且这些服务器的基本作用跟 Akamai 乃至其他 CDN 完全相同,唯一的区别就是它们只服务于 Netflix,属于 Netflix 内容的专属 CDN。”
包括 Akamai 在内大多数主要第三方 CDN 服务商都需要服务成千上万客户并应对企业提出的种种要求,而 Netflix 的内部 CDN 只着眼于一个目标:分发 Netflix 内容。 Law 表示,为了顺利将电影或电视节目交付到每一位点播观众面前,内容分发商必须建立起这样一套全面的 CDN 合作关系或者服务器网络。
虽然 Netflix 没有透露他们搭建并维护这些服务器的具体成本,但也提到自十年前立项以来,Open Connect 的总投资已经达到 10 亿美元上下。 他们还在不断向 CDN 投入大量资金,继续坚定推进这一以良好观看体验与用户高参与度为核心的 Netflix 业务战略。很明显,Netflix 的整个订阅商业模式之所以成立,依靠的就是为用户提供符合预期的视频流质量。
Netflix 还需要考虑到一个残酷的现实:美国的互联网基础设施在本质上可谓支离破碎、头尾难以相顾。
电子前沿基金会的 Katharine Trendacosta 在采访中表示,“Netflix 之所以必须建立自有 CDN,是因为美国的互联网服务商实在垃圾得不行。 他们很清楚,只要寄希望于互联网服务商,就必然会有相当一部分用户始终受到视频缓冲或者低画质图像的折磨。”
为什么有效
Netflix 最关注的目标,就是无论互联网服务商有多差劲、都能保证用户享受到良好的内容观看体验。
为此,Netflix 会在服务器上为每部剧集或影片保留 3 个副本,这些副本的图像质量各不相同。如果您的互联网基础设施不堪重负甚至暂时中断,系统会导入码率较低的版本,保证用户始终有内容可看。
Haspilaire 解释道,“我们会根据网络质量调整内容,而不是根据内容调整网络质量。正因为如此,观众在观看时感受不到网络条件发生了哪些波动——流媒体内容一直在稳定呈现,而我们会随时间推移随时调整播放的版本……这样即使短时间内断开网络又重新连入,用户的屏幕上也不会出现缓冲提示。”
那么,为什么是 3 个副本?Trendacosta 指出,美国本地的互联网服务体验毫无可靠性可言。设施宕机、WiFi 连接不良乃至其他网络故障都有可能影响用户的互联网访问能力,而 Netflix 则尽可能与互联网服务商合作以解决大部分网络传输问题。
Haspilaire 提到,Netflix 会在非峰值时段预先部署好影音内容,保证这部分传输任务不会跟其他流量竞争互联网传输带宽。至于部署的具体内容和位置,Netflix 会提前预测高人气影片 / 剧集,并将数据相应发送至目标服务器。
Haspilaire 表示,“我们不只是把内容部署在世界各地的内容交付服务器上,同时也会根据预先做出的流行度预测设计部署方案。我们会预测哪些内容更受欢迎,并把影音尽可能部署在正确的服务器中。通过提前准备,我们的电影和剧集就能在黄金时段为几乎 100% 的观众提供本地副本,基本消除了由网络服务中断引发的糟糕观感。”
之后,Netflix 会根据内容的受欢迎度在服务器上转移视频。Open Connect 拥有两类服务器:闪存型(提供更快的交付速度)和存储型(最多可容纳 350 TB 数据)。 如果存储内容的人气不断提升,Netflix 就会把相应的副本转移到闪存服务器当中。
Netflix 公司解释道,“闪存服务器的基本定位就是支撑大部分流量服务,所以随着某些节目或影片的需求量提升,我们的 OCA 服务器就会把内容从存储型转移到闪存型、保障观众获得稳定的观看体验。”
新冠疫情的突然爆发,让全球数亿人窝在家中持续观看流媒体内容。而这一突发状况,也成为 Netflix 这项十年规划的收官之战与立威之路。Haspilaire 表示,“这场疫情以一种我们不愿看到的方式测试了 Netflix 基础设施与技术体系。”而 Open Connect 顶住压力,证明自己有能力帮助 Netflix 应对不断增长的未来需求。
另外,如果您正在学习Spring Cloud,推荐一个连载多年还在继续更新的免费教程:https://blog.didispace.com/spring-cloud-learning/
流媒体之王
Open Connect 是 Netflix 在疫情期间赢得良好市场表现的一大支柱,但 Netflix 力压竞争对手靠的显然不只这一招。Rayburn 也向《The Verge》列举了 Netflix 视频与音频编码项目的例子,强调虽然看起来 Netflix 当下已经建立起“巨大的优势”,但作为战场中的后来者,他们还需要凭借服务品质与服务态度去吸引和留存用户。
Rayburn 指出,“每个人都承认,Netflix 建立起了一套能够大规模稳定运行的系统,而这也是整个流媒体行业最不关注的方向。只有在规模化运营中始终提供良好、优质的消费者体验,我们才能获得如此庞大的订阅者群体。 没人拥有 Netflix 这样的基础设施规模,也没人拥有同等程度的专业积累。”
至于 Netflix 为什么这么成功,已经有不少人从各个角度进行剖析,其技术和企业文化也一直广受好评。资深架构师、微服务技术专家杨波曾向我们总结了一些 Netflix 的厉害之处,其中有几点尤其能体现 Netflix 在技术创新上的大胆和前沿。比如,在 2009 年左右, Netflix 就开始启动上公有云战略(虽然背后也是吃了自建数据中心的苦头),应用逐步向 AWS 迁移,这个过程一共持续了将近 5 年,到 2015 年的时候迁移完毕。而现在回想,2009 年左右的 AWS 其实还不太成熟,别说当时,即使现在也没有几个大厂敢提全部迁移公有云的战略。
又比如,Netflix 早在 2013 年就提出了 Cloud Native 理念,也就是现在常说的云原生,而且它的整个平台 (AWS IaaS + PaaS) 都是云原生的。近年容器技术大火,大家都在谈不可变基础设施的理念,本质就是镜像部署。Netflix 在 2012 年前就已经实现镜像部署,发布的单位是 AMI(Amazon Machine Image) 镜像。
另一方面,开放开源也是 Netflix 的一种竞争战略。在进行大规模生产级微服务架构实践的同时, Netflix 也开源了整个微服务技术栈,比如现在大家耳熟能详的 Zuul 网关、Eureka 服务发现注册中心、Hystrix 熔断限流、Archaius 配置等组件。对 Netflix 来说,开源有望能将自己的解决方案建立为行业标准和最佳实践。其次,开源亦可以帮助建立 Netflix 技术品牌,有利于雇佣、留住和吸引顶级工程师。第三,Netflix 可以从共享生态中获得反馈输入并受益。
随着其服务体系的不断扩张,也许终有一天各大老牌流媒体厂商反过来要从 Netflix 的基础设施与自上而下的业务战略中取经。甚至,Netflix 的方案可能最终会成为行业标准。
参考链接:
https://www.theverge.com/22787426/netflix-cdn-open-connect
往期推荐
最近有很多人问,有没有读者交流群,想知道怎么加入。加入方式很简单,有兴趣的同学,只需要点击下方卡片,回复“加群“,即可免费加入我们的高质量技术交流群!
点击阅读原文,送你免费Spring Boot教程!