图片:Shutterstock
不久以前,纸牌屋第五季回归,终于结束了世界各地狂热观众的漫长等待。对于他们来说,开始马拉松就像伸手去拿你的设备或遥控器,打开Netflix应用程序并点击Play一样简单。简单,快速,即时满足。
运行Netflix是一项不那么简单的事情,Netflix每天为190个国家的约9800万付费用户提供大约2.5亿小时的视频流。在这种规模下,在几秒钟内为每个用户提供高质量的娱乐可不是开玩笑。这意味着建立一流规模的顶级基础设施,而其他互联网服务之前并没有这样做,这也意味着许多参与者必须与提供内容的制作公司进行协商并满足他们的需求,以及处理来自网络运营商的巨大流量。
那么,我们一起来探究Netflix是如何运作的。
Netflix性能和可靠性部门的高级工程师Dave Hahn在一个流程图中展示了Netflix的整个架构。
(AWS/ YouTube)
数百个微服务组成的巨型服务架构
让我们用一个简单的例子试着去了解Netflix的是如何在技术层面进行构建。
我们假设手机上的地图应用程序始终跟踪您的位置,并保存有关你在哪儿的复杂信息到一个文件中——locations.txt。最后你创建了一个名为LocoList的应用程序,只要手机上有一个地图应用程序,就会查找这个locations.txt文件,并在一个简单的列表中显示该文件中记录的所有地点。它完美无瑕。
现在,地图应用程序的开发人员意识到,将所有位置信息存储在除location.txt文件之外的其他位置更好,然后更新应用程序,使其不再在手机上创建或存储该文件。这样的话LocoList似乎无法找到它依赖于其所有数据的locations.txt文件,并且没有其他方法可以从地图应用程序中提取该信息。LocoList也就不再有效。
这样你在LocoList上的所有工作都已进入垃圾箱,因为对地图进行了更改,从而破坏了你的应用。虽然在这里似乎没什么大不了的,但在像Netflix这样庞大的服务上,整个应用程序因为对其中的一部分进行了更改不仅会破坏用户的体验,而且还意味着所有其他部分必须重写应用程序以适应您对应用程序的一部分所做的一个微小更改。这种结构就是我们所说的单片架构。
Netflix大约在十年前迎来了一场革命,通过重写运行整个服务的应用程序以适应微服务架构 - 这意味着每个应用程序或微服务的代码和资源都是它自己的。它本质上不会与任何其他应用程序共享任何应用程序。当两个应用程序确实需要相互通信时,它们使用应用程序编程接口(API)——依靠一组严格控制的规则,两个程序都可以处理。开发人员现在可以对每个应用程序进行许多小的或大的更改,只要它们确保它与API一起运行良好。由于一个程序正确地了解另一个程序的API,因此没有任何改变会破坏信息交换。
Netflix估计使用大约700个微服务来控制构成整个Netflix服务:一个微服务存储你观看的所有节目,一个从你的信用卡中扣除月费,一个为你的设备提供正确的它可以播放的视频文件,一个看你的观看历史,并使用算法猜测你想要的电影列表,一个将提供这些电影的名称和图像,以显示在主菜单上的列表中,当然这只是冰山一角。Netflix工程师可以对应用程序的任何部分进行更改,并可以快速引入新的更改,同时确保整个服务中的其他任何内容都不会发生故障。
总而言之,为什么微服务架构对Netflix如此重要?嗯,这就是他们选择的方式所取得的成就:
AWS/ YouTube
但是,他们在哪里运行这些微服务呢?
要运行这些,需要拥有一个庞大的计算机服务器网络,Netflix曾经自己运营,但是他们意识到,即便他们花大量的时间去构建,能够支持他们软件的服务器系统,并不断的修复和迭代,仍然很难满足Netflix如此快速的成长。于是他们做了个勇敢的决定,放弃维护自己的服务器,把所有的东西都转移到云上 - 将Netflix工程师写的数百个程序迅速部署到云端服务器,他们选择了基于云的基础架构Amazon Web Services(AWS)。
有人会问Netflix如何信任竞争对手所拥有的一切?
很多企业遵循绅士的协议,尽管他们在同一类别中竞争,但他们还是能互相合作 ——一个很好的例子就是尽管三星在手机市场上与Apple竞争,但是iPhone的一些主要部件还是由三星提供。在Prime Video出现之前,Netflix就是AWS客户,但这并不意味着他们会彼此敌对。
事实证明,Netflix和亚马逊的合作关系对两家公司来说都是一个巨大的双赢局面。Netflix成为AWS最先进的客户,将他们的所有功能发挥到极致,并且不断创新它们如何为各种目的去使用AWS的不同服务,包括运行微服务、存储电影、以自己的优势处理互联网流量。AWS反过来也改进了他们的系统,以允许Netflix在其服务器上承担大量负载,并使他们更灵活地使用不同的AWS产品,并利用所获得的专业知识满足成千上万的其他企业客户的需求。AWS自豪地宣称Netflix是其顶级客户,Netflix可以快速改进其服务,并因AWS而保持稳定。即使Netflix夺走了Prime Video的受欢迎程度。
ScaleScale / scalescale.com
从胶卷到屏幕 - 漫长的旅程
当然,没有电视节目/电影可看,任何电视/电影服务又有什么用呢?对于Netflix来说,把它们从电影制作人那里拿到客户那里是一个漫长而艰巨的过程:
如果Netflix不是自己制作的节目/电影(即不是Netflix原创),他们必须与负责发行电影或电视节目的公司协商广播权。这意味着要花一大笔钱来获得向世界各地的用户广播电影或电视节目的合法权利。通常可能是发行公司(甚至Netflix本身)可能已经与其他视频服务或某些地区的电视频道签订了独家协议,这意味着Netflix可能无法向那里的客户提供一些节目,或者在稍后的日期,例如,这导致《纸牌屋》第五季在中部首映。东部地区被严重地推迟到6月30日,相比之下,已经有150多个国家在5月30日就可以观看,迟了整整一个月。
将节目或电影的原始数字副本存储到其AWS服务器上。原始版本通常采用高质量的影院标准,Netflix必须在任何人观看之前对其进行处理。
Netflix适用于数千种设备,每种设备都可以播放不同格式的视频和声音文件。另一组AWS服务器采用这个原始电影文件,并将其转换为数百个文件,每个文件意味着在特定类型的设备和特定屏幕尺寸或视频质量上播放整个节目或电影。一个文件将专门用于iPad,一个用于全高清Android手机,一个用于可以播放4K视频和杜比音效的索尼电视,一个用于Windows计算机,等等。甚至可以使用不同的视频质量制作更多这些文件,以便在较差的网络连接上更容易加载,这个过程就是转码。还会在这些文件中添加一段特殊代码,以使用所谓的数字版权管理或DRM锁定它们,也就是防止电影盗版的技术措施。
Netflix应用程序或网站确定你正在使用的特定设备,并获取该节目的确切文件,以便在你的特定设备上专门播放,具体视频质量取决于你当时的互联网速度。
关于抓取的最后一部分是对于Netflix来说最关键的部分,因为毕竟,这就是Internet网络将视频从Netflix的AWS服务器传送到客户设备的地方。如果管理不善或被忽视,就意味着Netflix非常缓慢或不可用,甚至可能是公司的终结。互联网是连接Netflix和它的客户的脐带,他们需要在尽可能短的时间内提供用户想要的内容。在一个非常拥挤的网络上,数百万的服务在竞争空间。
争抢缓冲时间
CDN in a nutshell (CDN Reviews/cdnreviews.com)
如果最终用户的互联网连接太差,无法处理视频质量,那么构建Netflix生态系统软件、内容和技术的整个操作范围都将变得毫无用处。以下是互联网上的所有东西的基本工作原理:当你做一些需要网络访问的事情时,一个请求被发送到你的互联网服务提供商(ISP)。ISP将它转发给处理网站的专用服务器,服务器提供响应,该响应被转发回您的计算机并形成结果。对于Netflix和其他顶级网站,数百万小时的视频内容通过互联网在服务器和所有用户之间中继,需要更大的服务器网络来保持性能。他们通过构建称为内容交付网络(Content Delivery Network,CDN)的东西来实现这一点。
CDN的基本功能是,他们获取原始网站及其包含的媒体内容,并将其复制到遍布全球的数百台服务器上。所以,当你从布达佩斯登录,而不是连接到美国的主Netflix服务器时,它将从离布达佩斯最近的CDN服务器上加载它的拷贝。这极大地减少了请求和响应之间的等待时间,并且所有东西加载都非常快。CDN是拥有大量用户(比如Google、Facebook或YouTube)的网站能够真正快速加载的原因,不管您身在何处,也不管互联网速度如何。
Netflix’s Open Connect boxes, supplied to internet providers.
(NDTV Gadgets360/gadgets.ndtv.com)
Netflix早些时候使用由Akamai、Level 3和Limelight Networks等巨头运营的多种CDN网络来提供内容。但是,不断增长的用户群意味着他们必须在更多的地点提供更多的内容,同时降低成本,这导致他们建立自己的CDN,称为(Open Connect)开放连接。
在这里,他们不再依赖AWS服务器,而是在世界各地安装自己的服务器。但它只有一个目的——智能存储内容并将其传递给用户。Netflix与互联网服务提供商达成协议,免费向他们提供上面看到的红盒子。ISP将它们与服务器一起安装。这些Open Connect box从美国的主要服务器下载Netflix库用于它们的区域,如果其中有多个服务器,则每个服务器都宁愿将Netflix用户更喜欢的内容存储在一个区域中,以区分速度的优先级。所以,一部很少观看的电影可能比一集《 Stranger Things》要花更多的时间。现在,当您连接到Netflix时,离您最近的Open Connect box将提供您需要的内容,因此视频加载的速度要快于您的Netflix应用程序试图从美国主要服务器加载视频的速度。
把它想象成全世界存储视频的硬盘驱动器,越靠近,你就能越快地到达它们并加载视频。在幕后还有很多花招:正如这次采访所解释的,每当你在节目中点击播放时,Netflix就会找到10个最接近的Open Connet box,上面装有节目。您的Netflix应用程序/站点将尝试检测其中哪一个最接近或在您的互联网连接上工作最快,然后从那里加载视频。这就是为什么视频开始时模糊,但随后变得清晰-这是Netflix交换服务器,直到它连接到一个会给你最高质量的视频。
Screenshot by author
简而言之…
成百上千的微型服务,或者说是小型的独立程序,共同组成一个大型Netflix服务。
将合法获取或被授权内容转换为适合你的屏幕的大小,给你观看并防止被复制。
用世界各地的服务器复制并存储视频,以便用最接近你的服务器以最大质量和速度传输视频给你。
当你选择一个节目时,Netflix应用程序会自主选择从哪些服务器加载视频。
因为这一系列系统的运作,现在的你才能被弗兰克·安德伍德的冷酷战术所吸引,被博杰克·霍斯曼的过山车生活所压抑,被《无名大师》中的戴夫逗乐,被《黑镜》中的故事吓坏,并开始担忧未来科技……
你看,这并不是按一下“Play”那么简单吧。
第一次翻译,如有问题请指出,感谢担待!
原文链接:https://medium.com/refraction-tech-everything/how-netflix-works-the-hugely-simplified-complex-stuff-that-happens-every-time-you-hit-play-3a40c9be254b
编辑:子修
作者:Mayukh Nair