私はあなたのシステムを再構築したい場合に非常に便利なEvent Sourcingパターンについて読んでいます。しかし、新しい着信要求を処理している間にイベント再構築を実行する必要がある場合はどうしたらよいですか?そのシナリオには特定のパターンやベストプラクティスがありますか? システムのダウンタイムをスケジューリングする代わりに、イベントの同期とシーケンスがシステムにとって本当に重要であるため、新しい受信要求が再生中にシステムを台無しにしないようにするにはどうすればよいですか。これには、イベントシーケンスに依存するDBレコードの更新が含まれます。何かご意見は?イベントのソーシング - イベントの再生
答えて
説明した制約のため、のライブの再構築は計画の一部にはなりません。代わりにA/Bの設定をして、その時点でオフラインになっている新しいシステムのイベントを再生し、それが追いついたら新しいシステムに切り替えることができます。キーは、古いシステムと新しいシステムの両方が同時にイベントストリームに同調できるということです。
イベントのサブセットを購読しているシステムが異なる場合は、それらのサブシステムの1つのイベントだけを再生する必要があり、そのサブシステムなしでも同期/シーケンスのニーズが満たされている可能性があります。
データにイベントシーケンス番号を含め、イベントがまだ表示されていない場合は、シーケンス依存のサービス遅延処理を行うことで、不要な情報に対処することを防ぐことができます。
ありがとうございます。私は新しいシステムがすべての追いつきを完了したことを確認するために、小さなダウンタイムをスケジューリングして古いシステムをオフにして、古いシステムに新しいデータが流れないようにする必要があります。 新しいシステムの追い込みが完了したら、新しいシステムをオンにする必要があります。 データの正確さを保証するために、私のサービスのために何らかのダウンタイムをスケジュールする必要があるようです。 私が間違っている場合は、私を訂正してください。 – Nyamnyam
私はあなたが誤解していると思います。イベントログはイベントソーシングの真実の源であり、他のすべてのシステムは単なるイベントコンシューマです。ダウンタイムは必要ありません。そのような切り換えの間、いつもイベントがどのように処理されるかに満足していることを保証することが重要です。 – rep
イベントを読み込みモデルに投影するには、EventStoreが提供するような何らかの種類のキャッチアップサブスクリプションを使用する必要があります。この場合、新しいイベントは店舗に保存されますが、すぐには投影されません。
しかし、ユーザーが一貫性のないデータを参照して、一貫性のない読み取りモデルに基づいて処理を開始することを認識する必要があります。私はむしろこれを避け、システムを再構築させます。
古い読み込みモデルと古い読み込みモデルを同時に読み込み、ある時点で新しい読み込みモデルを作成したいと思う最初の答えは、すべてのユーザーにとって最初ではないかもしれません。
可能であれば、イベントリプレイにサードパーティライブラリを使用しないことをお勧めします。 – Nyamnyam
EventStoreはライブラリではありませんhttp://www.geteventstore.com –
同様のケースでCQRS + ESを使用しました。 準備したデータでプロジェクションを作成しましたが、これは更新するだけでしたが再構築はできませんでした。 そして、すべてのクエリで、私はこの結果情報をすぐに作成しました。
長い操作(dbでの更新など)を実行する必要がある場合は、sagasを使用してください。 sagaが終了してevent2が生成された後、イベント - > saga - >更新プロジェクションを生成します。
もちろん、イベント収入と予測更新の間にいくらか遅延があります。
あなたのシステムについてもっと学び、そのような変種があなたのために十分である場合は非常に面白いです。
- 1. イベントのソーシング:より詳細なイベントの分割
- 2. イベントの再生を待つ
- 3. イベントNバイトは再生
- 4. fmodのイベント音を3Dで再生
- 5. クリックとロードのイベントでポーズバックグラウンドオーディオを再生
- 6. 再帰jQueryのイベント
- 7. イベントの発生
- 8. Cscore再生状態変更イベント
- 9. モバイルサファリで動画で再生イベントをキャッチ
- 10. イベントの再発(LINQクエリ)
- 11. Appcelerator:再開時のイベント
- 12. イベントからの再トリガーイベント
- 13. VBA Excel更新後のイベントの発生イベントの起動イベントの入力
- 14. 動画のhtml5要素の再生イベントは何ですか?
- 15. HTML5ビデオ - 再生イベントが発生しない
- 16. 予定カレンダーで再発イベントの発生を編集する
- 17. ロック解除(iPhone)でチタンの「再開」イベントが発生しない
- 18. ウェブページのヒットリフレッシュ時に、Button1_Clickイベントが再度発生します
- 19. Asp.Netボタンリフレッシュ時のイベントが再び発生しますか? GUID?
- 20. Silverlight 3 Datatemplate:button_clickイベントの発生
- 21. カスタムレンダリングでのイベント発生
- 22. システムでのイベント生成
- 23. イベントが発生するまでの遅延イベントの処理
- 24. 火災、複数のselectionChangedこのイベントが発生したイベント
- 25. JavaScriptのClickイベントでイベントのバブリングやバブリングが発生しない
- 26. onItemDisclosureイベントを発生させるとitemtapイベントが発生する
- 27. SalesforceのFullCalendarでのJSONイベントの再フック
- 28. 再送信docusignイベント通知
- 29. autobahn oncloseイベントに再接続
- 30. 角度の再開イベントの伝播
これは私の非常によく似た問題です。http://stackoverflow.com/questions/38197712/event-sourcing-avoid-projects-duplicated-events-while-replaying-events-and-list – martinezdelariva