こんにちは、ディレクターのエリカです。
AWS(Amazon Web Services)の『Elastic Load Balancing』(以下 ELB)サービスのオプションに『Application Load Balancer』(以下 ALB)が追加されました。
ELBとALB
よく知られているOSI参照モデルでは、ロードバランサーはレイヤー4(トランスポート層)かレイヤー7(アプリケーション層)で実行されます。レイヤー4のロードバランサーはネットワークプロトコルのレベルで動作するので、ネットワークパケットの中身は見ずに負荷を分散します。したがって、HTTPやHTTPSの機能は無視します。レイヤー7のロードバランサーはパケットの中を見て、HTTPとHTTPSヘッダなどの情報にアクセスし、より賢い方法で負荷を分散します。
これまでのELBは、レイヤー4およびレイヤー7両方の機能を有していました。これに対し、ALBではレイヤー7でのみ動作しますが、いくつかの先進的な機能をサポートするようになりました。
ALBで利用できる主な機能
URLベースのルーティング
URLベースでのルーティングが可能になりました。
例えば、/admin へのリクエストや、/recruit へのリクエストをそれぞれ別のサーバグループ(ターゲットグループと呼ばれます)にルーティングすることができるようになりました。これにより、それぞれのサービスを独立して実行し、スケールさせることが可能です。現在は、URLベースのルーティングルールは最大で10個まで定義できます。この先、他のルーティング方式の実装も計画されているとのことです。
コンテナベースアプリケーションのサポート
これまで『Amazon EC2 Container Service』(以下 ECS)を利用して、ひとつのEC2インスタンス上で複数のコンテナをマイクロサービスとして動かしていた場合には、ロードバランサーを利用する際のポートマッピングやヘルスチェックなどの設定に注意が必要でした。ALBでは、コンテナをターゲットグループに紐付けることができ、またより詳細なポートレベルのヘルスチェックを実施できます。
メトリクスの改善
ポートベースでのヘルスチェックレポートがサポートされるようになります。これにより、マイクロサービス毎でメトリクスを収集することができ、それぞれの負荷に応じたスケールアップ・ダウンの設定が容易になります。
プロトコルとワークロードの追加サポート
ALBでは新たに2つのプロトコルがサポートされました。HTTP/2とWebSocketです。
HTTP/2 サポート
HTTP/2は、HTTP1.1プロトコルから多数の改善がなされています。ひとつのコネクションの上で複数のリクエストがサポートされ、ネットワークトラフィックが削減されます。
ちなみに、『Amazon CloudFront』でもHTTP/2がサポートされるようになりました。
WebSocket サポート
HTTP接続を利用した古い方式ではなく、より効率よく長期間のコネクションが利用可能になります。ALBはWebSocketをネイティブにサポートします。
ALBを使ってみて
試しにELBをALBに置き換えてみたのですが、HTTP/2サポートの恩恵を受けることができました。
また、GoogleがHTTPSに対応しているサイトを優遇するといった趣旨のニュースを目にする機会も増えてきました。まだサイトが常時SSLに対応していない場合は、これを機にALBへの移行と常時SSLへの対応などを進めるといいかもしれませんね。
気になる方は、ぜひLIGまでご相談ください。
こうして便利な機能がどんどんサポートされていくのはうれしいですね。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。