ELBとは?
Elastic Load Balancingのこと。
単一のEC2インスタンスのみでもスケールアップにより需要の拡大にある程度は対応可能。
ただし限界があるため、冗長化させることが必要となる。
以下図の左側のような状態だと、万一EC2が止まってしまった場合にサービス自体が停止してしまう。
このように「ある特定の部分が止まると全体が止まってしまう」箇所のことを単一障害点(Single Point Of Failure, SPOF)という。
設計する時には単一障害点をいかに作らないようにするかが大切となる。
で、高負荷に耐えられるような設計にするにはどうしたら良いのだろうか?
図の右側のようにEC2インスタンスを並列に並べて、その上にロードバランサーを乗せる方法(スケールアウト)が一般的に取られる手法となる。
ロードバランサはBIG-IPといった製品を導入することも可能だが、ロードバランサのマネージドサービスであるElastic Load Balancing(ELB)を使用することが推奨されている。
1. Classic Load Balancer (CLB)
L4/L7レイヤーでの負荷分散を行う。
2. Application Load Balancer (ALB)
L7レイヤーでの負荷分散を行う。CLBよりも後に登場し、機能も豊富に提供されている。
3. Network Load Balancer (NLB)
L4レイヤーでの負荷分散をおkなう。HTTP以外のプロトコル通信の負荷分散をしたい時に利用する。
レイヤーごとでload balancingするって何よ??
レイヤー4とレイヤー7のロードバランシングの違い
レイヤー4ロードバランシングは、中間のトランスポートレイヤーで動作します。このレイヤーは、メッセージの内容に関係なくメッセージのデリバリーを処理します。TCP(Transmission Control Protocol)は、インターネット上のHTTP(Hypertext Transfer Protocol)トラフィック向けのレイヤー4プロトコルです。レイヤー4のロードバランサーは、パケットの内容は検査せず、上流のサーバとの間で単純にネットワークパケットの転送を実行します。また、TCPストリームの最初の数パケットを検査し、限定的にルーティングを決定できます。
レイヤー7ロードバランシングは、さらに上位のアプリケーションレイヤーで動作します。このレイヤーでは、各メッセージの実際の内容が処理されます。HTTPは、インターネット上のWebサイトのトラフィックに使用される主要なレイヤー7プロトコルです。レイヤー7のロードバランサーは、レイヤー4のロードバランサーに比べて、はるかに高度な方法でネットワークトラフィックをルーティングします。特に、HTTPなどのTCPベースのトラフィックを対象とします。レイヤー7のロードバランサーは、ネットワークトラフィックを終端し、中のメッセージを読み取ります。メッセージの内容(URLやCookieなど)に基づいて、ロードバランシングの判断を行うことができます。続いて、選択した上流サーバに新しいTCP接続を実行(または、HTTPキープアライブによって既存の接続を再利用)して、サーバにリクエストを書き込みます。
レイヤー7ロードバランシングの一例
要はURLの中身を見て負荷分散を実行したりすることができる。
トラフィックの多いWebサイトにユーザがアクセスするという簡単な例で考えてみましょう。セッション期間中に、ユーザは画像や動画などの静的コンテンツ、ニュースフィードなどの動的コンテンツや、注文状況などのトランザクション情報を要求する可能性があります。レイヤー7ロードバランサーは、どのようなコンテンツがリクエストされているかなど、リクエスト自体の情報に基づいてリクエストをルーティングできます。したがって、画像や動画のリクエストは、その画像や動画を格納するサーバにルーティングされ、マルチメディアコンテンツを提供するために高度に最適化されます。また、割引価格などのトランザクション情報のリクエストであれば、価格管理用アプリケーションサーバにルーティングされます。レイヤー7ロードバランシングにより、ネットワークやアプリケーションのアーキテクトは、高度に調整され最適化されたサーバインフラストラクチャを構築できます。または、信頼性が高く、需要に応じて効率的に拡張できる、アプリケーションデリバリーネットワークも構築できます。
Auto Scaling
利用状況に応じて自動的にインスタンスのスケールアウト/スケールインを実現するもの。
例:CPU使用率が80%を超えたら2台追加/CPU使用率が40%を割ったら2台減らす
ヘルスチェック
ELBと対象サーバが正常に接続されているかを自動的に確認してくれる機能。ELBから各EC2にヘルスチェックリクエストたるものを送信し、正しいレスポンスが帰ってきたインスタンスは正常、そうでなければ異常な状態と見做される。このヘルスチェックを通過した正常なインスタンスのみELBに紐づくことになる。
ヘルスチェックの審査基準は設定することが可能。何回失敗したらELBから切り離すか/何回成功したらELBに紐付けるか。ヘルスチェックリクエストの間隔の設定も可能。
ELBの紐付きに時間がかかってサーバーが重くなる時は、ヘルスチェックの設定の見直しも有効。
参考
・疎結合と単一障害点(Single Point Of Failure)について