Event sourcing para dashboards operativos: historial reconstruible
Un dashboard operativo suele necesitar algo más que el estado actual: el equipo quiere entender cómo llegó hasta allí, qué transiciones fallaron y de dónde salen los totales. Event sourcing registra cambios de dominio como un historial ordenado y duradero; las vistas se proyectan a partir de ese historial. Es útil cuando la auditoría o varias formas de consulta justifican el coste, no como sustituto automático de las tablas normales.
Publicado el 28 de septiembre de 202614 min de lecturaProyecciones operativas y auditoría
Mantén separado el log del modelo del dashboard
Registra cada hecho una vez y proyecta vistas específicas para las decisiones operativas
1 / ComandoValida una acción de negocio autorizada.
2 / EventoAñade el hecho con entidad y secuencia.
3 / ProyecciónConsume con idempotencia y actualiza la lectura.
4 / DashboardConsulta estado, volumen y antigüedad.
5 / ReplayReconstruye una proyección desde el historial.
Los eventos deben describir hechos como FacturaAprobada o AltaDeDispositivoFallida, no notificaciones vagas como “fila cambiada”. Incluye ID de evento y entidad, secuencia, horas del hecho y del registro, versión de esquema e IDs de correlación. Mantén los payloads pequeños y no copies secretos o datos personales innecesarios a un registro inmutable.
Modela las vistas según las preguntas de operación
Pregunta del equipo
Proyección
Indicador de vigencia
¿Qué tareas necesitan atención?
Estado actual, siguiente acción y responsable
Edad del evento pendiente y última actualización
¿Dónde se atascan los casos?
Duración por etapa y transición
Retraso de proyección y tiempo en estado
¿Qué cambió en este turno?
Resumen de eventos por período
Marca del último evento procesado
¿Cómo se explica una cifra?
Agregado con acceso a las entidades de origen
Versión y hora de generación de la vista
No hagas que cada carga del dashboard recorra todo el historial. Materializa proyecciones para consultas reales y muestra su última posición procesada para que los datos retrasados sean visibles. La vista puede reconstruirse, pero lleva tiempo; indica “actualizado hasta” en lugar de aparentar consistencia inmediata.
Haz que el procesamiento pueda recuperarse
Los consumidores deben tolerar entregas duplicadas mediante IDs de evento o checkpoints de secuencia por entidad. Define cómo tratar eventos desordenados, huecos, payloads dañados y cambios de esquema. Siempre que sea posible, confirma la proyección junto con el checkpoint; de lo contrario, un fallo puede omitir o aplicar dos veces un evento. Envía errores a una cuarentena recuperable con responsable.
Reconstruye una versión nueva, compara recuentos e invariantes y luego cambia las lecturas. No repitas efectos secundarios, como correos o cobros, durante el replay. Las snapshots aceleran la recuperación, pero prueba también la combinación de snapshot y eventos posteriores.
Ten en cuenta la consistencia eventual
El modelo de escritura puede aceptar un comando antes de que se actualicen todas las proyecciones. Hazlo explícito en la interfaz y en la API. Para una acción crítica, devuelve el resultado autorizado del comando en vez de leer de inmediato una vista atrasada y afirmar que no pasó nada. Supervisa el retraso, la antigüedad de eventos, errores y duración del replay.
Reconoce cuándo no conviene
Si solo hace falta consultar el estado actual y guardar algunas columnas de auditoría, una tabla tradicional suele ser más simple. Event sourcing añade evolución de esquemas, crecimiento del historial, herramientas de replay, cuestiones de retención y consistencia eventual. Se justifica mejor cuando reconstruir el pasado, mantener varias vistas o auditar el negocio son necesidades centrales.
En resumen
Usa un historial append-only como fuente para proyecciones operativas explícitas. Versiona eventos, procesa con idempotencia, muestra la vigencia de las vistas y haz que el replay sea seguro y observable. El dashboard es una vista diseñada para decisiones humanas, no el propio event store. Adopta el patrón cuando el valor del historial compense su complejidad.