Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

VPS vs. Cloudflare 比較表

這份清單幫助你決定應該使用傳統的 VPS (如 DigitalOcean, Linode) 還是 Cloudflare (如 Workers, Pages) 服務。

比較項目VPS (Virtual Private Server)Cloudflare (Serverless / 邊緣運算)
管理權限完全掌控:擁有 Root 權限,可自由安裝任何軟體 (Docker, Nginx, Database)。受限環境:僅能執行符合規範的程式碼 (如 JS/Wasm),無法更改系統底層。
遠端連線直接 SSH:像電腦一樣登入,可開 tmux 保持 session、用 vim 即時改 code、執行 top/htop 看 CPU 記憶體、tail -f 即時追 log。無直接 SSH:沒有主機概念,無法 SSH 進去。改 code 要 push → 等 deploy(幾秒~幾分鐘),看 log 要去 Cloudflare Dashboard 或用 wrangler tail 指令串接即時 log。
維護成本:需自行處理系統更新、防火牆設定、防範駭客攻擊。極低:Cloudflare 負責所有硬體與資安維護,你只需專注程式碼。
效能與延遲取決於機房:連線速度受限於你選擇的機房地點。全球佈署:程式碼自動散佈在全球 300+ 節點,使用者連線至最近地點。
費用結構固定月費:通常每月 $5 USD 起跳,不論流量高低。免費用額度高:小規模專案幾乎免費,大規模則按請求次數計費。
擴展性手動升級:流量大時需手動增加 CPU 或記憶體,否則會當機。自動擴展:自動應對高併發流量,不需擔心主機撐不住。
資料庫自架 MySQL / Redis:完全掌控,可以直接 mysql -u root -p 登入查資料、改 schema,redis-cli 即時看快取狀況。受管服務:用 Cloudflare D1(SQLite-based)取代 MySQL、KV 取代 Redis。無法直接 CLI 登入,需透過 Wrangler 指令或 API 操作。
後端語言任何語言:Go、Python、Node.js 都行,跑什麼 binary 都可以,包含自己編譯的執行檔。僅限 JS / TS / Wasm:Workers 環境不支援原生 Go binary,Go 開發者需改用 Go → Wasm 編譯,或換 TypeScript 寫後端邏輯。
開發除錯即時互動:SSH 進去直接改 main.gogo run . 測試,用 gdb/dlv 下中斷點,隨時看變數狀態。本地模擬:用 wrangler dev 在本機模擬 Worker 環境,但與正式環境仍有差異,無法直接在「遠端主機」上 debug。
適合對象需要跑特定軟體、資料庫、爬蟲、或學習 Linux 指令的人。靜態網站、API 開發、小型工具、追求「寫完即上線」的人。

Serverless vs VPS 核心概念

最核心的差異

你可以把兩者想像成:

  • VPS(24 小時運行):像是一台開著不關的電腦。程式碼(Daemon)就像在背景跑的軟體,隨時都在吃記憶體、佔用 CPU,但也隨時準備好處理資料(例如 24 小時連著 Binance WSS)。

  • Cloudflare Workers(觸發式):像是一個感應燈。只有有人走過(HTTP 請求)或鬧鐘響了(Cron Trigger),燈才會亮起(程式啟動),執行完任務後就立刻熄滅(釋放記憶體與 CPU)。

為什麼 Cloudflare 不能像 VPS 那樣「自己跑」?

  1. 沒有持續的記憶體居住:在 VPS 上,你的變數可以一直存在記憶體裡;在 Cloudflare,請求一結束,記憶體就會被清空。

  2. 計費邏輯不同:VPS 是按「時間」收費(租一個月多少錢);Cloudflare 是按「次數」收費(執行一百萬次多少錢)。如果它讓你 24 小時佔用資源卻不間斷,那它就虧大了。

  3. 基礎架構限制:Cloudflare 的設計是為了處理極高併發(例如一秒鐘進來一萬個請求),而不是為了處理單個長時間的任務。

除了「點連結」和「Cron」,還有什麼能觸發它?

雖然它需要觸發,但觸發源其實很多:

