タグ付けされた質問 「eventual-consistency」

5
マイクロサービス:結果整合性の処理
ユーザーのパスワードを更新する機能があるとします。 [パスワードの更新]ボタンをクリックすると、他の3つのサービスがサブスクライブされているトピックにUpdatePasswordEventが送信されます。 ユーザーのパスワードを実際に更新するサービス ユーザーのパスワード履歴を更新するサービス パスワードが変更されたことをユーザーに通知する電子メールを送信するサービス。 結果整合性について私が理解したことから、これらのすべてのサービス(消費者)は同時にイベントを受け取り、それらを個別に処理します。これは、良いシナリオでは、データの整合性につながります。 ただし、サービスがイベントの処理に失敗した場合はどうなりますか?たとえば、突然の切断、データベースエラーなど。これらのトランザクションエラーを処理するための適切なパターン/プラクティスは何ですか? イベントの処理に失敗した場合、RollbackEventがトピック内に作成され、「ロールバックサービス」がジョブを実行してデータを元に戻すRollbackTopicを作成することを考えていました

8
最終的に一貫したサービスに対するテストを作成するにはどうすればよいですか?
Google App Engine Datastoreの上にサービスを構築しています。これは最終的に一貫したデータストアです。私のアプリケーションでは、これで問題ありません。 ただし、PUTオブジェクトのようなことをしてからオブジェクトを取得し、返されたオブジェクトのプロパティをチェックするテストを開発しています。残念ながら、データストアは最終的に一貫しているため、これらの簡単なテストは再現できません。 最終的に一貫したサービスをどのようにテストしますか?

3
イベントストアではなく「スナップショット」プロジェクションから集計を再水和する
そのため、実際のプロジェクトにパターンを適用する機会は一度もありませんでしたが、しばらくの間、イベントソーシングとCQRSをいじっていました。 読み取りと書き込みの懸念を分離することの利点を理解しています。また、イベントソースとは異なり、イベントストアとは異なる「読み取りモデル」データベースに状態の変更を簡単に投影できます。 私があまりはっきりしていないのは、イベントストア自体から集計を再水和する理由です。 「読み取り」データベースへの変更の投影が非常に簡単な場合、スキーマがドメインモデルと完全に一致する「書き込み」データベースへの変更を常に投影しないのはなぜですか。これは、事実上スナップショットデータベースになります。 これは、ES + CQRSアプリケーションでかなり一般的だと思います。 この場合、イベントストアは、スキーマの変更の結果として「書き込み」データベースを再構築するときにのみ役立ちますか?それとも、もっと大きなものが欠けていますか?

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