9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

Facebook 是如何支持 80 万并发视频流直播的

  • 2016-11-17
  • 本文字数:3504 字

    阅读完需:约 11 分钟

具备构建横跨全球的分布式服务能力的公司寥寥无几,甚至比拥有核武器的国家还要少。然而,Facebook 就是这样的一个公司,它的视频流直播系统 Facebook Live 就是一个横跨世界的分布式服务。Facebook 的 CEO Mark Zuckerberg 说:

我们做了一个重大决定,把更多的精力集中在视频直播上。因为直播是一种新兴的方式,跟过去五年甚至十年的那些离线视频不一样……我们正迎来视频的新黄金时期。如果把时间快进五年,人们在 Facebook 上看到的和他们每天分享的大部分内容都是视频,这对我来说一点也不惊奇。

如果你身处广告行业,还有什么比获得源源不断的可作为广告载体的内容更能激动人心?这些内容不拘一格地出现,持续增长,永不停息。谷歌在这上面打起了如意算盘,开始把广告业务的重心压在呈指数级增涨的Web 上。

能够体现Facebook 在流视频方面具有强大能力的例子,当属那个两人使用橡皮圈撬开一个西瓜的视频。这个视频时长45 分钟,高峰时段有80 万人同时在线观看,这些观众还给出了30 万份评论。对于一个拥有15 亿用户的社交网络来说,这样的并发量可以说已经达到了病毒级规模。

2015 年的 Super Bowl(美国国家美式足球联盟年度冠军赛)有 1 亿 1 千 4 百万观众,其中大概有 236 万观看的是视频直播。在 2015 年的 E3 游戏展期间,Twitch 直播系统高峰期用户达到 84 万。9 月 16 日的共和党辩论在高峰时有 92 万 1 千人同时在线观看直播。

这么看来,Facebook 也已经是名列前茅了。这里要注意的是,Facebook 在同一时间还要处理其它大量的视频流。

有一篇文章引用了 Facebook 首席产品官 Chris Cox 的话,他说 Facebook:

  • 有超过100 人同时工作在 Live 项目上(刚开始只有 12 个人,现在有 150 多人)
  • 希望并发直播流的服务能力可以达到百万级别
  • 希望可以做到单个流支持百万并发用户,还能无缝地支持跨设备、跨地域的视频流服务

Cox 说“我们发现这是一个非常具有挑战性的基础设施问题”。如果把我们解决这个问题的细节公之于众应该会很有趣的吧?天啊!不过等等,我们会这么干的!

Federico Larumbe 来自 Facebook 流量团队,他负责的缓存系统支撑着 Facebook 的 CDN 和全局负载均衡器。他为我们带来了“横向扩展 Facebook Live ”的出色演讲,分享了 Live 的一些工作细节。

下面是我对这次演讲做的笔记,它真的令人印象深刻。

最初的故事

  • Live 是一个可以让人们实时分享视频的新项目。
  • Live 在 2015 年 4 月份启动,当时只能通过 Mentions 使用,作为少数高端人士与他们粉丝之间的互动工具。
  • 在之后的一年里,产品不断改进,协议也在迭代更新。
    • 他们开始使用 HLS ,也就是 HTTP Live Streaming。iPhone 开始支持 Live,并允许他们使用现有的 CDN 架构。
    • 同时对 RTMP (Real-Time Messaging Protocol)进行调研,RTMP 是一个基于 TCP 的协议。手机端分别有一个视频流和音频流被发送到 Live Stream 服务器。
      • 优点:RTMP 缩短了从广播者到观看者之间的延迟,这个对广播来说意义重大。减少几秒钟的延迟,从用户体验方面来说就是一个很大的改进。
      • 缺点:需要全新的架构,因为它不是基于 HTTP 的。需要开发新的 RTMP 代理,这样才能大规模使用。
    • 同时调研了 MPEG-DASH (基于 HTTP 的动态自适应流)。
      • 优点:相比 HLS,它可以节省 15% 的空间。
      • 缺点:它支持自适应比特率,编码质量取决于网络的吞吐量。
  • 2015 年 12 月,在多个国家启动了该项目。

