FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章与书籍
  • UNIX 四分之一世纪
  • Unix 痛恨者手册
  • FreeBSD 中文期刊
  • 编辑日志
  • 2025-123 下游项目
    • FreeBSD 发布工程:新主管上任
    • GhostBSD:从易用到挣扎与重生
    • BSD Now 与将来
    • 字符设备驱动教程(第三部分)
    • 学会走路——连接 GPIO 系统
    • FreeBSD 中对 SYN 段的处理
    • FreeBSD 2024 年秋季峰会
  • 2024-1112 虚拟化
    • 字符设备驱动程序教程(第二部分)
    • 面向 Linux 和 Windows 用户的 bhyve
    • Xen 与 FreeBSD
    • Wifibox:一种嵌入式虚拟化无线路由器
    • 嵌入式 FreeBSD:Fabric——起步阶段
    • DGP:一种新的数据包控制方法
    • 会议报告:我在都柏林的 EuroBSDCon 体验
  • 2024-0910 内核开发
    • 字符设备驱动程序教程
    • VPP 移植到了 FreeBSD:基础用法
    • 利用 Kyua 的 Jail 功能提升 FreeBSD 测试套件的并行效率
    • FreeBSD 上的 Valgrind
    • 嵌入式 FreeBSD:探索 bhyve
    • TCP/IP 历险记:FreeBSD TCP 协议栈中的 Pacing
    • 实用软件:实现无纸化(Paperless)
  • 2024-0708 存储与文件系统
    • FreeBSD 中的 NVMe-oF
    • FreeBSD iSCSI 入门
    • 使用 ZFS 原生加密保护数据
    • 嵌入式 FreeBSD:打造自己的镜像
    • TCP LRO 简介
    • 基于 Samba 的时间机器备份
  • 2024-0506 配置管理对决
    • 基本系统中的 mfsBSD
    • rdist
    • Hashicorp Vault
    • 在 GitHub 上向 FreeBSD 提交 PR
    • 悼念 Mike Karels
    • 2024 年 5-6 月来信
    • 嵌入式 FreeBSD 面包板
    • TCP/IP 历险记:TCP BBLog
    • 实用软件:开发定制 Ansible 模块
  • 2024-0304 开发工作流与集成
    • FreeBSD 内核开发工作流程
    • FreeBSD 与 KDE 持续集成(CI)
    • 更现代的内核调试工具
    • 从零开始的 ZFS 镜像及 makefs -t zfs
    • 提升 Git 使用体验
  • 2024-0102 网络(十周年)
    • FreeBSD 中的 RACK 栈和替代 TCP 栈
    • FreeBSD 14 中有关 TCP 的更新
    • if_ovpn 还是 OpenVPN
    • SR-IOV 已成为 FreeBSD 的重要功能
    • FreeBSD 接口 API(IfAPI)
    • BATMAN:更优的可移动热点网络方式
    • 配置自己的 VPN——基于 FreeBSD、Wireguard、IPv6 和广告拦截
    • 实用软件:使用 Zabbix 监控主机
  • 2023-1112 FreeBSD 14.0
    • LinuxBoot:从 Linux 启动 FreeBSD
    • FreeBSD 容器镜像
    • 现在用 Webhook 触发我
    • 新的 Ports 提交者:oel Bodenmann (jbo@freebsd.org)
  • 2023-0910 Port 与软件包
    • 回忆录:与 Warner Losh(@imp)的访谈
    • 在你自己的仓库中定制 Poudriere 源
    • Wazuh 和 MITRE Caldera 在 FreeBSD Jail 中的使用
    • PEP 517
    • CCCamp 2023 旅行报告
  • 2023-0708 容器与云
    • 在 Firecracker 上的 FreeBSD
    • 使用 pot 和 nomad 管理 Jail
    • 会议报告:C 与 BSD 正如拉丁语与我们——一位神学家的旅程
    • 抒怀之旅:与 Doug Rabson 的访谈
    • 基于 Jail 的广告拦截教程
    • 我们收到的来信
  • 2023-0506 FreeBSD 三十周年纪念特刊
    • CheriBSD 近十多年的历程
    • AArch64:成为 FreeBSD 新的一级架构
    • 岁月如梭:我个人的时间线
    • 安装 FreeBSD 1.0:回顾 30 年前
    • ZFS 是如何进入 FreeBSD 的呢?
    • 我不是来自约克郡的,我保证!
    • 回忆录:采访 David Greenman Lawrence
    • FreeBSD 和早期的 Unix 社区
    • 早期的 FreeBSD 移植
    • FreeBSD 30 周年:成功的秘诀
    • FreeBSD 在日本:回忆之旅与今日之实
  • 2023-0304 嵌入式
    • CheriBSD port 和软件包
    • 让我们来试试 ChatGPT
    • GPU 直通
  • 2023-0102 构建 FreEBSD Web 服务器
    • ZFS 的原子 I/O 与 PostgreSQL
    • 虚拟实验室——BSD 编程研讨会
    • ZFS 简介
    • 会议报告:落基山庆祝女性计算机科学家
    • 进行中的工作/征求反馈:数据包批处理
    • 基金会与 FreeBSD 桌面
  • 2022-1112 可观测性和衡量标准
    • 在 FreeBSD 的 DDB 内核调试器中编写自定义命令
    • DTrace:老式跟踪系统的新扩展
    • 基于证书的 Icinga 监控
    • 活动监控脚本(activitymonitor.sh)
    • 实用 IPv6(第四部分)
    • EuroBSDCon 会议报道
    • 实用 Port:Prometheus 的安装与配置
    • 书评:《用火解决问题:管理老化的计算机系统(并为现代系统保驾护航)》Kill It with Fire: Manage Aging Computer Systems (and Future Proof Modern Ones)
  • 2022-0910 安全性
    • CARP 简介
    • 重构内核加密服务框架
    • PAM 小窍门
    • SSH 小窍门
    • 实用 IPv6(第三部分)
    • 书评:Understanding Software Dynamics(深入理解软件性能——一种动态视角)—— Richard L. Sites 著
    • 访谈:保障 FreeBSD 安全性
    • MCH 2022 会议报告
  • 2022-0708 科研、系统与 FreeBSD
    • 在 FreeBSD 上构建 Loom 框架
    • 教授本科生 Unix 课程
    • FreeBSD 入门研讨会
    • 实用 IPv6(第二部分)
    • 在 2022 年及以后推广 FreeBSD
    • 进行中的工作/征求反馈:Socket 缓冲区
    • FreeBSD 开发者峰会报告
    • 支持 Electromagnetic Field 2022
  • 2022-0506 灾难恢复
    • 使用 FreeBSD 构建高弹性的私有云
    • LLDB 14 —— FreeBSD 新调试器
    • 实用 IPv6(第一部分)
    • 利用 netdump(4) 进行事后内核调试
    • 进行中的工作/征求反馈:FreeBSD 启动性能
    • 实用 Port:在 OpenZFS 上设置 NFSv4 文件服务器
  • 2022-0304 ARM64 是一级架构
    • FreeBSD/ARM64 上的数据科学
    • Pinebook Pro 上的 FreeBSD
    • 嵌入式控制器的 ACPI 支持
    • 进行中的工作/征求反馈:Lumina 桌面征集开发人员
    • 实用 Port:如何设置 Apple 时间机器
  • 2022-0102 软件与系统管理
    • 为 FreeBSD Ports 做贡献
    • 使用 Git 贡献到 FreeBSD Ports
    • CBSD:第一部分——生产环境
    • 将 OpenBSD 的 pf syncookie 代码移植到 FreeBSD 的 pf
    • 进行中的工作/征求反馈:mkjail
    • 《编程智慧:编程鬼才的经验和思考》(The Kollected Kode Vicious)书评
    • 会议报告:EuroBSDCon 2021 我的第一次 EuroBSDCon:一位新组织者的视角
  • 2021-1112 存储
    • 开放通道 SSD
    • 构建 FreeBSD 社区
    • 与完美操作系统同行 27 年
    • 进行中的工作/征求反馈:OccamBSD
    • 通过 iSCSI 导入 ZFS ZIL——不要在工作中这样做——就像我做的那样
  • 2021-0910 FreeBSD 开发
    • FreeBSD 代码审查与 git-arc
    • 如何为 FreeBSD 实现简单的 USB 驱动程序
    • 内核开发技巧
    • 程序员编程杂谈
  • 2021-0708 桌面/无线网
    • 通往 FreeBSD 桌面的直线路径
    • FreeBSD 13 中的人机接口设备 (HID) 支持
    • Panfrost 驱动程序
    • 用 Git 更新 FreeBSD
    • FreeBSD 的新面孔
    • 想给你的桌面加点佐料?
  • 2021-0506 安全
    • 七种提升新安装 FreeBSD 安全性的方法
    • copyinout 框架
    • 使用 TLS 改善 NFS 安全性
    • Capsicum 案例研究:Got
    • 对 Jail 进行安全扫描
  • 2021-0304 FreeBSD 13.0
    • 展望未来
    • FreeBSD 13.0 工具链
    • FreeBSD 13.0 中有新加载器吗?
    • TCP Cubic 准备起飞
    • OpenZFS 中的 Zstandard 压缩
    • 会议报告:FreeBSD 供应商峰会
    • Git 不够吗?
  • 2021-0102 案例研究
    • Tarsnap 的 FreeBSD 集群
    • BALLY WULFF
    • Netflix Open Connect
    • FreeBSD 的新面孔
    • 写作学者的 FreeBSD
    • 在世界之巅
  • 2020-1112 工作流/持续集成(CI)
    • FreeBSD Git 快速入门
    • 使用 syzkaller 进行内核 Fuzzing
    • Mastering Vim Quickly 书评
    • 线上会议实用技巧
    • 在控制台上进行网络监控
  • 2020-0910 贡献与入门
    • 采访:Warner Losh,第 2 部分
    • 代码审查
    • 撰写良好的提交消息
    • 如何在不是程序员的情况下做出贡献——成为 FreeBSD 译者
    • 如何成为文档提交者
    • 谷歌编程之夏
    • 为 FreeBSD 期刊撰写文章
    • 你为什么使用 FreeBSD
    • FreeBSD 的新面孔
  • 2020-0708 基准测试/调优
    • FreeBSD Friday
    • 采访:Warner Losh,第 1 部分
    • 构建和运行开源社区
    • 在 FreeBSD 上轻松搭建我的世界(Minecraft)服务器
    • FreeBSD 的新面孔
  • 2020-0506 网络性能
    • 内核中的 TLS 卸载
    • 访谈:Michael W Lucas
    • FreeBSD 桌面发行版
    • 使用 Poudriere 进行 Port 批量管理
    • FreeBSD 的新面孔
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
  • 概述
  • Open Connect 达到超过 100 Tb/s 的峰值流量
  • Open Connect:一个网络与一个计划
  • 网络
  • 计划
  • Open Connect Appliances
  • 吞吐量效率
  • 提高效率和隐私保护 — 内核 TLS
  • 达到 200 Gb/s 的 NUMA 优化
  • FreeBSD 为 NETFLIX 提供三种效率:吞吐量、开发和运营
  • Open Connect 智囊团的下一步
