1998年誕生的虛擬化技術的VM、2013年出現Docker容器技術和K8s,以及2019年開始走出瀏覽器Wasm,都是可以用來部署和建置雲原生基礎架構的根本技術,也都提供了一個沙盒般的獨立軟體執行環境,可以用來執行應用系統或程式。不過,這三者有很大的不同,尤其是Wasm技術,從一開始的技術創立目的,就和前兩者截然不同。

Wasm技術發明之初,就是為了解決JavaScript效能問題,希望讓瀏覽器中的Web應用能像桌面原生軟體一樣的高速執行。而VM技術是為了更善用硬體資源,讓不同應用系統各自有自己完整的虛擬「實體主機資源」可用,而Docker則是為了解決應用程式相依性越來越複雜的挑戰,想要讓AP可以到處執行。

不過,從技術實作背後的核心概念,VM是將實體環境的複雜度封裝到單一環境中,容器則是將AP的相依性複雜度,封裝到單一環境中,這兩者比較相似,但Wasm則是在瀏覽器環境中,創造一個Bytecode二進位執行格式的沙盒環境,來提高執行速度,技術實作的方向有很大的不同。但因瀏覽器本來就是一個與作業系統層隔離的獨立執行環境,也格外講究與實體資源的安全,以及瀏覽器內不同網頁程式之間的隔離性,這就讓Wasm先天帶有類似容器的將可以封裝AP複雜性的特色和隔離實體環境複雜度的特性。

Wasm檔案為何遠比虛擬機器、容器映像檔小這麼多?

因為技術實作的不同,VM等於模擬了一整個實體主機環境,有虛擬CPU、虛擬記憶體、虛擬儲存,因此可以安裝多套或大型的應用系統,映像檔案大小也最大,光是安裝一套作業系統,就可能需要好幾GB。
而容器不需要作業系統,只需要執行程式碼相關的必要元件,可取得記憶體資源、也可以配置本地端儲存給容器專用。 容器常用來執行一隻應用程式,一隻微服務, 執行同樣程式碼的容器映像檔大小比VM映像檔小了不少,冷啟動速度也快上許多。

Wasm同樣不需要作業系統,目前也無法配置本地端儲存,常用來執行一隻應用、一隻程式或是一支元件。因為封裝到Wasm的程式碼,會經過編譯處理成二進位格式檔,而不是採取映像檔的形式來載入,因此,同樣功能程式碼的Wasm檔案,遠比容器映像檔格式小非常多。這也讓Wasm的冷啟動執行速度超短。

技術特性、映像檔和執行檔大小,也影響了這三類技術可以部署的環境。VM大多部署於公雲環境、實體伺服器或是邊緣主機,需要有一定硬體規格的設備上。而容器除了上述三類基礎架構環境之外,也可部署到硬體規格較低階的行動裝置、邊緣裝置上。Wasm檔案的硬體規格需求最低,虛擬機器和容器可部署的環境之外,甚至可以部署到小型邊緣設備,IoT設備,甚至是IoT感測器上。

這三者技術目前也可以混用在同一個執行環境中,Docker公司早在2022年就宣布開始支援Wasm,可以讓Docker容器的Runtime也能同時執行wasm檔案,而微軟則在去年發表了Hypervisor對Wasm的支援技術,可以在Hyperbisor平臺上,同時支援虛擬機器、容器和Wasm,甚至可以混用這三者,不過,還只是技術預覽功能。

Wasm冷啟動速度可以比容器快上百倍

冷啟動速度來說,雖然這個速度會受到執行程式碼規模和複雜度的影響,但大概來比較,以執行同樣功能的一隻應用程式來說,Wasm是最快,甚至可以說超快。虛擬機器的冷啟動速度,常見是數十分鐘,可說是分鐘級的冷啟動速度,而容器則可以縮短到數十秒,甚至數秒內,可說是秒級的冷啟動。

由於Wasm是經過編譯後的Bytecode檔案,幾乎是載入就可以執行,再加上Wasm檔案極小。因此可以做到毫秒等級的冷啟動速度,這是千分之幾秒的程度,就能開始一支Wasm應用。

對於開發語言的支援上,不論是在虛擬機器或是容器中,都需要該語言的runtime來執行,例如用了GO語言和Rust,就需要這兩種與言的runtime才能執行。但是在wasm的做法不一樣,經過事先編譯,可以將不同語言編譯成同樣的Bytecode執行格式,因此,只需要一隻wasm的runtime,就可以執行不同語言編譯過的wasm檔案,等於是用一隻runtime通吃各種語言,甚至WASI提出的新元件模式,可以讓不同程式語言的Wasm元件,彼此有一個標準的輸入輸出溝通方式,彷彿就像是用同一種語言開發的兩隻元件一樣。不過,目前不是所有開發語言都能支援Wasm,不同語言的支援程度也不盡相同,以Go、JavaScirpt、C#、Rust語言的支援度相對完整且穩定。其餘也有四、五十種語言提供部分程度的支援,使用時得留意支援度不足的地方。

若以用GPU來執行AI推論的功能來比較,除了AI推論的程式碼之外,還需要Nvidiak的CUDA runtime,以及一套AI框架,像是PyTorch,光是這三者,最小的容器映像檔大小就接近5GB,LLM基礎模型的檔案大小也動輒數GB,甚至數十GB,整個加起來,至少要有15GB,以前,容器問世時,常有人打趣說,VM太肥,所以需要容器來解決,但是,LLM推論需要的容器映像檔也動輒是數GB或數十GB,就像是當年過於肥大的VM一樣。

同樣功能,若改用Wasm,自製推論程式碼、CUDA runtime加上PyTorch框架和10GB的LLM基礎模型,編譯後可以大幅縮小到數MB,可以說比同樣功能的容器或VM映像檔,足足少了1千倍,這也正是Wasm冷啟動速度可以超級快的原因。

 

後續報導請見:WebAssembly生態圈有哪些重要專案?Wasm生態地圖重點剖析 

 

熱門新聞

Advertisement