
Sechzig Container auf einem Server
Eine Bare-Metal-Box führt Dutzende bis Hunderte von Hoody-Containern aus. KSM und BTRFS-Dedup machen die Marginalkosten nahezu null.
Jeden Montag um 9 Uhr weckt ein Cron-Eintrag einen einzelnen Container. Das Skript rendert den Digest einmal und schreibt ihn auf eine Pipe-URL mit ?n=200. 200 Curl-Loops — einer pro Subscriber — ziehen dieselben Bytes parallel und übergeben sie an SMTP. Das Fan-out lebt im Substrat, nicht in deinem Code.
Dein Montags-Digest — 4 Dinge, die diese Woche einen Klick wert sind
Bonds rallyten auf weichere Payrolls; die Kurve un-invertete am vorderen Ende. Wir flaggen zwei Namen mit Earnings, die der Markt falsch bepreist.
Zwei Charts: wöchentliche Net-Flows in AI-Infra-ETFs und ein CPI-Breakdown, der der Headline widerspricht.
Leseliste: ein langer Artikel über Private Credit und eine scharfe Notiz darüber, warum der Zinszyklus kürzer als der von 2008 ist.
→ Den vollständigen Digest öffnen
0 9 * * 1 bash /scripts/digest.shEIN AUFWACHEN · EIN RENDER · ZWEIHUNDERT PARALLELE PULLS
Die Hoody Cron API droppt eine 5-Feld-Crontab-Zeile in einen Managed Entry. Die Zeile führt ein Exec-Skript aus, das den Digest einmal rendert und ihn auf einen Pipe-Pfad mit n=200 schiebt. 200 Subscriber-Loops ziehen denselben Pfad parallel — der Server hält nichts, und ein langsamer Reader kann den Rest nicht blockieren.
Der Cron wurde nicht komplexer. Das Fan-out wurde ins Substrat verlegt — die Pipe hält nichts, das Skript rendert einmal, und der Loop ist nur SMTP an der Edge. Keine Queue, keine Retry-Tabelle, kein Campaign-Tool-Seat.
Das naive Design loopt 200 SMTP-Sends seriell, dauert 11 Minuten und liefert doppelt aus, wenn es auf halber Strecke crasht. Die Pipe-Form gibt dir Parallelität, Idempotenz und einen kleineren Container — gratis.
Der Digest wird genau einmal gebaut. 200 Curl-Loops ziehen dieselben Bytes simultan. Ein 4-Sekunden-Lauf ersetzt einen 11-Minuten-Serial-Loop — die Pipe wendet Backpressure auf langsame Reader an, ohne den Rest zu blockieren.
Es gibt keine Campaign-State-Tabelle zu konsultieren. Wenn der Lauf stirbt, bevor alle 200 verbinden, evict die Pipe-TTL die unfertige Hälfte und der nächste Cron-Tick rendert neu. Keine Doppelzustellung, kein halb-gesendeter Batch zum Versöhnen.
Das Skript wacht einmal pro Woche auf, läuft vier Sekunden, und der Container geht zurück in Idle. Du zahlst für die vier Sekunden — nicht für einen Always-on-Campaign-Service, nicht für eine Per-Recipient-SES-Rechnung, nicht für einen Mailchimp-Seat.
Gleiche 200 Empfänger, gleicher Digest-Body. Die Form des Laufs ist das, was sich bewegt — von Minuten-of-Serial-SMTP zu Sekunden-of-Parallel-HTTP.
Wall-Clock-Zeit von Cron-Tick bis zur letzten Zustellung. Die Pipe streamt parallel an alle 200 Receiver; der Bottleneck wird zum SMTP des langsamsten Subscribers, nicht zum Loop.
Der Digest-Body wird einmal berechnet. Die Pipe forwardet dieselben Bytes an jeden Receiver — kein Template-Re-Render pro Empfänger, kein Per-Recipient-Billing, kein Per-Recipient-Cache.
Die Hoody Pipe API capt n bei 256. Ein wöchentlicher Digest mit 200 sitzt komfortabel unter der Decke — und ein langsamer Reader wendet Backpressure an, blockiert aber die anderen nicht.
Limits gemäß Hoody Pipe API: Receiver-Anzahl 1–256, 5-Minuten-Pipe-TTL für das Warten auf Verbindungen, 1000 aktive Transfers serverweit. Der Cron-Eintrag selbst ist eine Zeile in /users/root/entries mit schedule, command und einem optionalen expires_at.
Vier Momente. Jeder davon ist ein einzelner HTTP-Call, den du von Hand machen würdest. Cron ist der Wecker; Exec ist der Renderer; Pipe ist die Wire; der Loop ist das Einzige, was der Agent schreibt.
Der Managed Entry auf /users/root/entries feuert. Schedule: 0 9 * * 1. Command: bash /scripts/digest.sh. Die Crontab selbst ist ein einzelner JSON-Record — kein Airflow-DAG, kein Workflow-Service.
Das Exec-Skript zieht die Daten der Woche, rendert das Markdown, konvertiert zu HTML und schreibt den Body auf stdout. Ein Render, ein Payload — kein Per-Recipient-Mail-Merge-Loop.
Das Skript pipet stdout in curl -T - gegen pipe/digest-monday?n=200. Die Pipe hält den Upload, bis 200 Receiver verbinden, dann streamt sie den Body parallel an alle.
200 Loops curlen denselben Pfad und übergeben den Body an das SMTP ihres Subscribers. Die langsamen bekommen Backpressure. Die schnellen sind in Millisekunden fertig. Der ganze Lauf ist in Sekunden vorbei.
Ein Cron-Eintrag, ein Container, 200 Empfänger.
Die Standard-Greift-Tools, wenn du dieselbe Email an eine Liste senden willst. Jedes davon stellt dir eine Service-Stufe in Rechnung für das, was am Ende ein Render und ein Fan-out-HTTP-Loop ist.
Montag um 9 hieß früher: ein Worker, der sich durch SMTP grindet. Jetzt heißt es: ein Cron-Tick, ein Container und eine Pipe, die den Rest macht.