在GitHub上编辑
导出为 PDF
  1. 2021-0102 案例研究

Netflix Open Connect

上一页BALLY WULFF下一页FreeBSD 的新面孔

最后更新于2个月前

  • 原文链接:

  • 作者:GREG WALLACE

概述

Netflix(纳斯达克股票代码:NFLX)是全球领先的流媒体娱乐服务,拥有超过 1.83 亿付费会员,覆盖 190 多个国家,会员可以观看各种类型和语言的电视系列、纪录片和电影。会员可以随时随地在一切连接互联网的屏幕上观看自己想看的内容,播放、暂停并继续观看,所有这些都没有广告或任何承诺。www.netflix.com

Open Connect 是负责将 Netflix 电视节目和电影全球传送到会员的全球网络。此类网络通常被称为内容分发网络(CDN),因为其工作是通过将人们观看的内容靠近他们观看的地方,来高效地传递基于互联网的内容(通过 HTTP/HTTPS)。Open Connect 设备运行的是经过轻微定制的 FreeBSD 版本。<https://openconnect.netflix.com/ Open-Connect-Overview.pdf>

Netflix 拥有几位 FreeBSD 提交者,Open Connect 团队的其他成员也为上游贡献了代码。

Open Connect 达到超过 100 Tb/s 的峰值流量

