以下に図面を参照して、この発明に係る情報処理システム、管理装置、サーバ装置及びキー割当プログラムの実施形態を詳細に説明する。なお、この実施形態によりこの発明が限定されるものではない。
[第一の実施形態]
以下の実施形態では、第一の実施形態に係る情報処理システムの構成、要求処理サーバの構成、複製管理サーバの構成及び情報処理システムにおける処理の流れを順に説明し、最後に第一の実施形態による効果を説明する。
[システムの構成]
まず、第一の実施形態に係る情報処理システム1の構成の一例を説明する。図1は、第一の実施形態に係る情報処理システムの構成の一例を示す図である。図1に示すように、情報処理システム1は、複数の要求処理サーバ10A〜10E、複製管理サーバ20、複数のクライアント30A〜30C、負荷分散装置40、複数の分散KVSサーバ50A〜50E、複数のIPネットワーク60A〜60Cを有する。
なお、要求処理サーバ10A〜10E、クライアント30A〜30C、分散KVSサーバ50A〜50E、IPネットワーク60A〜60Cについて、特に区別することなく説明する場合には、「要求処理サーバ10」、「クライアント30」、「分散KVSサーバ50」、「IPネットワーク60」とそれぞれ記載する場合がある。また、図1に例示した各装置の設置数は、あくまで一例であり、これに限定されるものではない。
また、図1に示すように、クライアント30A〜30Cと負荷分散装置40とは、IPネットワーク60Aを介して接続されている。また、負荷分散装置40と複数の要求処理サーバ10A〜10E及び複製管理サーバ20とは、IPネットワーク60Bを介して接続されている。また、複数の要求処理サーバ10A〜10E及び複製管理サーバ20と複数の分散KVSサーバ50A〜50Eとは、IPネットワーク60Cを介して接続されている。
クライアント30A〜30Cは、サービス要求を負荷分散装置40に送信し、負荷分散装置40から応答されるサービス応答を用いて、ユーザに各種サービスを提供する汎用端末である。
負荷分散装置40は、クライアント30A〜30Cから送信されたサービス要求を、その到着した順に、各要求処理サーバ10A〜10Eに振り分ける汎用負荷分散装置である。
分散KVSサーバ50A〜50Eは、汎用な分散KVSシステムのサーバソフトウェアが動作する汎用なサーバ装置である。分散KVSサーバ50A〜50Eでは、データ(バリュー)と各データを識別するキーとを対応付けて記憶する。
要求処理サーバ10A〜10Eは、分散KVSサーバ50A〜50Eに対してアクセスを行う。ここで、図2を用いて、第一の実施形態に係る情報処理システムの概要について説明する。図2は、第一の実施形態に係る情報処理システムの概要を説明する図である。なお、図2では、3台の要求処理サーバ10A〜10Cが設置され、4台の分散KVSサーバ50A〜50Dが設置されている場合を例として説明する。また、図2では、クライアント30やIPネットワーク60については図示を省略している。
図2に示すように、要求処理サーバ10は、要求処理アプリ110、アクセス変換ラッパー120、分散KVSクライアントライブラリ130の各ソフトウェアが動作する汎用なサーバ装置であり、上記ソフトウェアはプロセス間通信によって通信する。
要求処理アプリ110は、クライアント30から送信されたサービス要求に対するサービス応答を作成する汎用なアプリケーションソフトウェアであり、アクセス変換ラッパー120を介して分散KVSサーバ50にアクセスすることにより、サービス応答の作成に必要なデータを取得する。
アクセス変換ラッパー120は、後述するアクセス部12aを有するソフトウェアであり、要求処理アプリ110に対して、分散KVSクライアントライブラリ130と同等のインターフェースを提供し、要求処理アプリ110から送信された参照要求、更新要求、削除要求について、複製管理サーバ20から通知された複製管理情報に従って対象キーが複製されているかを判定し、複製されていた場合にはその要求を変換して分散KVSクライアントライブラリ130に送信する。
また、アクセス変換ラッパー120は、後述する計数部12bを有し、要求処理アプリ110から送信された参照要求について、対象キー毎の要求頻度を複製管理サーバ20に通知する。
分散KVSクライアントライブラリ130は、汎用な分散KVSシステムのクライアントソフトウェアであり、アクセス変換ラッパー120から送信された各要求について、振り分け先の分散KVSサーバ50を決定し、要求を送信する。
複製管理サーバ20は、要求処理サーバ10A〜10Cから送信された要求頻度情報に従って各キーの複製数を決定し、決定した複製数分の複製キーを分散KVSサーバ50に対して作成し、作成した複製キーを分散KVSサーバ50A〜50Dに割り当てる。また、複製管理サーバ20上にも分散KVSクライアントライブラリ210が存在し、後述する参照要求や追加要求の送信、およびそれら要求に対する応答の受信については、分散KVSクライアントライブラリ210を介して行われる。
[要求処理サーバの構成]
次に、図3を用いて、図1に示した要求処理サーバ10の構成を説明する。図3は、第一の実施形態に係る要求処理サーバの構成を示すブロック図である。図3に示すように、要求処理サーバ10は、通信処理部11、制御部12および記憶部13を有する。
通信処理部11は、接続される複製管理サーバ20、負荷分散装置40および分散KVSサーバ50との間でやり取りする各種情報に関する通信を制御する。例えば、通信処理部11は、参照対象キーごとの要求頻度を複製管理サーバ20に対して送信し、複製管理情報テーブルを複製管理サーバ20から受信する。
また、通信処理部11は、サービス要求を負荷分散装置40から受信し、サービス要求に対する応答であるサービス応答を負荷分散装置40に対して送信する。また、通信処理部11は、参照要求、更新要求、削除要求を分散KVSサーバ50に対して送信し、各要求に対応する応答である参照応答、更新応答、削除応答を分散KVSサーバ50から受信する。
記憶部13は、図3に示すように、要求頻度記憶部13aおよび複製管理情報テーブル記憶部13bを有する。記憶部13は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。
要求頻度記憶部13aは、各参照対象キーの要求頻度を記憶する。具体的には、要求頻度記憶部13aは、参照対象キーごとに、後述する計数部12bによって計数されたアクセス要求の回数である要求頻度を記憶する。
ここで、図4を用いて、要求頻度記憶部13aに記憶される情報の一例について説明する。図4は、第一の実施形態に係る要求頻度記憶部に記憶される情報の一例を示す図である。図4に例示するように、要求頻度記憶部13aは、参照対象キーを一意に識別する文字列である「参照対象キー」と、各参照対象キーがアクセス要求の対象となった回数である「要求頻度」とを対応付けて記憶する。なお、要求頻度の値は、所定の時間(例えば、5分)内における要求頻度であり、5分経過するたびに値がリセットされるものである。
具体的な例を挙げて説明すると、要求頻度記憶部13aは、例えば、参照対象キー「aaa」に対応する要求頻度として「40」を記憶し、参照対象キー「bbb」に対応する要求頻度として「75」を記憶し、参照対象キー「ccc」に対応する要求頻度として「150」を記憶する。
複製管理情報テーブル記憶部13bは、複製管理サーバ20が作成した複製管理情報テーブルを記憶する。具体的には、複製管理情報テーブル記憶部13bは、複製管理情報テーブルとして、複製された参照対象キーごとに、複製されたキーの数を記憶する。
ここで、図5を用いて、複製管理情報テーブル記憶部13bに記憶される情報の一例について説明する。図5は、第一の実施形態に係る複製管理情報テーブル記憶部に記憶される情報の一例を示す図である。図5に例示するように、複製管理情報テーブル記憶部13bは、複製管理サーバ20により複製された参照対象キーを識別する文字列である「キー」と、参照対象キーの複製された数を示す「複製数」とを対応付けて記憶する。
具体的な例を挙げて説明すると、複製管理情報テーブル記憶部13bは、例えば、キー「ddd」に対応する複製数として「3」を記憶し、「ggg」に対応する複製数として「6」を記憶し、「hhh」に対応する複製数として「14」を記憶する。
図3に戻って、制御部12は、アクセス部12aおよび計数部12bを有する。ここで、制御部12は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路やASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路である。
アクセス部12aは、参照対象キーを含むアクセス要求を受け付けた場合には、該参照対象キーに対応するデータを記憶する分散KVSサーバ50に対してアクセスを行う。具体的には、アクセス部12aは、参照対象キーを含むアクセス要求を受け付けた場合に、該キーが複製されたキーであるか判定し、複製されているキーである場合には、複製されたキーのなかから一つのキーを選択し、該キーを用いて分散KVSサーバ50に対してアクセスを行う。
例えば、アクセス部12aは、要求処理アプリ110から分散KVSサーバ50に対して送信される、参照、更新、削除の各要求について、複製管理サーバ20により作成された複製管理情報に基づいて、対象のキーが複製されているか否かを判定し、複製されているキーに対する要求であれば、参照要求を変換して、分散KVSサーバ50に送信する。
例えば、アクセス部12aは、複製されているキーに対する要求である場合に、参照要求については、複製キーの中からランダムで選択したキーに対する参照要求に変換し、更新要求および削除要求については、すべての複製キーに対する更新要求、削除要求に変換する。
計数部12bは、参照対象キーごとに、受け付けたアクセス要求の数であるアクセス回数を計数する。具体的には、計数部12bは、要求処理アプリ110から送信される参照要求に含まれる対象キーごとの要求頻度をカウントし、要求頻度記憶部13aに格納する。また、計数部12bは、要求頻度記憶部13aに格納した情報を要求頻度情報通知として、複製管理サーバ20に対して定期的に送信する。例えば、計数部12bは、5分後ごとに、要求頻度情報通知を複製管理サーバ20に対して送信する。また、計数部12bは、要求頻度情報通知を送信した際には、要求頻度記憶部13aに記憶される要求頻度の値をリセットする。
[複製管理サーバの構成]
次に、図6を用いて、図1に示した複製管理サーバ20の構成を説明する。図6は、第一の実施形態に係る複製管理サーバの構成を示すブロック図である。図6に示すように、複製管理サーバ20は、通信処理部21、制御部22および記憶部23を有する。
通信処理部21は、接続される要求処理サーバ10および分散KVSサーバ50との間でやり取りする各種情報に関する通信を制御する。例えば、通信処理部21は、参照対象キーごとの要求頻度を要求処理サーバ10から受信し、複製管理情報テーブルを複製管理サーバ20に対して送信する。また、通信処理部21は、作成した複製キーをKVSサーバ50に対して送信する。
記憶部23は、図6に示すように、複製管理情報記憶部23aおよび要求頻度情報テーブル記憶部23bを有する。記憶部23は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。
複製管理情報テーブル記憶部23aは、後述する作成部22cが作成した複製管理情報テーブルを記憶する。具体的には、複製管理情報テーブル記憶部23aは、複製管理情報テーブルとして、複製された参照対象キーごとに、複製されたキーの数を記憶する。なお、複製管理情報テーブル記憶部23aは、前述した複製管理情報テーブル記憶部13bに記憶される情報と同様の情報を記憶しており、図5に例示するように、複製された参照対象キーを識別する文字列である「キー」と、参照対象キーの複製された数を示す「複製数」とを対応付けて記憶する。
要求頻度情報テーブル記憶部23bは、参照対象キーごとの要求頻度とともに、各参照対象キーの複製される数を記憶する。具体的には、要求頻度情報テーブル記憶部23bは、参照対象キーごとの要求頻度とともに、後述する決定部22bによって決定された参照対象キーの複製数を記憶する。
ここで、図7を用いて、要求頻度情報テーブル記憶部23bに記憶される情報の一例について説明する。図7は、第一の実施形態に係る要求頻度情報テーブル記憶部に記憶される情報の一例を示す図である。図7に例示するように、参照対象キーを識別する文字列である「参照対象キー」と、各参照対象キーがアクセス要求の対象となった回数である「要求頻度」と、目標とする参照対象キーの複製数である「複製目標M」と、後述する決定部22bによって決定された実際に複製する参照対象キーの数である「複製数N」とを対応付けて記憶する。
具体的な例を挙げて説明すると、要求頻度情報テーブル記憶部23bは、例えば、参照対象キー「aaa」に対応する要求頻度として「40」、複製目標Mとして「0」、複製数Nとして「0」を記憶する。また、例えば、要求頻度情報テーブル記憶部23bは、参照対象キー「ddd」に対応する要求頻度として「610」、複製目標Mとして「2」、複製数Nとして「3」を記憶する。
図6に戻って、制御部22は、取得部22a、決定部22b、作成部22cおよび割当部22dを有する。ここで、制御部22は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路やASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路である。
取得部22aは、要求処理サーバ10から参照対象キーごとのアクセス回数を取得する。具体的には、取得部22aは、要求処理サーバ10の要求処理アプリ110から分散KVSサーバ50に対する参照要求について、参照対象キー毎の要求頻度を取得する。そして、取得部22aは、取得した要求頻度を要求頻度情報テーブル記憶部23bに格納する。
決定部22bは、取得部22aによって取得されたアクセス回数が所定の閾値を超えている場合に、該アクセス要求に対応する参照対象キーを複製する個数を決定する。具体的には、要求頻度情報テーブル記憶部23bから参照要求キー毎の要求頻度に応じて、各参照要求キーの複製数をそれぞれ決定し、要求頻度情報テーブル記憶部23bに格納する。
また、決定部22bは、取得部22aによって取得されたアクセス回数が閾値を超えている場合に、アクセス回数を閾値で除算した値に応じて、個数を決定する。ここで、各参照要求キーの複製数を決定する処理について詳しく説明する。例えば、決定部22bは、取得部22aによって取得された要求頻度を対象キーごとに合算し、前述した図7に例示するような要求頻度情報テーブルを作成し、要求頻度情報テーブル記憶部23bに格納する。
ここで、決定部22bは、各キーの要求頻度を予め定める閾値で除算し、小数点未満を切り捨てた整数を、要求頻度情報テーブルにおける複製目標Mとして算出する。例えば、閾値を「300」とした場合に、要求頻度が610であるキー「ddd」の複製目標Mは、「2」となる。
複製目標Mは、分散KVSサーバ50の負荷の偏りを軽減するために、いくつのサーバにキーを複製すべきかを表すものであり、例えば、複製目標Mが「2」であるキー「ddd」の場合には、キー「ddd」が元々割り当てられている分散KVSサーバ50とは別の分散KVSサーバ2台に対して、キー「ddd」の複製キーを作成する必要があることを意味する。
ところが、キーがどの分散KVSサーバ50に割り当てられるかは、分散KVSクライアントライブラリ130が、例えばコンシステントハッシュ法などによって、ある種ランダムに決定されるものであり、割当先の分散KVSサーバ50をあらかじめ指定することができない。このため、複製目標M分の複製キーを作成したとしても、それらが全て異なる分散KVSサーバ50に割り当てられるとは限らない。
そこで、複製キーがランダムに各分散KVSサーバ50に割り当てられる場合に、複製キーが割り当てられる分散KVSサーバ50の数が複製目標M以上となるために必要な複製数の期待値を複製数Nと定義する。決定部22bは、複製数Nについて、下記の(1)式で算出し、小数点以下を切り上げて整数化した値を複製数Nとする。なお、下記の(1)において、分散KVSサーバ50のサーバ数をSとする。
なお、あるキーが元々割り当てられている分散KVSサーバ以外の全サーバにそれぞれ1つずつ複製キーが存在する状態が最も負荷を分散できる状態であるため、複製目標Mの最大値は「S−1」とする。前述した図7に例示する要求頻度情報テーブルは、分散KVSのサーバ数Sが「10」とした場合の例である。
その後、決定部22bは、作成した要求頻度情報テーブルから複製数が1以上のものを抽出し、図5に例示したような複製管理情報テーブルを作成する。例えば、決定部22bは、前回作成した複製管理情報テーブルが存在する場合には、今回作成した複製管理情報テーブルとの比較を行い、複製数が増加したレコード(新規に追加されたレコードを含む)、複製数が減少したレコード(削除されたレコードを含む)を、それぞれ抽出する。
また、決定部22bは、前回作成時の複製管理情報テーブルが存在しなければ、今回作成した複製管理情報テーブルの全てのレコードが、複製数が増加したレコードとなる。なお、前回作成した複製管理情報テーブルについては、複製管理テーブルの比較後、不要のため削除される。
作成部22cは、決定部22bによって決定された個数分の参照対象キーの複製を作成する。具体的には、作成部22cは、各参照対象キーについて、要求頻度情報テーブル記憶部23bに記憶された複製数分の複製キーを作成するとともに、複製管理情報を作成して複製管理情報記憶部23aに格納する。
例えば、作成部22cは、キーの文字列(例えば、「abc」)に、あらかじめ定める区切り文字(例えば、“_”(アンダースコア))と、1〜「複製管理情報から取得した当該キーの複製数」までの整数(例えば、「1」〜「3」)をそれぞれ付与した文字列(例えば、「abc_1」、「abc_2」、「abc_3」)を新たな複製キーとして作成する。
割当部22dは、作成部22cによって作成された参照対象キーの複製を、複数の分散KVSサーバのうちのいずれかの分散KVSサーバに記憶されるデータであって、アクセス回数が閾値を超えた参照対象キーに対応するデータに割り当てる。なお、参照対象キーに対応するデータに割り当てる処理の具体的な内容については、後述する図10における複製キー追加処理として後に説明する。
ここで、図8を用いて、複製管理サーバ20におけるキー割当処理の概要について具体的な例を用いて説明する。図8は、第一の実施形態に係る複製管理サーバにおけるキー割当処理を説明する図である。図8に例示するように、複製管理サーバ20が、各キーの参照要求頻度に応じて、高頻度にアクセスが生じるキー(例えば、keyY)の複製を行い、複製キー(例えば、keyY_1〜3)を分散KVSサーバ50A、50C、50Dに割り当てる。
そして、例えば、要求処理サーバ10Bは、高頻度アクセスキーであるkeyYに対する参照要求を複製キー(keyY_2)に対する参照要求に変換し、分散KVSサーバ50Cに対してアクセスを行う。
このように、第一の実施形態に係る情報処理システム1では、複製管理サーバ20が、アプリケーションからの参照要求における各キーの要求頻度に応じてそのキーの複製を作成し、アプリケーションからの参照要求をそれら複製されたキーに分散させる。このため、既存の分散KVSシステムをそのまま使用しながら、かつ要求処理アプリに対して特別な機能追加を必要とすることなく、分散KVSサーバ50における、キーのアクセス頻度の偏りに由来する負荷の偏りを軽減することが可能である。
[情報処理システムによる処理]
次に、図9、図10を用いて、第一の実施形態に係る情報処理システム1による処理を説明する。図9は、第一の実施形態に係る情報処理システムにおけるサービス要求応答処理の流れを説明するためのシーケンス図である。図10は、第一の実施形態に係る情報処理システムにおける複製数変更処理の流れを説明するためのシーケンス図である。
まず、図9を用いて、情報処理システム1におけるサービス要求応答処理の流れを説明する。図9では、クライアント30から送信されたサービス要求に対して、要求処理サーバ10がサービス応答を返すまでの処理を説明する。
図9に示すように、クライアント30は、サービス要求を負荷分散装置40に送信する(ステップS101)。そして、サービス要求を受信した負荷分散装置40は、例えば、ラウンドロビンなどの方式によりサービス要求の転送先の要求処理サーバ10を決定し、サービス要求を転送する(ステップS102)。ここで、サービス要求には、ユーザ名やサービス指定値、サービスオプション指定値などが含まれるものとする。
続いて、サービス要求を受信した要求処理サーバ10上の要求処理アプリ110は、当該サービス要求に対するサービス応答の作成に必要な情報を分散KVSサーバ50から取得するため、例えば、サービス指定値を対象キーとする参照要求を、アクセス変換ラッパー120に対して送信する(ステップS103)。なお、図9では説明を省略しているが、サービス応答の作成のために他にデータを取得する必要がある場合、要求処理アプリ110は、それらデータを取得するためのキー(例えば、ユーザ名やサービスオプション指定値など)を対象キーとする参照要求をそれぞれ送信し、必要なデータを参照応答から取得する。
続いて、参照要求を受信したアクセス変換ラッパー120は、参照要求に含まれる対象キーをキーとする参照要求を分散KVSクライアントライブラリ130に送信する(ステップS104)。具体的には、アクセス変換ラッパー120は、参照要求に含まれる対象キーをキーとして、図5において例示した複製管理情報テーブルを検索する。そして、アクセス変換ラッパー120は、検索の結果、該当のレコードが無い場合は、当該キーが複製されていないと判断し、アクセス変換ラッパー120は、要求処理アプリから送信された参照要求をそのまま分散KVSクライアントライブラリ130に送信する。
一方、アクセス変換ラッパー120は、該当のレコードが存在した場合、つまり当該キーが複製されている場合には、当該キーの文字列(例えば、「abc」)に、あらかじめ定める区切り文字(例えば、“_”(アンダースコア))と、1〜「複製管理情報から取得した当該キーの複製数」までの範囲の中からランダムに選んだ整数(例えば、「3」)を付与した文字列(例えば、「abc_3))を新たな対象キーとする参照要求を、分散KVSクライアントライブラリ130に送信する。これにより、複製されたキーに対する参照要求は、複製キー(「abc_3」など)のいずれかに対する参照要求に変換され、分散KVSサーバ50の負荷の偏りを軽減することができる。
そして、参照要求を受信した分散KVSクライアントライブラリ130は、参照要求に含まれる対象キーを用いて、例えば、コンシステントハッシュ法などの方式により、当該キーのデータを保持する分散KVSサーバ50Bを特定し、当該分散KVSサーバ50Bに参照要求を送信する(ステップS105)。
そして、参照要求を受信した分散KVSサーバ50Bは、参照要求に含まれる対象キーに対応するデータを自身の記憶領域から取得し、当該データを格納した参照応答を要求処理サーバ上の分散KVSクライアントライブラリ130に送信する(ステップS106)。なお、対象キーに対応するデータが存在しなかった場合は、空の参照応答を送信する。
そして、参照応答を受信した分散KVSクライアントライブラリ130は、アクセス変換ラッパー120に参照応答を転送する(ステップS107)。続いて、参照応答を受信したアクセス変換ラッパー120は、要求処理アプリ110に参照応答を転送する(ステップS108)。
参照応答を受信した要求処理アプリ110は、参照応答に含まれるデータを用いて、サービス応答を作成し、クライアント30に送信する(ステップS109)。ここで、例えば、サービス要求を送信した各ユーザの最終要求送信時刻を記録するなどのために、分散KVSサーバ50A〜50Cのデータを更新する必要がある場合には、要求処理アプリ110は、ユーザ名を対象キーとし、最終要求送信時刻を更新データとする更新要求をアクセス変換ラッパー120に送信する(ステップS110)。
そして、更新要求を受信したアクセス変換ラッパー120は、更新要求を分散KVSクライアントライブラリ130に送信する(ステップS111)。具体的には、更新要求を受信したアクセス変換ラッパー120は、参照要求の受信時と同様に、更新要求に含まれる対象キーを用いて複製管理情報テーブルを検索する。そして、アクセス変換ラッパー120は、検索の結果、該当のレコードが無い場合、つまり当該キーが複製されていない場合、要求処理アプリから送信された更新要求をそのまま分散KVSクライアントライブラリ130に送信する。
一方、該当のレコードが存在した場合、つまり当該キーが複製されている場合、アクセス変換ラッパー120は、更新要求に含まれる対象キーの文字列(例えば、「UserA」)に、あらかじめ定める区切り文字(例えば、「_」(アンダースコア))と、1〜「複製管理情報から取得した当該キーの複製数」(例えば、「1」〜「5」)を付与した文字列(例えば、「UserA_1」、「UserA_2」、「UserA_3」、「UserA_4」、「UserA_5」)および複製元のキー「UserA」を更新対象キーとする更新要求を、分散KVSクライアントに送信する。
これにより、複製元のキーと全ての複製キーの更新を行う。なお、図9では説明を省略しているが、要求処理から削除要求を受信した場合も、更新要求受信時と同様に、複製元のキーと全ての複製キーを削除対象とする削除要求を分散KVSクライアントライブラリ130に送信する。
そして、それら更新要求を受信した分散KVSクライアントライブラリ130は、参照要求の受信時と同様に、各更新要求に含まれる対象キーを用いて、コンシステントハッシュ法などの方式により、当該キーのデータを保持する分散KVSサーバ50A〜50Cを特定し、当該分散KVSサーバ50A〜50Cに更新要求を送信する(ステップS112)。
更新要求を受信した分散KVSサーバ50A〜50Cは、更新要求に含まれる対象キーに対応するデータを、更新要求に含まれるデータで上書きし、更新応答を要求処理サーバ10上の分散KVSクライアントライブラリ130に送信する(ステップS113)。
そして、更新応答を受信した分散KVSクライアントライブラリ130は、アクセス変換ラッパー120に更新応答を転送する(ステップS114)。続いて、アクセス変換ラッパー120は、ステップS111において送信した全ての更新要求に対する更新応答を受信後に、更新応答を要求処理アプリ110に送信する(ステップS115)。
次に、図10を用いて、情報処理システム1における複製数変更処理の流れを説明する。図10では、アクセス変換ラッパー120から送信される各キーの要求頻度に応じて、複製管理サーバ20がキーの複製数を決定し、複製キーの追加、削除を行う処理を説明する。なお、上記の処理において、複製管理サーバ20は、要求処理サーバ10が要求頻度情報を送信する間隔に合わせて、定期的に処理を行うものである。
図10に示すように、各要求処理サーバ10上のアクセス変換ラッパー120は、要求処理アプリ110から送信される参照要求に含まれる対象キーごとの要求頻度をカウントする要求頻度カウント処理を行う(ステップS201)。
そして、アクセス変換ラッパー120は、要求頻度の情報を要求頻度情報通知として複製管理サーバ20に定期的(例えば、5分ごと)に送信する(ステップS202)。なお、要求頻度情報には、対象キーごとの要求頻度が含まれているが、期間内に受信した参照要求中のすべての対象キーの要求頻度を格納した場合に、データ量が著しく大きくなる可能性があるため、予め定める閾値(例えば、5分間の要求数が100以上)を超える要求頻度の対象キーの情報のみを要求頻度情報に含めるようにしてもよい。
その後、要求頻度情報通知を受信した複製管理サーバ20は、後に図11を用いて詳述する複製数変更判断処理を行う(ステップS203)。そして、複製管理サーバ20は、複製数変更判断処理で抽出した複製数の増加、減少を、それぞれ複製キーの追加、削除として分散KVSサーバ50A〜50Cに対して反映するとともに、複製管理情報テーブルの更新をアクセス変換ラッパー120に対して通知する。この処理は、複製キーの追加処理、複製管理情報の更新通知、複製キーの削除処理の順に実施する。これは、アクセス変換ラッパー120が追加前や削除後の複製キーにアクセスすることを抑止するためである。
複製キーの追加処理では、複製管理サーバ20は、まず複製元のキーに対する参照要求を行い(ステップS204)、参照要求に対する参照応答を受信して(ステップS205)、当該キーに対応するデータ(バリュー)を取得する。なお、図11では省略しているが、複製管理サーバ20上にも、分散KVSクライアントライブラリ210が存在し、参照要求や以下に述べる追加要求の送信、およびそれら要求に対する応答の受信については、分散KVSクライアントライブラリを介して行われる。
次に、複製管理サーバ20は、複製数の増加分だけ、キーの追加要求を行う。例えば、あらかじめ定める区切り文字を「_」として、キーgggの複製数を3から6に増加させる場合には、「ggg_4」、「ggg_5」、「ggg_6」を対象キーとする新たな複製キーの追加処理を要求する追加要求を分散KVSサーバ50A〜50Cに対して送信し(ステップS206、ステップS208、ステップS210)、分散KVSサーバ50A〜50Cから追加応答を受信する(ステップS207、ステップS209、ステップS211)。
続いて、複製管理サーバ20は、複製数が増加したすべてのキーに対する複製キーの追加処理を上記のようにして実施後、各要求処理サーバのアクセス変換ラッパー120に対して、複製管理情報更新通知を行い(ステップS212)、その応答として複製管理情報更新応答を受信する(ステップS213)。なお、複製管理情報更新通知には、新たな複製管理情報テーブルの内容をすべて含めなくともよく、更新差分だけを格納し、アクセス変換ラッパーが更新差分を適用した新たな複製管理情報テーブルを作成してもよい。
そして、複製管理サーバ20は、すべての要求処理サーバ10に対して、複製管理情報更新通知を行った後、複製キーの削除処理を要求する削除要求を分散KVSサーバ50B、50Cに送信し(ステップS214、ステップS216)、その応答を受信する(ステップS215、ステップS217)。ここで、複製キーの削除処理は、追加処理とは逆に、例えば、キーgggの複製数を8から6に減少させる場合に、対象キーを「ggg_8」、「ggg_7」とする削除要求を分散KVSサーバ50B、50Cに対して行う。
次に、図11を用いて、上記した複製数変更判断処理について説明する。図11は、第一の実施形態に係る複製管理サーバにおける複製数変更判断処理の流れを説明するためのフローチャートである。図11に示すように、複製管理サーバ20は、要求頻度情報テーブルを作成する(ステップS301)。
具体的には、複製管理サーバ20は、要求処理サーバ10から受信した要求頻度情報通知に含まれる要求頻度情報を対象キーごとに合算し、前述した図7に例示するような要求頻度情報テーブルを作成する。ここで、例えば、複製管理サーバ20は、各キーの要求頻度を予め定める閾値で除算し、小数点未満を切り捨てた整数を、要求頻度情報テーブルにおける複製目標Mとして算出する。また、複製管理サーバ20は、上記の(1)式で複製数Nを算出する。
その後、複製管理サーバ20は、作成した要求頻度情報テーブルから複製数が1以上のものを抽出して複製管理情報テーブルを作成し、前回作成時の複製管理テーブルとの差分を抽出する(ステップS302)。例えば、複製管理サーバ20は、前回作成した複製管理情報テーブルが存在する場合には、今回作成した複製管理情報テーブルとの比較を行い、複製数が増加したレコード(新規に追加されたレコードを含む)、複製数が減少したレコード(削除されたレコードを含む)を、それぞれ抽出する。また、複製管理サーバ20は、前回作成時の複製管理情報テーブルが存在しなければ、今回作成した複製管理情報テーブルの全てのレコードが、複製数が増加したレコードとなる。
[第一の実施形態の効果]
上述してきたように、第一の実施形態に係る情報処理システム1では、要求処理サーバ10が、キーを含むアクセス要求を受け付けた場合には、該キーに対応するデータを記憶する分散KVSサーバ50に対してアクセスを行う。そして、要求処理サーバ10が、キーごとに、受け付けたアクセス要求の数であるアクセス回数を計数する。また、複製管理サーバ20が、要求処理サーバ10からキーごとのアクセス回数を取得し、取得されたアクセス回数が所定の閾値を超えている場合に、該アクセス要求に対応するキーを複製する個数を決定する。続いて、複製管理サーバ20が、決定された個数分のキーの複製を作成し、作成されたキーの複製を、複数の分散KVSサーバ50のうちのいずれかの分散KVSサーバ50に記憶されるデータであって、アクセス回数が閾値を超えたキーに対応するデータに割り当てる。
これにより、第一の実施形態に係る情報処理システム1では、サーバの輻輳を軽減し、システム全体のリソースを有効活用することが可能となる。つまり、図12に例示するように、従来の分散KVSシステムでは、例えば、要求処理サーバ100A〜100Cによって特定のキー「keyY」にアクセスが集中してしまうと、当該キーを割り当てられた分散KVSサーバ50Bに負荷が集中してしまい、当該分散KVSサーバで輻輳が発生し、サービスに影響が出てしまう。また、情報処理システム全体として、サーバリソースを有効活用できていない。
これに対して、第一の実施形態に係る情報処理システム1では、複製管理サーバ20が、参照対象キーの要求頻度に応じて決定する複製数分の複製を作成し、要求処理サーバ10のアクセス変換ラッパー120が複製されたキーに対する参照要求を複製後のキーのいずれかに変換することで、分散KVSにおけるキーのアクセス頻度の偏りに由来する分散KVSサーバ50の負荷の偏りを軽減でき、特に、特定のキーに対する参照要求が多いアプリケーションに対して有用である。
また、既存の分散KVSシステムをそのまま使用しながら、かつアプリケーションに対して特別な機能追加を必要とすることなく、分散KVSにおけるキーの要求頻度の偏りに由来するサーバ負荷の集中を軽減することが可能であり、情報処理システム全体として、サーバリソースを有効活用することが可能である。また、要求処理アプリ110に特別な機能追加が不要であるほか、分散KVSクライアント/サーバについても、市中の汎用な分散KVSをそのまま使用することができる。
[第二の実施形態]
上記した第一の実施形態では、複製キーがランダムに各分散KVSサーバ50に割り当てられており、複製キーが割り当てられる分散KVSサーバ50の数が複製目標M以上となるために必要な複製数の期待値である複製数Nを算出し、複製数N個分のキーの複製を作成する場合を説明した。
しかし、実施形態はこれに限定されるものではなく、例えば、複製目標M個分のキーの複製を作成し、作成されたキーを割り当てる際に、既に作成した複製キーの割当先分散KVSサーバと重複した場合には、割当先分散KVSサーバが重複しなくなるまで複製キーの割り当てを試行するようにしてもよい。
以下では、第二の実施の形態として、複製目標M個分のキーの複製を作成し、作成されたキーを割り当てる際に、既に作成した複製キーの割当先分散KVSサーバと重複した場合には、割当先分散KVSサーバが重複しなくなるまで複製キーの割り当てを試行する複製管理サーバ20の構成および処理について説明する。なお、第一の実施の形態と同様の構成および処理については説明を省略する。
図13を用いて、複製管理サーバ20Aの構成について説明する。図13は、第二の実施形態に係る複製管理サーバの構成を示すブロック図である。図13に示すように、第二の実施形態に係る複製管理サーバ20Aは、第一の実施形態に係る複製管理サーバ20と比較して、割当先重複判定部22eをさらに有する点が異なる。また、第二の実施形態に係る複製管理サーバ20Aは、第一の実施形態に係る複製管理サーバ20と比較して、複製管理情報記憶部23aおよび要求頻度情報テーブル記憶部23bに記憶される情報も異なる。
複製管理情報記憶部23aは、要求頻度情報テーブルとして、複製された参照対象キーごとに、複製されたキーの数を記憶するとともに複製キーのインデックスと、複製キーの割当先サーバである分散KVSサーバ50を識別する情報を記憶する。例えば、図14に例示するように、複製された参照対象キーを識別する文字列である「キー」と、参照対象キーの複製された数を示す「複製数」と、複製キーのインデックスを示す「複製キーのインデックス」と、複製キーの割当先サーバである分散KVSサーバ50を識別する情報である「複製キーの割当先サーバ」とを対応付けて記憶する。
また、要求頻度情報テーブル記憶部23bは、参照対象キーごとの要求頻度とともに、後述する決定部22bによって決定された参照対象キーの数を記憶する。例えば、図15に例示するように、参照対象キーを識別する文字列である「参照対象キー」と、各参照対象キーがアクセス要求の対象となった回数である「要求頻度」と、目標とする参照対象キーの複製数である「複製目標M」とを対応付けて記憶する。ここで、第二の実施形態に係る要求頻度情報テーブル記憶部23bでは、複製数Nを記憶しておらず、複製目標Mの値が各キーの複製数として記憶されている。
割当先重複判定部22eは、割当部22dによってキーの複製がデータに割り当てられた際に、該キーの複製に対応するデータを識別するキーが既に分散KVSサーバ50に割り当てられているか否かを判定する。具体的には、割当先重複判定部22eは、新たな複製キーが割り当てられた分散KVSサーバ50が、複製元のキーや既に作成した複製キーが割り当てられた分散KVSサーバ50と重複しているか否かをログ等から判定する。
割当部22dは、割当先重複判定部22eによって複製キーが既に分散KVSサーバ50に割り当てられていると判定された場合には、複製キーを割り当てる処理を再度行う。具体的には、割当部22dは、割当先重複判定部22eによって複製キーが既に分散KVSサーバ50に割り当てられていると判定された場合には、作成した複製キー(例えば、キー「ggg_5」)を削除し、インデックスに1加算した新たなキー(例えば、「ggg_6」)の追加を分散KVSサーバ50に対して試行する。
ここで、図16を用いて、第二の実施形態に係る情報処理システムにおける複製数変更処理の流れを説明する。図16は、第二の実施形態に係る情報処理システムにおける複製数変更処理の流れを説明するためのシーケンス図である。図16では、アクセス変換ラッパーから送信される各キーの要求頻度情報に基づいて、複製管理サーバ20Aが複製数の変更を判断し、複製キーの追加、削除を行う処理を示す。また、複製管理サーバ20Aは、要求処理サーバ10が要求頻度情報を送信する間隔に合わせて、定期的にこの処理を行う。
図16に示すように、第一の実施形態と同様に、各要求処理サーバ10上のアクセス変換ラッパー120は、要求処理アプリ110から送信される参照要求に含まれる対象キーごとの要求頻度をカウントする要求頻度カウント処理を行う(ステップS401)。そして、アクセス変換ラッパー120は、要求頻度の情報を要求頻度情報通知として複製管理サーバ20Aに定期的(例えば、5分ごと)に送信する(ステップS402)。
続いて、第二の実施形態に係る複製管理サーバ20Aでは、各要求処理サーバ10上のアクセス変換ラッパー120から要求頻度情報通知を受信した場合に、以下のように複製数変更判断処理を行う(ステップS403)。
まず、受信した要求頻度情報通知に含まれる要求頻度情報を各参照対象キー毎に合算し、図15に例示するような要求頻度情報テーブルを作成する。複製目標Mの決定方法については第一の実施形態と同様であるが、第一の実施形態と異なり、複製目標Mをそのまま、各キーの複製数とし、図14に示すような複製管理情報テーブルを作成する。
複製管理サーバ20Aは、前回作成した複製管理情報テーブルが存在する場合、今回作成した複製管理情報テーブルとの比較を行い、複製数が増加したレコード(新規に追加されたレコードも含む)、複製数が減少したレコード(削除されたレコードも含む)を、それぞれ抽出する。前回作成時の複製管理情報テーブルが存在しなければ、今回作成した複製管理情報テーブルの全てのレコードが、複製数が増加したレコードとなる。前回作成した複製管理情報テーブルについては、複製管理テーブルの比較後、不要のため削除する。
次に、複製管理サーバ20Aは、上記で抽出した複製数の増加、減少を、それぞれ複製キーの追加、削除として分散KVSサーバ50に対して反映するとともに、複製管理情報テーブルの更新をアクセス変換ラッパー120に対して通知する。その処理は、複製キーの追加処理、複製管理情報の更新通知、複製キーの削除処理の順に実施する。これは、アクセス変換ラッパーが追加前や削除後の複製キーにアクセスすることを抑止するためである。
複製キーの追加処理では、複製管理サーバ20Aは、まず複製元のキーに対する参照要求を行い(ステップS404)、参照要求に対する参照応答を受信して(ステップS405)、当該キーに対応するデータ(バリュー)を取得する。次に、複製数の増加分だけ、下記の処理を繰り返し行う。
ここでは、あらかじめ定める区切り文字を「_」として、キー「ggg」の複製数を3から4に増加させる場合について記載する。複製管理サーバ20Aは、既に作成されているキー「ggg」の複製キーのインデックスの最大値を複製管理情報テーブルから取得し、それが4であったと場合、追加する複製キーのインデックスをそれより1大きい5とし、キー「ggg_5」を新たな複製キーとして分散KVSサーバ50Cに対して追加する追加要求を送信し(ステップS406)、追加要求に対する追加応答を受信する(ステップS407)。
そして、複製管理サーバ20Aは、分散KVSクライアントライブラリのログから、キー「ggg_5」がどの分散KVSサーバ50に割り当てられたかの情報を取得する。その結果、割り当てられたサーバが分散KVSサーバ50Cであった場合、複製管理情報テーブルから、分散KVSサーバ50Cはすでにインデックスが2であるgggの複製キー「ggg_2」が割当済みであることが分かるため、作成した複製キーggg_5は削除する削除要求を分散KVSサーバ50Cに対して送信し(ステップS408)、削除要求に対する削除応答を受信する(ステップS409)。
そして、複製管理サーバ20Aは、インデックスに1を加算した新たな複製キー「ggg_6」の追加を試行する(ステップS410、ステップS411)。同様にggg_6の割当先サーバを分散KVSクライアントライブラリのログから取得し、それが既に作成した複製キーの割当先サーバと重複しないことを確認する。
このように、複製キーの割当先サーバを判断し、それが既存の複製キーの割当先サーバと重複していた場合には、複製キーの作成をやり直すことにより、すべての複製キーの割当先サーバの重複を回避できる。
複製数が増加したすべてのキーに対する複製キーの追加処理を上記のように実施後、複製管理サーバ20Aは、各要求処理サーバのアクセス変換ラッパー120に対して、複製管理情報更新通知を行い(ステップS412)、その応答として複製管理情報更新応答を受信する(ステップS413)。複製管理情報更新通知には、新たな複製管理情報テーブルの内容をすべて格納してもよく、更新差分だけを格納し、アクセス変換ラッパー120が更新差分を適用した新たな複製管理情報テーブルを作成するのでもよい。
なお、図16の説明では省略するが、すべての要求処理サーバ10に対して、複製管理情報更新通知を行った後、複製管理サーバ20Aは、第一の実施形態と同様に、複製キーの削除処理を行う。複製キーの削除処理については、複製キーのうち、インデックスの大きいものから必要な削除数分だけ削除する。また、複製管理情報テーブルが保持する各複製キーの割当先サーバ情報は、分散KVSサーバの増設や減設があった場合、不整合が生じる恐れがある。そのため、分散KVSクライアントライブラリのログから、分散KVSサーバ50の増設や減設が発生したことを検出した場合、すべての複製キーの作成を再度実施する必要がある。
このように、第二の実施形態に係る情報処理システムでは、第一の実施形態の効果に加えて、必要な複製キーの数が減少するため、分散KVSサーバ50の記憶容量を軽減でき、また、分散KVSサーバ50の負荷集中をより確実に抑止することが可能である。
[システム構成等]
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、取得部22aと決定部22bとを統合してもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施形態において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、上記した各サーバへの機能配備はあくまで一例であり、例えば、要求処理アプリ、アクセス変換ラッパー、分散KVSクライアントをそれぞれ独立のサーバ上で動作させてもよく、また複製管理サーバの役割を要求処理サーバの一つに重畳させてもよい。
また、要求処理アプリが一種類である例を示しており、要求処理アプリから分散KVSサーバへのアクセスについて全てをアクセス変換ラッパーを仲介しているが、高頻度な参照要求を行わないことが明らかな保守用アプリケーションなどについては、アクセス変換ラッパーを仲介せず直接分散KVSサーバにアクセスしてもよい。ただし、その場合、複製キーに使用する区切り文字は、通常のキーの中では使用しない文字とする必要がある。
また、情報処理システムにおいて、複製管理サーバの機能を要求処理サーバに全て持たせるようにしてもよい。具体的には、要求処理サーバが、取得部22a、決定部22b、作成部22c、割当部22dに相当する機能を有してもよい。
[プログラム]
また、上記実施形態において説明した要求処理サーバ10が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、第一の実施形態に係る複製管理サーバ20が実行する処理をコンピュータが実行可能な言語で記述したキー割当プログラムを作成することもできる。この場合、コンピュータがキー割当プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかるキー割当プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されキー割当プログラムをコンピュータに読み込ませて実行することにより上記第一の実施形態と同様の処理を実現してもよい。以下に、図6に示した複製管理サーバ20と同様の機能を実現するキー割当プログラムを実行するコンピュータの一例を説明する。
図17は、キー割当プログラムを実行するコンピュータ1000を示す図である。図17に例示するように、コンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有し、これらの各部はバス1080によって接続される。
メモリ1010は、図17に例示するように、ROM(Read Only Memory)1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、図17に例示するように、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、図17に例示するように、ディスクドライブ1100に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ1100に挿入される。シリアルポートインタフェース1050は、図17に例示するように、例えばマウス1110、キーボード1120に接続される。ビデオアダプタ1060は、図17に例示するように、例えばディスプレイ1130に接続される。
ここで、図17に例示するように、ハードディスクドライブ1090は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、上記のキー割当プログラムは、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1090に記憶される。
また、上記実施形態で説明した各種データは、プログラムデータとして、例えばメモリ1010やハードディスクドライブ1090に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1090に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出し、各種処理手順を実行する。
なお、キー割当プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1090に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してCPU1020によって読み出されてもよい。あるいは、キー割当プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。