觸發方式說明
HTTP 請求你點連結,或是別的程式打 API 給它
Cron Triggers設定排程(例如每分鐘執行)
Queue(隊列)當有訊息進到 Cloudflare Queue 時觸發
Email當有信件寄到特定地址時觸發

需要 24/7 常駐的任務怎麼辦?

如果你需要 24 小時連著 Binance WSS 報價,Cloudflare 會因為「沒有外部持續觸發」且「不允許長駐進程」而斷線。

最省錢的替代方案建議:

方案說明限制
Oracle Cloud 免費 VPS免費方案提供 4 核心、24GB 記憶體,是目前最強的免費 24 小時 VPS需要申請,有時審核嚴格
GitHub Actions雖然是觸發式,但一個 Task 最長可以跑 6 小時(非官方用途,有風險)不是設計來跑常駐服務的
Zeabur / Railway這類平台有專門給「長駐程式(Background Worker)」跑的方案,比 Cloudflare 更適合跑機器人免費額度有限,超過需付費

優缺點總覽

VPS

優點

  • ✅ Root 權限,想裝什麼裝什麼(Docker、MySQL、Redis、Nginx、自編 binary)
  • ✅ SSH + tmux + vim,開發體驗直覺,改完馬上看結果
  • ✅ 支援任何語言:Go、Python、Rust、C++,跑原生 binary 無限制
  • ✅ 長時間執行的任務:cronjob、爬蟲、影片轉檔、WebSocket 長連線
  • ✅ 資料庫完全自主:MySQL schema 任意改,Redis 直接 redis-cli 查看
  • ✅ 除錯工具完整:gdb/dlv 下中斷點、strace 追系統呼叫、perf 效能分析
  • ✅ 固定 IP,適合需要白名單的第三方 API 串接

缺點

  • ❌ 需要自己顧主機:系統更新、防火牆、SSL 憑證更新、防 DDoS
  • ❌ 機房地點固定,海外用戶延遲高(台灣機房 → 歐洲用戶可能 200ms+)
  • ❌ 流量突增時需手動擴容,反應不及就當機
  • ❌ 固定月費,流量低時也在燒錢
  • ❌ 主機本身是單點故障,硬體壞掉要自己處理備援

Cloudflare Workers / Pages

優點

  • ✅ 全球 300+ 節點自動部署,用戶連到最近的節點,延遲極低(< 50ms 全球)
  • ✅ 自動擴展,10 個請求或 100 萬個請求都不用動手
  • ✅ 免費額度極高:Workers 每天 10 萬請求免費,小專案幾乎零成本
  • ✅ 零運維:不用管主機安全、SSL 自動續期、DDoS 防護內建
  • ✅ 部署極快:wrangler deploy 幾秒上線,git push 自動觸發 CI/CD
  • ✅ 內建服務齊全:D1(資料庫)、KV(快取)、R2(物件儲存)、Queue(消息佇列)

缺點

  • 無 SSH:不能直接進主機,除錯要透過 Dashboard 或 wrangler tail
  • 語言限制:只支援 JS/TS/Wasm,原生 Go binary 無法直接跑
  • 執行時間限制:Workers 預設 CPU 時間 10ms(付費版 30s),不適合重度運算
  • 無狀態:每個請求獨立,沒有常駐 process,無法在記憶體中維持全域狀態
  • 資料庫能力受限:D1 基於 SQLite,不支援 MySQL 的所有功能(預存程序、複雜 JOIN 效能較差)
  • WebSocket 有限制:需搭配 Durable Objects,架構比 VPS 複雜
  • vendor lock-in:D1、KV、R2 都是 Cloudflare 專屬,遷移成本高
  • 本地測試不能 100% 模擬:需用 wrangler dev --remote 才能確保行為一致

快速記憶卡

VPS 最大優勢:完全掌控 + SSH 直連除錯,Go/MySQL/Redis 隨便用
VPS 最大痛點:要自己顧主機安全、流量突增扛不住、機房地點固定

Cloudflare 最大優勢:全球 300+ 節點自動分發、零運維、免費額度夠用