我们中那些记得互联网泡沫和电信繁荣的人,可能会记得 1999 年 Quest Communications 的标志性广告——一个疲惫的旅客在偏远地区的酒店办理入住。前台工作人员承诺提供平凡的早餐,但娱乐?

他们有的是娱乐。“每部电影,任何语言,任何时间,白天和晚上。”

客人惊讶地大声问:“这怎么可能?”怎么可能!(继续阅读)。二十年后的今天,酒店电视可能是最后一个提供“每部电影”的设备。技术似乎并不缺乏讽刺意味。

在讨论流媒体娱乐和使其成为可能的技术的最新趋势时,Netflix 绝对是绕不开的话题。截至 2019 年 4 月,Netflix 美国目录中包含了 47,000 部电视节目和 4,000 部电影。Netflix 报告称,全球的 Open Connect 网络在峰值时推送超过 100 Tb/s 的流量。根据 Sandvine 的数据,这代表了 2019 年全球总互联网流量的约 15%。

Open Connect:一个网络与一个计划

Netflix 于 2011 年启动了 Open Connect 项目,以应对 Netflix 流媒体服务规模的不断扩大。该项目的主要动机有两个:

  1. 随着 Netflix 成为消费者互联网服务提供商(ISP)网络流量的一个重要部分,与这些 ISP 直接合作变得至关重要。

  2. 为 Netflix 创建一个定制的内容分发解决方案,使他们的工程师能够设计一个主动的、定向缓存解决方案,这比标准的需求驱动型 CDN 更加高效。定向缓存架构通过几个数量级减少了对上游网络带宽的总体需求。

