3

カスタム クライアント サーバーの tcp/ip アプリを設計しています。アプリのネットワーク要件は次のとおりです。

  1. 安全な TCP/IP チャネル (指定されたポートで開かれている) を介してカスタム アプリケーション層プロトコルを話すことができる
  2. クライアントとサーバーの接続/チャネルは永続的なままにする必要があります。
  3. サーバー側アプリの複数のインスタンスが実行されている場合、(サーバー側の一意の ID に基づいて) サーバー側アプリの特定のインスタンスにクライアント接続をディスパッチできます。

設計目標の 1 つは、アプリをスケーリングすることであるため、負荷分散が特に重要です。EC2 と Windows Azure の負荷分散機能について調査しています。要件 1 は、今日のほとんどの製品でサポートされていると思います。ただし、要件2と3についてはよくわかりません。特に:

  1. これらのサービス (EC2、Azure) のいずれかで、追加のアプリケーション レイヤー要件を指定することによって、アプリが負荷分散ポリシーに影響を与えることができますか? たとえば、Azure はクラウド サービスにラウンド ロビンのジョブ割り当てを使用しますが、負荷分散の決定の一部として上記の要件 3 を考慮する必要があることは明らかです。つまり、一意の ID に基づいて転送しますが、一意の ID がサーバー側インスタンスのいずれにも見つかりません。

  2. 要件 2 に従って、ロードバランサーは永続的な接続で動作しますか? Azure からの私の理解では、エンドポイントとしてパブリック ポートとプライベート ポートのペアを指定できるため、ロード バランサーはパブリック ポートを監視し、接続要求を実行中のインスタンスのプライベート ポートに転送します。その後、その接続で必要なものは何でも。これは正しい理解ですか?

どんな助けでも大歓迎です。

4

1 に答える 1

3

Windows Azureには、ホストされたサービスに入力エンドポイントがあります。これは、パブリックに面したポートです。VMのインスタンスが1つ以上ある場合(Webまたはワーカーの役割)、トラフィックはインスタンス間で分散されます。ルーティングするインスタンスを選択することはできません(たとえば、ステートレスアプリモデルをサポートする必要があります)。

スティッキーセッションモデルを適用する場合は、独自のフロントエンドロードバランサーを実行する必要があります(Web /ワーカーの役割で)。例:IIS + ARR(アプリケーション要求ルーティング)、またはnginxまたはこれをサポートする他のサーバーを使用できます。

上で述べたことは、Windows Azure IaaS(仮想マシン)にも当てはまります。この場合、負荷分散されたエンドポイントを作成します。ただし、負荷分散されていないエンドポイントのオプションもあります。それぞれが一意のポート番号を持つ3台のサーバーである可能性があります。これにより、あらゆるタイプの負荷分散がバイパスされますが、各仮想マシンに直接アクセスできます。サーバー(ここでもnginx、IIS + ARRなど)を実行している単一の仮想マシンを実行して、トラフィックを複数のアプリサーバー仮想マシン(ロードバランサー仮想マシンとアプリ間の直接通信を介してアクセス)の1つにルーティングすることもできます。サーバー仮想マシン)。

注:パブリックポートからプライベートポートへのマッピングでは、ロードバランシングを実行できません。これは、より便利です。クライアントにアクセスさせたいポートに関係なく、特定のポートで絶対にリッスンする必要のあるソフトウェアを実行する場合があります。

于 2012-10-04T11:49:05.753 に答える