Cloudflare 最大痛點(對 Go 後端開發者影響最大):
  - 無 SSH,不能進主機看
  - 只能跑 JS/TS,Go binary 不行
  - Workers 有 CPU time 限制(10ms / 30s),長任務不適合
  - D1 是 SQLite-based,不是真正的 MySQL
  - 本地測試要加 --remote 才 100% 準確

⚠️  vendor lock-in:D1、KV、R2 都是 Cloudflare 專屬 API,
    以後想搬走要重寫資料層。

一句話總結

VPSCloudflare
核心優勢完全掌控,什麼都能跑全球加速,零運維,自動擴展
核心劣勢要自己顧主機,擴展麻煩語言/執行時間受限,無 SSH 除錯
最怕的情況流量暴增 or 主機被打需要長時間 CPU 密集任務
最適合複雜後端、資料庫密集、學習用API、靜態網站、全球用戶服務

開發體驗對比(以 Go 後端開發者為例)

VPS 的日常工作流

本機 → ssh user@your-vps-ip
         │
         └─ tmux new-session
               ├─ 視窗 1:vim main.go  (直接在伺服器上改 code)
               ├─ 視窗 2:go run . / go build && ./app
               ├─ 視窗 3:tail -f /var/log/app.log  (即時看 log)
               └─ 視窗 4:mysql -u root -p / redis-cli
  • 即時感強:改一行 code → 直接重啟,幾秒內看到結果
  • 除錯直覺dlv debuggdbstrace 都能用
  • 資料庫互動SELECT * FROM users 直接在 CLI 確認資料
  • 進程管理ps aux | grep appkill -9 PID 完全自由

Cloudflare 的工作流

本機開發
  │
  ├─ wrangler dev        (本地模擬 Worker 環境,非真正遠端)
  ├─ 改 TypeScript code
  └─ git push → 自動 deploy(CI/CD)
                │
                └─ Cloudflare Dashboard
                      ├─ 看 Workers 即時 Log(wrangler tail)
                      ├─ D1 Console 下 SQL 查詢
                      └─ Analytics 看流量
  • 沒有「進主機」的概念:Workers 是無狀態函式,不是一個一直跑的 process
  • 看 log 要用指令wrangler tail 或去 Dashboard,無法 tail -f
  • 改 code 要走 deploy 流程:不能在「主機上」直接改,必須本地改 → push → deploy
  • Go 開發者的限制:不能直接跑 Go binary,需轉換思維(用 TypeScript 或 Go → Wasm)

總結建議

💡 選擇 VPS 的時機:

  • 你需要安裝特殊的資料庫 (如 MySQL, PostgreSQL) 或軟體。
  • 你想要學習作業系統管理,且習慣「看得到、摸得到」主機的感覺。
  • 你的應用程式需要長時間佔用 CPU 進行重度計算。

💡 選擇 Cloudflare 的時機:

  • 你想架設靜態網頁 (Pages) 或簡單的 API (Workers)。
  • 你不想花時間管伺服器安全、更新補丁或防火牆。
  • 你的預算有限,希望在低流量時能完全免費運行。

小技巧:你可以「兩者結合」。使用 Cloudflare Tunnel 來保護你的 VPS,這樣既能保有 VPS 的靈活性,又能享有 Cloudflare 的安全防護與隱藏 IP 功能。


Cloudflare 本地測試能多準確?

這是從 VPS 轉過來最在意的問題。Cloudflare 提供三種測試層次,準確度不同:

測試層次對比

方式指令準確度說明
Local dev(本地模擬)wrangler dev~90%用開源的 workerd runtime 在本機跑,D1/KV/R2 都有本地模擬,但少數邊緣行為不同
Remote dev(遠端預覽)wrangler dev --remote100%實際跑在 Cloudflare 邊緣機器上,只是給你一個預覽 URL,完全真實環境
Vitest 單元測試vitest + Workers pool~95%測試直接在 workerd runtime 內執行,比一般 Node.js 測試準確得多

關鍵差異說明

wrangler dev(本地,預設)

wrangler dev
# 本機起一個 http://localhost:8787
# 底層用 workerd(Cloudflare 開源的 Workers runtime)
# D1 → 本機 SQLite 檔案
# KV  → 本機記憶體 / 檔案
# 缺點:少數 Cloudflare 限制(CPU time、記憶體上限)在本地不會觸發

