サーバー負荷分散のアルゴリズムについて

今回は負荷分散アルゴリズムについて説明します。

負荷分散を行うロードバランサーはそれぞれ負荷分散アルゴリズムを持っています。
その中で主要なアルゴリズムを紹介します。

1. ラウンドロビン
ラウンドロビンは最もシンプルなアルゴリズムといえます。クライアントからのリクエストを順番に準備しておいたサーバに振り分けるというものです。
このアルゴリズムに適しているのはサーバのスペックが同等で、提供するWebページが静的なページの場合になります。

2. 最小コネクション
最小コネクション方式はサーバの中から現在最もクライアントとのコネクション数が少ないところに振り分ける方式となります。Webアプリシステムを構築する場合、あるリクエストはHPアクセスであり、片やwebアプリプログラムを処理することとなり1リクエストで処理時間に大きな差が出てきます。
そのため、webアプリなどを処理している間はコネクションが張りっぱなしになるため、コネクションが多い=負荷がかかっていると判断でき、逆にコネクション数が少ないサーバにリクエストを振り分けるというわけです。
このアルゴリズムに適しているのはやはりwebアプリシステムといえます。

3. 最速レスポンス
最速レスポンス方式とは、サーバの中から最もリクエストのレスポンスが早かったところを選択する方式となります。レスポンス速度は負荷状況やトラフィック状況に左右されるため、最もレスポンスが早いサーバは負荷、トラフィックともに余裕があるといえます。
このアルゴリズムが適しているのはやはりwebアプリシステムとなりますが、特にレスポンスタイムが重要となる携帯アプリ、ソーシャルアプリコンテンツを運営するシステムに適しているといえます。



サーバー負荷分散の必要性

負荷分散についてのメモ書きです。

そもそもなぜサーバーを負荷分散する必要があるのでしょうか。
サーバーで動かすサービスはいろいろありますが、主にwebサーバーを運用している場合、最初はそれほどアクセスもないため一台で十分ですが、アクセス量が増加すると一台では処理が間に合わなくなります。

その場合、まず考えるのがスペックを強化することではないでしょうか。
なるほど、CPU、メモリ、HDDなどの各種パーツを最新のものに置き換えることで確かにこれまでよりも多くの処理をこなすことができるようになります。
しかし、サーバーが故障してしまった場合はどうでしょう。
お客様はwebサイトにアクセスできないので、他のサイトにいってしまい機会損失が発生してしまいます。

そのため、webサーバーを負荷分散して1台が故障しても他が動作することでwebサービスが停止しないようにするわけです。
しかし、単純にホストを2台(ホストA、ホストBとします)にしたとしても簡単に運用できるわけではありません。

まず、ユーザーからアクセスするときにユーザーはドメイン名でアクセスしますが、それを毎回ホストA、ホストBに振り分けてあげる必要があります。
この仕組みはDNSサーバーがもっているDNSラウンドロビンという方法で対応できますがこの方法は本当に単純に振り分けるだけなので、いろいろな問題が発生します。
例えばショッピングサイトを運用している場合、あるユーザーがサイトにアクセスした場合、次のアクセスが別のホストに振り分けられるとこれまでのサイトの情報が失われてしまいます。他にもいろいろな問題を考える必要があります。

次回はこれらの問題を解決する負荷分散方法についてお話します。