系統設計 / 萊卡

Cloudflare 免費方案夠用嗎?|每天十萬次用不完,真正卡住的是每次只能做 50 件事

一個放在 LINE 群裡、會自己把照片備份到雲端硬碟的 AI 助理,跑在 Cloudflare 免費方案上會遇到什麼。每天的總量離上限很遠,卡住它的是每一輪只能做五十件事。

今天下午,永力智庫的 LINE 群裡有人問萊卡:「照片都有存了嗎?」萊卡是我放在 LINE 群裡的專案助理,其中一條工作是把群裡的照片、影片、檔案自動備份到 Google 雲端硬碟。我去後台查,發現它每一輪只存得下兩到三張。整條線跑在 Cloudflare 的免費方案上,我第一個念頭是「免費額度太少」,查完才發現每天的總用量連上限的百分之一都不到。卡住它的是另一種規則:每一輪對外呼叫最多五十個,資料庫查詢也最多五十個,兩本帳分開算,哪一本先用完就停。這篇把免費方案的規則分成兩種額度攤開,再配上我這幾天踩過的四個雷。

適合誰
  • 你已經用 AI 做出一個會自己跑的小服務(LINE 機器人、定時備份、表單後端),放在 Cloudflare 上,想知道免費方案撐不撐得住
  • 你看過「每天十萬次請求免費」就放心上線,結果東西跑得很慢,又查不出原因
  • 你正在決定要不要花每月五美元升級,想要一個算得出來的判斷依據
你可以帶走什麼
  • 一張免費額度對照表,分成「每天總量」與「每一輪上限」兩種。這兩種卡人的方式完全不同
  • 我實際踩到的四個雷,每個都附我後來怎麼改
  • 一份上線前的三題自檢,算過再決定要不要升級

先看萊卡在做什麼

先把架構攤開,後面的數字才有對照。

  1. LINE 群有訊息,LINE 會主動打一個網址通知我的程式(這叫 webhook),接電話的是 Cloudflare Worker(跑在 Cloudflare 機器上的一小段程式),驗過簽章後寫進 D1(Cloudflare 提供的資料庫)。這一步零 AI token。
  2. Worker 上掛三條 cron(定時自動執行的排程):台北 07:00 整理回報、17:00 服務狀態回報、每五分鐘一輪媒體備份(原本是每小時)。
  3. 媒體備份那一輪做的事:從 D1 撈出還沒備份的照片,跟 LINE 要檔案,上傳到 Google 雲端硬碟,再回 D1 記一筆「已存」。
  4. 家裡的 Mac mini 每天拉一次文字紀錄做本機備存。那是第二道保險,主線在雲端。

沒有任何一台電腦要開著。程式碼在 GitHub,事件資料在 D1,檔案在雲端硬碟。數量級給你參考:9 月 1 日那天 D1 裡的群組事件有 3,847 筆,媒體備份從 8 月 24 日到 31 日跑了 231 輪、存了 25 個附件,全部在免費方案裡。

萊卡這條線是怎麼長出來的

Cloudflare 免費方案的規則:兩種額度

免費方案的限制分兩種。第一種是每天的總量,大多數人只看這種。

每天總量免費額度萊卡一天的用量
Worker 請求數100,000 次(cron 每跑一次也算一次)每五分鐘一輪=288 次,加群訊息不到 400 次
D1 讀取500 萬列幾千列
D1 寫入100,000 列幾百列
D1 儲存5 GB(全帳號合計,單一資料庫 500 MB)幾 MB
Cron 排程數全帳號 5 個3 個

第二種是每一輪的上限。Worker 每被叫醒一次,不管是收到 webhook 還是 cron 到點,都算一輪。

每一輪上限免費方案付費方案
對外呼叫(fetch)50 個10,000 個(預設,可再調高)
D1 查詢50 個1,000 個
CPU 時間10 毫秒30 秒(HTTP 預設,可調到 5 分鐘;cron 另有規則)
記憶體(每個 isolate)128 MB128 MB
一句話萊卡每天的請求數與 D1 讀寫,都不到第一張表上限的百分之一。讓它慢下來的,全在第二張表。

雷一:一輪五十件事,一張照片吃掉十幾件

一張照片要走完整條路:跟 Google 開一個上傳 session、跟 LINE 要檔案、把檔案傳過去,對外呼叫三到四個。D1 這邊要認領工作、預留額度、記結果、收尾,五到六個查詢。每一輪還要固定留一些額度給 token 更新、告警、本輪紀錄,主線能用的剩四十出頭。

所以一輪只塞得下兩三張。

