WebVM:無需後端伺服器直接在瀏覽器中實現的無伺服器環境

banq發表於2022-02-05

我們建立了一個無伺服器的虛擬 Linux 環境,在瀏覽器中執行未經修改的 Debian 二進位制檔案。這由 WebAssembly 虛擬化平臺 CheerpX 提供支援。
WebAssembly 為瀏覽器世界帶來了真正的創新,以及視角和責任的轉變。
我們相信 JIT編譯的 WebAssembly 是實現在瀏覽器中執行任何應用程式願景的真正關鍵。
們的使命是讓現有應用程式能夠執行:
  • 無需修改;
  • 無需重新編譯;
  • 完全客戶端。

幾個月前,我們釋出了REPL 演示,證明我們的 CheerpX x86-to-WebAssembly 虛擬化技術可用於在瀏覽器中執行多個不同的 REPL,而無需任何特定於語言的干預。
今天,我們自豪地宣佈朝著實現我們的願景邁出了重要一步:WebVM,一個在瀏覽器中執行的基於 Debian 的完整虛擬機器,由 CheerpX 提供支援。
 

什麼是 CheerpX?

CheerpX是一個 x86 虛擬機器,用 C++ 編寫,並透過Cheerp編譯器編譯為 JavaScript 和 WebAssembly 的組合。
CheerpX 已經開發了三年多,它已經作為CheerpX for Flash的一部分在生產中使用,這是一種執行舊版 Adob​​e Flash 內容的企業解決方案。
在高層次上,CheerpX 由

  • 一種高效的 x86 直譯器,用於執行很少執行的程式碼並發現熱程式碼的結構,以指導 JIT 編譯
  • 一個複雜的 x86-to-Wasm JIT 編譯器,可以從熱 x86 程式碼動態生成新的 WebAssembly 模組。儘管 JIT 編譯器有一些 x86 專用邏輯,但它大多與目標無關。
  • Linux 系統呼叫模擬層用於彌合未修改的 x86 二進位制檔案和 Web 環境之間的差距。
  • 一個基於塊的檔案系統後端,基於 Ext2。磁碟映像是透過 HTTP 和 CloudFlare CDN 分發的靜態資源。選擇 Ext2 是因為它經過驗證的設計和可擴充套件性,我們可以隨著時間的推移輕鬆擴充套件其功能,以相容更現代的 Ext3 和 Ext4 格式,而無需完全重寫。
  • 基於 IndexedDB的修改塊的隱私保護儲存。這種僅限客戶端的技術允許對檔案系統所做的任何修改都是持久的,但僅限於瀏覽器。我們不會看到或儲存您的任何資料。

CheerpX 是一個非常複雜的系統,具有許多活動部件。它可以正確處理棘手的情況,例如自修改程式碼、多執行緒、多處理和程式間通訊。儘管有這種複雜性,CheerpX 已經達到了高度的穩定性。
現在感覺是釋出我們迄今為止最複雜的演示的最佳時機:WebVM。
 

什麼是 WebVM?
如果您看過我們之前的 REPL 演示,您可能會注意到 WebVM 在概念上並沒有太大的不同。使用相同的核心元件:

  • CheerpX作為執行引擎。JavaScript API,尤其是 cx.run(…),用於啟動(並在需要時重新啟動)bash程式。然後 bash 可以在使用者鍵入命令時啟動其他程式。
  • Xterm.js作為主要的 UI 元件。Xterm.js 負責解釋vim 等應用程式使用的終端轉義,並將使用者輸入傳送回 CheerpX。輸入透過應用程式的標準輸入檔案描述符提供給應用程式。
  • 一個 Debian buster 磁碟映像,採用 ext2 格式並安裝了一堆軟體包。這分佈在 CDN 上,以最大限度地提高可擴充套件性。

WebVM 實際上是無伺服器的,並且沒有活動的伺服器端元件。所有使用者都從 CDN 訪問同一個磁碟映像,他們的個人更改被本地儲存到瀏覽器。這意味著我們可以以最少的成本和資源支援甚至數百萬併發使用者。
 

相關文章