Cloudflare Workers 邊緣運算入門:Serverless 後端開發實戰教學
什麼是邊緣運算?
傳統的後端服務跑在一個或幾個固定的資料中心,當使用者在地球另一端發出請求時,封包要跑上千公里才能得到回應。邊緣運算(Edge Computing)把程式碼部署在全球數百個節點上,使用者的請求會自動路由到距離最近的節點處理,延遲從幾百毫秒降到幾十毫秒。
Cloudflare Workers 是目前最成熟的邊緣運算平台之一。Cloudflare 在全球超過 300 個城市有 PoP(Points of Presence),你的 Worker 會自動在所有這些節點上運行。這意味著無論你的用戶在東京、紐約還是約翰尼斯堡,他們都能得到幾乎相同的低延遲體驗。
Workers 架構原理:V8 Isolates vs 容器
Cloudflare Workers 最大的技術亮點是它不用容器,而是用 V8 Isolates。傳統的 Serverless(例如 AWS Lambda)每個函式跑在獨立的容器裡,冷啟動需要幾百毫秒。V8 Isolates 是 Chrome 瀏覽器用來隔離不同網頁的技術,啟動時間只需要幾毫秒,而且記憶體消耗極低。
Workers 的限制也來自這個架構:執行環境是 JavaScript/TypeScript(也支援 WebAssembly),沒有完整的 Node.js API,沒有檔案系統存取,每個請求最多執行 30 秒(付費方案),記憶體限制 128MB。這些限制迫使你寫更精簡的程式碼,反而是一種優點。
Wrangler CLI 安裝與設定
Wrangler 是 Cloudflare 官方的 CLI 工具,用來開發、測試和部署 Workers。安裝很簡單:
npm install -g wrangler
wrangler login登入後,建立你的第一個 Worker 專案:
wrangler init my-worker
cd my-worker專案結構很簡單:src/index.ts 是你的 Worker 程式碼,wrangler.toml 是設定檔。
第一個 Worker 部署
最基本的 Worker 長這樣:
export default {
async fetch(request: Request): Promise<Response> {
const url = new URL(request.url);
if (url.pathname === "/api/hello") {
return Response.json({ message: "Hello from the edge!" });
}
return new Response("Not Found", { status: 404 });
}
};本地開發用 wrangler dev,它會啟動一個本地模擬環境;部署到全球用 wrangler deploy,幾秒鐘後你的 API 就在全球 300 個節點上線了。
跟 REST API 版本控制 中介紹的最佳實踐一樣,在 Workers 中也要注意 URL 路由設計和版本管理,可以在 wrangler.toml 中設定 routes 來對應不同的路徑。
KV 儲存與 D1 資料庫
Workers KV:全球同步的鍵值儲存
Workers KV 是一個分散式的鍵值儲存,最終一致性(最多幾秒延遲)。適合存放設定、快取、Session 等讀多寫少的資料。在 wrangler.toml 中建立 KV namespace:
[[kv_namespaces]]
binding = "MY_KV"
id = "your-kv-id"在 Worker 中使用:
const value = await env.MY_KV.get("my-key");
await env.MY_KV.put("my-key", "my-value", { expirationTtl: 3600 });D1:邊緣端的 SQL 資料庫
D1 是 Cloudflare 推出的 SQLite 相容資料庫,讓你在 Workers 中執行完整的 SQL 查詢。建立 D1 資料庫:
wrangler d1 create my-database在 Worker 中執行查詢:
const result = await env.DB.prepare(
"SELECT * FROM users WHERE id = ?"
).bind(userId).first();D1 目前仍在 beta,但對於中小型應用已經足夠穩定。它的優點是查詢延遲極低(因為資料庫跑在邊緣),缺點是不適合大量寫入的場景。
Durable Objects:有狀態的邊緣應用
Workers 本身是無狀態的,每個請求都是獨立的。Durable Objects 讓你建立有狀態的物件,適合需要協調狀態的場景,例如即時聊天室、線上協作工具、遊戲伺服器。
每個 Durable Object 有唯一的 ID,全球只有一個實例,保證強一致性。這讓它非常適合做「某個房間的聊天記錄」這類需要唯一狀態的應用。費用是按 Durable Object 的使用時長計算,比普通 Workers 貴,但比維護一個有狀態的伺服器便宜很多。
路由與中介層模式
複雜的 API 需要路由管理,推薦使用 Hono 框架——一個專為 Cloudflare Workers 設計的輕量 Web 框架:
import { Hono } from "hono";
import { cors } from "hono/cors";
import { jwt } from "hono/jwt";
const app = new Hono();
app.use("/*", cors());
app.use("/api/*", jwt({ secret: "secret" }));
app.get("/api/users", async (c) => { ... });
export default app;Hono 支援中介層、路由分組、請求驗證,API 設計跟 Express 很像,學習曲線極低。如果你需要更複雜的流量控制,可以參考 API Rate Limiting 教學 中介紹的 Token Bucket 和 Sliding Window 演算法,這些邏輯同樣可以在 Workers 中實現,搭配 KV 做計數器。
效能與費用比較
Cloudflare Workers 的免費方案每天有 10 萬次請求,付費方案(每月 5 美元起)提供每月 1000 萬次請求。跟 AWS Lambda 比較:Lambda 按毫秒計費,Workers 按請求次數計費。對於 API 請求較短(<50ms)的應用,Workers 通常更便宜。
效能方面,Workers 的冷啟動幾乎可以忽略(<5ms),而 Lambda 的冷啟動可能需要 100-500ms。這讓 Workers 非常適合對延遲敏感的 API。但 Workers 的執行時間有限制,不適合長時間運行的任務(影片處理、大量資料運算等)。如果你需要更複雜的容器化部署方案,可以參考 Kubernetes 入門教學,了解 Workers 與傳統容器化架構的互補關係。
整體來說,Cloudflare Workers 是目前最適合「全球低延遲 API」這個需求的平台。如果你的應用有全球使用者,或者你的 API 對延遲非常敏感,強烈建議試試 Workers。免費方案就足以跑一個小型的個人專案,入門門檻非常低。
繼續閱讀
Bun Runtime 後端開發完整教學:取代 Node.js 的下一代 JavaScript 運行環境
相關文章
Bun Runtime 後端開發完整教學:取代 Node.js 的下一代 JavaScript 運行環境
深入教學 Bun runtime 後端開發,從安裝到實戰 API 建構,完整比較 Bun vs Node.js 效能差異、生態系相容性,幫你決定是否該從 Node.js 遷移。
gRPC 微服務通訊完整教學:用 Protocol Buffers 打造高效能 Node.js 服務間通訊
深入探討 gRPC 與 Protocol Buffers 在微服務架構中的實戰應用,從 .proto 檔案定義到 Node.js 四種串流模式完整實作,帶你理解為什麼越來越多團隊選擇 gRPC 作為服務間通訊的首選方案。
你可能也喜歡
探索其他領域的精選好文