なぜ使うの?

年率100%を超える勢いで伸びるインターネットの爆発的な成長によって、私たちの生活においてますますインターネットは重要な役割を持つようになった。 特に人気のあるサイトでは短時間で簡単にサーバーに負荷がかかるため、サーバーの作業負荷は急速に増えていった。サーバーの過負荷問題を乗り切るには2つの解決方法があった。1つの方法はもっと高いパフォーマンスのサーバーにアップグレードするという方法で、この方法だと今よりも負荷が多くなった場合、またサーバーをアップグレードしなければならないし、アップグレードをするプロセスも複雑でコストも高かった。 もうひとつの方法は複数のサーバーを使うやり方である。拡張性のあるクラスタリングサーバーを構築するのである。負荷が増えたら、増えた要求に見合うだけのサーバーを追加するだけでよい。しかし、クラスタリングサーバーを構築するにはいくつかの方法があった。

よく使われているのがラウンドロビンDNSだ。これはラウンドロビンのルールで1つの名前で異なるIPアドレスを対応づける。このようにクラスタリングによって異なるクライアントは異なるサーバーに理想的に対応づけることができる。この方法でサーバー間で負荷は分散される。しかし、クライアントをキャッシュする性質と階層的なDNSの性質上、サーバー間を簡単に不均衡にしてしまっていた。このようにピークの負荷を処理するのは簡単にはできない。また、RR-DNS ではTTL(Time To Live)の時間をうまく選べない。小さな値を取りすぎると RR-DNS はそれがボトルネックになってしまうし、大きな値を取りすぎればダイナミックロードの不均衡が性能を悪化させる。TTLを0に設定するとホストごとに細かくスケジューリングするので、異なるユーザーのアクセスパターンでは不均衡を導いてしまうかもしれない。なぜならば、ある人はそこのWEBページでたくさんのデータを拾ってくるかもしれないし、ある人は2,3ページだけ見て、どこか他のページに行ってしまうかもしれないからだ。その上、サーバーが落ちた時、IP アドレスに名前を割り振ったクライアントがサーバーが落ちているかに気づくかは当てにならないし、ブラウザで "reload" か "refresh" のボタンを押したかどうかの問題も存在する。

もっと良い方法はクラスターのサーバー間で負荷を分散するロードバランサーを使うことだ。エンドユーザーはクラスターサーバーを見るのではなく、バーチャルサーバーを見るので、平行サービスは1つのIPアドレスを使って、バーチャルサーバーのふりをさせることができる。コネクションごとに細かくスケジューリングすることは、サーバー間で負荷のバランスを知らせてあげることができる。1つまたは複数のサーバーが落ちた時、それを隠すことができます。サーバー管理は楽になり、管理者は時間が取れるようになり、障害対応が重なることもなくなります。

ロードバランシングには2つのレベルがあり、アプリケーションレベルとIPアドレスレベルがあります。例えば、 Reverse-proxypWEB は拡張的なWEBサーバーを構築するアプリケーションレベルのロードバランシング方法です。クラスタリングではHTTPリクエストがきたら、他のWEBサーバーにリクエストを飛ばし、結果が返ってきたらクライアントにそれを返してやります。アプリケーションレベルでのHTTPリクエストとリプライはオーバーヘッドが大きいので、サーバーノードの数が4を超えると(サーバーのスループットにもよるが)アプリケーションレベルのロードバランサーは新たなボトルネックが出てくると思います。

IPアドレスレベルでのロードバランシングのほうが良い。なぜなら、IPレベルでのロードバランシングのオーバーヘッドは小さいし、最大でサーバーノード数が25又は100まで増やせるからだ。Linux Virtual Serverはこのように設計されている。どのように使うかは次のセクションで説明している。


Last updated: 1999/6/27

Created on: 1998/5/28