(57)【要約】【課題】負荷分散を行うノード数が変更された場合におけるデータベースへのアクセスの上昇を抑える情報処理装置、情報処理システムの制御方法及び情報処理システムの制御プログラムを提供する。【解決手段】キャッシュノード２０１〜２０３は、複数ある。記憶部４０１〜４１０は複数あり、キャッシュノード２０１〜２０３毎に割り当てられる。管理部１００は、アクセス要求を受けて、受信したアクセス要求に基づく処理をアクセス先のキャッシュノード２０１〜２０３に指示する。制御部３０１は、キャッシュノード２０１〜２０３のうちいずれかが故障した場合に、故障したキャッシュノード２０１〜２０３に割り当てられていた記憶部４０１〜４１０の割り当てを、故障したキャッシュノード２０１〜２０３以外のキャッシュノード２０１〜２０３のいずれかに切替える。【選択図】図２
2014095946.tif 000002
【特許請求の範囲】
【請求項１】
複数の情報処理部と、
前記情報処理部毎に割り当てられた複数の記憶部と、
アクセス要求を受けて、受信したアクセス要求に基づく処理をアクセス先の前記情報処理部に指示する負荷分散制御部と、
前記情報処理部のうちいずれかが故障した場合に、故障した情報処理部に割り当てられていた記憶部の割り当てを、故障した情報処理部以外の情報処理部のいずれかに切替える割当制御部と
を備えたことを特徴とする情報処理装置。
【請求項２】
前記負荷分散制御部は、故障した情報処理部と切替えにより故障した情報処理部に割り当てられていた前記記憶部が割り当てられた情報処理部とを対応付ける変換テーブルを有し、故障した情報処理部に対するアクセス要求を受信すると、前記変換テーブルを参照して切替えにより故障した情報処理部に割り当てられていた前記記憶部が割り当てられた情報処理部を特定し、特定した情報処理部をアクセス先の情報処理部とすることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記割当制御部は、前記情報処理部毎に割り当てられている前記記憶部を示す管理テーブルを有し、前記情報処理部の故障が発生した場合、前記管理テーブルの対応を変更することで割り当ての切替えを行い、且つ、前記情報処理部から前記アクセス要求に基づく処理の指示を受信すると、前記管理テーブルを参照して前記情報処理部に割り当てられた前記記憶部を特定し、特定した記憶部に、前記アクセス要求に基づく処理に応じたデータが格納されているか否かを判定することを特徴とする請求項１又は請求項２に記載の情報処理装置。
【請求項４】
前記負荷分散制御部は、前記情報処理部の故障の発生を検知し、故障が発生した場合、故障が発生していない前記情報処理部の中から代替装置を決定し、前記代替装置を介して前記割当制御部へ前記管理テーブルの対応の変更を指示し、前記管理テーブルの対応の変更完了の通知を前記割当制御部から前記代替装置を介して取得して変換テーブルを更新することを特徴とする請求項２又は請求項３に記載の情報処理装置。
【請求項５】
前記負荷分散制御部は、故障が発生していない前記情報処理部のうちアクセス数が最も少ない情報処理部を代替装置として決定することを特徴とする請求項３に記載の情報処理装置。
【請求項６】
複数の情報処理装置と前記情報処理装置毎に割り当てられた複数の記憶装置とを備えた情報処理システムの制御方法であって、
外部からのアクセス要求を受けて、受信した前記アクセス要求に基づく処理をアクセス先の前記情報処理装置に指示し、
前記情報処理装置のうちいずれかが故障した場合に、故障した情報処理装置に割り当てられていた記憶装置の割り当てを、故障した情報処理装置以外の情報処理装置のいずれかに切替える
ことを特徴とする情報処理システムの制御方法。
【請求項７】
複数の情報処理装置と前記情報処理装置毎に割り当てられた複数の記憶装置とを備えた情報処理システムの制御プログラムであって、
アクセス要求を受けて、受信したアクセス要求に基づく処理をアクセス先の前記情報処理装置に指示し、
前記情報処理装置のうちいずれかが故障した場合に、故障した情報処理装置に割り当てられていた記憶装置の割り当てを、故障した情報処理装置以外の情報処理装置のいずれかに切替える
処理をコンピュータに実行させることを特徴とする情報処理システムの制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システムの制御方法及び情報処理システムの制御プログラムに関する。
【背景技術】
【０００２】
ファイルや画像等のデータを記憶するデータベース等の情報処理システムは、サーバなどの複数の情報処理装置を並列に設けることで、アクセスによる負荷を分散できる。以下では、負荷分散を行っている情報処理装置をノードと言う場合がある。このような情報処理システムでは、特定のノードへのアクセスが集中した場合、アクセスが集中したノードがボトルネックになり、情報処理システム全体の性能が低下する。
【０００３】
そこで、ノードに対する負荷を分散させるために、各ノードに対応して設けられるデータ領域のうち参照頻度の高いデータ領域が、他のノードからアクセス可能な共有データ領域に設定される従来技術がある（例えば、特許文献１参照）。
【０００４】
また、データベースのアクセスを減らし検索効率を向上させるため、データベースサーバから検索結果を取得し、ページＩＤと検索条件データと取得結果データとを関連付けて管理する従来技術がある（例えば、特許文献２参照）。
【０００５】
さらに、データベースサーバへの問い合わせ項目及びその結果をサーバなどの各ノードが有するメモリに格納する技術が従来提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−３３９２３６号公報
【特許文献２】特開２００６−１２７１２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
このように、問い合わせ項目とその結果をメモリに格納する場合、各ノードに問い合わせを分配するロードバランサが、どのノードが有するメモリに問い合わせ項目やその結果を格納させるかを決定する。その場合、ロードバランサは、どのノードに情報を格納するかハッシュテーブルを用いて決定することが多い。そして、このような負荷分散を行う場合には、負荷分散しているノードの数でハッシュ値を割った余りをＩＤとするノードを情報の格納先として、情報の格納先を分散させる分散アルゴリズムを用いることが考えられる。
【０００８】
しかしながら、負荷分散を行っているいずれかのノードが故障などの理由により負荷分散の構成から削除された場合、ノードの数が減ってしまう。ノードの数を用いて情報の格納先を決定している場合、ノードの数が減ってしまうと、情報の格納先として取得される値が異なってしまい、求める情報を格納するノードへの接続が困難となり、キャッシュミスが頻発するおそれがある。そして、キャッシュミスの頻発により、データベースにアクセスが集中し情報処理システムの性能が著しく低下するおそれがある。
【０００９】
この問題を緩和するため、ノードの数が減った影響を一部だけに抑えるためのコンシステントハッシュを用いることが考えられるが、それでも複数のノードに影響が及ぶことは避けられず、やはり、情報処理システムの性能が低下するおそれがある。
【００１０】
データ領域のうち参照頻度の高いデータ領域を共有データ領域として設定する従来技術では、各ノードのメモリを情報の格納先として割り当てることは考慮されておらず、上述した状況において、情報処理システムの性能低下を回避することは困難である。
【００１１】
また、ページＩＤ、検索条件及び取得結果を関連付けて管理する従来技術では、上述の分散アルゴリズムを用いた場合におけるノードの削除については考慮されておらず、そのような場合における情報処理システムの性能の低下を回避することは困難である。
【００１２】
開示の技術は、上記に鑑みてなされたものであって、負荷分散を行うノード数が変更された場合におけるデータベースへのアクセスの上昇を抑える情報処理装置、情報処理システムの制御方法及び情報処理システムの制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本願の開示する情報処理装置、情報処理システムの制御方法及び情報処理システムの制御プログラムは、一つの態様において、情報処理部は、複数ある。記憶部は複数あり、前記情報処理部毎に割り当てられる。負荷分散制御部は、アクセス要求を受けて、受信したアクセス要求に基づく処理をアクセス先の前記情報処理部に指示する。割当制御部は、前記情報処理部のうちいずれかが故障した場合に、故障した情報処理部に割り当てられていた記憶部（４０１〜４１０）の割り当てを、故障した情報処理部以外の情報処理部のいずれかに切替える。
【発明の効果】
【００１４】
本願の開示する情報処理装置、情報処理システムの制御方法及び情報処理システムの制御プログラムの一つの態様によれば、負荷分散を行うノード数が変更された場合におけるデータベースへのアクセスの上昇を抑えることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、情報通信システムのシステム構成を表す概略図である。
【図２】図２は、実施例１に係る情報通信システムのブロック図である。
【図３】図３は、ノード変換テーブルの一例を表す図である。
【図４】図４は、管理テーブルの一例を表す図である。
【図５】図５は、記憶部の割り当て変更後の管理テーブルを表す一例の図である。
【図６】図６は、実施例１に係る情報処理システムにおけるアクセス要求に対する処理のフローチャートである。
【図７】図７は、アクセス先のキャッシュノードの決定処理のフローチャートである。
【図８】図８は、実施例１に係る情報処理システムにおけるにおけるキャッシュミスヒット後の書き込み要求に対する処理のフローチャートである。
【図９】図９は、ノード故障によるノード切替時の処理のフローチャートである。
【図１０】図１０は、代替ノードの決定処理のフローチャートである。
【図１１】図１１は、情報処理システムのハードウェア構成を表す図である。
【図１２】図１２は、実施例２に係る情報処理システムのブロック図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示する情報処理装置、情報処理システムの制御方法及び情報処理システムの制御プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理システムの制御方法及び情報処理システムの制御プログラムが限定されるものではない。
【実施例１】
【００１７】
図１は、情報通信システムのシステム構成を表す概略図である。図１に示すように、本実施例に係る情報通信システムは、ロードバランサ１、キャッシュサーバ２、スイッチ３、外部メモリ格納装置４、データベースサーバ５、クライアントＰＣ（Personal  Computer）６及びネットワーク７を有している。
【００１８】
データベースサーバ５は、データベースを有するサーバである。データベースサーバ５は、キャッシュサーバ２においてキャッシュヒットしなかった場合、書き込みや読み出しなどのアクセス要求を受ける。アクセス要求には、書き込みや読み出しを指示するクエリが含まれる。クエリには要求するデータを特定するためのキーが含まれる。受信したアクセス要求が読み出し要求の場合、データベースサーバ５は、データベースを検索し、指定されたデータを抽出する。そして、データベースサーバ５は、抽出したデータを要求元へ返す。また、受信したアクセス要求が書き込み要求の場合、データベースサーバ５は、指定されたデータをデータベースに書き込み、処理完了の応答を要求元へ返す。
【００１９】
クライアントＰＣ６は、アクセス要求をロードバランサ１へネットワーク７を介して送信する。そして、クライアントＰＣ６は、アクセス要求に含まれるクエリに対する応答をロードバランサ１から取得する。例えば、アクセス要求が読み出し要求の場合、クライアントＰＣ６は、読み出しを指定したデータをロードバランサ１から取得する。
【００２０】
ロードバランサ１は、アクセス要求をクライアントＰＣ６から受ける。そして、ロードバランサ１は、受信したアクセス要求に応じたクエリをデータベースサーバ５又はキャッシュサーバ２へ出力する。具体的には、ロードバランサ１は、取得したアクセス要求のクエリに対してハッシュ関数などを用いて、キャッシュサーバ２を一意に表すバリューを求める。そして、ロードバランサ１は、求めたバリューに対応するキャッシュサーバ２にクエリを送信する。求めたバリューに対応するキャッシュサーバ２でデータが既に管理されている場合、ロードバランサ１は、キャッシュヒットの通知をキャッシュサーバ２から受ける。これに対して、求めたバリューに対応するキャッシュサーバ２で管理されていなければ、ロードバランサ１は、キャッシュミスヒットの通知をキャッシュサーバ２から受ける。そして、ロードバランサ１は、データベースサーバ５から指定されたデータを読み出す。次に、ロードバランサ１は、読み出したデータを求めたバリューに対応するキャッシュサーバ２が管理するメモリに格納する。この時、メモリに空きが無ければ、ロードバランサ１は、Least  Recently  Used(ＬＲＵ)方式でメモリ内のデータを削除し、空いた領域に読み出したデータを格納する。
【００２１】
キャッシュサーバ２は、アクセス要求に応じたクエリをロードバランサ１から受ける。そして、内蔵メモリに指定されたデータがあるか否かを確認する。指定されたデータが内蔵メモリにあれば、キャッシュサーバ２は、キャッシュヒットの通知をロードバランサ１に送る。加えて、アクセス要求が読み出し命令の場合、キャッシュサーバ２は、ヒットしたデータをロードバランサ１へ出力する。これに対して、指定されたデータが内蔵メモリに無ければ、キャッシュサーバ２は、スイッチ３を介して外部メモリ格納装置４へアクセス要求に応じたクエリを出力する。その後、キャッシュサーバ２は、外部メモリ格納装置４においてキャッシュヒットした場合、キャッシュヒットの通知をロードバランサへ送信する。加えて、アクセス要求が読み出し命令の場合、キャッシュサーバ２は、読み出し命令に対応したデータの入力を外部メモリ格納装置４からスイッチ３を介して受ける。そして、キャッシュサーバ２は、取得した読み出し命令に応じたデータをクライアントＰＣ６へ出力する。これに対して、外部メモリ格納装置４においてもキャッシュミスヒットの場合、キャッシュサーバ２は、キャッシュミスヒットの通知をロードバランサへ送信する。
【００２２】
また、キャッシュミスヒットの場合、後に、キャッシュサーバ２は、ロードバランサ１からキャッシュミスヒットしたデータのキャッシュへの書き込み要求を受ける。そして、キャッシュサーバ２は、書き込み要求を受けると、内蔵メモリに空き容量があるか否かを判定する。内蔵メモリに空き容量があれば、キャッシュサーバ２は、指定されたデータを内蔵メモリに書き込む。一方、内蔵メモリに空き容量が無ければ、キャッシュサーバ２は、書き込み要求のクエリを外部メモリ格納装置４にスイッチ３を介して送信する。
【００２３】
スイッチ３は、例えばMulti  Root-Input  Output  Virtualization（ＭＲ−ＩＯＶ）を利用したスイッチなどである。スイッチ３は、キャッシュサーバ２から送られてきたクエリなどを外部メモリ格納装置４へ転送する。
【００２４】
外部メモリ格納装置４は、コントローラ４１及びメモリ４２を有している。図１では、メモリ４２を９個記載したが、メモリ４２の数には特に制限は無い。
【００２５】
コントローラ４１は、各キャッシュサーバ２が管理するメモリの情報及び各メモリが格納するクエリの情報が記載された管理テーブルを有している。
【００２６】
コントローラ４１は、アクセス要求に応じたクエリをキャッシュサーバ２から受けると、管理テーブルを用いて、クエリの入力元であるキャッシュサーバ２に対応するメモリ４２を特定する。さらに、コントローラ４１は、特定したメモリ４２の中からクエリを格納しているメモリ４２を抽出し、クエリに応じたデータがあるか否かを判定する。クエリに応じたデータが無い場合、コントローラ４１は、キャッシュミスヒットの通知をキャッシュサーバ２へ返す。これに対して、クエリに応じたデータがある場合、コントローラ４１は、キャッシュヒットの通知をキャッシュサーバ２へ返す。加えて、読み出し要求のクエリの場合コントローラ４１は、クエリに応じたデータを抽出したメモリ４２から取得する。そして、コントローラ４１は、取得したデータをクエリの送信元のキャッシュサーバ２へスイッチ３を介して出力する。
【００２７】
また、コントローラ４１は、キャッシュミスヒット後、データの書き込み要求をキャッシュサーバ２から受けると、管理テーブルを用いて、書き込み要求の送信元のキャッシュサーバ２に割り当てられているメモリ４２を特定する。そして、コントローラ４１は、特定したメモリ４２に書き込み要求に応じたデータを書き込む。そして、コントローラ４１は、そのデータに対するクエリのクエリ名とそのデータの格納先のメモリ４２との対応を管理テーブルに登録する。
【００２８】
次に、図２を参照して、本実施例に係る情報通信システムにおいてキャッシュサーバの故障が発生した場合の機能及び動作について詳細に説明する。図２は、実施例１に係る情報通信システムのブロック図である。
【００２９】
本実施例に係る情報通信システムは、図２に示すように、管理部１００、キャッシュノード２０１〜２０３及び外部記憶部３００を有している。管理部１００は、図１のロードバランサ１にあたる。キャッシュノード２０１〜２０３は、図１のキャッシュサーバ２にあたる。以下では、キャッシュノード２０１〜２０３のそれぞれを区別しない場合には、単に「キャッシュノード２００」という。
【００３０】
外部記憶部３００は、制御部３０１及び記憶部４０１〜４１０を有している。制御部３０１は、図１のコントローラ４１にあたる。記憶部４０１〜４１０がメモリ４２にあたる。以下では、記憶部４０１〜４１０のそれぞれを区別しない場合には、単に「記憶部４００」と言う場合がある。ここで、図２では、説明の便宜上、図１のスイッチ３にあたる機能を省略しているが、実際には、キャッシュノード２０１〜２０３と制御部３０１との間にスイッチ３が行うスイッチング機能を実現する処理部がある。また、図２では、キャッシュノード２００の故障時の動作を主に説明するため、図１におけるデータベースサーバ５、クライアントＰＣ６及びネットワーク７は省略している。
【００３１】
管理部１００は、アクセス要求制御部１０１、ノード変換テーブル管理部１０２及び故障検知部１０３を有している。この管理部１００が、「負荷分散制御部」の一例にあたる。
【００３２】
ノード変換テーブル管理部１０２は、例えば、図３に示すようなノード変換テーブル５００を格納している。図３は、ノード変換テーブルの一例を表す図である。ノード変換テーブル５００は、あるキャッシュノード２００で故障が発生し、故障が発生したキャッシュノード２００が管理していた記憶部４００が、他のキャッシュノード２００の管理下へ移行されたことを示すテーブルである。図３に示すように、ノード変換テーブル５００は、ハッシュ後のアクセス先とそれに対応するアクセス変更先が登録されている。ハッシュ後のアクセス先は、アクセス要求によってデータの書き込みや読み出しを行う対象となるキャッシュノード２００の識別子である。具体的には、ハッシュ後のアクセス先は、アクセス要求に含まれるクエリに対して、例えばハッシュ関数などのアルゴリズムを用いて求めるバリューによって表される。より具体的には、バリューは、例えば、クエリ（キー）に対してハッシュ関数を用いてハッシュ値を求め、そのハッシュ値をキャッシュノード２００のノード数で割ることによって求められる。以下では、キャッシュノード２００の識別子を「ノードＩＤ」と呼ぶ場合がある。さらに、図３に示す「Ｓ０」は、キャッシュノード２０１のノードＩＤにあたり、「Ｓ１」は、キャッシュノード２０２のノードＩＤにあたり、「Ｓ２」は、キャッシュノード２０３のノードＩＤにあたる。このノード変換テーブル５００が、「変換テーブル」の一例にあたる。
【００３３】
アクセス要求制御部１０１は、クライアントＰＣ６からのアクセス要求を受信する。そして、アクセス要求制御部１０１は、受信したアクセス要求に含まれるクエリに対して、例えば、ハッシュ関数などのアルゴリズムを用いてバリューを求める。そして、アクセス要求制御部１０１は、ハッシュ後のアクセス先である求めたバリューで表されるノードＩＤを有するキャッシュノード２００に対応するアクセス変更先を表すノードＩＤをノード変換テーブル管理部１０２に格納されているノード変換テーブル５００から取得する。そして、アクセス要求制御部１０１は、取得したノードＩＤに対応するキャッシュノード２００へクエリを出力する。以下では、クエリの送信先のキャッシュノード２００を「アクセス先」という場合がある。
【００３４】
例えば、図３に示すように、ハッシュ後のアクセス先５１０は、キャッシュノード２０１を示す「Ｓ０」である。それに対応するアクセス変更先５１１は、キャッシュノード２０１を示す「Ｓ０」である。すなわち、キャッシュノード２０１においては、ノードの切替えが発生していないといえる。この場合、アクセス要求制御部１０１は、アクセス要求から求めたハッシュ後のアクセス先のバリューが「Ｓ１」であれば、アクセス変更先のバリューとして「Ｓ１」を取得し、「Ｓ１」に対応するキャッシュノード２０１をアクセス要求の出力先とする。また、このようにハッシュ後のアクセス先とアクセス変更先とのバリューが一致している場合、アクセス要求制御部１０１は、アクセス変更先の情報を取得せずに、ハッシュ後のアクセス先に対応するキャッシュノード２０１をクエリの出力先としてもよい。
【００３５】
また、図３に示すように、ハッシュ後のアクセス先５２０は、キャッシュノード２０２を示す「Ｓ１」である。それに対応するアクセス変更先５２１は、キャッシュノード２０３を示す「Ｓ２」である。この場合、アクセス要求制御部１０１は、アクセス要求から求めたハッシュ後のアクセス先のバリューが「Ｓ１」であれば、アクセス変更先のバリューとして「Ｓ２」を取得する。そして、アクセス要求制御部１０１は、受信したアクセス要求を「Ｓ２」に対応するキャッシュノード２０３をクエリの出力先とする。
【００３６】
また、アクセス要求制御部１０１は、アクセス要求に含まれるクエリに応じた応答をキャッシュノード２００から受信する。そして、アクセス要求制御部１０１は、受信した応答を出力する。
【００３７】
また、アクセス要求制御部１０１は、キャッシュノード２００の故障の通知の入力を故障検知部１０３から受ける。そして、アクセス要求制御部１０１は、キャッシュノード２０１〜２０３のうち故障していないキャッシュノード２００の中から仮代替ノードを選択する。例えば、アクセス要求制御部１０１は、故障していないキャッシュノード２０１の中からランダムに仮代替ノードを選択する。そして、アクセス要求制御部１０１は、仮代替ノードになった旨を選択した仮代替ノードへ通知する。その後、アクセス要求制御部１０１は、仮代替ノードによって決定された正式な代替サーバとして決定されたキャッシュノード２００から、後述する管理テーブル更新完了の通知を受信する。そして、アクセス要求制御部１０１は、ノード変換テーブル５００におけるハッシュ後のアクセス先である故障したキャッシュノード２００に対応するアクセス変換先に、代替サーバとなったキャッシュノード２００のノードＩＤを登録する。
【００３８】
故障検知部１０３は、各キャッシュノード２００の動作を監視している。そして、故障検知部１０３は、キャッシュノード２００のいずれかに故障が発生すると、故障の発生を検知する。故障の発生を検知した場合、故障検知部１０３は、故障が発生したキャッシュノード２００の識別情報をアクセス要求制御部１０１へ出力する。
【００３９】
このように、本実施例に係る情報処理システムは、各キャッシュノード２００が管理する記憶部４００を変更した場合に、ノード変換テーブル５００の故障したキャッシュノード２００を表すハッシュ後のアクセス先に対応するアクセス変換先を書き換えておく。これにより、本実施例に係る情報処理システムは、故障したキャッシュノード２００が管理していた記憶部４００が新たに割り当てられたキャッシュノード２００経由で、故障したキャッシュノード２００が管理していた記憶部４００に格納しているデータにアクセスできる。
【００４０】
キャッシュノード２００は、クエリをアクセス要求制御部１０１から受信する。このキャッシュノード２００が、「情報処理部」の一例にあたる。
【００４１】
キャッシュノード２００は、自装置に内蔵された内蔵メモリにクエリで指定されたデータがあるか否かを判定する。データが内蔵メモリにあれば、キャッシュノード２００は、キャッシュヒットの通知をアクセス要求制御部１０１へ通知する。加えて、クエリが読み出し要求であれば、内蔵メモリからデータを取得し管理部１００のアクセス要求制御部１０１へ送信する。これに対して、クエリで指定されたデータが内蔵メモリに無ければ、キャッシュノード２００は、クエリを制御部３０１に対して送信する。その後、キャッシュヒットの通知を制御部３０１から受信した場合、キャッシュノード２００は、キャッシュヒットの通知をアクセス要求制御部１０１へ送信する。加えて、クエリが読み出し要求の場合、キャッシュノード２００は、読み出しのクエリに応じたデータを制御部３０１から受信する。そして、キャッシュノード２００は、受信したデータを管理部１００のアクセス要求制御部１０１へ送信する。これに対して、読み出しのクエリに応じたデータが無い旨、すなわちキャッシュミスヒットの通知を制御部３０１から受信した場合、キャッシュノード２００は、キャッシュミスヒットの通知をアクセス要求制御部１０１へ送信する。その後、キャッシュノード２００は、キャッシュミスヒットとなったデータの書き込み要求を、キャッシュノード２００から受信する。
【００４２】
キャッシュミスヒットとなったデータの書き込み要求を受信すると、キャッシュノード２００は、自装置に内蔵された内蔵メモリに空きがあるか否かを判定する。内蔵メモリに空きが有れば、キャッシュノード２００は、内蔵メモリに指定されたデータを書き込む。これに対して、内蔵メモリに空きがない場合、キャッシュノード２００は、自己が管理する記憶部４００の空きがあるか否かの確認を制御部３０１に対して行う。その後、キャッシュノード２００は、空きがある旨の通知を制御部３０１から受けた場合、書き込み要求を制御部３０１に送信する。これに対して、空きがない旨の通知を制御部３０１から受けた場合、キャッシュノード２００は、自装置の内蔵メモリのデータをＬＲＵ方式などに基づいて消去する。そして、キャッシュノード２００は、内蔵メモリにできた空き領域に書き込み要求で指示されたデータを書き込む。
【００４３】
また、アクセス要求制御部１０１によって仮代替ノードに選択されたキャッシュノード２００は、仮代替ノードとして選択された通知をアクセス要求制御部１０１から受信する。そして、仮代替ノードとなったキャッシュノード２００は、各記憶部４００のアクセス回数を制御部３０１から取得する。さらに、仮代替ノードとなったキャッシュノード２００は、各記憶部４００が割り当てられているキャッシュノード２００の情報を取得する。その後、仮代替ノードとなったキャッシュノード２００は、故障していないキャッシュノードにおけるキャッシュノード２００毎の割り当てられている記憶部４００のアクセス回数の総和を算出する。そして、仮代替ノードとなったキャッシュノード２００は、割り当てられている記憶部４００に対するアクセス回数の総和が最小のキャッシュノード２００を特定する。そして、仮代替ノードとなったキャッシュノード２００は、特定したキャッシュノード２００を正式な代替サーバとして決定する。その後、仮代替ノードとなったキャッシュノード２００は、代替サーバとして決定したキャッシュノード２００の識別情報を制御部３０１へ通知する。ここで、正式な代替サーバは、仮代替ノードが選択されてもよい。
【００４４】
また、仮代替ノードとなったキャッシュノード２００から正式な代替サーバとして選択されたキャッシュノード２００は、後述するノード管理テーブルの更新の通知を制御部３０１から受信する。そして、代替サーバとなったキャッシュノード２００は、ノード管理テーブルの更新の通知を自装置の識別情報と共に管理部１００のアクセス要求制御部１０１へ通知する。
【００４５】
制御部３０１は、入出力部３１１及び管理テーブル管理部３１２を有している。この制御部３０１が、「割当制御部」の一例にあたる。
【００４６】
管理テーブル管理部３１２は、図４に示す管理テーブル６００を記憶している。図４は、管理テーブルの一例を表す図である。図４に示すように、管理テーブル６００には、各ノードＩＤに対応するように、メモリＩＤ、クエリ名、アクセス回数及び時間カウンタが登録されている。メモリＩＤは、各ノードＩＤを有するキャッシュノード２００に割り当てられているメモリの識別情報である。ここで、図４のメモリＩＤである「Ｄ０」〜「Ｄ９」はそれぞれ、図２の記憶部４０１〜４０９に対応しているものとする。クエリ名は、各記憶部４００に格納されているクエリの識別情報である。クエリ名の領域は、各記憶部４００のアドレス空間に対応して区画されている。クエリに対応するデータの記憶部４００内の格納先は、クエリ名の領域内のクエリの格納位置により検出される。図４に示す例では、クエリＡ，Ｂ，Ｃは、メモリＩＤが「Ｄ０」である記憶部４０１の先頭の３ブロックに格納されている。また、クエリＤ，Ｅ，Ｆは、記憶部４０２の２番目、４番目、５番目のブロックにそれぞれ格納されている。クエリ名の空白の領域は、データが書き込まれていないとき又はデータが消去されたときなどを示している。アクセス回数は、各メモリに対する一定時間内でのアクセスの回数である。時間カウンタは、各メモリが割り当てられてからの時間の経過を示すカウンタである。
【００４７】
管理テーブル管理部３１２は、キャッシュノード２０１〜２０３が起動した際に、各キャッシュノード２０１〜２０３に記憶部４００のいずれを割り当てるかを決定する。例えば、管理テーブル管理部３１２は、記憶部４００の数をキャッシュノード２００の数で割り余りを除いた記憶部４００を各キャッシュノード２００に均等に割り当てる等する。そして、管理テーブル管理部３１２は、各キャッシュノード２００に割り当てた記憶部４００の識別情報を管理テーブル６００のメモリＩＤの欄に登録する。また、管理テーブル管理部３１２は、記憶部４００に格納したクエリのクエリ名を格納先の記憶部４００の識別情報であるメモリＩＤと共に入出力部３１１から取得する。そして、管理テーブル管理部３１２は、取得したメモリＩＤに対応する管理テーブル６００のクエリ名の欄に取得したクエリ名を登録する。また、管理テーブル管理部３１２は、アクセス要求に応じたクエリを受信した旨の通知を、そのクエリで指示されたデータを格納している記憶部４００のメモリＩＤとともに入出力部３１１から受信する。そして、管理テーブル管理部３１２は、受信したメモリＩＤに対応する管理テーブル６００のアクセス回数を１つインクリメントする。さらに、管理テーブル３０２は、時間カウンタを用いて時間を計測し所定の時間が経過すると、アクセス回数をリセットして０にする。また、管理テーブル管理部３１２は、時計（不図示）を有しており、時間カウンタには、自己の時計を用いてカウントした時間を随時登録していく。そして、あるクエリが記憶部４００に格納されてから予め決められた期間が経過すると、管理テーブル管理部３１２は、そのクエリに対応するデータを記憶部４００から削除する。さらに、管理テーブル管理部３１２は、クエリ名を管理テーブル６００から削除する。
【００４８】
また、管理テーブル管理部３１２は、仮代替ノードとなったキャッシュノード２００が送信した故障サーバの情報及び代替サーバの情報を、入出力部３１１を介して受信する。そして、管理テーブル管理部３１２は、管理テーブル６００において、故障サーバであるキャッシュノード２００のノードＩＤに割り当てられていたメモリＩＤを代替サーバとなったキャッシュノード２００に割り当てる。そして、管理テーブル管理部３１２は、管理テーブル更新完了の通知を、入出力部３１１を介して代替サーバであるキャッシュノード２００に送信する。ここで、図４及び図５を参照して、管理テーブル管理部３１２による管理テーブル６００の書き換えについて具体的に説明する。図５は、記憶部の割り当て変更後の管理テーブルを表す一例の図である。管理テーブル６００が図４のような状態の場合に、管理テーブル管理部３１２が、故障サーバがキャッシュノード２０２であり、代替サーバがキャッシュノード２０３であるという情報を仮代替ノードから受ける。この場合、管理テーブル管理部３１２は、キャッシュノード２０２を表すサーバＩＤである「Ｓ１」には、メモリＩＤが「Ｄ３」〜「Ｄ５」である記憶部４００が割り当てられていることを確認する。次に、管理テーブル管理部３１２は、管理テーブル６００から故障サーバであるキャッシュノード２００のノードＩＤである「Ｓ１」を削除する。さらに、管理テーブル管理部３１２は、代替サーバであるキャッシュノード２０３のノードＩＤに対応するように、メモリＩＤが「Ｄ３」〜「Ｄ５」である記憶部４００を登録する。これにより、管理テーブル６００は、図５の状態に変わる。図５では、「Ｓ２」のノードＩＤに対して、「Ｄ３」〜「Ｄ８」の６つのメモリＩＤが対応している。すなわち、キャッシュノード２０３に対して、記憶部４０４〜４０９が割り当てられている。
【００４９】
入出力部３１１は、キャッシュノード２００からアクセス要求に応じたクエリを受けると、受信したクエリのクエリ名が、管理テーブル管理部３１２の有する管理テーブル６００に登録されているか否かを判定する。登録されている場合、入出力部３１１は、キャッシュヒットの通知をキャッシュノード２００へ送信する。加えて、クエリが読み出し要求であれば、入出力部３１１は、そのクエリ名に対応するメモリＩＤ及びそのクエリが格納されているブロックを特定する。そして、入出力部３１１は、特定したメモリＩＤを有する記憶部４００の特定したブロックからアクセス要求に対応したデータを取得する。その後、入出力部３１１は、取得したデータをクエリの送信元のキャッシュノード２００へ送信する。
【００５０】
例えば、キャッシュノード２００のいずれにも故障が発生しておらず、管理テーブル６００が図４のような状態である場合で説明する。入出力部３１１は、クエリ名が「Ｍ」の読み出し要求のクエリをキャッシュノード２０２から受信すると、図４の管理テーブル６００において「Ｓ１」のノードＩＤに対してメモリＩＤが「Ｄ３」〜「Ｄ５」の記憶部４００が割り当てられていることを確認する。そして、入出力部３１１は、管理テーブル６００において、メモリＩＤが「Ｄ３」〜「Ｄ５」の記憶部４００に格納されているクエリ名を検索する。そして、入出力部３１１は、クエリ名が「Ｍ」のクエリが、メモリＩＤが「Ｄ４」である記憶部４０５の１番目のブロックに格納されていることを特定する。そして、入出力部３１１は、キャッシュノード２０２へキャッシュヒットを通知する。さらに、入出力部３１１は、記憶部４０５の１番目のブロックからデータを取得し、キャッシュノード２０２へ取得したデータを出力する。
【００５１】
次に、キャッシュノード２０２が故障し、管理テーブル６００が図５のような状態になっている場合で説明する。入出力部３１１は、クエリ名が「Ｍ」のクエリをキャッシュノード２０３から受信すると、図４の管理テーブル６００において「Ｓ２」のノードＩＤに対してメモリＩＤが「Ｄ３」〜「Ｄ８」の記憶部４００が割り当てられていることを確認する。そして、入出力部３１１は、管理テーブル６００において、メモリＩＤが「Ｄ３」〜「Ｄ８」の記憶部４００に格納されているクエリ名を検索する。そして、入出力部３１１は、クエリ名が「Ｍ」のクエリが、メモリＩＤが「Ｄ４」である記憶部４０５の１番目のブロックに格納されていることを特定する。そして、入出力部３１１は、キャッシュノード２０３へキャッシュヒットを通知する。さらに、入出力部３１１は、記憶部４０５の１番目のブロックからデータを取得し、キャッシュノード２０３へ取得したデータを出力する。
【００５２】
このように、本実施例に係る情報処理システムは、故障により各キャッシュノード２００が管理する記憶部４００を変更した場合に、管理テーブル６００のノードＩＤに対応するメモリＩＤを書き換えておく。これにより、本実施例に係る情報処理システムは、故障したキャッシュノード２００が管理していた記憶部４００が新たに割り当てられたキャッシュノード２００経由で、故障したキャッシュノード２００が管理している記憶部４００に格納していたデータにアクセスできる。
【００５３】
図２に戻って説明を続ける。読み出し要求のクエリのクエリ名が、管理テーブル６００に登録されていない場合、入出力部３１１は、アクセス要求の送信元のキャッシュノード２００へキャッシュミスヒットを通知する。
【００５４】
キャッシュミスヒット後に書き込み要求を受信した場合、入出力部３１１は、管理テーブル６００を用いてクエリの送信元のキャッシュノード２００に割り当てられている記憶部４００を特定する。そして、入出力部３１１は、特定した記憶部４００のいずれかに空き容量があるか否かを判定する。
【００５５】
空き容量がある場合、入出力部３１１は、空いている場所にアクセス要求で指定されたデータを書き込む。そして、入出力部３１１は、データを書き込んだ記憶部４００のメモリＩＤ及び書き込んだブロックを管理テーブル管理部３１２へ通知する。ここで、データを書き込む記憶部４００の割り当て方式として次のような方式が考えられる。例えば、入出力部３１１は、管理テーブル６００から各記憶部４００のアクセス回数を取得し、アクセス回数の少ない記憶部４００から順に割り当てていく。これにより、アクセス要求の対象となる記憶部４００のコンフリクトを軽減することができる。他には、例えば、入出力部３１１は、管理テーブル６００から各記憶部４００のアクセス回数を取得し、アクセス回数の多い記憶部４００から順に割り当てていく。これにより、アクセス回数の少ない記憶部４００を低消費電力モードにすることができ、省電力化を図ることができる。
【００５６】
これに対して、空き容量がない場合、入出力部３１１は、空き容量が無い旨を書き込み要求の送信元のキャッシュノード２００へ通知する。
【００５７】
記憶部４０１〜４１０は、例えばＤＩＭＭ（Dual  Line  Memory  Module）といったメモリなどの記憶媒体である。記憶部４０１〜４１０は、入出力部３１１からの制御を受けて、クエリに応じたデータを格納する。
【００５８】
次に、図６を参照して、本実施例に係る情報処理システムにおけるアクセス要求に対する処理の流れを説明する。図６は、実施例１に係る情報処理システムにおけるアクセス要求に対する処理のフローチャートである。
【００５９】
管理部１００のアクセス要求制御部１０１は、アクセス要求を受け付ける。そして、アクセス要求制御部１０１は、受信したアクセス要求に応じたクエリを送信するキャッシュノード２００を決定する（ステップＳ１０１）。そして、アクセス要求制御部１０１は、決定したキャッシュノード２００にクエリを送信する（ステップＳ１０２）。
【００６０】
アクセス要求制御部１０１からクエリを受信したキャッシュノード２００は、内蔵メモリに要求されたクエリに応じたデータがあるか否かを判定する（ステップＳ１０３）。内蔵メモリにデータがある場合（ステップＳ１０３：肯定）、キャッシュノード２００は、ステップＳ１０６へ進む。
【００６１】
これに対して、内蔵メモリにデータが無い場合（ステップＳ１０３：否定）、キャッシュノード２００は、入出力部３１１へクエリを送信する。入出力部３１１は、クエリをキャッシュノード２００から受信する。そして、入出力部３１１は、管理テーブル管理部３１２が有する管理テーブルを用いて、クエリに対応するデータの格納場所を求める（ステップＳ１０４）。そして、入出力部３１１は、クエリに対応するデータが記憶部４００に格納されているか否かを判定する（ステップＳ１０５）。
【００６２】
データが格納されている場合（ステップＳ１０５：肯定）、入出力部３１１は、キャッシュヒットの通知をクエリの送信元のキャッシュノード２００へ返す。そして、キャッシュノード２００は、キャッシュヒットの通知をアクセス要求制御部１０１へ送信する（ステップＳ１０６）。
【００６３】
これに対して、データが格納されていない場合（ステップＳ１０５：否定）、入出力部３１１は、キャッシュミスヒットの通知をクエリの送信元のキャッシュノード２００へ返す。そして、キャッシュノード２００は、キャッシュミスヒットの通知をアクセス要求制御部１０１へ送信する（ステップＳ１０７）。
【００６４】
次に、図７を参照して、アクセス要求受信時のキャッシュノードの決定の処理について詳細に説明する。図７は、アクセス要求受信時のキャッシュノードの決定処理のフローチャートである。図７のフローチャートは、図６におけるステップＳ１０１にあたる。
【００６５】
アクセス要求制御部１０１は、受信したアクセス要求のクエリに対してハッシュ関数を用いてハッシュ値を求め、そのハッシュ値をキャッシュノード２００のノード数で割るなどしてバリューを求める。そして、アクセス要求制御部１０１は、求めたバリューに対応するキャッシュノード２００をハッシュ後のアクセス先のキャッシュノード２００を決定する（ステップＳ２０１）。
【００６６】
次に、アクセス要求制御部１０１は、ノード変換テーブルを用いてハッシュ後のアクセス先として特定したキャッシュノード２００に対応するアクセス変更先を確認する（ステップＳ２０２）。
【００６７】
そして、アクセス要求制御部１０１は、ハッシュ後のアクセス先とアクセス変更先とが異なっているか否かにより、アクセス先が変更されているか否かを判定する（ステップＳ２０３）。
【００６８】
アクセス先が変更されていない場合（ステップＳ２０３：否定）、アクセス要求制御部１０１は、ステップＳ２０５に進む。
【００６９】
これに対して、アクセス先が変更されている場合（ステップＳ２０３：肯定）、アクセス要求制御部１０１は、アクセス先のキャッシュノード２００を変更する（ステップＳ２０４）。
【００７０】
そして、アクセス要求制御部１０１は、アクセス先のキャッシュノード２００にクエリを送信する（ステップＳ２０５）。
【００７１】
次に、図８を参照して、本実施例に係る情報処理システムにおけるキャッシュミスヒット後の書き込み要求に対する処理の流れを説明する。図８は、実施例１に係る情報処理システムにおけるにおけるキャッシュミスヒット後の書き込み要求に対する処理のフローチャートである。
【００７２】
アクセス要求制御部１０１は、キャッシュノード２００に書き込み要求のクエリを送信する（ステップＳ３０１）。
【００７３】
書き込み要求のクエリを受信したキャッシュノード２００は、内蔵メモリに空き容量があるか否かを判定する（ステップＳ３０２）。内蔵メモリに空き容量がある場合（ステップＳ３０２：肯定）、キャッシュノード２００は、空き容量がある内蔵メモリへデータを書き込む（ステップＳ３０３）。
【００７４】
これに対して、内蔵メモリに空き容量がない場合（ステップＳ３０２：否定）、キャッシュノード２００は、入出力部３１１に書き込み要求のクエリを送信する。クエリを受信した入出力部３１１は、クエリの送信元のキャッシュノード２００に割り当てた記憶部４００に空き容量があるか否かを判定する（ステップＳ３０４）。記憶部４００に空き容量がない場合（ステップＳ３０４：否定）、入出力部３１１は、空き容量が無い旨をアクセス要求の送信元のキャッシュノード２００へ通知する。通知を受けたキャッシュノード２００は、ＬＲＵ方式を用いて内蔵メモリのデータを消去する。その後、キャッシュノード２００は、内蔵メモリにおけるデータ消去することで空いた場所にデータを書き込む（ステップＳ３０５）。
【００７５】
一方、記憶部４００に空き容量がある場合（ステップＳ３０４：肯定）、入出力部３１１は、記憶部４００の空いている領域からデータを書き込む領域を決定し、データを書き込む（ステップＳ３０６）。
【００７６】
その後、入出力部３１１は、管理テーブルにクエリ名を書き込む（ステップＳ３０７）。
【００７７】
次に、図９を参照して、ノード故障によるノード切替時の処理の流れについて説明する。図９は、ノード故障によるノード切替時の処理のフローチャートである。図９では、フローチャートの上部に示された各部によって、各ステップにおける動作が行われることを表している。
【００７８】
故障検知部１０３は、サーバの故障を検知する（ステップＳ４０１）。
【００７９】
アクセス要求制御部１０１は、サーバの故障の通知を故障検知部１０３から受ける。そして、アクセス要求制御部１０１は、仮代替ノードを決定する（ステップＳ４０２）。次に、アクセス要求制御部１０１は、仮代替ノードになった旨を仮代替ノードとして選択したキャッシュノード２００へ通知する（ステップＳ４０３）。
【００８０】
仮代替ノードとして選択されたキャッシュノード２００は、仮代替ノードになった旨の通知を受信する（ステップＳ４０４）。そして、仮代替ノードは、正式な代替ノードを決定する（ステップＳ４０５）。次に、仮代替ノードは、代替ノードとして決定したキャッシュノード２００の情報を入出力部３１１を介して管理テーブル管理部３１２へ送信する。
【００８１】
管理テーブル管理部３１２は、代替ノードとして決定されたキャッシュノード２００の情報を仮代替ノードから受信する。そして、管理テーブル管理部３１２は、故障したノードに割り当てられていた記憶部４００を代替ノードへ割り当てるように管理テーブルを更新する（ステップＳ４０６）。その後、管理テーブル管理部３１２は、代替ノードとなったキャッシュノード２００に対して更新完了の通知を行う（ステップＳ４０７）。
【００８２】
代替ノードとなったキャッシュノード２００は、更新完了の通知を管理テーブル管理部３１２から受信する（ステップＳ４０８）。次に、代替ノードは、代替ノードとなった自装置の情報をアクセス要求制御部１０１へ通知する（ステップＳ４０９）。
【００８３】
アクセス要求制御部１０１は、代替ノードの情報を代替ノードとなったキャッシュノード２００から受信する（ステップＳ４１０）。その後、ノード変換テーブル管理部１０２は、アクセス要求制御部１０１から故障したノード及び代替ノードの情報を取得する。そして、ノード変換テーブル管理部１０２は、故障したノードに対応するアクセス変更先が代替ノードとなるようにノード変換テーブルを更新する（ステップＳ４１１）。
【００８４】
次に、図１０を参照して代替ノードの決定処理の流れをより詳細に説明する。図１０は、代替ノードの決定処理のフローチャートである。図１０では、代替ノード決定処理について詳細に説明するため、図９における代替サーバ決定に直接関らない処理については省略している。
【００８５】
アクセス要求制御部１０１は、故障していないキャッシュノード２００から１つのキャッシュノード２００を仮代替ノードとしてランダムに選択する（ステップＳ５０１）。
【００８６】
仮代替ノードは、管理テーブル管理部３１２が保持する管理テーブルから各記憶部４００のアクセス回数を取得する。そして、管理テーブル管理部３１２は、キャッシュノード２００毎に割り当てられている記憶部４００のアクセス回数の総和を算出する（ステップＳ５０２）。
【００８７】
仮代替ノードは、アクセス回数の総和が最小のキャッシュノード２００を正式な代替ノードとして決定する（ステップＳ５０３）。
【００８８】
仮代替ノードにより正式な代替ノードとして決定されたキャッシュノード２００は、代替ノードのノードＩＤ、すなわち自装置のノードＩＤを管理部１００へ通知する（ステップＳ５０４）。
【００８９】
（ハードウェア構成）
図１１は、情報処理システムのハードウェア構成を表す図である。
【００９０】
図１１に示すように、ロードバランサ１は、Optical  Network  Unit（ＯＮＵ）８を介してネットワーク７と接続されている。
【００９１】
ロードバランサ１は、Network  Interface  Card（ＮＩＣ）１１、Central  Processing  Unit（ＣＰＵ）１２、Memory（ＭＥＭ）１３、Table（ＴＢＬ）１４及びPeripheral  Component  Interconnect  Express  Interface（ＰＣＩｅＩ／Ｆ）１５を有している。
【００９２】
ＴＢＬ１４は、ノード変換テーブルの一例にあたる。そして、ＣＰＵ１２、ＭＥＭ１３及びＴＢＬ１４によって、図２に例示したノード変換テーブル管理部１０２の機能を実現する。
【００９３】
ＮＩＣ１１は、外部の装置と通信を行うためのネットワークインタフェースである。ＣＰＵ１２は、ＮＩＣ１１を介してクライアントＰＣ６からのアクセス要求を取得する。また、ＣＰＵ１２は、ＮＩＣ１１を介してキャッシュサーバ２と通信を行う。
【００９４】
また、ＮＩＣ１１、ＣＰＵ１２、ＭＥＭ１３及びＰＣＩｅＩ／Ｆ１５によって故障検知部１０３及びアクセス要求制御部１０１の機能を実現する。具体的には、ＰＣＩｅ  Ｉ／Ｆ１５に接続されたハードディスク（不図示）に故障検知部１０３及びアクセス要求制御部１０１等による処理を実現するプログラムなどの各種プログラムが格納されている。そして、ＣＰＵ１２は、ハードディスクからそれらのプログラムを読み出し、上述の各機能を実現するプロセスをＭＥＭ１３に展開するなどして、それらのプログラムを実行する。
【００９５】
キャッシュサーバ２は、ＮＩＣ２１、ＣＰＵ２２、ＭＥＭ２３及びＰＣＩｅＩ／Ｆ２４を有している。
【００９６】
ＮＩＣ２１は、ロードバランサ１と通信を行うためのネットワークインタフェースである。ＣＰＵ２２は、ＮＩＣ２１を介してロードバランサ１からクエリを受信する。
【００９７】
ＰＣＩｅＩ／Ｆ２４は、外部メモリ格納装置４と通信を行うためのインタフェースである。
【００９８】
ＮＩＣ２１、ＣＰＵ２２、ＭＥＭ２３及びＰＣＩｅＩ／Ｆ２４によって図２に例示したキャッシュノード２０１〜２０３の機能を実現する。具体的には、ＰＣＩｅ  Ｉ／Ｆ２４に接続されたハードディスク（不図示）にキャッシュノード２００〜２０３による処理を実現するプログラムなどの各種プログラムが格納されている。そして、ＣＰＵ２２は、ハードディスクからそれらのプログラムを読み出し、上述の各機能を実現するプロセスをＭＥＭ２３に展開するなどして、それらのプログラムを実行する。
【００９９】
また、図１１に示した破線は、ＰＣＩ  Ｅｘｐｒｅｓｓ規格の信号を伝送するケーブルまたは信号線を示している。なお、破線は、他の規格の信号を伝達するケーブルまたは信号線が使用されてもよい。
【０１００】
スイッチ（ＳＷ）３は、各キャッシュサーバ２を、ＰＣＩ  Ｅｘｐｒｅｓｓ規格のケーブル又は信号線を介して外部メモリ格納装置４に接続するために、各キャッシュサーバ２に共通に設けられている。例えば、キャッシュサーバ２と外部メモリ格納装置４とは、Multi  Root  Input  Output  Virtualization（ＭＲ−ＩＯＶ）技術を用いて、ＳＷ３を介して接続されている。そして、各キャッシュサーバ２から出力されるデータが外部メモリ格納装置４に伝達され、外部メモリ格納装置４から出力されるデータがキャッシュサーバ２のいずれかに伝達される。
【０１０１】
外部メモリ格納装置４は、Controller（ＣＴＲＬ）４０、ＭＥＭ４２及びＴＢＬ４３を有している。
【０１０２】
例えば、ＣＴＲＬ４０は、ＡＳＩＣなどのロジックＬＳＩにより設計されている。管理テーブルＴＢＬ４３は、Random  Access  Memory（ＲＡＭ）などのメモリチップ内に設けられてもよく、ＣＴＲＬ４３の内部のレジスタやメモリ内に設けられてもよい。なお、ＣＴＲＬ４０は、Read  Only  Memory（ＲＯＭ）及びＲＡＭを内蔵するマイクロコントローラやＣＰＵであってもよい。
【０１０３】
ＴＢＬ４３は、管理テーブルの一例にあたる。そして、ＣＴＲＬ４０及びＴＢＬ４３によって、図２に例示した入出力部３１１及びノード変換テーブル管理部１０２の機能を実現する。
【０１０４】
以上に説明したように、本実施例に係る情報処理システムは、ロードバランサはノード変換テーブルを用いてデータの格納先のノードを特定し、外部メモリのコントローラは、管理テーブルを用いてデータの格納先のメモリを特定する。これにより、ノードが故障し、管理されていた外部メモリが他のノードに切り替わった場合にも、故障したノードが管理していた外部メモリへアクセスすることができる。したがって、本実施例に係る情報処理システムは、ノード数が変更された場合におけるデータベースへのアクセスの上昇を抑えることができる。
【実施例２】
【０１０５】
図１２は、実施例２に係る情報処理システムのブロック図である。本実施例に係る情報処理装置は、アクセス先テーブルを有することが実施例１と異なるものである。そこで、以下では、アクセス先テーブルを用いた管理部１００の機能について主に説明する。また、図１２において図１と同じ符号を有する各部は、特に説明の無い限り同じ機能を有するものとする。
【０１０６】
本実施例に係る情報処理システムは、実施例１の情報処理システムに加えてアクセス先テーブル１０４をさらに有する。
【０１０７】
アクセス先テーブル１０４は、クエリのキーに対応させてアクセス先となるキャッシュノード２００の識別情報が登録されている。
【０１０８】
アクセス要求制御部１０１は、アクセス要求を受けると、アクセス先テーブル１０４を参照し、受信したアクセス要求に含まれるクエリのキーに対応するキャッシュノード２００があるか否かを判定する。キーに対応するキャッシュノード２００がある場合、アクセス要求制御部１０１は、そのキャッシュノード２００をハッシュ後のアクセス先とする。一方、キーに対応するキャッシュノード２００がない場合、アクセス要求制御部１０１は、キーに対してハッシュ関数を用いる等してバリューを求め、ハッシュ後のアクセス先となるキャッシュノード２００を特定する。
【０１０９】
さらに、アクセス要求制御部１０１は、データを記憶部に新しく格納した場合、新しく格納したクエリのキーとそれに対応するサーバの情報をハッシュテーブルに登録する。
【０１１０】
その後、アクセス要求制御部１０１は、実施例１と同様に、ハッシュ後のアクセス先に対応するアクセス変更先を取得し、取得したアクセス変更先にクエリを送信する。
【０１１１】
ここで、故障が発生しデータが格納されている記憶部４００が割り当てられたキャッシュノードが変更された場合について考える。本実施例では、アクセス先テーブル１０４を用いることで、クエリから直接アクセス先を特定することができる。そこで、アクセス要求制御部１０１は、アクセス先テーブル１０４において、切替えられた記憶部４００に格納されたデータを要求するクエリに対応するアクセス先を変更してもよい。これにより、アクセス先テーブル１０４に登録されているクエリに関しては、アクセス要求制御部１０１は、ノード変換テーブルの参照を行わなくてもよくなり、より迅速にアクセス先の決定ができる。
【０１１２】
このように、本実施例に係る情報処理システムは、アクセス先テーブルを用いて受信したアクセス要求のアクセス先となるキャッシュノードを取得できる。これにより、情報処理システムは、ハッシュ関数などを用いた計算を行う必要が無くなり、容易にクエリの送信先であるアクセス先を特定することができる。すなわち、情報処理システムにおける処理負荷を軽減することができる。
【０１１３】
また、以上の説明では、内蔵メモリに格納したデータに対する対処については触れていないが、それについては以下のような対処を行うことができる。
【０１１４】
例えば、キャッシュノード２００は、内蔵メモリ上に格納されたデータを定期的に記憶部４００に書き出しておき、バックアップを作成する。これにより、内蔵メモリ上に格納されたデータも記憶部４００に格納されるので、管理部１００は、キャッシュノード２００が故障しても、故障したノードの内蔵メモリ上にあったデータにアクセスすることができる。
【０１１５】
また、例えば、キャッシュノード２００の内蔵メモリを使用しないとしてもよい。
【符号の説明】
【０１１６】
１  ロードバランサ
２  キャッシュサーバ
３  スイッチ
４  外部メモリ格納装置
５  データベースサーバ
６  クライアントＰＣ
７  ネットワーク
４１  コントローラ
４２  メモリ
１００  管理部
１０１  アクセス要求制御部
１０２  ノード変換テーブル管理部
１０３  故障検知部
１０４  アクセス先テーブル
２０１〜２０３  キャッシュノード
３００  外部記憶部
３１１  入出力部
３１２  管理テーブル管理部
４０１〜４１０  記憶部
【図１】
2014095946.tif 000003
【図２】
2014095946.tif 000004
【図３】
2014095946.tif 000005
【図４】
2014095946.tif 000006
【図５】
2014095946.tif 000007
【図６】
2014095946.tif 000008
【図７】
2014095946.tif 000009
【図８】
2014095946.tif 000010
【図９】
2014095946.tif 000011
【図１０】
2014095946.tif 000012
【図１１】
2014095946.tif 000013
【図１２】
2014095946.tif 000014