Facebook怎样为数百万观众提供可靠的直播服务?

2020 年 11 月 04 日

Facebook怎样为数百万观众提供可靠的直播服务?

Facebook 直播业务简介


随着 Facebook Live 和Facebook Watch的增长,这些平台上分享的内容已经扩展到包含专业制作的广播质量的内容,比如演出和现场事件报道。像西甲(La Liga)、CONMEBOL 和欧足联(UEFA)提供的这种专业广播内容,与用户生成内容(UGC)相比,这是一个截然不同的挑战,而且观众的预期值要高得多。习惯了传统电视广播的可靠性和质量的观众,期望这些直播也会有近乎完美的观看体验。


Facebook 直播系统


虽然许多公司在其中一方面做的很好,但我们需要大规模地同时支持 UGC 和广播质量的直播。这些视频必须对每个人每次都有效。为实现这一点,我们建立了一个系统,能够管理 UGC(产生的设备各种各样,质量水平也参差不齐)和广播质量的高分辨率的流媒体——并且能稳定支持全球数十亿人。


要在这种规模上提供无缝的流媒体体验,整个系统,从接收到传输,都需要可靠——整个系统的可靠性取决于其最脆弱的组件。大部分 UGC 内容使用公共互联网,这会带来网络条件变化的风险:网络中某个地方的容量限制会降低质量,或者一个故障可能会导致观看者视频卡顿或缓冲。我们从不希望观众在社交媒体或专业广播中遇到这种中断体验,对于像欧洲冠军联赛决赛这样的大型活动来说,音频或视频丢帧几秒钟的影响也是很高的。


我们构建了新的接收能力,来弥补传统电视制作与为 UGC 观众设计的基于互联网的接收之间的差距。我们在每一点上都内置了冗余——传输、接收、处理、传送和回放——来确保系统能承受大部分类型的故障。而且,我们扩展了我们的传输基础设施,来支持前所未有的收视率。在这个过程中,我们还发现了新的故障模式——以及在下一次广播中缓解这些故障的方法。


该视频系统目前已投入生产,每天支持包括 UGC 和专业广播在内的数百万直播流量。在 8 月份,我们在 Facebook Live 上直播欧冠决赛时达到了巨量的并发观众数,这个系统证明了自己。在巴西和讲西班牙语的拉丁美洲,观看人数达到了 720 万人的并发量。确保这种级别的无缝的可靠性,需要接收和传输两方面的努力。


可靠的接收


因为风险很高,电视广播公司把所有东西都放在保证带宽的私有专用线路上。这些线路在地理上总是多样的:要么是两条独立的光纤,要么是一条光纤带一个卫星备份。为了可靠地支持相似的高收视率广播,我们使用了一些可控性强的广播设施(这些设施使用了我们自己管理的解码器),以便我们能轻松访问广播网络(通常是私人光纤和卫星链路),从而尽可能高地保持视频/音频质量和可靠性。该设施通过专用的多样化的连接与我们数据中心相连。


我们还构建了一些机制,允许将主数据流和备份数据流接收到我们的基础设施,并能在出现问题时手动或自动进行故障切换,将主数据流切换到备份数据流,同时确保观看体验保持完美无缺。



这种从支持整体广播到支持单一广播的转变,意味着我们传统上接受的事情(机器重启、网络故障、拥塞等)现在需要小心地缓解。这些缓解措施(协调的故障转移、专用链路容量、多个地理分布的线路等等)需要在整个比赛期间进行,包括事前和事后,能轻松地运行四个小时以上。


大规模传输


除了无缝大规模地接收内容外,我们还需要管理面向观众的视频内容的大规模传输。这些大型活动和广播公司会被数百万人关注,他们在直播开始时会收到通知。这就造成了同时观看直播的观众数激增。当边缘缓存服务器(位于用户附近)没有请求的内容时,它们将请求转发给底层服务。这就导致我们所说的惊群效应——太多的请求会使系统崩溃,导致延迟、丢失和断开连接。


我们已经建立了强大的技术设施,通过开发新形式的请求合并和缓存分片来保护我们的后端服务避免惊群效应,使我们在确保实时回放的同时能够可靠地传输视频内容。



在提供视频数据时,我们尽可能与 ISP 合作,防止网络因为这些高并发事件而过载。例如,当我们发现里约热内卢的观众体验因 Facebook 和某个 ISP 之间的拥塞而恶化时,我们将本地互联能力从 20 Gbps 提高到 120 Gbps。


因此,我们能将几乎所有的视频流量保持在观众的 ISP 网络中。这让我们的流量保持在国内而避免拥塞的国际链路上,这对 ISP(降低成本)和观众(改善体验)都有好处。


