Amazon Web Services ブログ

新しいNetwork Load Balancer – 秒間数百万リクエストに簡単にスケーリング

Elastic Load Balancing(ELB)は、Auto ScalingAmazon CloudWatchを含む3つの組みの一部としてローンチした2009年以来、AWSの重要な要素になっています。それから、私たちは多数の機能を追加し、そしてApplication Load Balancerをリリースしました。コンテナで稼働するアプリケーションに対するアプリケーションレベルでのコンテンツベースルーティングをサポートする様に設計されており、Application Load Balancer はマイクロサービス、ストリーミング、リアルタイムワークロードと相性が良いです。

長年にわたって、私達のお客様はあらゆる規模のwebサイトや、アプリケーションをサポートする為にELBを利用しています。1, 2台のT2インスタンス上で動くシンプルなサイトや、ハイエンドインスタンスで構成される大きなフリート上で動き大量のトラフィックを捌く複雑なアプリケーションにまで利用されています。ELBはバックグラウンドでトラフィックを監視し、需要に応じる様に自動的にスケールしています。このプロセスには、余裕をもったバッファが含まれていて、長年にわたってより迅速になりより反応性があがってきたことで、生放送やフラッシュセール、ホリデーシーズンををサポートするためにELBを利用しているお客様にとっても、よく動作します。しかしながら、リージョン間の瞬時のフェイルオーバーや急激なワークロードの変動(スパイク)などの状況では予想されるトラフィックの急増に対してELBをプリプロビジョニングをするようお客様と協力して対応してきました。

新しい Network Load Balancer

今日、新しいNetwork Load Balancer(NLB)を発表します。NLBは超低遅延で高いスループットを維持しながら利用者の努力なしに、秒間何百万リクエストを捌く様に設計されています。Network Load Balancerはターゲットグループやターゲットの完全なプログラム制御を含めて、Application Load BalancerとAPI互換性があります。最も重要な機能のいくつかは以下の通りです。

固定IPアドレス – 各Network Load Balancerは 各VPCサブネットの範囲に対して1つの固定IPアドレスを提供します。us-west-2aにあるサブネットにターゲットがあり、他のターゲットがus-west-2cのサブネットにあった場合、NLBは2つのIPアドレス(サブネットあたり1つ)を作成し管理します。そのIPアドレスに対する接続は そのサブネット内のインスタンス全体に分散します。さらに制御をするために、各サブネットに対して既存のElasticIPを割り当てることも可能です。IPアドレスを完全に制御することで、Network Load BalancerはIPアドレスを、DNSレコードやファイアウォールルールなどにハードコードされる必要がある場合でも利用可能です。

ゾーナリティ(Zonality) – サブネット単位のIP機能はパフォーマンスの向上により遅延を減少させ、アイソレーションとフォールトトレランスを通じて可用性を向上させ、Network Load Balancerの利用をクライアントアプリケーションから透過的にします。Network Load Balancerは、自動フェイルオーバーを可能にしながら、特定の送信元からの一連のリクエストを1つのサブネットのターゲットにルーティングします。

送信元アドレスの保持 – Network Load Balancerでは、到達コネクションのオリジナルの送信元IPアドレスと送信元ポートを維持するので、アプリケーションソフトウェアはX-Forwarded-Forやプロキシプロトコルや他のワークアラウンドをサポートする必要がありません。これは、VPC Security Groupsを含む一般的なファイアウォールルールをターゲット上で利用可能であることを意味しています。

長時間の接続 – NLBは組み込まれたフォールトトレランスによりコネクションを扱うため、NLBは何ヶ月も何年にもわたってオープンなコネクションを処理できるため、IoTやゲーム、メッセージングアプリケーションに最適です。

フェイルオーバーRoute53による ヘルスチェックによって、NLBはリージョン内およびリージョン間のIPアドレス間のフェイルオーバーをサポートします。(訳注: NLB単体では複数AZをサポートします)

Network Load Balancerの作成

EC2コンソールの画面を開き、Network Load Balancerを作成することができます。Load Balancers を選択し、Create Load Balancerをクリックします。

Network Load Balancerを選び、Createをクリックし、詳細を入力します。ターゲットVPCの各サブネットに対してElasticIPを選択することがで、Network Load Balancerにタグづけができます。

