Saltar al contenido principal

Comunicación entre Sistemas

Cuando los sistemas necesitan hablar, tienen dos formas fundamentales de comunicarse: sincrónicamente (esperando respuestas inmediatas) o asincrónicamente (disparar y olvidar). Entender esta división te va a ayudar a debuggear problemas, elegir tecnologías y explicar decisiones arquitectónicas a tu equipo.

SÍNCRONO                            ASÍNCRONO

Cliente Servidor Cliente Broker Servidor
│ │ │ │ │
├──petición──▶│ ├──publicar▶│ │
│ ...... │ │◀── ✓ ─────┤ │
│ (espera) │ │ │ (después) │
│ ...... │ │ ├──consumir▶│
│◀─respuesta──┤ │ │◀── ✓ ─────┤
│ │ │ │ │

Sincrónico

Una conversación directa en tiempo real donde el que llama espera una respuesta inmediata.

ProtocoloIdeal ParaDolores de Cabeza
RESTAPIs web/móvilesVersionado, overfetching
GraphQLDatos complejos del clienteComplejidad de queries
gRPCMicroservicios (internos)Debugging de formato binario
SOAPIntegraciones empresarialesComplejidad XML
  • Usalo para escenarios de éxito/fracaso, como pasarelas de pago o flujos de autenticación de usuarios.
  • Evitalo para tareas de larga duración, imaginá esperar 10 minutos a que cargue una página web.

Asincrónico

Comunicación async vía brokers de mensajes. Los sistemas tiran mensajes a un "buzón digital" y siguen de largo.

TecnologíaFortalezaPeculiaridad
RabbitMQRuteo flexible de mensajesNecesita tuning de colas
KafkaStreaming de eventos de alto volumenSetup complejo
AWS SQSSimplicidad serverlessVendor lock-in
Redis Pub/SubNotificaciones en tiempo realSin persistencia
  • Brilla en escenarios como:
    • Procesamiento de órdenes ("Gracias por tu compra, te mandamos un mail cuando se envíe")
    • Sincronización de datos entre sistemas ("Actualizar CRM esta noche")
    • Arquitecturas orientadas a eventos ("Usuario se registró → mandar mail de bienvenida").
  • Estate atento a problemas como:
    • Duplicación de mensajes ("¿Por qué les cobramos dos veces?")
    • Datos desactualizados ("El inventario dice que queda 1, pero en realidad está agotado").

Comparación

CriterioSincrónicoAsincrónico
LatenciaRespuesta inmediata necesariaDelay tolerable (segundos-min)
Manejo de ErroresFallar rápidoColas de reintento
AcoplamientoFuerte (conoce al receptor)Débil (vía broker)
EscalabilidadLimitada por quien llamaEscalado independiente
ComplejidadSimple de implementarGarantías de entrega complejas
CostoPesado en recursos (esperando)Eficiente (sin espera)

La mayoría de los sistemas que te vas a encontrar usan una mezcla. Recordá:

  1. La infraestructura existente de tu compañía va a influir fuertemente en las elecciones (no vas a reescribir jobs batch de COBOL en streams de Kafka).
  2. Los patrones de comunicación suelen sobrevivir a los sistemas mismos.
  3. Cuando te sumes a un equipo, preguntá: "¿Qué pasa cuando el Sistema A estornuda?" La respuesta revela la filosofía de comunicación de sus sistemas.

Ahora que estás armado con este conocimiento, nunca vas a mirar un error de "Connection timed out" de la misma manera.