
Sessenta contêineres em um servidor
Uma caixa bare-metal executa dezenas a centenas de contêineres Hoody. KSM e BTRFS dedup fazem o custo marginal próximo a zero.
O Serviço A envia sua saída para um caminho. O Serviço B puxa do mesmo caminho. O pipe roteia bytes entre os dois contêineres em tempo real. Sem Redis, sem grupo de consumidores, sem daemon de broker para cuidar.
POST in. GET out. O salto do meio é uma URL.
Dois verbos HTTP e um caminho. Qualquer lado pode conectar primeiro; o pipe espera até cinco minutos pela contraparte e então transmite os bytes. Sem fila, sem offset, sem grupo.
Produtor offline? O consumidor faz GET e espera. Consumidor offline? O produtor faz PUT e espera. O pipe segura a conexão por até cinco minutos até a contraparte chegar.
Quando o consumidor está lento, o kernel desacelera o stream do produtor. Sem profundidade de fila para monitorar, sem high-watermark para ajustar. O socket é o buffer.
O trade-off honesto: nada é persistido. Para enfileiramento durável, não é isso. Para fan-out rápido entre contêineres, o broker simplesmente desapareceu.
# Container A — producer streams jobs to the pipe
service-a | curl -T - https://api.hoody.com/api/v1/pipe/jobs
# Container B — consumer reads from the same path
curl https://api.hoody.com/api/v1/pipe/jobs | service-b
# Either side can connect first.
# The pipe holds the connection up to 5 minutes
# until the counterpart arrives, then streams through.PUT (ou POST) envia. GET recebe. Os bytes não pousam em disco em lugar nenhum — eles atravessam a rede do produtor para o consumidor com o pipe encaminhando em tempo real.
Quando um logger ou um coletor de métricas precisa dos mesmos eventos, aumente ?n e adicione um curl. Sem config de broker, sem grupo de consumidores, sem segredo de auth para rotacionar. O novo leitor simplesmente existe.
Um leitor lento aplica backpressure ao produtor; ele não bloqueia os outros. Até 256 leitores por caminho.
O broker existia porque dois contêineres não conseguiam falar diretamente. Com o pipe, eles conseguem. Tudo o que o broker adicionava — auth, clientes, ops — cai fora.
Nada para fazer deploy, monitorar ou atualizar. O pipe é a plataforma; a URL é a única API.
Um único token Hoody, escopado por projeto. Sem usuário, senha ou arquivo ACL por broker.
Qualquer coisa que fale HTTP pode produzir ou consumir — bash, Python, Go, um celular, um navegador. Sem biblioteca cliente.
Mensagens vivem em trânsito, não em repouso. Sem disco para encher, sem política de retenção, sem questão de LGPD sobre dados enfileirados.
TCP desacelera o produtor quando o consumidor mais lento fica para trás. Sem dashboards de lag porque não há lag — só taxa de stream.
Produtor e consumidor nunca veem os IPs um do outro. Eles compartilham uma URL. Mova qualquer um para outro host sem reconfigurar nada.
O broker é a URL. A URL é o broker.
A camada do meio colapsa. O que era um daemon stateful com credenciais, clientes e um runbook agora é um caminho. O diagrama de arquitetura tem uma caixa a menos.
uma URL, um curl, um verbo HTTP
A infraestrutura que os times usam quando um contêiner precisa entregar bytes para outro. Cada uma adiciona um daemon, uma config e uma escala de plantão. O pipe não cobra nada disso.
Subir o Redis para falar entre dois contêineres? Ou compartilhar uma URL.