(57)【要約】【課題】相互に通信可能な情報処理装置を含むシステムにおいて、ネットワーク管理維持の負担を軽減する技術を提供する。【解決手段】分散ハッシュ情報に基づくハッシュ空間に対応付けられたいずれかのハッシュ値を有する情報処理装置は、ハッシュ空間に対応付けられたハッシュ値の大きさ順に従って、各グループに属する第１装置同士についてのハッシュ空間でのハッシュ値を用いた第１分散ハッシュ情報に基づいて他の情報処理装置から送信された、目的とする情報処理装置へのアクセス情報を取得する取得部と、第１装置が属するグループに属する第２装置についてのハッシュ空間のハッシュ値を用いた第２分散ハッシュ情報を格納する格納部と、第２分散ハッシュ情報から、アクセス情報から生成したハッシュ値に対応する第２装置を検索する検索部と、検索された第２装置へアクセス情報を送信する送信部とを備えることにより、上記課題の解決を図る。【選択図】図１
2014130535.tif 000002
【特許請求の範囲】
【請求項１】
通信ネットワークを介して相互に通信可能に接続され、分散ハッシュ法によりハッシュ値を提供する分散ハッシュ情報に基づくハッシュ空間に対応付けられたいずれかのハッシュ値を有する情報処理装置であって、
前記ハッシュ空間に対応付けられた該ハッシュ値の大きさの順に従って、複数のグループに分けられた各前記グループに属するいずれかの前記情報処理装置である第１装置同士についての前記ハッシュ空間における前記ハッシュ値を用いた分散ハッシュ情報を示す第１分散ハッシュ情報に基づいて他の前記情報処理装置から送信された、目的とする前記情報処理装置へのアクセスを要求するアクセス情報を取得する取得部と、
前記第１装置が属するグループに属する前記情報処理装置である第２装置についての前記ハッシュ空間の前記ハッシュ値を用いた分散ハッシュ情報を示す第２分散ハッシュ情報を格納する格納部と、
前記第２分散ハッシュ情報から、前記アクセス情報から生成したハッシュ値に対応する前記第２装置を検索する検索部と、
検索された前記第２装置へ前記アクセス情報を送信する送信部と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記情報処理装置が前記第１装置である場合、前記格納部は、さらに、前記第１分散ハッシュ情報を格納し、
前記検索部は、前記取得されたアクセス情報が当該情報処理装置以外の前記第１装置が処理すべきアクセス情報である場合、前記第１分散ハッシュ情報から、前記アクセス情報から生成したハッシュ値に対応する前記第１装置を検索し、
前記送信部は、検索された前記第１装置へ前記アクセス情報を送信する
ことを特徴とすることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記情報処理装置は、さらに、
いずれの前記グループにも属していない情報処理装置から、該第１装置が属する第１グループへの参加依頼が通知された場合、前記第１グループに属する前記第２装置の数と、所定の閾値とを比較し、該比較結果に応じていずれかの前記第２装置を選択し、該第１グループに対応するハッシュ空間の先頭から、選択した前記第２装置が有するハッシュ値までの範囲に含まれるハッシュ値を有する前記第２装置を前記第１グループから分離させ、該分離させた第２装置により形成されるグループについての前記第２分散ハッシュ情報を生成し、前記選択した第２装置を前記第１分散ハッシュ情報に追加する分離制御部
を備えることを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記情報処理装置は、さらに、
前記情報処理装置が、前記第１装置が前記通信ネットワークより脱退した場合において、脱退した前記第１装置が属する前記グループに属する第２装置のうち前記脱退した第１装置の次に大きいまたは小さいハッシュ値を有する場合、他の前記情報処理装置に対して前記第２装置が前記第１装置が脱退したグループにおける第１装置である旨を通知すると共に、前記第２装置を前記第１分散ハッシュ情報に追加し前記他の情報処理装置または情報処理端末へ送信する脱退処理部
を備えることを特徴とする請求項１〜３のうちいずれか１項に記載の情報処理装置。
【請求項５】
通信ネットワークを介して他の情報処理装置と相互に通信可能に接続され、分散ハッシュ法によりハッシュ値を提供する分散ハッシュ情報に基づくハッシュ空間に対応付けられたいずれかのハッシュ値を有する情報処理装置を含む情報処理システムへアクセスする情報処理端末であって、
前記ハッシュ空間に対応付けられた該ハッシュ値の大きさの順に従って、複数のグループに分けられた各前記グループに属するいずれかの情報処理装置である代表装置同士についての前記ハッシュ空間における前記ハッシュ値を用いた分散ハッシュ情報を示す代表装置分散ハッシュ情報を格納する格納部と、
目的とする情報処理装置へのアクセスを要求するアクセス情報を取得する取得部と、
前記代表装置分散ハッシュ情報から、前記アクセス情報から生成したハッシュ値に対応する前記代表装置を検索する検索部と、
検索された前記代表装置へ前記アクセス情報を送信する送信部と、
を備えることを特徴とする情報処理端末。
【請求項６】
通信ネットワークを介して相互に通信可能に接続され、分散ハッシュ法によりハッシュ値を提供する分散ハッシュ情報に基づくハッシュ空間に対応付けられたいずれかのハッシュ値を有する情報処理装置に、
前記ハッシュ空間に対応付けられた該ハッシュ値の大きさの順に従って、複数のグループに分けられた各前記グループに属するいずれかの前記情報処理装置である第１装置同士についての前記ハッシュ空間における前記ハッシュ値を用いた分散ハッシュ情報を示す第１分散ハッシュ情報に基づいて他の前記情報処理装置から送信された、目的とする前記情報処理装置へのアクセスを要求するアクセス情報を取得し、
前記第１装置が属するグループに属する前記情報処理装置である第２装置についての前記ハッシュ空間の前記ハッシュ値を用いた分散ハッシュ情報を示す第２分散ハッシュ情報から、前記アクセス情報から生成したハッシュ値に対応する前記第２装置を検索し、
検索された前記第２装置へ前記アクセス情報を送信する
処理を実行させることを特徴とする情報検索プログラム。
【請求項７】
通信ネットワークを介して他の情報処理装置と相互に通信可能に接続され、分散ハッシュ法によりハッシュ値を提供する分散ハッシュ情報に基づくハッシュ空間に対応付けられたいずれかのハッシュ値を有する情報処理装置を含む情報処理システムへアクセスする情報処理端末が、
目的とする情報処理装置へのアクセスを要求するアクセス情報を取得し、
前記ハッシュ空間に対応付けられた該ハッシュ値の大きさの順に従って、複数のグループに分けられた各前記グループに属するいずれかの情報処理装置である代表装置同士についての前記ハッシュ空間における前記ハッシュ値を用いた分散ハッシュ情報を示す代表装置分散ハッシュ情報から、前記アクセス情報から生成したハッシュ値に対応する前記代表装置を検索し、
検索された前記代表装置へ前記アクセス情報を送信する
ことを特徴とする情報検索プログラム。
【請求項８】
通信ネットワークを介して相互に通信可能に接続され、分散ハッシュ法によりハッシュ値を提供する分散ハッシュ情報に基づくハッシュ空間に対応付けられたいずれかのハッシュ値を有する情報処理装置を含む情報処理システムのいずれかの情報処理装置へアクセスする情報検索方法であって、
前記複数の情報処理装置のうちいずれかの情報処理装置は、
前記ハッシュ空間に対応付けられた該ハッシュ値の大きさの順に従って、複数のグループに分けられた各前記グループに属するいずれかの前記情報処理装置である第１装置同士についての前記ハッシュ空間における前記ハッシュ値を用いた分散ハッシュ情報を示す第１分散ハッシュ情報に基づいて他の前記情報処理装置から送信された、目的とする前記情報処理装置へのアクセスを要求するアクセス情報を取得し、
前記第１装置が属するグループに属する前記情報処理装置である第２装置についての前記ハッシュ空間の前記ハッシュ値を用いた分散ハッシュ情報を示す第２分散ハッシュ情報から、前記アクセス情報から生成したハッシュ値に対応する前記第２装置を検索し、
検索された前記第２装置へ前記アクセス情報を送信する、
ことを特徴とする情報検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置の情報検索技術に関する。
【背景技術】
【０００２】
コンピュータが分散化されたシステム（分散システム）では、通信先のサーバの宛先情報（例えば、IP（Internet Protocol）アドレス等）が必要になる。分散システムにおける宛先管理の方法の種類として、例えば、中央管理型及びP2P（Peer to Peer）型の方法がある。中央管理型の管理方法では、クライアントは、一旦、宛先を管理する専用サーバにアクセスして、専用サーバから目的サーバの宛先を取得する。一方、P2P型の管理方法では、分散システム内のサーバそれぞれが、他サーバへの宛先情報を管理する（全てのサーバが管理サーバの機能を持つ）。
【０００３】
P2P型の分散システムでは、サーバ間の関係を疎にするため、データをどのサーバに配置するかは計算により決定する方がよい。これには分散ハッシュテーブル（DHT：Distributed Hash Table）を用いることが多い。分散ハッシュテーブルは、所定のハッシュ関数によって決まるハッシュ値の集合であるハッシュ空間にノードを写像し、それによってオーバーレイ・ネットワークを構築する。DHTを用いて宛先となるサーバを決定する方法では、データに対しキーを割り当て、そのキーをハッシュすることによってどのサーバにデータを割り当てるかを決定することができる。DHTを用いれば、確率的にサーバに対するデータの分布が均一になることが期待できるため、負荷分散が期待できる。特に、コンシステント・ハッシュ（CH）というハッシュ法は、ネットワーク上のサーバの追加・削除に対して強い柔軟性を持つため、分散データストレージシステムまたは分散キャッシュシステム等の分野にも応用されている。DHTを用いた分散システムに関する技術として、例えば、次の技術がある。
【０００４】
第１の技術として、複数のノード装置に情報を送信する際に、情報を送信するノード装置等の負担を軽減した情報通信システムがある。情報通信システムは、通信経路を介して互いに接続された複数のノード装置の参加により形成される。情報通信システムにおいて、あるノード装置Ｘは、複数のノード装置が所定の規則（例えば、ＤＨＴ）に従って複数（４つ）のグループに分けられた各グループに含まれる代表のノード装置を決定する。ノード装置Ｘは、決定されたノード装置Ａ，Ｂ，Ｃに向けて主情報を送信する。他のノード装置から受信した主情報が自ノード装置を含むグループ宛の場合には、ノード装置Ｘは、自ノード装置が属するグループの代表のノード装置に向けて、同様に受信した主情報を送信する。
【０００５】
第２の技術として、次の情報検索方法がある。情報検索方法は、サービスの提供元となる端末装置が提供する情報の所在、内容等を示す情報や当該情報を利用するための情報であるサービス情報を保持し、所定の条件に基づいてグループに分けられた通信装置を具備する情報検索システムに適用される。情報検索方法では、属性情報取得工程、第１の検索工程、要求転送工程、第２の検索工程を含む。属性情報取得工程は、サービス情報の検索を要求する情報検索要求に含まれるサービス情報を識別するための属性情報を取得する。第１の検索工程は、属性情報取得工程で取得した属性情報に基づいて、目的のサービス情報を保持する通信装置が属するグループを検索する。要求転送工程は、第１の検索工程の検索結果であるグループの代表通信装置に前記情報検索要求を転送する。第２の検索工程は、自身が代表通信装置である場合に、要求転送工程で転送された情報検索要求を受け取り、自グループ内で目的のサービス情報を検索する。
【０００６】
オンライン証券取引のようなシステムでは、膨大なリクエストを迅速に処理することが要求されている。更に、昨今ではこうしたオンライン取引のリクエスト量の成長の予測が困難であり、システムは柔軟に処理許容量を拡張できる仕組みが望まれる。この要望を満たすため、動的拡張可能な分散処理システムが望まれる。
【０００７】
中央管理型分散システムは、構造が非常に単純で、２回の通信で目的のサーバに到達できるが、同時に管理サーバが単一障害点となり、異常が発生した場合に、全システムに影響を与えることになる。また、サーバ数が非常に多くなると、問い合わせの通信がボトルネックになりやすいというデメリットを持つ。
【０００８】
P2P型分散システムは、サーバの一部がダウンしても全体としては停止しないというメリットがあり、可用性が求められる大規模分散システムで採用する場合が多い。また、DHT型のオーバーレイ・ネットワークを構築している場合は負荷分散も期待できる。つまり、前述した中央管理型のデメリットを解消することができる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００７−０５３６６２号公報
【特許文献２】特開２００７−１５６７００号公報
【非特許文献】
【００１０】
【非特許文献１】Luiz R. Monnerat  他１名“D1HT: A Distributed One Hop Hash Table Extended Version”、［online］、［平成２４年１０月１０日検索］、インターネット＜URL：http://www.cos.ufrj.br/uploadfiles/1164201892.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【００１１】
P2P型ではクライアントおよびサーバそれぞれが、システムに参加している全てのサーバの宛先情報を知っていることが理想となる。その場合、どのクライアント／サーバからでも目的のサーバに即座に通信できる。
【００１２】
しかしなから、システムに参加するサーバ数が非常に多くなると、宛先情報量、コネクション資源が膨大になり、高性能なハードが要求される。また、サーバの死活監視や、サーバ構成変動時に宛先情報を同期するための通信トラフィックが増大し、通信負荷が大きくなる。
【００１３】
本発明は、一側面として、相互に通信可能な情報処理装置を含むシステムにおいて、ネットワーク管理維持の負担を軽減する技術を提供する。
【課題を解決するための手段】
【００１４】
本発明の一側面にかかる、情報処理装置は、通信ネットワークを介して相互に通信可能に接続され、分散ハッシュ法によりハッシュ値を提供する分散ハッシュ情報に基づくハッシュ空間に対応付けられたいずれかのハッシュ値を有する。情報処理装置は、取得部、格納部、検索部、送信部を含む。取得部は、第１分散ハッシュ情報に基づいて他の情報処理装置から送信された、目的とする情報処理装置へのアクセスを要求するアクセス情報を取得する。第１分散ハッシュ情報は、第１装置同士についてのハッシュ空間におけるハッシュ値を用いた分散ハッシュ情報を示す。第１装置は、ハッシュ空間に対応付けられたハッシュ値の大きさの順に従って、複数のグループに分けられた各グループに属するいずれかの情報処理装置である。格納部は、第２分散ハッシュ情報を格納する。第２分散ハッシュ情報は、第１装置が属するグループに属する情報処理装置である第２装置についてのハッシュ空間のハッシュ値を用いた分散ハッシュ情報を示す。検索部は、第２分散ハッシュ情報から、アクセス情報から生成したハッシュ値に対応する第２装置を検索する。送信部は、検索された第２装置へアクセス情報を送信する。
【００１５】
本発明の一側面にかかる、情報処理端末は、通信ネットワークを介して他の情報処理装置と相互に通信可能に接続され、分散ハッシュ法によりハッシュ値を提供する分散ハッシュ情報に基づくハッシュ空間に対応付けられたいずれかのハッシュ値を有する情報処理装置を含む情報処理システムへアクセスする。情報処理端末は、格納部、検索部、送信部を含む。格納部は、代表装置分散ハッシュ情報を格納する。代表装置分散ハッシュ情報は、代表装置同士についてのハッシュ空間における前記ハッシュ値を用いた分散ハッシュ情報を示す。代表装置は、ハッシュ空間に対応付けられたハッシュ値の大きさの順に従って、複数のグループに分けられた各グループに属するいずれかの情報処理装置である。取得部は、目的とする情報処理装置へのアクセスを要求するアクセス情報を取得する。検索部は、代表装置分散ハッシュ情報から、アクセス情報から生成したハッシュ値に対応する代表装置を検索する。送信部は、検索された代表装置へアクセス情報を送信する。
【発明の効果】
【００１６】
本発明の一側面によれば、相互に通信可能な情報処理装置を含むシステムにおいて、ネットワーク管理維持の負担を軽減することができる。
【図面の簡単な説明】
【００１７】
【図１】本実施形態における情報処理システムのブロック図を示す。
【図２】本実施形態におけるスプリット・ハッシュを説明するための図である。
【図３】本実施形態における親サーバと子サーバのCH上の関係、及びそれらのネットワーク接続について説明するための図である。
【図４】本実施形態におけるオーバレイ・ネットワークでのルーティングを説明するための図である。
【図５】本実施形態における分散システムのネットワーク構成例を示す。
【図６】本実施形態における親サーバの構成例を示す。
【図７】本実施形態における子サーバの構成例を示す。
【図８】本実施形態におけるクライアントの構成例を示す。
【図９】本実施形態におけるクライアント・サーバ間またはサーバ間の通信で使用する通信情報の構造例を示す。
【図１０】本実施形態におけるサーバ管理情報の一例を示す。
【図１１】本実施形態における、（Ａ）親CHまたは子CHを構築するサーバ情報構造体及び（Ｂ）サーバ情報構造体の一例を示す。
【図１２】本実施形態におけるCH表のデータ構造の一例を示す。
【図１３】本実施形態における分散システムへのデータアクセスのフローを示す。
【図１４】本実施形態におけるCH表の検索フローを示す。
【図１５】本実施形態におけるスプリット・ハッシュの動的分割を説明するための図である。
【図１６】本実施形態におけるスプリット・ハッシュに対して、追加されるサーバが実行する処理フローを示す。
【図１７】図１６の参加依頼処理（Ｓ３６）の詳細フローを示す。
【図１８】本実施形態におけるスプリット・ハッシュでのCH表のレプリケーションを説明するための図である。
【図１９】本実施形態におけるサーバの脱退時でのスプリット・ハッシュに参加している各サーバが実行する処理フローを示す。
【図２０】本実施形態の一実施例に係るコンピュータのハードウェア環境の構成ブロック図である。
【発明を実施するための形態】
【００１８】
目的サーバへの到達速度と宛先情報の保守コストは以下のようなトレードオフの関係にあり、どのように最適化するかがポイントとなっている。
宛先情報量  ：  少←  →多
到達速度    ：  遅←  →速
維持コスト  ：  小←  →大
【００１９】
DHTによるオーバーレイ・ネットワークの構築アルゴリズムには、例えば、Chord 、Pastry、CAN がある。Chordは、１つのサーバで保持する宛先情報を削減する代わりに目的地に到達するのに何回かのホップ（サーバ間を探索しながら移動すること）を行うルーティングアルゴリズムである。Chordはこの分野でも効率の良いアルゴリズムであり、システムの規模に関わらず、O（log2 N)（Nはサーバ数）のオーダーのホップ回数で目的地に到達する。
【００２０】
しかし、例えばオンライン証券取引のWebフロントシステムのように、１回の通信（数百マイクロ秒）でも削減してレイテンシ（応答速度）を速くすることが競争力に繋がるシステムでは、Chordでもデータ到達までの速度やその安定性は十分とは言えない。また、ストリーミング処理のように、常に最も遅い場合に処理を合わせる必要があるシステムでは、Chordでもデータ到達までの速度やその安定性は十分とは言えない。
【００２１】
具体的には、Chordはサーバ台数に寄らず高確率で２ホップ以上必要となる上、１００台構成ならば最大５ホップの通信が必要となり、１ミリ秒以上の通信性能差が発生する場合がある。
【００２２】
一方、高速化と安定を追求し、ホップ回数を極限まで減らす手法が研究されている。ＤＨＴの探索を高速化する方法として、Ｄ１ＨＴ等の１ホップDHTと呼ばれる手法があり、ホップを通常時1回だけしか発生させないアルゴリズムである。しかしながら、このような方法では、全サーバが他サーバへの経路を記憶する必要があるため、システムに参加するサーバ数が非常に多くなると、宛先情報量、コネクション資源が膨大になり、高性能なハードが要求される。また、サーバの死活監視や、サーバ構成変動時に宛先情報を同期するための通信トラフィックが増大し、通信負荷が大きくなる。つまり、よりシステム維持負荷が低く、かつ応答性能の良いオーバレイ・ネットワークの構築が競争力のあるシステムの課題となっている。
【００２３】
本実施形態では、コンシステント・ハッシュと同等の高可用性と柔軟な構成変更の特性を持ち、かつ、ネットワーク維持の負荷が低く応答性能が速いオーバレイ・ネットワークの構築法を提案する。
【００２４】
図１は、本実施形態における情報処理システムのブロック図を示す。情報検索システム１は、情報処理端末２、情報処理装置３、通信ネットワーク４を含む。
【００２５】
情報処理装置３は、通信ネットワーク４を介して相互に通信可能に接続され、分散ハッシュ法によりハッシュ値を提供する分散ハッシュ情報に基づくハッシュ空間に対応付けられたいずれかのハッシュ値を有する。分散ハッシュ情報の一例としては、分散ハッシュテーブルが挙げられる。情報処理装置３は、取得部３−１、格納部３−２、検索部３−３、送信部３−４、分離制御部３−５、脱退処理部３−６を含む。
【００２６】
取得部３−１は、第１分散ハッシュ情報に基づいて他の情報処理装置３から送信された、目的とする情報処理装置３へのアクセスを要求するアクセス情報を取得する。取得部３−１の一例として、通信制御部４１が挙げられる。第１分散ハッシュ情報は、第１装置同士についてのハッシュ空間におけるハッシュ値を用いた分散ハッシュ情報を示す。第１分散ハッシュ情報の一例としては、親ハッシュ表４９が挙げられる。第１装置は、ハッシュ空間に対応付けられたハッシュ値の大きさの順に従って、複数のグループに分けられた各グループに属するいずれかの情報処理装置３である。第１装置の一例としては、親サーバ１２が挙げられる。
【００２７】
格納部３−２は、第２分散ハッシュ情報を格納する。第２分散ハッシュ情報は、第１装置が属するグループに属する情報処理装置である第２装置についてのハッシュ空間のハッシュ値を用いた分散ハッシュ情報を示す。納部３−２の一例としては、記憶部４８が挙げられる。第２分散ハッシュ情報の一例として、子ＣＨ表５０が挙げられる。
【００２８】
検索部３−３は、第２分散ハッシュ情報から、アクセス情報から生成したハッシュ値に対応する第２装置を検索する。検索部３−３の一例として、子CH宛先管理部４６が挙げられる。第２装置の一例としては、子サーバ１３が挙げられる。
【００２９】
送信部３−４は、検索された第２装置へアクセス情報を送信する。送信部３−４の一例としては、通信制御部４１が挙げられる。
このように構成することにより、同一ハッシュ空間を階層化することができるので、ネットワーク管理維持の負担を軽減することができる。
【００３０】
前記情報処理装置が前記第１装置である場合、格納部３−２は、さらに、第１分散ハッシュ情報を格納する。検索部３−３は、取得されたアクセス情報が当該情報処理装置以外の第１装置が処理すべきアクセス情報である場合、第１分散ハッシュ情報から、アクセス情報から生成したハッシュ値に対応する第１装置を検索する。送信部３−５は、検索された第１装置へアクセス情報を送信する。
【００３１】
情報処理装置３は、さらに、分離制御部３−５を含む。分離制御部３−５は、いずれのグループにも属していない情報処理装置３から、第１装置が属する第１グループへの参加依頼が通知された場合、第１グループに属する第２装置の数と、所定の閾値とを比較する。分離制御部３−５は、比較結果に応じていずれかの第２装置を選択する。分離制御部３−５は、第１グループに対応するハッシュ空間の先頭から、選択した第２装置が有するハッシュ値までの範囲に含まれるハッシュ値を有する第２装置を第１グループから分離させる。分離制御部３−５は、分離させた第２装置により形成されるグループについての第２分散ハッシュ情報を生成し、選択した第２装置を第１分散ハッシュ情報に追加する。分離制御部３−５の一例として、構成管理部４４が挙げられる。
【００３２】
情報処理装置３は、さらに、脱退処理部３−６を含む。情報処理装置３が、第１装置が通信ネットワーク４より脱退した場合において、脱退した第１装置が属するグループに属する第２装置のうち脱退した第１装置の次に大きいまたは小さいハッシュ値を有する場合、脱退処理部３−６は、次の処理を行う。すなわち、脱退処理部３−６は、他の情報処理装置３に対して第２装置が第１装置が脱退したグループにおける第１装置である旨を通知すると共に、第２装置を第１分散ハッシュ情報に追加し他の情報処理装置３または情報処理端末２へ送信する。脱退処理部３−６の一例として、構成管理部４４が挙げられる。
【００３３】
このように構成することにより、同一ハッシュ空間を階層化することにより、ネットワーク構成変更の影響をその階層のネットワークに局所化することができので、ネットワーク管理維持の負担を軽減することができる。
【００３４】
情報処理端末２は、通信ネットワーク４を介して他の情報処理装置３と相互に通信可能に接続され、分散ハッシュ情報に基づくハッシュ空間に対応付けられたいずれかのハッシュ値を有する情報処理装置を含む情報処理システムへアクセスする。情報処理端末２は、格納部２−１、取得部２−２、検索部２−３、送信部２−４を含む。格納部２−１は、代表装置分散ハッシュ情報を格納する。代表装置分散ハッシュ情報（第１分散ハッシュ情報）は、代表装置（第１装置）同士についての前記ハッシュ空間における前記ハッシュ値を用いた分散ハッシュ情報を示す。代表装置（第１装置）は、ハッシュ空間に対応付けられた該ハッシュ値の大きさの順に従って、複数のグループに分けられた各前記グループに属するいずれかの情報処理装置３である。格納部２−１の一例として、記憶部５６が挙げられる。
【００３５】
取得部２−２は、目的とする情報処理装置へのアクセスを要求するアクセス情報を取得する。取得部２−２の一例として、ライブラリ５２が挙げられる。
【００３６】
検索部２−３は、代表装置分散ハッシュ情報から、アクセス情報から生成したハッシュ値に対応する代表装置を検索する。検索部２−３の一例として、親CH宛先管理部５４が挙げられる。
【００３７】
送信部２−４は、検索された代表装置へアクセス情報を送信する。送信部２−４の一例として、通信制御部５５が挙げられる。
【００３８】
このように構成することにより、同一ハッシュ空間を階層化することができるので、ネットワーク管理維持の負担を軽減することができる。
【００３９】
本実施形態では、まず、コンシステント・ハッシュ（CH）を用いたオーバレイ・ネットワークにおいて、サーバ数に応じてハッシュ空間を複数に分割する。以下では、分割されたハッシュ空間を“エリア”と呼ぶことにする。次に、エリア毎に代表となる親サーバを自動的に選出し、エリア内の各サーバへのアクセスは親サーバを経由して行うように制御する。これにより、１つのハッシュ空間を階層構造で扱うことができる。この分割・階層化されたハッシュ空間をスプリット・ハッシュと呼ぶことにする。
【００４０】
図２は、本実施形態におけるスプリット・ハッシュを説明するための図である。符号１５は、物理的なネットワーク１５を示す。符号１１は、円環で表されたハッシュ空間を示し、具体的には、円環全体は、コンシステント・ハッシュ空間を表す。円環上にある小さい円それぞれがサーバを表す。
【００４１】
まずは、物理的なネットワーク１５上に、論理的なハッシュ空間１１が形成され、ハッシュ空間１１中の小さい円で示すように、各サーバがハッシュ空間にマッピングされる。更に、ハッシュ空間にマッピングされたサーバの数に応じて、ハッシュ空間１１は複数のエリア１４に分割される。
【００４２】
図２では、それぞれのエリア１４で、黒丸で示す親サーバ１２が１つずつ選出された状態を示している。また、各エリア１４において、白丸で示すサーバを、子サーバ１３という。親サーバ１２は、分割されたエリア１４の“終端”（例えばハッシュ空間が数値で表されるならば、区間内のもっとも大きい値）であるサーバであり、“前”の親サーバが担当するハッシュ値より後から、自身のハッシュ値までのハッシュ空間を担当する。これはCHにおけるサーバのハッシュ空間担当範囲の決定方法と同様である。
【００４３】
各エリア１４内で許容できるサーバ数は予め定められており、その許容できるサーバ数を超えて、エリア１４で示すハッシュ空間にサーバが追加されようとすると、後述するように、そのエリア１４は分割される。これにより、エリア１４内のサーバ数が閾値を超過した場合に、過密となったそのエリアをアルゴリズム的に分割することができる。その結果、ネットワーク構成を動的に変更することができ、変更の影響を局所化することができる。
【００４４】
図３は、本実施形態における親サーバと子サーバのCH上の関係、及びそれらのネットワーク接続について説明するための図である。符号２１で示す円環が全体のCH、符号２２で示す円環が親サーバ１２同士で形成されるハッシュ空間（親CH）を示す。親CH２２は、全体のCH２１のサブセットであり、ハッシュ空間に写像されている位置は全体のCH２１と同じである。
【００４５】
親サーバ１２間では、親CH２１により、独自のネットワークを構成する。また、各エリア１４では、エリア１４内に含まれるサーバ間で独自のネットワークを構成する。各エリア１４でのハッシュ空間を子CH２３と呼ぶ。
【００４６】
親サーバ１２同士は、相互に死活監視・構成監視を行う。そのために、符号２４で示すように、親サーバ１２同士でフルメッシュのネットワークが構築される。また、符号２５で示すように、各エリア１４の子CH２３内についてもフルメッシュのネットワークが構築され、エリア１４内のサーバ同士は、相互に、死活監視と構成情報監視を行う。なお、フルメッシュは例であり、死活監視・構成情報の同期コストが少ない方法を用いてもよい。
【００４７】
図４は、本実施形態におけるオーバレイ・ネットワークでのルーティングを説明するための図である。クライアント３１は親CH２２についての情報（親CH情報）を保持しており、アプリケーションプログラムよりデータの操作が依頼されると、親CH情報に基づいてアクセスするサーバを決定する。図４では、全体のCHで見るとキーのハッシュ値はサーバBとなるが、クライアント３１からは親サーバ１２しか見えない。そのため、クライアント３１は、一旦親サーバとしてのサーバAにアクセスし、リクエストを通知する。サーバAは、子CHについての情報（子CH情報）とネットワーク経路についての情報（ネットワーク経路情報）を保持している。そのため、サーバAは、子CH情報とネットワーク経路情報を用いて、サーバBに、クライアント３１からのリクエストを転送する。
【００４８】
本実施形態によれば、オーバレイ・ネットワークは、フルメッシュのネットワークと比べると、動的な構成変更によりネットワーク維持の負荷を“１／エリア分割数”に軽減できるので、ネットワークの負荷を分散することができる。
【００４９】
また、本実施形態のオーバレイ・ネットワークは、分散ハッシュの階層化により“O（エリア分割の階層数）”の転送回数で目的サーバに到達するため、高速な応答を実現できる。
【００５０】
以下に本実施形態の実施例について説明する。
図５は、本実施形態における分散システムのネットワーク構成例を示す。分散システム３０は、クライアント３１、通信ネットワーク３２、複数のサーバ３３を含む。クライアント３１及び複数のサーバ３３は、通信ネットワーク３２を介して接続されている。
【００５１】
クライアント３１は、親ＣＨについてのオーバレイ・ネットワークに接続する情報処理端末を示す。複数のサーバ３３は、CH空間を構成するサーバ群であり、１以上の親サーバ１２と、１以上の子サーバ１３を含む。親サーバ１２は、オーバレイ・ネットワークのゲートウェイと言えるサーバである。子サーバ１３は、ネットワーク３２の末端サーバである。
【００５２】
図６は、本実施形態における親サーバの構成例を示す。親サーバ１２は、通信制御部４１、データ処理部４２、構成管理部４４、記憶部４８を含む。記憶部４８には、親CH表４９、及び子CH表５０、サーバ管理情報６５等が格納される。通信制御部４１は、ネットワーク３２を介して接続されるサーバ間の通信及びクライアント３１との通信を制御する。データ処理部４２は、その親サーバ１２が担当するデータが格納されたデータ格納部４３を含んでおり、その格納されたデータを処理する。
【００５３】
構成管理部４４は、その親サーバ１２と同じ階層の親ＣＨの構成とその親サーバが属するエリアに含まれる子サーバ１２の子CHの構成を管理する。構成管理部４４は、親ＣＨ宛先管理部４５、子ＣＨ宛先管理部４６、死活監視部４７を含む。親ＣＨ宛先管理部４５は、記憶部４８に格納された親CH表を用いて、その親サーバ１２と同じ階層の親CHについての情報を管理する。子ＣＨ宛先管理部４６は、記憶部４８に格納された子CH表を用いて、その親サーバ１２が担当するエリア１４の子CHについての情報を管理する。死活監視部４７は、他の親サーバ１２および担当するエリア１４内の子サーバ１３の死活監視を行う。すなわち、死活監視部４７は、ネットワークへのサーバの追加、ネットワークからのサーバの脱退を監視する。
【００５４】
図７は、本実施形態における子サーバの構成例を示す。子サーバ１３は、親サーバ１２から親ＣＨ宛先管理部４５と親ＣＨ表４９を除いたものである。子サーバ１３は、通信制御部４１、データ処理部４２、構成管理部４４、記憶部４８を含む。記憶部４８には、子ＣＨ表５０、サーバ管理情報６５等が格納される。通信制御部４１は、ネットワーク３２を介して接続される、その子サーバが属するエリア１４の、親サーバ１２との通信及び子サーバ１３との通信を制御する。データ処理部４２は、その子サーバ１３が担当するデータが格納されたデータ格納部４３を含んでおり、その格納されたデータを処理する。
【００５５】
構成管理部４４は、その子サーバ１３が属するエリア１４についての子ＣＨの構成を管理する。構成管理部４４は、子ＣＨ宛先管理部４６、死活監視部４７を含む。死活監視部４７は、その子サーバ１３が属するエリア内の親サーバ１２及びその子サーバ１３が属するエリア内の子サーバ１３の死活監視を行う。すなわち、死活監視部４７は、ネットワークへのサーバの追加、ネットワークからのサーバの脱退を監視する。
【００５６】
図８は、本実施形態におけるクライアントの構成例を示す。クライアント３１は、アプリケーションプログラム５１、ライブラリ５２、宛先制御部５３、通信制御部５５、記憶部５６を含む。アプリケーションプログラム（以下、「アプリケーション」という。）５１は、ユーザの指示に基づいて、データの操作をサーバに依頼する。ライブラリ５２は、アプリケーションから本実施形態における分散システム３０にアクセスするためのアプリケーションプログラムインタフェース（ＡＰＩ）を提供する。記憶部５６には、親CH表４９、ユーザデータ等が格納される。
【００５７】
宛先制御部５３は、各サーバの宛先情報を管理する。宛先制御部５３は、親ＣＨ宛先管理部５４を含む。親ＣＨ宛先管理部５４は、記憶部５６に格納された親CH表４９を用いて、親サーバの宛先を決定する。通信制御部５５は、ネットワーク３２を介して接続されるサーバとの通信を制御する。
【００５８】
図９は、本実施形態におけるクライアント・サーバ間またはサーバ間の通信で使用する通信情報の構造例を示す。図９（Ａ）に示す通信情報６１は、通信ヘッダ部６２、データ部６３を含む。通信ヘッダ部６２は、「通信種別」６２−１、「データ長」６２−２、通信プロトコルで用いる情報を含む。「データ長」６２−２は、データ部６３のデータ長（データサイズ）を示す。
【００５９】
「通信種別」６２−１は、通信の種別を識別するものであり、通信種別によってデータ部６３の構成が変化する。例えば、リクエストの内容が、サーバに対するデータの更新を示す場合、「通信種別」６２−１には、「データ更新要求」が設定される。この場合、図９（Ｂ）に示すように、データ部６３は、CH用のデータの「キー値長」６３−１、「キー値」６３−２、「データ長」６３−３、「実データ」６３−４という可変長構造体となる。
【００６０】
また、リクエストの内容がCH表５０を操作するためのデータの送信を示す場合は、「通信種別」６２−１には、「CH表送信」が設定される。この場合、図９（Ｃ）に示すように、データ部６３は、「総宛先情報数」６３−５、「サーバ識別子長」６３−６、「サーバ識別子」６３−７、「宛先情報」６３−８を含む。「総宛先情報数」６３−５には、宛先情報の総数が設定される。「サーバ識別子長」６３−６には、サーバ識別子のサイズが設定される。「サーバ識別子」６３−７には、サーバを識別する情報が設定される。「宛先情報」６３−８には、送信先の情報が設定される。「サーバ識別子長」６３−６、「サーバ識別子」６−７、「宛先情報」６３−８は１セットであり、総宛先情報数（ｎ組）含まれる。
【００６１】
図１０は、本実施形態におけるサーバ管理情報の一例を示す。サーバ管理情報６５は、各サーバが有する自身についての情報であり、そのサーバの記憶部４８に格納されている。サーバ管理情報６５は、「ハッシュ値」６６、「親サーバ判定フラグ」６７、「親サーバ識別子」６８を含む。「ハッシュ値」６６には、各サーバに割り当てられているハッシュ値が格納される。「親サーバ判定フラグ」６７には、当該サーバが親サーバか否かを示す情報が格納されている。「親サーバ識別子」６８には、当該サーバが親サーバでない場合（子サーバである場合）、当該サーバの属するエリアの親サーバを識別する識別情報が格納される。
【００６２】
図１１（Ａ）は、本実施形態における、親CHまたは子CHを構築するサーバ情報構造体を示す。図１１（Ｂ）は、サーバ情報構造体の一例を示す。サーバ情報構造体により構築される親ＣＨについてのサーバ情報は、クライアント３１の記憶部５６及び親サーバ１２の記憶部４８に格納されている。また、サーバ情報構造体により構築される子ＣＨについてのサーバ情報は、子サーバ１３の記憶部４８に格納されている。
【００６３】
サーバ情報構造体７１は、「サーバ識別子」７２、「ハッシュ値」７３、「宛先情報」７４、「アドレス情報１」７５、「アドレス情報２」７６を含むデータ構造体である。
【００６４】
「サーバ識別子」７２は、システム全体で一意となるサーバの識別情報であり、CHを構成する場合のキーとなる。サーバ識別子は、ハッシュ計算ができるデータであれば、文字列でも数値でもよい。
【００６５】
「ハッシュ値」７３は、「サーバ識別子」７２からハッシュ関数を通じて生成される値であり、０から始まる数値で、最大値はシステム規模に応じて決定される。「宛先情報」７４は、サーバ間の通信用情報であり、ＩＰアドレスやホスト名等、通信プロトコルを解決できる情報である。
【００６６】
「アドレス情報１」７５及び「アドレス情報２」７６は、オペレーティングシステム（OS）のアドレス情報であって、他のサーバ情報へのポインタであり、後述するハッシュ空間検索用のデータ構造で使用される。
【００６７】
図１２は、本実施形態におけるCH表のデータ構造の一例を示す。CH表のデータ構造は、親CH表４９及び子CH表５０で共通した構造である。CH表のデータ構造は、親CH宛先管理部４５、子CH宛先管理部４６、親CH宛先管理部５４において、サーバの検索に用いられる。図１２では、一例として、２分探索木で表現しているが、平衡２分探索木や、その他の検索用データ構造でもよい。ここでは実現方法の一例として、２分探索木を使った場合の検索方法について述べる。
【００６８】
２分探索木における節及び葉はそれぞれ、図９（Ａ）に示したサーバ情報構造体６１である。ここでは「ハッシュ値」６３について、分かりやすいように整数値にして表しているが、現実的にはハッシュ関数に依存した形式となる。「アドレス情報１」７５及び「アドレス情報２」７６は、２分探索木において子となるサーバ情報構造体の先頭アドレスを示す。「アドレス情報１」７５は、該当節よりも小さいハッシュ値、「アドレス情報２」７６は該当節よりも大きいハッシュ値のサーバ情報構造体へのリンクとなる。子となるサーバ情報が無い場合は、「アドレス情報１」７５または「アドレス情報２」７６に、“NULL”が格納される。
【００６９】
図１３は、本実施形態における分散システムへのデータアクセスのフローを示す。図１３では、クライアント３１からのデータアクセス処理の例を説明する。
【００７０】
クライアント３１において、アプリケーション５１からデータ操作（挿入・参照・更新・削除等）がライブラリ５２に含まれるＡＰＩを用いて、宛先制御部５３へ依頼される（Ｓ１）。ここでは、ライブラリ５２は、ハッシュ関数を用いて、アプリケーション５１から渡されたサーバ識別子からハッシュ値を取得し、そのハッシュ値を親CH宛先管理部５４へ渡す。
【００７１】
親CH宛先管理部５４は、記憶部５６に格納された親CH表４９を参照し、ライブラリ５２より与えられたキー値に基づいて、親CH表４９から親サーバ１２を検索する。親CH宛先管理部５４は、親CH表４９から親サーバ１２の宛先情報（ＩＰ（Internet Protocol）アドレス、ホスト名等）を取得する（Ｓ２）。
【００７２】
ライブラリ５２は、受信したデータ操作依頼に基づいて通信種別を決定し、決定した通信種別に基づいて、図９（Ａ）に示す通信情報６１を生成する。ライブラリ５２は、通信制御部５５を介して、その取得した宛先情報により示される親サーバ１２に対して、生成した通信情報６１を送信する（Ｓ３）。
【００７３】
親サーバ１２において、通信制御部４１は、クライアント３１からの通信情報６１を受信する（Ｓ４）。すると、親CH宛先管理部４５は、その通信情報の「キー値」６３−２に基づいて、記憶部４８に格納された子ＣＨ表５０から、子サーバ１３を検索する（Ｓ５）。
【００７４】
その検索の結果、そのリクエストは、当該リクエストを受信したサーバが担当すべきものであると判定された場合（Ｓ６で「Ｙｅｓ」）、データ格納部４３は、データ操作処理を行い（Ｓ８）、クライアント３１に処理後の応答結果を返却する（Ｓ９）。クライアント３１は、その応答結果を受信する（Ｓ１０）。
【００７５】
その検索の結果、そのリクエストは、当該リクエストを受信したサーバが担当すべきものでないと判定された場合（Ｓ６で「Ｎｏ」）、構成管理部４４は、次の処理を行う。すなわち、構成管理部４４は、子CH表５０でヒットした宛先の子サーバ（同一エリア内の子サーバ）１３に、受信したリクエストメッセージを転送する（Ｓ７）。もし、そのリクエストメッセージが、当該親サーバ１２が属するエリアのデータでない場合、構成管理部４４は、親CH表４９を検索し、検索された親サーバ１２にそのリクエストメッセージを転送する。その転送されたリクエストメッセージを受信した親サーバ１２は、Ｓ４以降の処理を実行する。
【００７６】
図１４は、本実施形態におけるCH表の検索フローを示す。このフローは、図１３のＳ２、Ｓ５の詳細フローであり、親CH表４９又は子CH表５０を用いて、目的のサーバを検索する場合に適用される。ここでは、あるデータのキーが、親CH宛先管理部４５、子CH宛先管理部４６、または親CH宛先管理部５４に渡され、そのデータがどのサーバにあるかを図１２のCH表から導出する流れを説明する。以下では、親CH宛先管理部４５、子CH宛先管理部４６、または親CH宛先管理部５４を宛先管理部と称する。
【００７７】
まず、宛先管理部は、本フローで使用するパラメタ“result”を“”（NULL）で初期化する（Ｓ１１）。“result”は、検索の結果、返却する宛先情報を表すパラメタである。
【００７８】
次に、宛先管理部は、特定のハッシュ関数を使用してキーをハッシュ値に変換し、パラメタ“hash_A”に格納する（Ｓ１２）。ハッシュ関数にはSHA-1やMD5等を用いてもよい。宛先管理部は、そのパラメタ“hash_A”に格納されたハッシュ値と、CH表のルートにある「Server-8」のサーバ情報構造体のハッシュ値（hash_B）とを比較する（Ｓ１３）。以降、hash_Aの値によってどのようにフローが遷移するか、例を用いて示す。
【００７９】
（i）hash_A= 5の場合
図１２において、現在参照しているルートノードのサーバ情報構造体のハッシュ値hash_Bは8であるため、「hash_A＜hash_B（=8）」となる（Ｓ１３）。この場合、宛先管理部は、一旦、返却値resultに、現在参照しているサーバ情報構造体の宛先情報“10.10.100.108”を設定する（Ｓ１６）。宛先管理部は、hash_Aをより小さいhash_Bと比較するため、現在参照しているサーバ情報構造体のアドレス情報１によって示されるサーバ情報構造体を参照する（Ｓ１７で「Ｎｏ」、Ｓ１８）。
【００８０】
すると、参照先である「Server-3」のサーバ情報構造体が、現在参照しているサーバ情報構造体となるので、宛先管理部は、hash_B=3を設定する。ここでは、「hash_A＞hash_B（=3）」であるため（Ｓ１３）、宛先管理部は、現在参照しているサーバ情報構造体のアドレス情報２によって示されるサーバ情報構造体を参照する（Ｓ１９で「Ｎｏ」、Ｓ２０）。
【００８１】
すると、参照先である「Server-6」のサーバ情報構造体が、現在参照しているサーバ情報構造体となるので、宛先管理部は、hash_B=6を設定する。ここでは、「hash_A＜hash_B（=6）」であるため（Ｓ１３）、宛先管理部は、resultに現在参照しているサーバ情報構造体の宛先情報“10.10.100.106”を設定する（Ｓ１６）。それから、宛先管理部は、現在参照しているサーバ情報構造体のアドレス情報１によって示されるサーバ情報構造体を参照する（Ｓ１７で「Ｎｏ」、Ｓ１８）。
【００８２】
すると参照先である「Server-4」のサーバ情報構造体が、現在参照しているサーバ情報構造体となるので、宛先管理部は、hash_B=4を設定する。ここでは、「hash_A＞ hash_B（=4）」であり（Ｓ１３）、かつ、現在参照しているサーバ情報構造体より大きな子（サーバ情報構造体）がない（アドレス情報２がNULL）のため（Ｓ１９で「Ｙｅｓ」）、宛先管理部は、次の処理を行う。すなわち、宛先管理部は、result=“10.10.100.106”を返却して終了する（Ｓ２１で「Ｎｏ」、Ｓ２４）。
【００８３】
（ii）ハッシュ値が3の場合（ハッシュ値が合致する場合）
図１２において、現在参照しているルートノードのサーバ情報構造体のハッシュ値hash_Bは8であるため、「hash_A＜hash_B（=8）」となる（Ｓ１３）。この場合、宛先管理部は、一旦、返却値resultに、現在参照しているサーバ情報構造体の宛先情報“10.10.100.108”を設定する（Ｓ１６）。宛先管理部は、hash_Aをより小さいhash_Bと比較するため、現在参照しているサーバ情報構造体のアドレス情報１によって示されるサーバ情報構造体を参照する（Ｓ１７で「Ｎｏ」、Ｓ１８）。
【００８４】
参照先である「Server-3」のサーバ情報構造体が、現在参照しているサーバ情報構造体であるので、宛先管理部は、hash_B=3を設定する。ここでは、「hash_A＝ hash_B（=3）」であるため（Ｓ１３）、目的のサーバが確定する。この場合、宛先管理部は、resultに、現在参照しているサーバ情報構造体の宛先情報“10.10.100.103”を設定して返却する（Ｓ１４、Ｓ１５）。
【００８５】
（iii）hash_A=15の場合（環状のハッシュ空間を一周する場合）
図１２において、現在参照しているルートノードのサーバ情報構造体のハッシュ値は8であるため、「hash_A＞hash_B（=8）」となる（Ｓ１３）。この場合、宛先管理部は、現在参照しているサーバ情報構造体のアドレス情報２によって示されるサーバ情報構造体を参照する（Ｓ１９で「Ｎｏ」、Ｓ２０）。
【００８６】
すると、参照先である「Server-10」のサーバ情報構造体が、現在参照しているサーバ情報構造体となるので、宛先管理部は、hash_B=10を設定する。ここでは、「hash_A＞hash_B（=10）」であるため（Ｓ１３）、宛先管理部は、現在参照しているサーバ情報構造体のアドレス情報2によって示されるサーバ情報構造体を参照する（Ｓ１９で「Ｎｏ」、Ｓ２０）。
【００８７】
すると参照先である「Server-14」のサーバ情報構造体が、現在参照しているサーバ情報構造体となるので、宛先管理部は、hash_B=14を設定する。ここでは、「hash_A＞hash_B（=14）」であり（Ｓ１３）、かつ現在参照しているサーバ情報構造体のアドレス情報２がNULLであり（Ｓ１９で「Ｙｅｓ」）、result=“”（NULL）である（Ｓ２１で「Ｙｅｓ」）。この場合、宛先管理部は、このキーは環状ハッシュ空間を一周したと判定し、hash_Aに「０」を設定し（Ｓ２２）、再びルートのサーバ情報構造体から検索する（Ｓ２３）。
【００８８】
すると、参照先である「Server-8」のサーバ情報構造体が、現在参照しているサーバ情報構造体となるので、宛先管理部は、hash_B=8を設定する。ここでは、「hash_A＜hash_B（=8）」であるため（Ｓ１３）、宛先管理部は、resultに、現在参照しているサーバ情報構造体の宛先情報“10.10.100.108”を設定する（Ｓ１６）。宛先管理部は、現在参照しているサーバ情報構造体のアドレス情報１によって示されるサーバ情報構造体を参照する（Ｓ１７で「Ｎｏ」、Ｓ１８）。
【００８９】
すると、参照先である「Server-3」のサーバ情報構造体が、現在参照しているサーバ情報構造体となるので、宛先管理部は、hash_B=3を設定する。ここでは、「hash_A＜hash_B（=3）」であるため（Ｓ１３）、宛先管理部は、resultに、現在参照しているサーバ情報構造体の宛先情報“10.10.100.103”を設定する（Ｓ１６）。宛先管理部は、現在参照しているサーバ情報構造体のアドレス情報１によって示されるサーバ情報構造体を参照する（Ｓ１７で「Ｎｏ」、Ｓ１８）。
【００９０】
すると、参照先である「Server-1」のサーバ情報構造体が、現在参照しているサーバ情報構造体となるので、宛先管理部は、hash_B=1を設定する。ここでは、「hash_A＜ hash_B（=1）」であるため（Ｓ１３）、宛先管理部は、resultに、現在参照しているサーバ情報構造体の宛先情報“10.10.100.101”を設定する（Ｓ１６）。現在参照しているサーバ情報構造体のアドレス情報１がNULLであるため（Ｓ１７で「Ｙｅｓ」）、宛先管理部は、result=“10.10.100.101”を返却する（Ｓ１５）。
【００９１】
なお、ここではCH表の検索フローのみ説明しているが、CH表に対する単純なサーバ（節）の追加・削除は２分木の方式に従うため、ここでは割愛する。
次に、ハッシュ空間の動的変化の実施例について説明する。
【００９２】
図１５は、本実施形態におけるスプリット・ハッシュの動的分割を説明するための図である。スプリット・ハッシュは「エリア内サーバ数上限」というシステム共通のパラメタを持ち、１エリアに含まれるサーバ数がこの値を超過した時、そのエリアを分割する。図１５において、エリア内のサーバ数の上限（閾値）は１０である。
【００９３】
図１５（Ａ）は、エリア内にサーバ数の上限である１０台のサーバが配置されている状態を示す（この例ではまだ１度も分割が発生していない）。ここに新たなサーバを追加し、サーバ数が１１になった場合、ハッシュ値順に見て、エリア内のサーバ数が半分となる位置または半分＋１となる位置にあるサーバ（エリアにおける「中間サーバ」と称する。）を境界としてエリア分割が行われる。分割後の結果を図１５（Ｂ）に示す。
【００９４】
図１５（Ｂ）は、ハッシュ空間の起点であるサーバAと、そこから数えて、エリア内のサーバ数が半分となる6台目のサーバであるサーバBに分割の境界を設けて、エリア１とエリア２に分割した状態を示す。そして、エリア１、エリア２のそれぞれ終端であるサーバBとCは親サーバとなる。
【００９５】
図１５（Ｃ）、図１５（Ｄ）では、エリア２のサーバ数が増え、エリア２内のサーバ数の上限に達した後、更にサーバが追加された状態を示す。この場合、エリア２が２つに分割されるが、エリア１の範囲には影響しない。
【００９６】
図１６は、本実施形態におけるスプリット・ハッシュに対して、追加されるサーバが実行する処理フローを示す。サーバ死活監視部４７は、ネットワーク上の他のサーバの動作状況を監視することにより、ネットワークワークへのサーバの参加を監視する（Ｓ３１）。サーバの追加は、CH表が最初に構築される場合と、既に存在するCH表にサーバが追加される場合で異なる。
【００９７】
最初にCHを構築する場合（ネットワークの新規作成の場合）にはまだハッシュ空間の分割がないため、サーバは、管理者から入力された情報に基づいて、エリア内サーバ数の上限を設定する（Ｓ３２）。サーバは、自身のサーバ識別子をハッシュ値に変換して、サーバ管理情報６５に設定する。また、サーバは、CH表５０を作成し（Ｓ３３）、自身のハッシュ値、サーバ識別子、宛先情報、アドレス情報１，２を登録する。また、サーバは、エリア内サーバ数をインクリメントする（すなわち、現在のエリア内のサーバ数＝１に設定する）（Ｓ３４）。
【００９８】
ＣＨに後から追加されるサーバ（ネットワークへの２台目以降のサーバの追加の場合）は、既にＣＨに参加しているいずれかのサーバ（ゲートウェイ機能を有する）と通信し（Ｓ３５）、ＣＨへの参加依頼を行う（Ｓ３６）。Ｓ３６の処理については図１７にて説明する。追加されるサーバは、参加処理依頼したサーバから、応答情報を受信する（Ｓ３７）。応答情報は、例えば、図９（Ａ）−図９（Ｃ）で説明したフォーマットで送信される。
【００９９】
その応答情報に基づいて、追加されるサーバは、自身が子サーバであると判定した場合（Ｓ３８で「Ｎｏ」）、Ｓ４２の処理を行う。このとき、追加されるサーバは、応答結果を用いて、サーバ管理情報の「親サーバ判定フラグ」６７を「子サーバ」に更新し、「親サーバ識別子」６８を更新する。
【０１００】
その応答情報に基づいて、その追加されるサーバが、自身が親サーバであると判定した場合（Ｓ３８で「Ｙｅｓ」）は、応答情報から親CH表４９を構築し（Ｓ３９）、親サーバ１２同志のネットワーク接続を確立する（Ｓ４０）。その追加されるサーバは、応答情報からエリア内のサーバ数の上限と、現在のエリア内のサーバ数を記憶部４８に格納する（Ｓ４１）。また、追加されるサーバは、応答結果を用いて、サーバ管理情報の「親サーバ判定フラグ」６７を「親サーバ」に更新し、「親サーバ識別子」６８を自身のサーバ識別子に更新する。
【０１０１】
そして、その追加されるサーバは、応答情報から自身が属するエリアの子CH表５０を構築し（Ｓ４２）、そのＣＨ表５０に基づいて、子サーバ１３との接続を確立する（Ｓ４３）。この時、各子サーバ１３は旧親サーバ１２との接続を破棄する。
【０１０２】
そして、サーバの追加に伴いデータの担当ハッシュ空間が変動するため、その変動したハッシュ空間に対応して管理されていたデータの移行処理が、ハッシュ空間が変更したサーバと、追加されたサーバ間で行われる（Ｓ４４）。このデータ移行処理はCHの一般的技術であるため割愛する。
【０１０３】
図１７は、図１６の参加依頼処理（Ｓ３６）の詳細フローを示す。図１７は、追加されるサーバ（参加要求サーバ）から参加依頼要求を受信した既存サーバの処理フローである。図１６のＳ３６において、既にＣＨに参加しているいずれかのサーバは、参加要求サーバからスプリット・ハッシュへの参加リクエストを受信する（Ｓ５１）。スプリット・ハッシュ参加のリクエストを受けた所定のサーバが子サーバ１３である場合（Ｓ５２）、子サーバ１３は、自身が属するエリアの親サーバ１２にそのスプリット・ハッシュ参加のリクエストを転送する（Ｓ５３）。
【０１０４】
スプリット・ハッシュ参加のリクエストを受けたサーバが親サーバ（対象親サーバと称する）１２である場合（Ｓ５２で「Ｎｏ」）、対象親サーバは、次の処理を行う。すなわち、対象親サーバは、参加要求サーバのサーバ識別子から、ハッシュ関数を用いてハッシュ値を計算し、親ＣＨ表を用いて図１４の処理を行い、そのハッシュ値を担当する親サーバを検索する（Ｓ５４）。検索の結果、他の親サーバが担当するエリアに対応するハッシュ値である場合（Ｓ５５でＮｏ）、対象親サーバは、検索された親サーバにそのリクエストを転送する（Ｓ５６）。
【０１０５】
検索の結果、自身が担当するエリアに対応するハッシュ値である場合（Ｓ５５で「Ｙｅｓ」）、対象親サーバは、現在のエリア内サーバ数を確認し、サーバが追加された場合にエリア内のサーバ数が上限を超過するかどうか判定する（Ｓ５７）。
【０１０６】
サーバが追加された場合にエリア内のサーバ数が上限を超過しない場合（Ｓ５７で「Ｎｏ」）は、対象親サーバは、図９（Ｃ）のフォーマットを用いて子CH構築に必要なサーバ宛先情報群を応答として参加要求サーバに返却する（Ｓ５８）。
【０１０７】
サーバが追加された場合にエリア内のサーバ数が上限を超過する場合（Ｓ５７で「Ｙｅｓ」）は、対象親サーバは、参加要求サーバを含めて子CH表から、図１５で説明したように、そのエリアの中間サーバを親サーバとして選出する（Ｓ５９）。
【０１０８】
選出された親サーバが既存サーバだった場合（Ｓ６０で「Ｎｏ」）、対象親サーバは、参加要求サーバに対して、分割されたエリア内の子CH表を返却する（Ｓ６２）。すなわち、対象親サーバは、参加要求サーバに、図９（Ｃ）のフォーマットを用いて、そのエリアの先頭から、選出されたサーバのハッシュ値までのハッシュ空間（エリア）に含まれる子サーバの宛先情報を参加要求サーバに返却する。対象親サーバは、選出された既存サーバに対して、親サーバへの昇格を通知する（Ｓ６３）。
【０１０９】
選出された親サーバが参加要求サーバだった場合（Ｓ６０で「Ｙｅｓ」）、対象親サーバは、参加要求サーバに、親サーバへの昇格を通知する。また、対象親サーバは、参加要求サーバに、図９（Ｃ）のフォーマットを用いてそのエリアの先頭から参加要求サーバのハッシュ値までのハッシュ空間に含まれる子サーバの宛先情報を参加要求サーバに返却する（Ｓ６１）。
【０１１０】
その後、対象親サーバは、自身の有する親CH表４９と子CH表５０を更新する（Ｓ６４）。すなわち、対象親サーバは、自身の有する親CH表４９に、選出した親サーバを追加して、その親CH表４９を更新する。また、対象親サーバは、自身の有する子CH表５０から、Ｓ６１、Ｓ６２で参加要求サーバに通知した子サーバを除いた子サーバについての子ＣＨ表５０を作成する。
【０１１１】
対象親サーバは、その更新した親CH表及び子CH表を用いて、親サーバ同士及び当該親サーバが属するエリア内のネットワークの通信接続（経路情報）を更新する。これにより、親サーバと参加要求サーバとの通信が確立する。さらに、対象親サーバは、他の親サーバに対して、更新した親CH表４９を送信する。また、対象親サーバは、エリア内の子サーバに対して、更新した子CH表５０を送信する（Ｓ６５）。このとき、子サーバから親サーバへ昇格した場合、エリア外の子サーバとの接続が切断される。
【０１１２】
その後、対象親サーバは、クライアント３１に、更新した親CH表５９を通知し（Ｓ６６）、本フローは終了する。
【０１１３】
なお、図１７では割愛しているが、エリア内のサーバ数の上限は１つのエリアを構築するために用いられる。親CHの階層レベルにも同様にサーバ数上限を当てはめると、この分割方法は入れ子（階層）構造にすることができる。
【０１１４】
図１８は、本実施形態におけるスプリット・ハッシュでのCH表のレプリケーションを説明するための図である。CH方式の分散データストアでは、分散システムの可用性を高めるためにデータの複製を作成する。図１８（Ａ）に示すように、子サーバ１３がハッシュ空間から脱退する場合、ハッシュ空間上でのハッシュ値が増値する方向のサーバに、その脱退する子サーバ１３のデータの複製が作成される。これにより、CHではハッシュ空間上の前のサーバ位置から次のサーバの位置までが担当空間になるため、前にあるサーバが離脱した時に迅速にその離脱したサーバのデータを復旧できる。
【０１１５】
スプリット・ハッシュでは、親CH表４９についての情報を隣接サーバに複製し、親サーバが離脱する場合に新たな親サーバとして隣のサーバが昇格する。図１８（Ｂ）に示すように、通常のデータについては通常のCHと同じ方式に、ハッシュ空間上でのハッシュ値が増値する方向のサーバに、その脱退するサーバのデータの複製が作成される。しかし、親CH表４９については、通常のデータとは反対の方向にあるサーバ上に複製が作成される。これは、親サーバ１２はエリアの終端にあるという特性を維持するための挙動である。仮に、通常データと同じ方向に複製を作成した場合、親サーバの離脱に伴い「右隣」のサーバが親に昇格することになるので、新しい親サーバ１２は、隣のエリアに属するサーバになる。そのため、エリア構成の変更およびネットワーク接続の張り直しが煩雑になる。それに対して、図１８（Ｂ）に示すように、ハッシュ空間の減値方向に次の親サーバ候補を作ることで、エリア内のネットワーク情報の変動を離脱したサーバに絞ることができる。
【０１１６】
図１９は、本実施形態におけるサーバの脱退時でのスプリット・ハッシュに参加している各サーバが実行する処理フローを示す。このフローは、スプリット・ハッシュに参加している各サーバで実行されている。また、各サーバは、自身が親サーバか子サーバかを判定する情報及び当該エリア内の親サーバがどのサーバであるかを判定する情報を記憶部４８に記憶している。
【０１１７】
サーバ死活監視部４７は、スプリット・ハッシュに参加しているいずれかのサーバがスプリット・ハッシュからの脱退を検出する（Ｓ７１）。スプリット・ハッシュからのサーバの脱退を検出したサーバ（対象サーバ）は、自身の子CH表５０からその脱退したサーバのサーバ情報構造体を削除し、アドレス情報1及びアドレス情報２を更新してリンクを再形成し、子CH表５０を再構築する（Ｓ７２）。
【０１１８】
対象サーバの記憶部４８に格納された情報に基づいて、脱退したサーバが子サーバであると判定した場合（Ｓ７３で「Ｎｏ」）、対象サーバは、本フローを終了する。
【０１１９】
対象サーバの記憶部４８に格納された情報に基づいて、脱退したサーバが親サーバであると判定した場合（Ｓ７３で「Ｙｅｓ」）、対象サーバは、自身が次の親であるか否かを判定する。ここでは、対象サーバは、対象サーバのハッシュ値と現在のエリア内にあるサーバの最大のハッシュ値とを比較することにより、自身が次の親であるか否かを判定することができる。
【０１２０】
対象サーバ自身が次の親であると判定した場合（Ｓ７４で「Ｙｅｓ」）、対象サーバは、記憶部４８に、予め複製されて格納されていた親CH表４９を用いて、各親サーバ１２に対して、親サーバへの昇格を通知する（Ｓ７６）。また、対象サーバは、親CH表４９において、脱退した親サーバのサーバ情報構造体の「サーバ識別子」７２、「ハッシュ値」７３、「宛先情報」７４を、自身の「サーバ識別子」、「ハッシュ値」、「宛先情報」で更新する（Ｓ７７）。さらに、対象サーバは、更新した親CH表４９の複製を、エリア内で、次に大きいハッシュ値を有する子サーバに送信する（Ｓ７８）。その子サーバは、その親CH表の複製を記憶部４８に格納する。
【０１２１】
対象サーバ自身が次の親ではないと判定した場合（Ｓ７４で「Ｎｏ」）、対象サーバは、他のサーバから通知された情報（Ｓ７６）に基づいて、当該エリア内の親サーバがどのサーバであるかを判定する情報を更新して完了する（Ｓ７５）。
【０１２２】
（スプリット・ハッシュ空間の動的変化の実施例）
最後に、本実施形態で構築された分散システムにアクセスする場合の流れを簡単に説明する。クライアント３１は、まず親CH表４９を検索し、親サーバ１２にアクセスする。こうして親サーバ１２に通知されたキーとデータは、必ず該当エリア内に格納先が存在している。親サーバ１２は自身が属するエリア内の全サーバの宛先情報を持っているので、１ホップで目的のサーバに到達できる。上述したように、分割を入れ子（階層化）にしている場合、親サーバが管理するサーバが１階層下の親サーバ群となる。この場合、目的地に到達するには更に１回のホップが必要となる。しかし、１サーバで管理できる宛先情報が仮にN（Ｎ：任意の整数）個だとすると、Nn台（ｎ：任意の整数）のサーバ構成に対して情報量はΣN、ホップ回数は0〜n回で探索できるオーバーレイ・ネットワークを構築することができる。
【０１２３】
なお、本実施形態では、エリアに属するサーバのうち、最もハッシュ値が高いサーバを親サーバとしたが、これに限定されず、エリアに属するサーバのうち、最もハッシュ値が小さいサーバを親サーバとしてもよい。
【０１２４】
図２０は、本実施形態の一実施例に係るコンピュータのハードウェア環境の構成ブロック図である。コンピュータ８０は、親サーバ１２、子サーバ１３、またはクライアント３１として用いることができる。
【０１２５】
コンピュータ８０は、出力Ｉ／Ｆ８１、ＣＰＵ８２、ＲＯＭ８３、通信Ｉ／Ｆ８４、入力Ｉ／Ｆ８５、ＲＡＭ８６、記憶装置８７、読み取り装置８８、バス８９を含む。コンピュータ８０は、出力機器９１、入力機器９２と接続されている。
【０１２６】
ここで、ＣＰＵは、中央演算装置であり、プロセッサの一例である。ＲＯＭは、リードオンリメモリを示す。ＲＡＭは、ランダムアクセスメモリを示す。Ｉ／Ｆは、インターフェースを示す。バス８９には、出力Ｉ／Ｆ８１、ＣＰＵ８２、ＲＯＭ８３、通信Ｉ／Ｆ８４、入力Ｉ／Ｆ８５、ＲＡＭ８６、記憶装置８７、読み取り装置８８が接続されている。読み取り装置８８は、可搬型記録媒体を読み出す装置である。出力機器９１は、出力Ｉ／Ｆ８１に接続されている。入力機器９２は、入力Ｉ／Ｆ８５に接続にされている。
【０１２７】
記憶装置８７としては、ハードディスクドライブ、フラッシュメモリ装置、磁気ディスク装置など様々な形式の記憶装置を使用することができる。記憶装置８７またはＲＯＭ８３には、例えば、本実施形態で説明した処理を実現するプログラムが格納されている。
【０１２８】
また、コンピュータ８０が親サーバ１２である場合、記憶装置８７またはＲＯＭ８３には、親CH表５０、親サーバ１２が属するエリアの子CH表５０、サーバ管理情報６５、エリア内サーバ数上限値等が格納されている。また、コンピュータ８０が子サーバ１２である場合、記憶装置８７またはＲＯＭ８３には、当該エリアの子CH表５０、サーバ管理情報６５、エリア内サーバ数上限値等が格納されている。また、コンピュータ８０がクライアント３１である場合、記憶装置８７またはＲＯＭ８３には、親CH表等が格納されている。
【０１２９】
ＣＰＵ８２は、記憶装置８７またはＲＯＭ８３に格納した本実施形態で説明した処理を実現するプログラムを読み出し、当該プログラムを実行する。
【０１３０】
本実施形態で説明した処理を実現するプログラムは、プログラム提供者側から通信ネットワーク９０、および通信Ｉ／Ｆ８４を介して、例えば記憶装置８７に格納してもよい。また、本実施形態で説明した処理を実現するプログラムは、市販され、流通している可搬型記憶媒体に格納されていてもよい。この場合、この可搬型記憶媒体は読み取り装置８８にセットされて、ＣＰＵ８２によってそのプログラムが読み出されて、実行されてもよい。可搬型記憶媒体としてはＣＤ−ＲＯＭ、フレキシブルディスク、光ディスク、光磁気ディスク、ＩＣカード、ＵＳＢメモリ装置など様々な形式の記憶媒体を使用することができる。このような記憶媒体に格納されたプログラムが読み取り装置８８によって読み取られる。
【０１３１】
また、入力機器９２には、キーボード、マウス、電子カメラ、ウェブカメラ、マイク、スキャナ、センサ、タブレット、タッチパネルなどを用いることが可能である。また、出力機器９１には、ディスプレイ、プリンタ、スピーカなどを用いることが可能である。また、ネットワーク９０は、インターネット、ＬＡＮ、ＷＡＮ、専用線、有線、無線等の通信網であってよい。
【０１３２】
なお、本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【符号の説明】
【０１３３】
１      情報検索システム
２      情報処理端末
２−１  格納部
２−２  取得部
２−３  検索部
２−４  送信部
３      情報処理装置
３−１  取得部
３−２  格納部
３−３  検索部
３−４  送信部
３−５  分離制御部
３−６  脱退処理部
４      通信ネットワーク
１２    親サーバ
１３    子サーバ
３０    分散システム
３１    クライアント
３２    通信ネットワーク
３３    サーバ
４１    通信制御部
４２    データ処理部
４４    構成管理部
４５    親ＣＨ宛先管理部
４６    子ＣＨ宛先管理部
４７    死活監視部
４８    記憶部
４９    親CH表
５０    子CH表
５１    アプリケーション
５２    ライブラリ
５３    宛先制御部
５４    親ＣＨ宛先管理部
５５    通信制御部
５６    記憶部
６５    サーバ管理情報
【図１】
2014130535.tif 000003
【図３】
2014130535.tif 000004
【図５】
2014130535.tif 000005
【図６】
2014130535.tif 000006
【図７】
2014130535.tif 000007
【図８】
2014130535.tif 000008
【図９】
2014130535.tif 000009
【図１０】
2014130535.tif 000010
【図１１】
2014130535.tif 000011
【図１２】
2014130535.tif 000012
【図１３】
2014130535.tif 000013
【図１４】
2014130535.tif 000014
【図１５】
2014130535.tif 000015
【図１６】
2014130535.tif 000016
【図１７】
2014130535.tif 000017
【図１８】
2014130535.tif 000018
【図１９】
2014130535.tif 000019
【図２０】
2014130535.tif 000020
【図２】
2014130535.tif 000021
【図４】
2014130535.tif 000022