結果整合性について私が理解したことから、これらのすべてのサービス(消費者)は同時にイベントを受け取り、それらを個別に処理します。これは、良いシナリオでは、データの整合性につながります。
いいえ、必ずしもそうではありません。私がコメントしたように、送信された電子メールを元に戻すことはできません。そのため、一種の「シーケンス」が必要です。IPC over event-driven data managementは、オーケストレーション1の免除ではありません。
たとえば、前のトランザクションが正常に終了し、メールサービスがその証拠を取得しない限り、メールを送信しないでください。3
ただし、サービスがイベントの処理に失敗した場合はどうなりますか?たとえば、突然の切断、データベースエラーなど。これらのトランザクションエラーを処理するための適切なパターン/プラクティスは何ですか?
挨拶分散コンピューティングの落とし穴。それらは物事を複雑にするものであり、いつものように、それらに対処するための特効薬はありません。
Lost Arkを探して旅を始める前に、まず組織に尋ねることを検討する必要があります。多くの場合、解決策は、組織が現実の世界でこれらの問題にどのように直面するかです。
特定のデータが欠落または不完全な場合、全員(部門)は何をしますか?
実装するソリューションを完全に構成するソリューションは、部門ごとに異なることがわかります。
とにかく、ここで私たちが従う戦略で私たちを助けることができるいくつかのプラクティス。
システムが常に一貫した状態であることを保証するのではなく、代わりに、システムが将来のある時点でそれを取得することを受け入れることができます。このアプローチは、特に長期にわたるビジネス運営に役立ちます。
システムが一貫性に達する方法は、システムによって異なります。自動化されたプロセスからある種の人間の介入まで含まれます。たとえば、典型的な後でもう一度試すか、カスタマーサービスに連絡します。
すべての操作を中止します
トランザクションを補正することにより、システムを一貫した状態に戻します。ただし、これらのトランザクションも失敗する可能性があることを考慮する必要があるため、不整合を解決するのがさらに困難になる可能性があります。また、送信したメールを元に戻すことはできません。
トランザクションの数が少ない場合、補正するトランザクションの数も少ないため、このアプローチは実行可能です。IPCに関係する複数のビジネストランザクションがある場合、それらのそれぞれに対して1つの補償トランザクションを処理するのは困難です。
私達はのために行く場合は取引を補償、我々は見つける回路ブレーカのデザインパターンを非常に有用であることが- と必須の私が言うことをあえて -
分散トランザクション
その考えは、Transaction Managerと呼ばれる全体的な管理プロセスを通じて、単一のトランザクション内の複数のトランザクションにまたがることです。分散トランザクションを処理するための一般的なアルゴリズムは、2フェーズコミットです。
分散トランザクションの主な懸念は、その存続期間中にリソースをロックすることに依存していることであり、私たちが知っているように、トランザクションマネージャーにとっても問題が発生する可能性があります。
場合は、トランザクションマネージャが危険にさらされます、我々は原因メッセージのエンキューに予期しない動作で、その結果、すべての貴様有界コンテキスト間でいくつかのロックで終わることができます。2
分解操作。どうして?
既存のシステムを分解していて、本当に単一のトランザクション境界内に収めたいコンセプトのコレクションを見つけた場合、おそらく最後までそれらを残してください。
サム・ニューマン
上記の議論に沿って、サムは、彼の著書 『Building Microservices』で、最終的に一貫性を確保できない場合は、今すぐ操作を分割しないようにすべきだと述べています。
特定の操作を2つ以上のトランザクションに分割する余裕がない場合、おそらくこれらのトランザクションは同じ境界付きコンテキストに属している、または少なくともモデル化されていないクロスカットコンテキストに属していると言えます。
たとえば、このケースでは、トランザクション#1と#2が互いに密接に関連しており、おそらく両方が同じ境界コンテキストAccounts、 Users、Registerに属している可能性があることに気付きます...
同じトランザクションの境界内に両方の操作を配置することを検討してください。これにより、操作全体が処理しやすくなります。また、各トランザクションの重要度のレベルも重要です。おそらく、トランザクション2が失敗した場合、操作全体が危険にさらされることはありません。疑わしい場合は組織に尋ねてください。
1:考えているようなオーケストレーションではありません。私はESBのオーケストレーションについて話しているのではありません。サービスを適切なイベントに反応させることについて話している。
2:分散トランザクションに関するSam Newmanの興味深い意見を見つけることができます。
3:このテーマに関するDavid Parkerの回答を確認してください。