跳转到内容

Durable Objects

Durable Objects 适合单实体强一致。聊天房间、协作文档、多人房间通常一个房间一个对象。座位、库存、预约、锁这类同一资源的写入,需要在对象内串行判断。IP / 用户 / 访问凭证限流器也适合每个键一个对象。

实时在线状态和通知可以用 Durable Objects,但要优先让空闲连接休眠。单用户 / 单租户小状态可以一个用户或租户一个对象。全站评论、订单、文章列表不优先用 DO,关系查询交给 D1。大文件、图片、附件进 R2;全局搜索、分析、日志交给搜索、日志或指标产品。

成本要看请求、对象调用、实时消息和定时任务。空闲连接要能休眠,长期常驻对象会放大成本。对象内数据读取由查询形状和索引决定,全站报表交给 D1 或指标产品。写入、删除、定时任务和状态更新都要纳入设计。对象内只放自己的状态,大内容、文件和历史归档放 R2。对象拆分按房间、用户、租户和资源来做。

  • 不要全站一个 Durable Object,按房间、用户、租户、资源、限流键拆。
  • 实时房间默认让空闲连接进入休眠。
  • 不要把 DO 当关系数据库,列表、筛选、报表放 D1 或指标产品。
  • 重要状态写入对象内数据库,内存只做热缓存。
  • 初始化只做轻量恢复和必要准备,不做重活。
  • 删除、重命名对象类前先审数据影响,不把迁移当普通配置改。
  • 定时任务按可能重复执行设计,处理逻辑要幂等。
场景优先产品
单实体强一致、房间、锁、限流器Durable Objects
评论、订单、用户表、权限表D1
读多写少配置和缓存KV
文件、图片、附件、导出物R2
异步任务、削峰、重试Queues
长流程、等待、步骤状态Workflows
音视频实时通信RealtimeKit / Realtime SFU / TURN