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

Sincrónico
Una conversación directa y en tiempo real donde quien llama espera una respuesta inmediata.
| Protocolo | Mejor para | Problemas comunes |
|---|---|---|
| REST | APIs web/móvil | Versionado, overfetching |
| GraphQL | Necesidades complejas de datos del cliente | Complejidad de consultas |
| gRPC | Microservicios (internos) | Debugging de formato binario |
| SOAP | Integraciones empresariales | Complejidad de XML |
- Usalo cuando lidiás con escenarios de éxito/fracaso, como pasarelas de pago o flujos de autenticación de usuario.
- Evitalo para tareas largas, imaginate esperar 10 minutos a que cargue una página web.
Asincrónico
Comunicación asincrónica a través de message brokers. Los sistemas tiran mensajes en un "buzón digital" y siguen con lo suyo.
| Tecnología | Fortaleza | Peculiaridad |
|---|---|---|
| RabbitMQ | Enrutamiento flexible de mensajes | Necesita tunear colas |
| Kafka | Streaming de eventos de alto volumen | Configuración compleja |
| AWS SQS | Simplicidad serverless | Bloqueo de proveedor |
| Redis Pub/Sub | Notificaciones en tiempo real | Sin persistencia |
- Brilla en escenarios como:
- Procesamiento de pedidos ("Gracias por tu compra, te enviaremos un correo cuando lo despachemos")
- Sincronización de datos entre sistemas ("Actualizar el CRM durante la noche")
- Arquitecturas basadas en eventos ("Usuario se registró → enviar correo 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 ya se vendió").
Comparación
| Criterio | Sincrónico | Asincrónico |
|---|---|---|
| Latencia | Necesita respuesta inmediata | Retraso tolerable (segundos-minutos) |
| Manejo de errores | Falla rápido | Colas de reintento |
| Acoplamiento | Ajustado (conoce al receptor) | Suelto (a través del broker) |
| Escalabilidad | Limitado por quien llama | Escalado independiente |
| Complejidad | Simple de implementar | Garantías de entrega complejas |
| Costo | Consume muchos recursos (esperando) | Eficiente (no espera) |
La mayoría de los sistemas que vas a encontrar usan una mezcla. Recordá:
- La infraestructura existente de tu empresa va a influir un montón en las decisiones (no vas a reescribir jobs por lotes de COBOL a streams de Kafka).
- Los patrones de comunicación a menudo sobreviven a los sistemas mismos.
- Cuando te unís a un equipo, preguntá: "¿Qué pasa si el Sistema A estornuda?" La respuesta revela su filosofía de comunicación entre sistemas.
Ahora que estás armado con este conocimiento, nunca vas a ver un error de "Connection timed out" de la misma manera.