Cloudflare 基礎

Workers 與 Pages 入門:把程式跑在離使用者最近的地方

Workers 是 Cloudflare 的邊緣運算服務:你的程式碼部署到它遍布全球的節點,訪客的請求由離他最近的節點就地執行,不必繞回單一機房。它用 V8 isolate 而非傳統容器,啟動極快、幾乎沒有冷啟動。Pages 則是靜態網站託管服務,接上 Git 就能自動建置與部署。兩者都有免費額度,額度與價格以官方定價頁為準。
Workers 與 Pages 入門:把程式跑在離使用者最近的地方:文章重點卡

Workers 與 Pages 入門:把程式跑在離使用者最近的地方

傳統的網站架構有一個天生的限制:程式跑在某一個機房裡。主機放台灣,台灣的使用者很快,巴西的使用者每個請求都要繞地球半圈。CDN 解決了靜態檔案的距離問題,但動態的邏輯,例如 API、轉址、登入驗證,還是得回到那個唯一的機房。

Cloudflare 的答案是:既然我的節點已經遍布全球、離每個使用者都很近,那就讓你的程式直接跑在節點上。這就是 Workers。搭配負責網站託管的 Pages,你可以不租任何主機,就把一個完整的網站連同後端邏輯部署到全世界。這一篇講清楚它們的運作原理、適合的場景,以及新專案該從哪個下手。

你將學到什麼

邊緣運算

程式跑在離使用者最近的節點。

Workers 原理

V8 isolate、幾乎零冷啟動。

配套儲存

KV、D1、Durable Objects 與 R2。

Pages 部署

接上 Git,推送即上線。

邊緣運算:把邏輯搬到節點上

先回到那個限制:CDN 能把靜態檔案快取到全球節點,但動態邏輯還是集中在一個機房。邊緣運算(edge computing)的想法很直接:節點既然已經站在離使用者最近的位置,就讓它不只會遞檔案,還會執行你的程式。訪客在東京,程式就在東京的節點跑;訪客在聖保羅,同一份程式就在聖保羅跑。

部署模型也因此不同:你不是把程式部署到「某一台機器」,而是部署到整個網路。上傳一次,全球節點同步生效,不用選區域、不用管擴充,流量多大就有多少節點分著扛。對使用者的體感就是:不管人在哪裡,API 的回應都像本地服務一樣快。

東京使用者台北使用者聖保羅使用者東京節點:跑 Worker台北節點:跑 Worker聖保羅節點:跑 WorkerKV / D1 / R2儲存服務
同一份 Worker 程式部署到所有節點:各地使用者的請求由最近的節點就地執行,需要資料時才存取後方的儲存服務。

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 挑一個。免費額度對個人專案通常綽綽有餘,額度與付費方案的數字,以官方定價頁為準。

一句話帶走Workers 用 V8 isolate 把你的程式部署到全球節點、幾乎零冷啟動;Pages 讓網站接上 Git 推送即上線。兩者正在整併,新專案優先考慮 Workers,配上 KV / D1 / R2 就能不租主機跑完整應用。
本文源起本文依 Cloudflare 官方文件與酒Ann 的實際使用經驗整理編寫。官方資源可在 Cloudflare Developers 查閱。

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

Workers 跟 AWS Lambda 這類 Serverless 有什麼不同?
同樣是「只寫函式、不管主機」,但底層不同:Lambda 用容器或微型虛擬機,冷啟動可能要幾百毫秒;Workers 用 V8 isolate,在已經跑著的執行環境裡開一個隔離空間,啟動以毫秒計,幾乎感覺不到冷啟動。另外 Workers 預設就部署到全球所有節點,不用選區域。
Workers 可以用什麼語言寫?
第一公民是 JavaScript 與 TypeScript,跑在 V8 上。也支援編譯成 WebAssembly 的語言(例如 Rust),以及 Python 的支援。要注意它不是完整的 Node.js 環境,部分 Node API 需要相容層或不可用,寫之前先查官方文件的相容性說明。
我只是要放一個靜態網站,該用 Pages 還是 Workers?
兩個都做得到。Pages 的體驗是接 Git 倉庫、推送自動建置部署,對純靜態網站最省事。不過 Cloudflare 近年已把 Pages 的能力整併進 Workers,Workers 也能直接託管靜態資產,官方目前建議新專案優先考慮 Workers。已經在 Pages 上的網站可以續用,不急著搬。
免費額度夠用嗎?
對個人網站與側專案通常綽綽有餘:Workers 免費方案按每日請求數計算額度,Pages 的靜態資產供應不另外計費,建置次數有月上限。實際數字會調整,以官方定價頁為準;超過免費額度後的付費方案也是按用量計,門檻不高。