
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.
Ein 200-GB-Postgres-Backup in Frankfurt. Eine frische Box in Singapur. Du sparst dir den S3-Round-Trip. Ein curl pipet pg_dump in eine Hoody-Pipe-URL; ein curl auf der anderen Seite streamt ihn direkt in psql. Bytes fliegen, sie ruhen nie.
200 GB · null Hops · null Hold
Hoody Pipe ist ein benannter Pfad auf einem HTTP-Server. Der Sender PUTet einen Stream darauf, der Empfänger GETet denselben Pfad, und der Server spliced die beiden zusammen. Nichts wird auf Disk geschrieben; die Pipe hält per Design null Bytes.
Von der Quell-Box: pg_dump | gzip | curl -T - auf die Pipe-URL. Der PUT-Body streamt so schnell, wie TCP-Backpressure es zulässt. Der Server hält die Verbindung, bis ein Empfänger auf demselben Pfad auftaucht.
PUT /api/v1/pipe/migrationSobald der GET des Empfängers auf demselben Pfad landet, spliced Hoody die Bytes des Uploads direkt in die Response des Downloads. Kein Buffer, kein On-Disk-Staging, kein Async-Commit — nur ein direkter Stream zwischen zwei HTTP-Sockets.
0 Bytes auf DiskVon der Ziel-Box: curl GETet den Pfad und pipet die Response durch gunzip | psql. Der Empfänger-Stream endet in der Sekunde, in der das letzte Byte des Senders landet. Kein Retry, kein Manifest, kein Cleanup.
GET /api/v1/pipe/migrationDie Verbindungs-Reihenfolge ist egal — der Empfänger kann zuerst curlen und blockieren, bis der Sender verbindet (oder umgekehrt), bis zur 5-Minuten-Pipe-TTL. Backpressure fließt Ende-zu-Ende: ein langsames psql drosselt das curl auf der Quelle. Es gibt keine Queue, die überlaufen kann, weil es keine Queue gibt.
Das ist kein Pseudocode. Öffne zwei Terminals auf den zwei Servern, führe je einen aus und sieh zu, wie ein 200-GB-Backup eine Cloud verlässt und in einer anderen landet.
PUT (curl -T) wird bevorzugt, weil curl so einen Stream hochladen will. POST funktioniert identisch — selber Pfad, selbe Statusmeldungen. Verwende ?n=N auf beiden Seiten, falls du denselben Dump an viele Empfänger fan-outen willst.
Ein dritter Laptop öffnet dieselbe Pipe-URL mit ?progress und bekommt einen Echtzeit-SSE-Feed mit Bytes-pro-Sekunde, ETA und verbundenen Empfängern. Spectaten verbraucht keinen Empfänger-Slot — fünfzig Teammitglieder können der Migration zusehen, ohne den n-Wert zu ändern oder den Transfer zu stören.
Der S3-Round-Trip sieht auf einem Whiteboard simpel aus. In Produktion ist es ein Stack beweglicher Teile, die alle pro Sekunde abrechnen. Die Pipe kollabiert den ganzen Stack in den Transport selbst.
S3, GCS, Azure Blob — der Round-Trip existiert nur, weil es keinen anderen Ort gab, um die Bytes zu parken. Die Pipe ist der Pfad. Es gibt keinen Bucket zum Provisionieren, mit Lifecycle-Regeln zu versehen oder hinterher zu putzen.
Egress beim Upload, Egress beim Download — zweimal. Mit der Pipe verlassen die Bytes Frankfurt und kommen in Singapur in einem Hop an. Du bezahlst die Sekunden, in denen die Verbindung offen war, nicht für Storage, den du morgen löschst.
Dein Monitoring versteht HTTP bereits. Genauso dein VPN, deine Firewall, dein Audit-Log. Keine neue IAM-Identität, kein neues SDK, kein neuer Failure-Mode — es ist ein curl-Befehl.
Die Geschwindigkeit ist Ende-zu-Ende durch die langsamere Verbindung begrenzt (Frankfurt-Egress, Singapur-Ingress, dein TCP-Window). Die Hoody-Pipe hält null Bytes — es gibt keinen Server-seitigen Storage; Backpressure fließt direkt zwischen den beiden Endpoints.
Zwei Terminals, eine URL, keine dritte Storage-Schicht.
Die ganze Migration hat dieselbe Form wie cat file | wc -l. Dass die zwei Pipes zufällig in verschiedenen Rechenzentren leben, ist ein Implementierungsdetail der URL.
Alles, was nur existiert, weil niemand einen HTTP-Pfad hatte, der streamt. Die Pipe kollabiert den gesamten Datenmigrations-Stack zu einem curl auf jeder Seite.
Lass den Bucket weg. Der Transport ist die URL.