一、簡介
BPF/eBPF
BPF - Berkeley Packet Filter ,是一種數據包過濾技術,采用虛擬機 (VM) 設計,可以有效地工作在基于寄存器結構的 CPU 之上,并通過緩存機制提高過濾性能,但BPF只能運行在內核態,沒有大規模使用。
eBPF - extended BPF ,eBPF針對現代硬件進行了優化,增加了寄存器和優化指令。并且向用戶空間開放了能力,可以在Linux內核中運行沙盒程序,而無需更改內核源代碼或加載內核模塊。實現機制上類似Java字節碼與JVM,開發者可以編寫程序,編譯為字節碼,映射到eBPF中執行。eBPF可以監控內核事件、調用等,從而在觀測(跟蹤、性能調優等)、安全和網絡等領域發揮重要的作用。
wasm - WebAssembly
WebAssembly: 誕生于2015年,一種基于堆棧式虛擬機的二進制指令集,Wasm 被設計成為一種編程語言的可移植編譯目標,并且可以通過將其部署在 Web 平臺上,以便為客戶端及服務端應用程序提供服務。
Wasm出現的最初原因是為了解決Javascript在瀏覽器執行性能問題,主要使用場景在瀏覽器中。后來為了在web場景之外使用wasm,出現了新的標準WASI(WebAssembly System Interface),支持WASI的runtime都可以運行wasm,從而使wasm runtime作為應用運行時出現在云計算基礎設施領域成為可能。
eBPF和wasm runtime都具備執行字節碼的能力,從這個角度看,認為是虛擬機也可以。但從誕生的背景和原理上看,兩者有比較大的區別:
- eBPF是linux內核的子系統,wasm runtime類似JVM,可跨平臺
- 從應用場景上看,wasm runtime可作為應用的運行時環境,應用場景更廣泛。
二、使用場景
1、eBPF:
eBPF優勢主要體現在安全、性能和可觀測性方面,一些強大的性能分析工具如BCC或BPFTrace都是基于eBPF實現的。在云計算容器技術領域,eBPF可以用于優化網絡性能,流量治理,安全防御等,越來越得到重視。
1)、容器安全
可以編寫eBPF程序,對容器的訪問權限進行控制和跟蹤,對異常網絡流量進行分析,對問題容器和節點進行隔離等。
2)、網絡插件
Cilium 是K8S網絡插件,基于Linux的內核技術eBPF,可以在Linux內部動態插入強大的安全性、可見性和網絡控制邏輯,可以透明的對Kubernetes等容器管理平臺上的應用程序服務之間的網絡連接進行安全防護。
2、wasm:
wasm優勢主要體現在輕量、安全,相比容器的重和慢,運行在wasm runtime中的應用可以毫秒級冷啟動和極低的資源消耗,在邊緣、函數計算、Serverless場景比docker有比較大的優勢。
1)、某些場景下取代docker
與容器相比,wasm有以下優勢:
- 不需要特定的容器或虛擬化技術支持就可以運行
- WASM及其運行時可以快速執行并且體積非常小
- WASM在默認情況下不能做任何事情;只有在明確的權限下才能執行。
目前通過krustlet開源項目,基于k8s運行wasm程序的負載,通過親和性來運行wasm程序,目前很多功能是實驗性,還不具備生產條件。
2)、服務網格
服務網格istio - 支持通過wasm擴展Envoy,用戶可以編寫自定義的插件來完成網格控制邏輯。
3)、邊緣/Serverless場景
CNCF開源項目WasmEdge: 可以把WebAssembly做成OCI(Open Container Interface),實現CRI,被K8S調度。WasmEdge Runtime可以應用于 severless 云函數、SaaS、區塊鏈智能合約、物聯網、汽車實時軟件應用等多種場景。
阿里CDN的EdgeRoutine:是阿里云CDN推出的邊緣Serverless計算環境。可以CDN邊緣節點執行自定義的代碼,實現CDN定制化邏輯,提高性能。
三、總結
eBPF和wasm都是最近幾年的新技術,憑借它們各自獨有的優勢,開始在云計算領域流行。從當前發展來看,eBPF在網絡方面的應用相對成熟些,可以借鑒開源的項目如cilium在我們產品的網絡和安全方面做一些優化。wasm在云計算領域目前屬于快速成長階段,一些開源項目如WasmEdge、Krustlet等在生產落地的案例不多,可以保持關注,做一些技術預研和儲備。
Rust是新興的安全可靠、高性能的系統級編程語言,由于對編譯成wasm/eBPF的bytecode支持好,因此相關的應用都優先用Rust來寫。但Rust學習曲線較高,目前國內Rust工程師很少。