スケーリングについて考え始める必要がある、動作するSilverlight/WCFアプリケーションがあります。もちろん、スケーリングの明らかなターゲットはAzureです。
このアプリケーションの主要なアーキテクチャ機能は、2〜10個のSilverlightクライアントが(デュプレックスNet.TCP接続を使用して)特定の「部屋」に参加し、それらのクライアントのいずれかがメッセージ(チャットメッセージなど)を送信できることです。次に、基盤となるデュプレックスWCF接続を使用して、同じルームに接続されている他のすべてのクライアントにリアルタイムでプッシュする必要があります。
現在、WCFサービスの仕組みは、基本的に、セッションとそれらが関連付けられているルームのリストをメモリ内に保持することです。これにより、1つのセッションからのメッセージが着信したときに、他のすべてのセッションにメッセージを自動的に送信できます。部屋でのセッション。
これは単一のWCFサーバーインスタンスでは正常に機能しますが、複数のWCFインスタンスが機能するようにスケーリングする必要がある場合は複雑になります。もちろん、ネットワーク層の負荷分散を使用している場合は、通常、部屋の一部のメンバーだけが同じサーバー上にいることに気付くでしょう。つまり、それらすべてのメンバーにメッセージをプッシュするときが来たということです。 、実際に通知されるのはそのうちの一部だけです。
Azureとは別に、私はある種のアプリケーション層の負荷分散を介してそれを処理することを考えていました。たとえば、各クライアントがSilverlightアプリケーションをダウンロードするWebサーバーは、基本的なラウンドロビンのような負荷分散を実行する場合があります。つまり、「OK、ルームxの全員、WCFインスタンス1を使用します。ルームyの全員、 WCFインスタンス2。」そういうこと。
だから私は2つの質問があります:
(1)アプリケーションに基盤となるインフラストラクチャを認識させる必要はなく、ネットワーク層の負荷分散を使用できるようにするために、これを設計する他のより良い方法はありますか?
(2)アプリケーション層の負荷分散を行う必要がある場合、Azureでこれを処理するための最良の方法は何ですか?IAAS(フルVM)を使用する必要がありますか、それともPAAS(ワーカーロール)を使用してこれを行う方法はありますか?私の理解では、ワーカーの役割に個別に対処することは不可能であり、不可能ではないにしても、役割ベースのアプローチを困難にするでしょう。