レイヤー4ロードバランシングとは
レイヤー4ロードバランシングでは、ネットワークのトランスポート層(レイヤー4)で定義された情報に基づいて、クライアントからのリクエストをサーバー群に分散する方法を決定します。特にインターネットトラフィックの場合、レイヤー4ロードバランサーは、パケットの内容を考慮せず、パケットヘッダーに記録された送信元と宛先のIPアドレスおよびポートに基づいて、負荷分散先を決定します。
ネットワーク層は、開放型システム間相互接続[OSI]参照モデルで定義された全7層で構成されます。詳細については、以下の「OSIモデルとインターネットモデルの層」を参照してください。
ロードバランシングの詳細については、「Application Load Balancing with NGINX Plus」を参照してください。
レイヤー4ロードバランシングとNAT
現在、「レイヤー4ロードバランシング」という用語は、一般に、WebサイトやサービスについてロードバランサーのIPアドレスをクライアントに通知する(たとえばDNS経由で)構成を指します。そのため、クライアントはリクエストの宛先IPアドレスとしてロードバランサーのアドレスを指定します。
レイヤー4ロードバランサーは、リクエストを受信して負荷分散先を決定すると、リクエストパケットに対してネットワークアドレス変換(NAT)も実行し、記録されている宛先IPアドレスをロードバランサー自身のアドレスから、内部ネットワーク上で選択したコンテンツサーバーのアドレスに変更します。同様に、サーバーからのレスポンスをクライアントに転送する前に、パケットヘッダーに記録されている送信元アドレスをサーバーのIPアドレスからロードバランサー自身のIPアドレスに変更します。(パケットに記録されている宛先TCPポート番号と送信元TCPポート番号も、同様の方法で変更される場合があります。)
レイヤー4ロードバランサーは、TCPストリームの最初の数パケットから抽出したアドレス情報に基づいてルーティングを決定し、パケットの内容は検査しません。レイヤー4ロードバランサーには、ベンダーが提供する専用ハードウェアデバイス上で独自の負荷分散ソフトウェアを実行するものが多く、NAT処理はソフトウェアではなく専用チップで実行される場合があります。
汎用ハードウェアの性能が現在ほど高くなく、クライアントとアプリケーションサーバー間のやり取りもはるかに単純だった頃、Layer 4ロードバランシングはトラフィック処理の一般的なアーキテクチャアプローチでした。Layer 7などの高度なロードバランシング方式よりも必要な計算量は少ないものの、現在ではCPUとメモリが十分に高速かつ安価になったため、ほとんどの状況でLayer 4ロードバランシングのパフォーマンス上の優位性はごくわずか、または意味のないものになっています。
レイヤー4ロードバランサーとレイヤー7ロードバランサーの比較
レイヤー7ロードバランサーは、OSIモデルの最上位層であるアプリケーション層で動作します(インターネットでは、この層の主要なプロトコルはHTTPです)。レイヤー7ロードバランサーは、HTTPヘッダーのさまざまな特性や、URL、データの種類(テキスト、動画、画像)、Cookie内の情報など、メッセージの実際の内容に基づいてルーティングを決定します。
転送される情報のより多くの要素を考慮するため、レイヤー7ロードバランシングはレイヤー4と比べて処理時間が長くなり、より多くのコンピューティングリソースが必要になる可能性がありますが、全体的な効率の向上につながることもあります。たとえば、レイヤー7ロードバランサーは、クライアントが要求しているデータの種類(動画、テキストなど)を判別できるため、負荷分散の対象となるすべてのサーバーに同じデータを複製する必要はありません。
NGINX PlusやオープンソースのNGINXソフトウェアなど、最新の汎用ロードバランサーは通常、レイヤー7で動作し、完全なリバースプロキシとして機能します。NATを使用するレイヤー4ロードバランサーのようにパケット単位でトラフィックを管理するのではなく、レイヤー7ロードバランシングプロキシはリクエストとレスポンスをすべて読み取ることができます。クライアントとアプリケーションサーバー間のトランザクションを完全に把握したうえで、トラフィックを管理および操作します。
一部のロードバランサーは、サービスの特性に応じて、レイヤー4またはレイヤー7の負荷分散を提供するように構成できます。前述のとおり、最新の汎用ハードウェアは一般に十分な処理能力を備えているため、レイヤー4の負荷分散による計算コストの削減効果は、レイヤー7の負荷分散がもたらす柔軟性と効率性の向上というメリットを上回るほど大きくありません。
NGINXがどのように役立つか
NGINX PlusとNGINXは、Dropbox、Netflix、Zyngaなど、トラフィック量の多いWebサイトで利用されている最高クラスの負荷分散ソリューションです。世界中で3億5,000万を超えるWebサイトが、コンテンツを迅速かつ確実、安全に配信するために、NGINX PlusとNGINX Open Sourceを利用しています。
ソフトウェアベースのロードバランサーであるNGINX Plusは、同等の機能を備えたハードウェアベースのソリューションよりも大幅に低コストです。NGINX Plusの包括的な負荷分散機能により、高度に最適化されたアプリケーションデリバリーネットワークを構築できます。
サーバーファームの前段にNGINX Plusをロードバランサーとして配置することで、Webサイト全体の効率、パフォーマンス、信頼性、拡張性が向上します。NGINX Plusは、顧客満足度とIT投資収益率の最大化に役立ちます。
OSIモデルとインターネットモデルのレイヤー
インターネットトラフィックについて、「レイヤー4」および「レイヤー7」のロードバランシングと呼ぶのは簡便な略称ですが、厳密には正確ではありません。詳しく知りたい方は、このまま読み進めてください。
ネットワークを7つの層に分けるという考え方は、Open Systems Interconnection(OSI)参照モデルに由来します。このモデルでは、ネットワーク機能を抽象化された7つの層に分け、一般にその番号(レイヤー1~レイヤー7)で呼びます。各層には、データをどのようにパッケージ化して転送するかを定めた標準があります。これらの標準では、リクエストまたはレスポンスを構成するビットストリームを、プロトコルデータユニット(PDU)と呼ばれる個別のパッケージに分割する方法などを定めています。また、各PDUにヘッダーとして追加するメタデータについても規定しており、たとえば送信元ホストと宛先ホストのアドレスが含まれる場合があります。
ネットワーク機能のさまざまな側面を異なるレイヤーに割り当てることで、各レイヤーでの処理が簡素化されます。各プロトコルは、自身のレイヤーのPDUを処理する方法と、隣接するレイヤーのプロトコルがそれぞれのデータ分割レベルでPDUを再パッケージ化するためにヘッダーへ含めるメタデータだけを把握すればよいためです。
World Wide Web上のトラフィックを処理する基本プロトコル(総称して「インターネットプロトコル(IP)スイート」)へのネットワーク機能の割り当ては、OSIモデルと完全には一致しません。これは、最終版のOSIモデルが1984年に公開される前に、IPスイートが定義され、実装されていたためです。それでも、IPスイートを構成する各種プロトコルは、OSIの各層におおむね対応する個別の機能を担っています。
各レベルには複数のプロトコルが定義されていますが、Webサイトトラフィックの負荷分散に関連するプロトコルとレベルは次のとおりです。
- Internet Protocol(IP)はインターネットワーク層(レイヤー3)で動作します。そのPDUはパケットと呼ばれ、IPは送信元ホストから宛先ホストへのパケット配信を担います。通常、インターネットを構成する複数の小規模ネットワーク間の境界を越えて配信されます。インターネットに直接接続されている各デバイスには一意のIPアドレスがあり、パケットの宛先となるデバイスの特定に使用されます。
- Transmission Control Protocol(TCP)はトランスポート層(レイヤー4)で動作します。TCPは、ブラウザーが動作するホストとサーバーアプリケーションが動作するホストの間に、実質的に仮想接続を確立します。ネットワークは信頼性が保証されないため、IPパケットが失われたり、破損したり、順序どおりに到着しなかったりすることがあります。TCPにはこれらのエラーを修正する仕組みがあり、IPパケットのストリームを信頼性の高い通信チャネルに変換します。多数のアプリケーションが動作するホスト上で正しいアプリケーションにデータを配信できるよう、各アプリケーションには一意のTCPポート番号が割り当てられます。
- Hypertext Transfer Protocol(HTTP)は、アプリケーション層(レイヤー7)で動作します。WebブラウザとWebサーバー(またはHTTPエンコーディングを解釈できる任意のアプリケーション)の間で通信するために、データをどのようにエンコードするかを定義します。
このリストからも明らかなように、インターネットトラフィックの「レイヤー4ロードバランシング」という表現は便宜的な略称です。より正確には「レイヤー3/4ロードバランシング」と呼びます。これは、ロードバランサーが送信元サーバーと宛先サーバーのIPアドレス(レイヤー3)と、アプリケーションのTCPポート番号(レイヤー4)の両方に基づいて判断するためです。また、HTTPはOSI参照モデルのレイヤー5、6、7の機能を兼ね備えているため、「レイヤー7ロードバランシング」は、より厳密には「レイヤー5~7ロードバランシング」と呼ぶことができます。

