ロードバランサー — 次のお客さんはどの窓口へ?
アクセスが増えてサーバー1台では捌ききれなくなったら、サーバーを何台かに増やして仕事を分担します。そのとき入り口に立って「次のお客さんはあなたの窓口へ」と案内する係がロードバランサーです。
ポイントは「どう振り分けるか」。下の図1で、片方のサーバーだけ処理が遅い状況を作ってあります。リクエストを送ると線の上を流れて選ばれたサーバーへ届きます。ラウンドロビンと最小接続数で流れ方がどう変わるか、「連続送信」で眺めてみてください。
順番にひとつずつ、平等に配ります。
入口
(LB)
(LB)
「リクエストを送る」を押すと、丸いリクエストが線を流れてサーバーに届きます。届いた丸は「処理中」になり、しばらくすると消えて「累計」が増えます。
図1 — 線を流れるリクエストと、各サーバーの処理中/累計件数
「平等」と「実際の空き具合」は違う
ラウンドロビンは「1番→2番→3番→1番…」と機械的に順番で配ります。実装が単純で速いのが利点ですが、図のように遅いサーバーにも容赦なく同じペースで送るため、そこだけ処理中のリクエストが溜まっていきます。
最小接続数は「いま抱えているリクエストが一番少ないサーバー」に送ります。遅いサーバーは仕事が溜まりやすい=接続数が多いままなので、自然と選ばれにくくなり、速いサーバーに多く流れます。サーバーの性能や処理時間にばらつきがあるときに効いてきます。
用語ミニ辞書
- ロードバランサー
- 複数のサーバーへリクエストを振り分ける入り口の係。
- ラウンドロビン
- 順番に均等に配る方式。単純で速いが、各サーバーの状況は見ない。
- 最小接続数
- 処理中の接続が最も少ないサーバーへ配る方式。負荷の偏りに強い。
まとめ
サーバーの性能がそろっているならラウンドロビンで十分。処理時間にムラがあるなら、実際の混み具合を見る最小接続数の方が偏りを抑えられます。ほかにも、重みづけ(性能の良いサーバーに多く配る)や、同じ利用者を同じサーバーに固定する方式など、目的に応じた配り方があります。