2016-11-22 8 views
2

私はあなたのシステムを再構築したい場合に非常に便利なEvent Sourcingパターンについて読んでいます。しかし、新しい着信要求を処理している間にイベント再構築を実行する必要がある場合はどうしたらよいですか?そのシナリオには特定のパターンやベストプラクティスがありますか? システムのダウンタイムをスケジューリングする代わりに、イベントの同期とシーケンスがシステムにとって本当に重要であるため、新しい受信要求が再生中にシステムを台無しにしないようにするにはどうすればよいですか。これには、イベントシーケンスに依存するDBレコードの更新が含まれます。何かご意見は?イベントのソーシング - イベントの再生

+0

これは私の非常によく似た問題です。http://stackoverflow.com/questions/38197712/event-sourcing-avoid-projects-duplicated-events-while-replaying-events-and-list – martinezdelariva

答えて

0

説明した制約のため、のライブの再構築は計画の一部にはなりません。代わりにA/Bの設定をして、その時点でオフラインになっている新しいシステムのイベントを再生し、それが追いついたら新しいシステムに切り替えることができます。キーは、古いシステムと新しいシステムの両方が同時にイベントストリームに同調できるということです。

イベントのサブセットを購読しているシステムが異なる場合は、それらのサブシステムの1つのイベントだけを再生する必要があり、そのサブシステムなしでも同期/シーケンスのニーズが満たされている可能性があります。

データにイベントシーケンス番号を含め、イベントがまだ表示されていない場合は、シーケンス依存のサービス遅延処理を行うことで、不要な情報に対処することを防ぐことができます。

+0

ありがとうございます。私は新しいシステムがすべての追いつきを完了したことを確認するために、小さなダウンタイムをスケジューリングして古いシステムをオフにして、古いシステムに新しいデータが流れないようにする必要があります。 新しいシステムの追い込みが完了したら、新しいシステムをオンにする必要があります。 データの正確さを保証するために、私のサービスのために何らかのダウンタイムをスケジュールする必要があるようです。 私が間違っている場合は、私を訂正してください。 – Nyamnyam

+0

私はあなたが誤解していると思います。イベントログはイベントソーシングの真実の源であり、他のすべてのシステムは単なるイベントコンシューマです。ダウンタイムは必要ありません。そのような切り換えの間、いつもイベントがどのように処理されるかに満足していることを保証することが重要です。 – rep

0

イベントを読み込みモデルに投影するには、EventStoreが提供するような何らかの種類のキャッチアップサブスクリプションを使用する必要があります。この場合、新しいイベントは店舗に保存されますが、すぐには投影されません。

しかし、ユーザーが一貫性のないデータを参照して、一貫性のない読み取りモデルに基づいて処理を開始することを認識する必要があります。私はむしろこれを避け、システムを再構築させます。

古い読み込みモデルと古い読み込みモデルを同時に読み込み、ある時点で新しい読み込みモデルを作成したいと思う最初の答えは、すべてのユーザーにとって最初ではないかもしれません。

+0

可能であれば、イベントリプレイにサードパーティライブラリを使用しないことをお勧めします。 – Nyamnyam

+0

EventStoreはライブラリではありませんhttp://www.geteventstore.com –

0

同様のケースでCQRS + ESを使用しました。 準備したデータでプロジェクションを作成しましたが、これは更新するだけでしたが再構築はできませんでした。 そして、すべてのクエリで、私はこの結果情報をすぐに作成しました。

長い操作(dbでの更新など)を実行する必要がある場合は、sagasを使用してください。 sagaが終了してevent2が生成された後、イベント - > saga - >更新プロジェクションを生成します。

もちろん、イベント収入と予測更新の間にいくらか遅延があります。

あなたのシステムについてもっと学び、そのような変種があなたのために十分である場合は非常に面白いです。

関連する問題