zeroserve: 可透過使用者空間 eBPF 進行腳本編寫的零配置 Web Server
zeroserve 是一款高效能、零配置的 HTTPS 伺服器,它以在使用者空間運行的沙盒化 eBPF 程式取代了傳統的宣告式配置。
透過將路由、身份驗證和速率限制整合到單一的可腳本化路徑中,其目標是為 Nginx 和 Caddy 的配置層提供一個更透明且靈活的替代方案。
透過使用者空間 eBPF 實現「程式即配置」
zeroserve 消除了傳統的配置文件。相反地,伺服器使用 eBPF 程式作為主要的配置手段。任何放置在 .zeroserve/scripts/ 目錄下的 .c 檔案都會被編譯成 eBPF 物件並在每次請求時執行。
為了在不需要核心權限的情況下確保安全性與穩定性,zeroserve 實作了以下架構:
- 使用者空間執行:腳本透過
async-ebpf執行階段(由uBPF提供)執行,這意味著它們在非特權程序中運作,不需要CAP_BPF或核心 BPF 子系統的存取權限。 - 記憶體沙盒化:一個「指標籠子」(pointer cage)將每次記憶體存取遮蔽到程式自身的領域中,防止腳本讀取或寫入未經授權的記憶體。
- 可搶佔式執行階段:為了防止單一慢速腳本導致事件迴圈停滯,該執行階段是完全可搶佔的。定時器(預設為 2ms)可以中斷 JIT 編譯的原生碼並將控制權交還給伺服器。
- 執行流程:腳本按檔名排序順序執行。它們共享一個每次請求的元數據映射(metadata map),如果腳本呼叫了
zs_respond或zs_reverse_proxy,則可以中斷鏈條。
高效能 I/O 與部署
zeroserve 基於 monoio 執行階段構建,利用 io_uring 進行所有網路與磁碟操作。它以單執行緒事件迴圈運作,設計上透過在不同 CPU 核心上執行多個程序來實現擴展。
原子化 Tarball 部署
伺服器直接從單個 tar 檔案提供網站服務。在載入時,zeroserve 會建立一個 path -> byte-range 映射,並針對 tarball 進行位元組範圍讀取,而無需將檔案解壓縮到磁碟中。這種方法確保了:
- 原子化更新:部署新版本只需簡單的檔案替換,隨後發送
SIGHUP信號。 - 安全性:檔案系統上沒有文件根目錄,消除了因雜亂的配置規則而暴露敏感檔案的風險。
- 熱重載:
SIGHUP會原子化地更換網站內容、eBPF 腳本和 TLS 憑證,且不會中斷連線。
傳輸安全性
伺服器透過 BoringSSL 提供全面的 TLS 1.3 實作,其特點包括:
- 加密客戶端問候 (ECH):防止真實的 SNI 以明文形式出現。
- JA4 指紋識別:客戶端指紋會暴露給 eBPF 腳本以供分析。
- SNI 憑證選擇:憑證會從目錄中動態選擇。
效能基準測試
在 8 核心 Ryzen 7 3700X(固定在單一核心)上與 Nginx 1.26 和 Caddy 2.11 進行基準測試,zeroserve 在特定工作負載下展現了顯著優勢。
靜態檔案提供服務
對於小型靜態檔案 (174 B),zeroserve 達到了 36,681 req/s,優於 Nginx (31,226 req/s) 和 Caddy (12,830 req/s)。對於大型檔案 (100 KB),zeroserve 和 Nginx 的表現相似,兩者都達到了約 780 MB/s 的吞吐量。
腳本執行吞吐量 (eBPF vs. Lua)
與使用 LuaJIT 的 Nginx 相比,zeroserve 的 eBPF 腳本(調整為 10ms 搶佔間隔)在中間件和動態回應場景中均優於 Lua:
- 標頭注入:zeroserve (43,709 req/s) vs. Nginx Lua (28,653 req/s)。
- 動態 JSON 回應:zeroserve (46,945 req/s) vs. Nginx Lua (41,231 req/s)。
反向代理效能
對於小型代理回應 (174 B),zeroserve 達到了 26,486 req/s,比 Nginx (21,761 req/s) 大約快 22%。然而,對於大型代理主體 (100 KB),Nginx 仍然更勝一籌,達到了 585 MB/s,而 zeroserve 為 359 MB/s。
社群洞察與評論
技術用戶之間的討論突顯了幾個關於該專案設計與可行性的爭議點:
"我認為這個賭注放錯了位置——人們長期以來都更偏好配置而非程式碼。內建功能已足以滿足大多數人的需求,而且他們不需要寫 C 程式碼。"
其他貢獻者建議了潛有的潛在改進與技術增補,例如支援 Rust (.rs) 檔案作為 eBPF 腳本而非使用 C,以及整合 kTLS 以避免在使用者空間進行 SSL 處理。一些用戶對該專案「感官編碼」(vibe coded) 的性質以及在公告中使用了 AI 生成內容表示懷疑,並質疑其軟體加固與品質保證的程度。
",