不同的直播视频引起的问题

  • 之前提到的撬西瓜视频的流量模式:
    • 刚开始增涨很快,在几分钟内就超过每秒 100 个请求,然后持续增涨,直到视频结束。
    • 然后流量呈断崖式下降。
    • 换句话说,流量的形状就像一个尖刺。
  • 直播视频跟一般的视频不一样,它的流量模式呈尖刺状
    • 直播视频更吸引人,比一般视频会多出3 倍以上的浏览量。
    • 直播视频会出现在显眼位置,更有可能被浏览到。
    • 网站的忠实用户会收到通知,所以有更多的人可能会看到视频。
  • 尖刺流量模式会给缓存系统和负载均衡器带来一些问题。
  • 缓存系统问题
    • 有可能很多用户同时观看视频直播。这样会造成惊群( Thundering Herd )问题。
    • 尖刺流量模式会给缓存系统带来压力。
    • 视频按秒分段存储,缓存视频分段的服务器有可能在流量高峰时过载。
  • 全局负载均衡问题
    • Facebook 的 PoP( Point of Presence )服务器分布在世界各地,流量通过全局进行分发。
    • 如何防止高峰流量拖垮 PoP 是个具有挑战性的问题。

全局架构

视频直播流从主播端到观众端的流程是这样的:

  • 主播在他们的手机上发起一个视频直播。
  • 手机把 RTMP 流发送到 Live Stream 服务器上。
  • Live Stream 服务器对视频流进行编码并转成多种比特率。
  • 服务器为每种比特率持续地生成 MPEG-DASH 分段。
  • 分段被存储在数据中心的缓存里。
  • 分段从数据中心的缓存转发到 PoP 的缓存里。
  • 观众端接收直播流。
  • 观众端设备上的播放器以一定的速率从 PoP 缓存里获取分段。

如何横向扩展

  • 在数据中心缓存和 PoP 缓存之间存在一个多路分发点。用户访问的是PoP 缓存,而不是数据中心缓存,而且有很多 PoP 缓存分布在世界各地。
  • 在每个 PoP 里也有多路分发机制。
    • PoP 内部被分为两层:一层是 HTTP 代理,一层是缓存。
    • 用户向 HTTP 代理请求分段,代理检查分段是否已经在缓存里,如果是,就返回分段,否则请求会被发送到数据中心。
    • 不同的分段被存储在不同的缓存里,这样有助于在多个缓存主机间进行负载均衡。

避免数据中心出现惊群效应

  • 如果所有用户同时对同一个分段发起请求会出现什么情况?
  • 如果分段不在缓存里,所有请求都会被发送到数据中心。
  • 合并请求。在 PoP 缓存里使用合并请求可以减少发送请求的数量,这样只有一个请求会被发送给数据中心。其它请求会等待第一个请求返回的响应,然后把数据返回给用户。
  • 增加一个新的缓存层,避免出现热点服务问题
    • 所有用户向的请求都发给同一个主机会造成该主机过载。
    • 在代理里增加缓存层。只有第一个请求会访问到缓存,代理会处理剩下的请求。

PoP 还存在风险,需要全局负载均衡来救场

  • 数据中心的惊群问题得到了解决,但 PoP 仍然存在风险。Live 存在的一个问题是,在 PoP 达到负载均衡器的负载指标之前,高峰流量已经让 PoP 发生过载。
  • 每个 PoP 的服务器数量和连接带宽都是有限的。如何避免 PoP 在高峰时发生过载?
  • 一个叫 Cartographer 的系统把子网跟 PoP 映射起来,它会对每个子网和 PoP 之间的延时进行监测。
  • 在知道每个 PoP 负载的情况下,用户请求会被发送到距离最近的可用 PoP 上。代理有一个负载计数器记录了它们的负载情况。通过收集这些计数器我们就可以知道每个 PoP 的负载情况。
  • 现在出现了对 PoP 处理能力的约束和最小化延迟的优化问题。
  • 控制系统在收集指标和作出反应方面存在延时。
  • 他们把指标收集时间从一分半钟减少到 3 秒,不过 3 秒仍然是延迟。
  • 解决方案是对负载进行预测
  • 他们实现了一个负载评估器,通过前一个负载和当前负载来推断后面的负载。
    • 如果当前负载是增加的,那么评估器如何能推断下一个负载会减弱?
    • 他们使用了三次样条插值 Cubic Spline Interpolation )功能。
    • 先获得第一个和第二个导数,如果速度是正数,说明负载在增加。如果加速度是负数,那么说明速度在下降,并最终变成零。
    • 三次样条插值可以预测更复杂的流量模式,不仅仅是线性模式。
    • 避免振动
    • 插值功能同时解决了振动问题。
    • 指标收集和反应出现延迟说明数据已经过时。插值会减小误差,预测更准确,同时减少振动。这样负载就可以接近预设值。
    • 目前的预测是基于前三次的时间间隔,每个间隔 30 秒,所以得出的结果几乎是实时的。

测试

  • 想办法让 PoP 过载。
  • 构建一个负载测试服务,为 PoP 模拟直播流量。
  • 模拟 10 倍于真实数据的负载。
  • 模拟每次请求一个分片的客户端。
  • 这个测试系统有助于发现和修补负载评估器的漏洞,用以调整配置参数,并验证用于解决惊群问题的缓存层是否工作正常。

