WebVM:無需後端伺服器直接在瀏覽器中實現的無伺服器環境
我們建立了一個無伺服器的虛擬 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的一部分在生產中使用,這是一種執行舊版 Adobe 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 訪問同一個磁碟映像,他們的個人更改被本地儲存到瀏覽器。這意味著我們可以以最少的成本和資源支援甚至數百萬併發使用者。
相關文章
- 在 vscode.dev 中直接執行 Python !純瀏覽器環境,無後端!VSCodedevPython瀏覽器後端
- Rust在瀏覽器Wasm和後端伺服器中執行效能比較Rust瀏覽器ASM後端伺服器
- 域環境的Windows伺服器無法禁用密碼策略Windows伺服器密碼
- java中通過servle4t實現瀏覽器伺服器的Java瀏覽器伺服器
- Gradio-Lite: 完全在瀏覽器裡執行的無伺服器 Gradio瀏覽器伺服器
- JavaScript在瀏覽器環境中的非同步JavaScript瀏覽器非同步
- 無伺服器最佳實踐伺服器
- 超融合環境,虛擬化環境使用首馳興華USB伺服器實現銀企直聯伺服器
- 伺服器無響應 遠端登入伺服器工具伺服器
- 無介面Ubuntu伺服器搭建selenium+chromedriver+VNC執行環境Ubuntu伺服器ChromeVNC
- 不同環境中伺服器的分類伺服器
- 無法連線遠端伺服器 批次管理雲伺服器伺服器
- 搭建手機web伺服器-----內網穿透(無需Root)Web伺服器內網穿透
- 解決!上傳 mp4 到伺服器之後,個別視訊無法在瀏覽器播放伺服器瀏覽器
- 理解event loop(瀏覽器環境與nodejs環境)OOP瀏覽器NodeJS
- 遠端桌面無法連線伺服器?伺服器
- 無需依賴Docker環境製作映象Docker
- 如何用無伺服器技術實現最佳的DevOps實踐伺服器dev
- 伺服器斷電後無法開機伺服器
- 無法遠端連線vps 伺服器的原因伺服器
- 超實用!伺服器如何快速實現一鍵環境部署!伺服器
- Puppeteer無頭瀏覽器:開啟自動化之門,掌握瀏覽器世界的無限可能瀏覽器
- 在nodejs環境裡使用瀏覽器環境下的document物件NodeJS瀏覽器物件
- emoji在瀏覽器中是如何傳遞給伺服器的瀏覽器伺服器
- 怎麼向瀏覽器輸出遠端伺服器上的檔案瀏覽器伺服器
- 設計實現SAM--無伺服器應用模型伺服器模型
- 阿里雲伺服器無法遠端連線阿里伺服器
- Chrome瀏覽器中checkbox的樣式定義無效Chrome瀏覽器
- 使用Cloud Run實現強大的無伺服器 - MásMóvilEngineeringCloud伺服器
- 參加無伺服器會議後得到的資訊伺服器
- Java上傳檔案到遠端伺服器和瀏覽器預覽圖片Java伺服器瀏覽器
- vmware環境下在linux中建立ftp伺服器LinuxFTP伺服器
- 無需設定路由器,無需公網ip 實現永久免費內網穿透路由器內網穿透
- 360瀏覽器在電腦中開啟網頁無痕瀏覽的設定方法瀏覽器網頁
- centOS伺服器環境安裝CentOS伺服器
- Ubuntu環境搭建svn伺服器Ubuntu伺服器
- 無公網ip且伺服器無法上網如何實現外網訪問伺服器
- 瀏覽器和伺服器之前的加密解密過程瀏覽器伺服器加密解密