Netflix 网站架构学习
Netflix 架构的特点是他们没有自建数据中心,而是将服务直接架设在 AWS 的云服务上(EC2 和 S3),并通过自建 CDN Open Connect 提供高质量的点播服务。Netflix 采用微服务架构,将复杂业务流程拆解成独立的小型服务,服务间通过 REST 或 RPC 彼此调用。
CDN
CDN 的主要原理是利用位于不同地理位置的服务器集群,将内容存储在靠近用户的服务器上,从而减少内容传输的延迟和带宽使用。
当用户请求访问特定的内容时,CDN 会自动为用户提供最接近他们所在地理位置的服务器上的内容,这将使用户能够更快地访问网站和其他在线服务。如果某个服务器出现故障或网络拥塞,CDN 可以自动将用户请求重新路由到其他可用的服务器上,从而确保内容始终可用。
CDN 中内容的来源称为 Origin,而缓存服务器称为 POP(Point of Presence)。
视频网站使用 CDN 能带来哪些优势:
- 性能优势:CDN 节点距离用户更近,请求内容的时延更小;
- 可用性:单个节点宕机,其他节点能仍能提供服务;即使源服务器宕机,CDN 仍能利用缓存的数据提供服务;
- 安全性:CDN 能缓解 DDos 攻击并提供其他安全功能;
- 可拓展性:CDN 按使用的流量计费,且可以处理流量高峰。
Open Connect
Open Connect 是 Netflix 自建的视频 CDN,它是一种主动的、有针对性的缓存解决方案(相对于缓存未命中时找 Origin 拉取内容的 CDN 方案)。
Open Connect 由一堆专用服务器构成,这些服务器被称为 OCAs(Open Connect Appliances)
- 存储编码的视频/图像文件,并通过 HTTP / HTTPS 将这些文件提供给客户端设备
- 部署在 IXP 中,和 ISP 对等互连或直接部署在 ISP 网络内部
OCAs 和客户设备、Netflix AWS 服务之间的交互
- OCAs 不存储客户数据(比如观看历史、DRM 信息)
- OCAs 只执行两件事
- 当客户端设备请求内容时,OCAs 服务器会通过 HTTP/HTTPS 提供内容
- 向 AWS 中的 Open Connect 控制平面服务报告自己的状态
- Open Connect 控制平面服务
- 接收 OCAs 报告的数据,并利用这些数据来控制客户端通过 URL 访问最优的 OCA
- 根据文件可用性、健康状况、与客户端的网络距离
- 控制 OCAs 的填充行为
- 根据算法预测用户行为,利用非峰值带宽更新 OCAs 上的视频
- 受欢迎的视频可以有更多的副本
- 根据算法预测用户行为,利用非峰值带宽更新 OCAs 上的视频
- 接收 OCAs 报告的数据,并利用这些数据来控制客户端通过 URL 访问最优的 OCA
视频播放的整体流程
- OCAs 定期汇报健康状态、路由、文件可用性等信息给 AWS 上的 Cache Control Service
- 用户在客户端设备上通过 Netflix 应用程序请求播放电视节目或电影
- Playback Apps 会检查用户授权和许可证,然后根据客户端特征和当前网络条件确定选择合适的文件来播放
- 应该指的是选择一个合适的分辨率或格式下的视频文件来播放
- Steering Service 使用由 CCS 存储的信息来选择应该让哪个 OCA 提供请求的文件,生成相应的 URL 并将其交给 Playback Apps
- Playback Apps 将适当的 OCA 的 URL 交给客户端设备,由 OCA 提供请求的文件
- Playback Apps 会返回一组 URL,由客户端来选择连接哪个 URL,网络质量下降时,客户端可能会切换到其他 OCA 上去
其中 Playback Apps、Steering Service、Cache Control Service 都部署在 AWS 上
media pipeline
工作室发给 Netflix 的原始视频,这些视频一般是高清格式的
- Netflix 首先会检查这些源视频
- 检查是否存在失真或伪影的问题,是否符合规范,如果存在问题就要求重新交付
- 同时生成编码管道所需的元数据
- 源视频首选格式为 IMF,也支持 ProRes、DPX 和 MPEG
- 在 EC2 服务器上执行转码(transcoding),生成不同分辨率和格式的视频以支持各种不同的播放设备
- 由于源视频可能会非常大,管道会将它分块放到不同实例上并行处理,所有块的编码都结束后再组装到一起
- 转码后输出的视频会被发送到 Open Connect 里
参考资料
- Open-Connect-Overview.pdf
- Netflix: What Happens When You Press Play?
- High Quality Video Encoding at Scale | Netflix TechBlog
- Netflix and Fill. the complex reality of global content… | by Netflix Technology Blog | Netflix TechBlog