博客 | NGINX

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

NGINX-F5-horiz-black-type-RGB 的一部分
Tony Mauro 缩略图
托尼·毛罗
2015 年 3 月 25 日发布

自推出以来的几年里,Netflix 的在线视频流服务已经发展到为 40 个国家的 5000 多万用户提供服务。 在《Netflix 采用微服务》中,我们已经分享了 Netflix 软件开发工程师在从传统的单体开发流程过渡到持续交付和微服务时采用的一些最佳实践: 建筑设计的经验教训Netflix 采用微服务: 团队和流程设计的经验教训

Gleb-Smirnoff-nginx.conf2014
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 的目标就是如格莱布所说,“从一个盒子中获取越来越多的千兆比特每秒”。 具体来说,Netflix 需要最大限度地增加每台设备可以同时服务的订阅者数量。 Open Connect 工程师预计需要对软件进行微调才能实现这一目标,因此他们决定采用开源软件,以获得无限的可扩展性。

如前所述,Netflix 会尽可能将其视频流设备放置在客户 ISP 的数据中心。 由于设备上运行的软件掌握在第三方手中,因此 Netflix 选择了使用 BSD 风格许可证而不是 GNU 公共许可证 (GPL) 的项目。

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

  • 选择 FreeBSD作为操作系统,因为它以快速和稳定而闻名。 开发者社区强大并且愿意与供应商合作。
  • NGINX作为流媒体服务器。 其经过验证的速度和稳定性非常重要,因为 Netflix 希望尽快推出 Open Connect,而无需对其进行调整即可开始运行。 一旦 CDN 启动并运行,Netflix 就能够检查流量模式并微调 NGINX 设置。

    NGINX 的另一个好处是,虽然该开源软件是在 BSD 风格的许可下分发的,但其所有核心开发人员都是 NGINX, Inc. 的全职员工,该公司为其商业产品NGINX Plus提供企业级支持。 在这方面,它结合了OSS和商业软件的最佳特性。

    NGINX 运行自定义模块的灵活框架也吸引了 Netflix,而 Open Connect 团队已经创建了专门针对其视频流需求的模块。

结合 FreeBSD 和 NGINX 可以带来更多好处:

  • NGINX 的事件驱动设计是其出色性能的关键之一,而 FreeBSD 的kqueue事件通知系统调用是多路复用 I/O 的最佳 API 之一。
  • 无需任何修改,NGINX 可以将sendfile系统调用与aio_read系统调用一起使用。 这些调用一起避免了磁盘 I/O 阻塞,从而实现了出色的性能。

NGINX Plus 和 NGINX 也可以优化你的application交付

从一开始,NGINX 就被设计为适应性强并支持应用交付的各个方面。 为了让我们的商业客户更容易部署类似于 Netflix 的应用,NGINX Plus 将 Web 服务、负载均衡、内容缓存和媒体流结合在一个易于使用的软件包中。 查看我们的案例研究,了解其他领先公司如何使用 NGINX Plus 来提供具有性能、安全性和规模的应用。

我们乐于与客户密切合作,提供如何在其特定的应用交付架构中充分利用 NGINX Plus 的指导。 我们的支持专业服务团队可以为您提供架构指导、安装、配置、更新等帮助。 联系我们以了解更多信息。

视频录制


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”