4

この質問はばかげているかもしれませんが、私は少し混乱しています。このパターンを活用したいとします。

  • エンタープライズアプリケーションのイベントストレージスコープは正確には何ですか?

  • イベントストレージは複数のプロセス間で共有されますか、それとも単なるインプロセスの概念ですか?

  • アプリケーションを閉じると、イベントはどうなりますか?それらはアプリケーションの「インスタンス」にバインドされていますか、それともアプリケーションにバインドされていますか?

  • イベントストレージとパブリッシャー/サブスクライバーを使用したMessageBusの違いは何ですか(メッセージ履歴を保存できるという事実の一部ですか?

  • メッセージのべき等の責任者は誰ですか?

  • この文の実際の意味:「興味深いことに、メッセージキューや永続ストレージなど、関連するさまざまなリソースに分散トランザクションが存在しなくても、EventStoreは完全なトランザクションエクスペリエンスを保証できます。これは、分解することで実現されます。分散トランザクションをより小さな部分に分割し、それぞれを個別に実行する」このプロジェクトから)すべてがトランザクションであるとしても、トランザクションをいくつかの小さな部分に分割すること自体が分散トランザクションを置き換えることができる方法を理解できません。
4

2 に答える 2

7

エンタープライズ アプリケーションのイベント ストレージ スコープとは正確には何ですか?

この意味で、イベント ストアはデータベースのようなものです。特定のアプリケーションによって範囲が限定されることはありません。ただし、ビジネス/言語の境界によって範囲を限定することはできます。たとえば、システムをサブシステムに分割する場合、各サブシステムはイベント ストアの独自のインスタンスを持つことができます。

イベント ストレージは複数のプロセス間で共有されますか?それともプロセス内の概念にすぎませんか?

これは進行中の概念ではありません。データベースと同じように、プロセス/アプリケーション間で共有されます。

アプリケーションを閉じると、イベントはどうなりますか? それらはアプリケーションの「インスタンス」またはアプリケーションにバインドされていますか?

イベント ストアには、アプリケーションが保存するように要求したすべてのイベントが保存されます。イベントは、通常は集約ルートの ID であるストリーム ID によってキー付けされます。これは、特定のアプリケーション インスタンスに限定されません。

イベント ストレージとパブリッシャー/サブスクライバーを使用した MessageBus の違いは何ですか (メッセージ履歴を保存できるという事実の一部は?

メッセージ履歴の保存は、基本的に機能面での主な違いです。ユース ケースの違いは、エンドポイント間でメッセージを渡すためにメッセージ バスが使用され、メッセージ (通常はイベント) を永続化するためにイベント ストアが使用されることです。

メッセージの冪等性の責任者は誰ですか?

あなたは開発者です。イベント ストアは、イベントをストリームによってキー設定されたシリアル化されたデータとして表示します。バージョン管理を使用すると、特定の競合を処理できますが、メッセージがべき等かどうかを判断するのはユーザー次第です。

すべてがトランザクション自体であっても、トランザクションをいくつかの小さな断片に分割することで、分散トランザクションを置き換えることができる方法を理解できません。

嵯峨パターンの解明をご覧ください。基本的な考え方は、単一の分散トランザクションの下で複数の操作をグループ化するのではなく、操作を部分に分割することです。特定の部分が失敗した場合 (分散 tx でロールバックが発生する場合)、関係者が操作をロールバックできるようにするエラー メッセージが送信されます。これは一種の報酬と見なすことができ、多くのビジネス シナリオを分析するためのより自然な方法です。たとえば、支払いトランザクションが無効であると見なされた場合、それは削除されませんが、補償トランザクションが追加されます。活動を表現するこの方法は、実際には何かが「元に戻される」ことはめったにないため、現実により適しています。

于 2012-11-29T21:08:20.983 に答える
6

何問!

エンタープライズ アプリケーションのイベント ストレージ スコープとは正確には何ですか?

イベント ストレージは適切なパターンではありません。これは通常、イベント ソーシングコマンドとクエリの責任分離という 2 つの異なる (ただし強く関連する) パターンで使用される手法です。「ストレージ」であるため、ビジネスに関連するアプリケーションの状態を永続化する方法にすぎません。

どちらのパターンもドメイン駆動設計で Evans によって導入されたパターンとうまく機能するため、ドメイン モデルと組み合わせて使用​​されることがよくあります。

EventStore を使用すると、ドメイン イベント (イベント ソーシングの方法) またはアプリケーション イベント (別名、CQRS のコマンド) を永続化できます。モデルの状態を保存するのではなく、モデルにつながったイベントを保存するため、ドキュメント ストレージやリレーショナル ストレージとは異なります。ただし、RDBMS またはドキュメント データベースのいずれかを使用してイベントを格納できます。

次に、エンティティを取得するには、登録されている各イベント/コマンドを順番に再生します。スナップショットを使用すると、このプロセスを高速化できます。

イベント ストレージは複数のプロセス間で共有されますか?それともプロセス内の概念にすぎませんか?

ストアの実装に依存しますが、複数のプロセスやアプリケーション間での使用を妨げる理由はありません。

アプリケーションを閉じると、イベントはどうなりますか? それらはアプリケーションの「インスタンス」またはアプリケーションにバインドされていますか?

ここでも、ストアの実装に依存します。最も単純なイベント ストアは、イベントを番号付きのファイルに保存します。したがって、アプリケーションがシャットダウンしても、イベントはそこに残ります (これは、常に Thompson の言葉を思い出させます:「永続オブジェクトがあり、それらをファイルと呼びます」)。
ただし、アプリケーションが本当に必要とする場合は、揮発性のイベント ストアをメモリ内に保持することを妨げるものは何もありません。エントリの順序を維持する追加専用のコレクションとして実装します。

イベント ストレージとパブリッシャー/サブスクライバーを使用した MessageBus の違いは何ですか (メッセージ履歴を保存できるという事実の一部は?

メッセージ バスは、メッセージを配信するためのツールです。イベント (およびコマンド) はメッセージであるため、イベントを配信するために使用できます。代わりに、イベント ストアは永続化ツールです。

メッセージの冪等性の責任者は誰ですか?

最も一般的なシナリオでは、ドメイン モデルを設計する担当者です。非 DDD システムでは、メッセージ (イベントまたはコマンド) を設計するのは担当者です。実際、冪等性は、テクノロジー自体ではなく、メッセージの受信者によって保証されなければなりません。

そのため、EventStore は、重複したメッセージを検出したときにそれらをマージできます。しかし、これ自体がモデルを冪等にするわけではありません。

この文は実際には何を意味していますか:"興味深いことに、メッセージ キューや永続ストレージなど、関連するさまざまなリソースに分散トランザクションが存在しなくても、EventStore は完全なトランザクション エクスペリエンスを保証できます。これは、分割することによって実現されます。分散トランザクションを小さな断片に分割し、それぞれを個別に実行する" (このプロジェクトから) トランザクションをいくつかの小さな断片に分割する方法が理解できません。

それは、著者が「完全な取引体験」に割り当てる意味に依存します。私には、この文は間違っているように見えます。ブリューワーの定理が破られるからです。

Microsoft と Greg Young によるこのCQRS Journeyが役に立ちます。

明日、オフィスでお会いしましょう :-)

于 2012-11-29T22:25:07.033 に答える