自架 Cloudflare Workers 的可能性:OpenWorkers 深度讀後筆記

本篇文章更新時間:2026/01/02
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


打造自己的 Edge Runtime:OpenWorkers 背後的理念與實作

編輯前言:如果你曾經喜歡 Cloudflare Workers 的 DX,卻因為成本、隱私或 Vendor lock-in 而猶豫,那麼這篇《Introducing OpenWorkers – Self-hosted Cloudflare Workers in Rust》會讓你眼睛一亮。OpenWorkers 嘗試把 Edge 的威力帶回私有環境,並真正做到「自託管」。

核心觀點 (Key Takeaways)

  • OpenWorkers 是一個以 Rust 建構、基於 V8 的自架 JS 執行環境,目標是複製 Cloudflare Workers 的體驗。
  • 支援多項 Cloudflare 常用能力:KV、PostgreSQL、S3/R2 相容儲存、Service Bindings、Web API 等。
  • 架構明確且可自託管:只需要 Docker Compose + PostgreSQL,就能把整個系統跑起來。

深入解析

原文開宗明義指出:OpenWorkers 是一個「open-source runtime for executing JavaScript in V8 isolates」。換句話說,它不是一般的伺服器框架,而是完整複製 Cloudflare Workers 的執行模型,讓你在自己的基礎建設上跑出類似的 Edge 服務。

作者提到目前支援的特性,包括:

  • Bindings:如 KV、PostgreSQL、S3/R2 儲存、Service Bindings、環境變數與 Secrets
  • Web API:fetch、Request/Response、ReadableStream、crypto.subtle、Blob 等
  • 計時與控制:setTimeout、AbortController

並且提供 V8 Isolates sandbox,限制 CPU(100ms)與記憶體(128MB)。這點我覺得非常關鍵,因為要複製 Workers 的模式,資源隔離是核心。

原文強調:「run JavaScript on your own servers, with the same DX as Cloudflare Workers but without vendor lock-in.」

架構解讀:多元服務組成的 Workers 平台

文中給出的 ASCII 架構圖,看似複雜,但大致可以拆成三層:

  • 入口層:nginx proxy
  • 控制層:dashboard、api、logs、postgate、scheduler
  • 執行層:多個 runner(x3),背後以 NATS 進行事件與任務分派

整體設計與 Serverless 執行平台非常接近,但卻能以 Docker 在本機或私有雲完全重建。我特別欣賞作者說的:「A single PostgreSQL database and a single Docker Compose file is all you need。」這讓整個設計變得非常可部署、甚至能在小型團隊內輕鬆試用。

筆者心得與啟發

閱讀整篇文章,我最有感的是:作者並不是「要做一個新框架」,而是「把 Edge Runtime 這個能力民主化」。許多團隊其實很喜歡 Cloudflare Workers,但:

  • 成本常常因大量請求難以估算
  • 數據無法離開企業內部
  • 對外部供應商的依賴造成不安

OpenWorkers 正面迎擊這三個痛點,讓人第一次看到「自託管 Edge Runtime」的成熟可能性。

尤其當作者提到下一步是 execution recording & deterministic replay 時,我立刻想到:這很可能會是自託管平台中最具突破性的功能,甚至有機會比 Workers 本家更快做到開放。

整體而言,這是一個我會想持續追蹤的專案。如果你希望在自己的基礎建設上享受 Workers 的開發體驗,而不受限於雲端供應商,OpenWorkers 絕對值得一試。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon