~/VibeHandbook
PDF gratis

Cloudflare

developers.cloudflare.com

Durable Objects

Qué es

Imagina a un único empleado de recepción que atiende a una persona a la vez y recuerda a todos los que pasaron antes — ningún segundo empleado puede dar una respuesta contradictoria. Un Durable Object es ese empleado en forma de software: un servidor diminuto que guarda su propia memoria (es "con estado", o "stateful") y que Cloudflare garantiza que existe en exactamente un solo lugar a la vez. Cada objeto tiene un ID único, su propio almacenamiento permanente, y procesa las solicitudes de una en una, por lo que es un hogar natural para la coordinación — contadores, bloqueos (locks), salas de juego, sesiones de chat. Mientras que un Worker olvida todo entre solicitudes (es "sin estado", o "stateless") y se ejecuta en todas partes a la vez, un Durable Object recuerda y es singular.

Puntos fuertes

  • Garantía de instancia única — sin condiciones de carrera (race conditions) entre réplicas.
  • Almacenamiento persistente incorporado (ahora respaldado por SQLite) ubicado junto al objeto.
  • Ideal para aplicaciones en tiempo real: WebSockets (una conexión bidireccional en vivo que permanece abierta para que el servidor pueda enviar actualizaciones al instante), presencia, colaboración en vivo.
  • Consistencia fuerte: la lectura inmediatamente después de una escritura dentro de un objeto es instantánea.
  • Las alarmas permiten que un objeto programe su propio trabajo futuro.

Contrapartidas

  • Un solo hilo (single-threaded) por objeto — un objeto muy solicitado puede convertirse en un cuello de botella; particiónalo por clave (shard by key).
  • Requiere pensar más que con un Worker sencillo; tú diseñas los límites del objeto.
  • El almacenamiento por objeto es limitado; no es un sustituto de D1 (una ) ni de R2 (almacenamiento de archivos) a gran escala.
  • Es excesivo para el manejo de solicitudes sin estado.

Cuándo usarlo

Recurre a Durable Objects cuando necesites coordinación o estado por entidad: salas de chat, estado de juegos multijugador, limitadores de tasa (rate limiters), elección de líder, o un documento en vivo que muchos clientes editan a la vez.

Encaje con vibe coding

Los Durable Objects brillan en las funciones en tiempo real que de otro modo son complicadas de construir, y un puede armar el esqueleto de la clase, el binding y el manejo de WebSocket. Dile cómo particionar (shard) — normalmente un objeto por sala, usuario o documento — para que un solo objeto no termine serializando todo tu tráfico. La configuración de abajo declara una clase Durable Object con una migración.

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

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