(57)【要約】【課題】負荷分散性の低下を招くノード間の負荷の偏りを事前に検出する。【解決手段】ノード１は、複数の仮想ＩＤを有することで、前記仮想ＩＤで識別される複数の仮想ノードを構成できる。そして、仮想ＩＤに基づいて、ノード１の各々が構成する仮想ノードが担当するノード担当領域のサイズを求め、加算することで、ノード１各々のノード担当領域のサイズを算出し、複数のノード１間の第１の変動係数を算出し、通常時の負荷の偏りを評価する。また、ノード１は、原本データを担当する所有者ノードおよび複製データを担当するバディとして機能する。そして、仮想ＩＤに基づいて、所有者ノードのノード担当領域のサイズのうち、バディが担当する複製データに対応する原本データを所有者ノードが担当する領域である部分担当領域のサイズを、所有者ノードごとに算出し、複数のノード１間の第２の変動係数を算出し、ノード離脱時の負荷の偏りを評価する。【選択図】図１
2014164554.tif 000002
【特許請求の範囲】
【請求項１】
クラスタを構成し、制御部および記憶部を備える複数のノードと、クライアントからのメッセージを参照することで抽出できるデータ識別子に基づいて、前記データ識別子で識別されるデータを記憶する前記ノードに前記メッセージを振り分ける振り分け装置と、を備える負荷分散判定システムであって、
前記ノードは、複数の仮想的なノード識別子を有することで、前記ノード識別子で識別される複数の仮想ノードを構成し、
前記記憶部は、
前記データと、
前記ノード識別子を、前記クラスタを構成するノードごとに記憶するノード識別子管理テーブルと、を記憶しており、
前記制御部は、
前記ノード識別子管理テーブルが記憶する前記ノード識別子に基づいて、前記クラスタを構成する前記複数のノードの各々が構成する前記仮想ノードが担当するノード担当領域のサイズを求め、加算することで、前記クラスタを構成する前記複数のノードのノード担当領域のサイズを算出することと、
前記算出した前記複数のノードのノード担当領域のサイズを用いて、前記複数のノード間の第１の変動係数を算出することと、
前記算出した前記第１の変動係数が第１の所定値を超えた場合、前記負荷分散判定システムの負荷分散性が低下していることを示す警告表示を行うことと、を実行する
ことを特徴とする負荷分散判定システム。
【請求項２】
前記ノードが、前記データを原本データとして担当する所有者ノードおよび前記原本データの複製データを担当するバディとして機能し、前記ノード識別子管理テーブルによって、前記データに対して、前記所有者ノードおよび前記バディを特定するように管理しており、
前記制御部は、
前記ノード識別子管理テーブルが記憶する前記ノード識別子に基づいて、前記所有者ノードの前記ノード担当領域のサイズのうち、前記所有者ノードの前記バディが担当する前記複製データに対応する前記原本データを前記所有者ノードが担当する領域である部分担当領域のサイズを、前記所有者ノードごとに算出することと、
前記算出した前記部分担当領域のサイズを用いて、前記複数のノード間の第２の変動係数を、前記所有者ノードとなる前記ノードごとに算出することと、
前記算出した前記第２の変動係数が第２の所定値を超えた前記ノードが少なくとも１つ存在する場合、前記負荷分散判定システムの負荷分散性が低下していることを示す警告表示を行うことと、を実行する
ことを特徴とする請求項１に記載の負荷分散判定システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク上に分散配置されるノードをクラスタ化してデータを格納する分散処理システムによる負荷分散の技術に関する。
【背景技術】
【０００２】
近年、クラウドコンピューティングの隆盛に伴い、多量のデータの処理や保持を効率的に行うことが求められている。そこで、複数のサーバを協調動作させることにより効率的な処理を実現する分散処理技術が発展している。
【０００３】
分散処理を行う際には、クラスタを構成する各サーバ（以下、「ノード」または「クラスタメンバ」と称する。）が担当するデータを決定する必要がある。このとき、クラスタ全体での処理能力を高めるためには、各ノードが担当するデータ数（データ量）は平均化されていることが望ましい。
【０００４】
代表的なデータの管理手法として、各データのｋｅｙをハッシュ関数にかけた値（以下、「ｈａｓｈ（ｋｅｙ）」と称する。）をノード数Ｎで割った余り、すなわち「ｈａｓｈ（ｋｅｙ） ｍｏｄ Ｎ」を番号として持つノードがデータを管理する手法がある。この場合、各ノードに事前に「０」から「Ｎ−１」までの番号を割り当てていることが前提となる。このような管理手法を用いた場合、ノードを追加したりまたは離脱したりすると、Ｎの値が変化して、多くのデータについて、そのデータの保存（記憶）を担当するノードが変更されるため、担当するデータを再配置することが必要になる。
【０００５】
そこで、ノードの追加または離脱に伴い担当するクラスタメンバが変更になるデータ数を約１／Ｎに抑える方法として、コンシステントハッシュ（Consistent Hashing）法（非特許文献１参照）を用いた管理手法がある。このコンシステントハッシュ法は、Amazon Dynamo（非特許文献２参照）等で用いられる。
【０００６】
このコンシステントハッシュ法を用いたデータ管理手法では、ノードとデータの双方にＩＤ（IDentifier）を割り当てる。そして、データのＩＤから、閉じたＩＤ空間を時計回りに辿った場合に最初に出合ったノードをそのデータの担当とする。ノードに対するＩＤの与え方の例としては、ＩＰ（Internet Protocol）アドレスをハッシュ関数にかけた値（hash（ＩＰアドレス））が挙げられる。
【０００７】
クラスタ構成の分散処理システムでは、各ノードの処理性能が等しい場合には、各ノードが担当するデータ量を等しくする、すなわち、コンシステントハッシュ法のＩＤ空間における、ノード間の距離（以下、「ノード担当領域」と称する。）を等しくすることが望ましい。この点を解決するため、各ノードに仮想的に複数のＩＤを持たせる手法が用いられている（非特許文献１参照）。各ノードが複数の仮想ＩＤを持つことで、仮想ＩＤ毎の担当領域は異なっていても、大数の法則に従いノード担当領域は平均化される。なお、仮想ＩＤを有して構成されるノードを「仮想ノード」と称し、仮想ノードが属するノードを「物理ノード」と称することがある。
【０００８】
多数のデータの管理をクラスタ構成の分散処理システムで実行する場合、あるノードに障害が発生した場合でも他のノードで処理が継続できるように、データの複製を保持することでデータの冗長化を実現している。コンシステントハッシュ法によるデータ管理手法を用いた分散処理システムにおいても、データの冗長化が必要であり、図５に示すような複製データの配置方式をとるものがある。
【０００９】
図５に示すように、コンシステントハッシュ法では、ノード（ノード「１」〜「４」）とデータ（データＡ〜Ｄ。黒丸（●）で表示）の双方にＩＤを割り当て、データのＩＤからＩＤ空間を時計回りに辿り最初に出合ったノードをそのデータの担当として決定する。そして、担当するノードのさらに右隣（時計回りに次）のノードに複製データを担当させる。
【００１０】
例えば、図５において、データＡについては、ＩＤ空間上を時計回りに辿り最初に出合ったノード「１」が担当となり、その複製データについては、ＩＤ空間上でノード「１」の右隣にあたるノード「２」に担当させることとなる。このように原本データおよび複製データを担当するノードを決定することで、ノードが離脱した場合でも複製データを保持しているノードが新しくデータを担当するノードとなることにより処理を継続できるという利点がある。なお、複製データを複数個とる場合には、複製データを担当するノードのさらに右隣のノードに複製データを担当させるようにする。また、原本データを格納し管理するノードを、以下、「所有者ノード」と称することがあり、複製データを格納し管理するノードを、以下、「複製ノード」または「バディ」と称することがある。
【００１１】
なお、分散処理システムを構成するノードが複数の仮想ＩＤを有して仮想ＩＤそれぞれに対応する仮想ノードを構成し、前記仮想ノードをＩＤ空間に配置する場合において、右隣の仮想ノードが自身と同じ物理ノードに属しているときには、その仮想ノードをスキップしてさらに右隣の仮想ノードに複製データを担当させる。また、図５に示す複製データの配置方式に対して、担当するノードのさらに右隣（時計回りに次）のノード以外のノードに複製データを担当させることもできる。
【先行技術文献】
【非特許文献】
【００１２】
【非特許文献１】David karger et al.,“Consistent Hashing and Random Trees:Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web”，［online］，1997，ACM，［平成25年2月5日検索］，インターネット<ＵＲＬ:http://www.akamai.com/dl/technical_publications/ConsistenHashingandRandomTreesDistributedCachingprotocolsforrelievingHotSpotsontheworldwideweb.pdf>
【非特許文献２】Giuseppe DeCandia，et al.，“Dynamo: Amazon’s Highly Available Key-value Store,” SOSP’07, October 14-17, 2007, Stevenson, Washington, USA，［online］、［平成25年2月5日検索］、インターネット<ＵＲＬ:http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf>
【発明の概要】
【発明が解決しようとする課題】
【００１３】
コンシステントハッシュ法によるデータ管理手法は、クラスタを構成するノードの追加や離脱に伴うデータの移行が全データに対する一部のデータに限られるため、クラスタ構成の動的な変更（ノードの追加および離脱）が頻繁に起こるシステムに対して有効である。この特性を活かし、トラヒック変化や管理するデータ量の変化に対して、ノードの追加や離脱を柔軟に行いリソースの利用効率を上げることが可能である。
【００１４】
しかし、ノードの追加および離脱の回数またはタイミングによっては、各ノードが担当するＩＤ空間上のノード担当領域に差が生じてしまい、負荷分散性が低下する場合がある。特に、ノードが離脱するときに関しては、ＩＤ空間において、離脱するノードの右隣のノードがデータを引き継ぐので、ＩＤ空間に配置される各ノードについて、ノード同士の隣接関係が偏っている場合には、ノードの離脱に起因する影響が残りのノード間で偏ってしまい、負荷分散性が低下する。具体的には、引き継がれるデータの多くが特定のノードに移行すること、およびノード離脱後に特定のノードが大きなノード担当領域を有すること、などがある。
【００１５】
図６（ａ）を参照すると、４つのノード「１」、ノード「２」、ノード「３」、ノード「４」がそれぞれ、４つの仮想ノードを有しており、計１６個の仮想ノードがＩＤ空間に配置されている。つまり、ノード「１」は、仮想ノード１−１〜１−４を有しており、ノード「２」は、仮想ノード２−１〜２−４を有しており、ノード「３」は、仮想ノード３−１〜３−４を有しており、ノード「４」は、仮想ノード４−１〜４−４を有している。
【００１６】
ここで、ノード「４」が離脱したとする（図６（ｂ）参照）。すると、仮想ノード４−１が担当していたデータは、仮想ノード１−２が引き継ぐ。仮想ノード４−２が担当していたデータは、仮想ノード１−３が引き継ぐ。仮想ノード４−３が担当していたデータは、仮想ノード３−３が引き継ぐ。仮想ノード４−４が担当していたデータは、仮想ノード１−１が引き継ぐ。仮想ノード単位でいえば、データの引き継ぎ先が分散しているといえるが、物理ノード単位でいえば、データの引き継ぎ先の多くはノード「１」になっており、引き継ぐデータのデータ量に応じた負荷が、残りのノード「１」〜「３」間で偏る。また、ノード離脱後のＩＤ空間において、ノード１のデータの担当領域が相対的に大きくなり、残りのノード「１」〜「３」の間で負荷の偏りが生じる。
【００１７】
クラスタを構成するノードの数が多く、前記ノードが十分な数の仮想ノードを有していれば、ノード間の負荷の偏りを小さくできる。しかし、複数のノードが同時に離脱すること、さまざまなノード追加用のアルゴリズムが存在すること、などを考慮すると、あらゆるタイミングでノード間の負荷の偏りを小さくすることには限界がある。結果的に、負荷分散性は低下し、リソースの利用効率の低下やノードの突発的な離脱に対する信頼性の低下、などといった不都合な事態を招く場合がある。そのような事態に至った場合には、一般的には、サービス運用者等のオペレータがノード間の負荷の偏りを解消するために新たなノードを追加するなどの対策がとられる。しかしながら、そのような事態に陥る前にノード間の負荷の偏りを検出することで、事前に対策をとれることが望ましい。
【００１８】
このような事情に鑑みて、本発明は、負荷分散性の低下を招くノード間の負荷の偏りを事前に検出することを目的とする。
【課題を解決するための手段】
【００１９】
前記した課題を解決するため、請求項１に記載の発明は、クラスタを構成し、制御部および記憶部を備える複数のノードと、クライアントからのメッセージを参照することで抽出できるデータ識別子に基づいて、前記データ識別子で識別されるデータを記憶する前記ノードに前記メッセージを振り分ける振り分け装置と、を備える負荷分散判定システムであって、前記ノードは、複数の仮想的なノード識別子を有することで、前記ノード識別子で識別される複数の仮想ノードを構成し、前記記憶部は、前記データと、前記ノード識別子を、前記クラスタを構成するノードごとに記憶するノード識別子管理テーブルと、を記憶しており、前記制御部は、前記ノード識別子管理テーブルが記憶する前記ノード識別子に基づいて、前記クラスタを構成する前記複数のノードの各々が構成する前記仮想ノードが担当するノード担当領域のサイズを求め、加算することで、前記クラスタを構成する前記複数のノードのノード担当領域のサイズを算出することと、前記算出した前記複数のノードのノード担当領域のサイズを用いて、前記複数のノード間の第１の変動係数を算出することと、前記算出した前記第１の変動係数が第１の所定値を超えた場合、前記負荷分散判定システムの負荷分散性が低下していることを示す警告表示を行うことと、を実行することを特徴とする。
【００２０】
請求項１の発明によれば、負荷分散判定システムの負荷分散性が低下をもたらす負荷の偏りとして、ノードの追加も離脱もない、つまりノード識別子管理テーブルの更新が無い通常時の負荷の偏りを求めることができる。
【００２１】
請求項２に記載の発明は、請求項１に記載の発明において、前記ノードが、前記データを原本データとして担当する所有者ノードおよび前記原本データの複製データを担当するバディとして機能し、前記ノード識別子管理テーブルによって、前記データに対して、前記所有者ノードおよび前記バディを特定するように管理しており、前記制御部は、前記ノード識別子管理テーブルが記憶する前記ノード識別子に基づいて、前記所有者ノードの前記ノード担当領域のサイズのうち、前記所有者ノードの前記バディが担当する前記複製データに対応する前記原本データを前記所有者ノードが担当する領域である部分担当領域のサイズを、前記所有者ノードごとに算出することと、前記算出した前記部分担当領域のサイズを用いて、前記複数のノード間の第２の変動係数を、前記所有者ノードとなる前記ノードごとに算出することと、前記算出した前記第２の変動係数が第２の所定値を超えた前記ノードが少なくとも１つ存在する場合、前記負荷分散判定システムの負荷分散性が低下していることを示す警告表示を行うことと、を実行することを特徴とする。
【００２２】
請求項２の発明によれば、負荷分散判定システムの負荷分散性が低下をもたらす負荷の偏りとして、ノード離脱時に離脱後の残りのノード間に生じる負荷の偏りを、求めることができる。
【発明の効果】
【００２３】
本発明によれば、負荷分散性の低下を招くノード間の負荷の偏りを事前に検出することができる。
【図面の簡単な説明】
【００２４】
【図１】負荷分散判定システムを含む分散処理システムの全体構成を示す図である。
【図２】ノードの構成例を示す機能ブロック図である。
【図３】ノード識別子管理テーブルのデータ構成例を示す図である。
【図４】ノードにおける処理の全体の流れを示すフローチャートである。
【図５】コンシステントハッシュ法によるデータ管理手法を説明するための図である。
【図６】（ａ）ノード「４」の離脱前のＩＤ空間の概念図、（ｂ）ノード「４」の離脱後のＩＤ空間の概念図である。
【発明を実施するための形態】
【００２５】
次に、本発明を実施するための形態（以下、「本実施形態」と称する。）における負荷分散判定システム１００について説明する。
【００２６】
＜分散処理システムの全体構成＞
まず、本実施形態に係る負荷分散判定システム１００を含む分散処理システム１０００の全体構成について説明する。
図１を参照すると、この分散処理システム１０００は、各クライアント２からのメッセージを受け付けるロードバランサ３と、少なくもと１つの振り分け装置４と、クラスタを構成する複数のノード１とを含んで構成される。本実施形態においては、少なくもと１つの振り分け装置４と複数のノード１とを含む構成を、負荷分散判定システム１００として説明する。
【００２７】
ロードバランサ３は、クライアント２からのメッセージを単純なラウンドロビン法等により各振り分け装置４に振り分ける。また、ロードバランサ３は、各振り分け装置４から受信した情報をクライアント２に送信する。
このロードバランサ３は、情報の入出力を行う入出力部、制御部、記憶部を備える（図示省略）。前記記憶部には、各振り分け装置４のＩＰアドレスや、各クライアント２のＩＰアドレス等のアドレス情報が記憶される。前記制御部は、前記記憶部に記憶された振り分け装置４のアドレス情報（ＩＰアドレス等）を管理でき、管理下の振り分け装置４にクライアント２からのメッセージを振り分ける。
【００２８】
振り分け装置４は、受信したメッセージを、例えば、コンシステントハッシュ法等に基づき、各ノード１に振り分ける。また、各ノード１から受信した情報を、ロードバランサ３に送信する。各ノード１は、メッセージ処理を行い、クライアント２にサービスを提供する。
この振り分け装置４は、情報の入出力を行う入出力部、制御部、記憶部を備える（図示省略）。前記記憶部は、ノード１が記憶する後記のノード識別子管理テーブル２００と同等のテーブルを記憶しており、前記制御部は、前記テーブルを用いたノード１の管理を行うことができる。振り分け装置４によるノード１の管理の説明は省略する。
【００２９】
振り分け装置４は、ロードバランサ３等より受信したメッセージを参照し、そのメッセージの処理対象となるデータのkey（データkey：データ識別子）を抽出する。ここで振り分け装置４は、受信したメッセージを参照し、例えば、そのメッセージに付されたデータkeyをそのまま抽出してもよいし、メッセージ内の情報を利用してデータkeyを算出するようにしてもよい。振り分け装置４は、その抽出したデータkeyを用いて、振り分け装置４の記憶部が記憶するノード識別子管理テーブルを参照し、コンシステントハッシュ法に従い、そのメッセージを対象のノード１に振り分ける。
【００３０】
図１においては、振り分け装置４とノード１とを別装置として記載したが、同一サーバ上で別々の機能として動作させることも可能である。また、振り分け装置４も、図１に示すように、クラスタ構成をとることができる。さらに、ロードバランサ３が存在せず、クライアント２から任意の振り分け装置４にメッセージを送信することも可能である。
【００３１】
本実施形態では、分散処理システム１０００のデータ管理手法として、ノード１の離脱時の影響が少ない、コンシステントハッシュ法によるデータ管理手法を例として説明する。ただし、コンシステントハッシュ法に限定されるものではない。また、本実施形態の負荷分散判定システム１００は、ノード１の各々に複数の仮想ＩＤを持たせる手法を採用し、ノード１の各々は、仮想ＩＤが割り当てられた仮想ノードを構成する。また、本実施形態の負荷分散判定システム１００は、図５に示した複製データの配置方式を採用し、コンシステントハッシュ法のＩＤ空間上で右隣（時計回りに次）のノード１に複製データを担当させることとする。しかしながら、本発明は、ノードに仮想ＩＤを持たせない負荷分散判定システムにも、複製データの配置方式を採用しない負荷分散判定システムにも適用できる。また、複数個の複製データを複数個のノードに担当させる負荷分散判定システムにも本発明を適用できる。
【００３２】
図２に示すように、ノード１は、各振り分け装置４と通信可能に接続されると共に、クラスタを構成する自身以外の他のノード１とも通信可能に接続される。そして、ノード１は、クライアント２からのメッセージを受信し、サービスを提供する。
このノード１は、制御部１０と、入出力部１１と、記憶部１２とを含んで構成される。
【００３３】
入出力部１１は、振り分け装置４や、自身以外の他のノード１との間の情報の入出力を行う。また、この入出力部１１は、通信回線を介して情報の送受信を行う通信インタフェースと、不図示のキーボード等の入力手段やモニタ等の出力手段等との間で入出力を行う入出力インタフェースとから構成される。
【００３４】
制御部１０は、ノード１全体の制御を司り、ノード識別子管理部１０１、メッセージ処理部１０２、負荷分散情報計算部１０３、および負荷分散情報判定部１０４といった機能部を含んで構成される。なお、この制御部１０が含む機能部は、例えば、記憶部１２に格納されたプログラムをＣＰＵ（Central Processing Unit）が記憶領域として機能するＲＡＭ（Random Access Memory）に展開し実行することで実現される。なお、前記ＣＰＵを制御部１０の具体例とすることができ、前記ＲＡＭを記憶部１２の具体例とすることができる。
【００３５】
ノード識別子管理部１０１は、クラスタを構成する各ノード１に関する識別情報をノード識別子管理テーブル２００として管理する。ノード識別子管理テーブル２００は、記憶部１２に記憶されている。ノード識別子管理部１０１は、クラスタへのノード１の追加やクラスタからのノード１の離脱が発生した際に、クラスタを構成するノード１に関するノード識別子管理テーブル２００の情報を更新する。
【００３６】
図３に示すように、ノード識別子管理テーブル２００は、クラスタを構成する各ノード１のノード識別子２０１、およびアドレス２０２を含んで構成される。
このノード識別子２０１は、コンシステントハッシュ法のＩＤ空間上でのノードＩＤに対応するが、コンシステントハッシュ法において仮想ＩＤを用いる場合には、前記ノードＩＤは、仮想ＩＤとすることができる。ノード識別子２０１は、仮想ＩＤ毎に割り当てられ、ノード識別子管理テーブル２００に登録される。そして、このノード識別子管理テーブル２００では、例えば、ノード識別子２０１の値を昇順に並べることにより、コンシステントハッシュ法のＩＤ空間における仮想ＩＤを昇順に並べて管理することができる。つまり、ノード識別子管理テーブル２００において、ノード識別子２０１の値を昇順に並べたとき、注目する仮想ノードを識別する仮想ＩＤの１つ下の仮想ＩＤで識別される仮想ノードが、ＩＤ空間上での右隣（時計回りに次）の仮想ノードとなる。
【００３７】
アドレス２０２は、例えば、各ノード１のＩＰアドレスであるが、ＭＡＣ（Media Control Access）アドレスなどの他のアドレスでもよい。すでに述べたように、ノード１のＩＰアドレスにハッシュ関数を作用させてノードＩＤを生成できるが、例えば、仮想ＩＤ生成用のハッシュ関数をさせることによって、１つのノード１に対して、複数の仮想ＩＤを生成できる。したがって、アドレス２０２に格納された値が同一となるノード識別子２０１は、１つのノード１に属することがわかる。
【００３８】
ノード識別子管理テーブル２００によって、原本データを担当するノード１および複製データを担当するノード１がどれであるか、つまり、あるデータに関して、所有者ノードとバディとがどのノード１であるかを管理することができる。例えば、２番目のレコードによって特定される仮想ノードが属するノード１が所有者ノードとして担当するデータ（１番目のレコードのノード識別子２０１の値の次の値から２番目のレコードのノード識別子２０１の値までの値をとるデータkeyを有するデータ）に関して、２番目のレコードのアドレス２０２の値と、３番目のレコードのアドレス２０２の値とが異なれば、３番目のレコードによって特定される仮想ノードが属するノード１がバディとして前記データの複製データを担当する。もし、２番目のレコードのアドレス２０２の値と、３番目のレコードのアドレス２０２の値とが同じであれば、アドレス２０２の値が異なる４番目以降のレコードのうちもっとも上位のレコードによって特定される仮想ノードが属するノード１がバディとなる。このような管理により、同一ノード１が原本データと複製データを担当してしまうという不都合を回避する。
【００３９】
また、ノード識別子管理テーブル２００によって、各ノード１のノード担当領域のサイズを管理できる。例えば、ノード識別子管理テーブル２００の２番目のレコードによって特定される仮想ノードのノード担当領域のサイズは、２番目のレコードのノード識別子２０１の値と、１つ上のレコードとなる１番目のレコードのノード識別子２０１の値との差分（ＩＤ空間の円弧の長さに相当）に基づいて計算できる。２番目のレコードによって特定される仮想ノードが属するノード１（物理ノード）のノード担当領域のサイズは、２番目のレコードのアドレス２０２の値と同一の値が格納されるレコードによって特定される複数の仮想ノードのノード担当領域のサイズの合計となる。
【００４０】
なお、このノード識別子２０１は、ノード識別子管理部１０１が各ノード１に対して付与することもできるし、他のノード１や外部装置（例えば、ネットワーク管理装置等）が生成したノード識別子管理テーブル２００を受信して格納することも可能である。ただし、負荷分散判定システム１００を構成する各振り分け装置４および各ノード１は、他のノード１や外部装置との間で、ノード１の離脱や追加等の情報を送受信することにより、常に、同一内容のノード識別子管理テーブル２００を備えるようにする。
【００４１】
また、ノード識別子管理部１０１は、他のノード１や外部装置から、追加されるノード１の識別情報（例えば、ノード識別子２０１）を含むノード追加要求を受信した場合に、ノード識別子管理テーブル２００において、その追加されるノード１の情報（ノード識別子２０１およびアドレス２０２）を含むレコードを追加する。一方、ノード識別子管理部１０１は、他のノード１や外部装置から、離脱させるノード１の識別情報（例えば、ノード識別子２０１）を含むノード離脱要求を受信した場合に、ノード識別子管理テーブル２００において、その離脱させるノード１の情報（ノード識別子２０１およびアドレス２０２）を含むレコードを削除する。
【００４２】
メッセージ処理部１０２は、振り分け装置４から振り分けられたメッセージを受信し、そのメッセージの処理を実行し、処理結果をクライアント２に返信することにより、サービスを提供する。同時に、メッセージ処理部１０２は、他のノード１、ここでは、ノード識別子２０１（図３参照）を昇順に並べたときの次のノード１（ＩＤ空間での右隣の異なる物理ノード）にデータの複製を行うことにより、データの冗長化を実現する。
【００４３】
また、メッセージ処理部１０２は、メッセージの処理に必要なデータをそのノード１自身が保持していなかった場合には、他のノード１に要求すること等により、そのデータを取得することが可能である。
【００４４】
負荷分散情報計算部１０３は、ノード識別子管理テーブル２００を参照して、負荷分散情報を計算する。負荷分散情報とは、分散処理システム１０００の負荷分散性を定量的に表す情報であり、具体的には、（１）分散処理システム１０００内のノード１間のノード担当領域のサイズの偏り、（２）分散処理システム１０００内のノード１間のバディ担当領域のサイズの偏りがある。「バディ担当領域」とは、所有者ノードのノード担当領域のうち、その所有者ノードのバディが担当する複製データに対応する原本データを所有者ノードが担当する領域であり、所有者ノードごとに計算される。本実施形態のように、所有者ノードおよびバディが複数の仮想ノードを構成していれば、所有者ノードを構成する複数の仮想ノードの各々が担当する原本データに対応する複製データを担当する仮想ノードが属するバディは、一般的に複数存在する。よって、ある所有者ノードのバディ担当領域は、その所有者ノードのバディごとに区分けされる。
【００４５】
（１）分散処理システム１０００内のノード１間のノード担当領域のサイズの偏りは、ノード１の追加も離脱もない、つまりノード識別子管理テーブル２００の更新が無い通常時の負荷の偏りを示す指標となる。また、（２）分散処理システム１０００内のノード１間のバディ担当領域の偏りは、ノード離脱時に離脱後の残りのノード１間に生じる負荷の偏りを示す指標となる。なお、本実施形態では、これらの負荷の偏りを計算するために統計学の変動係数を計算し、詳細は後記するが、これに限定されない。
【００４６】
（１）分散処理システム１０００内のノード１間のノード担当領域のサイズの偏りを表す変動係数Ｃ．Ｖ．は、以下の式１によって計算する。
【数１】
2014164554.tif 000003
・・・式１
ここで、ｎは、分散処理システム１０００内のノード１の個数である。ｉ＝１，２，・・・，ｎである。
Ｒｉは、ｉ番目のノード１（物理ノード）のノード担当領域であり、ｉ番目のノード１を構成する仮想ノードの各々のノード担当領域のサイズの合計である。なお、式１の右辺の分母は、分散処理システム１０００内のノード１のノード担当領域のサイズの加算平均である。式１の右辺の分子は、分散処理システム１０００内のノード１のノード担当領域のサイズの標準偏差である。
【００４７】
（２）所有者ノードであるｉ番目のノード１に関して、分散処理システム１０００内のノード１間のバディ担当領域の偏りを表す変動係数Ｃ．Ｖ．ｉは、以下の式２によって計算する。
【数２】
2014164554.tif 000004
・・・式２
ここで、ｎは、分散処理システム１０００内のノード１の個数である。ｉ＝１，２，・・・，ｎであり、ｊ＝１，２，・・・，ｎである。
ここで、Ｒｉｊは、所有者ノードであるｉ番目のノード１のバディ担当領域のうち、ｉ番目のノード１のｊ番目のバディが担当する複製データに対応する原本データをｉ番目のノード１が担当する領域（部分担当領域）のサイズである。なお、同一のノード１が原本データと複製データを担当することはないので、ｉ＝ｊのとき、Ｒｉｊ＝０である。また、式２の右辺の分母は、分散処理システム１０００内のノード１のバディ担当領域の部分担当領域のサイズの加算平均である。式２の右辺の分子は、分散処理システム１０００内のノード１のバディ担当領域の部分担当領域のサイズの標準偏差である。
【００４８】
具体的に、分散処理システム１０００内に、図６（ａ）に示すように、４つのノード「１」〜「４」が存在する場合を考える。ノード「１」、ノード「２」、ノード「３」、ノード「４」はそれぞれ１番目のノード１、２番目のノード１、３番目のノード１、４番目のノード１とする。
【００４９】
ノード「２」を所有者ノードとした場合、仮想ノード２−１〜２−４が所有者ノードとなる。図６（ａ）によれば、仮想ノード２−１のノード担当領域は、仮想ノード１−１から仮想ノード２−１までの円弧である。よって、仮想ノード２−１の右隣の仮想ノード３−１が仮想ノード２−１のバディとなり、ノード「３」がノード「２」のバディとなる。
また、仮想ノード２−２のノード担当領域は、仮想ノード１−２から仮想ノード２−２までの円弧である。よって、仮想ノード２−２の右隣の仮想ノード３−２が仮想ノード２−２のバディとなり、ノード「３」がノード「２」のバディとなる。
また、仮想ノード２−３のノード担当領域は、仮想ノード３−３から仮想ノード２−３までの円弧である。よって、仮想ノード２−３の右隣の仮想ノード１−４が仮想ノード２−３のバディとなり、ノード「１」がノード「２」のバディとなる。
また、仮想ノード２−４のノード担当領域は、仮想ノード１−４から仮想ノード２−４までの円弧である。よって、仮想ノード２−４の右隣の仮想ノード３−４が仮想ノード２−４のバディとなり、ノード「３」がノード「２」のバディとなる。
【００５０】
したがって、バディとなるノード「１」に対するノード「２」のバディ担当領域のサイズＲ２１は、
Ｒ２１  ＝  （仮想ノード３−３から仮想ノード２−３までの円弧に相当するサイズ）
となる。
また、バディとなるノード「３」に対するノード「２」のバディ担当領域のサイズＲ２３は、
Ｒ２３  ＝  （仮想ノード１−１から仮想ノード２−１までの円弧に相当するサイズ）
＋（仮想ノード１−２から仮想ノード２−２までの円弧に相当するサイズ）
＋（仮想ノード１−４から仮想ノード２−４までの円弧に相当するサイズ）
となる。
【００５１】
なお、同一のノード１が原本データと複製データを担当することはないので、Ｒ２２＝０である。また、図６（ａ）によれば、仮想ノード４−１〜４−４のいずれもが、仮想ノード２−１〜２−４の右隣に配置されていないので、ノード「４」がノード「２」のバディとなることはない。つまり、Ｒ２４＝０である。
【００５２】
負荷分散情報判定部１０４は、負荷分散情報計算部１０３が計算したノード担当領域の偏りが所定値を超えているか否かを判定するとともに、負荷分散情報計算部１０３が計算したバディ担当領域の偏りが所定値を超えているか否かを判定する。少なくとも一方の所定値を超えていれば、分散処理システム１０００の負荷分散性が許容できなくなったとみなし、オペレータに対して負荷分散性の改善を求める警告表示を行う。
【００５３】
図２に戻り、記憶部１２は、ハードディスクやフラッシュメモリ等の記憶装置からなり、サービスの対象となる原本データや複製データを含むデータ３００や、前記したノード識別子管理テーブル２００（図３参照）等を記憶する。
なお、データ３００の各データは、そのデータのデータkeyを含むことができる。
【００５４】
＜処理の流れ＞
次に、図４を参照して、本実施形態に係る分散処理システム１０００の負荷分散性を判定する処理の流れについて説明する。ノード１の制御部１０がこの処理を実行する。この処理は、例えば、ノード１のノード担当領域を変更するときに実行され、より具体的には、分散処理システム１０００にノード１を追加するとき、または分散処理システム１０００からノード１を離脱させるときに実行される。この処理を開始すると、ステップＳ４０１に進む。
【００５５】
ステップＳ４０１において、制御部１０は、記憶部１２からノード識別子管理テーブル２００を読み出す。ステップＳ４０１の後、ステップＳ４０２に進む。
【００５６】
ステップＳ４０２において、制御部１０は、負荷分散情報計算部１０３によって、前記式１を用いて、ノード担当領域に関する第１の変動係数Ｃ．Ｖ．を算出する。ステップＳ４０２の後、ステップＳ４０３に進む。
【００５７】
ステップＳ４０３において、制御部１０は、負荷分散情報計算部１０３によって、前記式２を用いて、バディ担当領域に関する第２の変動係数Ｃ．Ｖ．ｉを、ノード１ごとに算出する。ステップＳ４０３の後、ステップＳ４０４に進む。
【００５８】
ステップＳ４０４において、制御部１０は、負荷分散情報判定部１０４によって、第１の変動係数Ｃ．Ｖ．が、第１の所定値ＴＨ１を超えているか否かを判定する。超えている場合（ステップＳ４０４でＹｅｓ）、負荷分散性を許容できないと判断して、ステップＳ４０６に進む。超えていない場合（ステップＳ４０４でＮｏ）、ステップＳ４０５に進む。
【００５９】
ステップＳ４０５において、制御部１０は、負荷分散情報判定部１０４によって、第２の変動係数Ｃ．Ｖ．ｉが、第２の所定値ＴＨ２を超えるノード１が少なくとも１つあるか否かを判定する。少なくとも１つある場合（ステップＳ４０５でＹｅｓ）、負荷分散性を許容できないと判断して、ステップＳ４０６に進む。１つもない場合（ステップＳ４０４でＮｏ）、負荷分散性を許容できると判断して、処理全体を終了する。
【００６０】
ステップＳ４０６において、制御部１０は、例えば、入出力部１１によって、分散処理システム１０００の負荷分散性を許容できないことを示す警告表示を行い、処理全体を終了する。
【００６１】
ステップＳ４０４の判定により、通常時のノード１間の負荷の偏りを事前に定量的に評価できる。ステップＳ４０５の判定により、ノード離脱時のノード１間の負荷の偏りを事前に定量的に評価できる。ステップＳ４０５において、第２の変動係数Ｃ．Ｖ．ｉが第２の所定値ＴＨ２を超えるノード１が少なくとも１つあるか否かという判定をするのは、ノード１の故障する場合を想定すると、離脱するノード１を特定できないことがあるため、そのような場合も警告表示の対象とするためである。
【００６２】
図４の処理で、負荷分散性を許容できないと判定された場合には、ノード１を追加する離脱させるなどの対処を行うことで、負荷の偏りを解消することができる。この際、ノード１の追加または離脱は、ランダムに行ってもよいし、ノード１各々のノード担当領域を考慮して行ってもよい。複数のノード１間のバディ担当領域の偏りに対して前記対処を行えば、ノード離脱後に、複数のノード１間のノード担当領域のサイズの偏りが低減されるだけでなく、ノード担当領域の偏りも併せて低減することができる。
【００６３】
本実施形態によれば、第１の変動係数Ｃ．Ｖ．および第２の変動係数Ｃ．Ｖ．ｉを求めることで、負荷分散性の低下を招くノード間の負荷の偏りを事前に検出することができる。
【００６４】
＜その他＞
図４に示す処理において、第１の変動係数Ｃ．Ｖ．が、第１の所定値ＴＨ１を超えており、かつ、第２の変動係数Ｃ．Ｖ．ｉが、第２の所定値ＴＨ２を超えるノード１が存在するときに、負荷分散性を許容できないという警告表示を行ってもよい。また、第１の変動係数Ｃ．Ｖ．のみ、第２の変動係数Ｃ．Ｖ．ｉのみで負荷分散性を許容できるか否かを判定してもよい。
また、第１の所定値ＴＨ１および第２の所定値ＴＨ２は、ノード１の性能によって、適宜変更できる。
また、ステップＳ４０５において、第２の変動係数Ｃ．Ｖ．ｉが、第２の所定値ＴＨ２を超えるノード１が２以上存在するときに、警告表示を行ってもよい。
また、図４に示す処理は、振り分け装置４が行うことができる。また、負荷分散判定システム１００と通信可能に接続している外部装置が行うことができる。
【００６５】
また、本実施形態で説明した種々の技術を適宜組み合わせた技術を実現することもできる。
また、本実施形態で説明したソフトウェアをハードウェアとして実現することもでき、ハードウェアをソフトウェアとして実現することもできる。
【００６６】
その他、ハードウェア、ソフトウェア、フローチャートなどについて、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【符号の説明】
【００６７】
１      ノード
２      クライアント
３      ロードバランサ
４      振り分け装置
１０    制御部
１１    入出力部
１２    記憶部
１００  負荷分散判定システム
１０１  ノード識別子管理部
１０２  メッセージ処理部
１０３  負荷分散情報計算部
１０４  負荷分散情報判定部
２００  ノード識別子管理テーブル
３００  データ
１０００  分散処理システム
【図１】
2014164554.tif 000005
【図２】
2014164554.tif 000006
【図３】
2014164554.tif 000007
【図４】
2014164554.tif 000008
【図５】
2014164554.tif 000009
【図６】
2014164554.tif 000010