wrangler dev --remote(遠端,最準確)

wrangler dev --remote
# 你的 code 實際部署到 Cloudflare 邊緣,給你一個 preview URL
# 行為 = 正式環境 100% 相同
# 缺點:需要網路、每次改 code 要重新上傳(稍慢)
# 優點:所有限制、binding、行為完全真實

Vitest + @cloudflare/vitest-pool-workers(自動化測試)

npm install -D @cloudflare/vitest-pool-workers
# vitest.config.ts 設定 pool: 'workers'
# 測試直接在 workerd 裡面跑,不是 Node.js
# 最適合寫 CI/CD 自動化測試

實際建議工作流

開發階段
  ├─ wrangler dev          ← 快速迭代,90% 夠用
  └─ 遇到奇怪行為時
       └─ wrangler dev --remote  ← 切到真實環境確認

上線前
  ├─ vitest(自動化)       ← 跑單元/整合測試
  └─ wrangler dev --remote  ← 手動驗收最後一次

正式部署
  └─ wrangler deploy        ← 推到正式環境

與 VPS 除錯的根本差異

VPSCloudflare
看即時 logtail -f app.logwrangler tail(串接線上 log 到本機終端)
查資料庫mysql -u root -pwrangler d1 execute DB --command "SELECT..."
改 code 立即生效存檔 → 重啟 processwrangler dev 支援 hot reload,--remote 需重新上傳
看錯誤堆疊完整 stack traceWorkers 有,但行號對應到 bundle 後的 code(需 source map)
模擬生產環境本機 = 生產(都是 Linux process)需用 --remote 才是真實環境

結論wrangler dev 日常開發夠用,有疑問就加 --remote 跑真實環境。wrangler tail 可以把線上 log 串回你的終端,算是替代 tail -f 的方案。


套利程式適合哪個?

結論:VPS 完勝,Cloudflare 幾乎不適合。

套利程式需求VPSCloudflare Workers
24/7 常駐 process❌ 無狀態,請求結束即消滅
WebSocket 長連線(監聽價格)❌ 有限制,需 Durable Objects
低延遲反應(< 10ms 下單)✅ 取決於機房❌ CPU time 限制 10ms 就超了
記憶體中維持訂單簿狀態❌ 每次請求記憶體重置
Go 高效能並發處理✅ goroutine 隨便開❌ 不支援原生 Go
MySQL / Redis 存歷史價格❌ D1 效能不夠
固定 IP 白名單(交易所 API)❌ 邊緣節點 IP 不固定

套利程式的四個關鍵問題

  1. 速度 — 價差出現的幾毫秒內要下單,Workers 的 cold start + CPU 限制直接淘汰
  2. 常駐監聽 — 需要 WebSocket 長連線同時盯著多個交易所價格,Cloudflare 無法做到
  3. 固定 IP — 交易所 API 常需要 IP 白名單,Cloudflare 邊緣節點 IP 是動態的
  4. 狀態維持 — 訂單簿、持倉、資金狀態要一直在記憶體裡,Workers 每次請求都重置

VPS 機房選擇建議

加密貨幣套利:
  Binance / OKX 主機在 東京 / 新加坡
  → 選 Tokyo 或 Singapore 的 VPS,延遲最低

台股套利:
  → 選台灣本地機房(Hinet、中華電),距離交易所最近

美股套利:
  → 選 AWS us-east-1(維吉尼亞),靠近 NYSE / NASDAQ

Cloudflare 在套利系統中唯一的用途

核心交易邏輯必須在 VPS,但 Cloudflare Pages 可以用來部署管理介面

VPS(核心)                        Cloudflare Pages(管理介面)
┌─────────────────────┐            ┌──────────────────────────┐
│  Go 套利引擎         │ ←── API ── │  Web Dashboard           │
│  WebSocket 監聽      │            │  - 看 PnL / 損益         │
│  MySQL 歷史資料      │            │  - 開關策略              │
│  Redis 快取狀態      │            │  - 查看持倉              │
└─────────────────────┘            └──────────────────────────┘
      固定 IP VPS                        免費靜態部署