
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.
Chaque lundi à 9h, une seule entrée cron réveille un seul conteneur. Le script rend le digest une fois et l'écrit vers une URL pipe avec ?n=200. Deux cents boucles curl — une par abonné — tirent les mêmes octets en parallèle et les remettent à SMTP. La diffusion vit dans le substrat, pas dans votre code.
Votre digest du lundi — 4 choses à ouvrir cette semaine
Les obligations ont rebondi sur des chiffres de l'emploi plus mous ; la courbe s'est dé-inversée à l'avant. Nous signalons deux titres dont le marché mésévalue les résultats.
Deux graphiques : flux nets hebdomadaires vers les ETF d'infra IA, et une décomposition de l'IPC qui contredit l'en-tête.
Liste de lecture : un long article sur le crédit privé, et une note acérée sur pourquoi le cycle de taux est plus court qu'en 2008.
→ Ouvrir le digest complet
0 9 * * 1 bash /scripts/digest.shUN RÉVEIL · UN RENDU · DEUX CENTS PULL EN PARALLÈLE
L'API Hoody Cron dépose une ligne crontab à 5 champs dans une entrée managée. La ligne exécute un script exec qui rend le digest une fois et le pousse vers un chemin pipe avec n=200. Deux cents boucles d'abonnés tirent le même chemin en parallèle — le serveur ne retient rien, et un lecteur lent ne peut pas bloquer les autres.
Le cron n'est pas devenu plus complexe. La diffusion a été déplacée dans le substrat — le pipe ne retient rien, le script rend une fois, et la boucle n'est que du SMTP en bordure. Pas de file d'attente, pas de table de réessais, pas de siège d'outil de campagne.
Le design naïf boucle 200 envois SMTP en série, prend 11 minutes, et double-livre quand il plante à mi-chemin. La forme pipe vous donne du parallélisme, de l'idempotence et un conteneur plus petit — gratuitement.
Le digest est construit une seule fois. Deux cents boucles curl tirent les mêmes octets simultanément. Un run de 4 secondes remplace une boucle série de 11 minutes — le pipe applique de la backpressure aux lecteurs lents sans bloquer les autres.
Il n'y a pas de table d'état de campagne à consulter. Si le run meurt avant que les 200 ne se connectent, le TTL du pipe évince la moitié inachevée et le prochain tick cron re-rend. Pas de double livraison, pas de batch à moitié envoyé à réconcilier.
Le script se réveille une fois par semaine, tourne quatre secondes, et le conteneur retourne en idle. Vous payez les quatre secondes — pas un service de campagne toujours actif, pas une facture SES par destinataire, pas un siège Mailchimp.
Mêmes 200 destinataires, même corps de digest. C'est la forme du run qui bouge — de minutes-de-SMTP-série à secondes-de-HTTP-parallèle.
Temps mural du tick cron à la dernière livraison. Le pipe stream vers les 200 récepteurs en parallèle ; le goulot devient le SMTP de l'abonné le plus lent, pas la boucle.
Le corps du digest est calculé une seule fois. Le pipe transmet les mêmes octets à chaque récepteur — pas de re-rendu de template par destinataire, pas de facturation par destinataire, pas de cache par destinataire.
L'API Hoody Pipe plafonne n à 256. Un digest hebdomadaire à 200 reste confortablement sous le plafond — et un lecteur lent applique de la backpressure mais ne bloque pas les autres.
Limites selon l'API Hoody Pipe : nombre de récepteurs 1–256, TTL pipe de 5 minutes en attente de connexions, 1000 transferts actifs au niveau serveur. L'entrée cron elle-même est une ligne dans /users/root/entries avec schedule, command et un expires_at optionnel.
Quatre moments. Chacun est un seul appel HTTP que vous feriez à la main. Le cron est le réveil ; exec est le moteur de rendu ; le pipe est le câble ; la boucle est la seule chose que l'agent écrit.
L'entrée managée sur /users/root/entries se déclenche. Schedule : 0 9 * * 1. Command : bash /scripts/digest.sh. La crontab elle-même est un seul enregistrement JSON — pas un DAG Airflow, pas un service de workflow.
Le script exec tire les données de la semaine, rend le markdown, convertit en HTML, et écrit le corps sur stdout. Un rendu, un payload — pas de boucle de mail-merge par destinataire.
Le script pipe stdout dans curl -T - contre pipe/digest-monday?n=200. Le pipe retient l'upload jusqu'à ce que 200 récepteurs se connectent, puis stream le corps à chacun en parallèle.
Deux cents boucles font un curl sur le même chemin et remettent le corps au SMTP de leur abonné. Les lents reçoivent de la backpressure. Les rapides finissent en millisecondes. Tout le run est terminé en quelques secondes.
Une entrée cron, un conteneur, deux cents destinataires.
Les outils standards vers lesquels vous vous tournez quand vous voulez envoyer le même email à une liste. Chacun vous facture un palier de service pour ce qui est, au final, un rendu et une boucle HTTP de diffusion.
Lundi à 9h voulait dire un worker qui broyait du SMTP. Maintenant ça veut dire un tick cron, un conteneur, et un pipe qui fait le reste.