私は最近イベントの調達について読んでおり、その背後にあるアイデアが本当に好きですが、次の問題にこだわっています。
コマンド(Webサーバーなど)を受信し、結果としてイベントを生成し、それらを中央ストアに格納するN個の並行プロセスがあるとします。また、ストアからイベントを順番に適用することにより、すべての一時的なアプリケーションの状態が個々のプロセスのメモリで維持されると仮定します。
ここで、次のビジネスルールがあるとしましょう。各個別のユーザーには一意のユーザー名が必要です。
2つのプロセスが同じユーザー名Xのユーザー登録コマンドを受信した場合、両方がXがユーザー名のリストにないことを確認し、ルールは両方のプロセスを検証し、両方とも「ユーザーXの新しいユーザー」イベントをストアに保存します。
現在、ビジネスルールに違反しているため、一貫性のないグローバル状態に入りました(同じユーザー名を持つ2人の異なるユーザーがいます)。
従来のNサーバー<-> 1 RDBMSスタイルのシステムでは、データベースは、このような不整合の防止に役立つ同期の中心点として使用されます。
私の質問は、イベントソースシステムは通常、この問題にどのように対処するのかということです。すべてのコマンドを順番に処理するだけですか(たとえば、ストアに書き込むことができるプロセスの量を1に制限するなど)。