
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.
Il est 14h. L'incident de 7h fait l'objet d'un post-mortem. Six ingénieurs veulent parcourir la séquence exacte de logs vue par le SRE d'astreinte au moment des faits. Vous diffusez le snapshot via une seule URL Hoody Pipe avec ?n=8. Tout le monde regarde la cascade se dérouler sur son propre terminal au même instant — pas de captures d'écran, pas de scroll désynchronisé, pas d'enregistrement Zoom.
Prenez le fichier de logs au moment de l'incident de ce matin depuis votre snapshot hoody-files. Diffusez-le via un chemin Hoody Pipe avec ?n=8. Huit ingénieurs font curl sur le même chemin. Le pipe attend que tout le monde soit connecté, puis les octets passent une seule fois au rythme que vous fixez — chaque lecteur voit la même ligne au même instant.
# The 7am incident is captured in incident-2026-05-04.log
# (snapshotted from /var/log/app at 07:25 by the on-call SRE).
# Replay it through a pipe path with ?n=8 — the server waits
# until eight readers connect, then the bytes move through once.
# pv -L 50k rate-limits the replay to a readable 50KB/s.
cat incident-2026-05-04.log \
| pv -L 50k \
| curl -T - \
"https://prod-pipe.containers.hoody.com/api/v1/pipe/replay?n=8"
# [INFO] Waiting for 8 receiver(s) to connect...
# [INFO] Streaming to 8 receiver(s) at 50.0 KB/s# Each engineer in the post-mortem call runs the same line.
# They block until everyone has joined, then the cascade scrolls
# past their terminal at the exact rate the SRE saw at 07:23.
curl "https://prod-pipe.containers.hoody.com/api/v1/pipe/replay?n=8"
# 07:23:14 INFO POST /v1/checkout u_28f
# 07:23:15 WARN stripe latency 2.4s
# 07:23:16 ERR 500 stripe timeout
# 07:23:17 ··· auto-rollback armed
# ...the whole cascade, in order, on every terminal at once.Deux pièces de l'API Pipe documentée : PUT /api/v1/pipe/[path] côté expéditeur, GET /api/v1/pipe/[path] côté chaque lecteur, les deux indexés par le même n. Le serveur transfère le Content-Type de l'expéditeur, garde la connexion ouverte jusqu'à un TTL de 5 minutes en attendant les lecteurs, et applique de la backpressure si un lecteur est lent. Le rythme du rejeu est entièrement fixé par l'expéditeur — pv, dd, ou tout limiteur de débit en qui vous avez confiance.
Un flux qui défile change la conversation. Les gens cessent de débattre de ce qui s'est passé et commencent à regarder ce qui s'est passé. Trois propriétés du pipe rendent cela possible.
n=N est documenté dans l'API Pipe : chaque lecteur qui rejoint le même chemin avec le même n reçoit une copie identique en fan-out. Huit ingénieurs voient tous la même ligne défiler au même instant — personne n'est en avance, personne ne plisse les yeux sur le partage d'écran de quelqu'un d'autre.
Les vrais logs de prod défilent plus vite que les humains ne peuvent absorber. pv -L 50k limite le rejeu à un rythme lisible ; le pipe transporte le débit que l'expéditeur choisit. Vous pouvez mettre le post-mortem en pause par ctrl-Z sur l'expéditeur et reprendre par fg — le terminal de chaque lecteur se met en pause avec vous.
Le pipe ne stocke aucun octet. Quand le cat se termine ou que le SRE fait ctrl-C sur l'expéditeur, le chemin se ferme — pas d'endpoint résiduel exposé sur Internet, pas de transcription à gérer en rétention. Relancez-le depuis le snapshot pour qui a rejoint l'appel en retard.
Quatre temps depuis les logs au moment de l'incident jusqu'au rejeu partagé du post-mortem. Rien ici n'est de l'infrastructure sur mesure — le snapshot vit dans hoody-files, le rejeu chevauche une seule URL Pipe.
Le SRE d'astreinte copie /var/log/app à 07:25 dans un bucket hoody-files. Le fichier est la source de vérité pour tout ce qui s'est passé dans la fenêtre de cascade.
Le lead écrit une URL Hoody Pipe avec ?n=8 (six ingénieurs + marge pour deux retardataires) et la colle dans le canal du post-mortem. Les destinataires peuvent se connecter en premier — le pipe garde la place jusqu'à 5 minutes.
Le SRE envoie le snapshot via pv -L 50k dans l'URL. Le serveur attend que huit curl soient connectés, puis les octets passent une seule fois en lockstep — la cascade se déclenche sur six terminaux au même instant.
Le directeur arrive en retard. Relancez la même ligne. Le pipe est un chemin, pas un endroit — il n'y a rien à chercher, rien à rembobiner, rien de stocké sur le serveur. Il suffit d'appuyer à nouveau sur lecture.
D'après la spécification documentée de l'API Pipe. Limites et comportements qui transforment une seule URL en théâtre de post-mortem.
Plafond documenté sur n. Votre appel de post-mortem ne sera jamais à court de places — le pipe passe à l'échelle d'une organisation entière.
Le pipe est diffusé en direct de bout en bout. Le rejeu ne laisse aucune trace sur le serveur quand l'expéditeur se déconnecte.
Les destinataires peuvent se connecter avant l'expéditeur ; le pipe garde la place jusqu'à 5 minutes pour les retardataires.
Source : API Hoody Pipe — limites documentées pour /api/v1/pipe/[path], paramètre n (1–256), et TTL de pipe non établi.
Le post-mortem n'est pas un document. C'est un flux que tout le monde regarde ensemble.
L'ensemble d'outils et de rituels que vous invoquez actuellement pour faire parcourir à une équipe la chronologie d'un incident. Chacun stocke quelque chose, facture par siège, ou perd le rythme. Le pipe est une seule URL avec une tête de lecture partagée.
La cascade se déclenche sur six terminaux en même temps. La conversation change. Les gens cessent de débattre de ce qui s'est passé et commencent à regarder ce qui s'est passé.