程式碼可以待的五個地方
地球上幾乎每一個託管產品,都是這五個類別之一的變體。學會這些,那些營銷頁面就不再讓人困惑了。
- 靜態託管(Static hosting)——把純檔案(HTML(HyperText Markup Language,網頁的骨架)、CSS(Cascading Style Sheets,樣式裝扮)、JavaScript、圖片)直接交付給瀏覽器。沒有伺服器"執行"你的程式碼;它只是把檔案遞過去。把它想像成網際網路上的一個資料夾。因為沒有什麼會崩潰,也沒有什麼需要打補丁,所以這是你能放到網際網路上的最可靠的東西。例子:GitHub Pages、Cloudflare Pages、Netlify、Vercel(靜態模式)。
- 邊緣函式(Edge functions)——遍佈全球、執行在物理上靠近你使用者的伺服器上的微小程式碼片段。它們幾乎瞬間啟動,非常適合輕量邏輯:身份驗證檢查、重定向、小型 (Application Programming Interface,應用程式程式設計介面——一個程式與另一個程式對話的門口)呼叫。要注意的是:它們執行在一個功能精簡的環境裡,所以並不是每個庫都能在那裡工作。例子:Cloudflare Workers、Vercel Edge Functions、Deno Deploy。
- 無伺服器函式(Serverless functions)——按需執行、空閒時消失的程式碼。你按請求計費,而不是按小時。你寫一個函式;平臺負責管理機器。在單個請求需要執行好幾分鐘之前都很好用——大多數平臺會在超時(通常 10 到 60 秒)後切斷函式。例子:AWS Lambda、Google Cloud Functions、Vercel Functions。
- 容器(Containers)——你的應用加上它的整個環境(正確的語言版本、庫、系統工具)被打包進一個叫做容器的可移植盒子裡。平臺讓那個盒子保持執行。更多控制權,稍多一點配置。定義那個盒子的那一個檔案就是
Dockerfile,而 AI 寫得很好。例子:Fly.io、Railway、Render、Google Cloud Run。 - 虛擬機器(VMs)——你在資料中心裡租用的一整臺計算機。所有東西——作業系統、安全更新、Web 伺服器,全部——都由你自己安裝和管理。最大的控制權,最大的責任。例子:AWS EC2、DigitalOcean Droplets、Hetzner。
把這五個類別並排來看,越往下,你用更少的管理換取更多的控制:
管理更少 ◀────────────────────────────▶ 管理更多
空閒時更便宜 控制更多
┌──────────┐ ┌──────────┐ ┌────────────┐ ┌───────────┐ ┌──────────┐
│ STATIC │ │ EDGE │ │ SERVERLESS │ │ CONTAINER │ │ VM │
│ 檔案 │ │ 函式 │ │ 函式 │ │ 你的盒子 │ │ 整臺電腦 │
├──────────┤ ├──────────┤ ├────────────┤ ├───────────┤ ├──────────┤
│ 不跑 │ │ 在邊緣 │ │ 按需 │ │ 保持 │ │ 全部 │
│ 程式碼 │ │ 執行 │ │ 執行 │ │ 執行 │ │ 自己跑 │
└──────────┘ └──────────┘ └────────────┘ └───────────┘ └──────────┘
Pages Workers Lambda Railway EC2
關於成本的一條粗略經驗:平臺替你管理得越多,沒人用你應用時就越便宜,而當所有人都在用時它替你操的心也越多。