1 概述
多年来Netflix一直是全球最好的在线订阅式视频服务供应商,其带宽占全球互联网带宽容量的15%以上。2019年,Netflix已经拥有了1.67亿用户,每季度新增用户超过500万,在200多个国家和地区运营。Netflix的用户每天观看视频超过1.65亿小时,每天点播了4000多部电影以及4.7万集剧集。从工程的角度来看,Netflix的技术团队为了服务于全球用户,设计了如此惊人的视频流媒体系统,该具备非常高的可用性和可扩展性。
然而,Netflix的技术团队花了8年多的时间,才打造了现有的系统([1])。实际上,Netflix的基础设施转型始于2008年8月,当时Netflix经历了一次系统宕机(在自己的机房),导致整个DVD租赁服务中断了三天。Netflix意识到,它需要没有单点故障的更可靠的基础设施。因此,它做出了两个重要的决定:将IT基础设施从自己的数据中心迁移到公共云上,用微服务架构取代单体应用程序。这两个决定直接导致了Netflix今天的成功。
Netflix之所以选择AWS云([[4])来迁移其IT基础设施,是因为AWS可以提供高度可靠的数据库、大规模云存储和全球多个数据中心。通过利用AWS构建和维护的云基础设施,Netflix没有做建设数据中心这种无差别化的重活,而是更专注于高质量流媒体的核心业务。尽管它需要重建整个技术栈,让其在AWS云上顺利运行,但同时也收获了系统的可扩展性和可用性的提升。
Netflix也是微服务架构的主要推动者之一。微服务针对单体软件设计中存在的问题,鼓励分离关注([11]),单体程序通过自身的模块化和数据封装被分解成更小的软件组件。微服务还有助于通过横向扩展和工作负载分区来提高可扩展性。通过采用微服务,Netflix的工程师可以轻松地改变任何服务,从而实现更快的部署。更重要的是,他们可以跟踪每个服务的性能,并快速将其与其他运行中的服务隔离开来。
在本文中,我试图阐述Netflix的云架构在不同工作负载和网络限制下的性能。具体来说,我想从可用性、延迟、可扩展性和从网络故障或系统中断的恢复能力等方面分析系统设计。本文的组织方式如下。第2节将描述Netflix系统架构。然后在第3节,将更详细的讨论系统组件。在第4、5、6、7节中,我将根据上述设计目标对系统进行分析。最后,我总结了从这次分析中学习到的东西以及下一步可能需要改进的地方。
2 架构
Netflix基于亚马逊云计算服务(AWS)和内部CDN Open Connect(Open Connect)运营([1])。这两个系统必须无缝配合,才能在全球范围内提供高质量的视频流媒体服务。从软件架构上看,Netflix主要由三部分组成。客户端、后台和CDN。
客户端是指笔记本电脑或台式机上的任何支持的浏览器,或者智能手机或智能电视上的Netflix应用。Netflix开发自己的iOS和Android应用,为每一个客户端和设备提供最佳的观看体验。通过其SDK控制自己的应用和其他设备,Netflix可以在某些情况下透明地调整流媒体服务,比如网络速度慢或服务器过载等情况下,Netflix可以对其流媒体服务进行调整。
后端包括在AWS云上运行的服务、数据库、存储。Backend基本上可以处理所有不涉及流媒体的工作。Backend的一些组件及其对应的AWS服务如下。
可扩展计算实例(AWS EC2)
可扩展存储(AWS S3)
业务逻辑微服务(Netflix专门打造的框架)
可扩展的分布式数据库(AWS DynamoDB、Cassandra)。
大数据处理和分析工作(AWS EMR、Hadoop、Spark、Flink、Kafka和Netflix的其他专用工具)。
视频处理和转码(Netflix的专用工具)
Open Connect CDN是一个名为Open Connect Appliances (OCAs)的服务器网络,用于存储和串流大型视频。这些OCAs服务器分布在位于世界各国的ISP和IXP网络内。OCAs负责将流媒体传输到客户端。
在下面的章节中,笔者将介绍由上述3部分组成的Netflix云架构。在2.1节中,我们将描述播放架构。然后在2.2节中,将描述更详细的Backend的微服务架构,展示Netflix如何处理全球规模下的可用性和可扩展性问题。
2.1 播放架构
当用户在自己的应用程序或设备上点击播放按钮时,客户端将与AWS上的Backend和Netflix CDN上的OCAs进行通信,以流化视频([[7])。) 下图说明了播放过程的工作原理。
OCA会不断向运行在AWS EC2中的Cache Control服务发送有关其工作负载状态、例行性和可用视频的健康报告,以便Playback Apps向客户端更新健康OCA信息。
从客户端向 Playback Apps 服务发送 Play 请求,以获取流媒体视频的 URL。
Playback Apps服务必须确定Play请求是否有效,才能查看特定视频。这里会验证用户计划、视频在不同国家的授权等。
Playback Apps服务会与 Steering服务进行通信,以获得所请求的视频的OCAs服务器列表。Steering服务使用客户端的IP地址和ISP信息来确定一套最适合该客户端的OCAs。
客户端从Playback Apps服务返回的10个不同的OCAs服务器列表中,测试与这些OCAs的网络连接质量,并选择一个最快、最可靠的OCA来请求视频文件流媒体。
所选的OCA服务器接受客户端的请求,并开始流化视频。
在上图中,Playback Apps服务、Steering服务和Cache Control服务完全是在AWS云上运行的微服务。在下一节中,我将介绍Netflix后端微服务架构,它提高了服务的可用性和可扩展性。
2.2 后端架构
正如我在前面的章节中所描述的那样,Backen处理了从注册、登录、计费到视频