OpenComputer: de una sola VM en Azure a un millón de sandboxes distribuidos

Fuentes: Scaling OpenComputer from one VM to a million sandboxes

OpenComputer, un servicio de sandboxes basados en máquinas virtuales, nació con una única instancia en la región Azure US East 2 y topó pronto con un techo de 300 CPUs: el centro de datos elegido estaba saturado y el proveedor no elevó la cuota. Migrar a otra región habría desplazado el problema, ya que toda región tiene un límite finito y la arquitectura monocelular no podía absorber una demanda de 10.000, 100.000 o un millón de máquinas virtuales simultáneas. La compañía optó por rediseñar la arquitectura para que añadir capacidad sea un paso de despliegue, no una migración.

El núcleo del nuevo diseño es la celda, una unidad autosuficiente que empaqueta el plano de control (encargado únicamente de orquestar VMs: programar, rastrear, hibernar en S3, migrar) con 5-10 workers que ejecutan QEMU. Las celdas ignoran el exterior; el panel, la facturación y la lógica de usuario se extrajeron fuera. La selección del worker dentro de una celda considera ajuste de recursos, calor de plantilla, arquitectura ARM frente a amd64, afinidad organizativa y antiafinidad entre cargas. El mismo binario de celda se despliega sin cambios en AWS, Azure, GCP y OCI.

Para enrutar cada petición de creación, una capa edge en Cloudflare Workers consulta un registro global en D1 con todas las celdas y su capacidad libre, y asigna la celda menos cargada. La creación cuesta 50-100 ms adicionales (autenticación, saldo, selección); las operaciones frecuentes (ejecución, archivos, PTY, destrucción) van directas a la celda mediante un JWT firmado, sin más saltos síncronos a Cloudflare. Cada VM envía un heartbeat cada 10 segundos, agregado para facturación por segundo; los eventos de ciclo de vida (hibernación, parada, migración) se publican en Redis Streams, un forwarder los envía por HTTPS al ingest Worker, que los autentica con HMAC, deduplica en KV y los reparte al registro y a la facturación. Si Cloudflare cae, los eventos se acumulan. Con este esquema, la capacidad dejó de ser la cuota de Azure y pasó a ser la suma de todas las celdas desplegadas.