团队采用 Pages 是因为具有自动构建和即时部署功能的 git 推送流程确实比从头开始构建 CI 管道更简单。这是真正的优势,而不是营销。当项目增长并且您开始遇到 Pages 无法解决的限制时,问题就会出现:cron 触发器、具有不同职责的多个 Worker、使用不同的绑定进行暂存。在这一点上,迁移到 Workers 似乎是显而易见的——但在开始之前很少计算出它的真正成本。
真正的迁移触发器
最常见的触发器是 cron 触发器。 Pages 本身不支持 cron。如果您需要定期运行的作业(处理付款、同步外部数据、生成计划报告),那么您已经有一个单独的 Worker 与您的 Pages 项目一起运行。随着卫星 Workers 数量的增长,团队开始怀疑将所有内容整合到 Workers 中是否更有意义。
第二个触发因素是部署碎片。页面项目是一个整体部署单元 - 前端、功能,全部在一起。当您想要在专门的 Workers 之间划分职责(一个用于公共 API,一个用于内部处理,一个用于 Webhooks)时,Pages 不提供这种粒度。部署对 webhooks 处理程序的更改会触发整个前端的重建。
第三是生产平价的分阶段。页面具有生产环境和预览环境,但它们没有具有完全不同绑定的命名环境。如果您想要一个与生产数据库完全分离的临时 D1 数据库,具有不同的环境变量,甚至可能不同的 KV 模型,Pages 中的解决方案是创建一个单独的 Pages 项目并手动管理同步。在 Workers 中,它位于 2 以及块 3 和 4 中。
离开 Pages 后您会失去什么
迁移之前,正确的计算是列出您需要替换的 Pages 提供的内容。
构建管道是最被低估的项目。 Pages 连接到存储库、检测框架、运行构建并上传资产。在 Workers 中,您承担此责任:拥有 CI/CD(GitHub Actions、GitLab CI 等)、构建脚本以及将资产上传到 R2(如果您仍需要提供静态文件)。
每个分支的预览部署是第二项。 Pages 会自动为每个分支生成预览 URL — 推送、可用 URL、PR 评论。在 Workers 中复制这一点需要做一些工作:一个 CI 脚本,用于检测分支名称,使用从分支派生的 Worker 名称 (5´) 进行部署,并通过 GitHub API 注释 PR 中的 URL。它可以工作,但它是您编写和维护的基础代码。
第三项是静态资产的CDN。忽视这一点是最昂贵的。
静态资产账户
在 Pages 中,静态资产(HTML、CSS、JS、图像)直接从 Cloudflare CDN 提供,无需触发 Workers 运行时。每个静态资产请求的费用为 0 美元,无论数量如何。
在 Workers 中,您本身没有这个原语。为了提供资产,您需要 R2(对象存储)和 Worker 中的逻辑来搜索正确的资产、应用缓存标头并返回内容。通过运行时的每个请求都算作一次 Worker 调用。
工人付费计划包括每月 1000 万个请求,超出的每百万个请求收费 0.30 美元。每月有 1 亿个请求的网站,其中 9000 万个静态资源:在 Pages 上,请求成本为 0 美元。在 Workers 中,包含的软件包有 9000 万次调用——仅这个增量就需要 27 美元/月,随流量线性增长。
对于每月有 5 亿个请求且静态资产占 85% 的网站来说:差异相当于每月 120 美元以上。 Pages 专业版计划的费用为 20 美元/月。在这种情况下,迁移到 Workers 是一个增加运营成本以换取灵活性的决定。
服务 R2 资产的 wrangler.toml
如果迁移有意义(尽管成本高昂),则在 Workers 中提供静态资产的正确模式将使用带有 Cache API 的 R2:
0
1
这复制了 Pages 的 CDN 行为,但您需要为每次缓存未命中(每个 Cloudflare PoP 每个文件的第一个请求)付费。 Pages CDN 具有此缓存层,每个请求无需额外费用。
如何在不停机的情况下迁移
风险最小的顺序:首先,保持 Pages 项目运行。并行创建新的 Worker。配置将流量发送到特定路径的新 Worker 的路由(从风险最低的路径开始,例如 webhooks 或管理路由)。在移动主要路径之前,使用实际流量验证生产中的行为。然后才能停用相应的页面功能。
对于前端,在确定额外成本在项目预算范围内之前,请勿将 Pages 资产迁移到 R2。在许多情况下,混合架构(用于前端和资产的页面、用于异步作业和专业服务的 Workers)比完整迁移更便宜且同样灵活。
迁移真正解决了什么问题
Cron 触发器、具有细粒度路由的多个 Worker、完全隔离的环境中的暂存 — 这些是证明迁移合理性的真正问题。如果您出于其他原因进行迁移,则值得检查以确保您不会以限制换取更高的成本。
工作人员的灵活性是以具体的运营价格为代价的:您承担 CI 管道、预览部署以及提供静态资产的成本。对于没有大量资产的纯后端服务来说,这个成本很低。对于具有繁重前端和大量静态流量的应用程序来说,它可能是巨大的。
另请阅读
- [Cloudflare Workers 与 Pages:选择之前最重要的区别6
- [只有工人才能做的事情,只有页面才能做的事情以及两者相遇的地方77
- [Workers 和 Pages:部署、路由以及每个模型隐藏的内容8
- [页面功能:何时使用而不是纯粹的 Workers9
- [当耐用物品是错误答案时10
- [DNS 代理与仅 DNS:有何变化以及每种模式何时有意义11
