61

私が理解しているのは、3つの概念すべてが長期的なトランザクションに関連しているということです。

プロセスマネージャーは、私の理解では、イベントに反応してコマンドを発行する有限状態マシンです。ビジネスロジックは含まれていません。ルーティングを行うだけです。その目標は、トランザクションが成功または失敗したことを確認できる最終状態に到達することです。

ここまでは順調ですね。

しかし今、私の理解の問題は始まります:

  • プロセスマネージャーとは対照的に、サガとは何ですか?
  • CQRS sagasで述べたように、ドキュメントベースのアプローチもあります-私はそれらを正しく理解しましたか?…私が理解しているように、ドキュメントは、メモを取り、それを渡す「一枚の紙」にすぎません。それはコマンドとイベントの概念にどのように適合しますか?

誰かが違いを説明できますか、そして-私が特に興味を持っていること-これらの概念のどれが何に適しているか、そしていつあなたが何を必要とするかを説明してください。それらは相互に排他的ですか?そのうちの1つだけでずっと一緒に行くことができますか?複数が必要なシナリオはありますか?…?

4

5 に答える 5

30

MSDN の CQRS Journey プロジェクトをご覧ください。

http://msdn.microsoft.com/en-us/library/jj591569.aspx

用語の明確化

サガという用語は、CQRS の説明で一般的に使用され、境界付けられたコンテキストと集約の間でメッセージを調整およびルーティングするコードの一部を指します。ただし、このガイダンスでは、プロセス マネージャーという用語を使用して、このタイプのコード アーティファクトを指すことを好みます。これには 2 つの理由があります。

サガという用語には、CQRS に関して一般的に理解されているものとは異なる意味を持つ、よく知られた既存の定義があります。プロセス マネージャーという用語は、このタイプのコード アーティファクトによって実行される役割をより適切に説明したものです。

サガという用語は CQRS パターンのコンテキストでよく使用されますが、既存の定義があります。この既存の定義との混同を避けるために、このガイダンスではプロセス マネージャーという用語を使用することにしました。

saga という用語は、分散システムに関連して、Hector Garcia-Molina と Kenneth Salem による論文「Sagas」で最初に定義されました。このホワイト ペーパーでは、長時間実行されるビジネス プロセスを管理するために分散トランザクションを使用する代わりに、saga を呼び出すメカニズムを提案します。このペーパーでは、ビジネス プロセスは多くの場合、複数のステップで構成されており、各ステップにはトランザクションが含まれており、これらの個々のトランザクションを分散トランザクションにグループ化することで全体的な一貫性を実現できることが認識されています。ただし、実行時間の長いビジネス プロセスでは、分散トランザクションを使用すると、分散トランザクションの間ロックを保持する必要があるため、システムのパフォーマンスと同時実行性に影響を与える可能性があります。

于 2013-03-20T15:39:56.337 に答える
7

Process Manager には状態がありますが、Saga には状態がありません。

もう 1 つの違い - Process Manager はステート マシンですが、Saga はそうではありません。

佐賀には無い

  • ステートマシンの状態
  • データの状態 (一部の永続データ)

..そしてProcess Managerには

  • ステートマシンの状態
  • データの状態 (一部の永続データ)

私のブログで詳細を読む: http://blog.devarchive.net/2015/11/saga-vs-process-manager.html

于 2015-11-11T14:37:10.743 に答える
7

Saga と Process Manager は、2 つの統合パターンです。それらは非常に似ていますが、完全ではありません。

  • Sagaは、複数のサービスにまたがる各ビジネス トランザクションを saga として実装するのに役立つパターンです。実際、各ローカル トランザクションがデータベースを更新し、メッセージまたはイベントをパブリッシュして、サガ内の次のローカル トランザクションをトリガーする、一連のローカル トランザクションを作成します。サガを実装するには、オーケストレーション (オーケストレーターが参加者に実行するローカル トランザクションを指示する) とコレオグラフィ (各ローカル トランザクションが、他のサービスでローカル トランザクションをトリガーするドメイン イベントを発行する) の 2 つの方法があります。Saga を使用すると、CQRS と EventSourcing の使用が決定されることは非常に一般的です。
  • Process Managerは、シーケンスの状態を維持し、中間結果に基づいて次の処理ステップを決定するために存在する処理ユニットです。ルーティングパターンです。それはOrchestrator Sagaのようなものです。
于 2018-12-07T18:35:19.793 に答える