What is an example of event sourcing?

Audit Logs vs Event Sourcing: ¿Cuál es la diferencia?

hace 6 meses

Valoración: 4.83 (1105 votos)

En el mundo del desarrollo de software, la gestión y el seguimiento de los cambios en los datos son cruciales. Dos patrones comunes que abordan este aspecto son los Audit Logs (registros de auditoría) y el Event Sourcing (abastecimiento de eventos). Si bien ambos implican registrar eventos, existen diferencias fundamentales en su propósito, implementación y casos de uso. Este artículo explorará en detalle estas diferencias, ayudándote a comprender cuándo y por qué elegir uno sobre el otro para tus proyectos.

Is Kafka an event source?
Kafka is a perfect technology for event sourcing. Here's why: Distributed, durable, and scalable event log: Kafka's distributed architecture provides a highly scalable, fault-tolerant, and performant event log for storing and processing events.
Índice de Contenido

¿Qué son los Audit Logs?

Los Audit Logs, o registros de auditoría, son esencialmente un registro cronológico de eventos o transacciones que ocurren dentro de un sistema de software. Su principal objetivo es proporcionar una pista de auditoría, documentando quién hizo qué, cuándo y cómo en el sistema. Imagina un libro de contabilidad detallado para tu aplicación, donde cada entrada registra una acción importante.

Estos registros son vitales para mantener la seguridad, la confiabilidad y la calidad de las aplicaciones de software, así como para cumplir con diversos requisitos regulatorios. Piensa en normativas como GDPR o HIPAA, donde la trazabilidad de las acciones sobre los datos es fundamental. Los Audit Logs permiten rastrear el historial de cambios, identificar actividades sospechosas o no autorizadas y realizar análisis post-mortem de incidentes.

Característicamente, los Audit Logs registran actividades de alto nivel o transacciones significativas, enfocándose a menudo en el resultado final o cambios de estado importantes. Por ejemplo, un Audit Log podría registrar "Usuario X inició sesión en la cuenta" o "Se modificó el registro de cliente Y". La información registrada suele incluir:

  • Marca de tiempo: El momento exacto en que ocurrió el evento.
  • Información del usuario: La identidad del usuario o sistema que realizó la acción.
  • Descripción de la acción: Una descripción clara de lo que se hizo (ej., "crear", "modificar", "eliminar").
  • Resultado: Si la acción fue exitosa o fallida.
  • Datos relacionados: Información adicional relevante al evento, como el ID del registro afectado.

Un aspecto crucial de los Audit Logs es que son de tipo "append-only" (solo agregar). Esto significa que los eventos se añaden al registro y nunca se sobrescriben ni se modifican. Esta inmutabilidad es fundamental para garantizar la integridad del registro de auditoría y evitar la manipulación.

¿Qué es Event Sourcing?

El Event Sourcing, aunque comparte similitudes con los Audit Logs y también puede utilizarse para la auditoría, representa un patrón de persistencia fundamentalmente diferente. En lugar de simplemente registrar los resultados de las operaciones, Event Sourcing captura cada cambio de estado en una secuencia de eventos inmutables, almacenados en un registro de solo adición.

A diferencia de un Audit Log que podría registrar "Se actualizó el precio del producto Z", Event Sourcing registraría eventos más granulares como "Precio del producto Z cambiado de $X a $Y por Usuario W a las [fecha y hora]". Se centra en mantener un historial completo y detallado de todos los cambios que ocurren en un sistema o dominio.

Cada cambio se captura como un evento discreto a un nivel más granular. Un evento típico de Event Sourcing incluye:

  • Nombre del evento: Describe la naturaleza del cambio (ej., "ProductoPrecioCambiado", "ClienteDireccionActualizada"). Responde al "qué" y al "por qué" del cambio en términos de dominio.
  • Datos del evento: Los datos específicos asociados con el cambio, incluyendo el nuevo estado y, a menudo, el estado anterior.
  • Marca de tiempo: Cuándo ocurrió el evento.
  • Metadatos adicionales: Información contextual como el usuario que inició el cambio, la versión del sistema, etc.

