Soixante conteneurs sur un seul serveur
Une seule machine bare-metal fait tourner des dizaines à des centaines de conteneurs Hoody. La déduplication KSM et BTRFS rend le coût marginal quasi nul.
Un backup Postgres de 200GB à Frankfurt. Une machine fraîche à Singapour. vous sautez l'aller-retour S3. Un curl pipe pg_dump vers une URL Hoody pipe ; un curl de l'autre côté stream directement dans psql. Les octets sont en vol, jamais au repos.
200GB · zéro saut · zéro stockage
Hoody Pipe est un chemin nommé sur un serveur HTTP. L'envoyeur PUT un stream dessus, le récepteur GET le même chemin, et le serveur splice les deux ensemble. Rien n'est écrit sur disque ; le pipe contient zéro octet par design.
Depuis la machine source, pg_dump | gzip | curl -T - vers l'URL pipe. Le corps PUT stream à la vitesse que la backpressure TCP autorise. Le serveur tient la connexion jusqu'à ce qu'un récepteur arrive sur le même chemin.
PUT /api/v1/pipe/migrationQuand le GET du récepteur atterrit sur le même chemin, Hoody splice les octets de l'upload directement dans la réponse du download. Pas de buffer, pas de staging sur disque, pas de commit async — juste un stream direct entre deux sockets HTTP.
0 octet sur disqueDepuis la machine destination, curl GET le chemin et pipe la réponse à travers gunzip | psql. Le stream côté récepteur termine à la seconde où le dernier octet de l'envoyeur arrive. Pas de retry, pas de manifest, pas de cleanup.
GET /api/v1/pipe/migrationL'ordre des connexions n'a pas d'importance — le récepteur peut curl en premier et bloquer jusqu'à ce que l'envoyeur se connecte (ou inversement), jusqu'au TTL pipe de 5 minutes. La backpressure flue de bout en bout : un psql lent ralentit le curl à la source. Il n'y a pas de file à déborder parce qu'il n'y a pas de file.
Ce n'est pas du pseudocode. Ouvrez deux terminaux sur les deux serveurs, lancez-en un sur chacun, et regardez un backup de 200GB quitter un cloud et atterrir dans un autre.
PUT (curl -T) est préféré parce que c'est ainsi que curl veut uploader un stream. POST marche identiquement — même chemin, mêmes messages de statut. Utilise ?n=N des deux côtés si vous devez fan-out le même dump à plusieurs récepteurs.
Un troisième laptop ouvre la même URL pipe avec ?progress et reçoit un flux SSE temps-réel d'octets-par-seconde, ETA, et récepteurs connectés. Spectater ne consomme pas un slot récepteur — cinquante coéquipiers peuvent regarder la migration sans changer la valeur n ni interférer avec le transfert.
L'aller-retour S3 a l'air simple sur un tableau blanc. En production c'est une pile de pièces mobiles qui facturent toutes à la seconde. Le pipe écrase toute la pile dans le transport lui-même.
S3, GCS, Azure Blob — l'aller-retour existe seulement parce qu'il n'y avait pas d'autre endroit où parquer les octets. Le pipe est le chemin. Il n'y a pas de bucket à provisionner, à configurer en lifecycle ou à scrub après coup.
Egress sur l'upload, egress sur le download — deux fois. Avec le pipe les octets quittent Frankfurt et arrivent à Singapour en un saut. vous payez pour les secondes où la connexion était ouverte, pas pour du stockage que vous supprimeras demain.
votre monitoring comprend déjà HTTP. votre VPN, votre firewall, votre journal d'audit aussi. Pas de nouvelle identité IAM, pas de nouveau SDK, pas de nouveau mode d'échec — c'est une commande curl.
La vitesse est limitée par le maillon le plus lent de bout en bout (egress Frankfurt, ingress Singapour, votre fenêtre TCP). Le pipe Hoody ne contient zéro octet — il n'y a pas de stockage côté serveur ; la backpressure flue directement entre les deux endpoints.
Deux terminaux, une URL, pas de troisième couche de stockage.
Toute la migration a la même forme que cat file | wc -l. Le fait que les deux pipes vivent dans des datacenters différents est un détail d'implémentation de l'URL.
Tout ce qui existe seulement parce que personne n'avait un chemin HTTP qui stream. Le pipe écrase toute la stack de migration de données dans un curl de chaque côté.
Sautez le bucket. Le transport est l'URL.