Netflix 播放过程

网络

大多数 CDN(内容分发网络)是按需驱动的。这意味着网络缓存的内容及其位置是根据某个地区的请求而定的。对于那些无法预测用户需求的通用 CDN,这种方式效果很好。

由于 Netflix 控制最终用户的应用程序,并且拥有详细的观看趋势数据,它们能够通过转向定向 CDN 获得显著的效率提升。在 Netflix 的定向 CDN 模式中,它们的 Open Connect Appliances(OCA)群体,在观看量非常低的 Fill 窗口期间,每天接收目录更新。

计划

Netflix 有一个开放对等互联政策,这意味着它们会与任何同意计划条款的 ISP(互联网服务提供商)进行对等互联。开放对等互联通过本地化流量来改善互联网用户体验。它还具有降低传输成本的优势,对 Netflix、ISP 以及整个互联网都有益。

除了在 Netflix 数据中心和互联网交换点(IXP)安装 OCAs,Netflix 还免费提供 OCA 给符合条件的 ISP,让其直接在 ISP 的网络中安装。这进一步提高了本地化程度,并减少了上游流量¹。有趣的是,这些 OCA 虽然由 Netflix 拥有,但由 ISP 使用,这引发了一些许可方面的考量,最初促使 Open Connect 工程师选择 FreeBSD,因为其宽松的许可证²。

Open Connect Appliances

Open Connect CDN 的主力是 Open Connect Appliances,简称 OCA。这些设备有三种主要配置,运行的是轻度定制的 FreeBSD head(开发)分支。这样的一个庞大且关键的网络使用快速变化的开发分支,乍一看似乎有些冒险。在 2019 年的 FOSDEM 大会上,Netflix 工程经理 Jonathan Looney 解释了使用 FreeBSD head 分支的理由。

