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.