Netflix为何选择NGINX作为其CDN的核心

NGINX | 2015年3月25日

推出短短几年后,Netflix的在线视频流媒体服务已覆盖40个国家/地区,订阅用户超过5,000万。我们已在《Netflix采用微服务:架构设计经验》和《Netflix采用微服务:团队与流程设计经验》中分享了Netflix软件开发工程师从传统单体式开发流程转向持续交付和微服务时采用的一些实践。

NGINX开发人员Gleb Smirnoff出席nginx.conf2014

本文将介绍Netflix取得成功的另一个核心因素:其内容分发网络(CDN)Open Connect。NGINX运行在每台Open Connect交付设备上,在帮助Netflix跟上视频服务迅猛增长的步伐方面发挥着关键作用,我们对此深感自豪。NGINX的Gleb Smirnoff与Open Connect团队合作已有两年多。去年10月,他在我们的用户大会nginx.conf2014上解释了Netflix为何选择NGINX与FreeBSD,为这项至关重要的业务提供支持。

Netflix为何自建CDN

Netflix最初将流媒体视频交付外包给三家大型CDN供应商(Akamai、Level3和LimeLight)。随着这项服务日益普及,Netflix认为自建并管理CDN更为合理,原因有以下几点:

  • 从实际角度来看,CDN供应商难以按与客户对Netflix视频流媒体服务需求增长相匹配的速度扩展基础设施。
  • 从财务角度来看,随着视频流量增加,外包成本迅速攀升,变得难以承受(许多热门应用和网站也面临这一挑战)。
  • 从业务角度来看,视频流媒体显然正在取代DVD租赁,成为Netflix的主要收入来源,因此,将公司主营业务的关键环节外包并不合理。

更重要的是,Netflix构建了自己的CDN,以便更好地掌控应用交付和用户体验。为了向客户提供更优的流媒体交付体验,Netflix需要尽可能加强对交付链中三个基本组成部分的控制:

  • 用户的视频播放器。Netflix已掌控这一组件,因为其开发人员负责开发用户观看Netflix内容时使用的所有设备专用应用。
  • 用户与Netflix服务器之间的网络。虽然无法直接控制这一部分,但Netflix通过向互联网服务提供商(ISP)免费提供视频流设备,换取ISP数据中心内用于部署这些设备的机架空间,从而尽可能缩短与客户之间的网络距离。(这些设备也会部署在互联网交换点[IXP],以便为ISP不愿部署第三方设备的客户提供服务。)视频流对TCP/IP固有的分组延迟和丢失、乱序到达以及不可预测的往返时间(抖动)尤为敏感,而缩短网络距离可以减少受这些异常情况影响的可能性。
  • 视频服务器(即Open Connect本身)。运营自有CDN让Netflix可以灵活调整CDN软件,尽可能弥补互联网异常造成的影响。它可以运行自定义TCP连接控制算法和HTTP模块,还能快速检测服务器和网络问题,将客户端重新路由到其他服务器,然后登录服务器硬件,从“内部”进行故障排查。

Netflix能够针对视频流优化Open Connect,这是供应商提供的通用CDN无法实现的。借助Open Connect,Netflix能够以更低的成本提供更出色的用户体验,并更清晰地了解应用在全球各地的性能。

Netflix为何选择NGINX和FreeBSD

从一开始,Netflix的目标就是,正如Gleb所说,“让单台设备实现越来越高的每秒千兆位吞吐量”。具体而言,Netflix需要尽可能增加每台设备可同时服务的订阅用户数量。Open Connect工程师预计需要对软件进行精细调优才能实现这一目标,因此选择了可无限扩展的开源软件。

如前所述,在条件允许的情况下,Netflix会将其视频流设备部署在客户的互联网服务提供商(ISP)数据中心。由于设备上运行的软件将由第三方掌控,Netflix选择了采用BSD风格许可证的项目,而非采用GNU通用公共许可证(GPL)的项目。

Netflix选择的具体开源项目包括:

  • FreeBSD作为操作系统,因为它以快速、稳定著称。其开发者社区实力雄厚,并愿意与供应商合作。
  • NGINX作为流媒体服务器。其久经验证的速度和稳定性至关重要,因为Netflix希望尽快推出Open Connect,无需为了启动运行而进行调整。CDN启动并运行后,Netflix便能够分析流量模式,并微调NGINX设置。NGINX的另一项优势是,尽管这款开源软件采用BSD风格的许可证分发,但其所有核心开发人员均为NGINX, Inc.的全职员工。该公司为其商业产品NGINX Plus提供企业级支持。因此,NGINX兼具开源软件和商业软件的优势。NGINX用于运行自定义模块的灵活框架也吸引了Netflix,Open Connect团队已针对其视频流需求创建了专用模块。

结合使用FreeBSD和NGINX还可带来更多优势:

  • NGINX的事件驱动设计是其实现出色性能的关键之一,而FreeBSD的kqueue事件通知系统调用则是适用于多路复用I/O的优秀API之一。
  • 无需任何修改,NGINX即可结合使用sendfile系统调用和aio_read系统调用。这两种调用可避免磁盘I/O阻塞,从而实现出色的性能。

NGINX Plus和NGINX也能优化应用交付

NGINX从诞生之初就注重灵活适配,旨在支持应用交付的各个环节。为了让商业客户更轻松地部署类似Netflix的应用,NGINX Plus将Web服务、负载均衡、内容缓存和媒体流式传输整合到一个易用的软件包中。查看我们的案例研究,了解其他领先企业如何使用NGINX Plus,以兼顾性能、安全性和可扩展性的方式交付应用。

我们乐于与客户密切合作,指导客户如何在其特定的应用交付架构中充分发挥NGINX Plus的价值。我们的支持和专业服务团队可在架构指导、安装、配置、更新等方面提供帮助。联系我们,了解详情。

视频录像

分享
标签: F5 NGINX, Tech

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。