自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

eBPF如何塑造Linux和平臺(tái)工程的未來

系統(tǒng) Linux
與 Google Borg 和其他誕生于超大規(guī)模企業(yè)的技術(shù)一樣,eBPF 最初只被少數(shù)擁有內(nèi)核開發(fā)技能的軟件工程團(tuán)隊(duì)采用。并非所有開發(fā)人員都具備必要的低級(jí) C 編程技能來進(jìn)行內(nèi)核工程和編寫 eBPF 程序。

eBPF 允許用戶在 Linux 內(nèi)核中加載和安全運(yùn)行自定義程序,而無需直接更改內(nèi)核本身??赡苄允菬o限的。

譯自How eBPF is shaping the future of Linux and platform engineering,作者 Travis Van。

當(dāng)Docker 在 2013 年橫空出世時(shí),Linux 容器似乎一夜之間就取得了成功。但容器(以及微服務(wù)和Kubernetes)的演變實(shí)際上是幾十年來的積累,其基礎(chǔ)是 Linux 操作系統(tǒng)中的內(nèi)核原語。Docker 使用這些原語,即 cgroups 和 namespaces,作為構(gòu)建塊來創(chuàng)建輕量級(jí)、易于使用的軟件打包格式。Linux 容器多年來一直被 Google 和其他 [行家?] 使用,但 Docker 使其易于被主流開發(fā)人員訪問。

而這正是我們今天在eBPF周圍看到的情況——另一項(xiàng)源自 Linux 內(nèi)核原語的技術(shù)。如今,每個(gè)主要的網(wǎng)絡(luò)、可觀察性和安全供應(yīng)商都在宣稱提供“基于 eBPF 的”產(chǎn)品。像 Cilium、Tetragon 和 Falco 這樣的 eBPF 工具正在企業(yè)架構(gòu)和云服務(wù)提供商產(chǎn)品中扎根。據(jù)其創(chuàng)造者之一說,這僅僅是基于 eBPF 的突破的開始。

InfoWorld 與 Daniel Borkmann 進(jìn)行了交談——eBPF 的共同創(chuàng)造者,也是 Linux 內(nèi)核當(dāng)前的 eBPF 共同維護(hù)者——以了解更多關(guān)于該技術(shù)起源的信息,為什么 eBPF 已成為編程和定制 Linux 內(nèi)核的標(biāo)準(zhǔn)方法,以及這對 Linux 和平臺(tái)工程的未來意味著什么。

從 Solaris 學(xué)生到 Linux 內(nèi)核維護(hù)者

Daniel Borkmann 走向 eBPF 的道路始于對理解 Solaris 內(nèi)部機(jī)制的追求,Solaris 當(dāng)時(shí)仍在大學(xué)的計(jì)算機(jī)科學(xué)課程中教授。然而,一個(gè)主要障礙是缺乏源代碼來查看“魔法發(fā)生的地方”。Borkmann 發(fā)現(xiàn)操作系統(tǒng)課程中的理論非常有趣,但真正讓他醍醐灌頂?shù)氖撬钜寡芯?Linux 內(nèi)核源代碼、Git 日志和郵件列表。他開始編寫與內(nèi)核交互的低級(jí)用戶應(yīng)用程序。

很快,Borkmann 開始探索數(shù)據(jù)包過濾器、tcpdump 和 libpcap,以及數(shù)據(jù)包在進(jìn)出時(shí)遍歷不同層時(shí)網(wǎng)絡(luò)堆棧的工作原理。他在業(yè)余時(shí)間編寫了一個(gè)更高效的 tcpdump 克隆,并開始向 Linux 網(wǎng)絡(luò)堆棧發(fā)送一些代碼改進(jìn)。在他碩士學(xué)習(xí)開始時(shí),他最終獲得了第一份在德國萊比錫的一家當(dāng)?shù)爻鮿?chuàng)公司開發(fā) Linux 內(nèi)核代碼的付費(fèi)工作。

