
Soixante conteneurs sur un seul serveur
Une machine bare-metal exécute des dizaines à des centaines de conteneurs Hoody. La dédupplication KSM et BTRFS rend le coût marginal quasi nul.
Votre SaaS laisse chaque client planifier sa propre génération de rapports. Le design naïf : un seul scheduler partagé, des customer IDs dans le payload de la tâche, doigts croisés pour que personne n'affame personne. Le design Hoody donne à chaque locataire son propre conteneur et son propre service hoody-cron.
Trois états du cycle de vie, une API HTTP. PROVISION ajoute des entrées, les ticks cron les exécutent, DELETE les suspend. Le cron de chaque locataire vit dans son propre conteneur — pas de file partagée, pas de risque de voisin bruyant.
Chaque conteneur client expose l'API HTTP hoody-cron. Provisionner avec POST, vérifier avec GET, suspendre avec DELETE. Pas de file partagée, pas de voie prioritaire, pas de configuration scheduler à redéployer.
# 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"
}Chaque onglet affiche l'appel API exact que votre control plane effectue. L'API des entrées gérées utilise des UUID pour que vous puissiez cibler des tâches individuelles sans remplacer tout le crontab. L'isolation par utilisateur signifie que rien du planning d'acme-corp n'est visible pour globex-saas.
Un serveur à tarif plat. Soixante conteneurs locataires. Les maths sont brutalement simples.
Quand le scrape.js d'initech-inc reste bloqué, le digest de 9h d'acme-corp part toujours à l'heure. Crontabs différents, arbres de processus différents, systèmes de fichiers différents.
POST une nouvelle entrée et le service hoody-cron du locataire la récupère immédiatement. Pas de scheduler central à recharger, pas de broadcast à envoyer.
Quand globex-saas demande pourquoi leur rollup de 18h a tourné deux fois, vous lisez le log d'un seul conteneur — pas un grep sur un scheduler partagé sur neuf machines.
Trois axes où l'ancien design taxe votre équipe et où le design Hoody ne le fait simplement pas.
L'ancienne colonne, c'est ce que toute équipe écrit la première fois qu'elle livre une planification multi-tenant. La nouvelle colonne, c'est ce que vous livrez quand la plateforme donne par défaut son propre conteneur à chaque locataire.
Ce qu'une seule machine bare-metal Hoody encaisse quand chaque client a son propre crontab.
Soixante conteneurs clients sur un seul nœud bare-metal, chacun avec son propre service hoody-cron en cours. Pas de scheduler partagé pour faire goulot.
De la requête PUT au premier tick du nouveau planning, observé sur une flotte de 60 conteneurs sur un nœud 64 cœurs typique.
Il n'y a littéralement aucune file partagée, aucune voie prioritaire ni thread scheduler que deux locataires se disputent. L'isolation est le substrat.
Les chiffres de capacité sont des valeurs typiques observées sur un nœud bare-metal 64 cœurs / 256 Go en densité conteneur Hoody standard. La capacité réelle dépend des budgets CPU et mémoire par locataire et du travail que fait chaque tâche cron. Le zéro pour les files cross-locataire est structurel, pas un benchmark.
Le cron d'un client ne peut pas affamer celui d'un autre parce qu'ils ne sont pas sur le même crontab.
Les architectures que les équipes construisent pour partager un seul crontab entre locataires. Hoody met chaque locataire dans son propre crontab — pas de routeur, pas de file d'équité, pas de voisin bruyant.
Arrêtez d'écrire tenant_id partout. Donnez à chaque client son propre conteneur et laissez cron faire ce que cron a toujours fait, en isolation.