Un Durable Object es una primitiva de computación distribuida que proporciona una instancia única de una clase JavaScript que se ejecuta en un único "shard" o "cell" en cualquier momento. Su característica principal es la persistencia de su estado y la garantía de que todas las solicitudes dirigidas a un ID específico de Durable Object serán manejadas por esa misma instancia, asegurando una consistencia fuerte (strong consistency) para las operaciones sobre su estado. Actúa como un actor con estado, pero con la particularidad de que su estado es duradero y automáticamente replicado, permitiendo que la instancia se reactive en caso de fallos o migraciones, manteniendo siempre una única instancia activa para un ID dado.

La implementación más prominente de Durable Objects se encuentra en Cloudflare Workers. En este entorno, los Durable Objects permiten a los desarrolladores construir aplicaciones distribuidas con estado, como salas de chat en tiempo real, juegos multijugador, coordinadores de consenso o sistemas de bloqueo distribuido, sin tener que preocuparse por la gestión de la consistencia o la replicación subyacente. Cada Durable Object tiene un ID único (por ejemplo, un UUID o un nombre), y las solicitudes a ese ID son enrutadas automáticamente a la instancia correcta, que puede ser creada o reactivada bajo demanda. Su estado se guarda automáticamente en el almacenamiento de Cloudflare, que es globalmente distribuido y duradero.

Para un Arquitecto de Sistemas, los Durable Objects simplifican drásticamente la construcción de sistemas distribuidos que requieren consistencia fuerte y coordinación. Eliminan la complejidad de implementar algoritmos de consenso distribuido (como Paxos o Raft) o de gestionar bloqueos distribuidos explícitamente. Esto permite modelar entidades con estado de manera intuitiva, como si fueran objetos locales, pero con las garantías de un sistema distribuido. El trade-off principal es que, al ser una instancia única, pueden convertirse en un cuello de botella si el volumen de operaciones para un ID específico es extremadamente alto y no se diseña la lógica interna para ser eficiente. Sin embargo, para la mayoría de los casos de uso que requieren coordinación y estado consistente, ofrecen una abstracción poderosa que reduce la complejidad operativa y de desarrollo, permitiendo a los arquitectos enfocarse en la lógica de negocio en lugar de en los desafíos de la computación distribuida.