AWS初心者学習⑧ ~ELBについて~

今回はELBについて書いていきたいと思います。
可用性の高いシステムを構築するためには非常に重要な機能です。もちろん、試験でも多くかかわってきまので、きちんと理解しておいた方がよいです。

 

ELB(Elastic Load Balancing)について
ELBをターゲット(Amazon EC2インスタンス、コンテナ、IPアドレス、Lambda関数)の前段に配置することで、アプリケーションへのトラフィックを複数のターゲットに自動的に分散します。これにより、スケールアップを容易にすることが可能となり、単一障害点もなくすことが可能です。ELBは、変動するアプリケーショントラフィックの負荷を、1つのAZで処理できます。ELBでは、3種類のロードバランサーが用意されています。


Application Load Balancer(ALB)
Application Load Balancerは、HTTP/HTTPSトラフィックの負荷分散に最適です。ALBを使用すると、マイクロサービスやコンテナといった最新のアプリケーションアーキテクチャを対象とした高度なリクエストルーティングを実現できます。
ALBは、レイヤー7で動作し、リクエストの内容に基づいて、Amazon VPCにあるターゲットにトラフィックをルーティングします。


Network Load Balancer(NLB)
Network Load Balancerは、きわめて高いパフォーマンスが要求されるTCPUDPおよびTLSにおけるトラフィックの負荷分散に最適です。
NLBは、レイヤー4で動作し、Amazon VPCにあるターゲットにトラフィックをルーティングします。また、きわめて低いレイテンシー(遅延)を維持しながら、1秒間に何百ものリクエストを処理できます。NLBは、突発的なトラフィックパターンや急変するトラフィックパターンを処理できるように最適化されてもいます。


Classic Load Balancer(CLB)
CLBは、複数のAmazon EC2インスタンスにおける基本的な負荷分散を提供し、レイヤー7とレイヤー4の両方で動作します。CLBは、EC2-Classicネットワーク内で構築されたアプリケーションを対象としている。

 

★ALBとCLBは同様に、レイヤー7での負荷分散を行いますが、後継であるALBの方が、機能を費用も優れています。ですので、特別な要件がなければALBを使用することをお勧めします。

 

ELBの利点
・高い可用性
ELBでは、受信トラフックが複数のAZにあるターゲットに分散され、健全なターゲットにのみトラフィックがルーティングされます。
また、ELBを使用すると、リージョン内での負荷分散が可能となり、異なるAZにある健全なターゲットにトラフィックがルーティングされます。

イメージはこんな感じです!

①まず、2つのWebサーバ用インスタンスの前段にELBを配置します。

f:id:Tk24:20191208231701p:plain

②そうすることで、Webサーバ用インスタンスAで障害発生した際にトラフィックをWebサーバ用インスタンスBにのみルーティングします。

f:id:Tk24:20191208235624p:plain

③その後、ELBがWebサーバ用インスタンスAの復旧をヘルスチェックで確認した際は、Webサーバ用インスタンスAにもトラフィックのルーティングを再開します。

・セキュア
ELBは、Amazon VPCとともに機能し、証明書管理、ユーザー認証およびSSL/TLS複合の統合といった堅牢なセキュリティ機能を提供します。
これらが組み合わされることで、TLS設定を柔軟に集中管理し、CPUを集中的に使用するアプリケーションの負荷を柔軟にオフロードできるようになります。

 

・弾力性
ELBは、ネットワークトラフィックパターンの急速な変化に対応できます。
また、Auto Scalingとの密接な統合により、手動での操作を必要とすることなく、様々なレベルのアプリケーション負荷に対応することが可能となり、アプリケーションの性能を十分に発揮させることができます。
簡単に言うと、負荷が増えた際にリソースを必要な分だけ追加し、必要がなくなれば不要なリソースを削除するようにできます。

 

・柔軟性
ELBでは、IPアドレスを使用してアプリケーションターゲットにリクエストをルーティングできます。これにより、アプリケーションターゲットを柔軟に仮想化することが可能となり、同じインスタンスでより多くのアプリケーションをホストできます。
また、同じネットワークポートを使用しながら各ターゲットアプリケーションに対して、個別にセキュリティグループを設定することが可能となり、マイクロサービスのアーキテクチャーにおけるアプリケーション間通信がさらに簡素化されます。

 

・堅牢なモニタリングと監査
ELBを使用すると、Amazon CloudWatchメトリクス、ロギング、リクエスト追跡を用いてアプリケーションとそのパフォーマンスをリアルタイムでモニタリングできるようになります。これにより、アプリケーションんぼ動作をより詳細に把握することが可能となり、問題の発見およびアプリケーションスタックにおけるパフォーマンスのボトルネックの特定、リクエスト単位で細かく行えるようになる。

 

・ハイブリット負荷分散
ELBによって、同じロードバランサーを使用してAWSおよびオンプレミスのリソースにかけての負荷分散が可能になります。これにより、オンプレミスアプリケーションのクラウドへの移行、バースト、フェイルオーバーが簡単になります。

 

Auto Scaling
システムの利用状況に応じて自動的にELBに紐づくインスタンスの台数を増やす、または減らす機能です。
要するに、システムの自動スケールアウトですね。
最小構成時の台数と最大構成時の台数、そして増減させる際の条件を設定することで利用できます。
例:最小2台
  最大4台
  増大条件:CPU使用率が80%を超えた場合 など
  減少条件:CPU使用率が30%を下回った場合 など

 

動きのイメージは以下になります。

①まず、既存のシステムが存在します。

f:id:Tk24:20191208222413p:plain

 

②上記の環境のWebサーバ用インスタンスA,BのCPU使用率が80%を超えた場合は、以下のようにインスタンスC,Dが追加されます。

f:id:Tk24:20191208223819p:plain

 

③その後、CPU使用率が30%以下になった際にインスタンスが削除されます。

スケールイン時に削除されるインスタンスは条件はデフォルトでは、

インスタンスの数が多いAZが対象
・次回の課金されるタイミングが最も短いもの

もう少し細かい条件がありますが、個人的には一先ずこの当たりを押さえておけばよいと思います。

f:id:Tk24:20191208230211p:plain

ざっくりとした流れはこんな感じです!


ELBの関連用語説明

・スケールアップ
EC2のインスタンスのタイプを上げること。増える負荷に対して、サーバーのスペックをあげることで対応する方法のこと。

f:id:Tk24:20191208195117p:plain

・スケールアウト
EC2のインスタンスの数を増やし、負荷(処理)を分散すること。
対象のシステムやレイヤーにもよりますが、Webサーバではこちらがベストプラクティスとされています。また、逆に台数を減らすことをスケールインといいます。

f:id:Tk24:20191208195153p:plain

・単一障害点
特定の部分が止まってしまうと全体が止まってしまう箇所のこと。
可用性の高いシステムを構築するためには、できるだけ単一障害点をなくすことが重要です。

 

 

f:id:Tk24:20191208195232p:plain