La clave de Event Sourcing reside en la capacidad de reconstruir el estado actual del sistema en cualquier momento, simplemente reproduciendo la secuencia de eventos desde el inicio. Esto ofrece una historia completa y detallada de todo lo que ha ocurrido en el sistema, lo que lo hace extremadamente poderoso para la auditoría, la depuración, las pruebas y la recuperación del sistema. Imagina poder "rebobinar" tu sistema a un estado anterior o reproducir eventos desde cero para entender un comportamiento específico.

Para profundizar en este concepto, existen guías y recursos disponibles para aprender más sobre Event Sourcing, como la "Beginners Guide to Event Sourcing" mencionada en el texto original.

Diferencias Clave entre Event Sourcing y Audit Logs

La principal diferencia entre Event Sourcing y Audit Logs radica en cómo se capturan y se utilizan los eventos. Una analogía útil es la comparación con los libros de historia. Un Audit Log se asemeja a un relato histórico, una interpretación de los eventos que, aunque generalmente precisa, puede estar sujeta a la perspectiva del autor. En cambio, Event Sourcing representa los eventos en sí mismos, los hechos irrefutables, sin espacio para la interpretación.

En Event Sourcing, los eventos capturan el cambio en sí y son la fuente de verdad para el estado del sistema. Las decisiones y las operaciones del negocio se basan directamente en estos eventos. La corrección y la integridad del registro de eventos son cruciales, ya que la operación diaria del negocio depende de ellos. Imagina un sistema bancario donde cada transacción (depósito, retiro, transferencia) se registra como un evento. El saldo de una cuenta en cualquier momento se deriva de la secuencia de estos eventos.

Un Audit Log, por otro lado, es un relato del cambio ocurrido, pero no influye directamente en el estado de la aplicación. Los eventos registrados en un Audit Log no se utilizan para tomar decisiones o realizar cambios en la aplicación. Su propósito principal es la auditoría y el cumplimiento normativo.

Esta diferencia fundamental tiene implicaciones importantes, especialmente en la detección y corrección de errores. Dado que los Audit Logs no impulsan las operaciones del negocio, los errores en los registros pueden pasar desapercibidos hasta que se realiza una auditoría. En cambio, en un sistema basado en Event Sourcing, los errores en los eventos suelen ser detectados rápidamente, ya que afectan directamente al funcionamiento del sistema.

Consideremos el ejemplo de las transacciones con tarjeta de crédito. Si se utiliza Event Sourcing, cada transacción se registra como un evento. Si un evento es incorrecto (por ejemplo, un cargo duplicado), se detectará rápidamente porque afectará el saldo de la cuenta y podría provocar el rechazo de transacciones futuras si se supera el límite de crédito. Los clientes y comerciantes notarían rápidamente cualquier problema.

En contraste, si las transacciones se registran solo en un Audit Log, los errores podrían no ser evidentes hasta una auditoría. El equipo de desarrollo podría ser el único responsable de probar la precisión de los registros, y los errores podrían tener menos impacto inmediato en las operaciones diarias.

Otra ventaja de Event Sourcing es que proporciona un Audit Log "incorporado". Dado que todos los eventos se almacenan de forma inmutable en un registro de solo adición, este registro en sí mismo sirve como un registro de auditoría completo y detallado.

Tabla Comparativa: Event Sourcing vs Audit Logs

