Actualmente estamos evaluando arquitecturas CQRS y Event Sourcing. Estoy tratando de entender cuáles son las implicaciones de mantenimiento de usar este tipo de diseño. Dos preguntas Estoy luchando para encontrar respuestas a son esto:Cómo administrar los cambios de ViewModel en CQRS + Event Sourcing Architecture
1) ¿Qué pasa si, después de una aplicación ha estado funcionando durante un tiempo, hay un nuevo requisito para agregar un campo adicional a un modelo de vista sobre la Base de datos de ReadModel? Supongamos que se requiere el código postal del cliente en CustomerList ViewModel, donde no estaba previamente. Entonces, la columna adicional se puede agregar fácilmente a la base de datos de ViewModel, pero ¿cómo se puede poblar? Por lo que puedo ver, la única forma es borrar la base de datos de lectura y reproducir todos los eventos desde cero para crear una copia de seguridad de la base de datos de ReadModel. Pero, ¿y si la aplicación ha estado en funcionamiento durante meses o años (como esperamos que sea)? Esto podría ser millones de eventos para reproducir, solo para agregar datos para una columna de código postal.
Tengo la misma preocupación si, por cualquier razón técnica, la base de datos de ReadModel no se sincronizó, o si deseamos agregar una nueva base de datos de ReadModel. Parece que cuanto más antigua es la aplicación, y cuanto más se usa, más difícil y más caro es obtener un modelo de lectura actualizado. ¿O me estoy perdiendo un truco en alguna parte? Algo así como instantáneas de ReadModel?
2) ¿Qué pasa si después de todos los millones de eventos que se hayan reproducido para construir una copia de seguridad la base de datos de lectura, algunos de los datos no se alinean con lo que se esperaba (es decir, se ve mal). Se cree que tal vez un error en algún lugar del evento almacenando, o rutinas de desnormalización puede haber causado esto (y parece que si hay algo en lo que puede confiar en la codificación, es en los errores). ¡Cómo hacer para depurar esto! Parece una tarea imposible. O tal vez, de nuevo, me estoy perdiendo un truco.
Me gustaría saber de alguien que ha estado utilizando un sistema como este durante un tiempo, cómo las rutas de mantenimiento y actualización han funcionado para usted.
Gracias por cualquier hora y entrada.
Gracias por su respuesta. Tus puntos de vista sobre el tiempo de reproducción del evento que no es un problema (incluso para millones de eventos) son tranquilizadores. Disfruto de tu blog. Por cierto, ¡gracias por compartir! – James
Definitivamente querrá hacer algunas pruebas porque la población del modelo de visualización * puede * ser lenta si lo hace incorrectamente. Se necesita un poco de esfuerzo para hacerlo rápido. –
Hemos estado en la práctica o reconstruyendo nuestro modelo de lectura en cada intento de producción. Primero reconstruimos los datos empujándolo a nuestro modelo de lectura de escenario y, si la reconstrucción tiene éxito, haremos la reconstrucción y la aplicaremos a nuestro modelo de lectura de producción. Para nosotros, garantiza que el modelo de lectura refleje todas las modificaciones a los manejadores de eventos en cada lanzamiento. –