作為一種小型、快速、安全、跨平臺的字節(jié)碼,WebAssembly是云原生模式的理想選擇。Docker創(chuàng)始人Solomon Hykes說,WASM和WASI(安全訪問系統(tǒng)API的WebAssembly系統(tǒng)接口)將不再需要容器技術(shù)。
但是,由于WASM提供的是二進制環(huán)境而不是整個環(huán)境,除非將整個環(huán)境移動到WebAssembly模塊中,否則它不能替代容器。換句話說,不要說“WASM是容器的終結(jié)”,正確的說法是“WASM+容器”。
Kubernetes幫助WebAssembly
如果你認(rèn)為云原生流程是在需要時從API創(chuàng)建的,需要更大的容量時可以進行擴展,不需要時可以刪除它們,WASM是運行這些流程的一種極好的方式。但你仍然需要一個運行它們的環(huán)境。Cosmonic首席執(zhí)行官Liam Randall將WebAssembly比作一個虛擬的、可能是通用的CPU,因為它作為一個通用編譯目標(biāo),但他指出“其中沒有虛擬操作系統(tǒng)。”
除非它們嵌入到另一個工作負載(如Envoy過濾器)中,或者在Cloudflare Workers等環(huán)境中用作無服務(wù)器功能,否則你需要一個編排器來編排它們。“對于服務(wù)器端WASM來說,調(diào)度和編排仍然是一個開放的領(lǐng)域。”風(fēng)險投資公司Amplify Partners的負責(zé)人Renee Shah指出。
目前還沒有特定于WASM的調(diào)度和編排系統(tǒng),從零開始開發(fā)這些系統(tǒng)而不是與現(xiàn)有選擇集成可能沒有意義。Kubernetes不是編排云流程的唯一選擇,但它如此廣為人知和廣泛采用,考慮將其與WebAssembly一起使用是合乎邏輯的。
使用KrutStLe(它現(xiàn)在是CNCF的沙盒項目),Kubernetes可以原生編排WebBaseSun運行時。Krustlet是用Rust寫的。當(dāng)Kubernetes API將pod調(diào)度到Krustlet上時,Krustlet在WASM運行時運行它們;在同一集群中運行的WebAssembly和容器工作負載可以相互通信,并使用機密、卷掛載和init容器等功能與集群的其余部分交互。
Matt Butcher是Microsoft team building container和WebAssembly技術(shù)(如Helm、Draft和Krustlet)的負責(zé)人。他表示,Kubernetes是WebAssembly的“寶藏”,因為它不僅帶來了調(diào)度,還帶來了其他關(guān)鍵服務(wù)。
Kubernetes“還帶來了存儲層,這是一個非常大的問題。你希望能夠移動工作負載,希望確保它可以連接到正確的存儲,這將是一個需要自己編寫的龐大項目。Kubernetes在這方面很成熟。秘密管理,網(wǎng)絡(luò)層。這是使Krustlet獲得如此出色啟動體驗的原因之一,我們只需連接到Kubernetes,而不必自己編寫。”
WebAssembly也可以利用其他容器構(gòu)造;使用WAGI(WebAssembly Gateway Interface)作為構(gòu)建編譯為WASM的HTTP處理程序的變通方法,你可以從OCI注冊表中引用和提取模塊(Kubewarden和Krustlet還利用OCI工件通過OCI注冊中心分發(fā)WASM模塊)。
Shah指出:“WebAssembly和容器的優(yōu)點在于,它們都在打破單體的趨勢上發(fā)揮作用。如果一家公司已經(jīng)使用了微服務(wù),那么添加由WebAssembly支持的新服務(wù)就相對簡單了。有了Krustlet,它們可以在Kubernetes中并排運行。
更好、更快、更?。篧ASM幫助Kubernetes
WASM在很多Kubernetes不相干的領(lǐng)域都是有用的。但也有一些WASM將顯著改進的Kubernetes場景,WebAssembly可能成為Kubernetes的常見工作負載,不需要替換容器。
Kubernetes中的WASM將特別適用于需要高密度、快速可用性和可擴展性的場景,或者需要在有限資源下運行的場景。要正確保護Kubernetes和容器的默認(rèn)運行時配置,還需要做大量工作。容器不是安全邊界。WebAssembly在防止代碼轉(zhuǎn)義方面做得更多。WASM沙盒的安全性和WASM模塊要求對任何功能具有明確權(quán)限的“默認(rèn)拒絕”方式在這里具有明顯的優(yōu)勢。
WebAssembly運行時的啟動時間在10毫秒范圍內(nèi),而容器的啟動時間為幾秒鐘(虛擬機的啟動時間為幾分鐘),這使得它非常適合無服務(wù)器環(huán)境,也適合擴展。
人們非常重視使容器尺寸更小,但對于內(nèi)存和存儲受限或處理能力最低的邊緣環(huán)境來說,容器尺寸往往太大。運行2MB WebAssembly模塊而不是25MB Docker容器意味著Kubernetes可以在更多環(huán)境中管理工作負載。
Butcher指出,這可以顯著提高工作負載密度。
邊緣(更為異構(gòu)的計算環(huán)境)可能是WASM和Kubernetes結(jié)合的最大機會,這可能意味著“云”將超越超規(guī)模數(shù)據(jù)中心。
“Krustlet為我們解決了Kubernetes和容器無法解決的問題,那就是我們需要能夠?qū)ubernetes集群擴展到數(shù)據(jù)中心之外,并擴展到越來越新奇的設(shè)備上。”
支持Arm硅是其中的一個重要部分,物聯(lián)網(wǎng)設(shè)備中使用的微控制器、許多硬件AI加速選項以及Intel正在生產(chǎn)的異構(gòu)CPU也是如此。“這是一個跨平臺、跨架構(gòu)、跨操作系統(tǒng)的故事。”
Cosmonic的Randall贊同這一觀點。“CPU的多樣性使得容器給生態(tài)系統(tǒng)帶來的限制更加明顯在CI/CD世界中。如果你必須針對幾十個或數(shù)百個不同的CPU,你需要幾十個或數(shù)百個特定的CPU鏡像。”此外,他指出,“許多小型設(shè)備永遠不會運行Linux。”
WASM+Kubernetes的可能性
Butcher希望WASM可以讓開發(fā)者體驗Kubernetes,就像Docker和containers一樣簡單:“我想要一個很好的快速工作流程,在這里我可以編寫一個應(yīng)用程序,在后臺的某個地方,它可以部署到運行Krustlet的Kubernetes集群。”
構(gòu)建容器可能很容易,但部署、測試和與同事共享測試環(huán)境令人擔(dān)憂,WebAssembly有望改進這些。
Cosmonic的wasmCloud現(xiàn)在是一個CNCF沙盒項目,旨在提高開發(fā)人員體驗,在某些場景中也依賴Krustlet(盡管它有自己的運行時,而不是Wasmtime運行時)。
Randall說:“Kubernetes和WebAssembly的結(jié)合使你能夠?qū)asmCloud放入多個云中的一組Kubernetes服務(wù)器中,并讓它們相互通信。”
微服務(wù)中還有一些基本的模式,WebAssembly中的未來功能可能會加以改進。
Butcher指出:“典型的微服務(wù)包括每個開發(fā)人員建立自己的HTTP服務(wù)器,并將JSON寫入對象序列化。”在每一個需要編寫、測試、保護和更新的微服務(wù)中,總共有大約1000行樣板代碼。WebAssembly nanoprocess模型將HTTP層和序列化/反序列化放在WASM運行時中。
“當(dāng)兩個模塊碰巧在同一個運行時相鄰時,它們只是直接通信。但是,當(dāng)它們分布在網(wǎng)絡(luò)上時,主機運行時會處理兩者之間的通信,開發(fā)人員不必維護它們。安全模式非常好,因為你不必每次OpenSSL出現(xiàn)錯誤時都更新每一段代碼。”
另一個異構(gòu)、資源受限的領(lǐng)域是機器學(xué)習(xí),Kubernetes在這一領(lǐng)域越來越重要,特別是在Kubeflow等工具的幫助下,WebAssembly可以帶來顯著的收益。
WASI不僅僅提供存儲和網(wǎng)絡(luò)等低級操作系統(tǒng)接口,它還可以為神經(jīng)網(wǎng)絡(luò)之類的東西提供高級接口。經(jīng)過訓(xùn)練的機器學(xué)習(xí)模型必須在各種具有特定平臺運行時的設(shè)備上運行,并使用不同的專業(yè)硬件加速器。由于WASM與平臺無關(guān),它將簡化部署,WASI nn接口將允許WebAssembly與多個機器學(xué)習(xí)運行時進行對話,如ONNX、OpenVINO、PyTorch和TensorFlow。
Butcher建議:“機器學(xué)習(xí)是WebAssembly可能足夠安全的另一個領(lǐng)域,但它在堆棧上的位置足夠低,因此它比容器更容易與硬件集成。”
“我們將WebAssembly視為一些難以使用容器的小部件的粘合層,我們可以更輕松地使用WebAssembly,然后將容器生態(tài)系統(tǒng)與硬件管理或部署機器學(xué)習(xí)算法等更難的部分結(jié)合起來。”
這就是你開始真正了解容器和WebAssembly如何相輔相成的地方。
原文鏈接:
https://thenewstack.io/how-webassembly-could-streamline-cloud-native-computing/