Borkmann 在 2010 年提交了他的第一個(gè)補(bǔ)丁到 Linux 內(nèi)核,當(dāng)時(shí)他還是一個(gè)“完全的新手”(他的原話),目的是擴(kuò)展 netpoll 以允許每個(gè)接口執(zhí)行多個(gè) rx_hooks,并且意外地引入了一個(gè)錯(cuò)誤,該錯(cuò)誤會(huì)導(dǎo)致內(nèi)核死鎖,該錯(cuò)誤很快被另一位貢獻(xiàn)者發(fā)現(xiàn)并修復(fù)。但他被迷住了。Linux 內(nèi)核開發(fā)是一個(gè)迷人的環(huán)境,他知道這是他的使命。

Borkmann 搬到蘇黎世,完成關(guān)于為內(nèi)核開發(fā)可組合網(wǎng)絡(luò)堆棧的碩士論文。從 FreeBSD 的 netgraph 中汲取靈感,他的實(shí)驗(yàn)是嘗試將網(wǎng)絡(luò)塊卸載到 FPGA 上,并為數(shù)據(jù)包處理構(gòu)建可組合的圖。但在此過程中,他有時(shí)發(fā)現(xiàn)學(xué)術(shù)論文過于枯燥,缺乏長期的現(xiàn)實(shí)世界影響,并意識(shí)到全職為 Linux 內(nèi)核做出貢獻(xiàn)會(huì)更有意義。他發(fā)現(xiàn)了一位名叫 Thomas Graf 的 Linux 貢獻(xiàn)者(最終他們都成為了 Cilium 的共同創(chuàng)造者),他的電子郵件有一個(gè)瑞士域名(.ch),自發(fā)地聯(lián)系了他——并被邀請加入 Red Hat 的 Linux 內(nèi)核網(wǎng)絡(luò)團(tuán)隊(duì)。

現(xiàn)在,Borkmann 是全球 Linux 內(nèi)核貢獻(xiàn)者中排名前 1% 的人之一。

eBPF 背后的起源故事實(shí)際上始于 2011 年,當(dāng)時(shí)軟件定義網(wǎng)絡(luò) (SDN) 正在興起,Linux 的采用率正在飆升。Linux 子系統(tǒng)需要跟上微服務(wù)架構(gòu)和分布式應(yīng)用程序的新范式,這些應(yīng)用程序運(yùn)行在 Linux 機(jī)器集群中,而不是單個(gè)服務(wù)器和主機(jī)操作系統(tǒng)上。

Borkmann 在網(wǎng)絡(luò)堆棧中開發(fā)內(nèi)核的工作讓他站在滿足 SDN 和云原生網(wǎng)絡(luò)需求的前線。Linux 需要更新的抽象,因?yàn)槠湓S多構(gòu)建塊在十多年前就已經(jīng)設(shè)計(jì)好了——cgroup(CPU、內(nèi)存處理)、命名空間(網(wǎng)絡(luò)、掛載、pid)、SELinux、secomp、Netfilter、Netlink、AppArmor、Auditd、Perf 等。Borkmann 看到 netfilter 的 nftables 等技術(shù)被推為“下一代”Linux 網(wǎng)絡(luò),以及 Open vSwitch(OVS),它當(dāng)時(shí)是最先進(jìn)的 SDN 項(xiàng)目。他認(rèn)為有更好的方法。

Linux 內(nèi)核正在不斷擴(kuò)展以跟上更高的網(wǎng)絡(luò)速度,但沒有提供足夠的靈活性來編程新的自定義功能。另一個(gè)限制是“絕不破壞用戶空間”。也就是說,Linux 內(nèi)核必須繼續(xù)支持所有在云原生應(yīng)用程序出現(xiàn)之前很久就開發(fā)的軟件。不幸的是,這些“遺留包袱”將一些網(wǎng)絡(luò)創(chuàng)新從內(nèi)核移動(dòng)到了用戶空間。

總之,新的云操作模式為我們帶來了更多的自動(dòng)化、提取轉(zhuǎn)換加載 (ETL) 和規(guī)模,以及更嚴(yán)苛的網(wǎng)絡(luò)性能要求。然而,Linux 內(nèi)核中的自包含子系統(tǒng)并未對將所有這些新的云上下文中送入內(nèi)核、聚合這些內(nèi)容以及對其進(jìn)行操作達(dá)成公約。

