~/VibeHandbook
$39

Cloudflare

developers.cloudflare.com

Durable Objects

它是什么

Durable Object 是一个微小的有状态服务器,Cloudflare 保证它在任一时刻恰好只存在于一个地方。每个对象都有唯一的 ID、自己的持久化存储,并逐个处理请求,因此它天然适合做协调工作——计数器、锁、游戏房间、聊天会话。Worker 是无状态的、到处运行的,而 Durable Object 是有状态的、单一的。

优势

  • 单实例保证——跨副本不存在竞态条件。
  • 内置的持久化存储(现由 SQLite 支撑),与对象同处一地。
  • 非常适合实时应用:WebSockets、在线状态(presence)、实时协作。
  • 强一致性:对象内部的写后读是即时可见的。
  • 闹钟(Alarms)让对象能为自己安排未来的工作。

取舍

  • 每个对象单线程——一个热点对象可能成为瓶颈;要按键分片。
  • 比纯 Worker 需要考虑的更多;对象边界要由你来设计。
  • 每个对象的存储是有上限的;在规模上无法替代 D1 或 R2。
  • 对于无状态的请求处理则是杀鸡用牛刀。

何时使用

当你需要协调或按实体保存状态时,就动用 Durable Objects:聊天室、多人游戏状态、限流器、领导者选举,或一份多客户端同时编辑的实时文档。

Vibe coding 契合度

Durable Objects 在那些原本难以搭建的实时功能上大放异彩,agent 可以为你搭好类、绑定以及 WebSocket 处理。告诉它如何分片——通常是每个房间、用户或文档一个对象——这样单个对象就不会把你所有的流量串行化。下面的配置声明了一个带迁移的 Durable Object 类。

# wrangler.toml
[[durable_objects.bindings]]
name = "ROOM"
class_name = "ChatRoom"

[[migrations]]
tag = "v1"
new_sqlite_classes = ["ChatRoom"]
npx wrangler deploy