「落とさない」「高速に」が重要だったドットコム時代に生まれた
知っておきたいロードバランサーの基礎技術
2010年03月15日 06時00分更新
1990年代後半のドットコムブームの到来で、一気に脚光を浴びたのがサーバーの負荷分散を行なうロードバランサーである。今回はインターネットビジネスのインフラに欠かせないロードバランサーの基礎技術を学ぶ。
本記事は「アプリケーショントラフィック管理入門」の第2回です。過去の記事も合わせてご覧ください。
Webサービスは止められない
遅くできない
1990年代も後半にさしかかると、インターネットが一気に普及し、ビジネスに本格的に利用しようという機運が高まってきた。こうなると、サーバーの台数が少ないからサービスが停止してしまうとか、帯域が細いからアプリケーションの利用が快適にできないという理屈が通用しなくなった。
特に1990年代のインターネットブームでは、多くのドットコム企業が、Webでのサービスを展開することで投資家から資金を集めていた。Webサービスで利益を得るために必須とも呼べるページビューの向上や会員登録数の拡大を実現するためには、ありとあらゆる方法でパフォーマンスを上げなければならない。まして、サービスに停止時間が存在するなんてもってのほかだ。そのため、多くのドットコム企業は回線やサーバーの増設だけではなく、パフォーマンスや可用性の向上に投資を行なった。こうしたなか、大きな注目を集めたのが、サーバーへのリクエストを複数のサーバーに振り分ける「ロードバランシング」である。
ロードバランシングの概要
ロードバランシングを用いると、ユーザーのリクエストを複数のサーバーに分散させることにより、サーバーの負荷を低下させることができる。さらに、障害が発生したサーバーの処理を別のサーバーに引き継ぐことで、サービスの可用性を高めることも可能だ。
こうしたロードバランシングの例としてよく引き合いに出されるのが、銀行のATMの待ち行列だ。ATMが1台しかなければ、当然ユーザーはそこに列をなすしかない。しかし、同一のATMが3台あれば、単純に3倍のユーザーをさばくことができることになる。もちろん、各ATMに行列を作ってもよいのだが、一列に並ばせ、ATMコーナーの入口で専門の振り分け担当者を配置すれば、効率的にATMを運用できる。空いているATMにいち早く案内したり、壊れたATMの利用を事前に回避したり、といった作業を振り分け担当者が一元的にコントロールできるからだ。
こうした、ロードバランシングの処理を専門で行なう装置がロードバランサー(負荷分散装置)だ。ロードバランサーの最大のメリットは、サーバーとは独立したネットワーク側で動作させることが可能であるため、導入や運用が容易な点だ。従来、複数のサーバーを1つのシステムとして動作させようとした場合、OSやサーバーアプリケーションの負荷分散機能を利用する必要があった。しかし、これらの機能を利用するには、複数のサーバーを連携動作させるための設定やチューニングが必要になる。しかも、こうした作業はサーバーの台数が増えるたび行なわなければならない。
一方、ロードバランサーの場合、サーバーの手前に設置しておけば、リクエストを勝手に振り分けてくれる。サーバーの設定は必要なく、OSやアプリケーションの種別も問わない。また、サーバーの増設も基本的には振り分け対象に加えるだけなので、容易だ。
ロードバランシングの手法
ロードバランシングにおいては、専門の担当者の振り分け方法にあたる「アルゴリズム」がきわめて重要になる(図1)。
もっとも古典的な手法としては、「ラウンドロビンDNS」が挙げられる。これはDNSサーバーのレコードにおいて、同一のホスト名に対して複数のサーバーのIPアドレスを登録しておく方法だ。DNSサーバーは、問い合わせに対し、登録されたIPアドレスを順繰りに返答していくので、結果的に複数のサーバーにアクセスが分散する。ある意味、3つのATMにそれぞれ列を作るのと変わらず、シンプルな振り分けといえる。
もちろん、この方法では限界がある。たとえば振り分け先のどれか1台のサーバーが故障しても、DNSサーバーは検知できない。そのため、故障したサーバーにもリクエストを振り分け続けてしまう。また、負荷の高いサーバーだろうが、関係なく振り分けてしまう。そのため、専用のロードバランサーでは、さまざまな振り分けアルゴリズムを用いることができるようになっている。
たとえば、「重み付けラウンドロビン」という方法を使うと、各サーバーへの振り分けを均等ではなく、異なる割合で振り分ける。たとえば、3台のサーバーでスペックが異なっている場合、もっとも処理能力の高いサーバーに多くのリクエストを振り分けるといった重み付けが可能になる。
また、サーバーの負荷に応じて、動的に振り分けるアルゴリズムもある。この場合、サーバーの負荷をどのように測定するかで、いくつかの方法に分けられる。たとえば、接続しているコネクションの数が少ない順、応答速度が短い順などでリクエストを振り分けることになる。これらは後述するヘルスチェック機能により、ロードバランサーが検知し、サーバーの負荷を判断し、処理を振り分けるわけだ。
さらに、「コンテンツスイッチング」という振り分けもある。これはURLやパス名などでリクエストされるコンテンツの種類を識別し、振り分け先のサーバーを分けるという方法だ。たとえば、Webサーバーであれば、HTMLファイルと画像ファイル、CGIアプリケーションを異なるサーバーに保管しておき、ロードバランサーで3つのリクエストをそれぞれのサーバーに振り分けるわけだ(図2)。
こうすることで、サービス全体で見ると処理が平準化され、安定したパフォーマンスを得ることができるようになる。また、停止したサーバーを自動的に切り離すことができ、サービスとしての可用性を高めることが可能になる。
(次ページ、ヘルスチェックとセッション維持)
この連載の記事
-
第6回
ネットワーク
TCPの改良やキャッシング、圧縮でより速く -
第5回
ネットワーク
WANの遅延を抑えて、レスポンスアップする -
第4回
ネットワーク
サーバーの処理を肩代わりする「オフロード」とは? -
第3回
ネットワーク
ますます高機能化するロードバランサーの技術 -
第1回
ネットワーク
アプリケーションを快適に使うためになにが必要? -
ネットワーク
アプリケーショントラフィック管理入門<目次> - この連載の一覧へ