Ir al contenido
use-cases / inter-container-ipc-without-the-broker / hero
PIPE · CONTENEDOR-A-CONTENEDOR

IPC entre contenedores sin el broker

El servicio A pipea su salida a una ruta. El servicio B la lee de la misma ruta. El pipe encamina los bytes entre los dos contenedores en tiempo real. Sin Redis, sin consumer group, sin demonio broker que cuidar.

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

Cómo el pipe reemplaza al broker

Dos verbos HTTP y una ruta. Cualquier lado puede conectarse primero; el pipe espera hasta cinco minutos al contraparte y luego transmite los bytes. Sin cola, sin offset, sin grupo.

01 · HANDSHAKE

Cualquier lado puede conectarse primero

¿Productor offline? El consumidor hace GET y espera. ¿Consumidor offline? El productor hace PUT y espera. El pipe mantiene la conexión hasta cinco minutos hasta que llegue el contraparte.

02 · BACKPRESSURE

La conexión TCP es la cola

Cuando el consumidor es lento, el kernel ralentiza el stream del productor. Sin profundidad de cola que monitorizar, sin high-watermark que ajustar. El socket es el buffer.

03 · SIN ESTADO

Olvida los mensajes una vez entregados

El trade-off honesto: nada se persiste. Para colas duraderas, no es esto. Para fan-out rápido entre contenedores, el broker acaba de desaparecer.

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 (o POST) envía. GET recibe. Los bytes no aterrizan en disco en ninguna parte — cruzan el cable del productor al consumidor con el pipe reenviando en vuelo.

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

Añade un tercer lector. Luego un cuarto.

Cuando un logger o un colector de métricas necesita los mismos eventos, sube ?n y añade un curl. Sin config de broker, sin consumer group, sin secret de auth que rotar. El nuevo lector simplemente existe.

pipe/jobs · lectores?n=4 · TODO FAN-OUT
  • + AÑADIDO
    consumer-aloggermetricsaudit
    curl ?n=4 — se une al fan-out
  • = ESTABLE
    producer
    service-a | curl -T - ?n=4
  • − ELIMINADO
    redisconsumer-group.ymlbroker.conf
    sin broker, sin config

Un lector lento aplica backpressure al productor; no bloquea a los demás. Hasta 256 lectores por ruta.

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

Lo que la URL te da que el broker te quitaba

El broker existía porque dos contenedores no podían hablar directamente. Con el pipe, sí pueden. Todo lo que el broker añadía — auth, clientes, ops — desaparece.

  • Sin demonio que operar

    Nada que desplegar, monitorizar o actualizar. El pipe es la plataforma; la URL es la única API.

  • Auth bearer, no credenciales de broker

    Un token Hoody, con scope por proyecto. Sin usuario, contraseña o ACL por broker.

  • Mismo cable, cualquier lenguaje

    Cualquier cosa que hable HTTP puede producir o consumir — bash, Python, Go, un móvil, un navegador. Sin librería cliente.

  • Sin estado persistido

    Los mensajes viven en vuelo, no en reposo. Sin disco que llenar, sin política de retención, sin pregunta GDPR sobre datos en cola.

  • La backpressure es el protocolo

    TCP ralentiza al productor cuando el consumidor más lento se queda atrás. Sin dashboards de lag porque no hay lag — solo tasa de stream.

  • Los contenedores se mantienen desacoplados

    Productor y consumidor nunca se ven las IPs. Comparten una URL. Mueve cualquiera a otro host sin reconfigurar nada.

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

El broker es la URL. La URL es el broker.

La capa intermedia colapsa. Lo que solía ser un demonio con estado, con credenciales, clientes y un runbook, ahora es una ruta. El diagrama de arquitectura tiene una caja menos.

ESTABA AHÍ
  • redis clusterauth, réplicas, failover
  • consumer-group.ymloffsets, particiones
  • SDK del broker en cada serviciolib cliente por lenguaje
ESTÁ AHÍ
/api/v1/pipe/jobs

una URL, un curl, un verbo HTTP

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

Lo que esto reemplaza

La infraestructura a la que recurren los equipos cuando un contenedor necesita pasar bytes a otro. Cada una añade un demonio, una config y una rotación de guardia. El pipe no cobra nada de eso.

  • Redis pub/subDemonio, auth, clientes por lenguaje
  • RabbitMQCluster que operar para bytes en vuelo
  • NATSOtro protocolo, otro sidecar
  • ZeroMQLibrería en cada servicio, sin URL
  • Demonios de routing personalizadosServicio a medida que mantener vivo
  • Servicios gRPC streamingEsquema, codegen, sobrecarga de TLS mutuo
  • Brokers Apache KafkaCapa de almacenamiento para mensajes que no guardas
use-cases / inter-container-ipc-without-the-broker / cta

¿Levantar Redis para hablar entre dos contenedores? O comparte una URL.

Mira la API del pipe
use-cases / inter-container-ipc-without-the-broker / related

Lee los otros