Elastic Load Balancingの仕組み - Amazon EC2と連携したトラフィック分散

どうも、Shinyaです。この記事では、AWSのElastic Load Balancing(ELB)について解説します。Amazon EC2を学んでいると必ず登場するサービスですが、EC2そのものに比べると解説される機会が少ない印象があります。ELBの基本的な仕組み、ロードバランサーの種類、ルーティングアルゴリズム、そしてEC2 Auto Scalingとの連携について整理します。
- Amazon EC2を学んでいてELBの役割を理解したい人
- ロードバランサーの基本的な仕組みに興味がある人
- EC2 Auto Scalingとトラフィック分散の関係を知りたい人
- AWSのインフラ構成を学び始めた人
Elastic Load Balancing(ELB)とは
Elastic Load Balancing(ELB)は、受信したアプリケーショントラフィックを複数のターゲット(EC2インスタンス、コンテナ、IPアドレスなど)に自動的に分散するAWSのロードバランシングサービスです。1つまたは複数のアベイラビリティゾーン(AZ)にまたがってトラフィックを分散し、アプリケーションの可用性と耐障害性を向上させます。
ELBの主な役割は以下の通りです。
- トラフィック分散: 受信リクエストを複数のターゲットに均等に分配し、特定のインスタンスへの負荷集中を防ぐ
- ヘルスチェック: ターゲットの稼働状態を定期的に監視し、正常なターゲットにのみトラフィックをルーティングする
- SSL/TLS終端: AWS Certificate Manager(ACM)と連携し、HTTPS接続の暗号化・復号処理をロードバランサー側で実行する
- 高可用性: 複数のAZにまたがる構成により、特定のAZに障害が発生した場合でも他のAZにトラフィックを振り分ける
EC2と組み合わせるメリット
Amazon EC2を使用したシステムでは、ELBを組み合わせることでコンピューティングリソースを効率的に活用できます。
例えば、時間帯によって混雑具合が異なるレストランの予約システムを考えます。このシステムではAmazon EC2上でバックエンドサーバーを運用し、フロントエンドとバックエンドの間にELBを配置しています。
昼の時間帯は他の時間帯よりもアクセスが集中するため、EC2 Auto Scalingによってインスタンス数が増加します。このとき、ELBはオートスケールで追加されたインスタンスを自動的にルーティング対象に組み込み、トラフィックを最適に分散します。
ELBがない場合、オートスケールで追加されたEC2インスタンスにトラフィックが適切に振り分けられず、新しいインスタンスがアイドル状態のまま放置されたり、既存のインスタンスが過負荷状態になる可能性があります。ELBはこの問題を解決し、フロントエンド層とバックエンド層を疎結合に保ちながら、トラフィックの同期を最適化します。
AWS公式ドキュメントによると、Auto Scalingによって起動されたインスタンスはロードバランサーに自動的に登録され、終了されたインスタンスは自動的に登録解除されます。手動でのインスタンス登録・解除は不要です。
ロードバランサーの種類
ELBには4種類のロードバランサーがあり、ユースケースに応じて選択します。
| 種類 | レイヤー | 主なユースケース | 対応プロトコル |
|---|---|---|---|
| Application Load Balancer(ALB) | L7(アプリケーション層) | HTTP/HTTPSベースのWebアプリケーション | HTTP, HTTPS |
| Network Load Balancer(NLB) | L4(トランスポート層) | 高パフォーマンスが求められるTCP/UDP通信 | TCP, UDP, TLS |
| Gateway Load Balancer(GLB) | L3(ネットワーク層) | サードパーティ製仮想アプライアンスの展開 | IP |
| Classic Load Balancer(CLB) | L4/L7 | レガシーワークロード(前世代) | HTTP, HTTPS, TCP, SSL |
Classic Load Balancer(CLB)は前世代のロードバランサーです。AWSはCLBから現行世代のロードバランサー(ALB、NLB、GLB)への移行を推奨しています。新規構築ではALBまたはNLBの使用を検討できます。
ALBとNLBの使い分け
一般的なWebアプリケーションではALBが適しています。ALBはHTTPヘッダー、パスパターン、ホスト名などに基づく高度なルーティングルールを設定でき、マイクロサービスやコンテナベースのアプリケーションに対応しています。
一方、ゲームサーバーやIoTデバイスとの通信のように、低レイテンシかつ高スループットが求められるケースではNLBが有効です。NLBは毎秒数百万リクエストの処理に対応し、固定IPアドレスの割り当ても可能です。
ルーティングアルゴリズム
ELBのトラフィック分散は、ロードバランサーの種類ごとに異なるルーティングアルゴリズムで動作します。
ALBのルーティング
ALBでは、以下のルーティングアルゴリズムが利用できます。
| アルゴリズム | 説明 |
|---|---|
| ラウンドロビン(デフォルト) | 登録されたターゲットに順番にリクエストを振り分ける |
| 最小未処理リクエスト | 処理中のリクエスト数が最も少ないターゲットにルーティングする |
ラウンドロビンはリクエストを均等に分配するシンプルな方式です。ターゲットの処理能力が均一な場合に有効です。一方、最小未処理リクエスト(Least Outstanding Requests)は、各ターゲットの負荷状況を考慮して振り分けるため、処理時間にばらつきがあるアプリケーションで効果的です。
NLBのルーティング
NLBではフローハッシュアルゴリズムを使用します。プロトコル、送信元/送信先IPアドレス、送信元/送信先ポート、TCPシーケンス番号をもとにハッシュ値を算出し、ターゲットを決定します。同一の接続元からのリクエストは同じターゲットにルーティングされるため、セッションの一貫性を保つことができます。
CLBのルーティング
CLBでは、プロトコルに応じて異なるアルゴリズムが適用されます。
- HTTP/HTTPS: ラウンドロビン
- TCP: 最小接続数(Least Connections)
ELBの主要コンポーネント
ELBは以下の3つの主要コンポーネントで構成されています。
リスナー
リスナーは、設定されたプロトコルとポートで接続リクエストを受け付けるプロセスです。例えば、ポート443でHTTPSリクエストを受け付け、定義されたルールに基づいてターゲットグループにルーティングします。
ターゲットグループ
ターゲットグループは、リクエストのルーティング先となるターゲット(EC2インスタンス、コンテナ、IPアドレスなど)の論理的なグループです。ルーティングアルゴリズムやヘルスチェックはターゲットグループ単位で設定します。
ヘルスチェック
ヘルスチェックは、ターゲットの稼働状態を定期的に確認する仕組みです。HTTP GETリクエストやTCPの接続確認などで応答をチェックし、正常なターゲットにのみトラフィックをルーティングします。異常と判定されたターゲットはルーティング対象から自動的に除外されます。
まとめ
この記事では、AWSのElastic Load Balancing(ELB)について、基本的な仕組みからロードバランサーの種類、ルーティングアルゴリズム、EC2 Auto Scalingとの連携までを解説しました。ELBはEC2ベースのシステムにおいてトラフィックの最適な分散を実現し、アプリケーションの可用性とリソース効率の向上に寄与するサービスです。ALB、NLB、GLBの3種類の現行ロードバランサーから、ユースケースに応じた選択が可能です。
参考リンク:

