SDN
← 概念一覧へ
ネットワーク

ロードバランサー

Load Balancer

大量のリクエストを複数のサーバーに振り分ける『交通整理係』。1台に集中させず分散することで、過負荷・単一障害点を防ぎ、水平スケールを可能にする。

キーポイント
  • 役割: リクエストを複数のサーバーへ分散。不健全なサーバーを避け、過負荷を防ぎ、単一障害点をなくす。
  • Layer 4(L4): IPアドレスとポート番号(トランスポート層情報)だけ見て振り分ける。中身は見ない。速くて軽い。
  • Layer 7(L7): URL・ヘッダー・Cookie(アプリ層情報)を見て振り分ける。賢いが重い。例: /video は動画サーバーへ。
  • 追加機能: SSL termination(暗号化処理を肩代わり)、Session persistence(同じユーザーを同じサーバーへ)。
  • LB自体も冗長化(active-active / active-passive)しないと、LBが単一障害点になる。
  • 水平スケール(scale out)を実現する要。ただしサーバーをステートレスにする必要がある。
トレードオフ

L4は高速・低リソースだが、中身を見ないため柔軟な振り分けができない。L7は柔軟だがリソースを食う。ロードバランサー自体がボトルネックや単一障害点になりうるので、複数台にすると今度は構成が複雑になる。また水平スケールするにはサーバーをステートレス(状態を持たない)にし、セッション情報は共有ストアに逃がす必要がある。

たとえ話: レストランの案内係

入口に立つ案内係(=ロードバランサー)が、来店客(=リクエスト)を空いているテーブル(=サーバー)に振り分けます。1つのテーブルに全員を詰め込まず、均等に配ることで、待ち時間を減らし、どこかが満席でも他に回せます。さらに『あのテーブルは片付け中(=故障)』を察知して、そこには案内しません。

図を描画中...

L4 と L7 の違い(一番のポイント)

ここが頻出のつまずき所。どこまで中身を覗いて振り分けるかの違いです。

Layer 4(トランスポート層)

封筒の『宛先IPとポート番号』だけ見て振り分けます。中の手紙(データの中身)は読みません。だから速くて軽い。でも『この内容は動画だから動画サーバーへ』のような賢い判断はできません。

Layer 7(アプリケーション層)

封筒を開けて中身(URL、ヘッダー、Cookie)まで読んでから振り分けます。たとえば /video で始まるリクエストは動画専用サーバーへ、決済リクエストは高性能サーバーへ、といった賢い振り分けができます。その代わり中身を解析する分、リソースを食います。

図を描画中...

便利な追加機能

  • SSL termination: HTTPSの暗号化・復号という重い処理をLBが肩代わり。これで各サーバーに証明書を置かなくて済み、サーバーは中身の処理に集中できる。
  • Session persistence(スティッキーセッション): 同じユーザーを毎回同じサーバーへ送る。サーバーがログイン状態を覚えている場合に便利。ただし水平スケールしづらくなる副作用あり。

水平スケールの前提: ステートレス

ロードバランサーで台数を増やす(水平スケール = scale out)には、どのサーバーに振られても同じように動く必要があります。サーバーがログインセッションを自分のメモリに抱えていると、次のリクエストが別サーバーに行ったときログインが切れてしまう。だからセッションは**外部の共有ストア(Redisなど)に逃がして、サーバー自体は何も状態を持たない(ステートレス)**設計にします。

振り分けアルゴリズム(代表例)

方式内容
ラウンドロビン順番に1台ずつ均等に
重み付きラウンドロビン能力の高いサーバーに多めに
Least loaded一番空いているサーバーへ
Session/Cookie同じユーザーは同じサーバーへ

つまずきポイント

  • 水平スケール(台数を増やす)と垂直スケール(1台を強化)は別。LBは水平スケールの要。
  • LBを置いただけだとLB自体が単一障害点。LBも2台以上で冗長化する(active-active等)のが定石。
  • 『同じユーザーは同じサーバーへ』(persistence)は便利だが、特定サーバーに偏ったり、スケールしづらくなる原因にもなる。

関連する概念

この概念で腕試し

関連する 13 問のクイズに挑戦できます。

クイズを解く