カスタム クライアント サーバーの tcp/ip アプリを設計しています。アプリのネットワーク要件は次のとおりです。
- 安全な TCP/IP チャネル (指定されたポートで開かれている) を介してカスタム アプリケーション層プロトコルを話すことができる
- クライアントとサーバーの接続/チャネルは永続的なままにする必要があります。
- サーバー側アプリの複数のインスタンスが実行されている場合、(サーバー側の一意の ID に基づいて) サーバー側アプリの特定のインスタンスにクライアント接続をディスパッチできます。
設計目標の 1 つは、アプリをスケーリングすることであるため、負荷分散が特に重要です。EC2 と Windows Azure の負荷分散機能について調査しています。要件 1 は、今日のほとんどの製品でサポートされていると思います。ただし、要件2と3についてはよくわかりません。特に:
これらのサービス (EC2、Azure) のいずれかで、追加のアプリケーション レイヤー要件を指定することによって、アプリが負荷分散ポリシーに影響を与えることができますか? たとえば、Azure はクラウド サービスにラウンド ロビンのジョブ割り当てを使用しますが、負荷分散の決定の一部として上記の要件 3 を考慮する必要があることは明らかです。つまり、一意の ID に基づいて転送しますが、一意の ID がサーバー側インスタンスのいずれにも見つかりません。
要件 2 に従って、ロードバランサーは永続的な接続で動作しますか? Azure からの私の理解では、エンドポイントとしてパブリック ポートとプライベート ポートのペアを指定できるため、ロード バランサーはパブリック ポートを監視し、接続要求を実行中のインスタンスのプライベート ポートに転送します。その後、その接続で必要なものは何でも。これは正しい理解ですか?
どんな助けでも大歓迎です。