通过我们的直播视频缓存和与 ISP 的紧密连接,我们比以往任何时候都更接近我们的观众,因此我们可以提供更高分辨率的视频,并且卡顿更少。这些投资确保了数百万 Facebook 观众在欧冠决赛中有一个无缝的体验。


尝试


面向 720 万并发用户的欧冠决赛视频流是一次成功,让我们对最后一公里的连接挑战有了更多的理解。我们能无缝地接收视频、处理视频并将它传送到边缘(我们在这里与 ISP 互联),但是由于当前蜂窝技术的限制,对于流行比赛的最后一公里的无线传输是一个巨大的挑战。为了将来解决这个问题,我们正在探索使用 LTE 广播来为同一个蜂窝基站的每一个人共享一份视频流的副本,来克服这最后一公里挑战。


在连接性和互联网基础设施上进行投资是很重要的,有助于给更多人提供可靠的负担得起的网络。我们即将完成一条新的海底电缆,这将改善拉丁美洲的连接性并提高冗余度和恢复能力。


我们将继续评估新的边缘位置的部署,来帮助创建健康的网络互联生态系统,并保持流量都在国内线路,这些流量不仅仅是 Facebook 的流量,而是同一个国家的 ISP 之间的流量。


结语


虽然这对于我们来说是一个巨大的里程碑(也是一次学习体验),但这决不是道路的终点。我们的下一个挑战是除夕夜,这与我们在欧冠决赛中所面临的挑战相反。传统上,当世界各地的钟声敲响时,数百万人同时开始燃放烟花庆祝,我们会看到来自个人设备的实时流量达到峰值!对于除夕夜,我们不需要为少数非常流行的广播优化缓存,而是需要为大量同时进行的较小范围的视频流来优化我们的处理、I/O 和存储。


原文链接:


https://engineering.fb.com/2020/10/22/video-engineering/live-streaming/


2020 年 11 月 04 日 14:491504
用户头像

发布了 113 篇内容, 共 36.0 次阅读, 收获喜欢 161 次。

关注

评论 1 条评论

发布
用户头像


2020 年 11 月 06 日 16:01
回复
没有更多评论了
发现更多内容

Java内存模型和volatile、final等关键字

麻瓜镇

Java 多线程

《零基础学 Java》 FAQ 之 4-关于补码,多说两句

臧萌

Java 补码

给在线教学泼点冷水

启润

在线教育 基础教育

人人都应该懂的加密算法 - 公钥加密

麦叔

对称加密 加密解密 信息安全 公钥加密

《如何阅读一本书》读书心得

兆熊

读书笔记

Sentinel集成Nacos实现动态流控规则

Java收录阁

sentinel

浅析 - CocoaLumberjack 3.6 之 FileLogger

Edmond

ios log4j CocoaLumberjack DDLog 日志轮替

软件产品的信息安全问题

Interstate5

软件开发 信息安全

HTTP 升级 HTTPS 全过程记录

猴哥一一 cium

https 证书

大话区块链和比特币的技术原理

麦叔

比特币 区块链 数字货币 加密货币 加密解密

在实战中学习项目管理

兆熊

项目管理 专栏

《零基础学Java》 FAQ 之 零-这门课适合我吗?

臧萌

Java 编程语言

一口气带你踩完五个 List 的大坑,真的是处处坑啊!

楼下小黑哥

Java 踩坑 后端 集合

Spring Boot自动装配的原理

Java收录阁

Spring Boot

Dubbo和Spring集成的原理

Java收录阁

dubbo

谈知识付费

兆熊

设计模式入门和策略模式

设计模式

webpack入门(一)

子铭

Spring Cloud集成Sentinel

Java收录阁

Spring Cloud sentinel

软件产品开发流程

Interstate5

软件开发 软件开发流程

面向对象是什么

落英亭郎

面向对象

产品周刊 | 第 14 期(20200510)

Herbert

产品 产品经理 产品设计

自助设备系列——推广

孙苏勇

产品 行业资讯 智能设备

从nacos客户端的TIME_WAIT说起

小楼

Java TCP nacos

《零基础学 Java》 FAQ 之 3-为什么计算机里的浮点数不精确

臧萌

Java 浮点数

权威与边界

伯薇

权威 边界 BART 工作方式

程序员必需清楚的进程和线程

后端学长

线程 操作系统 进程

分布式限流框架 - Sentinel

Java收录阁

dubbo sentinel

如果想了解驱动开发,请不要错过这篇。

水滴

最佳实践 开发者 程序设计 测试驱动开发实战营

软件产品信息安全 - 数据分类

Interstate5

软件开发 信息安全 数据分类

用 Electron 打包语雀

封不羁

Java Electron

Facebook怎样为数百万观众提供可靠的直播服务?-InfoQ