~/VibeHandbook
PDF grátis

Cloudflare

developers.cloudflare.com

Durable Objects

O que é

Pense em um único atendente de recepção que atende uma pessoa de cada vez e se lembra de todos que já passaram por ali — nenhum segundo atendente pode dar uma resposta conflitante. Um Durable Object é esse atendente em forma de software: um servidor minúsculo que guarda sua própria memória (ele é "stateful", ou seja, com estado) e que a Cloudflare garante que existe em exatamente um lugar por vez. Cada objeto tem um ID único, seu próprio armazenamento permanente, e processa requisições uma de cada vez — por isso é um lar natural para coordenação: contadores, travas (locks), salas de jogo, sessões de chat. Enquanto um Worker esquece tudo entre requisições (ele é "stateless", ou seja, sem estado) e roda em todos os lugares ao mesmo tempo, um Durable Object lembra e é único.

Pontos fortes

  • Garantia de instância única — sem condições de corrida entre réplicas.
  • Armazenamento persistente embutido (agora baseado em SQLite) co-localizado com o objeto.
  • Ideal para aplicações em tempo real: WebSockets (uma conexão ao vivo, bidirecional, que fica aberta para que o servidor possa enviar atualizações instantaneamente), presença, colaboração ao vivo.
  • Consistência forte: leitura-após-escrita dentro de um objeto é imediata.
  • Alarmes permitem que um objeto agende seu próprio trabalho futuro.

Contrapartidas

  • Single-threaded por objeto — um objeto muito requisitado pode virar um gargalo; fragmente (shard) por chave.
  • Exige mais raciocínio do que um Worker simples; você precisa desenhar os limites do objeto.
  • O armazenamento por objeto é limitado; não substitui o D1 (um banco de dados ) ou o R2 (armazenamento de arquivos) em escala.
  • Exagero para lidar com requisições sem estado.

Quando usar

Recorra a Durable Objects quando precisar de coordenação ou de estado por entidade: salas de chat, estado de jogos multiplayer, limitadores de taxa (rate limiters), eleição de líder, ou um documento ao vivo que vários clientes editam ao mesmo tempo.

Encaixe no vibe coding

Durable Objects brilham nas funcionalidades em tempo real que, de outra forma, seriam trabalhosas de construir, e um agente consegue montar a classe, o binding e o tratamento de WebSocket. Diga a ele como fragmentar (shard) — geralmente um objeto por sala, usuário ou documento — para que um único objeto não acabe serializando todo o seu tráfego. A configuração abaixo declara uma classe Durable Object com uma migração.

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

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