WebAssembly不是軟體!它是計算機中的計算機

2023-10-12     51CTO

原標題:WebAssembly不是軟體!它是計算機中的計算機

不要把Wasm當成軟體,它是計算機中的計算機。

WebAssembly的誕生源起於幾大Web瀏覽器供應商(Apple,Google,Microsoft,Mozilla)之間的合作。設計者最初將其設想為一個安全可靠的執行環境,用於以近乎本機的性能在Web上運行不受信任的代碼。

然而時至今日,這門新興技術早已擴展到Web瀏覽器之外,甚至有一部分人認為,Wasm將取代容器技術和無處不在的JavaScript。

這些當然遠遠不足以說明Wasm的驚艷之處,遊戲規則的改變者可沒有那麼簡單。

1、比Java還狠:「一次部署、隨處部署」

如今,WebAssembly的計算潛力已經得到了很大的認可。這不得不歸因於它的設計初衷。

眾所周知,人們使用各種不同種類的語言來編寫軟體,讓這些語言相互交互是很困難的。而WebAssembly恰恰提供了一個框架,讓開發人員可以用他們想要的語言進行編寫,然後,它會生成通用的模擬計算機格式,這種格式允許用各種語言編寫的組件相互通信。

正如邊緣雲平台Fastly的工程師Luke Wagner提到的:「Wasm的設計是程式語言的可移植編譯目標。我認為這裡的關鍵詞是'編譯目標',這意味著我們可以採用我們的各種源語言。」

「除了能夠將它們編譯成所有不同的本機指令集外,我們還可以將它們編譯成WebAssembly。然後,我們可以將這個WASM發送給瀏覽器或某種類型的WASM引擎,該引擎將在內部將其編譯為運行它的實際指令集。這給我們帶來的是可移植性、確定性(如果需要的話)、控制流完整性和子進程沙箱。」

由此看來,WebAssembly要實現的是「一次部署,隨處部署」。更準確的說,理想情況下,你可以編寫一次代碼,幾乎不需要任何配置,就可以將其部署到任何CPU或設備上。儘管有人可能會覺得有失偏頗,但在某些方面,的確可以把它看作是一個高效的編譯器。

2、不止瀏覽器,簡直無處不在

發布於2018年的WebAssembly,最初是作為Web開發領域的技術,引起了關注。而在2019年,WASI(WebAssembly系統接口)的出現使情況發生了變化,它為Wasm提供了一個模塊化的介面,將WebAssembly帶到了瀏覽器之外。

WebAssembly的這種轉變甚至促使Docker聯合創始人Solomon Hykes在2019年發推文說:「如果WASM+WASI在2008年就存在,我們就不需要創建Docker了。這就是它的重要性。伺服器上的WebAssembly是計算的未來。」

短短四五年光景,我們看到WebAssembly在瀏覽器之外的應用也漸入佳境。

根據今年9月發布的《WebAssembly 2023現狀報告》,SlashData與CNCF(雲原生計算基金會)合作對255名WebAssembly用戶進行調查,發現WebAssembly的使用已經遠遠超出了其最初的 Web 應用程式目標。

該報告發現,雖然Wasm仍然主要用於開發Web應用程式(58%),但它的使用正在從原始用例擴展到數據可視化(35%),物聯網(32%),人工智慧(30%),後端服務(不包括無伺服器)(27%)和邊緣計算(25%)等新領域。

「在瀏覽器之外,在現有系統中嵌入Wasm以使訪客代碼更接近系統是一種流行的做法。舉個例子,一個瀏覽器有很多不是用JavaScript編寫的代碼。此外,人們正在使用Wasm來探索分布式計算的替代模型,如無伺服器、分布式行動者、記錄和回放,邊緣計算等等。」Fastly工程師Wagner如是說。

當前,儘管可以從廣泛的軟體項目中看到WebAssembly的身影,但挑戰依然存在,比如WebAssembly模塊目前仍然無法支持所有程式語言;即使在它支持的少數程式語言中,如Rust、C++、Python,要將其部署到各種設備中依然有各自的問題;組件結構仍然不夠標準化……這些挑戰的解決或許只要一兩年,或許還需要相當長的時間,屆時WebAssembly的跨平台部署才能展現其真正的功能。

WebAssembly應用程式使用的語言排行,JavaScript是Wasm應用程式最流行的語言

3、Wasm不是軟體,是一種新型「計算機」

雖然WebAssembly還處於發展早期,但在某些圈內人士來看,它已經表現出將技術車輪推向未來的潛力。

NGINX產品管理高級總監Liam Crilly在最近的一次談話中,將WebAssembly比作一台概念意義上的計算機。他是這樣解釋的:雖然WebAssembly不能直接在物理設備上運行,但它有可能通過使用WebAssembly模塊在用於數據交換和部署的設備網絡上運行。

「WebAssembly允許我們重新思考我們需要的抽象。它使我們能夠邁出下一步,而不是持續地錨定在我們用來描述存儲和計算的初始元素上。這就是為什麼我在Kubernetes的背景中提到它,因為它仍然帶有一些包袱。」

實際上,WebAssembly可以被認為是一種新型的計算機。它擁有一個指令集,類似於CPU,「彙編(Assembly)」部分就是從它派生出來的。

當你檢查示例代碼時,它與此非常相似,前提條件是它是人類可讀的。這台簡單的「計算機」能做傳統計算機可以執行的任何事情。重要的是,這個新的指令集成為所有程式語言的編譯目標。從本質上講,任何高級程式語言不僅可以編譯為特定硬體的CPU指令集,還可以編譯為WebAssembly指令集。

此外,WebAssembly可以被視為一個強大的編譯器目標,正如Crilly所解釋的:「WebAssembly的迷人之處在於它提供了編譯器的優勢,使你能夠使用高級語言並生成優化良好的指令集代碼。」

然而,由於WebAssembly的功能是一個抽象的計算機,它需要一個虛擬機或運行時來接受這個指令集並在硬體上執行它。雖然這最初看起來像是一個額外的抽象層,但實際上它非常巧妙。

Crilly說,使用WebAssembly,就可以為任何硬體構建一個運行時,開發人員和運營人員就不再需要關注具體的硬體細節。

「如果我有一個編譯到這個指令集的 WebAssembly 模塊,我就會獲得編譯器優化的好處,其中包括運行時的即時 (JIT) 優化,因為我將這個指令集的位元組碼轉換為 CPU 指令。這個額外的優化層類似於 JIT 編譯器和瀏覽器運行時,可提供接近本機的計算性能。因此,這個抽象層的缺點很小。」

4、Wasm:計算機中的計算機

「將WebAssembly視為計算機」的概念並非獵奇。

企業管理協會(EMA)分析師Torsten Volk對此更進了一步,將Wasm描述為「計算機中的計算機」。

「它不是提供對CPU,RAM,存儲和網絡硬體的直接訪問,而是為應用程式提供對這些資源的簡化通用版本的訪問權限。通過將來自為Wasm編譯的應用程式位元組碼的指令轉換為直接與CPU、RAM和磁碟指令集通信的位元組碼來實現這一點。一旦此轉換層普遍適用於大多數類型的應用程式,你實際上可以將 Wasm運行時描述為一種新型計算機。"

在作業系統與硬體的關係上,人們的探索從未停止。而WebAssembly的出現無疑為此提供了另一種答案。

Fermyon Technologies的聯合創始人兼執行長Matt Butcher談到:「虛擬機打破了將作業系統視為與硬體具有一對一關係的思維。我們可以在單個硬體上運行許多作業系統,而容器通過允許我們安全地(並以多租戶方式)運行許多共享一個內核的離散文件系統來進一步推動這一故事。「

「Wasm可以被視為第三次浪潮:應用程式不直接依賴於主機作業系統。它只是聲明它需要什麼,主機運行時可以專門滿足這些需求。最後,開發人員不需要了解目標環境的作業系統或架構。」

5、寫在最後

整體上看,WebAssembly 不僅通過沙盒執行提高了安全性,還通過使開發人員能夠使用幾乎所有流行語言創建高性能 Web 應用程式。隨著WebAssembly的不斷發展和生態系統的擴展,其「遊戲規則改變者」的角色在開源開發的格局中可能會愈發突出。

不過在WebAssembly能發揮其全部潛力之前,還有很長的路要走。在許多方面,Wasm的格局類似於幾年前Kubernetes蓬勃發展的早期開發和採用。

值得一提的是,根據《WebAssembly 2023現狀報告》,大多數軟體開發人員對未來在Web和非Web環境中採用Wasm持樂觀態度。報告提到,將現有應用程式遷移到 Wasm 時,30%的受訪者體驗到超過 50%的性能優勢。此外,「更快的加載時間,探索新用例和技術的能力,在項目之間共享代碼的能力」均是WebAssembly吸引開發人員的主因。

另外,報告中約有22%的參與者對Wasm在Web或非Web環境中的採用表示悲觀。關於Wasm面臨的挑戰,受訪者則提到了調試和故障排除困難,運行時之間的性能不同,運行時之間缺乏一致的開發人員體驗,缺乏學習材料以及與某些瀏覽器的兼容性問題。

參考連結:

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

文章來源: https://twgreatdaily.com/zh-mo/e7f6ae1bf0bf38724b42b45d987cfb6b.html