以下に添付図面を参照して、この発明に係るサーバ制御方法およびサーバ制御装置の実施形態を詳細に説明する。なお、この実施形態によりこの発明が限定されるものではない。
[第一の実施形態]
以下の実施の形態では、第一の実施形態に係るシステムの構成、要求処理サーバ装置の構成、データ管理装置の構成、負荷分散転送装置の構成および各装置による処理の流れを順に説明し、最後に第一の実施形態による効果を説明する。
[システムの構成]
まず、第一の実施形態に係る負荷分散転送装置が適用されるシステムの構成の一例を説明する。図1は、第一の実施形態に係るシステムの構成の一例を示す図である。図1に示すように、第1の実施形態に係るシステムは、複数の要求処理サーバ装置100A〜100D、データ管理装置200、負荷分散転送装置300、複数のクライアント400A〜400Cを有する。なお、以下では、要求処理サーバ装置100A〜100Dについて、特に区別することなく説明する場合には、要求処理サーバ装置100と記載し、クライアント400A〜400Cについて、特に区別することなく説明する場合には、クライアント400と記載する。
要求処理サーバ装置100A〜100Dは、各種データをそれぞれ記憶しており、クライアント400A〜400Cから識別子を受け付けると、識別子で特定される応答を送信する。
データ管理装置200は、各識別子の発生頻度に関する情報を取得し、識別子を要求処理サーバ装置100に割り当てる。具体的には、データ管理装置200は、要求処理サーバ装置100が提供するサービスを決定する識別子を、識別子の発生頻度の高いものから小さいものの順序で並べ、識別子の領域を三つの領域に分割する。ここで、発生頻度の高い領域をホットゾーン、発生頻度の小さい領域をコールドゾーン、ホットゾーンとコールドゾーンに挟まれた領域をノーマルゾーンと呼ぶことにする。次に、ホットゾーン、ノーマルゾーン、コールドゾーンの領域毎に異なる負荷分散方法を採用する。ホットゾーンの領域に含まれる識別子の処理は、要求処理サーバ装置100全体で負荷を分散する。コールドゾーンの領域に含まれる識別子に対しては、コンシステントハッシング法と同様に、識別子のハッシュ値によって決まる要求処理サーバ装置100で処理を行うことで、要求処理サーバ装置100間で担当する識別子を分割し、負荷を分散する。
また、データ管理装置200は、ノーマルゾーンの領域に含まれる識別子に対しては、各識別子の発生頻度に応じた複数、且つ、全サーバ装置数未満の要求処理サーバ装置100で負荷分散を行うとともに、要求処理サーバ装置100間で担当する識別子を分割することで、負荷を分散する。ホットゾーンとノーマルゾーンにおける、各識別子の処理を行う複数の要求処理サーバ装置100に対してはラウンドロビン法により負荷分散を行う。
負荷分散転送装置300は、クライアント400A〜400Cから受信した識別子を含む処理要求を要求処理サーバ装置100A〜100Dに転送する。
まず、クライアント400A〜400Cは、識別子を含む処理要求を負荷分散転送装置300に送信する。次に、負荷分散転送装置300は、要求処理サーバ装置100A〜100Dから一つの要求処理サーバ装置100を決定し、クライアント400A〜400Cから受信した処理要求を、決定した要求処理サーバ装置100に送信する。負荷分散転送装置300、要求処理サーバ装置100A〜100Dが、上記の動作に必要なデータは、データ管理装置200において保持される。なお、負荷分散転送装置300、要求処理サーバ装置100A〜100Dおよびデータ管理装置200は、物理的な筐体を表すものではなく、あるサーバの筐体に、負荷分散転送装置、要求処理サーバ装置、データ管理装置の機能の一つ、または、複数の組合せを搭載してもよい。また、図1では、負荷分散転送装置を一台として説明しているが、複数台としてもよい。
[要求処理サーバ装置の構成]
次に、図2を用いて、図1に示した要求処理サーバ装置100の構成を説明する。図2は、第一の実施形態に係る要求処理サーバ装置100の構成を説明するための図である。図2に示すように、要求処理サーバ装置100は、通信制御I/F部101、制御部102、記憶部103を有する。通信制御I/F部101は、データ管理装置200、および、負荷分散転送装置300との通信を行う。
記憶部103は、図2に示すように、要求処理サーバ装置側要求処理用データベース108を有する。記憶部103は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。
要求処理サーバ装置側要求処理用データベース108は、例えば、図3に例示するように、クライアントから送信される「識別子」と、該当する識別子を含む要求処理の発生回数を表す値である「頻度」と、識別子を含む要求処理に対する応答を行うための「処理用データ」とが対応付けて記憶される。
図2に戻って、制御部102は、サービス応答部104と、頻度情報更新部105と、頻度情報取得要求処理部106と、処理用データ取得部107とを有する。ここで、制御部102は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路やASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路である。
サービス応答部104は、サービスの処理要求を受信した場合に、処理要求に含まれている識別子に対応する応答を作成して、応答を送信する。具体的には、サービス応答部104は、最初に、サービスの処理要求を受信すると、処理要求に含まれる識別子を取り出し、これを含むレコードを要求処理サーバ装置側要求処理用データベース108から検索する。ここで、サービス応答部104は、処理要求に含まれている識別子が要求処理サーバ装置側要求処理用データベース108に含まれているか、否かを検査する。本検査において、サービス応答部104は、識別子が要求処理サーバ装置側要求処理用データベースに含まれていた場合、検索したレコードから該当する識別子に対する処理用データを用いて処理要求に対する応答を作成する。
その後、サービス応答部104は、受信した処理要求に含まれる識別子に対する頻度情報を更新するために頻度情報更新部に依頼して頻度情報更新処理を実施し、最後に、応答を送信する。また、上記の検査において、サービス応答部104は、識別子が要求処理サーバ装置側要求処理用データベースに含まれていなかった場合、登録されていない識別子に対する応答を作成し、応答を送信する。
頻度情報更新部105は、要求処理サーバ装置側要求処理用データベース108における頻度情報の変更を行う。具体的には、頻度情報更新部105は、最初に、処理要求に含まれる識別子をもとにして、要求処理サーバ装置側要求処理用データベース108から該当するレコードを検索する。次に、頻度情報更新部105は、該当するレコードの頻度情報を読み込み後、頻度情報をインクリメントし、その後、該当するレコードの頻度情報の変更を行う。なお、前述したように、頻度の情報は、該当する識別子を含む要求処理の発生回数を表す値を格納している。
頻度情報取得要求処理部106は、データ管理装置200から、頻度情報取得要求処理を受信すると、識別子と頻度情報の組を取得し、取得した識別子と頻度情報の組を返信する。具体的には、頻度情報取得要求処理部106は、最初に、データ管理装置から、頻度情報取得要求処理を受信すると、要求処理サーバ装置側要求処理用データベース108の、i番目のレコードについて、iを1からNrまで変化させながら、全てのレコードに対して以下の処理を行う。
つまり、頻度情報取得要求処理部106は、i番目のレコードについて、識別子と頻度情報の組を取得する。取得した頻度情報について、頻度情報を、頻度情報を取得している期間で割り、実際の単位時間当たりの発生回数に変換し、識別子とともにデータ管理装置に送信するために記憶する。そして、頻度情報取得要求処理部106は、全てのレコードに対して上記の処理を実施したのち、送信用に記憶した識別子と、識別子に対する単位時間当たりの発生回数の組を全て送信する。
処理用データ取得部107は、処理用データを送信する旨を、データ管理装置200に要求し、要求処理サーバ装置用の処理用データを受信して識別子と処理用データの組を要求処理サーバ装置側要求処理用データベース108に格納する。
具体的には、処理用データ取得部107は、まず、処理用データを送信する旨を、データ管理装置200に要求する。このとき、本要求に、要求を行う要求処理サーバ装置情報を含める。そして、この要求処理サーバ用の処理用データを送信する旨を受信したデータ管理装置200は、処理用データを要求処理サーバ装置100に対して応答する。続いて、処理用データ取得部107は、データ管理装置200から送られてきた、該当要求処理サーバ装置用の処理用データを受信する。その後受信した識別子と処理用データの組を図3で示す要求処理サーバ装置側要求処理用データベース108に格納する。
[データ管理装置の構成]
次に、図4を用いて、図1に示したデータ管理装置200の構成を説明する。図4は、第一の実施形態に係るデータ管理装置200の構成を説明するための図である。図4に示すように、データ管理装置200は、通信制御I/F部201、制御部202、記憶部203を有する。通信制御I/F部201は、要求処理サーバ装置100との通信を行う。
データ管理装置200は、まず、サーバ装置が提供するサービスを決定する識別子を、識別子の発生頻度の高いものから小さいものの順序で並べ、識別子の領域をノーマルゾーン、ホットゾーンとコールドゾーンの三つの領域に分割する。
次に、ホットゾーン、ノーマルゾーン、コールドゾーンの領域毎に異なる負荷分散方法を採用する。ホットゾーンの領域に含まれる識別子の処理は、サーバ装置全体で負荷を分散する。コールドゾーンの領域に含まれる識別子に対しては、コンシステントハッシング法と同様に、識別子のハッシュ値によって決まるサーバ装置で処理を行うことで、サーバ装置間で担当する識別子を分割し、負荷を分散する。ノーマルゾーンの領域に含まれる識別子に対しては、各識別子の発生頻度に応じた複数、且つ、全サーバ装置数未満のサーバ装置で負荷分散を行うとともに、サーバ装置間で担当する識別子を分割することで、負荷を分散する。ホットゾーンとノーマルゾーンにおける、各識別子の処理を行う複数のサーバ装置に対してはラウンドロビン法により負荷分散を行う。
ここで、ノーマルゾーンに含まれる識別子の中で最もランクの値が小さい、即ち、発生頻度が最も高いランクをRfで表し、コールドゾーンに含まれる識別子の中で最もランクの値が小さい、即ち、発生頻度が最も高いランクをRlで表すこととする。今、ランクRfの識別子の処理を担当するサーバ装置の台数を、Ndiv(r)で表すと、ノーマルゾーンの識別子を処理するために必要なサーバ装置の延台数は、下記(2)式となり、全サーバ装置の数を、Nservで表すと、Nservに対する下記(2)式でもとめられる倍率が、十分に大きな倍率Kに近い値となるように、Rf、および、Rlを決定する。即ち、下記(3)式となり、Kを十分に大きな値とする。また、上記条件を満たすRfとRlの組合せの中で、Rf、および、Rlが出来るだけ小さな値となるRfとRlを選択する。
記憶部203は、図4に示すように、データ管理装置側要求処理用データベース211、要求処理サーバ装置データベース212、ハッシュ値要求処理サーバ装置変換用データベース213およびデータ管理装置側分散度決定用データベース214を有する。記憶部203は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。
データ管理装置側要求処理用データベース211は、例えば、図5に例示するように、「識別子」が登録されており、各識別子に対して、クライアント400からの要求処理に必要な「処理用データ」、識別子に対する要求処理が発生する「頻度」、および、識別子を頻度の高いものから低いものの順序で並べたときの順番である「ランク」が管理されている。
要求処理サーバ装置データベース212は、例えば、図6に例示するように、登録されている要求処理サーバ装置100の「番号」と、要求処理サーバ装置100を識別する情報である「要求処理サーバ装置情報」とを記憶する。
ハッシュ値要求処理サーバ装置変換用データベース213は、例えば、図7に例示するように、識別子のハッシュ値の範囲である「担当領域」と、その範囲に含まれる識別子の処理を担当する要求処理サーバ装置100を示す「要求処理サーバ装置情報」とを記憶する。
データ管理装置側分散度決定用データベース214は、例えば、図8に例示するように、「識別子のハッシュ値」と、その識別子のハッシュ値に対応する「識別子のリスト」と、その識別子を処理するときの「分散度」とを記憶する。ここで分散度とは、該当する識別子の処理を何台の要求処理サーバに分散するかを表す値であり、この値が0の場合は、全ての要求処理サーバに処理を分散することを意味する。
図4に戻って、制御部202は、処理用データ応答部204と、識別子割当決定部205と、頻度情報取得部206と、識別子割当通知部207と、分散度決定部208と、ランク決定部209と、サーバ装置データ送信部210とを有する。ここで、制御部202は、CPUやMPUなどの電子回路やASICやFPGAなどの集積回路である。
具体的には、処理用データ応答部204は、受信した処理用データ要求の送信元に対して応答として送信する。具体的には、処理用データ応答部204は、まず、処理用データ要求を受信すると、ハッシュ値の下限Hminと上限Hmaxの差をサーバ数Nsで割った値Hwidthを求め、これを各サーバが要求処理を担当するハッシュ値の幅とする。要求処理サーバ装置データベース212から、処理データ要求の送信元の要求処理サーバ装置100を検索し、その要求処理サーバ装置100の要求処理サーバ装置データベース212内に登録されている番号をnrとする。データ管理装置側要求処理用データベース211に登録されている全ての識別子に対して、以下の処理を行う。データ管理装置側要求処理用データベース211のi番目に登録されているレコードを検索し、ハッシュ値をh、ランクをr、分散度をdとする。ハッシュ値hに対して、Hmin+(nr−1)Hwidth≦h、且つ、h<Hmin+nrHwidthを満たすかを検査する。
ここで検査の条件を満足しなかった場合は、1≦r<Rfを満足するかを検査する。Hmin+(nr−1)Hwidth≦h、且つ、h<Hmin+nrHwidthを満たすか、および、1≦r<Rfを満足するかの検査の条件を満足した場合は、データ管理装置側要求処理用データベースのi番目に登録されているレコードの識別子と処理用データの組を応答用として記憶する。そして、1≦r<Rfを満足するかの検査の条件を満足しなかった場合は、Rf≦r<Rlの条件を満足するかを検査する。この条件を満足した場合は、Hmin+(ns−1)Hwidth≦h、且つ、h<Hmin+nsHwidthとなるnsをもとめる。その後、ns≦nr<ns+dの条件を満足するかを検査し、満足する場合は、データ管理装置側要求処理用データベース211のi番目に登録されているレコードの識別子と処理用データの組を応答用として記憶する。
また、ns≦nr<ns+dの条件を満足するかの検査の条件を満足しない場合、および、Rf≦r<Rlの条件を満足するかの検査において、条件を満足しなかった場合は、データ管理装置側要求処理用データベースのi番目に登録されているレコードに関して、応答用のデータとしては、何も記憶しない。以上を、1≦i≦Nrを満たす全てのiについて実行する。最後に、全ての応答用に記憶した識別子と処理用データの組を、受信した処理用データ要求の送信元に対して応答として送信する。
識別子割当決定部205は、図9に示すように、決定された各識別子のランクに応じて、ランクがRfよりも高く発生頻度が高い識別子が属するホットゾーン、ランクがRf以下であってRlよりも高く発生頻度が中程度の識別子が属するノーマルゾーン、または、ランクがRl以下であって発生頻度が低い識別子が属するコールドゾーンのいずれかに各識別子を振り分ける。
また、識別子割当決定部205は、ホットゾーンに振り分けられた識別子により識別されるデータの要求に対する応答処理を、全ての要求処理サーバ装置100のうちのいずれかの要求処理サーバ装置100に割り当て、ノーマルゾーンに振り分けられた識別子により識別されるデータの要求に対する応答処理を、複数の要求処理サーバ装置100のうちのいずれかの要求処理サーバ装置100に割り当て、コールドゾーンに振り分けられた識別子により識別されるデータの要求に対する応答処理を、一つのサーバ装置に割り当てる。
また、識別子割当決定部205は、ノーマルゾーンに属する識別子により識別されるデータの要求に対する応答処理が割り当てられる要求処理サーバ装置100の延べ台数を、全要求処理サーバ装置100の台数よりも十分に大きな値とするように、RfおよびRlを設定する。
具体的には、識別子割当決定部205は、まず、コールドゾーンの最も頻度の高いランクであるRl、および、ノーマルゾーンの最も頻度の高いランクであるRfを決定する。この処理については、後述する。次に、ハッシュ値の下限Hminと上限Hmaxの差をサーバ数Nsで割った値Hwidthを求め、これを各サーバが要求処理を担当するハッシュ値の幅とする。その後、要求処理サーバ装置データベースに登録されている、番号iが、1からNsである各サーバiについてループを繰り返す。ループ内の各繰り返しでは、以下の処理を行う。サーバiの担当するハッシュ値の下限をHmin+(i―1)Hwidthとする。
その後、サーバiの担当するハッシュ値の上限をHmin+iHwidthとする。これらの結果サーバiの担当するハッシュ値は、ここで計算した下限以上、且つ、上限未満を担当することになる。最後に、図6に例示した要求処理サーバ装置データベース212から、番号がiである要求処理サーバ装置情報を検索し、検索した要求処理サーバ装置情報・ハッシュ値上限・下限の範囲を、図7に示すハッシュ値要求処理サーバ装置変換用データベースに登録する。ここで、ハッシュ値要求処理サーバ装置変換用データベース213は、識別子のハッシュ値の範囲である担当領域と、その範囲に含まれる識別子の処理を担当する、要求処理サーバ装置情報によって構成される。
上記の識別子割当決定部の処理の中で、説明したコールドゾーンの最も頻度の高いランクであるRl、および、ノーマルゾーンの最も頻度の高いランクであるRfの決定は、以下のように行う。
図10は、これらのRl、Rfの決定の流れを表す。まず、要求処理サーバ装置単体で処理可能な識別子の発生頻度fiは、データ管理装置の外部から指定され入力される。次に、ジップ定数p、及び、総識別子数Nrを決定する。最後に、要求処理サーバ装置総数Ns、コールドゾーンの最も頻度の高いランクであるRl、および、ノーマルゾーンの最も頻度の高いランクであるRfを決定する。
図10で示した流れに従い、最終的な、コールドゾーンの最も頻度の高いランクであるRl、および、ノーマルゾーンの最も頻度の高いランクであるRfの決定する処理を以下に説明するが、まず、ジップ定数pの決定について説明する。
まず、発生頻度f(r)は、上述した(1)式で表すことができる。(1)式の両辺の対数をとると、下記の(4)式になる。
よって、頻度、及び、ランクを対数としたグラフを描くことで、その傾きがジップ定数pを表すことになる。図11は、ジップの法則に従う場合の頻度とランクを縦軸・横軸とも対数にしたグラフに描いた状態を表しており、この傾きによりジップ定数pを計算することができる。頻度とランクの関係が、完全には、ジップの法則に従わない場合でも、最小二乗法を用いて、分布に近い直線の傾きを求めることが可能であり、これによりジップ定数pを定めることができる。
また、このとき、グラフの切片log aについては、図12のように、実際の頻度とランクの関係を全てのランクにおいて、上回るように分布を定めても良い。また、図13のように、一定の値(図中では、106)よりも頻度の大きい領域、即ち、100〜106の領域のランクにおいて、実際の頻度とランクの関係を上回るように分布を定めても良い。更に、一定の値よりも頻度の大きい領域において、最小二乗法などを用いて分布に近い直線を求めても良い。
ジップ定数pを決定した後、総識別子数Nrを決定する。総識別子数Nrの決定については、図5で示したデータ管理装置側要求処理用データベース211に含まれる識別子を数え上げることで決定することができる。その後、要求処理サーバ装置総数Nsの決定を行う。本処理については、図34を用いて後述する。
次に、p=1かどうかの判定を行う。p=1の場合、まず、それぞれ、値VlとVfを計算する。ここで、Vl、および、Vfは、それぞれ、Rl、および、Rfを決定するための基準となる値である。その後、Vf≧1の判定を行い、Vf≧1の場合、「Vf≧1且つp=1のときのRlとRfの決定」(詳細は、図36)を実行する。この判定で、Vf≧1が否定された場合、「Vf<1且つp=1のときのRlとRfの決定」(詳細は、図38)を実行する。
上記の判定において、p=1が否定された場合、それぞれ、値VlとVfを計算する。その後、Vf≧1の判定を行い、Vf≧1の場合、「Vf≧1且つp≠1のときのVlとVfの決定」(詳細は、図37)を実行する。上記の判定で、Vf≧1が否定された場合、「Vf<1且つp≠1のときのRlとRfの決定」(詳細は、図39)を実行する。
上記で説明した、「要求処理サーバ装置総数Nsの決定」、「Vf≧1且つp=1のときのRlとRfの決定」、「Vf<1且つp=1のときのRlとRfの決定」、「Vf≧1且つp≠1のときのRlとRfの決定」、及び、「Vf<1且つp≠1のときのRlとRfの決定」について、それぞれ説明する。
「要求処理サーバ装置総数Nsの決定」について、ランク1からランクNrまでの発生頻度の総和をSとして求める。そして、Sを要求処理サーバ装置単体で処理可能な識別子の発生頻度fiで割ることで、必要な要求処理サーバ装置総数を求める。要求処理サーバ装置総数は、1以上の整数でなければならないため、ここで計算した値を下回らない最小の整数を求めNsとする。
次に、「Vf≧1且つp=1のときのRlとRfの決定」について説明する。まず、Vlについて、その値を超えない最大の整数を求めRlに代入する。次に、このRlを基にしたVfを求め、そのVfを下回らない最小の整数をRfに代入する。RlとRfの値が、下記(5)式を満足しているかを判定し、満足している場合は、それらの値をRlとRfとして採用する。上記の判定で条件を満足していない場合は、Rlを1だけ増加させ、上記したRlを基にしたVfを求め、そのVfを下回らない最小の整数をRfに代入する処理を、条件を満足するまで繰り返し実施する。
次に、「Vf<1且つp=1のときのRlとRfの決定」について説明する。まず、下記(6)式を満足するVlを求め、Vlの値を超えない最大の整数を求めてRlに代入する。次に、このRlを基にしたVfを求め、そのVfを下回らない最小の整数をRfに代入する。Rfの値が、Rf≧1を満足しているかを判定し、満足している場合は、それらの値をRlとRfとして採用する。上記の判定で条件を満足していない場合は、Rlを1だけ増加させ、上記したRlを基にしたVfを求め、そのVfを下回らない最小の整数をRfに代入する処理を、条件を満足するまで繰り返し実施する。
次に、「Vf≧1且つp≠1のときのRlとRfの決定」について説明する。まず、決定したVlについて、その値を超えない最大の整数を求めRfに代入する。次に、このRlを基にしたVfを求め、そのVfを下回らない最小の整数をRfに代入する。RlとRfの値が、上記(5)式を満足しているかを判定し、満足している場合は、それらの値をRlとRfとして採用する。上記の判定で条件を満足していない場合は、Rlを1だけ増加させ、上記したRlを基にしたVfを求め、そのVfを下回らない最小の整数をRfに代入する処理を、条件を満足するまで繰り返し実施する。
次に、「Vf<1且つp≠1のときのRlとRfの決定」について説明する。まず、Vl −p[Vl−(1−p)KNs]=1、且つ、Vl≧0を満足するVlを求め、Vlの値を超えない最大の整数を求めてRlに代入する。次に、このRlを基にしたVfを求め、そのVfを下回らない最小の整数をRfに代入する。Rfの値が、Rf≧1を満足しているかを判定し、満足している場合は、それらの値をRlとRfとして採用する。上記の判定で条件を満足していない場合は、Rlを1だけ増加させ、上記したRlを基にしたVfを求め、そのVfを下回らない最小の整数をRfに代入する処理を、条件を満足するまで繰り返し実施する。
本発明では、RlとRfがなるべく小さくなる組合せを選択するために、識別子の発生頻度の分布がジップの法則に近く、ランクrの識別子の発生頻度が1/rpに比例する場合に、Rlとして、p≠1のとき、(1−p)KNs/(1−Ns (p−1/p))、p=1のとき、pKNs/logNsの近傍の値を用いる。また、Rlとして、p≠1のとき、Rl≧0且つRl −p[Rl−(1−p)KNs]=1を満たすRlの値、p=1のとき、Rl=exp(KNs/Rl)を満足するRlの値の近傍の値を用いる。また、Rfとして、p≠1のとき、{Rl−p[Rl−(1−p)KNs]}1/(1−p)、p=1のとき、Rlexp(−KNs/Rl)の近傍の値を用いる。
ここで、上記したRlとRfの決定方法を採用する理由について説明する。ノーマルゾーンにおける各ランクの負荷を分散させるサーバ数を以下の(7)式で表される台数とする。
ノーマルゾーンにおける、負荷を分散させるサーバの延べ台数は、各ランクでの分散させるサーバ数の総和であり、下記(8)式のようになる。
今、あるランクrの負荷を、上記(7)式で表される台数のサーバに分散した場合、ランクrの負荷を分割した結果として、サーバ1台当りに割り当てられる負荷は、下記(9)式で表される。
上式の分母は、サーバ台数が整数であるため、値がランク毎に異なってくる。そこで、各サーバに多くのランクの負荷を割り当てることにより、統計的な多重化の効果により、サーバ毎の負荷のばらつきが減ることになる。
そこで、上記の(8)式の値をサーバ台数のK倍(Kは1以上の実数)として、Kを、ある程度の大きな値とすることで負荷の平均化を計るものとする。即ち下記(10)式のようになる。
このことにより、Rfが下記(11)式の条件を満たすとき、負荷を分散させるサーバの延べ台数はKNs以上を確保できる。
各ランクのサーバ台数は、式(7)で表され、これはサーバ台数Nsを超えることができないことから下記(12)式の条件を満足する必要がある。よって下記(13)式のようになる。
今、あるRfの値に対して、上式の条件を満たすには、Rl pがとることのできる値の最大値は、NsRf pであることから、NsRf p≦Rl pになり、結果として、下記(14)式を満たす必要がある。
式(11)と式(14)の不等式の等号が成立する式について、RfとRlを変数としたグラフを描くと、図14(Vf≧1且つp≧1の場合)、図15(Vf≧1且つ0<p<1の場合)、図16(Vf<1且つp≧1の場合)、及び、図17(Vf<1且つ0<p<1の場合)のようになる。ここで、式(11)と式(14)の不等式の等号が成立する式の交点となる、Rl、及び、Rfを、それぞれ、Vl、及び、Vfとする。Vlは、下記(15)式のようになる。
図14のVf≧1且つp≧1の場合、及び、図15のVf≧1且つ0<p<1の場合、領域Aでは、式(11)と式(14)の条件が満足される領域である。領域B、及び、領域Cでは、サーバ数としてNsを超えた台数が必要であり、領域C、及び、領域Dでは、式(11)が満たされず、ノーマルゾーンにおける、負荷を分散させるサーバの延べ台数が十分ではない領域である。よって、領域Aの中でRlとRfを求める必要がある。
領域Aの中で、RlとRfによって、Ns台のサーバに必要なメモリの延べ使用量がどのように変化するかを考える。コールドゾーンでは、各ランクに割り当てられるサーバ台数は1台であり、各ランクを処理するために必要な情報は、1台のサーバにのみ保持されるため、必要な延べメモリ量は、ノーマルゾーンやホットゾーンと比較して最小である。また、ホットゾーンは、Ns台のサーバで処理されるため、各ランクを処理するために必要な情報は、Ns台のサーバに保持されるため、必要な延べメモリ量は最大である。以上から、RlとRfを最小化することが、メモリの延べ使用量を最小化することにつながる。図14と図15において、RlとRfを最小化できるのは、式(11)と式(14)の不等式の等号が成立する式の交点となり、この交点に近い領域Aに含まれる格子点を、RlとRfとする必要がある。
次に、図16のVf<1且つp≧1の場合、及び、図17のVf<1且つ0<p<1の場合、領域Eでは、式(11)と式(14)の条件とRfが1以上である条件が満足される領域である。領域G、及び、領域Hでは、サーバ数としてNsを超えた台数が必要であり、領域H、領域I、及び、領域Jでは、式(11)が満たされず、ノーマルゾーンにおける、負荷を分散させるサーバの延べ台数が十分ではない領域である。更に、領域Fは、Rfが1未満となり、定義に反する領域である。よって、領域Eの中でRlとRfを求める必要がある。領域Eの中で、図14と図15の場合と同じように、メモリの延べ使用量を最小化するため、RlとRfを最小化できるのは、式(11)の不等式の等号が成立する式とRf=1の交点となり、この交点に近い領域Aに含まれる格子点を、RlとRfとする必要がある。以上のような理由から、第一の実施形態のようなRlとRfの決定方法を採用することで、効率的なサーバ利用に繋げることができる。
頻度情報取得部206は、同一のデータをそれぞれ記憶する複数の要求処理サーバ装置100に対してクライアント400がデータを要求した際に、要求処理サーバ装置がクライアント400から受信する識別子の受信頻度をそれぞれ取得する。
まず、頻度情報取得部206は、データ管理装置側要求処理用データベース211の全識別子の頻度情報を0に初期化し、要求処理サーバ装置データベース212に登録されている全サーバに対して、以下の処理を行う。各要求処理サーバ装置100に対しては、まず、頻度情報取得要求を送信する。これに対して、送信先の要求処理サーバ装置100から、その要求処理サーバ装置100が要求処理を行った全識別子の頻度情報を、識別子と頻度の組のリストとして受信する。受信した全識別子と頻度の組に対して、識別子毎に、その頻度情報を、データ管理装置側要求処理用データベース211の該当する識別子の頻度カラムに加算する。以上により、データ管理装置側要求処理用データベース211で管理する全識別子について、要求処理サーバ装置100全体に対して行われた要求処理の頻度を計算する。
識別子割当通知部207は、ハッシュ値の担当領域と要求処理サーバ装置情報の組、および、識別子ハッシュ値と識別子リストと分散度の組を負荷分散転送装置300に送信する。具体的には、識別子割当通知部207は、ハッシュ値要求処理サーバ装置変換用データベース213に含まれるハッシュ値の担当領域と要求処理サーバ装置情報の組を全て、負荷分散転送装置300に対して送信する。次に、識別子割当通知部207は、データ管理装置側分散度決定用データベース214の識別子ハッシュ値と識別子リストと分散度の組を全て、負荷分散転送装置300に送信する。
分散度決定部208は、全てのサーバiに対して、ループにより、データ管理装置側要求処理用データベースに登録されているNr個の識別子に対して分散度を決定し、データ管理装置側分散度決定用データベースに登録する。ループでは、iを1からNrまで変化させながら、データ管理装置側要求処理用データベースのi番目のレコードに記録されている識別子Iのハッシュ値hを計算し、ランクをrとする。このランクrが、r<Rfを満足するかを検査し、満足するときは、識別子Iの分散度を0とする。ここで、分散度が、0であるということは、該当する識別子の処理を全ての要求処理サーバ装置で負荷分散することを意味し、該当する識別子がホットゾーンに存在することを意味する。上記の検査で条件を満足しない場合は、Rf≦r<Rlを満足するかを検査し、満足するときは、分散度を式(7)でもとめる。
この式(7)で求められる値は、Rl p/rpの値を下回らない最小の整数を表す。上記の検査を満足しないとき、分散度を1とするため、d=1とする。その後、データ管理装置側分散度決定用データベースからハッシュ値hを検索する。そして、ハッシュ値hのレコードの存在有無を判定し、存在した場合は、検索した分散度d*を読み取り、データ管理装置側分散度決定用データベースから検索したハッシュ値hのレコードに対して、識別子Iが含まれていない場合は、識別子Iを追記し、分散度をmax(d,d*)として登録する。ここで、max(d,d*)は、dとd*のうち、大きいほうの値を意味する。上記の判定においてレコードが存在しない場合は、データ管理装置側分散度決定用データベースに対して、新規のレコードとして、ハッシュ値h、識別子I、分散度dを登録する。以上の処理を1≦r≦Nrに対して行う。
ランク決定部209は、取得された各識別子の受信頻度に応じて、各識別子のランクを決定する。具体的には、ランク決定部209は、データ管理装置側要求処理用データベースの識別子と頻度の組を頻度の高いものから低いものの順序でソートする。ソートしたときの各識別子の順序をその識別子のランクとして、データ管理装置側要求処理用データベースに登録する。上記の処理をループの処理で全ての識別子に対して行う。
サーバ装置データ送信部210は、要求処理サーバ装置データベース212に登録されている要求処理サーバ装置100の番号と要求処理サーバ装置情報の全ての組のリストを送信する。
[負荷分散転送装置の構成]
次に、図18を用いて、図1に示した負荷分散転送装置300の構成を説明する。図18は、第一の実施形態に係る負荷分散転送装置300の構成を説明するための図である。図18に示すように、負荷分散転送装置300は、通信制御I/F部301、制御部302、記憶部303を有する。通信制御I/F部301は、要求処理サーバ装置100、データ管理装置200、および、クライアント400との通信を行う。
記憶部303は、図18に示すように、ハッシュ値要求処理サーバ装置変換用データベース307、負荷分散転送装置用分散度決定用データベース308、要求処理サーバ装置データベース309を有する。記憶部303は、例えば、RAM、フラッシュメモリ等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。
ハッシュ値要求処理サーバ装置変換用データベース307および要求処理サーバ装置データベース309は、上述したデータ管理装置200のハッシュ値要求処理サーバ装置変換用データベース213および要求処理サーバ装置データベース212と同様の情報を記憶しているため、説明を省略する。
負荷分散転送装置用分散度決定用データベース308は、図19に例示するように、各識別子のハッシュ値を示す「識別子ハッシュ値」と、その識別子ハッシュ値を持つ「識別子リスト」と、識別子の「払出位置」と、識別子の「分散度」とを記憶する。
図18に戻って、制御部302は、要求振分処理部304と、識別子割当受信部305と、サーバ装置データ受信部306とを有する。ここで、制御部302は、CPUやMPUなどの電子回路やASICやFPGAなどの集積回路である。
識別子割当受信部305は、まず、データ管理装置200から、識別子に対するハッシュ値の担当領域と要求処理サーバ装置情報の組のリストを受信する。受信した、識別子に対するハッシュ値の担当領域と要求処理サーバ装置情報の組のリストを、負荷分散転送装置300が管理するハッシュ値要求処理サーバ装置変換用データベース307に登録する。次に、データ管理装置200から、識別子に対するハッシュ値、そのハッシュ値の識別子のリスト、分散度の組のリストを受信し、受信した識別子に対するハッシュ値、識別子のリスト、分散度を、負荷分散転送装置用分散度決定要データベース308の識別子ハッシュ値、識別子リスト、分散度として登録し、払出位置は、1として登録する。
サーバ装置データ受信部306は、データ管理装置200から、要求処理サーバ装置の番号と要求処理サーバ装置情報の組のリストを受信する。その後、受信した、要求処理サーバ装置の番号と要求処理サーバ装置情報の組のリストを負荷分散転送装置が管理する要求処理サーバ装置データベース309に受信した番号の昇順で登録する。要求処理サーバ装置データベース309は、データ管理装置200のもつ要求処理サーバ装置データベース212と同じ構造を持つ。
要求振分処理部304は、処理要求を受信すると、処理要求に含まれる識別子Iを取り出し、そのハッシュ値hを計算する。その計算したハッシュ値hを用いて、ハッシュ値要求処理サーバ装置変換用データベースの中から、hを担当領域に含む、レコードを検索し、hを担当領域とする要求処理サーバ装置情報をSとする。検索したSを元に、要求処理サーバ装置データベースを検索し、該当する要求処理サーバ装置の番号をvとし、負荷分散装置側分散度決定用データベースからハッシュ値hを検索する。その結果をもとに、ハッシュ値hのレコードが存在するかの検査を行い、レコードが存在した場合には、検索したレコードから分散度dと払出位置pを読み出す。このとき、d=0であれば、分散度をNsとし、d=Nsとする。読み出したpを用いて、要求処理サーバ装置データベースから番号がv+p−1のレコードを検索し、そのレコードの要求処理サーバ装置をSとする。その後、分散度決定用データベースから検索したハッシュ値hのレコードの払出位置をp+1(mod d)に変更し、要求処理サーバ装置Sに処理要求を転送する。ここで、p+1(mod d)は、p+1をdで割ったときの余りを表す。上記の検査において、レコードが存在しない場合には、Sの値は変更せず、そのまま要求処理サーバ装置Sに処理要求を転送する。
[要求処理サーバによる処理]
次に、図20を用いて、第一の実施形態に係る要求処理サーバ装置100による処理を説明する。図20は、処理用データ取得処理の処理手順を示すフローチャートである。
同図に示すように、処理用データ取得部107は、まず、処理用データを送信する旨を、データ管理装置200に要求する(S200)。このとき、本要求に、要求を行う要求処理サーバ装置情報を含める。そして、この処理用データ管理装置を受信したデータ管理装置200は、処理用データを要求処理サーバ装置100に対して応答する。続いて、処理用データ取得部107は、データ管理装置200から送られてきた、該当要求処理サーバ装置用の処理用データを受信する(S201)。その後受信した識別子と処理用データの組を図3で示す要求処理サーバ装置側要求処理用データベース108に格納する(S202)。最後に、要求処理サーバ装置側要求処理用データベース108の全てのレコードの頻度を、0として初期化する(S203)。
次に、図21を用いて、第一の実施形態に係る要求処理サーバ装置100による処理を説明する。図21は、サービス応答処理の処理手順を示すフローチャートである。同図に示すように、サービス応答部104は、最初に、サービスの処理要求を受信すると(S210)、処理要求に含まれる識別子を取り出し、これを含むレコードを要求処理サーバ装置側要求処理用データベース108から検索する(S211)。ここで、サービス応答部104は、処理要求に含まれている識別子が要求処理サーバ装置側要求処理用データベース108に含まれているか、否かを検査する(S212)。
本検査において、サービス応答部104は、識別子が要求処理サーバ装置側要求処理用データベースに含まれていた場合、検索したレコードから該当する識別子に対する処理用データを用いて処理要求に対する応答を作成する(S213)。その後、サービス応答部104は、受信した処理要求に含まれる識別子に対する頻度情報を更新するために頻度情報更新部に依頼して頻度情報更新処理を実施し(S214)、最後に、応答を送信する(S215)。また、S212の検査において、サービス応答部104は、識別子が要求処理サーバ装置側処理用データベースに含まれていなかった場合、登録されていない識別子に対する応答を作成し(S216)、応答を送信する(S215)。
次に、図22を用いて、第一の実施形態に係る要求処理サーバ装置100による処理を説明する。図22は、頻度情報更新部の処理手順を示すフローチャートである。同図に示すように、頻度情報更新部105は、最初に、処理要求に含まれる識別子をもとにして、要求処理サーバ装置側要求処理用データベース108から該当するレコードを検索する(S220)。次に、頻度情報更新部105は、該当するレコードの頻度情報を読み込み後、頻度情報をインクリメントし(S221)、その後、該当するレコードの頻度情報の変更を行う(S222)。なお、前述したように、頻度の情報は、該当する識別子を含む要求処理の発生回数を表す値を格納している。
次に、図23を用いて、第一の実施形態に係る要求処理サーバ装置100による処理を説明する。図23は、頻度情報取得要求部の処理手順を示すフローチャートである。同図に示すように、頻度情報取得要求処理部106は、最初に、データ管理装置から、頻度情報取得要求処理を受信する(S230)。要求処理サーバ装置側要求処理用データベースの、i番目のレコードについて、iを1からNrまで変化させながら(S231、S235)、全てのレコードに対して以下の処理を行う。
つまり、頻度情報取得要求処理部106は、i番目のレコードについて、識別子と頻度情報の組を取得する(S232)。取得した頻度情報を、識別子とともにデータ管理装置200に送信するために記憶する(S233)。全てのレコードに対してS232とS233の処理を実施したのち(S234の判定において、Noの場合)、送信用に記憶した識別子と、頻度情報の組を全て送信する(S236)。
[データ管理装置による処理]
次に、図24を用いて、第一の実施形態に係るデータ管理装置200による処理を説明する。図24は、処理用データ応答部の処理手順を示すフローチャートである。同図に示すように、処理用データ応答部204は、まず、処理用データ要求を受信すると(S240)、ハッシュ値の下限Hminと上限Hmaxの差をサーバ数Nsで割った値Hwidthを求め、これを各サーバが要求処理を担当するハッシュ値の幅とする(S241)。要求処理サーバ装置データベース212から、処理データ要求の送信元の要求処理サーバ装置100を検索し、その要求処理サーバ装置100の要求処理サーバ装置データベース212内に登録されている番号をnrとする(S242)。データ管理装置側要求処理用データベース211に登録されている全ての識別子に対して、以下の処理を行う(S243、S253)。データ管理装置側要求処理用データベース211のi番目に登録されているレコードを検索し、ハッシュ値をh、ランクをr、分散度をdとする(S244)。ハッシュ値hに対して、Hmin+(nr−1)Hwidth≦h、且つ、h<Hmin+nrHwidthを満たすかを検査する(S245)。
ここで検査の条件を満足しなかった場合は、1≦r<Rfを満足するかを検査する(S246)。S245、および、S246での検査の条件を満足した場合は、データ管理装置側要求処理用データベースのi番目に登録されているレコードの識別子と処理用データの組を応答用として記憶する(S250)。S246の検査の条件を満足しなかった場合は、Rf≦r<Rlの条件を満足するかを検査する(S247)。この条件を満足した場合は、Hmin+(nr−1)Hwidth≦h、且つ、h<Hmin+nrHwidthとなるnsをもとめる(S251)。その後、S252で、ns≦nr<ns+dの条件を満足するかを検査し、満足する場合は、データ管理装置側要求処理用データベースのi番目に登録されているレコードの識別子と処理用データの組を応答用として記憶する(S250)。S252で検査の条件を満足しない場合、および、S247の検査において、条件を満足しなかった場合は、データ管理装置側要求処理用データベースのi番目に登録されているレコードに関して、応答用のデータとしては、何も記憶しない。以上を、1≦i≦Nrを満たす全てのiについて実行する(S248)。最後に、全ての応答用に記憶した識別子と処理用データの組を、S240で受信した処理用データ要求の送信元に対して応答として送信する(S249)。
次に、図25を用いて、第一の実施形態に係るデータ管理装置200による処理を説明する。図25は、識別子割当決定部の処理手順を示すフローチャートである。同図に示すように、識別子割当決定部205は、まず、コールドゾーンの最も頻度の高いランクであるRl、および、ノーマルゾーンの最も頻度の高いランクであるRfを決定する(S260)。このS260の処理については、後述する。次に、ハッシュ値の下限Hminと上限Hmaxの差をサーバ数Nsで割った値Hwidthを求め、これを各サーバが要求処理を担当するハッシュ値の幅とする(S261)。ここで、サーバ数Nsは、S260の処理の中で決定される。そして、番号iを1にする(S262)。その後、要求処理サーバ装置データベースに登録されている、番号iが、1からNsである各サーバiについてS263からS268のループを繰り返す。ループ内の各繰り返しでは、以下の処理を行う。サーバiの担当するハッシュ値の下限をHmin+(i−1)Hwidthとする(S263)。
その後、サーバiの担当するハッシュ値の上限をHmin+iHwidthとする(S264)。これらの結果サーバiの担当するハッシュ値は、ここで計算した下限以上、且つ、上限未満を担当することになる。最後に図6に例示した要求処理サーバ装置データベース212から、番号がiである要求処理サーバ装置情報を検索し(S265)、検索した要求処理サーバ装置情報・ハッシュ値上限・下限の範囲を、図7に示すハッシュ値要求処理サーバ装置変換用データベースに登録する(S266)。ここで、ハッシュ値要求処理サーバ装置変換用データベース213は、識別子のハッシュ値の範囲である担当領域と、その範囲に含まれる識別子の処理を担当する、要求処理サーバ装置情報によって構成される。
その後、i<Nsであるか否かを判定する(S267)。そして、i<Nsである場合には、iに1を加算して(S268)、S263に戻り、i<Nsで無い場合には、処理を終了する。
次に、図26を用いて、第一の実施形態に係るデータ管理装置200による処理を説明する。図26は、頻度情報取得部の処理手順を示すフローチャートである。同図に示すように、頻度情報取得部206は、まず、データ管理装置側要求処理用データベース211の全識別子の頻度情報を0に初期化し(S270)、番号iを1にし(S271)、S272からS276のループで表される処理により、要求処理サーバ装置データベース212に登録されている全サーバに対して、以下の処理を行う。各要求処理サーバ装置100に対しては、まず、頻度情報取得要求を送信する(S272)。これに対して、送信先の要求処理サーバ装置100から、その要求処理サーバ装置100が要求処理を行った全識別子の頻度情報を、識別子と頻度の組のリストとして受信する(S273)。受信した全識別子と頻度の組に対して、識別子毎に、その頻度情報を、データ管理装置側要求処理用データベース211の該当する識別子の頻度カラムに加算する(S274)。以上により、データ管理装置側要求処理用データベース211で管理する全識別子について、要求処理サーバ装置100全体に対して行われた要求処理の頻度を計算する。その後、i<Nsであるか否かを判定する(S275)。そして、i<Nsである場合には、iに1を加算して(S276)、S272に戻り、i<Nsで無い場合には、処理を終了する。
次に、図27を用いて、第一の実施形態に係るデータ管理装置200による処理を説明する。図27は、分散度決定部の処理手順を示すフローチャートである。同図に示すように、分散度決定部208は、まず、番号iを1にし(S280)、全てのサーバiに対して、S281からS294のループにより、データ管理装置側要求処理用データベースに登録されているNr個の識別子に対して分散度を決定し、データ管理装置側分散度決定用データベースに登録する。ループでは、iを1からNrまで変化させながら、データ管理装置側要求処理用データベースのi番目のレコードに記録されている識別子Iのハッシュ値hを計算し(S281)、ランクをrとする(S282)。このランクrが、r<Rfを満足するかを検査し(S283)、満足するときは、識別子Iの分散度dを0とする(S291)。ここで、分散度が、0であるということは、該当する識別子の処理を全ての要求処理サーバ装置で負荷分散することを意味し、該当する識別子がホットゾーンに存在することを意味する。S283の検査で条件を満足しない場合は、Rf≦r<Rlを満足するかを検査し(S284)、満足するときは、分散度を式(7)でもとめる(S292)。この式(7)で求められる値は、Rl p/rpの値を下回らない最小の整数を表す。S284の検査を満足しないとき、分散度を1とするため、d=1とする(S285)。その後、及び、S291とS292の処理を行った後は、データ管理装置側分散度決定用データベースからハッシュ値hを検索する(S286)。そして、ハッシュ値hのレコードの存在有無を判定し(S287)、存在した場合は、検索した分散度d*を読み取り(S293)、データ管理装置側分散度決定用データベースから検索したハッシュ値hのレコードに対して、識別子Iが含まれていない場合は、識別子Iを追記し、分散度をmax(d,d*)として登録する(S294)。ここで、max(d,d*)は、dとd*のうち、大きいほうの値を意味する。S287の判定においてレコードが存在しない場合は、データ管理装置側分散度決定用データベースに対して、新規のレコードとして、ハッシュ値h、識別子I、分散度dを登録する(S288)。以上の処理を1≦r≦Nrに対して行う。つまり、i<Nrであるか否かを判定する(S289)。そして、i<Nrである場合には、iに1を加算して(S290)、S281に戻り、i<Nrで無い場合には、処理を終了する。
次に、図28を用いて、第一の実施形態に係るデータ管理装置200による処理を説明する。図28は、ランク決定部の処理手順を示すフローチャートである。同図に示すように、ランク決定部209は、データ管理装置側要求処理用データベースの識別子と頻度の組を頻度の高いものから低いものの順序でソートする(S300)。ソートしたときの各識別子の順序をその識別子のランクとして、データ管理装置側要求処理用データベースに登録する(S302)。これをS302からS304のループの処理で全ての識別子に対して行う。つまり、i<Nrであるか否かを判定する(S303)。そして、i<Nrである場合には、iに1を加算して(S304)、S302に戻り、i<Nrで無い場合には、処理を終了する。
次に、図29を用いて、第一の実施形態に係るデータ管理装置200による処理を説明する。図29は、サーバ装置データ送信部の処理手順を示すフローチャートである。同図に示すように、サーバ装置データ送信部210は、要求処理サーバ装置データベース212に登録されている要求処理サーバ装置100の番号と要求処理サーバ装置情報の全ての組のリストを送信する(S307)。
次に、図30を用いて、第一の実施形態に係るデータ管理装置200による処理を説明する。図30は、識別子割当通知部の処理手順を示すフローチャートである。同図に示すように、識別子割当通知部207は、ハッシュ値要求処理サーバ装置変換用データベースに含まれるハッシュ値の担当領域と要求処理サーバ装置情報の組を全て、負荷分散転送装置に対して送信する(S310)。識別子割当通知部207は、識別子割当通知処理を行うために、負荷分散転送装置への通信に必要な情報を保持している。次に、データ管理装置側分散度決定用データベースの識別子ハッシュ値と識別子リストと分散度の組を全て、負荷分散転送装置に送信する(S311)。
[負荷分散転送装置による処理]
次に、図31を用いて、第一の実施形態に係る負荷分散転送装置300による処理を説明する。図31は、識別子割当受信部の処理手順を示すフローチャートである。
同図に示すように、識別子割当受信部305は、まず、データ管理装置200から、識別子に対するハッシュ値の担当領域と要求処理サーバ装置情報の組のリストを受信する(S320)。受信した、識別子に対するハッシュ値の担当領域と要求処理サーバ装置情報の組のリストを、負荷分散転送装置300が管理するハッシュ値要求処理サーバ装置変換用データベース307に登録する(S321)。次に、データ管理装置200から、識別子に対するハッシュ値、そのハッシュ値の識別子のリスト、分散度の組のリストを受信し(S322)、受信した識別子に対するハッシュ値、識別子のリスト、分散度を、負荷分散転送装置用分散度決定要データベース308の識別子ハッシュ値、識別子リスト、分散度として登録し、払出位置は、1として登録する(S323)。
次に、図32を用いて、第一の実施形態に係る負荷分散転送装置300による処理を説明する。図32は、サーバ装置データ受信部の処理手順を示すフローチャートである。負荷分散転送装置300のサーバ装置データ受信部306は、データ管理装置200から、要求処理サーバ装置の番号と要求処理サーバ装置情報の組のリストを受信する(S330)。その後、受信した、要求処理サーバ装置の番号と要求処理サーバ装置情報の組のリストを負荷分散転送装置が管理する要求処理サーバ装置データベースに受信した番号の昇順で登録する(S331)。
次に、図33を用いて、第一の実施形態に係る負荷分散転送装置300による処理を説明する。図33は、要求振り分け部の処理手順を示すフローチャートである。要求振り分け部304は、処理要求を受信する(S340)と、要求処理に含まれる識別子Iを取り出し、そのハッシュ値hを計算する(S341)。その計算したハッシュ値hを用いて、ハッシュ値要求処理サーバ装置変換用データベースの中から、hを担当領域に含む、レコードを検索し、hを担当領域とする要求処理サーバ装置情報をSとする(S342)。検索したSを元に、要求処理サーバ装置データベースを検索し、該当する要求処理サーバ装置の番号をvとし(S343)、負荷分散装置用分散度決定用データベースからハッシュ値hを検索する(S344)。
その結果をもとに、ハッシュ値hのレコードが存在するかの検査を行い(S345)、レコードが存在した場合には、検索したレコードから分散度dと払出位置pを読み出す(S347)。このとき、d=0であれば、分散度をNsとし、d=Nsとする。読み出したpを用いて、要求処理サーバ装置データベースから番号がv+p−1のレコードを検索し、そのレコードの要求処理サーバ装置をSとする(S348)。その後、負荷分散装置用分散度決定用データベースから検索したハッシュ値hのレコードの払出位置をp+1(mod d)に変更し(S349)、要求処理サーバ装置Sに処理要求を転送する(S346)。ここで、p+1(mod d)は、p+1をdで割ったときの余りを表す。S345の検査において、レコードが存在しない場合には、Sの値は変更せず、そのまま要求処理サーバ装置Sに処理要求を転送する。
次に、図34を用いて、第一の実施形態に係る負荷分散転送装置300による処理を説明する。図34は、サーバ装置数の決定処理の処理手順を示すフローチャートである。なお、ここでの処理は、後述する図35のS542において実行される処理である。同図に示すように、S530、S531、S532、及び、S533により、ランク1からランクNrまでの発生頻度の総和をSとして求める。そして、Sを要求処理サーバ装置単体で処理可能な識別子の発生頻度fiで割ることで、必要な要求処理サーバ装置総数を求める。要求処理サーバ装置総数は、1以上の整数でなければならないため、ここで計算した値を下回らない最小の整数を求めNsとする(S534)。
次に、図35を用いて、RlとRfの決定処理を説明する。図35は、ホット・ノーマルゾーン境界とノーマル・コールドゾーン境界の決定処理の処理手順を示すフローチャートである。同図に示すように、まず、ジップ定数pの決定を行う(S540)。そして、ジップ定数pを決定した後、総識別子数Nrを決定する(S541)。総識別子数Nrの決定については、図5で示したデータ管理装置側要求処理用データベース211に含まれる識別子を数え上げることで決定することができる。S541の後、要求処理サーバ装置総数Nsの決定(S542)を行う(図34参照)。
次にS543で、p=1かどうかの判定を行う。p=1の場合、まず、S544、S545で、それぞれ、値VlとVfを計算する。ここで、Vl、および、Vfは、それぞれ、Rl、および、Rfを決定するための基準となる値である。その後、Vf≧1の判定(S546)を行い、Vf≧1の場合、S547で、「Vf≧1且つp=1のときのRlとRfの決定」(詳細は、図36)を実行する。S546の判定で、Vf≧1が否定された場合、S548で、「Vf<1且つp=1のときのRlとRfの決定」(詳細は、図38)を実行する。
S543の判定において、p=1が否定された場合、S549、S550で、それぞれ、値VlとVfを計算する。その後、Vf≧1の判定(S551)を行い、Vf≧1の場合、S552で、「Vf≧1且つp≠1のときのVlとVfの決定」(詳細は、図37)を実行する。S551の判定で、Vf≧1が否定された場合、S553で、「Vf<1且つp≠1のときのRlとRfの決定」(詳細は、図39)を実行する。
次に、図36を用いて、Vf≧1且つp=1のときのRlとRfの決定処理を説明する。図36は、Vf≧1且つp=1のときのRlとRfの決定処理の処理手順を示すフローチャートである。同図に示すように、「Vf≧1且つp=1のときのRlとRfの決定」について説明する。まず、S544で決定したVlについて、その値を超えない最大の整数を求めRlに代入する(S560)。次に、このRlを基にしたVfを求め(S561)、そのVfを下回らない最小の整数をRfに代入する(S562)。RlとRfの値が、上記(5)式を満足しているかを判定し(S563)、満足している場合は、それらの値をRlとRfとして採用する。S563の判定で条件を満足していない場合は、Rlを1だけ増加させ(S564)、上記のS561からS563の処理を実施する。
次に、図37を用いて、Vf≧1且つp≠1のときのRlとRfの決定処理を説明する。図37は、Vf≧1且つp≠1のときのRlとRfの決定処理の処理手順を示すフローチャートである。同図に示すように、「Vf≧1且つp≠1のときのRlとRfの決定」について説明する。まず、S549で決定したVlについて、その値を超えない最大の整数を求めRlに代入する(S570)。次に、このRlを基にしたVfを求め(S571)、そのVfを下回らない最小の整数をRfに代入する(S572)。RlとRfの値が、上記(5)式を満足しているかを判定し(S573)、満足している場合は、それらの値をRlとRfとして採用する。S573の判定で条件を満足していない場合は、Rlを1だけ増加させ(S574)、上記のS571からS573の処理を実施する。
次に、図38を用いて、Vf<1且つp=1のときのRlとRfの決定処理について説明する。図38は、Vf<1且つp=1のときのRlとRfの決定処理の処理手順を示すフローチャートである。同図に示すように、「Vf<1且つp=1のときのRlとRfの決定」について説明する。まず、上記(6)式を満足するVlを求め(S580)、Vlの値を超えない最大の整数を求めてRlに代入する(S581)。次に、このRlを基にしたVfを求め(S582)、そのVfを下回らない最小の整数をRfに代入する(S583)。Rfの値が、Rf≧1を満足しているかを判定し(S584)、満足している場合は、それらの値をRlとRfとして採用する。S584の判定で条件を満足していない場合は、Rlを1だけ増加させ(S585)、上記のS582からS584の処理を実施する。
次に、図39を用いて、Vf<1且つp≠1のときのRlとRfの決定処理について説明する。図39は、Vf<1且つp≠1のときのRlとRfの決定処理の処理手順を示すフローチャートである。まず、Vl −p[Vl−(1−p)KNs]=1、且つ、Vl≧0を満足するVlを求め(S590)、Vlの値を超えない最大の整数を求めてRlに代入する(S591)。次に、このRlを基にしたVfを求め(S592)、そのVfを下回らない最小の整数をRfに代入する(S593)。Rfの値が、Rf≧1を満足しているかを判定し(S594)、満足している場合は、それらの値をRlとRfとして採用する。S594の判定で条件を満足していない場合は、Rlを1だけ増加させ(S595)、上記のS592からS594の処理を実施する。
[第一の実施形態の効果]
上述してきたように、データ管理装置200は、決定された各識別子のランクに応じて、ランクがRfよりも高く発生頻度が高い識別子が属するホットゾーン、ランクがRf以下であってRlよりも高く発生頻度が中程度の識別子が属するノーマルゾーン、または、ランクがRl以下であって発生頻度が低い識別子が属するコールドゾーンのいずれかに各識別子を振り分ける。そして、データ管理装置200は、ホットゾーンに振り分けられた識別子により識別されるデータの要求に対する応答処理を、全ての要求処理サーバ装置100のうちのいずれかの要求処理サーバ装置100に割り当て、ノーマルゾーンに振り分けられた識別子により識別されるデータの要求に対する応答処理を、複数の要求処理サーバ装置100のうちのいずれかの要求処理サーバ装置100に割り当て、コールドゾーンに振り分けられた識別子により識別されるデータの要求に対する応答処理を、一つのサーバ装置に割り当てる。そして、データ管理装置200は、ノーマルゾーンに属する識別子により識別されるデータの要求に対する応答処理が割り当てられる要求処理サーバ装置100の延べ台数を、全要求処理サーバ装置100の台数よりも十分に大きな値とするように、RfおよびRlを設定する。このため、サーバ負荷を平準化することができる。また、要求処理の負荷を分散し、且つ、記憶装置の容量を小さくすることが可能である。
上述してきたように、データ管理装置200は、ノーマルゾーンに属する識別子により識別されるデータの要求に対する応答処理が割り当てられる要求処理サーバ装置100の延べ台数を、全要求処理サーバ装置100の台数よりも十分に大きな値とするようにRfおよびRlを設定しつつ、RfおよびRlをできるだけ小さい値に設定する。このため、必要な記憶容量の最小化を図ることが可能である。
また、ホットゾーンの識別子を処理するために必要な情報は、全サーバ装置で保持され、ノーマルゾーンの識別子を処理するために必要な情報は、その識別子の発生頻度に応じた台数のサーバ装置に保持される。一方で、コールドゾーンの識別子については、コンシステントハッシング法を用いた場合と同様に、1台のサーバ装置に保持される。よって、各サーバ装置が全ての識別子を処理するために必要な情報を保持しなくてもよいため、個々のサーバ装置の記憶装置の容量を大規模化しなくてもよい。
また、第一の実施形態によれば、各サーバ装置の記憶装置の容量を大規模化する必要はなく、ノーマルゾーンおよびコールドゾーンの識別子を処理するための情報は、サーバ装置間で分担して保持させることが可能となり、サーバ装置を増加させることによって、識別子の増加に対応することが可能となり、結果としてスケールアウトが可能となる。
単一の識別子の発生頻度が、非常に高いものについては、ホットゾーンとして、全サーバ装置で負荷分散されるか、ノーマルゾーンとして、発生頻度に応じて決まる台数のサーバ装置で負荷分散される。よって、単一のサーバ装置で処理できる性能を超えている場合においても、サーバ装置間の負荷分散が実現可能であり、装置台数を増やすことによって、性能および識別子増加に対応するスケールアウトが可能となる。
ホットゾーンやノーマルゾーンの発生頻度の高い識別子を単一のサーバ装置で処理する必要がなくなり、複数のサーバ装置で負荷分散することにより、全てのサーバ装置が、多くの識別子を担当できるようになる。このことにより、サーバ装置の記憶容量の利用効率を平準化し、高く保つことが可能となる。また、ホットゾーンおよびノーマルゾーンに含まれるランクの識別子については、複数のサーバ装置で担当する。このとき、ホットゾーンおよびノーマルゾーンに含まれるランクの各識別子の処理を担当するサーバ装置の台数Ndiv(r)の総和(上記の(2)式参照)の、Nservに対する倍率が、十分に大きな倍率Kに近い値となるようにすることで(即ち上記(3)式の値に近くする)、各サーバ装置に、K個程度の識別子の負荷を分担させることができる。各識別子の処理によって発生する負荷を分割した値に一定程度のばらつきがあっても、負荷を分割した値が、各装置に、十分に大きな数K個程度割り当てられることにより、各サーバ装置で担当する識別子の数のばらつきも小さくなり、サーバ装置の記憶容量の利用効率を平準化し、高く保つことが可能となる。また、RfとRlがなるべく小さい値となる組合せを選択することにより、ホットゾーン、および、ノーマルゾーンの領域が小さくなることにより記憶装置の容量を小さくすることが可能となる。
ホットゾーンおよびノーマルゾーンに含まれるランクの識別子については、複数のサーバ装置で担当する。このとき、ホットゾーンおよびノーマルゾーンに含まれるランクの各識別子の処理を担当するサーバ装置の台数Ndiv(r)の総和(上記の(2)式参照)の、Nservに対する倍率が、十分に大きな倍率Kに近い値となるようにすることで(即ち上記(3)式の値に近くする)、各サーバ装置に、K個程度の識別子の負荷を分担させることができる。各識別子の処理によって発生する負荷を分割した値に一定程度のばらつきがあっても、負荷を分割した値が、各装置に、十分に大きな数K個程度割り当てられることにより、各サーバ装置で担当する負荷のばらつきも小さくなり、サーバ装置の負荷の偏りを小さくすることが可能であり、結果としてサーバ装置台数を削減できる。また、RfとRlがなるべく小さい値となる組合せを選択することにより、ホットゾーン、および、ノーマルゾーンの領域が小さくなることにより記憶装置の容量を小さくすることが可能となる。
[全サーバ装置の数]
上記の説明では、全サーバ装置の数Nsを、図34に示した処理によって決定したが、全サーバ装置の数Nsは、本システムを管理する者がシステムに対して決定を行い、システムに与えても良い。この場合、第一の実施形態の図35の処理において、S541の処理をスキップすることで実現できる。
[ランクの決定]
また、決定した、Rf、および、Rlに対して、ランクRmの識別子の発生頻度が、要求処理サーバ装置単体で処理可能な識別子の発生頻度fiと比較して十分小さくなるように、ランクRmを定め、決定したRlが、Rmよりも小さい場合、Rlの値をRmの値で置き換え、Rfの値を、(1/Ns 1/p)Rmで置き換えてもよい。このRf、および、Rlの置き換えにより、Rlの値が小さくなりすぎ、サーバ負荷に偏りを発生させることを防止することができる。
また、決定した、Rf、および、Rlに対して、ランクRmの識別子の発生頻度が、要求処理サーバ装置単体で処理可能な識別子の発生頻度と比較して十分小さくなるように、ランクRmを定め、決定したRlが、Rmよりも小さい場合、Rlの値をRmの値での値で置き換え、Rfの値を、1で置き換えてもよい。このRf、および、Rlの置き換えにより、Rlの値が小さくなりすぎ、サーバ負荷に偏りを発生させることを防止することができる。
[システム構成等]
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
[プログラム]
また、上記実施形態において説明したデータ管理装置200が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、第一の実施形態に係るデータ管理装置200が実行する処理をコンピュータが実行可能な言語で記述したサーバ制御プログラムを作成することもできる。この場合、コンピュータがサーバ制御プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかるサーバ制御プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されサーバ制御プログラムをコンピュータに読み込ませて実行することにより上記第一の実施形態と同様の処理を実現してもよい。以下に、図2に示したデータ管理装置200と同様の機能を実現するサーバ制御プログラムを実行するコンピュータの一例を説明する。
図40は、サーバ制御プログラムを実行するコンピュータ1000を示す図である。図40に例示するように、コンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有し、これらの各部はバス1080によって接続される。
メモリ1010は、図40に例示するように、ROM(Read Only Memory)1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、図40に例示するように、ハードディスクドライブ1031に接続される。ディスクドライブインタフェース1040は、図40に例示するように、ディスクドライブ1041に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ1041に挿入される。シリアルポートインタフェース1050は、図40に例示するように、例えばマウス1051、キーボード1052に接続される。ビデオアダプタ1060は、図40に例示するように、例えばディスプレイ1061に接続される。
ここで、図40に例示するように、ハードディスクドライブ1031は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、上記のサーバ制御プログラムは、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1031に記憶される。
また、上記実施形態で説明した各種データは、プログラムデータとして、例えばメモリ1010やハードディスクドライブ1031に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1031に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出し、各種処理手順を実行する。
なお、サーバ制御プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1031に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してCPU1020によって読み出されてもよい。あるいは、サーバ制御プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。