Cloudflare Durable Objects 有状态协调
单实例有状态对象,强一致,适合实时房间、计数器和协调。
为什么
Durable Objects 按 ID 提供强一致单实例 — Workers 上做实时房间、限流器和分布式锁的唯一方式。存储是事务 SQLite,无需外部 DB。
Cloudflare 网络覆盖 125+ 国家的 330+ 城市,服务 20% 的互联网流量。Workers 冷启动为 0ms(基于 isolate),免费套餐覆盖每天 10 万请求。
何时使用
用于 WebSocket 房间、按用户限流、分布式锁和任何「恰好一个」协调。避免高扇出(用 Queues)或简单 CRUD(用 D1)。
如何做
示例
常见问题
- ⚠单实例瓶颈 — 一个 DO 处理其 ID 所有请求,热 ID 限流
- ⚠迁移类重名中断 — 旧 ID 孤立,用 old_class_names 迁移
- ⚠WebSocket 内存限制 — 每消息 1MB,大广播需分块
最佳实践
- ✓用可休眠 WebSocket — ctx.acceptWebSocket,消息间释放内存,更便宜
- ✓分片热键 — room-42-shard0..N 跨 DO 分散负载
- ✓用闹钟而非 setInterval — DO 可休眠,闹钟可靠唤醒
常见问题解答
什么是Cloudflare Durable Objects 有状态协调?它解决什么问题?
单实例有状态对象,强一致,适合实时房间、计数器和协调。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。
如何在 5 分钟内上手Cloudflare Durable Objects 有状态协调?
两步即可跑通:① 定义类 — export class Room implements DurableObject { async fetch(request) {...} };② 绑定 — [[durable_objects.bindings]] name="ROOM" class_name="Room"。建议先用免费套餐验证流程,再接入生产环境。
Cloudflare Durable Objects 有状态协调 最容易踩的坑是什么?
最高频的问题是:单实例瓶颈 — 一个 DO 处理其 ID 所有请求,热 ID 限流。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。
Cloudflare Durable Objects 有状态协调 的最佳实践有哪些?
Cloudflare Durable Objects 有状态协调 的最佳实践包括:用可休眠 WebSocket — ctx.acceptWebSocket,消息间释放内存,更便宜;分片热键 — room-42-shard0..N 跨 DO 分散负载;用闹钟而非 setInterval — DO 可休眠,闹钟可靠唤醒。其中首条「用可休眠 WebSocket — ctx.acceptWebSocket,消息间释放内存,更便宜」应作为团队默认规范写入 IaC 模板。
Cloudflare Durable Objects 有状态协调 如何控制成本与避免账单意外?
三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。Cloudflare Durable Objects 有状态协调 多数提供免费套餐,先在免费额度内验证再放量。