Aprendé los patrones clave para orquestar múltiples microservicios basados en eventos, asegurando consistencia y trazabilidad.
Cuando los sistemas crecen, una arquitectura basada en eventos puede volverse difícil de coordinar. Surgen preguntas como: ¿qué pasa si un evento falla?, ¿cómo asegurar consistencia entre servicios?, ¿cómo depurar una cadena de eventos?
El patrón Saga permite coordinar una transacción distribuida a través de eventos. Cada servicio realiza una acción y publica un nuevo evento para el siguiente paso.
Ejemplo: proceso de pago en un marketplace
PedidosService publica pedido.creadoPagosService escucha, cobra y emite pago.confirmadoEnviosService escucha pago.confirmado y despacha el productoSi un paso falla (por ejemplo, el pago), se dispara una compensación (cancelar pedido).
// PagosService
try {
$this->procesarPago($pedidoId);
$broker->publicar('pagos', json_encode(['tipo' => 'pago.confirmado', 'pedido_id' => $pedidoId]));
} catch (Exception $e) {
$broker->publicar('pagos', json_encode(['tipo' => 'pago.fallido', 'pedido_id' => $pedidoId]));
}
Registrar todos los eventos en una tabla event_log ayuda a depurar flujos y evitar pérdidas:
DB::table('event_log')->insert([
'tipo' => $evento['tipo'],
'payload' => json_encode($evento),
'fecha' => now(),
]);
También se puede usar OpenTelemetry para visualizar la cadena completa de eventos.
Cada microservicio debe procesar eventos una sola vez aunque lleguen duplicados.
Se logra registrando un event_id único y evitando reprocesamiento.
tipo, id, timestamp, payload)trace_id)En resumen, orquestar eventos correctamente permite construir sistemas escalables, resilientes y auditables, con un flujo de negocio claro incluso en entornos distribuidos.
Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.