在 Linux 編程中,數(shù)據(jù)包處理(解析、操作、過濾和轉(zhuǎn)發(fā))是“可能實(shí)現(xiàn)的功能”的一個(gè)基礎(chǔ)關(guān)注點(diǎn)。這是內(nèi)核開發(fā)人員對通過堆棧傳輸?shù)木W(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行路由、控制和檢查的機(jī)制。數(shù)據(jù)包處理對于內(nèi)核的網(wǎng)絡(luò)堆棧,就如同化油器對于發(fā)動(dòng)機(jī),通量電容對于 Doc 的狄羅倫一樣。

應(yīng)用程序開發(fā)者大多數(shù)都在用戶空間內(nèi)編寫其應(yīng)用程序,使用保護(hù)他們免受需對內(nèi)核進(jìn)行的系統(tǒng)調(diào)用的抽象。因此,當(dāng)應(yīng)用程序需要與硬件進(jìn)行接口(寫入屏幕、寫入文件、發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包)時(shí),它必須請求內(nèi)核提供幫助。用戶空間無法直接執(zhí)行此操作(出于多種原因,例如系統(tǒng)安全性)。內(nèi)核提供用戶空間應(yīng)用程序和硬件之間的通用且泛用的接口,并協(xié)調(diào)同時(shí)運(yùn)行的多個(gè)用戶空間進(jìn)程。

從虛擬化到容器的演進(jìn)過程中,許多不同的數(shù)據(jù)包篩選方法競爭在 Linux 內(nèi)核中占有一席之地:iptables、nftables、OVS、Linux 流量控制 (TC) 等。eBPF 最終勝出成為首選方法,因?yàn)樗鼘⒈磉_(dá)能力與驗(yàn)證器的安全性相結(jié)合(同時(shí)以本機(jī)性能執(zhí)行程序)。換句話說,eBPF 允許用戶以這些備選方案無法實(shí)現(xiàn)且不會(huì)導(dǎo)致內(nèi)核崩潰的方式對內(nèi)核進(jìn)行編程。

一個(gè)更為“可編程”的 Linux 內(nèi)核

開始時(shí),Borkmann 被 eBPF 的靈活性及其給網(wǎng)絡(luò)帶來的性能所吸引,但很明顯,這項(xiàng)新技術(shù)的好處遠(yuǎn)遠(yuǎn)超出了網(wǎng)絡(luò)領(lǐng)域。

“一旦 eBPF 實(shí)現(xiàn)了此項(xiàng)基礎(chǔ)功能,讓你能夠構(gòu)建內(nèi)容并立即部署,它便解決了一個(gè)大問題,”Borkmann 說。“你可以編寫嵌入 eBPF 的編排計(jì)劃,并將其部署到任何底層內(nèi)核版本。你無需再為核心內(nèi)核 ABI 穩(wěn)定性向大型供應(yīng)商支付巨額費(fèi)用,現(xiàn)在只需使用 eBPF 即可,而不必再使用模塊來針對大量不同的用例擴(kuò)展內(nèi)核?!?/p>

eBPF 轉(zhuǎn)變?yōu)橐环N通用匯編語言,該語言允許用戶在 Linux 內(nèi)核中加載和安全運(yùn)行自定義程序,這是一種在運(yùn)行時(shí)向操作系統(tǒng)中添加各種功能的方法。它具有嚴(yán)格的類型,具有穩(wěn)定的指令集,并且其擴(kuò)展具有后向兼容性。

Borkmann 解釋道:“你可以將其視為一種新型的軟件,能夠彌合典型的單內(nèi)核與微內(nèi)核之間的差距”?!八悄闶苄湃蔚挠脩艨臻g中內(nèi)核的安全擴(kuò)展。關(guān)于 eBPF 很重要的一個(gè)方面是,它與常規(guī)內(nèi)核代碼一樣快,這是由于 eBPF 不是沙箱,并且驗(yàn)證程序可以完全理解該程序以確定它是否可以在受信任的環(huán)境中安全運(yùn)行,然后再 JITed [即時(shí)編譯] 為本機(jī)代碼?!?/p>

