Azure:私のアプリでも機能しますか?
質問
クラウドに配置したいアプリケーションを作成しています。このアプリケーションには、1つの主要な機能があります。
他のユーザーに代わってソケットCLIENTセッションをホストします(iPhone向けBeejive IMを考えてください。クライアントのIMセッションをホストして、これらのIMネットワークの状態を維持し、クライアントが接続を切断することなく、 IMネットワーク接続)。
今、私が計画した方法では、1つの「ワーカーインスタンス」が有限数のクライアントセッションしか処理できない可能性があります(引数のために50,000としましょう)。これらのセッションは、非常に長寿命のワーカータスクになります。
問題を回避しようとしているのは、特定のクライアントセッションに対してタスクを実行する必要がある場合があることです(例:クライアントセッションを切断する必要がある場合)。 Azureを使用すると、特定のクライアントセッションをホストするインスタンスのみがデキューできる小さなタスクをキューに入れることができますか?
今、GoGridをプロバイダーとして検討しています。ApacheのActive Messaging Queueソフトウェアを使用してこの問題を解決しています。私のWebアプリは、特定のインスタンスIDに割り当てられた「切断」タスクをキューに入れます。したがって、各クライアントセッションは特定のインスタンスIDに割り当てられます。インスタンスは、割り当てられた「切断」タスクのみをデキューします。
Azureで同様のことを実行することが実行可能かどうか、また一般的にどのように実行するかについて疑問に思っています。多くの異なるVMをセットアップしてスケーリングする必要はなく、代わりに単一のパッケージを展開するというアイデアが好きです。また、Apache ActiveMQやMSMQなどのサードパーティ製品を統合する代わりに、Azureのキューを利用することをお勧めします。
解決
機能セット、価格設定、ライセンス条件が確定するまで、Azureでの運用アプリケーションの構築について非常に心配しています。手始めに、あなたはそれと例えばコスト比較をすることさえできません。 GoGridまたはEC2またはMosso。だから、どうしてそれがフロントランナーになるのかわからない。また、これらのシステムはすべて、成熟するにつれてグリッチが発生することがわかっています。 Amazonのサービスは、他のどのサービスよりもはるかに広く使用されており、長年にわたって公開されています。私見Azureを選択することは、痛みが安定するためのレシピです。
キューイングのためにAmazonのシンプルキューサービスを検討しましたか
他のヒント
これにはWindows Azureを絶対に使用できると思います。追跡するセッションごとにキューを作成することをお勧めします。次に、そのセッションのキューに(たとえば)切断メッセージをエンキューします。その接続を処理しているワーカーインスタンスは、そのキューをポーリングする唯一のものである必要があるため、その接続でタスクの実行を処理する必要があります。
クライアントが接続するソケット接続をホストするアプリケーションについては、AzureでHTTP接続とHTTPS接続のみが許可されていると思われるため、許可されるものを再確認します。