En una arquitectura de microservicios tradicional basada en HTTP, cada servicio debe conocer las rutas y contratos del resto. Esto genera acoplamiento, problemas de escalabilidad y dependencias difíciles de mantener. La Event-Driven Architecture (EDA) propone otra forma: los microservicios se comunican a través de eventos, sin saber quién los recibe.
¿Qué es un evento?
Un evento representa algo que ocurrió en el sistema, por ejemplo: “un usuario se registró”, “una factura fue pagada” o “un pedido fue enviado”. Los servicios publican esos eventos en un broker de mensajes (Kafka, RabbitMQ, Redis Streams, etc.) y otros servicios los suscriben para reaccionar.
Caso real: facturación automática
Supongamos una app de e-commerce. Tenemos dos microservicios:
PedidosServiceFacturacionService
Cuando un pedido se completa, el servicio de pedidos publica un evento:
// PedidosService
$evento = [
'tipo' => 'pedido.completado',
'datos' => ['pedido_id' => 153, 'usuario_id' => 21]
];
$broker->publicar('pedidos', json_encode($evento));
Luego, el servicio de facturación escucha la cola pedidos:
// FacturacionService
$broker->suscribirse('pedidos', function (string $mensaje) {
$evento = json_decode($mensaje, true);
if ($evento['tipo'] === 'pedido.completado') {
$this->generarFactura($evento['datos']['pedido_id']);
}
});
Así, FacturacionService no conoce al servicio de pedidos. Solo reacciona a eventos.
Esto permite agregar nuevos servicios (por ejemplo, NotificacionesService) sin tocar código existente.
Ventajas
- Bajo acoplamiento entre microservicios
- Escalabilidad horizontal más simple
- Tolerancia a fallos
- Extensibilidad sin afectar lo existente
EDA es la base de sistemas como Uber, Netflix o Mercado Libre, donde los servicios intercambian millones de eventos por segundo.