次にConfigure Routingをクリックし、新しいターゲットグループを作成します。名前を入力し、プロトコルとポートを選択します。トラフィックポートまたは代替に選んだポートに対するヘルスチェックも設定することができます。

Register Targetsとトラフィックを受けるEC2インスタンスをクリックし、 Add to registeredをクリックします。

全ての項目が問題無い事を確認し、Createをクリックします。

新しいLoad Balancerの状態はprovisioningで、1分程度の間にactiveに代わります。

テスト目的のために、コンソールからLoad BalancerのDNS名前を確認します。(通常はAmazon Route 53を使い、もっとわかりやすい名前を使用します。)

それから大量のトラフィックを送りました。(1秒か、2秒の間実行する事を意図していましたが、気をとられ、膨大な数のプロセスを生成してしまいました。これはうれしいアクシデントでした。)

$ while true;
> do
>   wget http://nlb-1-6386cc6bf24701af.elb.us-west-2.amazonaws.com/phpinfo2.php &
> done

もちろん、より規律あるテストではBees with Machine Gunsの様なツールを使用します!

トラフィックを流す様にするため少し休憩したのち、私のLoad BalancerのCloudWatchメトリックスを確認し、簡単に、突然のトラフィックの猛攻撃を処理することができたことを確認しました。

どの様な負荷をかけているか確認するために、EC2インスタンスをみました。(本当にうまくいったことがわかりました)

私の同僚達が私が実施したよりもより規律的なテストを実施しています。彼らはNetwork Load Blancerをセットアップし、それにはEC2インスタンスのオートスケールフリートを利用しました。彼らは数百台のEC2インスタンスにより構成される2番目のfleetをセットアップし、それぞれBees with Machine Gunsを実行し、非常に多数のリクエストとレスポンスサイズを生成する様に設定しました。秒間150万リクエストからはじめ、素早くダイアルを全部あげ、テストリソースの最大に達する前に、秒間300万以上のリクエスト、総帯域幅が30Gbpsに達しました。

Load Balancerの選択

いつものように、Load Balanerを選ぶ場合、アプリケーションの要求を考える必要があります。以下はいくつかのガイドラインです。

Network Load Balancer(NLB) – TCPトラフィックの負荷分散に理想的で、NLBは超低遅延を維持しながら秒間数百万のリクエストを取り扱う能力があります。NLBはAvailability Zone毎に1つの固定IPを使いながら、突発的で変動しやすいトラフィックパターンを取り扱う事に最適化されています。

Application Load Balancer(ALB) – HTTPおよびHTTPSトラフィックの高度なロードバランシングに理想的で、ALBはマイクロサービスやコンテナベースのアプリケーションを含むモダンなアプリケーションアーキテクチャをサポートする高度なリクエストルーティングを提供します。

Classic Load Balancer(CLB) – EC2 Classicネットワーク上に作成されたアプリケーションに最適です。

横並びでの比較には、Elastic Load Balancing Details の表を確認してください。

現在Classic Load Balancer を利用していて、Network Load Balancerに移行しようとしている場合には新しい Load Balancer Copy Utilityを確認してください。このPythonツールは既存のClassic Load Balancerと同じ設定でNetwork Load Balancerを作成する手伝いをします。また既存のEC2インスタンスを新しいload balancerに登録することもできます。

価格と利用状況

Application Load Balancerと同様に、価格はLoad Balancer Capacity Units、LCUに基づきます。費用はLCUあたり$0.006で、以下のディメンジョンの内、最も高い値に基づきます。

  • Bandwidth -LCUあたり1 GB
  • New Connections – LCUあたり800
  • Active Connections – LCUあたり100,000

ほとんどのアプリケーションは帯域幅バウンドで、Application またはClassic Load Balancerと比較すると
約25%のコスト削減(負荷分散について)になります。

Network Load BalancerはChina(Beijing)以外の商用リージョンの全てで利用可能で、AWS CloudFormation, Auto Scaling, Amazon ECSでもサポートされています。

Jeff;

原文: New Network Load Balancer – Effortless Scaling to Millions of Requests per Second (翻訳: SA浅野・岩永)