CaracterísticaEvent SourcingAudit Log
PropósitoMantener un historial completo de cambios de estado en la aplicación.Rastrear acciones de usuario y cambios del sistema para seguridad y cumplimiento.
GranularidadMuy granular, captura cada cambio de estado.Típicamente de alto nivel, captura acciones o transacciones significativas.
EstructuraRegistro de solo adición de eventos inmutables.Registro de solo adición de registros de acción.
Eventos RegistradosCada evento representa un hecho ocurrido, más fiable como fuente de verdad.Eventos registrados son un relato de la acción realizada, precisos pero menos fiables como fuente de verdad operativa.
Reconstrucción del EstadoPuede reconstruir el estado del sistema reproduciendo eventos.No diseñado para reconstruir el estado del sistema.
UsoParte central de la arquitectura del sistema para la gestión del estado.Utilizado para monitorización, auditoría e informes de cumplimiento.
Contenido TípicoIdentificador de evento, marca de tiempo, detalles del cambio de estado.Marcas de tiempo, información del usuario, descripciones de acciones, resultados.
FocoGarantizar la precisión histórica completa del estado.Garantizar la seguridad y el cumplimiento.
InmutabilidadEventos son inmutables y nunca se modifican.Entradas típicamente son de solo adición pero no inherentemente inmutables en todos los sistemas.
ConsultasA menudo requiere la reproducción de eventos para obtener el estado actual.Consulta directa para propósitos de auditoría.
Recuperación del SistemaFacilita la reversión y recuperación reproduciendo eventos.Principalmente para investigación y cumplimiento, no para recuperación.
ComplejidadMayor complejidad, requiere un diseño cuidadoso.Generalmente más simple, añadido como una característica auxiliar.

¿Cuál Deberías Usar? ¿Event Sourcing o Audit Logs?

La elección entre Event Sourcing y Audit Logs depende en gran medida de tus necesidades específicas y los casos de uso. Ambos registran cambios en el estado del sistema, pero lo hacen con propósitos y niveles de detalle diferentes.

Los Audit Logs son ideales cuando necesitas:

  • Rastrear acciones de usuario: Saber quién hizo qué en el sistema.
  • Cumplir con requisitos normativos: Proporcionar pistas de auditoría para regulaciones de cumplimiento.
  • Monitorizar la seguridad: Detectar actividades sospechosas o no autorizadas.
  • Depurar problemas: Investigar qué sucedió en el sistema después de un error.

Son relativamente sencillos de implementar y sirven como una excelente herramienta para la monitorización y el análisis post-mortem. Si tu principal necesidad es la trazabilidad para auditoría y cumplimiento, y no necesitas reconstruir el estado completo del sistema a partir de eventos, un Audit Log podría ser suficiente.

Event Sourcing es más adecuado para casos de uso más complejos, como cuando necesitas:

  • Garantizar la consistencia e integridad del estado del sistema: Donde la precisión y la secuencia de los cambios son críticas.
  • Reconstruir el estado desde una serie de eventos: Para análisis temporal, proyecciones de datos o recuperación del sistema.
  • Capacidades de consulta avanzadas sobre el historial del estado: Para análisis de tendencias, informes complejos y toma de decisiones basada en datos históricos.
  • Sistemas complejos con dominios ricos: Donde el modelado del dominio se beneficia de la captura de cada cambio como un evento significativo.

Event Sourcing ofrece una mayor robustez y flexibilidad, pero también implica una mayor complejidad en el diseño e implementación. Es una excelente opción para sistemas donde la historia completa de los cambios es fundamental para la operación del negocio y donde se requiere una alta fiabilidad y auditabilidad.

Conclusión

Tanto los Audit Logs como el Event Sourcing son enfoques valiosos para registrar cambios en el estado de un sistema mediante el uso de registros de solo adición. Ambos pueden ser adecuados para la auditoría y el cumplimiento normativo. La elección entre ellos dependerá de tu caso de uso específico y la complejidad de tu dominio.

Sin embargo, es importante destacar que Event Sourcing no solo proporciona un Audit Log "incorporado", sino que ofrece un enfoque más robusto y completo para la auditoría y el cumplimiento, basado en la captura de los hechos fundamentales de las operaciones del negocio. Si bien puede requerir una mayor inversión inicial, los beneficios a largo plazo en términos de fiabilidad, auditabilidad y capacidad de evolución del sistema pueden ser significativos.

Subir