
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.
Service A pipet seinen Output an einen Pfad. Service B zieht vom selben Pfad. Die Pipe routet Bytes zwischen den beiden Containern in Echtzeit. Kein Redis, keine Consumer Group, kein Broker-Daemon zum Babysitten.
POST rein. GET raus. Der mittlere Sprung ist eine URL.
Zwei HTTP-Verben und ein Pfad. Beide Seiten können sich zuerst verbinden; die Pipe wartet bis zu fünf Minuten auf das Gegenstück und streamt dann die Bytes durch. Keine Queue, kein Offset, keine Group.
Producer offline? Consumer macht GET und wartet. Consumer offline? Producer macht PUT und wartet. Die Pipe hält die Verbindung bis zu fünf Minuten, bis das Gegenstück da ist.
Wenn der Consumer langsam ist, bremst der Kernel den Stream des Producers. Keine Queue-Tiefe zu monitoren, kein Hochwassermarker zum Tunen. Der Socket ist der Buffer.
Der ehrliche Trade-off: nichts wird persistiert. Für dauerhafte Queues ist das nichts. Für schnelles Container-zu-Container-Fan-out ist der Broker einfach verschwunden.
# Container A — producer streamt Jobs an die Pipe
service-a | curl -T - https://api.hoody.com/api/v1/pipe/jobs
# Container B — consumer liest vom selben Pfad
curl https://api.hoody.com/api/v1/pipe/jobs | service-b
# Beide Seiten können sich zuerst verbinden.
# Die Pipe hält die Verbindung bis zu 5 Minuten
# bis das Gegenstück da ist, dann streamt sie durch.PUT (oder POST) sendet. GET empfängt. Bytes landen nirgendwo auf einer Festplatte — sie überqueren die Leitung von Producer zu Consumer, während die Pipe im Flug weiterleitet.
Wenn ein Logger oder ein Metriken-Sammler dieselben Events braucht, erhöhe ?n und füge einen curl hinzu. Keine Broker-Config, keine Consumer Group, kein Auth-Secret zum Rotieren. Der neue Leser existiert einfach.
Ein langsamer Leser legt Backpressure auf den Producer; er blockiert die anderen nicht. Bis zu 256 Leser pro Pfad.
Den Broker gab es, weil zwei Container nicht direkt miteinander reden konnten. Mit der Pipe können sie es. Alles, was der Broker dazugepackt hat — Auth, Clients, Ops — fällt weg.
Nichts zum Deployen, Monitoren oder Upgraden. Die Pipe ist die Plattform; die URL ist die einzige API.
Ein Hoody-Token, pro Projekt scoped. Kein Pro-Broker-Username, kein Passwort, keine ACL-Datei.
Alles, was HTTP spricht, kann produzieren oder konsumieren — bash, Python, Go, ein Handy, ein Browser. Keine Client-Library.
Nachrichten leben im Flug, nicht auf der Festplatte. Keine Disk zum Vollschreiben, keine Aufbewahrungs-Policy, keine DSGVO-Frage zu Daten in der Queue.
TCP bremst den Producer, wenn der langsamste Consumer hinterherhängt. Keine Lag-Dashboards, weil es keinen Lag gibt — nur Stream-Rate.
Producer und Consumer sehen nie die IPs des anderen. Sie teilen sich eine URL. Verschieb einen davon auf einen anderen Host, ohne neu zu verkabeln.
Der Broker ist die URL. Die URL ist der Broker.
Die mittlere Schicht kollabiert. Was vorher ein stateful Daemon mit Credentials, Clients und Runbook war, ist jetzt ein Pfad. Das Architekturdiagramm hat eine Box weniger.
eine URL, ein curl, ein HTTP-Verb
Die Infrastruktur, zu der Teams greifen, wenn ein Container Bytes an einen anderen weiterreichen muss. Jede davon kommt mit einem Daemon, einer Config und einer On-Call-Rotation. Die Pipe verlangt nichts davon.
Redis aufsetzen, damit zwei Container miteinander reden? Oder eine URL teilen.