上传的可靠性

  • 实时上传视频是一个挑战。
  • 举个使用 100Kbps 到 300Kbps 的网络带宽上传视频的例子。
  • 音频需要 64Kbps 的吞吐量。
  • 标准分辨率的视频需要 500Kbps 的吞吐量。
  • 手机的自适应码率用于协调视频跟音频之间的吞吐量差值。视频的码率根据实际可用的网络带宽进行调整。
  • 手机根据已通过 RTMP 上传的字节数和上一个间隔的平均权重来决定上传的码率。

未来的方向

  • 使用推送机制代替轮询机制,在发送分片请求前,使用 HTTP/2 把分片推送到 PoP 上。

相关文章

查看英文原文: How Facebook Live Streams To 800,000 Simultaneous Viewers


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2016-11-17 18:006134
用户头像

发布了 321 篇内容, 共 129.1 次阅读, 收获喜欢 139 次。

关注

评论

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

携程DBA负责人俞榕刚:OceanBase在携程的落地和实践

OceanBase 数据库

数据库 分布式 OceanBase 开源 携程 客户实践

手把手教你丨小熊派移植华为 LiteOS-M

华为云开发者联盟

华为 鸿蒙 LiteOS 小熊派 移植

恒源云(GPUSHARE)_attention decoder效果不佳时如何应对

恒源云

深度学习 计算机视觉

亚信科技AntDB数据库荣获“2021金融科技应用创新突出贡献奖”

亚信AntDB数据库

AntDB 金融行业 亚信科技

一款基于Java语言开发的,开源商业应用的模块化开发框架和智能管理平台-Axelor

马农驾驾驾

Java 系统开发 BPM 开发框架 智能管理

从智能汽车到智慧出行,区块链能打通车联网的任督二脉吗?

CECBC

在线YAML转TOML工具

入门小站

工具

流批一体技术框架探索及在袋鼠云数栈中的实践

袋鼠云数栈

用 docker 快速搭建 kafka(qbit)

qbit

kafka zookeeper docker image

第三方测评:GaussDB(for Redis)稳定性与扩容表现

华为云开发者联盟

redis 华为云 GaussDB(for Redis) NoSQL数据库 云原生NoSQL数据库

“以终为始”的正确使用方式

石云升

思维模型 1月月更

行业先锋畅聊 Flink 未来 —— FFA 2021 圆桌会议(北京)

Apache Flink

大数据 flink 编程 后端 实时计算

企业上云后,不容忽视的管理工具-云管平台

行云管家

云计算 企业上云 云管平台 云管理

Flutter启动流程分析之插件化升级探索

得物技术

flutter Weex Google 框架 原生

☕【Java深层系列】「并发编程系列」让我们一起探索一下CompletionService的技术原理和使用指南

洛神灬殇

Java 线程池 CompletionService 异步执行 1月日更

农业掀起“上链”潮 区块链等数字技术正成为乡村振兴新动力

CECBC

鉴释加入龙蜥社区,助力开源生态建设

OpenAnolis小助手

Linux 开源

SparkSQL的入门实践教程

华为云开发者联盟

sql spark 编程 Sparksql 结构化数据

自动驾驶浪潮下,如何给技术迭代插上数据的“翅膀”?

澳鹏Appen

人工智能 自动驾驶 智能汽车 智能驾驶 数据标注

SAST 为什么会成为网络安全领域的下一件大事?

麦禾测试

静态分析 静态测试工具 代码静态分析

“在线设计”网络资源管理的源头活水

鲸品堂

通信运营商 在线设计平台

恒源云(GPUSHARE)_AdderSR: Towards Energy Efficient Image Super-Resolution学习笔记

恒源云

人工智能 深度学习 计算机视觉

高并发环境下,6个构建缓存服务需要注意的问题

华为云开发者联盟

缓存 高并发 开发 并发 缓存服务

作业帮基于 Flink 的实时计算平台实践

Apache Flink

大数据 flink 编程 实时计算 IT

直播回顾:准确性提升到 5 秒级,ssar 独创的 load5s 指标有多硬核?| 龙蜥技术

OpenAnolis小助手

Linux 开源

Mybatis中的VFS是个啥

尹昶胜

mybatis

Hive 数据倾斜问题定位排查及解决

五分钟学大数据

hive 1月月更

2022年保障企业内网安全就用行云管家!免费试用!

行云管家

云计算 云平台 内网 云管平台

必读!如何有效的进行沟通

观测观测

Linux之wc命令

入门小站

Linux

异步调用如何使用是最好的方式?

CRMEB

  • 扫码添加小助手
    领取最新资料包
Facebook是如何支持80万并发视频流直播的_Facebook_High Scalability_InfoQ精选文章