首先,Jonathan 和他的团队认为 FreeBSD 的代码通常非常稳定且高质量。其次,他们更倾向于迅速找到并修复那些相对较少且大多数影响较小的 bug。否则,Jonathan 解释说,等待长期(稳定)分支的开发团队可能会陷入他所称之为恶性循环的境地——即合并不频繁,冲突/回归问题多,最终导致功能开发进度变慢。

跟踪 head 分支帮助 Netflix 更快地添加新功能。他们还发现,跟踪 head 分支使得与开发社区中的其他人合作变得更加容易。

  • 40Gb/s OCA 存储设备,具有 248TB 存储(2RU 机架形式)

    • FreeBSD

    • NGINX

    • BIRD 互联网路由守护进程

吞吐量效率

这些 OCA 有多高效?通过使用 FreeBSD 和商用零件,Netflix 在 1RU 机架中实现了 90 Gb/s 的吞吐量,支持 TLS 加密连接,CPU 使用率约为 55%,配备 Intel 6122 CPU、96GB RAM 和 16TB NVMe 闪存。

因为他们的目标是尽可能多地将代码提交给上游,所以所有 FreeBSD 用户都能受益于帮助 Netflix 实现这种性能的许多增强功能。其中一些贡献包括 NUMA 增强、异步 sendfile、内核 TLS、Pbuf 分配增强、“未映射”mbufs、I/O 调度、TCP 算法和 TCP 日志基础设施。

为了以具有成本效益的方式实现这种性能,Netflix 工程师意识到,他们需要尽可能减少内核与用户空间之间的上下文切换。异步 sendfile 就是帮助实现这一目标的关键技术之一。

新的 sendfile(2) 系统调用实现是对旧版本的替代,它加速了 TCP 数据传输,因为它避免了将文件数据复制到缓冲区再发送。新的 sendfile 通过支持异步 I/O 进一步加速并简化了大数据传输。

新的 sendfile 是 NGINX 和 Netflix 之间开发合作的成果,并在 2016 年 Netflix 服务扩展到近 200 个国家时发布。

Async 服务器

提高效率和隐私保护 — 内核 TLS

为了保护最终用户的隐私,Netflix 在 2016 年加入了传输层安全性(TLS)。Jan Ozer 在他的《Streaming Media》文章中很好地总结了这一举措:

Netflix 长期以来部署了数字版权管理(DRM)来防止盗版,并通过 HTTPS 保护客户数据在帐户登录和管理过程中的安全。然而,实际的视频数据传输并没有受到保护,因此服务器和客户端之间通信中的任何信息都可能被黑客、网络管理员或 ISP 访问。这些信息可以用来确定观众正在观看哪些内容,甚至其他细节。

添加 TLS 加密效率地要求对 OCA 软件堆栈进行额外的性能增强。这是因为现有的 TLS 技术依赖于 Web 服务器 —— Netflix 的流媒体标准总监 Mark Watson 在 2014 年报告称,这种方法会降低“30-53%”的容量。

解决方案是内核端 TLS,简称 kTLS,它将 TLS 与新的 sendfile 模型结合。这个混合 TLS 方案(由 John Baldwin 在 vBSDCon 2019 会议上描述)将会话管理保留在应用程序空间,并将大规模加密插入到内核中的 sendfile 数据管道。TLS 会话协商和密钥交换消息从 Nginx 传递到 TLS 库,会话状态存储在库的应用程序空间中。一旦 TLS 会话建立,并与客户端交换生成适当的密钥,这些密钥将与客户端的通信套接字关联,并共享到内核中。

传统 TLS Web 服务

内核内 TLS Web 服务

在他们的 2019 年 EuroBSD 演讲中,Drew Gallatin 和 Slava Shwartsman 展示了 kTLS 如何将带宽性能提升 50 Gb/s,同时减少 CPU 占用率。TLS 性能提升的下一个前沿是所谓的 NIC TLS,其中加密操作由硬件完成。如下面的图表所示,这有望显著减少 CPU 利用率。

