Resumen

Construir un sistema de comentarios en tiempo real que funcione para miles de usuarios conectados simultáneamente es uno de los retos más interesantes al trabajar con arquitecturas serverless. Aquí se aborda cómo Durable Objects de Cloudflare, combinados con WebSockets, permiten crear un tablero de comentarios persistente y escalable, incluyendo las limitaciones reales que debemos considerar.

¿Cómo se resolvió el bug de la variable de entorno en producción?

Antes de entrar en la funcionalidad nueva, se abordó un problema pendiente: una variable de entorno que existía en local pero no estaba disponible en producción del lado del cliente. El origen del error era la forma en que se importaba la variable. Al compilarse como aplicación front-end, la variable quedaba disponible en los archivos estáticos durante el build time [0:42], pero no existía en el entorno de ejecución del servidor.

La solución fue cambiar la importación: en lugar de consumirla desde los archivos estáticos, se accede directamente desde el env de Cloudflare [1:15], el mismo objeto del que se obtiene la configuración del AB test. Con esto, la lógica condicional funciona correctamente: si la variable no está definida, se consume mediante un worker; si está definida, se hace un fetch directo. Así la aplicación es compatible tanto en local como en producción.

¿Qué son los Durable Objects y cómo se usan para comentarios en tiempo real?

Los Durable Objects son un primitivo de Cloudflare que permite mantener estado persistente y conexiones activas. La idea implementada es clara: cuando un estudiante se registra, se genera un JWT que le permite agregar comentarios. Esos comentarios se guardan por API y, al mismo tiempo, una conexión WebSocket orquestada con Durable Objects hace broadcasting a todos los usuarios conectados [2:05].

¿Cuál es la diferencia entre clases y objetos?

Es fundamental distinguir estos dos conceptos [3:00]:

  • La clase es el tipo de objeto, como un molde. En la capa gratuita se permiten hasta 100 clases.
  • Los objetos son instancias de esa clase. Una sola clase puede generar miles de objetos.

En el ejemplo práctico, existe una clase para el room de comentarios y cada ID de curso genera un objeto distinto. Cambiar el ID del curso en la URL conecta a un Durable Object diferente, mostrando solo los comentarios de ese curso específico [7:40].

¿Qué capacidad de almacenamiento tienen?

El storage por clase es ilimitado, pero cada objeto individual tiene un límite de 10 GB [3:55]. Esta restricción es la misma que encontramos en D1, y no es casualidad: D1 está construido sobre Durable Objects. Cloudflare utiliza productos primitivos como base para desarrollar servicios más completos. Por ejemplo, Cloudflare Access está construido sobre KV [4:20].

Los Durable Objects incluyen storage primitivo. Las versiones iniciales ofrecían key-value, y las más recientes incorporan SQL completo con las mismas capacidades que D1, pero sin las herramientas de administración como rollbacks automáticos, read replicas globales o consola visual en el dashboard [4:50]. La tabla SQL se crea al inicializar el objeto, y una vez existente, se puede hibernar para evitar facturación innecesaria.

¿Cómo escalar WebSockets cuando hay miles de conexiones simultáneas?

Al inspeccionar la conexión de red en el navegador, se puede ver el WebSocket activo conectado a un curso específico [7:25]. Los comentarios aparecen automáticamente en todas las pestañas conectadas al mismo objeto, incluso en navegadores diferentes.

Pero la pregunta clave es: ¿qué pasa con 10.000, 50.000 o un millón de usuarios? Cloudflare promueve escala infinita, pero ese infinito tiene matices [8:30]. Los límites físicos rondan las 50.000 conexiones por objeto, aunque en la práctica son menos.

La estrategia para escalar es la distribución en subgrupos [9:10]:

  • Se crean múltiples objetos, cada uno con un grupo de usuarios conectados.
  • Un objeto coordinador se encarga de distribuir los mensajes a cada subgrupo.
  • El broadcast a un millón de usuarios no recae en un solo objeto, sino que se reparte, logrando una experiencia más cercana al tiempo real.

Esta arquitectura es la que utiliza una plataforma de educación reconocida para sus eventos en vivo, donde se conectan entre 5.000 y 100.000 estudiantes simultáneamente [8:45].

Para flujos que requieran más de 30 segundos de procesamiento, existen alternativas como colas y workflows, que complementan el ecosistema de primitivos de Cloudflare. ¿Has probado esta funcionalidad en producción? ¿Qué dificultades encontraste? Comparte tu experiencia en los comentarios.