整理丨諾亞
不要把Wasm當成軟件,它是計算機中的計算機。
WebAssembly的誕生源起于幾大Web瀏覽器供應商(Apple,Google,Microsoft,Mozilla)之間的合作。設計者最初將其設想為一個安全可靠的執(zhí)行環(huán)境,用于以近乎本機的性能在Web上運行不受信任的代碼。
然而時至今日,這門新興技術早已擴展到Web瀏覽器之外,甚至有一部分人認為,Wasm將取代容器技術和無處不在的JavaScript。
這些當然遠遠不足以說明Wasm的驚艷之處,游戲規(guī)則的改變者可沒有那么簡單。
1、比Java還狠:“一次部署、隨處部署”
如今,WebAssembly的計算潛力已經(jīng)得到了很大的認可。這不得不歸因于它的設計初衷。
眾所周知,人們使用各種不同種類的語言來編寫軟件,讓這些語言相互交互是很困難的。而WebAssembly恰恰提供了一個框架,讓開發(fā)人員可以用他們想要的語言進行編寫,然后,它會生成通用的模擬計算機格式,這種格式允許用各種語言編寫的組件相互通信。
正如邊緣云平臺Fastly的工程師Luke Wagner提到的:“Wasm的設計是編程語言的可移植編譯目標。我認為這里的關鍵詞是'編譯目標',這意味著我們可以采用我們的各種源語言。”
“除了能夠?qū)⑺鼈兙幾g成所有不同的本機指令集外,我們還可以將它們編譯成WebAssembly。然后,我們可以將這個WASM發(fā)送給瀏覽器或某種類型的WASM引擎,該引擎將在內(nèi)部將其編譯為運行它的實際指令集。這給我們帶來的是可移植性、確定性(如果需要的話)、控制流完整性和子進程沙箱。”
由此看來,WebAssembly要實現(xiàn)的是“一次部署,隨處部署”。更準確的說,理想情況下,你可以編寫一次代碼,幾乎不需要任何配置,就可以將其部署到任何CPU或設備上。盡管有人可能會覺得有失偏頗,但在某些方面,的確可以把它看作是一個高效的編譯器。
2、不止瀏覽器,簡直無處不在
發(fā)布于2018年的WebAssembly,最初是作為Web開發(fā)領域的技術,引起了關注。而在2019年,WASI(WebAssembly系統(tǒng)接口)的出現(xiàn)使情況發(fā)生了變化,它為Wasm提供了一個模塊化的界面,將WebAssembly帶到了瀏覽器之外。
WebAssembly的這種轉(zhuǎn)變甚至促使Docker聯(lián)合創(chuàng)始人Solomon Hykes在2019年發(fā)推文說:“如果WASM+WASI在2008年就存在,我們就不需要創(chuàng)建Docker了。這就是它的重要性。服務器上的WebAssembly是計算的未來?!?/p>
短短四五年光景,我們看到WebAssembly在瀏覽器之外的應用也漸入佳境。
根據(jù)今年9月發(fā)布的《WebAssembly 2023現(xiàn)狀報告》,SlashData與CNCF(云原生計算基金會)合作對255名WebAssembly用戶進行調(diào)查,發(fā)現(xiàn)WebAssembly的使用已經(jīng)遠遠超出了其最初的 Web 應用程序目標。
該報告發(fā)現(xiàn),雖然Wasm仍然主要用于開發(fā)Web應用程序(58%),但它的使用正在從原始用例擴展到數(shù)據(jù)可視化(35%),物聯(lián)網(wǎng)(32%),人工智能(30%),后端服務(不包括無服務器)(27%)和邊緣計算(25%)等新領域。
“在瀏覽器之外,在現(xiàn)有系統(tǒng)中嵌入Wasm以使訪客代碼更接近系統(tǒng)是一種流行的做法。舉個例子,一個瀏覽器有很多不是用JavaScript編寫的代碼。此外,人們正在使用Wasm來探索分布式計算的替代模型,如無服務器、分布式行動者、記錄和回放,邊緣計算等等。”Fastly工程師Wagner如是說。
當前,盡管可以從廣泛的軟件項目中看到WebAssembly的身影,但挑戰(zhàn)依然存在,比如WebAssembly模塊目前仍然無法支持所有編程語言;即使在它支持的少數(shù)編程語言中,如Rust、C++、Python,要將其部署到各種設備中依然有各自的問題;組件結(jié)構(gòu)仍然不夠標準化……這些挑戰(zhàn)的解決或許只要一兩年,或許還需要相當長的時間,屆時WebAssembly的跨平臺部署才能展現(xiàn)其真正的功能。
WebAssembly應用程序使用的語言排行,JavaScript是Wasm應用程序最流行的語言
3、Wasm不是軟件,是一種新型“計算機”
雖然WebAssembly還處于發(fā)展早期,但在某些圈內(nèi)人士來看,它已經(jīng)表現(xiàn)出將技術車輪推向未來的潛力。
NGINX產(chǎn)品管理高級總監(jiān)Liam Crilly在最近的一次談話中,將WebAssembly比作一臺概念意義上的計算機。他是這樣解釋的:雖然WebAssembly不能直接在物理設備上運行,但它有可能通過使用WebAssembly模塊在用于數(shù)據(jù)交換和部署的設備網(wǎng)絡上運行。
“WebAssembly允許我們重新思考我們需要的抽象。它使我們能夠邁出下一步,而不是持續(xù)地錨定在我們用來描述存儲和計算的初始元素上。這就是為什么我在Kubernetes的背景中提到它,因為它仍然帶有一些包袱?!?/p>
實際上,WebAssembly可以被認為是一種新型的計算機。它擁有一個指令集,類似于CPU,“匯編(Assembly)”部分就是從它派生出來的。
當你檢查示例代碼時,它與此非常相似,前提條件是它是人類可讀的。這臺簡單的“計算機”能做傳統(tǒng)計算機可以執(zhí)行的任何事情。重要的是,這個新的指令集成為所有編程語言的編譯目標。從本質(zhì)上講,任何高級編程語言不僅可以編譯為特定硬件的CPU指令集,還可以編譯為WebAssembly指令集。
此外,WebAssembly可以被視為一個強大的編譯器目標,正如Crilly所解釋的:“WebAssembly的迷人之處在于它提供了編譯器的優(yōu)勢,使你能夠使用高級語言并生成優(yōu)化良好的指令集代碼?!?/p>
然而,由于WebAssembly的功能是一個抽象的計算機,它需要一個虛擬機或運行時來接受這個指令集并在硬件上執(zhí)行它。雖然這最初看起來像是一個額外的抽象層,但實際上它非常巧妙。
Crilly說,使用WebAssembly,就可以為任何硬件構(gòu)建一個運行時,開發(fā)人員和運營人員就不再需要關注具體的硬件細節(jié)。
“如果我有一個編譯到這個指令集的 WebAssembly 模塊,我就會獲得編譯器優(yōu)化的好處,其中包括運行時的即時 (JIT) 優(yōu)化,因為我將這個指令集的字節(jié)碼轉(zhuǎn)換為 CPU 指令。這個額外的優(yōu)化層類似于 JIT 編譯器和瀏覽器運行時,可提供接近本機的計算性能。因此,這個抽象層的缺點很小?!?/p>
4、Wasm:計算機中的計算機
“將WebAssembly視為計算機”的概念并非獵奇。
企業(yè)管理協(xié)會(EMA)分析師Torsten Volk對此更進了一步,將Wasm描述為“計算機中的計算機”。
“它不是提供對CPU,RAM,存儲和網(wǎng)絡硬件的直接訪問,而是為應用程序提供對這些資源的簡化通用版本的訪問權(quán)限。通過將來自為Wasm編譯的應用程序字節(jié)碼的指令轉(zhuǎn)換為直接與CPU、RAM和磁盤指令集通信的字節(jié)碼來實現(xiàn)這一點。一旦此轉(zhuǎn)換層普遍適用于大多數(shù)類型的應用程序,你實際上可以將 Wasm運行時描述為一種新型計算機。"
在操作系統(tǒng)與硬件的關系上,人們的探索從未停止。而WebAssembly的出現(xiàn)無疑為此提供了另一種答案。
Fermyon Technologies的聯(lián)合創(chuàng)始人兼首席執(zhí)行官Matt Butcher談到:“虛擬機打破了將操作系統(tǒng)視為與硬件具有一對一關系的思維。我們可以在單個硬件上運行許多操作系統(tǒng),而容器通過允許我們安全地(并以多租戶方式)運行許多共享一個內(nèi)核的離散文件系統(tǒng)來進一步推動這一故事?!?/p>
“Wasm可以被視為第三次浪潮:應用程序不直接依賴于主機操作系統(tǒng)。它只是聲明它需要什么,主機運行時可以專門滿足這些需求。最后,開發(fā)人員不需要了解目標環(huán)境的操作系統(tǒng)或架構(gòu)?!?/p>
5、寫在最后
整體上看,WebAssembly 不僅通過沙盒執(zhí)行提高了安全性,還通過使開發(fā)人員能夠使用幾乎所有流行語言創(chuàng)建高性能 Web 應用程序。隨著WebAssembly的不斷發(fā)展和生態(tài)系統(tǒng)的擴展,其“游戲規(guī)則改變者”的角色在開源開發(fā)的格局中可能會愈發(fā)突出。
不過在WebAssembly能發(fā)揮其全部潛力之前,還有很長的路要走。在許多方面,Wasm的格局類似于幾年前Kubernetes蓬勃發(fā)展的早期開發(fā)和采用。
值得一提的是,根據(jù)《WebAssembly 2023現(xiàn)狀報告》,大多數(shù)軟件開發(fā)人員對未來在Web和非Web環(huán)境中采用Wasm持樂觀態(tài)度。報告提到,將現(xiàn)有應用程序遷移到 Wasm 時,30%的受訪者體驗到超過 50%的性能優(yōu)勢。此外,“更快的加載時間,探索新用例和技術的能力,在項目之間共享代碼的能力”均是WebAssembly吸引開發(fā)人員的主因。
另外,報告中約有22%的參與者對Wasm在Web或非Web環(huán)境中的采用表示悲觀。關于Wasm面臨的挑戰(zhàn),受訪者則提到了調(diào)試和故障排除困難,運行時之間的性能不同,運行時之間缺乏一致的開發(fā)人員體驗,缺乏學習材料以及與某些瀏覽器的兼容性問題。
參考鏈接:
https://thenewstack.io/webassembly-reaches-a-cloud-native-milestone/
https://developers.slashdot.org/story/23/09/10/0653235/webassembly-2023-survey-finds-enthusiasm---and-some-challenges
https://www.infoworld.com/article/3706249/developers-have-doubts-about-webassembly-report-finds.html
https://andrewzuo.com/linux-foundation-report-finds-serious-issues-with-webassembly-b9c47b3b0b4c