Pular para o conteúdo
use-cases / inter-container-ipc-without-the-broker / hero
PIPE · CONTÊINER PARA CONTÊINER

IPC entre contêineres sem o broker

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.

use-cases / inter-container-ipc-without-the-broker / mechanism

Como o pipe substitui o broker

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.

01 · HANDSHAKE

Qualquer lado pode conectar primeiro

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.

02 · BACKPRESSURE

A conexão TCP é a fila

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.

03 · STATELESS

Esquece mensagens uma vez entregues

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.

producer.sh · consumer.sh
# 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.

use-cases / inter-container-ipc-without-the-broker / fanout

Adicione um terceiro leitor. Depois um quarto.

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.

pipe/jobs · leitores?n=4 · TODOS NO FAN-OUT
  • + ADICIONADO
    consumer-aloggermetricsaudit
    curl ?n=4 — entra no fan-out
  • = ESTÁVEL
    producer
    service-a | curl -T - ?n=4
  • − REMOVIDO
    redisconsumer-group.ymlbroker.conf
    sem broker, sem config

Um leitor lento aplica backpressure ao produtor; ele não bloqueia os outros. Até 256 leitores por caminho.

use-cases / inter-container-ipc-without-the-broker / advantages

O que a URL te dá que o broker tirava

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.

  • Sem daemon para operar

    Nada para fazer deploy, monitorar ou atualizar. O pipe é a plataforma; a URL é a única API.

  • Auth bearer, não credenciais de broker

    Um único token Hoody, escopado por projeto. Sem usuário, senha ou arquivo ACL por broker.

  • Mesmo wire, qualquer linguagem

    Qualquer coisa que fale HTTP pode produzir ou consumir — bash, Python, Go, um celular, um navegador. Sem biblioteca cliente.

  • Sem estado persistido

    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.

  • Backpressure é o protocolo

    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.

  • Contêineres permanecem desacoplados

    Produtor e consumidor nunca veem os IPs um do outro. Eles compartilham uma URL. Mova qualquer um para outro host sem reconfigurar nada.

use-cases / inter-container-ipc-without-the-broker / punchline

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.

ESTAVA AÍ
  • cluster redisauth, réplicas, failover
  • consumer-group.ymloffsets, partições
  • SDK de broker em cada serviçolib cliente por linguagem
ESTÁ AÍ
/api/v1/pipe/jobs

uma URL, um curl, um verbo HTTP

use-cases / inter-container-ipc-without-the-broker / replaces

O que isto substitui

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.

  • Redis pub/subDaemon, auth, clientes por linguagem
  • RabbitMQCluster para operar para bytes em trânsito
  • NATSOutro protocolo, outro sidecar
  • ZeroMQBiblioteca em cada serviço, sem URL
  • Daemons de roteamento customServiço sob medida para manter no ar
  • Serviços gRPC streamingSchema, codegen, overhead de mTLS
  • Brokers Apache KafkaCamada de armazenamento para mensagens que você não guarda
use-cases / inter-container-ipc-without-the-broker / cta

Subir o Redis para falar entre dois contêineres? Ou compartilhar uma URL.

Veja a API do pipe
use-cases / inter-container-ipc-without-the-broker / related

Leia os outros