(57)【要約】【課題】エリア分割に伴うエリアサーバの負荷の低減を図る。【解決手段】本発明の分散システムは、ネットワークを介して接続された複数のエリアサーバを備え、データ群を分割した複数のエリアを複数のエリアサーバが分散して管理する分散システムであって、複数のエリアサーバの各々は、管理しているエリアのサイズが所定値以上となると、エリアを二つのエリアに分割するエリア分割部と、所定のイベントを契機として、自サーバで管理しているエリアの数である自サーバ管理エリア数を他のエリアサーバに通知する通信部と、自サーバ管理エリア数、および、他のエリアサーバから通知された、他のエリアサーバで管理されているエリアの数である他サーバ管理エリア数に基づき自サーバへのエリアの偏りの程度を求め、求めた偏りの程度が所定の閾値以上であれば、管理しているエリアの一部を、他のエリアサーバに再配置するエリア再配置部と、を有する。【選択図】図１
2013025453.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して接続された複数のエリアサーバを備え、データ群を分割した複数のエリアを前記複数のエリアサーバが分散して管理する分散システムであって、
前記複数のエリアサーバの各々は、
管理しているエリアのサイズが所定値以上となると、該エリアを二つのエリアに分割するエリア分割部と、
所定のイベントを契機として、自サーバで管理しているエリアの数である自サーバ管理エリア数を他の前記エリアサーバに通知する通信部と、
前記自サーバ管理エリア数、および、前記他のエリアサーバから通知された、該他のエリアサーバで管理されているエリアの数である他サーバ管理エリア数に基づき自サーバへのエリアの偏りの程度を求め、該求めた偏りの程度が所定の閾値以上であれば、前記管理しているエリアの一部を、前記他のエリアサーバに再配置するエリア再配置部と、を有することを特徴とする分散システム。
【請求項２】
請求項１記載の分散システムにおいて、
前記エリア再配置部は、前記自サーバへのエリアの偏りの程度が前記閾値以上である状態が所定期間以上継続した場合にエリアを再配置することを特徴とする分散システム。
【請求項３】
請求項１または２記載の分散システムにおいて、
前記通信部は、前記自サーバ管理エリア数が前回の通知時から所定数以上増加したことを契機として、前記自サーバ管理エリア数を通知することを特徴とする分散システム。
【請求項４】
請求項１から３のいずれか１項に記載の分散システムにおいて、
マスターサーバをさらに備え、
前記マスターサーバは、
前記複数のエリアサーバをグループ分けするとともに、グループ毎に、該グループに属するエリアサーバの内、１つのエリアサーバをグループサーバに任命する制御部をさらに有し、
前記通知部は、自サーバが前記グループサーバに任命されると、自サーバと同じグループに属するエリアサーバの各々から、該エリアサーバで管理されているエリアの数を取得し、所定のイベントを契機として、前記同じグループに属する全てのエリアサーバで管理されているエリアの数の合計である自グループ管理エリア数を前記グループサーバに任命された他のエリアサーバに通知し、
前記エリア再配置部は、前記自グループ管理エリア数、および、前記グループサーバに任命された他のエリアサーバから通知された、該エリアサーバが属するグループの全てのエリアサーバで管理されているエリアの数の合計である他グループ管理エリア数に基づき自グループへのエリアの偏りの程度を求め、該求めた偏りの程度が所定の閾値以上であれば、前記自グループのエリアサーバで管理されているエリアの一部を、前記グループサーバに任命された他のエリアサーバが属するグループのエリアサーバに再配置することを特徴とする分散システム。
【請求項５】
マスターサーバと、ネットワークを介して接続された複数のエリアサーバと、を備え、データ群を分割した複数のエリアを前記複数のエリアサーバが分散して管理する分散システムであって、
前記データ群は、キーと該キーに対応する値とを対応つけた複数のロウから構成され、
前記マスターサーバは、
前記データ群を構成する複数のロウのキーを所定の順にソートした後に前記キーの範囲を前記エリアサーバの数に応じて分割し、該分割したキーの範囲の各々を前記複数のエリアサーバ各々の前記ネットワーク上におけるアドレスの順に前記複数のエリアサーバの各々に割り当て、前記キーの範囲を割り当てた前記エリアサーバに前記キーの範囲のロウを含むエリアを管理させる制御部と、
前記複数のエリアサーバの各々に割り当てた前記キーの範囲を記憶する記憶部と、を有し、
前記通知部は、前記ネットワーク上におけるアドレスの順が前後のエリアサーバである隣接エリアサーバに前記自サーバ管理エリア数を通知し、
前記エリア再配置部は、前記キーのソート順が保持されるようにエリアを再配置することを特徴とする分散システム。
【請求項６】
請求項５記載の分散システムにおいて、
前記制御部は、前記グループ毎に、該グループに属するエリアサーバの内、１つのエリアサーバをグループサーバに任命し、
前記記憶部は、前記グループのグループサーバに任命したエリアサーバ毎に、前記グループに属する全てのエリアサーバに割り当てられた前記キーの範囲を記憶し、
前記グループのグループサーバに任命されたエリアサーバは、前記グループに属するエリアサーバ毎に、該エリアサーバに割り当てられた前記キーの範囲を記憶し、
前記通知部は、自グループが属するグループにおける前記隣接エリアサーバに前記自サーバ管理エリア数を通知し、
前記エリア再配置部は、前記キーのソート順が保持されるように、自グループが属するグループにおける前記隣接エリアサーバにエリアを再配置することを特徴とする分散システム。
【請求項７】
データ群を分割した複数のエリアを、分散して管理する複数のエリアサーバの各々に適用される負荷分散方法であって、
管理しているエリアのサイズが所定値以上となると、該エリアを二つのエリアに分割し、
所定のイベントを契機として、自サーバで管理しているエリアの数である自サーバ管理エリア数を他の前記エリアサーバに通知し、
前記自サーバ管理エリア数、および、前記他のエリアサーバから通知された、該他のエリアサーバで管理されているエリアの数である他サーバ管理エリア数に基づき自サーバへのエリアの偏りの程度を求め、該求めた偏りの程度が所定値以上であれば、前記管理しているエリアの一部を前記他のエリアサーバに再配置することを特徴とする負荷分散方法。
【請求項８】
データ群を分割した複数のエリアを、分散して管理する複数のエリアサーバの各々に、
管理しているエリアのサイズが所定値以上となると、該エリアを二つのエリアに分割する処理と、
所定のイベントを契機として、自サーバで管理しているエリアの数である自サーバ管理エリア数を他の前記エリアサーバに通知する処理と、
前記自サーバ管理エリア数、および、前記他のエリアサーバから通知された、該他のエリアサーバで管理されているエリアの数である他サーバ管理エリア数に基づき自サーバへのエリアの偏りの程度を求め、該求めた偏りの程度が所定値以上であれば、前記管理しているエリアの一部を前記他のエリアサーバに再配置する処理と、を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを複数のサーバで分散して管理する分散システム、負荷分散方法、および、プログラムに関する。
【背景技術】
【０００２】
大量のデータを蓄積管理するための技術として、ネットワークを介して接続された複数のサーバを用いてデータを分散管理する分散型キーバリューストア技術が注目されている。分散型キーバリューストア技術を適用してデータを蓄積管理するシステムにおいては、データの格納先のサーバを自動的に選択して負荷を分散させたり、サーバを増設することでシステムをスケールアウトさせたりすることができる。なお、以下では、分散型キーバリュー技術を適用してデータを蓄積管理するシステムを分散システムと称する。
【０００３】
分散システムとしては、１つのKey(RowKey)と１つのValue（データ）とをペアとして管理する単純なものがある。また、より高度な機能を備えた分散システムとしては、RowKey、データの内容などに応じたカラム名、データの作成日時などを示すタイプスタンプなどの複数の属性を連結した複合的なKeyとそのKeyに一意に対応するValueとをペアで管理するものや、サーバの故障を検知すると、そのサーバで管理されていたデータを他のサーバに再配置するリカバリ機能を有するものがある。以下では、１つのKeyと１つのValueとのペアをRowと称する。
【０００４】
上述したような、高度な機能を備えた分散システムとしては、例えば、Google社のBigTable（非特許文献１参照）、オープンソースソフトウェアのHBase、Hypertableなどが知られている。これらの分散システムにより、例えば、Web上の大量のコンテンツの蓄積管理が行われることで、各コンテンツに対応するインデクスを作成し、世界中のWebコンテンツを検索することが可能となる。このように、分散システムは、大量のデータを扱い、かつ、多数のユーザを対象としたサービスを提供するための基盤として利用されている。
【０００５】
以下では、分散システムの概要について説明する。
【０００６】
分散システムは、クライアント端末（以下、クライアントと称する）と複数のサーバとを備える。
【０００７】
クライアントは、ユーザからのデータの参照、更新などのデータ処理の要求を受け付けると、そのデータを格納するサーバを探索、特定し、要求に応じたデータ処理を行い、処理結果をユーザに返却する。
【０００８】
複数のサーバの各々は、複数のRowからなるTableをいくつかのRowのまとまりを単位として分割した複数のArea（エリア）を分散して管理する。以下では、Areaを管理するサーバをArea Server（エリアサーバ）と称する。分散システムにおいては、複数のArea Serverが、Areaを分散して管理することで、負荷を分散させることができる。
【０００９】
なお、分散システムにおけるArea Serverの各々は、Google社のGoogle File SystemやオープンソースソフトウェアのHadoop HDFSなどのネットワークを介して接続されており、ネットワーク上の自身のIPアドレスをフォルダ名としたフォルダを持ち、このフォルダ配下に、各々が管理するAreaを永続化して管理する。
【００１０】
Area Serverは、データの追加などによりRow数が増加し、Areaのサイズが増加して、所定の閾値に達すると、そのAreaを２つのエリアに分割する。
【００１１】
図２３は、Area Serverにより行われるArea分割を示す図である。
【００１２】
図２３においては、Area Serverは、（Key,Value）がそれぞれ、（Row1Col1TS1,Val111），（Row1Col1TS2,Val112），（Row1Col1TS3,Val113），（Row1Col2TS1,Val121）である４つのRowからなり、サイズが100MByteであるArea３を管理しているとする（状態１）。なお、「Row1」はRowKeyを示し、「Col1」および「Col2」はカラム名を示し、「TS」はタイムスタンプを示す。
【００１３】
データの追加などによりArea３のRow数が増加したとする。図２３においては、（Key,Value）がそれぞれ、（Row1Col2TS2,Val122），（Row1Col2TS3,Val123），（Row2Col1TS1,Val211），（Row2Col1TS2,Val212）である４つのRowが追加され、Area３のサイズが200MByteになったとする（状態２）。
【００１４】
状態２において、Area３のサイズが所定の閾値に達したとすると、Area Serverは、Area３を２つのArea（Area３AおよびArea３B）に分割する（状態３）。ここで、Area Serverは、Rowを最小単位とし、Area３AとArea３Bとのサイズができるだけ等しくなるようにRowKeyを基としてRowを選択してArea分割を行う。つまり、Area Serverは、RowKeyが同じRowが複数のAreaに分けて格納されることがないようにArea3を分割する。その結果、図２３に示すように、RowKeyが「Row1」であり、（Key,Value）がそれぞれ、（Row1Col1TS1,Val111），（Row1Col1TS2,Val112），（Row1Col1TS3,Val113），（Row1Col2TS1,Val121）（Row1Col2TS2,Val122），（Row1Col2TS3,Val123）であるRowがArea３Aに格納され、RowKeyが「Row2」であり、（Key,Value）がそれぞれ、（Row2Col1TS1,Val211），（Row2Col1TS2,Val212）であるRowがArea３Bに格納されるように、Area３が分割される（状態３）。なお、分散システムおけるサーバとしては、エリアサーバのほかに、Master Server（マスターサーバ）がある。Master Serverの詳細については後述する。
【００１５】
分散システムにおいて管理されるTableには、Root Table、Meta Table、User Tableの3種類がある。Meta TableおよびUser Tableは、Area単位で分割管理される。Meta TableおよびUser Tableを分割して得られるAreaをそれぞれ、Meta AreaおよびUser Areaと称する。
【００１６】
User Tableは、データを管理するためのTableであり、各RowにはKeyとValue（データ）とのペアが格納される。Meta Tableは、User Areaを管理するArea Serverのロケーションを管理するためのTableであり、各RowのValueとして、User Areaのロケーション（IPアドレスなど）が格納される。また、Root Tableは、Meta Areaのロケーションを管理するためのTableであり、各RowのValueとして、Meta Areaを管理するArea Serverのロケーション（IPアドレスなど）が格納される。
【００１７】
次に、分散システムにおけるデータ参照時およびデータ更新時の処理の流れについて説明する。
【００１８】
クライアントは、データを参照する旨の要求を受け付けると、そのデータに対応するKeyを検索キーとしてサーバ上にあるRoot Tableを参照してMeta Areaを探索し、次にMeta Areaを参照して所望のデータを格納するAreaを管理するArea Serverを特定して、そのArea Serverで管理されているUser Area から所望のデータを取得する。データ更新についても同様に、クライアントは、更新対象のデータに対応するKeyを検索キーとして、Root Table、Meta Area、User Areaと辿り、更新対象のデータの更新処理を行う。
【００１９】
次に、Area分割時の処理の流れについて、図２４を参照して説明する。
【００２０】
図２４に示すように、分散システム２は、Master Server２０と、Area Server３０（Area Server３０−１〜３０−６）と、を備える。なお、図２４においては、クライアントについては記載を省略する。
【００２１】
Area Server３０−１〜３０−６はそれぞれ、Area３を管理する。図２４においては、Area Server３０−１〜３０−３は、７つのAreaを管理し、Area Server３０−４は、８つのAreaを管理し、Area Server３０−５は、９つのAreaを管理し、Area Server３０−６は、５つのAreaを管理しているものとする。
【００２２】
ここで、Area Server３０−２が管理する１つのArea３のサイズが所定の閾値に達したとする。Area Server３０−２は、そのArea３を２つのArea（Area３AおよびArea３B）に分割し、Area分割を行った旨をMaster Server２０に報告する。
【００２３】
Master Server２０は、各Area Server３０が管理するAreaの数を管理する。また、Master Server２０は、Area Server３０−２からArea分割を行った旨の報告を受けると、管理しているAreaの数が最も少ないArea Server３０−６にAreaの再配置を要求する。Area Server３０−６からAreaの再配置を許諾する旨が報告されると、Master Server２０は、Area Server３０−２にArea Server３０−６がAreaの再配置先である旨を通知する。
【００２４】
Area Server３０−２は、Master Server２０から通知を受けると、Area３AおよびArea３Bのうちの一方、例えば、Area３BをArea Server３０−６に再配置する。
【００２５】
Area分割、Area再配置が行われると、Meta Tableの更新（Areaを管理するArea Serverのロケーションの現行の状態への変更）が行われる。
【００２６】
Meta Table更新時の処理の流れについて、図２５を参照して説明する。
【００２７】
図２５は、Area Server３０−２で管理されているArea３（User Area）がArea３AおよびArea３Bに分割され、Area３BがArea Server３０−６に再配置された場合のMeta Table更新時の処理の流れを示す図である。なお、図２５においては、Area Server３０−３がMeta Tableを管理しているものとする。また、図２５においては、Area３に含まれるRowのKey範囲はRow1Col1TS1〜Row2Col1TS2であり、RowのKey範囲がRow1Col1TS1〜Row1Col2TS3のArea３Aと、RowのKey範囲がRow2Col1TS1〜Row2Col1TS2であるArea３Bと、に分割されたものとする。また、図２５においては、Area Server３０−２のIPアドレスは、１０．０．０．２であり、Area Server３０−６のIPアドレスは、１０．０．０．６であるとする。
【００２８】
Area３の分割前においては、Area Server３０−３は、Meta Tableに、Area３に含まれるRowのKey範囲（Row1Col1TS1〜Row2Col1TS2）とArea３を管理するArea Serverのロケーション（Location）としてArea Server３０−２のIPアドレス（１０．０．０．２）とを対応させて記憶している（状態１）。
【００２９】
Area３の分割が行われると、Area Server３０−３は、Meta Tableを更新する。具体的には、Area３Aに含まれるRowのKey範囲（Row1Col1TS1〜Row1Col2TS3）とArea３Aを管理するArea Serverのロケーション（Location）としてArea Server３０−２のIPアドレス（１０．０．０．２）とを対応させて記憶するとともに、Area３Bに含まれるRowのKey範囲（Row2Col1TS1〜Row2Col1TS2）をMeta Tableに追加する（状態２）。すなわち、Area Server３０−３は、Area毎にエントリを作成する。
【００３０】
次に、Area Server３０−３は、Master Server２０によりArea Server３０−６がArea３Bの再配置先として決定されると、Area３Bに含まれるRowのKey範囲（Row2Col1TS1〜Row2Col1TS2）と再配置先の候補のロケーション（ReqLocation）としてArea Server３０−６のIPアドレス（１０．０．０．６）とを対応させて記憶する（状態３）。
【００３１】
次に、Area Server３０−３は、Area３BのArea Server３０−６への再配置が行われると、Area３Bに含まれるRowのKey範囲（Row2Col1TS1〜Row2Col1TS2）とArea３Bを管理するArea Serverのロケーション（Location）としてArea Server３０−６のIPアドレス（１０．０．０．６）とを対応させて記憶する（状態４）。
【先行技術文献】
【非特許文献】
【００３２】
【非特許文献１】F. Chang, J. Dean, S. Ghemawat, W. C. Hsieh, D. A. Wallarch, M. Burrows, T. Chandra, A. Fikes, and r. E. Gruber, "Bigtable: A Distributed Storage System for Structured Data," CM Transactions on Computer Systems (TOCS)  Vol. 26, No. 2, Article 4, Pub. date: June 2008 .
【発明の概要】
【発明が解決しようとする課題】
【００３３】
上述した分散システムにおいては、Area分割が行われるたびに、即時に、図２５に示すMeta Table（Meta Area）の更新が行われる。そのため、Meta Areaを管理するArea Serverへのアクセスが非常に多くなって負荷が高まる。特に、分散システムへのデータの初期投入時には、Area分割が頻発するため、Meta Areaの更新が頻繁に行われ、Meta Areaを管理するArea Serverが高まる。
【００３４】
また、一般に、分散システムにおいては、Area数は１００，０００以上のオーダになる。そのため、上述したように、Area毎にMeta Tableにおいて１エントリを作成すると、Meta Tableのサイズが大きくなり、Meta Table（Meta Area）を管理するArea Serverの負荷が高まる。
【００３５】
Meta Areaを管理するArea Serverの負荷が高まると、そのMeta Areaを介してアクセスするUser Areaに対するデータの参照、更新のレスポンス、あるいは、そのMeta Areaを管理するArea Serverで管理されているUser Areaに対するデータの参照、更新のレスポンスが悪化するという問題がある。
【００３６】
本発明の目的は、Area Serverの負荷を分散し、レスポンス低下の抑制を図ることができる分散システム、負荷分散方法、および、プログラムを提供することにある。
【課題を解決するための手段】
【００３７】
上記目的を達成するために本発明の第１の分散システムは、
ネットワークを介して接続された複数のエリアサーバを備え、データ群を分割した複数のエリアを前記複数のエリアサーバが分散して管理する分散システムであって、
前記複数のエリアサーバの各々は、
管理しているエリアのサイズが所定値以上となると、該エリアを二つのエリアに分割するエリア分割部と、
所定のイベントを契機として、自サーバで管理しているエリアの数である自サーバ管理エリア数を他の前記エリアサーバに通知する通信部と、
前記自サーバ管理エリア数、および、前記他のエリアサーバから通知された、該他のエリアサーバで管理されているエリアの数である他サーバ管理エリア数に基づき自サーバへのエリアの偏りの程度を求め、該求めた偏りの程度が所定の閾値以上であれば、前記管理しているエリアの一部を、前記他のエリアサーバに再配置するエリア再配置部と、を有する。
【００３８】
上記目的を達成するために本発明の第２の分散システムは、
マスターサーバと、ネットワークを介して接続された複数のエリアサーバと、を備え、データ群を分割した複数のエリアを前記複数のエリアサーバが分散して管理する分散システムであって、
前記データ群は、キーと該キーに対応する値とを対応つけた複数のロウから構成され、
前記マスターサーバは、
前記データ群を構成する複数のロウのキーを所定の順にソートした後に前記キーの範囲を前記エリアサーバの数に応じて分割し、該分割したキーの範囲の各々を前記複数のエリアサーバ各々の前記ネットワーク上におけるアドレスの順に前記複数のエリアサーバの各々に割り当て、前記キーの範囲を割り当てた前記エリアサーバに前記キーの範囲のロウを含むエリアを管理させる制御部と、
前記複数のエリアサーバの各々に割り当てた前記キーの範囲を記憶する記憶部と、を有し、
前記通知部は、前記ネットワーク上におけるアドレスの順が前後のエリアサーバである隣接エリアサーバに前記自サーバ管理エリア数を通知し、
前記エリア再配置部は、前記キーのソート順が保持されるようにエリアを再配置する。
【００３９】
上記目的を達成するために本発明の負荷分散方法は、
データ群を分割した複数のエリアを、分散して管理する複数のエリアサーバの各々に適用される負荷分散方法であって、
管理しているエリアのサイズが所定値以上となると、該エリアを二つのエリアに分割し、
所定のイベントを契機として、自サーバで管理しているエリアの数である自サーバ管理エリア数を他の前記エリアサーバに通知し、
前記自サーバ管理エリア数、および、前記他のエリアサーバから通知された、該他のエリアサーバで管理されているエリアの数である他サーバ管理エリア数に基づき自サーバへのエリアの偏りの程度を求め、該求めた偏りの程度が所定値以上であれば、前記管理しているエリアの一部を前記他のエリアサーバに再配置する。
【００４０】
上記目的を達成するために本発明のプログラムは、
データ群を分割した複数のエリアを、分散して管理する複数のエリアサーバの各々に、
管理しているエリアのサイズが所定値以上となると、該エリアを二つのエリアに分割する処理と、
所定のイベントを契機として、自サーバで管理しているエリアの数である自サーバ管理エリア数を他の前記エリアサーバに通知する処理と、
前記自サーバ管理エリア数、および、前記他のエリアサーバから通知された、該他のエリアサーバで管理されているエリアの数である他サーバ管理エリア数に基づき自サーバへのエリアの偏りの程度を求め、該求めた偏りの程度が所定値以上であれば、前記管理しているエリアの一部を前記他のエリアサーバに再配置する処理と、を実行させる。
【発明の効果】
【００４１】
本発明によれば、Area分割に伴うArea Serverへの負荷を低減し、レスポンス低下の抑制を図ることができる。
【図面の簡単な説明】
【００４２】
【図１】本発明の一実施形態の分散システムの構成を示す図である。
【図２】図１に示すMaster Serverの構成を示す図である。
【図３】図２に示すMaster Serverが記憶するGroupリストの構成の一例を示す図である。
【図４】図１に示すArea Serverの構成を示す図である。
【図５】図４に示すArea Serverが記憶するAreaリストの構成の一例を示す図である。
【図６】図４に示すメモリ領域３０４の構成の一例を示す図である。
【図７】図４に示すメモリ領域３０４の構成の他の一例を示す図である。
【図８】図４に示すメモリ領域３０５の構成の一例を示す図である。
【図９】図１に示すGroup Serverの構成を示す図である。
【図１０】図９に示すGroup Serverが記憶するArea Serverリストの構成の一例を示す図である。
【図１１】図９に示すメモリ領域４０１の構成の一例を示す図である。
【図１２】図９に示すメモリ領域４０１の構成の他の一例を示す図である。
【図１３】図１に示す分散システムにおけるグループ内でのArea再配置時の動作を示す図である。
【図１４】図１に示す分散システムにおけるグループ間でのArea再配置時の動作を示す図である。
【図１５】図１に示す分散システムにおけるArea Server起動時のMaster Serverの動作を示すシーケンス図である。
【図１６】図１に示す分散システムにおけるデータ参照時のクライアントの動作を示すシーケンス図である。
【図１７】図１６に示すクライアントが発行するAPIの一例を示す図である。
【図１８】図１に示す分散システムにおけるデータ更新時のクライアントの動作を示すシーケンス図である。
【図１９】図１８に示すクライアントが発行するAPIの一例を示す図である。
【図２０】図１に示す分散システムにおけるArea分割時のArea Serverの動作を示すシーケンス図である。
【図２１】図１に示す分散システムにおけるArea再配置時のArea Serverの動作を示すシーケンス図である。
【図２２】図１に示す分散システムにおけるGroup Serverの再決定時のMaster Serverの動作を示すシーケンス図である。
【図２３】関連する分散システムにおけるArea分割を説明するための図である。
【図２４】関連する分散システムにおけるArea再配置を説明するための図である。
【図２５】関連する分散システムにおける問題点を説明するための図である。
【発明を実施するための形態】
【００４３】
以下に、本発明を実施するための形態について図面を参照して説明する。
【００４４】
図１は、本発明の一実施形態の分散システムの概要を示す図である。なお、図１において、図２４と同様の構成については同じ符号を付し、説明を省略する。
【００４５】
図１に示す分散システム１は、クライアント１０と、Master Server２０と、Area Server３０−１〜３０−９と、を備える。クライアント１０、Master Server２０、および、Area Server３０−１〜３０−９は、ネットワークを介して接続されている。
【００４６】
クライアント１０は、ユーザからのデータの参照、更新などのデータ処理の要求を受け付けると、そのデータを格納するArea Serverを探索、特定する、ロケーション解決を行い、要求に応じたデータ処理を行って、処理結果をユーザに返却する。
【００４７】
Master Server２０は、Area Server３０−１〜３０−９を、各Area ServerのIPアドレスの順に、それぞれが複数のArea Serverからなるグループにグループ分けを行う。なお、図１においては、Area Server３０−１のIPアドレスは、１０．０．０．１であり、Area Server３０−２のIPアドレスは、１０．０．０．２であり、Area Server３０−３のIPアドレスは、１０．０．０．３であり、Area Server３０−４のIPアドレスは、１０．０．０．４であり、Area Server３０−５のIPアドレスは、１０．０．０．５であり、Area Server３０−６のIPアドレスは、１０．０．０．６であり、Area Server３０−７のIPアドレスは、１０．０．０．７であり、Area Server３０−８のIPアドレスは、１０．０．０．８であり、Area Server３０−９のIPアドレスは、１０．０．０．９であるとする。Master Server２０は、例えば、Area Server３０−１〜３０−３をGroup1に、Area Server３０−４〜３０−６をGroup2に、Area Server３０−７〜３０−９をGroup3にグループ分けを行う。
【００４８】
また、Master Server２０は、グループ毎に、グループに属するArea Serverのうち、１つのArea ServerをGroup Server（グループサーバ）に任命する。図１においては、Master Server２０は、Group1についてはArea Server３０−２を、Group2についてはArea Server３０−５を、Group3についてはArea Server３０−８を、Group Serverに任命したものとする。
【００４９】
また、Master Server２０は、分散システム１において管理されるUser TableおよびMeta Tableに含まれる複数のRowを各RowのKey（RowKey）に応じて昇順にソートし、その複数のRowのKey範囲をグループ数でほぼ等分となるように分割する。図１においては、Key範囲がKey1〜Key300であるとすると、グループ数は３であるため、Master Server２０は、Key範囲を、Key1〜Key100と、Key101〜Key200と、Key201〜Key300とに分割する。
【００５０】
さらに、Master Server２０は、Group Serverに任命したArea Server（以下、Group Serverと称する）のIPアドレスの順に、グループ間でKey範囲の連続性が保持されるように、各グループのGroup Serverに担当のKey範囲を割り当て、割り当てたKey範囲および同じグループに属するArea Serverを通知する。具体的には、Master Server２０は、Group Server３０−２，３０−５，３０−８のうち、最も上位（IPアドレスが最も小さい）のGroup Server３０−２に、担当のKey範囲がKey1〜Key100であり、同じグループ（Group1）に属するArea ServerがArea Server３０−１，３０−３である旨を通知する。また、Master Server２０は、Group Server３０−２の次に上位のGroup Server３０−５に、担当のKey範囲がKey101〜Key200であり、同じグループ（Group2）に属するArea ServerがArea Server３０−４，３０−６である旨を通知する。また、Master Server２０は、Group Server３０−５の次に上位のGroup Server３０−８に、担当のKey範囲がKey201〜Key300であり、同じグループ（Group3）に属するArea ServerがArea Server３０−７，３０−９である旨を通知する。また、Master Server２０は、各グループのGroup Serverの担当のKey範囲とそのGroup ServerのIPアドレスとを対応させたGroupリストを記憶する。
【００５１】
なお、本実施形態においては、説明の便宜上、IPアドレスの小さいServerを上位とし、IPアドレスの大きいServerを下位として説明する。
【００５２】
Group Server３０−２は、担当のKey範囲（Key1〜Key100）および同じグループ（Group1）に属するArea Server（Area Server３０−１，３０−３）が通知されると、通知されたRowのKey範囲を、Group1に属するArea Serverの数でほぼ等分となるように分割する。図１においては、担当のKey範囲がKey1〜Key100であり、Group1に属するArea Serverの数は３であるため、Group Server３０−２は、Key範囲を、Key1〜Key30と、Key31〜Key60と、Key61〜Key100と、に分割する。
【００５３】
さらに、Group Server３０−２は、Group1に属するArea ServerのIPアドレスの順に、管理するAreaに含まれるRowのKey範囲の連続性が各Area Server間で保持されるように、各Area ServerにAreaを管理させる。具体的には、Group Server３０−２は、Group1に属するArea Serverのうち、最も上位（IPアドレスが最も小さい）のArea Server３０−１に、Key範囲がKey1〜Key30であるRowを含むAreaを管理させる。また、Group Server３０−２は、自身がArea Server３０−１の次に上位のArea Serverであるため、Key範囲がKey31〜Key60であるRowを含むAreaを管理する。また、Group Server３０−２は、自身の次に上位のArea Server３０−３に、Key範囲がKey61〜Key100であるRowを含むAreaを管理させる。また、Group Server３０−２は、Group1に属する各Area Serverが管理するAreaに含まれるRowのKey範囲とそのArea ServerのIPアドレスとを対応させたArea Serverリストを記憶する。
【００５４】
また、Group Server３０−２は、Group1に属する全てのArea Serverで管理されているAreaの数の合計（自グループ管理エリア数）を、Group Server３０−２の次にIPアドレスが小さい（１つ上位の）Group ServerおよびGroup Server３０−２の次にIPアドレスが大きい（１つ下位の）Group Server、すなわち、IPアドレスがGroup Server３０−２の前後のGroup Serverに通知する。また、Group Server３０−２は、IPアドレスが前後のGroup Serverから、そのGroup Serverが属するグループの全てのArea Serverで管理されているAreaの数の合計（他グループ管理エリア数）の通知を受ける。なお、図１においては、Group Server３０−２の上位のGroup Serverは存在しない。この場合、Group Server３０−２は、自身の１つ下位のGroup Server３０−５にのみ、自グループ管理エリア数を通知するとともに、Group Server３０−５からのみ他グループ管理エリア数の通知を受ける。Group Server３０−２は、自グループ管理エリア数およびIPアドレスが前後のGroup Serverから通知された他グループ管理エリア数を記憶する。
【００５５】
また、Group Server３０−２は、記憶している自グループ管理エリア数および他グループ管理エリア数に基づき、Group1へのAreaの偏りの程度を求め、求めた偏りの程度が所定の閾値を超えている場合には、他グループ管理エリア数の通知を受けたGroup Serverが属するグループのArea Serverに、Group1に属するArea Serverで管理されているAreaの再配置を行う。
【００５６】
Group Server３０−５、Group Server３０−８については、Group Server３０−２と比較して、属するグループが異なるだけなので、説明を省略する。
【００５７】
Area Server３０−１は、Key範囲がKey1〜Key30であるRowを含むArea３を記憶する。また、Area Server３０−１は、データの追加などにより管理しているAreaのRow数が増加し、そのAreaのサイズが所定の閾値に達すると、そのAreaの分割を行う。
【００５８】
また、Area Server３０−１は、自身が管理するAreaの数（自サーバ管理エリア数）を、Group1に属し、自身の次にIPアドレスが小さい（１つ上位の）Area Serverおよび自身の次にIPアドレスが大きい（１つ下位の）Area Server、すなわち、IPアドレスが自身の前後のArea Serverに通知する。また、Area Server３０−１は、IPアドレスが自身の前後のArea Serverから、そのArea Serverで管理されているAreaの数（他サーバ管理エリア数）の通知を受ける。なお、図１においては、Area Server３０−１の上位のArea Serverは存在しない。この場合、Area Server３０−１は、自身の１つ下位のArea Server３０−２にのみ、自グループ管理エリア数を通知するとともに、Area Server３０−２からのみ他グループ管理エリア数の通知を受ける。Area Server３０−１は、自エリア管理エリア数およびIPアドレスが前後のArea Serverから通知された他サーバ管理エリア数を記憶する。
【００５９】
また、Area Server３０−１は、記憶している自サーバ管理エリア数および他サーバ管理エリア数に基づき、自身へのAreaの偏りの程度を求め、求めた偏りの程度が所定の閾値を超えている場合には、他サーバ管理エリア数の通知を受けたArea Serverに、自身が管理するAreaの再配置を行う。
【００６０】
なお、Area Server３０−２〜３０−９については、Area Server３０−１と比較して、管理するAreaに含まれるRowのKey範囲が異なるだけなので、説明を省略する。
【００６１】
図１に示す分散システム１において、Key20を指定したデータ処理の要求がクライアント１０に入力されたとする。クライアント１０は、Master Server２０にアクセスし、Master Server２０で記憶されているGroupリストを参照して、Key20を担当範囲とするGroup Server３０−２のIPアドレスを取得する。
【００６２】
次に、クライアント１０は、Group Server３０−２にアクセスし、Group Server３０−２で記憶されているArea Serverリストを参照して、Key20のRowを含むAreaを管理するArea Server３０−１のIPアドレスを取得する。次に、クライアント１０は、Area Server３０−１にアクセスして、Key20に対応するデータを取得し、データ処理を行う。
【００６３】
なお、クライアント１０が、一度データを取得したArea Serverのロケーションを記憶するキャッシュ（Cache）機能を有しており、Key20に対応するデータを既に取得したことがある場合には、Master Server２０、Group Server３０−２への問い合わせを行わず、直接、Area Server３０−１にアクセスしてデータ処理を行うことも可能である。
【００６４】
次に、Master Server２０、Area Server３０−１〜３０−９、および、Group Server３０−２，３０−５，３０−８の構成について説明する。なお、以下では、Area Server３０−１〜３０−９を区別しない場合には、Area Server３０Aと称し、Group Server３０−２，３０−５，３０−８を区別しない場合には、Group Server３０Gと称する。また、クライアント１０の構成は当業者にとってよく知られており、また、本発明と直接関係しないので、説明を省略する。
【００６５】
まず、Master Server２０の構成について、図２を参照して説明する。
【００６６】
図２に示すMaster Server２０は、通信部２０１と、Disk領域２０２と、制御部２０３と、を有する。
【００６７】
通信部２０１は、ネットワークを介して、クライアント１０および各Area Server３０Aと通信を行う。
【００６８】
Disk領域２０２は、プロパティファイルおよびGroupリストなどが記憶される記憶領域である。プロパティファイルには、各Area Server３０Aのロケーション（IPアドレス）の一覧、Group数、各Group Server３０Gの担当のKey範囲の初期値などが含まれる。
【００６９】
図３は、Groupリストの構成を示す図である。
【００７０】
図３に示すように、Groupリストとして、Group Server３０Gのロケーション（IPアドレス）と、そのGroup Server３０Gが担当するKey範囲のうち最も小さいKeyであるStartRowKeyと、そのGroup Server３０Gが担当するKey範囲のうち最も大きいKeyであるStopRowKeyと、が対応付けて記憶される。したがって、図３においては、例えば、IPアドレスが１０．０．０．２であるGroup Server３０−２の担当のKey範囲が、Key1〜Key100であることを示す。なお、データの追加が行われる場合には、StrartKey＜そのデータ（Value）とペアのKey≦StopKeyとなるKey範囲に対応付けられたGroup Server３０Gが担当となる。
【００７１】
再び、図２を参照すると、制御部２０３は、稼働中のArea Server３０Aのロケーション（IPアドレス）のリストを記憶するメモリ領域２０４を有する。また、制御部２０３は、稼働中のArea Server３０AのIPアドレスの順に、IPアドレスが前後する複数のArea Server３０Aを１つのグループとしてグループ分けを行うとともに、グループ毎に１つのArea Server３０AをGroup Serverに任命する。ここで、制御部２０３は、同じグループに属するArea Server３０Aのうち、ロケーションが中間のArea Server３０AをGroup Server３０Gに任命する。同じグループに属するArea Server３０Aのうち、ロケーションが最上位、あるいは、最下位（IPアドレスが最小あるいは最大）のArea Server３０AをGroup Server３０Gに任命すると、Group間でのArea再配置の際に、一時的にそのArea Server３０Aの負荷が高くなる可能性がある。そこで、ロケーションが中間のArea Server３０AをGroup Server３０Gに任命することで、Group間でのArea再配置の際にも、特定のArea Server３０Aの負荷が高くなることを防ぐことができる。なお、制御部２０３は、同じグループに属するArea Server３０Aのうち、ロケーションが中間のArea Server３０Aが複数ある場合には、ランダムに、あるいは、所定の規則（IPアドレスの小さいほう、IPアドレスの大きいほうなど）に従い、１つのArea Server３０AをGroup Server３０Gに任命する。
【００７２】
また、制御部２０３は、グループ毎に、担当のKey範囲を決定し、各グループのGroup Server３０Gのロケーションと、そのGroup Server３０Gの担当のKey範囲のStartRowKeyおよびStopRowKeyと、をDisk領域２０２のGroupリストに書き込む。また、制御部２０３は、各グループのGroup Server３０Gに、担当のKey範囲およびそのグループに属するArea Serverを通信部３０１を介して通知する。
【００７３】
次に、Area Server３０Aの構成について、図４を参照して説明する。
【００７４】
図４に示すArea Server３０Aは、通信部３０１と、Disk領域３０２と、制御部３０３と、を有する。また、制御部３０３は、メモリ領域３０４と、メモリ領域３０５と、Area分割部３０６と、Area再配置部３０７と、を有する。
【００７５】
通信部３０１は、ネットワークを介して、クライアント１０、Master Server２０、および、他のArea Server３０Aと通信を行う。
【００７６】
Disk領域３０２は、プロパティファイルおよびAreaリストが記憶される記憶領域である。プロパティファイルには、Area Server３０Aが管理するAreaの数を他のArea Server３０Aに通知する通知頻度、Area Server３０AへのAreaの偏りの程度の閾値、および、Area再配置を行うと判定する、Areaの偏りの程度が閾値を越えた状態の持続時間（偏り持続時間）が含まれる。
【００７７】
図５は、Areaリストの構成を示す図である。なお、図５は、Key範囲がKey1〜Key30であるRowを含むAreaを管理するArea Server３０−１のDisk領域３０２に記憶されるAreaリストの構成を示す図である。
【００７８】
図５に示すように、Areaリストとして、AreaのArea名と、そのAreaに含まれるRowのKey範囲のうち最も小さいKeyであるStartRowKeyと、そのAreaに含まれるRowのKey範囲のうち最も大きいKeyであるStopRowKeyと、が対応付けて記憶される。Areaリストにおいては、各AreaのArea名は、そのAreaに含まれるRowのKey範囲で昇順にソート済みである。そのため、２分探索などにより高速な探索が可能な状態となっている。
【００７９】
データの追加が行われる場合には、そのデータをValueとするRowの格納先は、StartKey＜そのRowのKey≦StopKeyとなるAreaが選択される。ここで、Keyの大小は、辞書順の大小で比較される。したがって、例えば、Keyが、"Key10abc"（＞"Key10"）であるRow、あるいは、Keyが、"Key15"であるRowは、Area2に格納される。
【００８０】
再び、図４を参照すると、制御部３０３は、所定のイベントを契機として、通信部３０１を介して、Area Server３０Aで管理されているAreaの数（自サーバ管理エリア数）を、Area Server３０Aと同じグループに属し、Area Server３０Aの次にIPアドレスが小さい（１つ上位の）Area Server３０AおよびArea Server３０Aの次にIPアドレスが小さい（１つ下位の）Area Server３０A、すなわち、IPアドレスがArea Server３０Aの前後のArea Server３０Aに通知する。なお、制御部３０３は、プロパティファイルに記憶されている通知頻度で、あるいは、IPアドレスが前後のArea Server３０Aで管理されているAreaの数（他サーバ管理エリア数）が通知された際の応答として、自サーバ管理エリア数を通知する。
【００８１】
制御部３０３は、自サーバ管理エリア数およびIPアドレスがArea Server３０Aの前後のArea Server３０Aから通知された他サーバ管理エリア数を記憶する。
【００８２】
さらに、制御部３０３は、自サーバ管理エリア数およびIPアドレスが前後のArea Server３０Aから通知された他サーバ管理エリア数に基づき、その他サーバ管理エリア数の通知を受けたArea Server３０Aに対するArea Server３０AへのAreaの偏りの程度を求め、その偏りの程度が閾値を超えている場合には、その他サーバ管理エリア数の通知を受けたArea Server３０AにAreaの再配置を行う。
【００８３】
以下、制御部３０３の各ブロックについて説明する。
【００８４】
メモリ領域３０４には、自サーバ管理エリア数、および、Area Server３０Aと同じグループに属し、IPアドレスがArea Server３０Aの前後のArea Server３０Aから通知された他サーバ管理エリア数が記憶される。
【００８５】
図６は、メモリ領域３０４の構成を示す図である。なお、図６は、Area Server３０−２のメモリ領域３０４の構成を示す図である。
【００８６】
図６に示すように、メモリ領域３０４においては、Area Server３０−２の次にIPアドレスが小さい（１つ上位の）Area Server３０−１（IPアドレス：１０．０．０．１）から通知された、Area Server３０−１が管理するAreaの数と、Area Server３０−１に対するArea Server３０−２へのAreaの偏りの程度がプロパティファイルに記憶されている閾値以上となった状態の持続時間と、Area Server３０−２が現在管理しているAreaの数と、Area Server３０−２が前回通知したAreaの数と、Area Server３０−２の次にIPアドレスが大きい（１つ下位の）Area Server３０−３（IPアドレス：１０．０．０．３）から通知された、Area Server３０−３が管理するAreaの数と、Area Server３０−３に対するArea Server３０−２へのAreaの偏りの程度がプロパティファイルに記憶されている閾値以上となった状態の持続時間と、が記憶される。
【００８７】
なお、例えば、Group1内には、Area Server３０−１よりも上位のArea Serverは存在しない。この場合、Area Server３０−１のメモリ領域３０４においては、図７に示すように、上位のArea Serverから通知されたAreaの数として、特別な値、例えば、負値（−１など）あるいはNULLなどが設定される。
【００８８】
再び、図４を参照すると、メモリ領域３０５には、図８に示すように、Area Server３０Aが属するGroup1のGroup Server３０−２およびMaster Server２０のロケーション（IPアドレス）が記憶される。
【００８９】
Area分割部３０６は、Area Server３０Aで管理されているAreaのサイズを監視し、Areaのサイズが所定の閾値に達すると、そのAreaを２つのAreaに分割する。
【００９０】
Area再配置部３０７は、IPアドレスがArea Server３０Aの前後のArea Server３０Aから他サーバ管理エリア数の通知を受けると、自サーバ管理エリア数および通知された他サーバ管理エリア数に基づき、その他サーバ管理エリア数の通知を受けたArea Server３０Aに対するArea Server３０AへのAreaの偏りの程度を求め、求めたAreaの偏りの程度がプロパティファイルに記憶されている偏りの程度の閾値を超えているかを判定する。また、Area再配置部３０７は、他サーバ管理エリア数の通知を受けたArea Server３０Aに対するArea Server３０AへのAreaの偏りの程度が閾値を越えている場合には、Area Server３０AへのAreaの偏りの程度が閾値を超える状態の持続時間が、プロパティファイルに記憶されている偏り持続時間を越えたか否かを判定する。Area Server３０AへのAreaの偏りの程度が閾値を越える状態の持続時間が偏り持続時間を越えると、Area再配置部３０７は、その他サーバ管理エリア数の通知を受けたArea Server３０AにAreaの再配置を行う。
【００９１】
次に、Group Server３０Gの構成について、図９を参照して説明する。なお、上述したように、Group Server３０Gは、Area Server３０Aの中から任命される。したがって、Group Server３０Gは、上述したArea Server３０Aが有する構成を全て包含する。そのため、図９においては、図４と同様の構成については同じ符号を付し、説明を省略する。
【００９２】
Disk領域３０２は、プロパティファイル、Areaリストに加えて、Area Serverリストを記憶している。
【００９３】
図１０は、Area Serverリストの構成を示す図である。なお、図１０は、Group Server３０−２のDisk領域３０２に記憶されるArea Serverリストの構成を示す図である。
【００９４】
図１０に示すように、Area Serverリストとして、Group1に属するArea Server３０Aごとに、そのArea Server３０Aのロケーション（IPアドレス）と、そのArea Server３０Aが管理するAreaに含まれるRowの中で最も小さいKeyであるStartRowKeyと、そのArea Server３０Aが管理するAreaに含まれるRowの中で最も大きいKeyであるStopRowKeyと、が対応付けて記憶される。Area Serverリストにおいては、各Area Server３０Aのロケーションに応じて昇順にソート済みである。そのため、２分探索などにより高速な探索が可能な状態となっている。
【００９５】
データの追加が行われる場合には、そのデータをValueとするRowの格納先は、StartKey＜そのRowのKey≦StopKeyとなるAreaが選択される。ここで、Keyの大小は、辞書順の大小で比較される。したがって、例えば、Keyが、"Key30abc"（＞"Key30"）であるRow、あるいは、Keyが、"Key60"であるRowは、Area Server３０−２（IPアドレス：１０．０．０．２）が管理先として選択される。
【００９６】
再び、図９を参照すると、制御部３０３は、同じグループに属する全てのArea Server３０AからそのArea Server３０Aが管理するAreaの数を取得し、所定のイベントを契機として、通信部３０１を介して、取得したAreaの数の合計（自グループ管理エリア数）を、Group Server３０Gの次にIPアドレスが小さい（１つ上位の）Group Server３０GおよびGroup Server３０Gの次にIPアドレスが大きい（１つ下位の）Group Server３０G、すなわち、IPアドレスがGroup Server３０Gの前後のGroup Server３０Gに通知する。なお、制御部３０３は、プロパティファイルに記憶されている通知頻度で、あるいは、IPアドレスがGroup Server３０Gの前後のGroup Server３０Gから、そのGroup Serverが属するグループの全てのArea Server３０Aで管理されているAreaの数の合計（他グループ管理エリア数）が通知された際の応答として、自グループ管理エリア数を通知する。制御部３０３は、自グループ管理エリア数および通知された他グループ管理エリア数を記憶領域４０１に記憶させる。
【００９７】
図１１は、記憶領域４０１の構成を示す図である。なお、図１１は、Group Server３０−５のメモリ領域４０１の構成を示す図である。
【００９８】
図１１に示すように、記憶領域４０１においては、Area Server３０−５の次にIPアドレスが小さい（１つ上位の）Group Server３０−２（IPアドレス：１０．０．０．２）から通知されたAreaの数と、Group Server３０−５が属するグループの全てのArea Server３０Aで管理されているAreaの数と、Area Server３０−５の次にIPアドレスが大きい（１つ下位の）Area Server３０−８から通知されたAreaの数と、が記憶される。
【００９９】
ここで、例えば、Group Server３０−２よりも上位のGroup Serverは存在しない。この場合、Group Server３０−２のメモリ領域４０１においては、図１２に示すように、上位のGroup Serverから通知されたAreaの数として、特別な値、例えば、負値（−１など）あるいはNULLなどが設定される。
【０１００】
再び、図９を参照すると、制御部３０３は、IPアドレスがGroup Server３０Gの前後のGroup Server３０Gから他グループ管理エリア数が通知を受けると、自グループ管理エリア数および通知された他サーバ管理エリア数に基づき、その他グループ管理エリア数の通知を受けたGroup Server３０Gが属するグループに対するGroup Server３０Gが属するグループへのAreaの偏りの程度を求め、その偏りの程度が閾値を超えている場合には、その他グループ管理エリア数の通知を受けたGroup Server３０Gが属するグループのArea Server３０Aに、Group Server３０Gが属するグループのArea Server３０で管理されているAreaの再配置を行う。
【０１０１】
次に、本実施形態の分散システム１の動作について説明する。
【０１０２】
まず、Group内でのArea再配置時の動作について説明する。
【０１０３】
図１３は、Area Server３０−１〜３０−３が属するGroup1内でのArea再配置時の動作を示す図である。
【０１０４】
図１３においては、Area Server３０−１〜３０−３のDisk領域３０２のプロパティファイルには、自サーバ管理エリア数の通知頻度として、自サーバ管理エリア数が前回の通知時から５０増加した場合に他のArea Serverに通知を行い、Areaの偏りの程度の閾値を自グループ管理エリア数の２０％とし、偏り状態の持続時間として、Areaの偏りの程度が閾値を越える状態が２回続いた場合にArea再配置を行う旨が記憶されているものとする。また、以下では、Area Server３０−１（IPアドレス：１０．０．０．１）が管理するAreaの数は７９０であり、Area Server３０−２（IPアドレス：１０．０．０．２）が管理するAreaの数は９５０であり、Area Server３０−３（IPアドレス：１０．０．０．３）が管理するAreaの数は９００であるとする（状態１）。
【０１０５】
以下では、Area Server３０−２を構成する各部の動作を中心に説明を行う。
【０１０６】
状態１において、Area Server３０−２の通信部３０１を介した自サーバ管理エリア数、および、Group1に属し、IPアドレスがArea Server３０−２の前後のArea Server３０−１，３０−３が管理するAreaの数の通知が行われ、Area Server３０−１〜３０−３それぞれが管理するAreaの数がArea Server３０−２のメモリ領域３０４に記憶される。
【０１０７】
状態２において、Area Server３０−２の自サーバ管理エリア数が５０増加したとする。プロパティファイルには、自サーバ管理エリア数が５０増加した場合に通知を行う旨が記憶されているので、Area Server３０−２の通信部３０１は、自サーバ管理エリア数（１０００）をArea Server３０−１，３０−３に通知する。また、通信部３０１は、その通知に応じて、Area Server３０−１，３０−３から、各Area Serverが管理するAreaの数の通知を受ける。ここでは、Area Server３０−１から通知されたAreaの数は７９０であり、Area Server３０−３から通知されたAreaの数は９００であるとする。Area Server３０−２のメモリ領域３０４には、Area Server３０−１〜３０−３のそれぞれが管理するAreaの数が記憶される。
【０１０８】
次に、Area Server３０−２のArea再配置部３０７は、自サーバ管理エリア数とArea Server３０−１，３０−３から通知されたAreaの数との差が偏りの程度の閾値以上であるか否かを判定する。上述したように、プロパティファイルには、自サーバ管理エリア数の２０％を偏りの程度の閾値とする旨が記憶されている。自サーバ管理エリア数は１０００であるため、偏りの程度の閾値は２００となる。したがって、Area再配置部３０７は、自サーバ管理エリア数とArea Server３０−１，３０−３から通知されたAreaの数との差が、２００を超えるか否かを判定する。上述したように、Area Server３０−１から通知されたAreaの数は７９０であるので、自サーバ管理エリア数との差は２１０となる。また、Area Server３０−３から通知されたAreaの数は９００であるので、自サーバ管理エリア数との差は１００となる。自サーバ管理エリア数とArea Server３０−１から通知されたAreaの数との差が偏りの程度の閾値である２００を超えるので、Area再配置部３０７は、メモリ領域３０４にArea Server３０−１に対するArea Server３０−２へのAreaの偏り程度が閾値以上となった状態の持続時間として「１」を記憶させる。
【０１０９】
状態３において、自サーバ管理エリア数がさらに５０増加したとすると、通信部３０１は、自サーバ管理エリア数（１０５０）をArea Server３０−１，３０−３に通知する。また、通信部３０１は、その通知に応じて、Area Server３０−１，３０−３から、各Area Serverが管理するAreaの数の通知を受ける。ここでは、Area Server３０−１から通知されたAreaの数は８００であり、Area Server３０−３から通知されたAreaの数は９５０であるとする。メモリ領域３０４には、Area Server３０−１〜３０−３のそれぞれが管理するAreaの数が記憶される。
【０１１０】
次に、Area再配置部３０７は、自サーバ管理エリア数とArea Server３０−１，３０−３から通知されたAreaの数との差が、偏りの程度の閾値以上であるか否かを判定する。上述したように、プロパティファイルには、自サーバ管理エリア数の２０％を偏りの程度の閾値とする旨が記憶されており、自サーバ管理エリア数は１０５０であるため、偏りの程度の閾値は２１０となる。したがって、Area再配置部３０７は、自サーバ管理エリア数とArea Server３０−１，３０−３から通知されたAreaの数との差が、２１０を超えるか否かを判定する。上述したように、Area Server３０−１から通知されたAreaの数は８００であるので、自サーバ管理エリア数との差は２５０となる。また、Area Server３０−３から通知されたAreaの数は９５０であるため、自サーバ管理エリア数との差は１００となる。自サーバ管理エリア数とArea Server３０−１から通知されたAreaの数との差が偏りの程度の閾値である２１０を超えるので、Area再配置部３０７は、メモリ領域３０４に記憶されている、Area Server３０−１に対するArea Server３０−２へのAreaの偏りの程度が閾値以上となった状態の持続時間を「１」から「２」に更新する。
【０１１１】
上述したように、プロパティファイルには、Areaの偏りの程度が閾値を越える状態が２回続いた場合にArea再配置を行う旨が記憶されているので、Area再配置部３０７は、Area Server３０−１をAreaの再配置先と決定し、Area Server３０−２で管理されているAreaのうち、所定数のAreaのArea Server３０−１への再配置を行う。
【０１１２】
ここで、Area再配置部３０７は、例えば、自サーバ管理エリア数とArea Server３０−１から通知されたAreaの数との差が２５０であるので、その半分、すなわち、１２５だけAreaをArea Server３０−１に再配置する（状態４）。その結果、Area Server３０−１が管理するAreaの数とArea Server３０−２が管理するAreaの数とは同数となり、Area Server３０−２の負荷が分散される。
【０１１３】
また、Area再配置部３０７は、各Area Server３０Aで管理されるAreaに含まれるRowのKey範囲の連続性が保持されるようにAreaの再配置を行う。ここで、上述したように、Area Server３０−１は、Key範囲がKey1〜Key30のRowを含むAreaを管理し、Area Server３０−２は、Key範囲がKey31〜Key60のRowを含むAreaを管理している。この場合、Area Server３０−２のArea再配置部３０７は、Area Server３０−１をAreaの再配置先と決定すると、Area Server３０−２で管理されているAreaのうち、RowのKeyの値が小さいAreaから順に所定数のAreaの再配置を行う。そのため、Areaの再配置後においても、各Area Server３０Aが管理するAreaのKey範囲は連続しているため、Area Serverリストにおいて、Area Server３０Aごとのエントリ数は１つでよい。そのため、Area Serverリストのサイズが増大するのを抑制することができる。
【０１１４】
また、上述したように、Areaの再配置先をIPアドレスが前後のArea Server３０Aとすることで、図２４に示したように、Master Server２０がAreaの再配置先のArea Serverを探し必要がなくなり、Master Server２０の負荷を低減することができる。
【０１１５】
次に、Group間でのArea再配置時の動作について説明する。
【０１１６】
図１４は、Group間でのArea再配置時の動作を示す図である。
【０１１７】
なお、図１４においては、Group Server３０−２，３０−５，３０−８のDisk領域３０２のプロパティファイルには、通知頻度として、自グループ管理エリア数が前回の通知時から２００増加した場合に他のGroup Serverへの通知を行い、Areaの偏りの程度の閾値を自グループ管理エリア数の２０％とし、偏り状態の持続時間として、Areaの偏りの程度が閾値を越える状態が２回続いた場合にArea再配置を行う旨が記憶されているものとする。また、以下では、Group1に属するArea Server３０−１〜３０−３で管理されているAreaの数の合計が２１００であり、Group2に属するArea Server３０−４〜３０−６で管理されているAreaの数の合計が２５００であり、Group3に属するArea Server３０−７〜３０−９で管理されているAreaの数の合計が２５００であるとする（状態１）。
【０１１８】
以下では、Group Server３０−５（Area Server３０−５）を構成する各部の動作を中心に説明を行う。
【０１１９】
状態１において、Group Server３０−５の通信部３０１を介した自グループ管理エリア数、および、Group1,3の各々に属する全てのArea Server３０Aで管理されているAreaの数の合計の通知が行われ、各Groupに属するすべてのArea Server３０Aで管理されているAreaの数の合計がGroup Server３０−２のメモリ領域３０４に記憶される。
【０１２０】
状態２において、自グループ管理エリア数が２００増加したとする。プロパティファイルには、自グループ管理エリア数が２００増加した場合に通知を行う旨が記憶されているので、Group Server３０−５の通信部３０１は、自グループ管理エリア数（２７００）を、Group Server３０−２，３０−８に通知する。また、通信部３０１は、その通知に応じて、Group Server３０−２からはGroup1に属する全てのArea Server３０Aで管理されているAreaの数の合計を通知され、Group Server３０−８からはGroup3に属する全てのArea Server３０Aで管理されているAreaの数の合計を通知される。ここでは、Group Server３０−２から通知されたAreaの数は２１５０であり、Group Server３０−８から通知されたAreaの数は２５００であるとする。Group Server３０−５のメモリ領域３０４には、Group1〜Group3に属する各Area Serverで管理されているAreaの数の合計が記憶される。
【０１２１】
次に、Group Server３０−５のArea再配置部３０７は、自グループ管理エリア数とGroup Server３０−２，３０−８から通知されたAreaの数との差が偏りの程度の閾値以上であるか否かを判定する。上述したように、プロパティファイルには、自グループ管理エリア数の２０％を偏りの程度の閾値とする旨が記載されている。自グループ管理エリア数は２７００であるため、偏りの程度の閾値は５４０となる。したがって、Area再配置部３０７は、自グループ管理エリア数とGroup Server３０−２，３０−８から通知されたAreaの数との差が、５４０を超えるか否かを判定する。上述したように、Group Server３０−２から通知されたAreaの数は２１５０であるので、自グループ管理エリア数との差は５５０となる。また、Group Server３０−８から通知されたAreaの数は２５００であるので、自グループ管理エリア数との差は２００となる。自グループ管理エリア数とGroup Server３０−２から通知されたAreaの数との差が偏りの程度の閾値である５４０を超えるので、Area再配置部３０７は、メモリ領域３０４にGroup1に対するGroup2へのAreaの偏りの程度が閾値以上となった状態の持続時間として「１」を記憶させる。
【０１２２】
状態３において、自グループ管理エリア数がさらに２００増加したとすると、通信部３０１は、自グループ管理エリア数（２９００）をGroup Server３０−２，３０−８に通知する。また、通信部３０１は、その通知に応じて、Group Server３０−２からはGroup1に属する全てのArea Server３０Aで管理されているAreaの数の合計を通知され、Group Server３０−８からはGroup3に属する全てのArea Server３０Aで管理されているAreaの数の合計を通知される。ここでは、Group Server３０−２から通知されたAreaの数は２２００であり、Group Server３０−８から通知されたAreaの数は２５００であるとする。Group Server３０−５のメモリ領域３０４には、Group1〜Group3に属する全てのArea Serverで管理されているAreaの数の合計が記憶される。
【０１２３】
次に、Area再配置部３０７は、自グループ管理エリア数とGroup Server３０−２，３０−８から通知されたAreaの数との差が偏りの程度の閾値以上であるか否かを判定する。上述したように、プロパティファイルには、自グループ管理エリア数の２０％とする旨が記載されており、自グループ管理エリア数は２９００であるため、偏りの程度の閾値は５８０となる。したがって、Area再配置部３０７は、自グループ管理エリア数と、Group Server３０−２，３０−８から通知されたAreaの数との差が、５８０を超えるか否かを判定する。上述したように、Group Server３０−２から通知されたAreaの数は２２００であるので、自グループ管理エリア数との差は７００となる。また、Group Server３０−８から通知されたAreaの数は２５００であるので、自グループ管理エリア数との差は４００となる。自グループ管理エリア数とGroup Server３０−２から通知されたAreaの数との差が偏りの程度の閾値である５８０を超えるので、Area再配置部３０７は、メモリ領域３０４に記憶されている、Group1に対するGroup2へのAreaの偏りの程度が閾値以上となった状態の持続時間を「１」から「２」に更新する。
【０１２４】
上述したように、プロパティファイルには、Areaの偏りの程度が閾値を越える状態が２回続いた場合にArea再配置を行う旨が記憶されているので、Area再配置部３０７は、Group2に属するArea Serverで管理されているAreaのGroup1に属するArea Serverへの再配置を行うと決定し、Group2に属するArea Serverで管理されているAreaのうち、所定数のAreaのGroup1に属するArea Serverへの再配置を行う。
【０１２５】
ここで、Area再配置部３０７は、例えば、自グループ管理エリア数とGroup Server３０−２から通知されたAreaの数との差が７００であるので、その半分、すなわち、３５０だけAreaをGroup1に属するArea Serverに再配置する（状態４）。その結果、Group2に属する各Area Serverで管理されているAreaの数の合計とGroup1に属する各Area Serverで管理されているAreaの数の合計とは同数となり、Group2に属する各Area Serverの負荷が分散される。
【０１２６】
また、Area再配置部３０７は、各グループの担当のKey範囲の連続性が保持されるようにAreaの再配置を行う。ここで、上述したように、Group1に属するGroup Server３０−２の担当のKey範囲はKey1〜Key100であり、Group2に属するGroup Server３０−５の担当のKey範囲はKey101〜Key200である。この場合、Group Server３０−５のArea再配置部３０７は、Group1に属するArea Serverへの再配置を行うと決定すると、Group2に属する各Area Serverで管理されているAreaのうち、Rowの値が小さいAreaから順に所定数のAreaの再配置を行う。そのため、Areaの再配置後においても、各グループのGroup Server３０Gが担当するKey範囲は連続しているため、Group Serverリストにおいて、Group Server３０Gごとのエントリ数は１つでよい。そのため、Group Serverリストのサイズが増大するのを抑制することができる。
【０１２７】
次に、Area Server起動時のMaster Server２０の動作について説明する。
【０１２８】
図１５は、Area Server３０Aの起動時のMaster Server２０の動作を示すシーケンス図である。
【０１２９】
Area Server３０Aの起動時には、ネットワークを介してサーバ間で通信を行うための分散ロックシステムなどにより、Master Server２０にArea Server３０Aが起動プロセスを開始した旨が通知される。
【０１３０】
Master Server２０は、Disk領域２０２に記憶されているプロパティファイルから全Area Server３０Aのロケーション一覧、および、Group数を読み込む（ステップS１０１）。
【０１３１】
次に、Master Server２０は、Area Server３０Aから起動プロセスを開始した旨が通知されると、自身の稼働を知らせる稼動通知をそのArea Server３０Aに行うとともに、分散システムにおいて担当するAreaを復元する旨を依頼する再開依頼を行う（ステップS１０２）。
【０１３２】
次に、Master Server２０は、読み込んだGroup数だけGroupリストにエントリを作成する。また、Master Server２０は、管理するTableに含まれるRowのKey範囲をグループ数でほぼ等分となるように分割する。
【０１３３】
次に、Master Server２０は、稼働中のArea Server３０Aを読み込んだグループ数のグループにグループ分けを行う。また、Master Server２０は、グループ毎に、そのグループに属するArea Server３０Aのうち、１つのArea Server３０AをGroup Serverと決定する（ステップS１０３）。上述したように、同じグループに属するArea Server３０Aのうち、中間のロケーションに位置するArea Server３０A（IPアドレスが最大または最小ではないArea Server３０A）がGroup Serverに任命される。そのため、Group間でのArea再配置が行われる場合にも、特定のArea Server３０Aの負荷が高くなるのを防ぐことができる。
【０１３４】
図１５においては、Master Server２０は、同じグループに属するArea Server３０−１〜３０−３のうち、Area Server３０−２をGroup Serverに決定したとする。Master Server２０は、Area Server３０−２にArea Server３０−１〜３０−３が属するグループのGroup Serverに任命した旨を通知する（ステップS１０４）また、Master Server２０は、グループ数でほぼ等分となるように分割したKey範囲のうち、そのグループの担当のKey範囲をGroup Serverに任命したArea Server３０−２に通知する。グループのGroup Serverに任命されたArea Server３０−２は、そのグループに属するArea Server３０Aの数だけArea Serverリストにエントリを作成する。また、Area Server３０−２は、Master Server２０から通知されたKey範囲をそのグループに属するArea Server３０Aの数でほぼ等分し、各Area Server３０Aに分割したKey範囲のRowを含むAreaを管理させる。
【０１３５】
系全体が起動すると、Master Server２０は、分散ロックシステムなどにより、Area Server３０A、Group Server３０Gの死活監視を行う。
【０１３６】
図１６は、クライアント１０のデータ参照時の動作を示すシーケンス図である。
【０１３７】
なお、図１６においては、クライアント１０は、キャッシュ機能を有しているものとする。また、図１６においては、URL（Uniform Resource Locator）がhttp://www.goo.ne.jp/?TH=3のWebコンテンツを収集日時によらず全て取得する旨がクライアント１０に入力されたとする。この場合、クライアント１０は、例えば、図１７に示すAPI（Application Program Interface）を発行する。
【０１３８】
まず、クライアント１０は、図１７に示すAPIにおけるRowKeyの値（set_rowKey関数に指定されたURL情報）に対応するキャッシュを記憶しているか否かを判定する（ステップS２０１）。RowKeyの値に対応するキャッシュを記憶している場合には、クライアント１０は、直接、そのキャッシュに示されるロケーションのArea Server３０Aに直接アクセスし、所望のデータを取得する。
【０１３９】
RowKeyの値に対応するキャッシュを記憶していない場合には、クライアント１０は、Master Server２０、Group Server３０G、Area Server３０Aの順にロケーション解決を行い、所望のデータを取得する。具体的には、まず、クライアント１０は、図１７に示すAPIにおけるRowKeyの値を担当のKey範囲とするGroup Server３０Gのロケーションの取得要求をMaster Server２０に行う（ステップS２０２）。次に、クライアント１０は、RowKeyの値をキーとして、Master Server２０で記憶されているGroupリスト（昇順でソート済み）のStartRowKeyの値を参照し、そのRowKeyの値を担当のKey範囲とするGroup Server３０Gのロケーションを２分探索により取得する。
【０１４０】
次に、クライアント１０は、ロケーションを取得したGroup Server３０Gに、APIにおけるRowKeyの値を担当のKey範囲とするArea Server３０Aのロケーションの取得要求を行う（ステップS２０３）。次に、クライアント１０は、RowKeyの値をキーとして、Group Server３０Gで記憶されているArea Serverリスト（昇順でソート済み）のStartRowKeyの値を参照し、そのRowKeyの値を担当のKey範囲とするArea Server３０Aののロケーションを２分探索により取得する。
【０１４１】
次に、クライアント１０は、ロケーションを取得したArea Server３０Aにデータの取得要求を行い（ステップS２０４）、所望のデータを取得する。
【０１４２】
図１８は、クライアント１０のデータ更新時の動作を示すシーケンス図である。
【０１４３】
なお、図１８においては、クライアント１０は、キャッシュ機能を有しているものとする。また、図１８においては、Table1にURLがhttp://www.goo.ne.jp/?TH=3のWebコンテンツを格納する旨がクライアント１０に入力されたとする。この場合、クライアント１０は、例えば、図１９に示すAPI（Application Program Interface）を発行する。
【０１４４】
まず、クライアント１０は、図１９に示すAPIにおけるRowKeyの値に対応するキャッシュを記憶しているか否かを判定する（ステップS３０１）。RowKeyの値に対応するキャッシュを記憶している場合には、クライアント１０は、直接、そのキャッシュに示されるロケーションのArea Server３０Aに直接アクセスし、所望のデータを取得する。
【０１４５】
RowKeyの値に対応するキャッシュを記憶していない場合には、クライアント１０は、Master Server２０、Group Server３０G、Area Server３０Aの順にロケーション解決を行い、Table1へのデータの格納を行う。具体的には、まず、クライアント１０は、図１９に示すAPIにおけるRowKeyの値を担当のKey範囲とするGroup Server３０Gのロケーションの取得要求をMaster Server２０に行う（ステップS３０２）。次に、クライアント１０は、RowKeyの値をキーとして、Master Server２０で記憶されているGroupリスト（昇順でソート済み）のStartRowKeyの値を参照し、そのRowKeyの値を担当のKey範囲とするGroup Server３０Gのロケーションを２分探索により取得する。
【０１４６】
次に、クライアント１０は、ロケーションを取得したGroup Server３０Gに、APIにおけるRowKeyの値を担当のKey範囲とするArea Server３０Aのロケーションの取得要求を行う（ステップS３０３）。次に、クライアント１０は、RowKeyの値をキーとして、Group Server３０Gで記憶されているArea Serverリスト（昇順でソート済み）のStartRowKeyの値を参照し、そのRowKeyの値を担当のKey範囲とするArea Server３０Aののロケーションを２分探索により取得する。
【０１４７】
次に、クライアント１０は、ロケーションを取得したArea Server３０Aにデータの更新要求を行い（ステップＳ３０４）、そのArea Server３０Aで管理されている、Table1の所定のAreaにデータを追加で格納する。この結果、Table1には、RowKeyの値が「http:www.goo.ne.jp/?TH=3」、Column名が「contents」、タイプスタンプが「201102071300」、Valueが「＜html＞・・・＜/html＞」の１レコードがひとまとまりでTable1に追加される。
【０１４８】
なお、例えば、Group1:aa~ff、Group2:gg~kk、・・・というように各グループが担当するRowKeyの値の範囲をMaster Server２０のプロパティファイルに予め記憶させておくことで、データの初期投入時などに特定のArea Server３０Aに負荷が偏るのを防ぐことができる。
【０１４９】
次に、Area分割時のArea Serve３０Aの動作について説明する。
【０１５０】
図２０は、Area分割時のArea Server３０Aの動作を示すシーケンス図である。
【０１５１】
Area Server３０AのArea分割部３０６は、Area Server３０Aで管理されているAreaのサイズを監視し、Areaのサイズが所定の閾値を超えると、そのAreaを２つのAreaに分割する。ここで、Area分割部３０６は、Area３AとArea３Bとのサイズがほぼ等しくなるようなRowKeyを選択して分割を行う。
【０１５２】
次に、Area Server３０Aの通信部３０１は、Area Server３０Aで管理されているAreaの数が、前回の通知時からDisk領域３０２に記憶されているプロパティファイルに含まれる通知頻度に示される所定数だけ増加したか否かを判定する（ステップS４０１）。
【０１５３】
Area Server３０Aで管理されているAreaの数が、前回の通知時から所定数だけ増加している場合には、通信部３０１は、自サーバ管理エリア数を、同じグループに属し、Area Server３０Aの１つ上位の（IPアドレスがArea Server３０Aの次に小さい）Area Server３０Aに通知する（ステップS４０２）。また、通信部３０１は、１つの上位のArea Server３０Aから、その１つの上位のArea Server３０Aで管理されているAreaの数の通知を受ける（ステップS４０３）。また、通信部３０１は、自サーバ管理エリア数を、同じグループに属し、Area Server３０Aの１つ下位の（IPアドレスがそのArea Serverの次に大きい）Area Server３０Aに通知する（ステップS４０４）。また、通信部３０１は、１つの下位のArea Server３０Aから通知、その１つの下位のArea Server３０Aで管理されているAreaの数の通知を受ける（ステップS４０５）。
【０１５４】
自サーバ管理エリア数と、１つ上位および１つ下位のArea Server３０Aから通知されたAreaの数とは、Area Server３０Aのメモリ領域３０４に記憶される。
【０１５５】
次に、Area再配置時のArea Server３０Aの動作について説明する。
【０１５６】
図２１は、Area再配置時のArea Server３０Aの動作を示すシーケンス図である。
【０１５７】
なお、図２１においては、Area Server３０の自サーバ管理エリア数は１０００であり、Area Server３０Aの１つ上位のArea Server３０Aで管理されているAreaの数は８００であり、Area Server３０Aの１つ下位のArea Server３０Aで管理されているAreaの数が９００であるとする。
【０１５８】
Area Server３０Aのエリア再配置部３０７は、１つ上位および１つ下位のArea Server３０Aから、各Area Server３０Aが管理するAreaの数が通知されると、その通知されたAreaの数および自サーバ管理エリア数に基づき、１つ上位および１つ下位のArea Server３０Aに対するArea Server３０AへのAreaの偏りの程度を求める。次に、エリア再配置部３０７は、求めた１つ上位あるいは１つ下位のArea Server３０Aに対するArea Server３０AへのAreaの偏りの程度が偏りの程度の閾値を超えているか否かを判定する。さらに、エリア再配置部３０７は、１つ上位あるいは１つ下位のArea Server３０Aに対するArea Server３０AへのAreaの偏りの程度が閾値を超えている場合には、Areaの偏りの程度が閾値を超えている状態の持続時間が、Disk領域３０２に記憶されているプロパティファイルに含まれる偏り持続時間を越えているか否かを判定する。Areaの偏りの程度が閾値を超えている状態の持続時間が偏り持続時間を越えている場合には、Area再配置部３０７は、Area再配置が必要であると判定する（ステップS５０１）。
【０１５９】
次に、Area再配置部３０７は、再配置を行うAreaの数およびAreaの再配置先のArea Server３０Aを決定する。ここで、１つ上位のArea Serve３０Aで管理されているエリア数が、１つ下位のArea Server３０Aで管理されているエリア数よりも少ないので、Area再配置部３０７は、１つ上位のArea Serve３０AをAreaの再配置先のArea Server３０Aに決定し、例えば、自サーバ管理エリア数と１つ上位のArea Server３０Aで管理されているAreaの数との差（２００）の半分、すなわち、１００だけAreaの再配置を行うと決定する（ステップS５０２）。
【０１６０】
次に、Area再配置部３０７は、１つ上位のArea Server３０Aに、決定したAreaの数だけAreaの再配置を行う（ステップS５０３）。上述したように、１つのArea Server３０Aで管理されているAreaに含まれるRowのKey範囲は連続している。また、各Area Server３０Aで管理されているAreaに含まれるRowのKey範囲は、各Area Server３０AのIPアドレスに順に連続している。ここで、１つ上位のArea Server３０Aで管理されているAreaに含まれるRowのKey範囲が、Area Server３０Aで管理されているAreaに含まれるRowのKey範囲よりも小さいとする。この場合、Area再配置部３０７は、Area Server３０Aで管理されているAreaのうち、RowのKey範囲が小さい順にAreaの再配置を行う。そのため、Area再配置後も、１つのArea Server３０Aで管理されているAreaに含まれるKey範囲の連続性が保持されるとともに、各Area Server３０Aで管理されているAreaに含まれるRowのKey範囲の連続性も保持される。
【０１６１】
次に、Area Server３０Aは、自身が属するグループのGroup Server３０Aに、Area Serverリストの更新を要求する（ステップS５０４）。上述したように、各Area Server３０Aが管理するAreaのKey範囲が連続するようにArea再配置が行われるため、Area Serverリストにおいて、Area Server３０Aごとのエントリ数は１つでよい。そのため、Area Serverリストのサイズが増大するのを抑制することができる。
【０１６２】
次に、Group Serverの再決定時の動作について説明する。
【０１６３】
図２２は、Group Serverの再決定時のMaster Server２０の動作を示すシーケンス図である。
【０１６４】
上述したように、Master Server２０の制御部２０３は、各Area Server３０AのIPアドレスに応じてグループ分けを行い、グループ毎にGroup Serverを決定する。ここで、Area Server３０Aの減設または障害による停止を検出した場合、あるいは、Area Server３０Aの増設を検出すると、制御部２０３は、各Group内に属するArea Server３０Aの数を点検し、Area Server数に偏りがあるか否かを判定する。偏りがある場合は、制御部２０３は、グループの再編成を行う。具体的には、制御部２０３は、メモリ領域２０４に記憶されているロケーションリストに示される稼働中のArea Server３０Aを、Disk領域２０２に記憶されているプロパティファイルの設定に応じてグループ分けする。次に、制御部２０３は、グループ毎に、そのグループ内のGroup Server数は１であるか否かを判定する。１つのグループ内に２以上のGroup Server３０Gが存在する場合には、１つのGroup Serverだけを残し、他のGroup Serverを解任する。また、１つのグループ内に１つもGroup Server３０Gが存在しない場合には、制御部２０３は、そのグループ内の１つのArea Server３０AをGroup Serverに任命する（ステップS６０１）。
【０１６５】
次に、Master Server２０の通信部２０１は、Group Serverを解任されたArea Server３０Aにその旨を通知する（ステップS６０２）。Group Serverを解任されると、通常のArea Server３０Aに戻る。また、通信部２０１は、新たにGroup Serverに任命されたArea Server３０Aにその旨を通知する（ステップS６０３）。
【０１６６】
なお、Area Server３０Aの減設、あるいは、障害による停止を検出すると、Master Server２０は、そのArea Server３０AのDisk領域に記憶されているAreaリストを参照し、そのArea Server３０Aで管理されていた全Areaを、即時に隣接するArea Serverに再配置する。その結果、新たにAreaを管理することになったArea Server３０Aは、一時的に多くのAreaを管理することになり、そのArea Server３０へのAreaの偏りが発生する。しかし、この一時的なAreaの偏りは、例えば、図１３に示される処理が繰り返されることにより、徐々に均等化される。また、Area Server３０Aの増設を検出すると、Master Server２０は、その増設されたArea Server３０Aと同じグループに属し、その増設されたArea Server３０Aに隣接するArea Server３０Aに管理されているAreaを、その増設されたArea Server３０Aに再配置する。
【０１６７】
また、Master Server２０は、Group Server３０Gの障害などによる停止を検出すると、図２２に示される処理を行い、Area Server３０Aを新たにGroup Serverに任命する。
【０１６８】
このように、本実施形態によれば、Area Server３０Aは、他のArea Server３０Aに対する自身へのAreaの偏りの程度が所定の閾値を超えたか否かを判定し、自身へのAreaの偏りの程度が所定の閾値を超えた場合に、その他のArea Server３０AへのArea再配置を行う。
【０１６９】
そのため、Area分割毎にMeta Table（Meta Area）の更新が行われることがなくなるので、Meta Table（Meta Area）を管理するArea Server３０Aへのアクセスが少なくなり、負荷を低減させることができる。
【０１７０】
また、本実施形態によれば、Master Server２０は、複数のRowのKey範囲をソートし、Group Server３０GのIPアドレスの順に、Key範囲のソート順が保持されるように、Key範囲の割り当てを行うとともに、Group Server３０G毎に、各Group Server３０Gに割り当てたKey範囲を記憶する（Group Serverリスト）。また、Group Server３０Gは、自グループに属するArea Server３０A毎に、各Area Server３０AのIPアドレスの順にKey範囲のソート順が保持されるように割り当てられたKey範囲を記憶する（Area Serverリスト）。
【０１７１】
上述したように、Area数は１００，０００以上のオーダになる。そのため、Area毎にエントリを作成すると、Meta Table（Meta Area）のエントリ数もArea数は１００，０００以上のオーダになる。一方、本実施形態のように、Group Server３０G毎に、あるいは、Area Server３０毎に、担当するKey範囲を記憶することで、全てのGroup ServerリストおよびArea Serverリストのエントリ数を合わせても、Area Server３０Aの数と同じになる。一般に、分散システム１におけるArea Serverの数は、１００〜１０００のオーダなので、Group ServerリストおよびArea Serverリストのエントリ数も、１００〜１０００のオーダとなり、Area毎にエントリを作成する場合と比べて、２桁以上、エントリ数を削減することができる。
【０１７２】
また、Master Server２０がGroupリストを記憶し、Group Server３０GがArea Serverリストを記憶し、データの参照、更新時には、Groupリスト、Area Serverリスト、User Areaの順に辿ることで、従来と同様に、３段階のロケーション解決を行うことができる。
【０１７３】
なお、上述した実施形態においては、Master Server２０は、所定のKey範囲をGroup Server３０Gに割り当てるとともに、そのGroup ServerのロケーションとそのKey範囲とをGroupリストとして記憶し、Group Server３０Gは、Master Server２０から割り当てられたKey範囲のRowを含むAreaを同じグループに属するArea Server３０Aで分散して管理させるとともに、Area Server３０AのロケーションとそのArea Server３０Aが管理するAreaに含まれるRowのKey範囲とをArea Serverリストとして記憶する例を用いて説明したが、これに限られるものではない。例えば、Master Server２０が、各Area Server３０AにKey範囲を割り当て、割り当てたKey範囲のRowを含むAreaを監理させるとともに、Area Server３０AのロケーションとそのArea Server３０Aが管理するAreaに含まれるRowのKey範囲と記憶するようにしてもよい。
【０１７４】
なお、本発明のArea Serverにおいて行われる方法は、コンピュータに実行させるためのプログラムに適用してもよい。また、そのプログラムを記憶媒体に格納することも可能であり、ネットワークを介して外部に提供することも可能である。
【符号の説明】
【０１７５】
１    分散システム
３    Area
１０    クライアント
２０    Master Server
３０−１〜３０−９，３０Ａ    Area Server
３０−２，３０−５，３０−８，３０Ｇ    Group Server
２０１，３０１    通信部
２０２，３０２    Disk領域
２０３，３０３    制御部
２０４，３０４，３０５，４０１    メモリ領域
３０６    Area分割部
３０７    Area再配置部
【図２】
2013025453.tif 000003
【図３】
2013025453.tif 000004
【図４】
2013025453.tif 000005
【図５】
2013025453.tif 000006
【図６】
2013025453.tif 000007
【図７】
2013025453.tif 000008
【図８】
2013025453.tif 000009
【図９】
2013025453.tif 000010
【図１０】
2013025453.tif 000011
【図１１】
2013025453.tif 000012
【図１２】
2013025453.tif 000013
【図１５】
2013025453.tif 000014
【図１６】
2013025453.tif 000015
【図１７】
2013025453.tif 000016
【図１８】
2013025453.tif 000017
【図１９】
2013025453.tif 000018
【図２０】
2013025453.tif 000019
【図２１】
2013025453.tif 000020
【図２２】
2013025453.tif 000021
【図１】
2013025453.tif 000022
【図１３】
2013025453.tif 000023
【図１４】
2013025453.tif 000024
【図２３】
2013025453.tif 000025
【図２４】
2013025453.tif 000026
【図２５】
2013025453.tif 000027