3

データベースから som id を選択し、いくつかのビジネス ロジックで順番に処理するサービスが 1 つあります。多くの内部スレッドを作成せずに、スケールアウトして並行して実行したい処理。

私の質問は:

Distributor を使用してスケールアウトしたい場合、どのようにすればよいですか?

解決策 1: サービスは 2 つに分割されます。

  1. 元のサービスは、データベースから ID のみを選択してワーカーに送信するように変更されています。これがディストリビューターになります (RunDistributorWithNoWorkerOnItsEndpoint)。
  2. ビジネス ロジックを保持し、ワーカーとして機能し、すべての受信 ID を処理する新しいサービス。より多くのワーカーが必要な場合は、同じプロセスを複数回開始するだけです。

解決策 2: サービスは 3 つに分割されます。

  1. 元のサービスは、データベースから ID のみを選択してディストリビューターに送信するように変更されています。
  2. ワーカーへの負荷分散のみを処理する新しいサービス、ディストリビューター (RunDistributorWithNoWorkerOnItsEndpoint)。
  3. ビジネス ロジックを保持し、すべての着信 ID を処理する新しいサービス、worker(s)。

解決策 3: サービスは 2 つに分割されます。

  1. 元のサービスは、データベースから ID のみを選択して送信するように変更されています。送信者として実行しています。
  2. ビジネスロジックを保持し、ワーカーおよびディストリビューターとして機能し、すべての着信 ID を処理または配布する新しいサービス。

解決策 1 は私にとって非常に理にかなっていますが、それを使用すると、どういうわけかディストリビューターが 2 つの責任を持つことになります。

  1. ID を選択します。
  2. ID をワーカーに配布します。

しかし、NSB ドキュメントの ScaleOut の例を見ると、これが可能かどうか、またはアンチパターンであるかどうかはわかりません。

解決策 3 は、ドキュメントと ScaleOut の例をもう一度読んだ後、私が行くべきだと私が信じているものですが、まだよくわかりません。

NSB ディストリビューターを使用してスケールアウトすることで配管の問題を解決しようとしています。NServiceBus.Host.exe を使用するのではなく、独自のホスティングを行いたいと考えていますが、これは厳密な要件ではありません。

編集: デフォルトのキュー命名を使用している場合、キューを構成するタスクがソリューション2よりも小さいという利点があるため(私の意見では)、ソリューション3を使用することになりました。

敬具

4

1 に答える 1

1

過去のバージョンではソリューション 2 を使用してこれを行ってきました。その理由は、ディストリビューターをスタンドアローンにして高可用性にしたためです。将来的には、Distributor に作業の一部を任せる可能性が高くなります。そうしないと、比較的アイドル状態になるだけです。このソリューションは、かなり役に立ちました。

于 2013-03-07T18:28:14.367 に答える