eBPF 不僅安全且快速,還可以在本機(jī)速度下運(yùn)行。它極其靈活,允許不同用戶以不同方式使用它?!癳BPF 的強(qiáng)大之處在于你可以僅當(dāng)你作為用戶有該用例或需要以某種方式處理某些內(nèi)容時(shí)啟用代碼,”Borkmann 說。“這不會(huì)懲罰他人。它不像以硬編碼方式編入內(nèi)核的東西,這將使關(guān)鍵路徑越來越慢——性能死亡是一千次的削減?!?/p>

“在 eBPF 出現(xiàn)之前,大多數(shù)用戶使用企業(yè) Linux 發(fā)行版,或者直接運(yùn)行設(shè)備上安裝的內(nèi)核版本,”Cilium 的 Graf 說?!癳BPF 從根本上改變了這一點(diǎn),因?yàn)橛辛诉\(yùn)行時(shí)的存在,任何想法都可以轉(zhuǎn)化為 eBPF 程序,并在幾天內(nèi)而不是幾年內(nèi)在運(yùn)行時(shí)加載。這意味著我們可以更好地重建一切。我們必須決定首先重建什么。”

內(nèi)核工程走向主流

與 Google Borg 和其他誕生于超大規(guī)模企業(yè)的技術(shù)一樣,eBPF 最初只被少數(shù)擁有內(nèi)核開發(fā)技能的軟件工程團(tuán)隊(duì)采用。并非所有開發(fā)人員都具備必要的低級(jí) C 編程技能來進(jìn)行內(nèi)核工程和編寫 eBPF 程序。

但如今,這少數(shù)專家正在編寫影響數(shù)百萬用戶的程序。eBPF 驅(qū)動(dòng)的程序是平臺(tái)工程團(tuán)隊(duì)最令人興奮的領(lǐng)域,這些團(tuán)隊(duì)負(fù)責(zé)網(wǎng)絡(luò)、安全和可觀察性,而許多使用這些程序的人不需要了解使它們成為可能的底層 eBPF 抽象?!鞍阉胂蟪蓙碜栽圃囊粓鰺o聲的平臺(tái)革命,”正如 Borkmann 在最近關(guān)于 eBPF 的研討會(huì)上的一次主題演講中所指出的那樣。

以下是廣闊的 eBPF 領(lǐng)域中眾多應(yīng)用的概覽:

Cilium最初是容器網(wǎng)絡(luò)接口(CNI) 的基于 eBPF 的實(shí)現(xiàn),用于提供容器工作負(fù)載之間的第 3 層和第 4 層連接,但后來發(fā)展成為大多數(shù)云服務(wù)提供商 Kubernetes 產(chǎn)品的實(shí)際網(wǎng)絡(luò)層。除了其他功能外,Cilium 還為 Kubernetes Pod 之間以及到外部服務(wù)的流量實(shí)現(xiàn)分布式負(fù)載均衡,并且能夠完全替換 kube-proxy,使用 eBPF 中的高效哈希表實(shí)現(xiàn)幾乎無限的擴(kuò)展。它還支持高級(jí)功能,如第 3 層到第 7 層策略執(zhí)行、集成入口和出口網(wǎng)關(guān)、帶寬管理、與 Envoy 結(jié)合的服務(wù)網(wǎng)格以及深度網(wǎng)絡(luò)可見性。

Tetragon是另一個(gè) eBPF 程序,它提供安全可觀察性和運(yùn)行時(shí)強(qiáng)制執(zhí)行。通過利用 eBPF 的低開銷,Tetragon 允許平臺(tái)團(tuán)隊(duì)將網(wǎng)絡(luò)流和其他內(nèi)核事件與 Kubernetes 對象(標(biāo)簽、Pod、命名空間)綁定,直至非常具體的進(jìn)程及其相關(guān)的進(jìn)程樹。在XZ Utils等軟件供應(yīng)鏈安全漏洞出現(xiàn)后,Tetragon 是一個(gè)開源項(xiàng)目,旨在為平臺(tái)團(tuán)隊(duì)提供更深入的方法來查找特定軟件在其環(huán)境中的運(yùn)行位置,并在內(nèi)核級(jí)別采取特定的策略操作。

