WebAssembly會(huì)是下一個(gè)Kubernetes嗎?
幾周前我有一個(gè)“哦,啊哈,當(dāng)然”的時(shí)刻,我想分享一下:WebAssembly是下一個(gè)Kubernetes嗎?
Kubernetes來(lái)了
Kubernetes承諾提供一個(gè)軟件虛擬化基礎(chǔ),可以讓你同時(shí)解決許多問(wèn)題:
與在裸機(jī)上運(yùn)行服務(wù)相比,Kubernetes可以讓你更有效地使用硬件。Kubernetes允許你在一臺(tái)硬件服務(wù)器上運(yùn)行多個(gè)容器,并允許你根據(jù)需要向集群中添加更多服務(wù)器。
“容器云”架構(gòu)有效地劃分了構(gòu)建服務(wù)器端應(yīng)用程序的工作。數(shù)據(jù)庫(kù)團(tuán)隊(duì)可以發(fā)布數(shù)據(jù)庫(kù)容器,后端團(tuán)隊(duì)可以發(fā)布Java容器,產(chǎn)品經(jīng)理使用網(wǎng)絡(luò)作為通用中間層將它們連接在一起。它符合康威定律:軟件看起來(lái)像組織結(jié)構(gòu)圖。
容器抽象足夠通用,可以支持許多不同類型的服務(wù)。Go、Java、C++等等——它不是特定于語(yǔ)言的。開(kāi)發(fā)團(tuán)隊(duì)可以使用他們喜歡的東西。
負(fù)責(zé)運(yùn)行容器的Kubernetes服務(wù)器的運(yùn)維團(tuán)隊(duì)不必信任他們運(yùn)行的容器,他們內(nèi)置了一些沙盒和保護(hù)措施。
Kubernetes本身是對(duì)先前架構(gòu)OpenStack的演變。OpenStack讓每個(gè)容器都是一個(gè)完整的虛擬機(jī),具有完整的內(nèi)核和操作系統(tǒng)以及一切。相反,Kubernetes通常使用容器,容器中通常不需要內(nèi)核。它們更輕量級(jí)——想想Docker與VirtualBox。
在Kubernetes部署中,內(nèi)核仍然位于軟件架構(gòu)的中心位置。容器化的基本機(jī)制是具有私有命名空間的Linux內(nèi)核進(jìn)程。然后這些容器通過(guò)TCP和UDP套接字粘合在一起。然而,雖然每個(gè)容器有一個(gè)或多個(gè)內(nèi)核進(jìn)程確實(shí)比完整的虛擬機(jī)擴(kuò)展得更好,但它通常不會(huì)擴(kuò)展到數(shù)百萬(wàn)個(gè)容器。并且進(jìn)程確實(shí)有一些啟動(dòng)時(shí)間——你不能為每個(gè)對(duì)高性能Web服務(wù)的請(qǐng)求啟動(dòng)一個(gè)容器。這些技術(shù)限制導(dǎo)致某些類型的系統(tǒng)架構(gòu),通常具有保持某種狀態(tài)的長(zhǎng)期組件。
k8s會(huì)演化到w9y嗎
服務(wù)器端WebAssembly與Kubernetes處于類似的空間——或者更確切地說(shuō),WebAssembly類似于進(jìn)程和私有命名空間。WebAssembly為你提供了良好的抽象屏障和(可以提供)高度安全隔離。在某些方面它甚至更好,因?yàn)閃ebAssembly提供了“允許列表”安全性——它沒(méi)有一開(kāi)始的功能,要求運(yùn)行WebAssembly的“主機(jī)”將自己的一些功能顯式委托給客體WebAssembly模塊。與默認(rèn)情況下從每個(gè)功能開(kāi)始然后必須受到限制的進(jìn)程進(jìn)行比較。
與Kubernetes一樣,WebAssembly也為你提供康威定律系統(tǒng)。你無(wú)需傳送容器,而是傳送WebAssembly模塊——以及一些關(guān)于他們需要從環(huán)境中獲得哪些類型的東西的元數(shù)據(jù)(“導(dǎo)入”)。WebAssembly是通用的——它是一個(gè)低級(jí)的虛擬機(jī),任何東西都可以編譯成。
但是,在WebAssembly中你會(huì)得到更多的東西。一是快速啟動(dòng),因?yàn)閮?nèi)存就是數(shù)據(jù),所以你可以安排創(chuàng)建一個(gè)WebAssembly模塊,該模塊的狀態(tài)從內(nèi)存中預(yù)初始化的狀態(tài)開(kāi)始。這樣的模塊可以在幾微秒內(nèi)啟動(dòng)——速度足夠快,可以在每個(gè)請(qǐng)求上創(chuàng)建一個(gè),在某些情況下,只是在之后丟棄狀態(tài)。你可以在WebAssembly上比在容器上更有效地運(yùn)行功能即服務(wù)架構(gòu)。另一個(gè)是虛擬化完全在用戶空間中提供。一個(gè)進(jìn)程可以在許多不同的WebAssembly模塊之間多路復(fù)用。這讓一臺(tái)服務(wù)器可以做更多事情。而且,你不需要使用網(wǎng)絡(luò)來(lái)連接WebAssembly組件;它們可以在內(nèi)存中傳輸數(shù)據(jù),有時(shí)甚至無(wú)需復(fù)制。
題外話:WebAssembly的這種輕量級(jí)進(jìn)程特色使得其他架構(gòu)也成為可能,例如這個(gè)有趣的hack將鏈接到Firefox的庫(kù)沙箱化,他們實(shí)際上已經(jīng)發(fā)布了!
我將WebAssembly與Kubernetes進(jìn)行比較,但實(shí)際上它更像是進(jìn)程和私有命名空間。所以對(duì)最初提出的問(wèn)題的一個(gè)答案是,不,WebAssembly不是下一個(gè) Kubernetes。下一個(gè)項(xiàng)目正在等待建立,盡管我知道一些已經(jīng)開(kāi)始的團(tuán)隊(duì)。
不過(guò),我似乎很清楚一件事:WebAssembly將處于新事物的底部,因此WebAssembly的近期軌跡很可能會(huì)跟隨Kubernetes的軌跡,這意味著……
- 分析師的慶祝時(shí)間!
- Gartner魔力象限再次出現(xiàn)
- IBM推出了一個(gè)新的WebAssembly部門
- 埃森哲開(kāi)始向公司詢問(wèn)他們的WebAssembly遷移計(jì)劃
- Linux基金會(huì)嘗鮮
等等。我會(huì)在不久的將來(lái)看到動(dòng)蕩的水域。所以從這個(gè)意義上說(shuō),Kubernetes本質(zhì)上不是一個(gè)技術(shù)軟件,而是一個(gè)泡沫商業(yè)競(jìng)爭(zhēng)的紐帶,當(dāng)然:我們還有5年左右的時(shí)間,我們會(huì)很開(kāi)心。
讀者評(píng)論:2021年12月的WebAssembly讓我想起了2014年容器/Kubernetes的情況——業(yè)界已經(jīng)意識(shí)到當(dāng)前的技術(shù)狀態(tài)并不能解決當(dāng)今所有的問(wèn)題??邕吘?服務(wù)器/瀏覽器的可移植性、可移植的安全模型以及業(yè)務(wù)邏輯和庫(kù)之間的緊密耦合意味著企業(yè)構(gòu)建/管理/操作應(yīng)用程序的多個(gè)版本。像wasmCloud這樣的技術(shù)是未來(lái),在我看來(lái),未來(lái)幾年將會(huì)有一個(gè)更好的故事。