Netflix 系统设计——Netflix 如何引入新内容
在注意力争夺战中,内容是把双刃剑,用户体验则是引领战斗的骏马。
流媒体大战正如火如荼地展开,Netflix 势必将持续占据主导地位。它拥有超过 5 万部独立影片,在 180 多个国家/地区拥有 2 亿订阅用户,而更令人印象深刻的是其背后的技术支撑。在本系列文章中,我的目标是深入探究 Netflix 的运营方式,深入挖掘大规模内容交付所涉及的端到端流程的技术细节。在本系列的首篇文章中,我将重点介绍 Netflix 的内容引导系统和 Open Connect。
下图展示了我们将在本文中讨论的系统的概览。
内容内容内容。
Netflix 的综合库包含超过 50,000 个影片,支持超过 2200 种设备,每种设备都有其自己的分辨率和网络速度。为了能够为不同网络速度的众多设备提供服务,他们需要提供不同格式的原始视频。Netflix 以最佳格式从制作公司接收视频。问题是制作公司提供的视频很大,非常大。对于一部 2 小时的商业蓝光电影,您需要查看 15-25Gb。以这种格式向用户提供该视频将消耗数据和带宽,因此 Netflix 对原始视频执行一系列预处理,将它们转换为不同的文件格式。这些预处理称为编码和转码。
编码是将视频和音频文件压缩以使其与单个目标设备兼容的过程。而转码则允许将已编码的数据转换为其他编码格式(MP4、WLM、MOV、MPEG-4)。当用户使用多个目标设备(例如不同的手机和网络浏览器)时,此过程尤其有用,因为这些设备并非都支持相同的原生格式或存储容量有限。
进行这种预处理的原因很简单。
- 减小文件大小。
- 减少流视频的缓冲。
- 更改分辨率或纵横比。
- 更改音频格式或质量。
- 将过时的文件转换为现代格式。
- 使视频与某些设备(计算机、平板电脑、智能手机、智能电视、传统设备)兼容。
- 使视频与某些软件或服务兼容。
为了解决这个问题,压缩一部 25GB 的电影需要花费大量时间。Netflix 将原始视频分成不同的小块,并使用 AWS EC2 中的并行工作器对这些块进行编码和转码,将它们转换为不同分辨率(4k、1080p 等)的不同格式(MP4、MOV 等)。
Netflix 还会为同一个视频块创建多个副本,以适应不同的网络速度。一个视频块大约有 1300 个副本。
例子
-高质量 ------4K,1080p,720p,360p
-中等质量 ------4K,1080p,720p,360p
-低质量 ------4K,1080p,720p,360p
Netflix 将所有这些处理过的视频数据存储在 Amazon S3 上。这是一个高度可扩展且可用的静态数据存储平台。每个视频文件都以场景块的形式存储。
Netflix 使用 AWS 满足几乎所有的计算和存储需求,包括数据库、分析、推荐引擎、视频转码等数百个功能,总共使用 AWS 上的 100,000 多个服务器实例。
https://aws.amazon.com/solutions/case-studies/netflix
默认情况下,大多数视频片段长度为 10 秒。每次跳转到电影的不同部分时,您都会向 Netflix 的 Playback API 查询不同的视频片段。通常,一个片段正在播放,一个片段在当前片段播放完毕后准备播放,还有一个片段正在下载。这样做是为了给用户提供无缝的观看体验,并最大限度地提高当时的最佳速度。
这些数据块的到达速度决定了后续数据块的比特率(比特率是指每秒使用的位数)。 如果第一个数据块的传输时间超过了其播放时长,它会抓取下一个比特率较低的数据块作为下一个数据块。如果第一个数据块的传输时间更快,它会选择分辨率更高的数据块(如果有)。这就是为什么有时你的视频分辨率一开始会比较粗糙,然后逐渐调整到更清晰的分辨率。
Netflix 的用户遍布 200 多个国家/地区。如果尼日利亚的用户想在美国托管的亚马逊服务器上观看电影,互联网服务提供商需要前往美国访问这些服务器,这将耗费时间和带宽。在这个内容服务延迟可能导致收入下降的时代,确保用户快速访问内容至关重要。Netflix 通过在 ISP 和 IXP(互联网交换点)内部创建微型服务器(称为 Open Connect)解决了这个问题。这些服务器能够存储 280TB 的数据。视频在 Amazon S3 上压缩和转码后,会在非高峰时段(比如凌晨 4 点)传输到这些 Open Connect 服务器。当用户请求视频时,视频会直接访问 Open Connect 服务器,而不是直接访问美国的 Netflix 服务器。这可以减少带宽消耗、缩短播放时间,并最终带来更好的用户体验。电影还可以根据地区进行本地化。您可以在尼日利亚和巴西的 Open Connect 设备上存储不同的电影。 Netflix 大约 90% 的内容都是通过这种方式提供的。
打开连接
CDN 是一组地理分布的服务,它们协同工作,提供互联网内容的快速分发。Open Connect 是 Netflix 定制的全球内容分发网络 (CDN)。
点击视频播放后发生的所有事情都由 Open Connect 处理。
- Open Connect 将 Netflix 视频存储在世界各地。当您按下“播放”按钮时,视频将从 Open Connect 流式传输到您的设备。
- Netflix 一直与世界各地的互联网服务提供商 (ISP) 和互联网交换点 (IX 或 IXP) 合作,在其网络内部署称为开放连接设备 (OCA) 的专用设备。
Open Connect Design 图片来自Netflix - 这些服务器定期向 AWS 上的 Open Connect Control Plane 服务报告它们从 IXP/ISP 网络了解到的健康指标最佳路线以及它们存储在 SSD 磁盘上的视频。
- 当新的视频文件成功转码并存储到 AWS S3 上后,AWS 上的控制平面服务会将这些文件传输到 IXP 站点上的 OCA 服务器。这些 OCA 服务器会应用缓存填充策略,将这些文件传输到其子网内 ISP 站点上的 OCA 服务器。
- 当 OCA 服务器成功存储视频文件后,它将能够启动对等填充,以便在需要时将这些文件复制到同一站点内的其他 OCA 服务器。
- 在两个可以看到彼此 IP 地址的不同站点之间,OCA 可以应用层填充过程,而不是常规缓存填充。
打开 Connect 从Netflix传输内容
结论
总之:
- Netflix 对原始视频文件进行压缩和转码。
- 使用 AWS 中的并行工作器将文件分成多个块,以便更快地进行处理。
- 每个块又细分为多个分辨率和互联网速度。
- 这些块存储在 Amazon S3 上。
- 在非高峰时段,文件会被传输到开放的连接盒,这是 Netflix 遍布全球的定制内容交付网络。
- 这些盒子能够相互通信和共享内容。
在本系列的下一篇中,我将讲解 Netflix 的核心后端架构。
更多内容,请关注我的Twitter Linkedin等社交媒体平台。