Pixie是一款可觀察性工具,它使用 eBPF “自動(dòng)捕獲遙測數(shù)據(jù),無需手動(dòng)檢測”。它已成為下一代應(yīng)用程序性能管理和監(jiān)控供應(yīng)商的熱門構(gòu)建塊。在 Google 上簡單搜索“可觀察性 AND eBPF”就可以看出這項(xiàng)技術(shù)如何改變了 eBPF 性能帶來的遙測數(shù)據(jù)豐富性。推斷云原生系統(tǒng)的實(shí)時(shí)狀態(tài)歷來涉及堆積監(jiān)控?cái)?shù)據(jù),這些數(shù)據(jù)必須在將來進(jìn)行關(guān)聯(lián)。將這種遙測數(shù)據(jù)收集更靠近內(nèi)核,有望帶來更高的一致性和更低的資源使用率。

Katran是一個(gè) C++ 庫,它可以挑戰(zhàn)專有第 3 層和第 4 層負(fù)載均衡器的現(xiàn)狀,采用一種基于內(nèi)核包處理的新方法。并非每個(gè)人都能創(chuàng)建 eBPF 程序,但正在創(chuàng)建的程序針對的是企業(yè)基礎(chǔ)設(shè)施中相對停滯的領(lǐng)域,并且迫切需要現(xiàn)代化以滿足云原生用例的需求。

“未來十年的基礎(chǔ)設(shè)施軟件將由能夠使用 eBPF 以及利用 eBPF 創(chuàng)建適合更高層平臺(tái)的抽象的平臺(tái)工程師來定義,”Borkmann 說?!皩⒃圃舷挛耐迫雰?nèi)核是缺失的,而 eBPF 解決了這個(gè)問題。”

在本月我們慶祝Kubernetes 10 周年之際,我們?nèi)匀惶幱诜植际綉?yīng)用程序、容器編排和平臺(tái)工程的早期階段。可能很少有人會(huì)直接在內(nèi)核級(jí)別進(jìn)行 eBPF 工程,但數(shù)百萬用戶將使用基于 eBPF 的程序。如果您在大型公共云提供商平臺(tái)之一上運(yùn)行 Kubernetes 上的工作負(fù)載,那么您很可能已經(jīng)在使用它了。

責(zé)任編輯:武曉燕 來源: 云云眾生s
相關(guān)推薦

2017-01-06 09:45:29

DevOps網(wǎng)絡(luò)未來

2015-04-21 16:09:46

2024-02-21 16:36:02

2018-11-26 04:30:21

NFVSDN電信

2023-06-06 10:25:53

面部識(shí)別智慧城市

2024-04-01 14:15:55

物聯(lián)網(wǎng)智慧城市

2021-09-16 11:15:21

區(qū)塊鏈環(huán)境技術(shù)

2015-12-09 09:27:37

Linux基金會(huì)Linux開源

2023-03-02 13:32:02

2020-05-19 20:17:55

物聯(lián)網(wǎng)農(nóng)業(yè)IOT

2021-04-21 10:49:36

穩(wěn)定幣比特幣貨幣

2023-03-02 13:26:28

數(shù)字孿生人工智能

2019-05-27 07:03:22

物聯(lián)網(wǎng)家庭自動(dòng)化IOT

2022-09-06 09:46:07

?人力資源大數(shù)據(jù)

2023-07-18 14:56:00

物聯(lián)網(wǎng)

2022-12-26 17:36:25

2020-07-28 09:36:58

網(wǎng)絡(luò)安全遠(yuǎn)程工作技術(shù)

2021-01-29 11:36:40

5G網(wǎng)絡(luò)切片建筑業(yè)

2024-04-17 10:36:14

智能建筑傳感器智慧空間

2024-03-15 14:28:02

數(shù)據(jù)中心高性能計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)