私は NServiceBus で ASP.NET MVC を使用しています。大部分のコマンドは結果整合性を念頭に置いて実行できるため、即時整合性が物事を単純化するように見える少数のタスクがあります。
私はこれを達成するために使用されるさまざまな方法について多くの調査を行ってきましたが、その特定の方法がなぜ好ましいのかについて正当化できるものはほとんどありません. 私は実稼働環境で NSB を使用した経験がないので、何らかの方法でスケーラビリティが制限されているかどうかを知っておくとよいでしょう。
以下は、私が遭遇した大まかな方法です: -
- 同期なし。偽の情報をクライアントに返します。 これに対する私の留保は、まず、データを偽造し、コマンドが失敗した場合 (ありそうもないシナリオ) に対処する必要があることです。さらに重要なことは、コマンド内のデータの初期化が複雑な場合、偽造する機能です。とにかく、このデータは必ずしも実現可能ではありません。
- タスクが完了したときに返信 (またはクライアントが受信するイベントを公開) します。 これに対する私の留保は、分散アーキテクチャがより複雑になることを意味し、クライアント マシンの 1 つだけが応答を受信する必要があるため、負荷分散されたクライアントが問題を引き起こすかどうかわからないということです。
- データが存在するまで読み取りストアをポーリングします。 これに関する私の留保は、他のオプションよりも読み取りストアに多くの負荷がかかるということです。
上記の 3 つよりも優れたオプションはありますか? もしそうなら、それはなぜですか? そうでない場合、上記の 3 つのうちどれが優れているか、またその理由は何ですか?
答えは主観的なものではなく、NServiceBus を使用して CQRS にコマンド インフラストラクチャを実装するのに適していると思います。
ありがとう。