内核 TLS 性能 90Gb/s,68% CPU(软件),35% CPU(T6 NIC kTLS)

原始(~2016)Netflix 100G NVME 闪存设备

Netflix 使用 TLS 视频服务

达到 200 Gb/s 的 NUMA 优化

随着成员对更多节目和更高分辨率的需求不断增长,Netflix 一直在寻找提高 OCA 吞吐量的方法。随着高核心数系统的发展,团队自 2014 年以来一直在开发和测试非一致性内存架构(NUMA)支持,现在已经开始取得成效。在典型系统中,只有一个 CPU、磁盘和内存,而 NUMA 系统则可以有更多的 CPU、内存和磁盘。与 sendfile 和 TLS 类似,NUMA 也可能会带来吞吐量瓶颈,Netflix 工程师一直在努力将其降到最低。

NUMA 使得 CPU 访问本地资源(例如内存)变得更加便宜,而访问连接到其他节点的资源则变得更加昂贵。因此,内存和 I/O 本地化会影响性能。为了充分利用 NUMA 提供的更高计算密度,Netflix 必须找到一种方法,将尽可能多的磁盘到 CPU 到网络的流量保持在本地节点,并最小化会影响性能的 NUMA 总线传输。为此,Netflix 进行了多项增强,目前这些增强正在逐步合并到上游,包括:

  • 为通过 sendfile(9) 发送的文件分配 NUMA 本地内存

  • 为内核 TLS 加密缓冲区分配 NUMA 本地内存

  • 将连接引导到绑定到本地域的 TCP Pacers 和 kTLS 工作线程

  • 通过对监听套接字 SO_REUSEPORT_LB 的修改,将传入连接引导到绑定到本地域的 Nginx 工作线程

在测试中,这些增强将 Xeon 性能从 105Gb/s 提高到 191Gb/s,同时将 NUMA 布局利用率从 40% 降低到 13%。对于 AMD EPYC,性能从 68Gb/s 增加到 194Gb/s。

四节点配置在 AMD EPYC 上很常见

FreeBSD 为 NETFLIX 提供三种效率:吞吐量、开发和运营

对于常见问题“为什么选择 FreeBSD?”Jonathan 说他们最初是因为许可证选择 FreeBSD,但最终留了下来是因为效率——Netflix 衡量效率有三种方式:

  1. 吞吐量或性能效率,如前一部分所述

  2. 开发效率

  3. 运营效率

从开发角度来看,与 FreeBSD 社区合作的便利性帮助 Netflix 将其改进向社区上游提交,以便社区进行持续维护。他们还喜欢与其他在相同领域工作的社区成员合作。与这些社区成员共享代码可以改善各方正在开发的代码。

最后,庞大的 OCA 集群需要复杂的监控和操作工具。一些他们所需的工具已经存在,其余的他们自己编写。对于后者,Jonathan 发现 FreeBSD 能很好地提供所需的挂钩,如果没有,团队也能够自己实现。

Open Connect 智囊团的下一步

除了 NUMA 和持续探索 NIC TLS,团队还在努力将一些改进提交到 kTLS 和 UFS 改进中。

最后,Open Connect 的巨大规模加上团队对效率的关注以及他们对开源的承诺,意味着每个有类似使用案例的 FreeBSD 用户都能获得相同的性能收益。开启 kTLS 并利用异步 Sendfile 的能力,使得任何通过 HTTPS 提供静态内容的用户都能延长硬件寿命、减少密度并更高效地提供卓越的用户体验。


GREG WALLACE 是一位自由职业的技术营销人员,自 2005 年以来一直与开源软件和社区合作。除了目前在 FreeBSD 基金会的工作外,Greg 还涉及 Kubernetes、安全性、DevOps 和路由等领域。此前,他曾领导 Node.js、ODPi 和 Hyperledger 的营销工作。

1 详情请见 。 2

Netflix Open Connect
https://openconnect.netflix.com/Open-Connect-Overview.pdf
https://www.nginx.com/blog/why-netflix-chose-nginx-as-the-heart-of-its-cdn/