边缘的容器化 — WasmEdge 与 seL4
本研發(fā)基于開源項目 WasmEdge 和 seL4,并得到了Second State 和 FutureWei 的支持。
應(yīng)用程序容器,例如 Docker,是云原生應(yīng)用程序增長背后的關(guān)鍵驅(qū)動力。然而,雖然云原生開發(fā)范式已經(jīng)非常流行,但由于應(yīng)用程序容器需要大量計算資源,因此很難將云原生基礎(chǔ)設(shè)施擴(kuò)展到大型數(shù)據(jù)中心之外。例如,Docker 不支持實時操作系統(tǒng)(RTOS),僅適用于 POSIX 系統(tǒng)。
此外,在智能工廠和智能汽車等邊緣網(wǎng)絡(luò)和設(shè)備上,行業(yè)生態(tài)和供應(yīng)商網(wǎng)絡(luò)的現(xiàn)狀造就了應(yīng)用程序必須由多個獨(dú)立供應(yīng)商組裝。例如,在典型的電動汽車中,有 100 多家供應(yīng)商為汽車的不同部分編寫軟件組件。對于汽車 OEM 來說,為供應(yīng)商和供應(yīng)商集成其軟件組件提供安全、高性能和實時的運(yùn)行環(huán)境至關(guān)重要。目前,我們已經(jīng)看到了幾個在邊緣 RTOS 上支持應(yīng)用程序容器的嘗試。
VxWorks 是一個領(lǐng)先的實時操作系統(tǒng),用在使命關(guān)鍵的系統(tǒng)中,如飛機(jī)和航天飛船中。VxWorks 容器 是2021年提出的要在 VxWorks RTOS 上支持符合 OCI 的輕量級容器。
可是使用 Docker 對于邊緣上的 RTOS 并不理想。從根本上說,Docker 不是實時的,Docker 假設(shè)許多底層操作系統(tǒng)服務(wù)是可用的。 更好的 RTOS Runtime 方案是高級字節(jié)碼 VM。 這樣的虛擬機(jī)比 Docker 更輕、更快。 它們提供基于能力的安全沙箱,對底層操作系統(tǒng)服務(wù)做很少的假設(shè),同時在前端支持多種編程語言。 WebAssembly 憑借其廣泛的行業(yè)支持和輕量級設(shè)計,看起來恰恰是復(fù)雜邊緣應(yīng)用程序完美的虛擬機(jī) Runtime。
WebAssembly 另一個有意思的方面是 WebAssembly 程序通常可以像 seL4 那樣進(jìn)行形式化驗證,因而對于像車載操作系統(tǒng)這種使命關(guān)鍵的系統(tǒng)來說非常合適。
WasmEdge 和 seL4
seL4 操作系統(tǒng)是一個形式化驗證的、高度安全且實時的微內(nèi)核操作系統(tǒng)。它現(xiàn)在越來越多地用于安全性和實時性能至關(guān)重要的場景,如自動駕駛汽車和無人機(jī)。 seL4 OS 是一個微內(nèi)核,不符合 POSIX,這使得運(yùn)行類似 Docker 的容器特別具有挑戰(zhàn)性。 另一方面,WebAssembly 可以從大部分操作系統(tǒng)中抽象出來,并為開發(fā)者提供一組統(tǒng)一的編程語言和 SDK 以供使用。
WasmEdge Runtime 是一個高性能且開源的 WebAssembly runtime,由 CNCF 托管。它作為微服務(wù)、 serverless 函數(shù)和 plugin 用在云原生基礎(chǔ)設(shè)施中。除了標(biāo)準(zhǔn)的 WebAssembly 規(guī)范, WasmEdge 支持與云原生應(yīng)用場景相關(guān)的擴(kuò)展 API,例如 network sockets,基于 Tensorflow 的推理,數(shù)據(jù)庫存儲等。 WasmEdge 支持 Rust 和 JavaScript 作為前端語言,可以被嵌入 Rust、Go、Python 和 Node.js host 應(yīng)用作為 plugin 或者嵌入的函數(shù)。
與邊緣容器應(yīng)用場景最相關(guān)的是, WasmEdge 是一個符合 OCI 規(guī)范的 runtime,可以被 Docker 工具和 Kubernetes 管理和編排。本工作中我們?yōu)?seL4 和 WasmEdge 構(gòu)建了一個 WebAssembly 管理代理。它允許 WebAssembly 字節(jié)碼應(yīng)用程序在 seL4 RTOS 上簡單地被部署和執(zhí)行。
官方上來講, seL4 只支持 C/C++ 寫的程序。通過 WasmEdge Runtime, 開發(fā)者現(xiàn)在可以使用任何 WebAssembly 語言開發(fā) seL4 RTOS 應(yīng)用程序,包括 Rust、Swift、AssemblyScript 和 JavaScript。這對于 seL4 的開發(fā)者體驗來說是一個重大的提升。
源代碼鏈接:https://github.com/second-state/wasmedge-seL4
整體設(shè)計
seL4 微內(nèi)核可以作為 hypervisor 運(yùn)行。它可以在同一硬件上啟動 Linux 操作系統(tǒng)(稱為 guest OS)并列運(yùn)行。Linux guest OS有用于文件系統(tǒng)、networking、用戶帳戶、shell 和 CLI 的全套功能和工具,但不是實時的。 seL4 端是實時的,但是是 headless。 我們的方法是在 guest Linux 中運(yùn)行 WasmEdge 代理( WasmEdge agent)。 將 WasmEdge 字節(jié)碼文件上傳并存儲在 guest Linux 中,然后使用安裝在 seL4 中的 WasmEdge runner 使用代理熱部署和執(zhí)行字節(jié)碼。 架構(gòu)如下。
這種代理和運(yùn)行器架構(gòu)能夠?qū)?guest Linux 的易用性與 seL4 的穩(wěn)健性、安全性和實時性能相結(jié)合。
這種設(shè)計提出了一個有趣的可能性。 也許我們可以在 guest OS 中運(yùn)行一個齊全完備的 Kubernetes pod 來管理和編排 seL4 上的 WasmEdge 應(yīng)用程序。 這是 WasmEdge 積極研究的領(lǐng)域。
樣本 WebAssembly 應(yīng)用
WasmEdge 可以在 seL4 上運(yùn)行任何 WebAssembly 字節(jié)碼程序。本 demo 中的樣本 WebAssembly 應(yīng)用是從 C 和 Rust 源代碼編譯而來的。
- nbody-c.wasm 是一個 C 語言寫的算數(shù)上模仿 N-body 問題的程序。然后編譯成 WebAssembly 字節(jié)碼。
- hello.wasm 是一個 Rust 程序,將字符串回顯到控制臺。
為 WasmEdge runner 補(bǔ)丁 seL4
seL4 的標(biāo)準(zhǔn)庫不直接支持 WasmEdge runner。我們需要給這些庫打補(bǔ)丁以添加、打開或更新一些重要功能。 我們使用這些補(bǔ)丁構(gòu)建了 seL4 的定制版本。
- 打補(bǔ)丁的 LLVM 編譯器
- 打補(bǔ)丁的 seL4 系統(tǒng)庫
- 打補(bǔ)丁的 guest Linux 庫
模擬器 demo
build 腳本自動化用補(bǔ)丁庫、WasmEdge runner、guest Linux OS (Ubuntu 20.04) 和 WasmEdge 代理構(gòu)建 seL4 發(fā)行版(seL4 distribution)的過程。
build 腳本要求安裝有一個帶開發(fā)者工具的 Ubuntu 20.04 系統(tǒng) 。 點此查看系統(tǒng)要求的的 apt 軟件包的完整列表。
一旦構(gòu)建了定制的 seL4 發(fā)行版,我們就可以在 QEMU 模擬器中運(yùn)行它。 我們可以登錄 guest Linux OS 的命令 shell,上傳并保存 WebAssembly 字節(jié)碼文件,然后運(yùn)行 wasmedge_emit 在 seL4 中部署和運(yùn)行這些 WebAssembly 文件。
你可以根據(jù) demo 指引完成全過程。也可以查看視頻了解具體效果。
GitHub 操作日志顯示成功構(gòu)建任務(wù)的控制臺輸出,artifact 包含構(gòu)建結(jié)果。 只需將 build artifact 下載到自己的 Ubuntu 20.04 機(jī)器上,就可以啟動模擬器,在 seL4 上運(yùn)行 WebAssembly 程序。
展望未來
本文演示了如何使用模擬器在 seL4 上管理和執(zhí)行 WebAssembly 應(yīng)用程序。 下一步是在真實硬件上運(yùn)行 WasmEdge 應(yīng)用程序。
WasmEdge 的主要特性之一是可擴(kuò)展的。 從共享的原生庫向 WasmEdge 添加 host function API 很容易,這樣 WasmEdge WebAssembly 字節(jié)碼程序可以很方便地訪問硬件,例如 GPIO pin、相機(jī)、USB 連接器、I/O 板和 GPU。
請繼續(xù)關(guān)注 seL4 上 WasmEdge 的更多應(yīng)用場景 demo!
總結(jié)
以上是生活随笔為你收集整理的边缘的容器化 — WasmEdge 与 seL4的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wav转mp3文件
- 下一篇: 【Linux】Linux中755权限是什