只要讀過任何關於安全執行 AI 產生程式碼的文章,您就一定見過 microVM 這個詞,通常就在 Firecracker 旁邊。它往往要麼被解釋成「輕量級虛擬機器」(沒錯,但沒用),要麼配一張核心內部結構圖。這裡是介於兩者之間的版本。
兩個老方案,以及為什麼都不合適
先看 microVM 夾在中間的那兩樣東西。
容器是您機器上的一組普通程式,核心同意對它們「撒謊」。namespaces 讓它們看到自己的檔案系統、程式列表和網路;cgroups 限制它們能用多少 CPU 和記憶體。它在毫秒級啟動,因為沒有啟動任何新東西。但一台主機上的所有容器都在和同一個核心對話。只要某個容器內能觸及一個核心漏洞,所有容器就都有了出口。
虛擬機器自備核心。主機的 CPU 藉助硬體虛擬化(Linux 上是 KVM),把客戶機當作擁有自己電腦一樣執行。邊界是 hypervisor,它暴露的東西遠少於核心的數百個系統呼叫。代價是笨重。傳統虛擬機器要模擬一整台 PC:韌體、PCI 匯流排、USB 控制器、顯示卡,有時還有音效卡。它要逐一經過這些才能啟動,耗時幾秒到幾分鐘,每個執行個體還要揹負幾十到幾百 MB 的開銷。
一個還算貼切的比喻:容器是同一棟樓裡的公寓,共享地基、水管和電線。虛擬機器是獨棟房子。獨棟房子是更安全的鄰居,但沒人會為一次 20 秒的拜訪蓋一棟房子。
Firecracker 去掉了什麼
Firecracker 是一個 virtual machine monitor(在 KVM 之上建立並執行虛擬機器的程式),用 Rust 編寫,2018 年開源。它為一件事而生:在共享硬體上執行海量短生命週期、互不信任的工作負載。它主要靠「刪東西」做到這一點:
- 沒有韌體,沒有硬體探測。 核心被直接載入到記憶體並啟動。不會有程式去探測並不存在的裝置。
- 極小的裝置模型。 一張網路卡、一個塊裝置、一個序列埠控制台以及另外幾個,全部是 virtio(專為虛擬機器設計的裝置,而不是對物理裝置的模仿)。沒有 USB,沒有圖形,沒有 PCI。
- 小而記憶體安全的程式碼庫。 模擬裝置的程式碼越少,能讓客戶機觸及主機的漏洞藏身之處就越少。
- 給 VMM 本身也加了一道牢籠。 每個 Firecracker 程式都執行在 chroot 中,用 seccomp 過濾器限制它自己的系統呼叫,用 cgroups 限制它的資源。即使真有東西突破了客戶機,它也只會落進籠子裡,而不是主機上。
專案官方公佈的數字是:最快 125 毫秒進入使用者空間,每個 microVM 記憶體開銷不到 5 MiB。這些是最理想的實驗室資料;一個真實的沙箱還需要準備好磁碟和網路,並讓裡面的代理就緒以接收指令,所以我們的沙箱大約一秒就緒。這仍然足夠接近容器的速度,讓您可以為每個任務建立一個,用完即丟。
容器與 microVM 的實際對比
| 容器 | Firecracker microVM | |
|---|---|---|
| 核心 | 與主機共享 | 獨立核心 |
| 與主機的邊界 | 對共享核心的系統呼叫 | hypervisor + 小型 VMM |
| 啟動時間 | 毫秒級 | 約 0.1–1 秒 |
| 每個執行個體的開銷 | 非常小 | 幾 MiB |
| 裝置 | 主機暴露什麼就有什麼 | 網路、磁碟、控制台 |
| GPU | 可以 | 不可以 |
| 適用於 | 可信程式碼、應用打包 | 不可信程式碼、多租戶工作負載 |
關鍵的是第二行。對於容器,「這段程式碼能逃逸嗎?」這個問題變成了「主機核心裡是否存在可觸及的漏洞?」。對於 microVM,它變成了「hypervisor 或少數幾個虛擬裝置裡是否有漏洞?」。後者的攻擊面小得多,而這正是雲平台為自身多租戶託管早已在防守的那一面。
您需要付出什麼
microVM 並不是免費的升級。
- 沒有 GPU,也沒有顯示器。 它用於執行程式碼,不適合桌面或圖形工作負載。
- 裝置更少,靈活性更低。 任何依賴真實硬體或一長串核心模組的東西,都不會用得順手。
- 邊界仍然需要策略。 對外流量不受限的 microVM 仍可能發出您不想要的流量;放了您 API 金鑰的 microVM 仍可能把它們洩露出去。隔離保護的是主機不受客戶機侵害,而不是保護您的金鑰不被您交給它們的程式碼拿走。
我們的沙箱如何使用它
每個 EQVPS 沙箱都是一個擁有獨立核心的 Firecracker microVM,規格從 0.25 vCPU、512 MB 到 8 vCPU、16 GB。它預裝 Python 3.12、Node.js 22、bash、git 和 curl,可以存取對外網際網路,沒有對內埠。臨時沙箱在您用完後被刪除;persistent 沙箱保留磁碟,暫停時會把 microVM 的狀態寫入磁碟,因此在恢復之前不產生任何費用。暫停時的狀態保留 14 天。 之後沙箱被刪除,其 id 返回 410 sandbox_deleted。
我們選擇 microVM 而不是容器,原因只有一個:在沙箱裡執行的程式碼,按設計就是沒人審查過的程式碼。AI 代理的輸出、陌生人的 pull request、一個包含上千個模型編寫程式的基準測試。對於這些,獨立核心才是值得付費的邊界。我們在它周圍搭建的細節——方案、配額、同步指令 55 秒的限制——見沙箱文件。
如果您想更深入地把這種邊界與其他方案比較,執行不可信程式碼的隔離級別把程式、容器、microVM 和完整虛擬機器放在一起對比。如果吸引您的是按秒的價格,按秒計費到底如何計算給出了算術過程。
評論
目前還沒有評論。歡迎成為第一位。