
導讀:字節跳動工程師總結稱,基於 eBPF 構建的 netkit 為容器網路提供了一種比虛擬乙太網更快捷的替代方案。

中國社交媒體公司字節跳動的軟體工程師們正在提前利用 Linux 核心最近釋出的一項名為 netkit 的功能,該功能為容器在叢集中相互通訊提供了一種更快的方式。
netkit 於 2023 年 12 月首次在 Linux 核心 6.7 中釋出,是一種可以透過 eBPF 程式設計的核心網路裝置 (請不要與現已停產的用於在單個伺服器上建立虛擬網路的 Netkit 混淆),被吹捧為一種簡化容器網路的方法。
與雲原生領域的其他公司一樣,字節跳動使用虛擬乙太網 ( veth ) 來連線容器。veth 是一種自 2008 年以來就已存在於 Linux 中的網路介面,它提供了一種建立容器私有網路的方法,同時仍允許它們與外界通訊。
veth 存在的問題
儘管 veth 似乎非常適合容器網路,但從業者很快發現它存在許多瓶頸,會降低容器之間的通訊速度。事實上,veth 要求每個資料包穿越兩個網路堆疊——一個是傳送方,另一個是接收方——即使通訊的兩個容器位於同一臺伺服器上(通常情況如此)。
虛擬乙太網要求資料包透過L2 層向上路由,以透過地址解析協議 (ARP) 找到其目標地址。
由於嵌入在核心中,netkit可以在這些資料包到達網路堆疊之前攔截它們,如果目的地在同一主機上,則在內部路由它們。換句話說,一切都在第 3 層(網路自己的層)中進行整理,而無需將其推送到第 2 層。

根據eBPF 基金會週一釋出的案例研究,字節跳動在自己的測試中發現,一旦消除這些“軟瓶頸”,效能就會提高 10%。此外,該公司發現,消除 veth 可以降低 CPU 使用率。
對於這樣一家注重績效的公司來說,這是一個好訊息。
字節跳動展開調查
字節跳動成立於 2012 年,運營著多個大型平臺,所有平臺都依賴於快速的效能。
TikTok是一款廣受歡迎的移動短影片服務,使用者數量接近 20 億,其中文版抖音是專門針對中國的獨立實體。此外還有今日頭條,懂車帝等一系列新聞和個人內容聚合應用;以及長影片平臺西瓜影片:此外還有遊戲部門、託管推薦服務(BytePlus 推薦)、企業協作套件(Lark)以及廣受歡迎的CapCut 影片編輯工具和託管服務。
轉向 netkit 是明智之舉。Isovalent的工程師與netkit密切合作,是第一個支援該技術的公司,其 Cilium 容器網路平臺的版本為 1.16。字節跳動的問題是,它只適用於執行 Linux Kernel 6.7 或更高版本的伺服器。
但由於“運營限制”,字節跳動仍在使用 Linux 核心 5.15,幾年後才會升級到 6.7 版本。因此,該公司將 eBPF(以及tcx 流量控制擴充套件)反向移植到這個較早的核心。它還需要更新它正在使用的容器網路介面(CNI)。
順利推出
目前,該公司正在用 eBPF 更新其多個核心,同時更新 CNI。到目前為止,netkit 已部署在“數十個叢集”中,據稱問題出現很少。
字節跳動高階工程師陳唐在去年的 eBPF 峰會上表示:“我們還沒有看到任何有關 netkit 的事故報告。我可以肯定地說 netkit 是值得信賴的。”
與任何生產系統一樣,升級的訣竅是不會導致任何停機時間。因此,veth 暫時也會保留。
新的容器將使用 netkit,而現有的容器將繼續使用 veth。工程師們研究了這兩種協議如何通訊,以及如果 netkit 出現故障,veth 如何充當備份。
netkit 無需額外設定。一旦 netkit 進入核心,就可以使用netlink(程序間通訊套接字)建立 netkit 裝置。字節跳動在 golang netlink包和iproute2中都添加了此支援。
設定 veth 和 netkit 之間沒有太大區別,但為了獲得最佳效能,eBPF 程式應該附加到 netkit 對的容器端。
這家司開發了一個代理來管理主機上的 eBPF 程式以供內部伺服器使用,執行諸如將層 ACL 規則拆分為 bpf 對映條目以及轉儲核心除錯所需的資訊等任務。
作者:跨年的大雄 相關網址:https://pkg.go.dev/github.com/vishvananda/netlink https://wiki.linuxfoundation.org/networking/iproute2
相關閱讀: