作者 | Peter Vetere
譯者 | 崔瑩峰
無論是在服務器上還是在邊緣,Wasm都允許你創建自定義邏輯,該邏輯比以前更接近數據。你可以安全、高效且更靈活地完成此操作。
Wasm是最重要的新興技術之一,無論你有沒有聽說過它,毋庸置疑的是它很重要。
作為WebAssembly語言的簡寫,Wasm是為Web開發的。然而,Wasm技術已經擴展到網絡瀏覽器之外。現在部分組織開始在服務器端運行Wasm。例如,我的公司SingleStore正在我們的數據庫中使用它。
一些人認為Wasm將取代容器技術和無處不在的JavaScript。
不管你是否相信,Wasm正在對云計算產生影響。為什么以及如何影響?且聽我逐一道來。
跨平臺:讓云組件更安全、更簡單地結合在一起
人們使用各種不同種類的語言來編寫軟件。讓這些語言進行交互是很困難的。Wasm提供了一個框架,可以用你想要的任何語言編寫。然后利用它產生了一種通用的模擬機器格式。
這種格式允許用各種語言(如Rust、C/C++ 和Go)編寫的組件相互通信。Wasm還為數據庫等服務器端系統提供了嵌入來自不同語言組件的能力,而無需你知道或關心該模塊是如何生成的。
將Wasm視為一種通用的插件格式。假設你想使用第三方開發的組件來增強系統的功能。Wasm允許你將新組件引入系統,而無需承擔集成附加組件通常帶來的風險。例如,外部組件可能會使系統崩潰或產生一些意外之外的故障。Wasm通過為不同的系統和組件創建一個極其安全的框架來彼此交互,從而緩解了這些問題。
云是Wasm擴張的重要驅動力。Wasm非常適合云,因為它是虛擬化的,可以在任何支持Wasm運行時的環境中工作。此外,云系統通常由許多服務拼湊在一起并以不同的方式連接而成。這可能會變得復雜。但是,你越能簡化云環境,云系統的各個方面就越容易正確協同工作。
安全:通過其運行代碼和表示函數的方法降低風險
在大多數語言運行時中,函數都有地址。這些地址是內存中的可執行點。如果你只是將內存視為一堆字節,則根本無從分辨哪里是函數地址,哪里僅是普通的字節。這就為一些人開了便門,他們可以找到函數入口注入代碼,或者以特權方式調用函數,以便函數執行它不應該做的事情。Wasm的設計消除了這些問題。
Wasm以不可利用的方式表示函數。它還在沙盒中運行代碼,從而緩解了與運行不受信任的代碼相關的常見安全問題。由于Wasm將程序內存封裝在安全區域中,因此沒有任何東西可以超出它并訪問可能影響運行程序的主機或危及安全性的地方。
借助Wasm基于功能的安全模型,主機可以完全控制Wasm程序可以運行的特權操作類型。例如,如果需要文件訪問,主機必須顯式授予對目錄的訪問權限。
速度:消除不需要的東西,提高速度和效率
顯然,Wasm并不是第一種人們用來以更安全,更簡單的方式將事物整合在一起的技術。然而,Wasm比其他一些技術要快得多。
編譯器可以通過利用LLVM后端生成Wasm程序,編譯為LLVM中間表示。LLVM(Low Level Virtual Machine 的簡稱)可以供許多語言作為編譯的后臺。由于這種方法,且由于社區圍繞LLVM項目多年的努力,Wasm程序可以編譯為高度優化的機器代碼。
在SingleStore,我們創建了“Wasm太空計劃”——一個數據庫內的虛擬實時宇宙——來展示Wasm的速度和輕量級。在這個模擬程序中,宇宙飛船使用不同的策略來補充能量,并在浩瀚的實時“宇宙”中與其他宇宙飛船作戰。這涉及大量數據,系統中有超過一百萬艘船,每秒有近三百萬次數據庫更新。
傳統上,集成該數據并將其組裝在中間層需要將大量數據提取到中間層。這可能會引入大量的滯后,并且需要一些復雜的緩存來實現實時響應。“Wasm太空計劃”沒有采用這種方法,而是將每艘宇宙飛船的策略都用Wasm編寫,并作為UDF加載到數據庫中。每一秒,每個宇宙飛船的戰略函數都被調用來決定它的下一步行動。
前端(在瀏覽器中運行的JavaScript程序)上沒有任何邏輯可以理解這些策略,它也沒有關于宇宙狀態的任何內容。它的工作只是直接向數據庫發出SQL查詢,并以圖形方式顯示返回的信息。數據庫維護所有狀態信息,并且由于Wasm允許計算緊挨著數據,因此速度要快得多。甚至不需要中層。
但Wasm并不全是樂趣和游戲。你可以使用它來解決無數其他應用程序和用例。例如,你可以使用Wasm進行情緒分析。情感分析所需的復雜邏輯不是可以用數據庫SQL語言輕松表達的。因此,為了做到這一點,你通常需要用更復雜的語言實現這個算法,下載所有數據并將數據傳給這個算法。然后,你需要將情緒分析評級推回數據庫。這意味著你使用的數據庫中的每一行都需要往返。如果你有數百萬行數據,則會產生很多流量。但是,通過SingleStore集成Wasm的方式,這個算法已經在數據庫中,因此你不會產生該開銷。
能力:創建標準使其更加強大
Wasm已經非常有能力了。而且隨著新技術和新標準的到來,Wasm將更加強大。
例如,W3C WebAssembly Community Group在字節碼聯盟等組織成員的幫助下,目前正在致力于標準化WebAssembly系統接口 (WASI)。WASI將提供一組標準的API和服務,當Wasm模塊在服務器上運行時可以使用這些API和服務。許多標準提案仍在進行中,例如垃圾回收、網絡I/O和線程,因此你不必總是將你在其他編程語言中做的事情都映射到Wasm。因為最終,WASI將提供一個完整的標準來實現這一目標。在許多方面,WASI的目標與POSIX相似。
Wasm現在也沒有解決與其他Wasm模塊鏈接或通信的能力。但是Wasm社區在計算行業成員的支持下,正在努力創建一種稱為組件模型的東西。它旨在圍繞Wasm模塊創建一個動態鏈接基礎設施,定義組件如何啟動和相互通信(類似于傳統操作系統的進程模型)。
此外,一種新興的標準IDL語法,稱為WIT(用于WebAssembly接口類型),將允許人們以與語言無關的方式描述他們的Wasm接口。因此,綁定生成器將能夠獲取IDL中的內容并編譯代碼,這些代碼將允許Wasm主機和客戶端以通用方式通信數據。
未來:提供更快、更安全、更高效的方式將事物整合在一起
Wasm雖然更輕量級,但可能不會很快取代容器。然而你可以期待Wasm成為未來許多軟件的一部分。
無論是在服務器上還是在邊緣,Wasm都允許你創建自定義邏輯,這些邏輯比以前更接近數據,而且你可以安全、高效且更靈活地完成此操作。
現在有了SingleStore,你可以將現有程序編譯為Wasm,將它們推送到數據庫中,然后在那里運行它們。這意味著你可能不必重寫該代碼并將其放在遠離數據的地方。借助Wasm技術,你可以兩全其美。
原文鏈接:
??https://www.infoworld.com/article/3678208/why-wasm-is-the-future-of-cloud-computing.html??
譯者簡介
崔瑩峰,51CTO社區編輯,一名70后程序員,擁有10多年工作經驗,長期從事 Java 開發,架構設計,容器化等相關工作。