
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.
La plupart des pipelines CI brûlent de l'argent sur le trafic de cache — pousser les artefacts vers S3, les retirer au job suivant, payer le stockage, payer l'egress, repayer quand les runners changent de région. Sur Hoody, le cache est un dossier sur le même bare metal qui fait tourner votre conteneur de build. Poussez un tarball avec curl. Tirez-le avec curl. Les octets ne quittent jamais la machine.
les mêmes 47,2 GB de cache · deux factures différentes
Tout le cache CI, c'est trois commandes et un job de nettoyage. PUT pour écrire un tarball. GET pour le lire. find -atime pour purger. Il n'y a pas de quatrième pièce — pas de policy IAM, pas de lifecycle de bucket, pas de cérémonie d'URL signée.
Après l'install, le runner streame node_modules à travers tar | zstd dans un seul PUT contre /files/cache. Hoody écrit le corps sur disque comme un seul blob binaire. Pas de multipart, pas de part-uploader, pas de SDK.
La première étape du job suivant est un seul curl. Le corps sort du NVMe à pleine ligne car le cache vit sur la même machine physique que le runner — pas de saut d'egress, pas de pull cross-AZ, pas d'edge CloudFront.
Hoody Cron tourne une fois par nuit. find /files/cache -atime +30 -delete jette tout ce qu'aucun job n'a lu depuis un mois. Pas de politique de rétention, pas de tier Glacier, pas de JSON de lifecycle à maintenir.
PUT écrit. GET lit. find purge. L'API Hoody Files est le serveur de cache, le moteur de nettoyage et le journal d'audit — le tout derrière la même URL /files/[path].
Pousser le cache chez un fournisseur séparé avait du sens quand le stockage était rare. Sur un conteneur bare metal, ça ne fait qu'ajouter un fournisseur.
S3 facture trois compteurs : stockage, egress, par-requête. Hoody Files est inclus dans le prix du serveur à tarif fixe — le disque que vous louez déjà est le disque où repose le cache. Les octets ne traversent jamais une frontière de facturation.
Les lectures sortent de la même machine physique qui fait tourner le build. Pas d'endpoint S3 à résoudre, pas de handshake TLS vers une région, pas de rate limit sur le débit de préfixe. Une cible Rust de 1,4 GB se décompresse en quelques secondes.
Votre runner et votre cache vivent sur la même instance, facturés sur la même facture, debuggés avec la même session SSH. Quand vous éteignez le conteneur, le cache est l'image disque — de retour en ligne dès que vous le démarrez.
Une empreinte CI mid-size typique déplace environ 1,4 TB de trafic de cache par mois. Voici la ligne qu'elle construit sur AWS ; sur Hoody le cache s'exécute dans le serveur à tarif fixe que vous payez déjà.
Quand le cache vit sur la machine qui fait tourner le build, le compteur que S3 faisait tourner n'a rien à lire. La ligne ne bouge pas car il n'y a pas de transaction à facturer.
Hoody Files n'est pas un wrapper léger — c'est un vrai backend persistant avec hashing, historique, lectures par range et journal d'audit. Le cache CI utilise une fine tranche de ce qui est réellement exposé.
PUT pour écrire, GET pour lire, HEAD pour ETag et Content-Length, ?hash pour SHA256, ?stat pour les métadonnées. Le cache est la même famille d'endpoints qui propulse les logs, builds et artefacts partagés.
Chaque écriture passe par le journal de fichiers. Tirez le cache d'hier par timestamp ou par numéro de révision par chemin — debugger un flake n'exige plus un outil de snapshot séparé.
Si le cache doit vraiment vivre sur S3, B2 ou un dossier Drive, montez-le comme backend et gardez la même URL /files/[path]. Le code du runner ne change jamais — le cache déménage.
Les chiffres reflètent la surface publiée de l'API Hoody Files — `GET/PUT/HEAD/PATCH /api/v1/files/[path]`, les paramètres de requête `?hash`/`?stat`/`?at`/`?revision`/`?history`, et les endpoints du journal de fichiers sous `/api/v1/journal`.
Votre cache CI cesse d'être un fournisseur séparé. C'est un dossier sur la machine que vous louez déjà.
Les backends de cache standards facturent chacun une relation fournisseur, une facture d'egress ou des frais par build. /files ne facture rien de tout cela.
Arrêtez de louer un cache à un second cloud. Écrivez le tarball sur le disque que vous payez déjà, et tirez-le avec curl.