yuebin.uk(CF Static Export Pro)是一套跑在 Cloudflare 边缘上的无服务器 CMS,内核是 Cloudflare Workers + D1 + R2 + KV 四件套。本文基于 Cloudflare 官方文档(
cloudflare-docs@production,数据截至 2026-10)整理这四款产品在 yuebin 中的实际用途,以及各自的免费额度与使用限制,方便你评估成本与边界。
一、先看懂 yuebin 的「动静分离」架构
yuebin 把内容拆成两层,各用不同的存储,这也是它几乎零运维、又足够快的关键:
| 存储层 | 在 yuebin 里存什么 | 为什么用这个产品 |
|---|---|---|
| R2 | 文章单页 HTML、媒体文件、风格包资源 | 便宜、容量无限、读不按行计费 |
| D1 | 文章、分类关系、评论、用户、设置、文档索引 | 支持 SQL 查询,是列表页「实时性」的来源 |
| KV | 只存 site:ctx(站点设置快照) |
读多写少,做跨 isolate 的配置缓存 |
| Workers | 整套 CMS 的运行载体(路由、渲染、注入评论) | 无服务器计算,边缘执行,按请求计费 |
一次访问的典型路径:静态资源(CSS/JS/字体)命中 Cloudflare assets 层直接返回、不计 Worker 调用;未命中则进 Worker,按路径算 R2 key 读单页 HTML;若单页不存在,则从 D1 取文章现场渲染并回填 R2。列表页则直接查 D1,结果进边缘 Cache API 按 TTL 缓存。
一个重要工程经验:KV 的
list操作很贵。早期版本把列表缓存、侧边栏、RSS 都放 KV,批量删除几百篇文章会触发大量list+delete直接打满免费额度。现在这些缓存全部搬到 Cache API(免费、不计 KV 配额),KV 只保留一个键。
二、Cloudflare Workers —— 运行载体
Workers 是 yuebin 的执行环境:它接收请求、读 R2、查 D1、注入评论、套模板渲染。
免费额度(Workers Free)
| 指标 | Workers Free | Workers Paid(约 $5/月) |
|---|---|---|
| 每日请求数 | 100,000 / 天(UTC 0 点重置) | 无限制 |
| 单次请求 CPU 时间 | 10 ms | 默认 30 秒(可配至 5 分钟) |
| 单次请求子请求数 | 50 | 10,000 |
| 内存 | 128 MB | 128 MB |
| 同时打开的外部连接 | 6 | 6 |
主要限制
- 请求/响应大小:URL ≤ 16 KB;请求头 ≤ 128 KB;响应头 ≤ 128 KB;响应体无强制上限。请求体大小取决于主账户计划(Free/Pro/Business 100 MB,Enterprise 最高 5 GB)。
- CPU 时间:只算代码执行时间,等待
fetch()、KV、D1、R2 等网络 IO 不计入。 - 子请求:每个 Worker 调用对 KV/R2/D1 等内部服务的子请求上限为 1,000(Free 与 Paid 相同);重定向链中每个子请求都计入。
- 其他:未压缩 Worker 包 ≤ 64 MiB;启动时间 ≤ 1 秒;每账户 Workers 数量 Free 100 / Paid 500;静态资源文件数/版本 Free 20,000 / Paid 100,000,单文件 ≤ 25 MiB。
- 超限表现:超出每日请求返回 Error 1027;超出 CPU/内存返回 Error 1102。
对 yuebin 的意义:免费层每天 10 万次请求通常够中小站点;列表页走 D1 + 边缘缓存,单页走 R2,能显著压低实际 Worker 调用量。
三、Cloudflare D1 —— 文章与关系的 SQLite 数据库
D1 是 yuebin 的内容主库,存文章、分类关系、评论、用户、设置、文档索引等需要 SQL 查询的数据。
免费额度(按量计费项,随 Workers 计划)
| 计费项 | Workers Free | Workers Paid |
|---|---|---|
| 行读取(rows read) | 500 万 / 天 | 前 250 亿 / 月包含,超出 $0.001 / 百万行 |
| 行写入(rows written) | 10 万 / 天 | 前 5000 万 / 月包含,超出 $1.00 / 百万行 |
| 存储 | 5 GB(账户总计) | 前 5 GB 包含,超出 $0.75 / GB·月 |
- 免费额度每日 00:00 UTC 重置;D1 无出网(egress)流量费。
- 超免费日限额后,D1 会拒绝查询并返回超限错误,升级到 Paid 通常几分钟内解除。
主要限制
| 限制项 | Free | Paid |
|---|---|---|
| 每账户数据库数 | 10 | 50,000(可申请更高) |
| 单库最大容量 | 500 MB | 10 GB |
| 每账户最大存储 | 5 GB | 1 TB(可申请更高) |
| 时间点恢复(Time Travel) | 7 天 | 30 天 |
| 每 Worker 调用查询数 | 50 | 1,000 |
- 每表最大列数:100;每行最大 2 MB(字符串 / BLOB / 整行)。
- 单条 SQL 语句长度上限 100 KB;单次查询绑定参数上限 100;单次查询时长上限 30 秒。
- 单库行数无上限(受单库容量约束);文件导入(
d1 execute)上限 5 GB。
对 yuebin 的意义:列表页「按行计费但读很便宜」,配合边缘缓存,成本远低于维护一堆静态列表。给高频过滤字段建索引可显著降低
rows_read扫描量。
四、Cloudflare R2 —— 单页 HTML 与媒体存储
R2 存 yuebin 生成的静态单页 HTML、上传的媒体文件、以及风格包资源。它最大的卖点是出网免费、容量近乎无限。
免费额度(每月)
| 计费项 | 免费额度 | 超出后(Standard 标准存储类) |
|---|---|---|
| 存储 | 10 GB·月 / 月 | $0.015 / GB·月 |
| Class A 操作(写入/列举等) | 100 万次 / 月 | $4.50 / 百万次 |
| Class B 操作(读取等) | 1000 万次 / 月 | $0.36 / 百万次 |
| 出网流量(Egress) | 免费 | 免费 |
- Class A 含
PutObject/CopyObject/UploadPart/ListObjects等;Class B 含GetObject/HeadObject等;DeleteObject/DeleteBucket/AbortMultipartUpload免费。 - 免费额度仅适用于 Standard 存储类,不适用于 Infrequent Access(低频访问,有 30 天最低存储时长与取回费)。
主要限制
| 限制项 | 上限 |
|---|---|
| 单桶容量 / 单桶对象数 | 无限 |
| 每账户桶数 | 1,000,000 |
| 单对象大小 | 5 TiB(4.995 TiB) |
| 单次上传大小 | 5 GiB(单分片)/ 4.995 TiB(多分片) |
| 单次上传最大分片数 | 10,000 |
| 对象 key 长度 | 1,024 字节 |
| 对象 metadata 大小 | 8,192 字节 |
| 同 key 并发写入 | 1 次 / 秒(更快返回 429) |
| 桶管理操作速率 | 50 次 / 秒(不含对象读写) |
对 yuebin 的意义:单页 HTML 体积远小于上传限制;媒体文件走 R2 比 D1 划算得多。注意
r2.dev公开端点仅供测试、有可变限流,生产请绑自定义域名。
五、Cloudflare KV —— 站点设置的轻量缓存
KV 在 yuebin 中只承担一件事:存 site:ctx 这个站点设置快照,做一个读多写少、跨 isolate 共享的配置缓存。
免费额度
| 计费项 | Workers Free | Workers Paid |
|---|---|---|
| 读取 | 100,000 / 天 | 无限 |
| 不同 key 写入 | 1,000 / 天 | 无限 |
| 同一 key 写入 | 1 次 / 秒 | 1 次 / 秒 |
| 每账户存储 | 1 GB | 无限 |
| 每命名空间存储 | 1 GB | 无限 |
主要限制
| 限制项 | 上限(Free / Paid 相同) |
|---|---|
| 每 Worker 调用 KV 操作数 | 1,000(批量请求按 1 次计) |
| 每账户命名空间数 | 1,000 |
| 键(key)大小 | 512 字节 |
| 键元数据大小 | 1,024 字节 |
| 值(value)大小 | 25 MiB |
最小 cacheTtl |
30 秒 |
对 yuebin 的意义:KV 适合「读多写少」的小配置,但要慎用
list——它贵且计入配额。yuebin 把列表缓存、RSS、侧边栏这类需要列举的场景全部改用 Cache API,KV 只保留单个site:ctx键,把免费额度用在刀刃上。注意 KV 是最终一致的(跨地域同步有延迟),不适合存需要强一致的实时数据。
六、免费层总览:一套 yuebin 站点能白嫖到什么
| 产品 | 核心免费额度 | 超限后的「自动刹车」 |
|---|---|---|
| Workers | 10 万请求 / 天 | 返回 Error 1027,可配置 fail-open / fail-closed |
| D1 | 500 万行读 + 10 万行写 / 天,存储 5 GB | 拒绝查询;存储满需清理 |
| R2 | 10 GB 存储 + 100 万 Class A + 1000 万 Class B / 月,出网免费 | 按量计费(极便宜) |
| KV | 10 万读 + 1,000 写 / 天,存储 1 GB | 超额计入 Paid 额度 |
结论:对于内容量中等的个人/小团队站点,yuebin 完全可能做到每月零账单——单页静态化压低 Worker 调用,列表走 D1 实时查询 + 边缘缓存,媒体与单页落 R2,站点配置仅一个 KV 键。真正的扩展瓶颈通常是 Workers 的 10 万请求/天与 D1 的 10 万行写/天(发布/评论高峰时);跨过这条线,升级 Workers Paid(约 $5/月)即可解锁上面表格里的 Paid 配额。
七、给你的实战提醒
- 单页是快照:换风格、改站点名、改 permalink 后,旧单页不会自动变,需要重建(这也是 R2 单页方案的固有边界)。
- 列表缓存按数据中心生效,跨地域最终一致——不要指望列表页全球瞬时同步。
- KV
list很贵:任何需要「列举一堆键」的逻辑都优先用 Cache API 或 D1,别堆在 KV。 - D1 建索引:列表/分类/标签查询务必在过滤字段上建索引,否则全表扫描会把
rows_read蹭上去。 - R2 生产绑自定义域名:
r2.dev有可变限流,仅用于测试。 - 强依赖 Cloudflare:D1 / R2 / KV / Workers 任一不可用,站点都会受影响——这是「零运维」换来的代价。
数据来源:Cloudflare 官方文档仓库 cloudflare-docs(production 分支),页面涵盖 Workers / D1 / R2 / KV 的 Limits 与 Pricing 文档。配额与价格可能随官方调整,请以最新官方文档为准。