
Sesenta contenedores en un servidor
Un servidor bare-metal ejecuta decenas a cientos de contenedores Hoody. KSM y dedup BTRFS hacen que el costo marginal sea casi cero.
Tu SaaS deja que cada cliente programe su propia generación de informes. El diseño ingenuo es un scheduler compartido, IDs de cliente en el payload del job y cruzar los dedos para que nadie haga pasar hambre a nadie. El diseño Hoody le da a cada inquilino su propio contenedor y su propio servicio hoody-cron.
Tres estados del ciclo de vida, una API HTTP. PROVISION añade entradas, los ticks de cron las ejecutan, DELETE suspende. El cron de cada inquilino vive dentro de su propio contenedor — no hay cola compartida, sin riesgo de vecino ruidoso.
Cada contenedor de cliente expone la API HTTP de hoody-cron. Aprovisiona con POST, verifica con GET, suspende con DELETE. Sin cola compartida, sin carril de prioridad, sin config de scheduler que volver a desplegar.
# POST managed entry for acme-corp tenant
POST acme-cron.hoody.com/users/root/entries
Content-Type: application/json
{
"schedule": "0 9 * * *",
"command": "/usr/local/bin/digest.sh",
"comment": "daily digest",
"enabled": true
}HTTP/1.1 201 Created
Content-Type: application/json
{
"id": "7d3f2a1b-8c4e-4f9a-b2d5",
"schedule": "0 9 * * *",
"schedule_human": "At 09:00",
"enabled": true,
"user": "root"
}Cada pestaña muestra la llamada API exacta que hace tu plano de control. La API de entradas gestionadas usa UUIDs para poder dirigirse a jobs individuales sin reemplazar el crontab completo. El aislamiento por usuario significa que nada del horario de acme-corp es visible para globex-saas.
Un servidor de tarifa plana. Sesenta contenedores de inquilino. La matemática es brutalmente simple.
Cuando scrape.js de initech-inc se cuelga, el digest de las 9 de acme-corp sigue disparando. Crontabs distintos, árboles de procesos distintos, sistemas de archivos distintos.
POST una nueva entrada y el servicio hoody-cron del inquilino la recoge inmediatamente. Sin scheduler central que recargar, sin broadcast que enviar.
Cuando globex-saas pregunta por qué su rollup de las 6pm corrió dos veces, lees el log de un contenedor — no grep en un scheduler compartido a través de nueve máquinas.
Tres ejes donde el diseño viejo le cobra impuestos a tu equipo y el diseño Hoody simplemente no.
La columna vieja es lo que cualquier equipo escribe la primera vez que envía scheduling multi-inquilino. La columna nueva es lo que envías cuando la plataforma le da a cada inquilino su propio contenedor por defecto.
Lo que hace una sola caja bare-metal Hoody cuando cada cliente tiene su propio crontab.
Sesenta contenedores de cliente en un nodo bare-metal, cada uno con su propio servicio hoody-cron corriendo. Sin scheduler compartido que haga cuello de botella.
De la solicitud PUT al primer tick del nuevo horario, observado en una flota de 60 contenedores en un nodo típico de 64 cores.
Literalmente no hay cola compartida, carril de prioridad o hilo del scheduler por el que dos inquilinos compitan. El aislamiento es el sustrato.
Los números de capacidad son valores típicos observados en un nodo bare-metal de 64 cores / 256GB ejecutando densidad de contenedores Hoody estándar. La capacidad real depende de los presupuestos de CPU y memoria por inquilino y del trabajo que haga cada cron job. El cero en colas entre inquilinos es estructural, no un benchmark.
El cron de un cliente no puede hacer pasar hambre al de otro porque no comparten crontab.
Las arquitecturas que los equipos construyen para compartir un solo crontab entre inquilinos. Hoody pone a cada inquilino en su propio crontab — sin router, sin cola de equidad, sin vecino ruidoso.
Deja de escribir tenant_id en todas partes. Dale a cada cliente su propio contenedor y deja que cron haga lo que cron lleva haciendo siempre, en aislamiento.