・Elastic Load Balancing(ELB)
AWSが提供する負荷分散サービス。マネージドサービスであり、ユーザーは必要なアプリケーションのインストールやバージョンアップなどを考慮することなく、負荷分散機能を利用できる。
負荷分散(ロードバランシング)とは
サービスの利用者が増えてくると、単一のリソースでは全てのリクエストを処理しきれなくなり、結果としてレスポンスの遅延が起こります。このような場合、リクエストを処理するリソースを複数配置し、それらのリソースにリクエストの処理を分散することでレスポンスの遅延が発生しないようにできます。
このような仕組みを負荷分散(ロードバランシング)という。
ELB配下の負荷分散先リソースのことを「ターゲット」といい、一つのELB配下で管理されるターゲットの集合を「ターゲットグループ」といいます。ターゲットにはEC2などのインスタンスや、IPアドレス、Lambda関数が指定でき、それらをまとめたターゲットグループ単位に負荷分散を行う。
なお、AZ障害時の影響を少なくするためにも、ターゲットはマルチAZ(複数のAZに配置する構成)にするのが一般的。
ELBはAWS Auto Scalingに対応しています。負荷の増減によって自動的にEC2などのインスタンスを追加(スケールアウト)したり、削除(スケールイン)したりできます。
【ELBの種類】
ELBにはロードバランシングの方式によって複数の種類がある。
■Application Load Balancer(ALB)
レイヤー7(アプリケーション層)で負荷分散を行う。
ALBではHTTP、HTTPSをサポート。また、WebSocketや、同一インスタンス内の複数ポートへの負荷分散、ホストベースやパスベース、URLクエリ文字列でのルーティングに対応しています。
WebSocketとは、ひとつのコネクション内で永続的にサーバー/クライアント双方からデータ送信できる技術。通常のWebアプリケーションの場合、クライアントからのリクエストにサーバーがレスポンスを返して接続終了となるが、WebSocketを使うと、一度接続したコネクションではクライアントからのリクエストがなくてもサーバー側からデータを送信できる。
チャットや株価情報のような、リアルタイムな情報提供を必要とするアプリケーションでよく使われる。
○ALBが対応している主なルーティング
・ホストベース
ホストベースのルーティングとは、クライアントがリクエストした接続先URLのFQDNに従ってルーティングできる機能のこと。例えば、クライアントの接続先URLが「http://www1.example.com」の場合はWebサーバー1にアクセスさせて、「http://www2.example.com」の場合はWebサーバー2にアクセスさせることができます。
・パスベース
パスベースのルーティングとは、クライアントがリクエストした接続先URLのパスに従ってルーティングできる機能のこと。例えば、クライアントの接続先URLが「http://www.example.com/web1/」の場合はWebサーバー1にアクセスさせて、「http://www.example.com/web2/」の場合はWebサーバー2にアクセスさせることができます。
・URLクエリ文字列
URLクエリ文字列でのルーティングとは、クライアントがリクエストした接続先URLのクエリ文字列に従ってルーティングできる機能のこと。URLクエリ文字列とは、ブラウザがWebサーバーに送信するデータをURLに表記したものです。URLが「http://www.example.com/web?lang=jp」であれば「?lang=jp」がURLクエリ文字列に該当。
■Network Load Balancer(NLB)
NLBはレイヤー4(トランスポート層)で負荷分散を行う。
NLBではTCP、UDP、TLSをサポート。また、WebSocketや、同一インスタンス内の複数ポートへの負荷分散に対応。
NLBはElasitc IPアドレス(固定のパブリックIPアドレス)と関連付けることができます。これによりクライアントからNLB配下のサーバーに、NLBに関連付けられたElastic IPアドレスでアクセスできるようになります。サーバーへのアクセスをドメイン名ではなくIPアドレスで行いたい場合や、クライアントのアクセス先をIPアドレスで管理・制限している環境などで有用。
Elasitc IPアドレスと関連付けられるのはNLBのみですが、NLBのターゲットにALBを指定すると、クライアントからALB配下のサーバーにNLBのElastic IPアドレスでアクセスできるようになります。
■Classic Load Balancer(CLB)
CLBはレイヤー7(アプリケーション層)およびレイヤー4(トランスポート層)で負荷分散を行う。
CLBではHTTP、HTTPS、TCP、SSL/TLSをサポート。CLBはALBやNLBより古いサービスでパフォーマンスが劣るため、基本的にはALBやNLBの利用が推奨。