我改了兩層:

  • 程式裡放一本帳。每個動作發出前先問帳本還有沒有額度,不夠就停手,沒做完的下一輪自然再被挑中,因為篩選條件沒變。開始一件工作前先把整條路徑的最壞成本鎖住,避免做到一半沒額度,留下「Google 已經收到檔案、D1 沒記到」的半成品。用不完的在收尾時退回去。
  • 用輪數換每輪量。每小時一輪追不上,先改十五分鐘,再改五分鐘。一天 288 輪,理論上能存六七百張,花東參訪的量夠用。
老實說第二層是免費方案下的權宜。付費方案每輪對外呼叫預設上限是一萬、D1 查詢一千,這個問題就不存在了。更正規的做法是把工作丟進 Cloudflare 的 Queues(佇列服務,工作先排隊、再一件一件消化);它從 2026 年 2 月起免費方案也能用,每天一萬次操作(一則訊息走完約三次操作),我這條線還沒改過去。
「先問帳本再動手、沒做完下輪再來」就是迴圈

雷二:額度不夠時「整批放棄」

備份線合回去的第一天,D1 裡有 44 筆媒體等著存,每小時的 cron 卻一直記 idle,一張都沒存。

根因在建工作單那一段。原本的寫法是「一次建全部」,本輪額度放不下 44 筆,就整批放棄,回報「建立 0 筆」,下一輪再來做一次一模一樣的事。改成「只建額度放得下的那幾筆」,留一點給後面的主線,整條線才動起來。

規則很短在有每輪上限的環境,任何「全部或零」的寫法,量一超過上限,最後都會變成零。

雷三:Cron 全帳號只有五個,換 Worker 時新舊並存就掛不上

Worker 在 Cloudflare 後台可以改名,但我是在設定檔換一個新名字再部署,這等於新建一個 Worker。8 月 31 日我把萊卡的 Worker 從舊名字換成 lyca-line-relay,新舊兩個 Worker 並存了一段時間,讓 LINE 的通知網址平順切過去(這種新舊並存再切換的做法叫藍綠切換)。

免費方案的五個 cron 是整個帳號共用,舊 Worker 的排程還佔著位子,新 Worker 的排程就掛不上,而且不會報錯。順序要鎖死:先刪舊的,才 deploy 掛新的排程。

雷四:2026 年 9 月 1 日起,D1 超額直接失敗

Cloudflare 公告免費方案的 D1 超過當日讀寫上限時,查詢會直接失敗,不再只是警告。萊卡每天寫入離十萬列還很遠,但如果一個帳號接了很多群,或一次補抓大量歷史訊息,會從「慢」變成「當天寫不進去」。上線前值得算一次:一天寫幾列。

順便一條跟額度無關的小規則。Worker 的 secret 存進去之後,後台和 wrangler 都看不到值(只有程式執行時讀得到),自己沒另存就等於沒有備份,另建 Worker 時要全部重設。我把群白名單、成員對照表從 secret 搬進 D1,secret 只留真正的鑰匙。

什麼時候該付那五美元

Workers 付費方案每月 5 美元起,帳號級,升一次全部 Worker 都受惠。

項目免費付費
每輪對外呼叫5010,000(預設)
每輪 D1 查詢501,000
每輪 CPU10 毫秒30 秒(預設)
Cron 排程全帳號 5 個250 個
D1 讀取每天 500 萬列每月 250 億列
D1 寫入每天 10 萬列每月 5,000 萬列

我的判斷方式:

  • 自己用、一兩個群、一天幾十張照片:免費撐得住,用短間隔換量。
  • 要幫客戶架第二個實例:cron 會先不夠。一個實例三條排程,兩個就六條,超過五。
  • 一輪要處理大檔案或幾十件事:每輪五十是牆,升級比改程式便宜。
如果你還在選要放哪一家

上線前三題自檢

01每一輪要做幾件事?

數對外呼叫幾個、D1 查詢幾個。超過四十就要分批,或直接升級。

02一天要跑幾輪?

乘起來看每天總量離十萬次多遠、D1 寫入離十萬列多遠。

03帳號的五個 cron 剩幾個?

要掛新排程前先數。換 Worker 時先刪舊的再掛新的。

這篇的數字是 2026 年 9 月 2 日查 Cloudflare 官方文件的結果,10 月 10 日再對過一次。他們每年都在調,用之前再看一次:Workers 定價、D1 定價、Workers 限制。

本文的四個雷都發生在 2026 年 8 月 24 日到 9 月 2 日之間。萊卡的程式碼在 GitHub 的 lyca-line-agent,帳本那段在 worker/src/budget.js。

萊卡系統設計AI 工作流Cloudflare雲端硬碟