私は単純な NServiceBus アーキテクチャを使用しており、多数のスレーブ サービスが定期的に 1 つのマスターにレポートします。
ただし、マスターはメッセージを十分に高速に処理できません。未処理の MSMQ にメッセージが積み重なっています。
マスターでのメッセージ処理を高速化するには、どのようなオプションがありますか?
私は単純な NServiceBus アーキテクチャを使用しており、多数のスレーブ サービスが定期的に 1 つのマスターにレポートします。
ただし、マスターはメッセージを十分に高速に処理できません。未処理の MSMQ にメッセージが積み重なっています。
マスターでのメッセージ処理を高速化するには、どのようなオプションがありますか?
単一のエンドポイントの速度は、次の要因の影響を受けます。メッセージ処理スレッドの数、基盤となるハードウェア (ほとんどがディスクと CPU にバインドされている)、選択されたトランスポート (一部のトランスポートは他のトランスポートよりも高速です)、トランザクション レベル、DTC の関与。基礎となるサガまたは永続ストレージ (ravendb、sql...)、ハンドラーで呼び出される選択したデータベースまたは IO バウンド操作、選択した IoC、そして最終的にはハンドラー コードのビジネス ロジック/設計。
したがって、それらはあなたが考慮しなければならないオプションです。エンドポイントにスレッドを追加し、より高性能なハードウェア (SSD など) を追加して垂直スケーリングを微調整するか、ジョンが言及したように、ゲームにマシンを追加して水平スケーリングを調整し、最終的にディストリビューターが MSMQ を選択することができます。ただし、機能以外の要件によっては、基盤となるインフラストラクチャについても考慮する必要があります。たとえば、パフォーマンスを向上させるためにトランザクションの保証を犠牲にすることはできますか? 答えが「はい」の場合は、トランザクション レベルを微調整して DTC を無効にすることができます。または、トランスポートをよりパフォーマンスの高いものに交換します。これは考えることがたくさんあることがわかりますが、機能以外の要件と SLA に関する詳細情報がなければ、この一般的な回答に固執する必要があります。