1

サービス プロセスを複数のサーバーで実行できるようにすることで、サービス プロセスを水平方向に拡張する方法について、アイデアをいただきたいと思います。これは C# で記述された Windows サービスであり、その目的は、当社の Exchange Web サービス (EWS) にサブスクライブして、新しい受信メール メッセージがあるたびに (HTTP コールバック経由で) 通知を受けることです。次に、サービスは電子メール メッセージを取得して処理し、可能であれば返信を送信してから、スリープ状態に戻り、次の受信電子メールを待ちます。

複数のマシンで実行する場合、すべてのマシンを EWS 通知にサブスクライブさせるか、そのうちの 1 つだけをサブスクライブさせることができます。それらすべてを購読させると、MS Exchange インフラストラクチャに負担がかかる可能性があるため、少し躊躇します。また、これにより、すべてのマシンが電子メールを受信して​​処理することになります。送信者が特定の要求メッセージに対して N 回 (N はファーム内のサーバーの数) 応答を受け取ることは望ましくありません。EWS にサブスクライブしているマシンが 1 台しかない場合、単一障害点にさらされることになります。

これに対処する方法についてあなたの提案を聞きたいです。複数のサーバーに電子メール メッセージを分散させて受信メッセージを処理させたいと思っています (おそらく、メッセージ キュー サーバーを使用してこれを行う必要があります)。ありがとう。

4

1 に答える 1

1

信頼性とスループットのどちらをスケーリングするかによって異なります。

信頼性が高い場合は、プライマリ プロセスとスタンバイ プロセスを使用できます。プライマリ プロセスは、すべての電子メールをサブスクライブして処理します。スタンバイ プロセスはキープアライブ メッセージをプライマリと交換し、キープアライブがタイムアウトした場合はプライマリとして引き継ぎます。

スループットの場合、あなたが提案したように、メッセージキューメカニズムが良いアプローチかもしれません。上記のようにプライマリとスタンバイを実行できますが、プライマリはメールをキューに入れるだけです。メッセージ プロセッサのファームがキューから引き離されます。

于 2014-03-27T14:15:17.307 に答える