Cloudflare 基礎
Workers 與 Pages 入門:把程式跑在離使用者最近的地方
Workers 與 Pages 入門:把程式跑在離使用者最近的地方
傳統的網站架構有一個天生的限制:程式跑在某一個機房裡。主機放台灣,台灣的使用者很快,巴西的使用者每個請求都要繞地球半圈。CDN 解決了靜態檔案的距離問題,但動態的邏輯,例如 API、轉址、登入驗證,還是得回到那個唯一的機房。
Cloudflare 的答案是:既然我的節點已經遍布全球、離每個使用者都很近,那就讓你的程式直接跑在節點上。這就是 Workers。搭配負責網站託管的 Pages,你可以不租任何主機,就把一個完整的網站連同後端邏輯部署到全世界。這一篇講清楚它們的運作原理、適合的場景,以及新專案該從哪個下手。
你將學到什麼
邊緣運算
程式跑在離使用者最近的節點。
Workers 原理
V8 isolate、幾乎零冷啟動。
配套儲存
KV、D1、Durable Objects 與 R2。
Pages 部署
接上 Git,推送即上線。
邊緣運算:把邏輯搬到節點上
先回到那個限制:CDN 能把靜態檔案快取到全球節點,但動態邏輯還是集中在一個機房。邊緣運算(edge computing)的想法很直接:節點既然已經站在離使用者最近的位置,就讓它不只會遞檔案,還會執行你的程式。訪客在東京,程式就在東京的節點跑;訪客在聖保羅,同一份程式就在聖保羅跑。
部署模型也因此不同:你不是把程式部署到「某一台機器」,而是部署到整個網路。上傳一次,全球節點同步生效,不用選區域、不用管擴充,流量多大就有多少節點分著扛。對使用者的體感就是:不管人在哪裡,API 的回應都像本地服務一樣快。
Workers 的運作方式:V8 isolate 與零冷啟動
Workers 能做到這件事,關鍵在執行方式。傳統 Serverless(例如早期的 AWS Lambda)替每個函式開容器或微型虛擬機,第一次呼叫要先把環境生出來,這就是惱人的冷啟動。Workers 走不同的路:節點上常駐著 V8 引擎(就是 Chrome 跑 JavaScript 的那顆),每個 Worker 只是引擎裡的一個 isolate,一個輕量的隔離執行空間。
開一個 isolate 以毫秒計,所以 Workers 幾乎感覺不到冷啟動。
代價是執行環境比較克制:它不是完整的 Node.js,API 以 Web 標準為主(fetch、Request、Response 這一套),部分 Node 模組要靠相容層;單一請求的 CPU 時間也有限制,適合「短小精悍」的邏輯而不是長時間的重運算。語言上以 JavaScript / TypeScript 為主力,也支援編譯成 WebAssembly 的語言與 Python。
典型用途:API 端點、轉址與改寫規則、A / B 測試分流、登入驗證、Webhook 接收器、把多個上游 API 組合成一個回應。
程式要配資料:KV、D1、Durable Objects 與 R2
只有運算沒有儲存做不了什麼事,Cloudflare 替 Workers 配了一整組儲存服務,各有分工:
- Workers KV:鍵值儲存,讀取在全球節點快取,適合設定值、功能開關、快取這類「讀多寫少」的資料。
- D1:以 SQLite 為基礎的 SQL 資料庫,給需要關聯查詢的應用程式用。
- Durable Objects:有狀態的物件,同一個物件全球只有一個實體,適合協調與即時協作,例如聊天室、計數器、預約鎖定。
- R2:物件儲存,放檔案與圖片,出流量免費,上一篇介紹過。
挑選的原則很簡單:讀多寫少的小資料用 KV,要下 SQL 的用 D1,要「全球唯一狀態」的用 Durable Objects,放檔案用 R2。這四塊積木加上 Workers 本身,已經足夠搭出一個不需要傳統主機的完整應用程式。
Pages:接上 Git,推送即上線
Pages 解決的是另一半問題:網站本體的託管與部署。它的工作流程對開發者非常友善:把 GitHub 或 GitLab 的倉庫接上 Pages,設定好建置指令,之後每次推送就自動建置、自動部署。主分支出正式版,其他分支自動產生預覽網址,改版前先丟預覽網址給同事看,確認沒問題再合併上線。
靜態網站產生器(Next.js 的靜態輸出、Astro、Hugo、VitePress 這些)都能用,純手寫的 HTML 也行。需要一點後端的時候,Pages 也能掛函式,讓表單提交、簡單 API 這類需求不必另外開專案。網站部署完自動上 HTTPS、自動走全球 CDN,個人部落格與作品集從此不需要租主機。
新專案選哪個:官方的方向是 Workers
Workers 與 Pages 的能力這幾年越來越重疊:Workers 後來也能直接託管靜態資產、也支援 Git 整合部署。Cloudflare 因此把方向講明了:Pages 的功能逐步整併進 Workers,新專案官方建議優先用 Workers。用一個服務同時處理靜態資產與動態邏輯,心智負擔比較小;已經跑在 Pages 上的網站則可以安心續用,沒有急著搬家的必要。
起步的路徑我會這樣建議:純靜態網站,直接用 Workers 的靜態資產託管(或既有的 Pages),接上 Git 就完成;需要 API 就加一支 Worker,需要資料就從 KV 或 D1 挑一個。免費額度對個人專案通常綽綽有餘,額度與付費方案的數字,以官方定價頁為準。

