He estado leyendo sobre el abastecimiento de eventos últimamente y realmente me gustan las ideas detrás de él, pero estoy atrapado con el siguiente problema.
Digamos que tiene N procesos concurrentes que reciben comandos (por ejemplo, servidores web), generan eventos como resultado y los almacenan en una tienda centralizada. Supongamos también que todo el estado de aplicación transitoria se mantiene en la memoria de los procesos individuales mediante la aplicación secuencial de eventos desde la tienda.
Ahora, supongamos que tenemos la siguiente regla comercial: cada usuario distinto debe tener un nombre de usuario único.
Si dos procesos reciben un comando de registro de usuario para el mismo nombre de usuario X, ambos verifican que X no está en su lista de nombres de usuario, la regla valida para ambos procesos y ambos almacenan un evento "nuevo usuario con nombre de usuario X" en la tienda .
Ahora hemos entrado en un estado global inconsistente porque se viola la regla de negocios (hay dos usuarios distintos con el mismo nombre de usuario).
En un sistema de estilo tradicional de servidor N <-> 1 RDBMS, la base de datos se usa como un punto central de sincronización que ayuda a prevenir tales inconsistencias.
Mi pregunta es: ¿cómo los sistemas de origen de eventos suelen abordar este problema? ¿Simplemente procesan cada comando secuencialmente (por ejemplo, limitan la cantidad de proceso que puede escribir en la tienda a 1)?