⚖️

【AWS】ELBについて

2021/03/15に公開

ELB - Elastic Load Balancing

アプリケーションへの複数のトラフィックを仮想サーバー(EC2インスタンス)やコンテナなどの複数のターゲットに自動で負荷を分散してくれるサービス。
*トラフィック・・・ネットワークに流れる情報のこと

負荷を分散することで、障害が発生した時も安定してサービスを稼働することができる。

4種類のELB

ELBでは4種類のロードバランサーがある。

  • ALB(Application Load Balancer)
  • NLB(Network Load Balancer)
  • GLB(Gateway Load Balancer)
  • CLB(Classic Load Balancer)ー今後のアップデートはないので、本記事では割愛。

ALB(Application Load Balancer)

AWSの公式ドキュメントからのALBの概要(一部抜粋)は以下の通り。

Application Load Balancerは、開放型システム間相互接続 (OSI) モデルの第 7 層であるアプリケーションレイヤーで機能します。ロードバランサーはリクエストを受信すると、優先度順にリスナールールを評価して適用するルールを決定し、ルールアクションのターゲットグループからターゲットを選択します。リスナールールを構成し、アプリケーショントラフィックのコンテンツに基づいて異なるターゲットグループにリクエストをルーティングできます。それぞれのターゲットグループでルーティングは個別に実行され、複数のターゲットグループに登録されているターゲットの場合も同じです。ターゲットグループレベルで使用するルーティングアルゴリズムを設定できます。

何じゃそれっていう用語がちらほら。。。

「開放型システム間相互接続(OSI)」「アプリケーションレイヤー」「リスナールール」「ターゲットグループ」。。。

ここら辺が読んでて「ん?」となったので、調べて自分なりに咀嚼して読み解いてみました。

「開放型システム間相互接続(OSI)」「アプリケーションレイヤー」

漢字とカタカナが多くて、理解するのがだるーってなりそうですが、ちょっとだけ頑張りましょう。

開放型システム間相互接続(OSI) は一般的には OSI参照モデル と呼ばれており、ネットワーク上でのコンピュータ同士のやり取りをどうやってするか(通信プロトコル)を7つの階層に分けたもの。

その7つの階層の中の一番上が アプリケーションレイヤー(層) となっています。

アプリケーションレイヤー(層) では、ユーザーが利用するアプリケーションの通信サービスが利用できる様にアプリケーションごとにプロトコルがプロトコルがある。(例:Webページの閲覧は HTTP )
*今回はAWS ELBを理解するための記事なので、関係するとこ以外は省きます✂️

「リスナールール」

個人的には、この リスナールール という単語が一番聞き慣れないかつ意味を予想しづらい言葉でした。

その リスナールール を理解するには、まず リスナー を理解していきましょう。

リスナー とはプロトコル(HTTPとか)とポートを設定して、その設定したプロトコルとポートを使用して接続リクエストをチェックするもの。
→おそらく、「どうやって」「どこに」接続するかを決めて、それらとリクエストを照らし合わせる様なものだろう🤔

そして、リスナールール優先度アクション条件で構成されている。
アクション条件は1つ以上設定する。
→ある条件に一致した時に、設定したアクションを優先度に応じて行うルールのこと🤔

「ターゲットグループ」

リスナールールを作成する時にターゲットグループを指定する。
ターゲットグループはターゲットにリクエストをルーティングする用に使われている。

→「誰に」リクエストを送るか決めるためのもの🤔

つまりALBとは

OSI参照モデルのアプリケーションレイヤーでプロトコルとかポートとかを決めるリスナールールに従いターゲットグループにしたがってリクエストをルーティングし働くロードバランサー。

→HTTP/HTTPSのトラフィックの負荷分散を行う。

NLB(Network Load Balancer)

AWSの公式ドキュメントからのNLBの概要(一部抜粋)は以下の通り。

Network Load Balancer は、開放型システム間相互接続 (OSI) モデルの第 4 層で機能します。毎秒数百万のリクエストを処理できます。ロードバランサーは、接続リクエストを受信すると、デフォルトルールのターゲットグループからターゲットを選択します。リスナー構成で指定されたポート上の選択したターゲットへの TCP 接続を開こうとします。

大体、ALBと書いてあることが同じ様な気がしますね。

明確に違う点としては、OSI参照モデル の第4層で機能するというところですね。
第4層はトランスポートレイヤー(層) とも呼ばれています。

このレイヤーは、「データが正しく送信先に送られていることをどう保証するかを決めるレイヤー」です。

上記のAWSの公式ドキュメントのNLBの概要の「TCP接続を開こうとします」では、トランスポートレイヤー でのTCPプロトコルでの通信をしますという意味でしょう。

つまりNLBとは

OSI参照モデルのトランスポートレイヤーで働き、めっちゃ早くリエスとを処理できるロードバランサー。

→TCP/UDPのトラフィックの負荷分散を行う。

GLB(Gateway Load Balancer)

AWSの公式ドキュメントからのGLBの概要(一部抜粋)は以下の通り。

A Gateway Load Balancer operates at the third layer of the Open Systems Interconnection (OSI) model, the network layer. It listens for all IP packets across all ports and forwards traffic to the target group that's specified in the listener rule. It maintains stickiness of flows to a specific target appliance using 5-tuple (for TCP/UDP flows) or 3-tuple (for non-TCP/UDP flows). The Gateway Load Balancer and its registered virtual appliance instances exchange application traffic using the GENEVE protocol on port 6081. It supports a maximum transmission unit (MTU) size of 8500 bytes.

GLBはまだ日本語訳されていなかったため、自分なりに訳してみると↓

「Gateway Load BalancerはOSIモデルの第3層であるネットワークレイヤーで機能する。
全てのポートを通る全てのIPパケットを認識し、リスナールールによって特定されたターゲットグループへと転送する。5つのタプル又は3つのタプルを使った特定のターゲット機器をメンテナンスする。
Gateway Load Balancerとそれらの登録された仮想機器インスタンスはポーチ6081上のGENEVEプロトコルを使ったアプリケーション通信をする。」

的な感じでしょうか。。。。

まじで何言ってるかわからんから、今は省く!笑

まとめ

ELBは負荷のことを考えて、データを流す先を自動で決めてくれるものなんだなぁ〜🤔

*誤った理解・付け足しの知識などあれば、ぜひDiscussionの方へ書いてください🙇‍♂️

Discussion