Ultimamente, tenho lido sobre o fornecimento de eventos e realmente gosto das idéias por trás dele, mas estou com o seguinte problema.
Digamos que você tenha N processos simultâneos que recebem comandos (por exemplo, servidores web), geram eventos como resultado e os armazenam em um armazenamento centralizado. Vamos supor também que todo o estado transitório do aplicativo seja mantido na memória dos processos individuais, aplicando sequencialmente eventos do armazenamento.
Agora, digamos que temos a seguinte regra de negócios: cada usuário distinto deve ter um nome de usuário exclusivo.
Se dois processos recebem um comando de registro de usuário para o mesmo nome de usuário X, ambos verificam se X não está na lista de nomes de usuários, a regra é validada para ambos os processos e ambos armazenam um evento "novo usuário com nome de usuário X" na loja .
Agora entramos em um estado global inconsistente porque a regra de negócios é violada (há dois usuários distintos com o mesmo nome de usuário).
Em um sistema tradicional de estilo N servidor <-> 1 RDBMS, o banco de dados é usado como um ponto central de sincronização, o que ajuda a evitar essas inconsistências.
Minha pergunta é: como os sistemas de origem de eventos normalmente abordam esse problema? Eles simplesmente processam todos os comandos sequencialmente (por exemplo, limitam a quantidade de processos que podem ser gravados na loja para 1)?