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






















