(57)【特許請求の範囲】
【請求項１】
クラスタを構成する複数のノードそれぞれに、コンシステント・ハッシュ法によりメッセージを振り分けて処理させる分散処理システムの前記ノードであって、
前記コンシステント・ハッシュ法のＩＤ空間には、前記ノードと前記ノードが処理するメッセージの処理結果としてのデータとの双方が割り当てられており、
前記ＩＤ空間上に割り当てられた各前記ノードのＩＤ、および、当該ＩＤ空間上における各前記ノードの担当領域を示す振り分けＩＤ情報、並びに、前記ノードそれぞれについて、原本データを配置しないノードであることを示す無効ノードであるか否かの情報が格納される無効ノード情報、が記憶される記憶部と、
前記ノード毎の被災により障害が発生する確率を示す被災確率情報を受信し、前記被災確率情報の値が所定の閾値以上のノードを前記無効ノードに決定し、前記無効ノード情報に記憶する無効ノード設定部と、
受信したメッセージ内の情報である振り分けキーを用いて前記データがＩＤ空間上で割り当てられるＩＤを算出し、前記振り分けＩＤ情報を参照して当該データを担当するノードを抽出し、前記抽出したノードが、前記無効ノードとして設定されているか否かを、前記無効ノード情報を参照して判定し、前記判定したノードが無効ノードとして設定されている場合に、前記振り分けＩＤ情報および前記無効ノード情報を参照し、前記ＩＤ空間上における所定回りで前記無効ノードとして設定されていない次のノードを、前記メッセージを処理するノードとして特定し、前記特定したノードに前記メッセージを送信する振り分け部と、
前記送信されたメッセージを受信し、当該メッセージに基づく処理結果を原本データとして自身の前記記憶部に記憶するとともに、前記原本データの複製を記憶させる複製ノードを、前記振り分けＩＤ情報を参照し、前記ＩＤ空間上における所定回りで冗長度に応じた数だけ前記無効ノードとして設定されているノードも含めて決定し、前記決定した複製ノードに、前記原本データの複製データを送信することにより記憶させる信号処理部と、
を備えることを特徴とするノード。
【請求項２】
前記クラスタに新たなノードを増設する際に、前記無効ノードのＩＤ空間上のＩＤを、当該無効ノードのＩＤにおける前記所定回りとは反対回りで最初に位置するノードのＩＤに１を加算した値に設定しておくとともに、増設するノードのＩＤ空間上のＩＤを、前記無効ノードのＩＤに１を加算した値から、ＩＤ空間上で前記無効ノードの所定回りの次に位置するノードが担当する原本データのＩＤよりも前記所定回りとは反対回りに位置する値までのいずれかに設定するリバランシング部を、さらに備えること、
を特徴とする請求項１に記載のノード。
【請求項３】
クラスタを構成する複数のノードそれぞれに、コンシステント・ハッシュ法によりメッセージを振り分けて処理させる分散処理システムの前記ノードによるデータ配置方法であって、
前記コンシステント・ハッシュ法のＩＤ空間には、前記ノードと前記ノードが処理するメッセージの処理結果としてのデータとの双方が割り当てられており、
前記ノードは、
前記ＩＤ空間上に割り当てられた各前記ノードのＩＤ、および、当該ＩＤ空間上における各前記ノードの担当領域を示す振り分けＩＤ情報、並びに、前記ノードそれぞれについて、原本データを配置しないノードであることを示す無効ノードであるか否かの情報が格納される無効ノード情報、が記憶される記憶部を備えており、
前記ノード毎の被災により障害が発生する確率を示す被災確率情報を受信し、前記被災確率情報の値が所定の閾値以上のノードを前記無効ノードに決定し、前記無効ノード情報に記憶するステップと、
受信したメッセージ内の情報である振り分けキーを用いて前記データがＩＤ空間上で割り当てられるＩＤを算出し、前記振り分けＩＤ情報を参照して当該データを担当するノードを抽出し、前記抽出したノードが、前記無効ノードとして設定されているか否かを、前記無効ノード情報を参照して判定し、前記判定したノードが無効ノードとして設定されている場合に、前記振り分けＩＤ情報および前記無効ノード情報を参照し、前記ＩＤ空間上における所定回りで前記無効ノードとして設定されていない次のノードを、前記メッセージを処理するノードとして特定し、前記特定したノードに前記メッセージを送信するステップと、
前記送信されたメッセージを受信し、当該メッセージに基づく処理結果を原本データとして自身の前記記憶部に記憶するとともに、前記原本データの複製を記憶させる複製ノードを、前記振り分けＩＤ情報を参照し、前記ＩＤ空間上における所定回りで冗長度に応じた数だけ前記無効ノードとして設定されているノードも含めて決定し、前記決定した複製ノードに、前記原本データの複製データを送信することにより記憶させるステップと、
を実行することを特徴とするデータ配置方法。
【請求項４】
前記ノードは、
前記クラスタに新たなノードを増設する際に、前記無効ノードのＩＤ空間上のＩＤを、当該無効ノードのＩＤにおける前記所定回りとは反対回りで最初に位置するノードのＩＤに１を加算した値に設定しておくとともに、増設するノードのＩＤ空間上のＩＤを、前記無効ノードのＩＤに１を加算した値から、ＩＤ空間上で前記無効ノードの所定回りの次に位置するノードが担当する原本データのＩＤよりも前記所定回りとは反対回りに位置する値までのいずれかに設定するステップを、
さらに実行することを特徴とする請求項３に記載のデータ配置方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク上に分散配置されるノードをクラスタ化してデータを格納する分散処理システムにおいて、信頼性の低いノードへの原本データの配置を抑止する、ノードおよびデータ配置方法に関する。
【背景技術】
【０００２】
近年、クラウドコンピューティングの隆盛に伴い、多量のデータの処理や保持を効率的に行うことが求められている。そこで、複数のサーバを協調動作させることにより効率的な処理を実現する分散処理技術が発展している。
【０００３】
分散処理を行う際には、クラスタ構成からなる分散処理システムを構成する各サーバ（以下、「ノード」と称する。）が担当するデータを決定する必要がある。このとき、分散処理システム全体での処理能力を高めるためには、各ノードが担当するデータ数は平均化されていることが望ましい。
【０００４】
代表的なデータの管理手法として、各データのｋｅｙをハッシュ関数にかけた値（以下、「ｈａｓｈ（ｋｅｙ）」と称する。）をノード数Ｎで割った余り、即ち「ｈａｓｈ（ｋｅｙ） ｍｏｄ Ｎ」を番号として持つノードがデータを管理する手法がある。この場合、各ノードに事前に「０」から「Ｎ−１」までの番号を割り当てていることが前提となる。このような管理手法を用いた場合、ノードの追加・離脱が発生すると、Ｎの値が変化して、多くのデータについて、そのデータの保存を担当するノードが変更になるため、担当するデータを再配置することが必要になる。
【０００５】
そこで、ノードの追加・離脱に伴い担当するノードが変更になるデータ数を約１／Ｎに抑える方法として、コンシステント・ハッシュ（Consistent Hashing）法（非特許文献１参照）を用いたデータ管理手法がある。
【０００６】
このコンシステント・ハッシュ法を用いたデータ管理手法では、ノードとデータの双方にＩＤ（IDentifier）を割り当てる。そして、データのＩＤから閉じたＩＤ空間を時計回りに辿った場合に最初に当たったノードをそのデータの担当とする。ノードに対するＩＤの与え方の例としては、ＩＰアドレスをハッシュ関数にかけた値（ｈａｓｈ（ＩＰアドレス））が挙げられる。
【０００７】
クラスタ構成の分散処理システムでは、各ノードの処理性能が等しい場合には、各ノードが担当するデータ量を等しくする、即ち、コンシステント・ハッシュ法のＩＤ空間（以下、単に「ＩＤ空間」と称する場合がある。）におけるノード間の距離（以下、「ノードの担当領域」と称する。）を等しくすることが望ましい。この点を実現するため、各ノードに仮想的に複数のＩＤを持たせる手法が用いられている。各ノードが複数の仮想ＩＤを持つことで、仮想ＩＤ毎の担当領域の大きさは異なっていても、大数の法則に従いノード毎の担当領域の大きさは平均化される。
これらのコンシステント・ハッシュ法や仮想ＩＤ等を用いた技術により、ノード間で担当するデータを均一化し負荷を分散させることが可能となる。
【０００８】
一方、昨今、災害の状況から各ノードが被災する確率を特定する研究（非特許文献２参照）が進んでおり、実用化すれば障害発生ノードを事前に特定することができるようになる。災害等により障害の発生が高いと予測されたノード、つまり、信頼性が低いと予め判定されたノードについて、原本データを配置することは、データ欠損リスクを高めるため、避けた方がよい。この対策として、信頼性の低いノードから高いノードへ原本データを移管することによって、信頼性を担保する技術が公開されている（非特許文献３参照）。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】David Karger, et al.,“Consistent Hashing and Random Trees:Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web”，［online］，1997，ACM，［平成28年 3月 3日検索］，インターネット<ＵＲＬ:http://www.akamai.com/dl/technical_publications/ConsistenHashingandRandomTreesDistributedCachingprotocolsforrelievingHotSpotsontheworldwideweb.pdf>
【非特許文献２】Hiroshi Saito，et al.，”Proposal of Disaster Avoidance Control，” Proc. of Telecommunications Network Strategy and Planning Symposium (Networks)，2014 16th International．
【非特許文献３】栗生敬子、金子雅志、「高可用サーバクラスタにおける激甚災害を考慮したデータ管理方式の一検討」、社団法人電子情報通信学会、電子情報通信学会通信ソサイエティ大会講演論文集 2015年、通信(2) 21、B-6-21、2015-08-25
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、非特許文献３に記載の技術を、一般的なコンシステント・ハッシュ法を利用する分散処理システムに適用した場合、新規データを配置する際には、ハッシュ分散により信頼性の低いノードにも原本データが配置されてしまう。よって、一度、信頼性の低いノードに原本データが配置された後に、信頼性の高いノードへ原本データを移管する処理が必要になる。
【００１１】
図１１は、分散処理システムにおいてコンシステント・ハッシュ法を用いてデータを管理する場合における、上記の問題を説明するための図である。なお、図１１を含め、コンシステント・ハッシュのＩＤ空間を示す各図において、ノードそれぞれのＩＤ空間上の担当領域を楕円で示している。
図１１（ａ）に示すように、コンシステント・ハッシュのＩＤ空間上に、原本データ「Ｇ１」がノード「Ｄ」の担当領域に配置されている。また、その複製データ「ｇ１」が、ＩＤ空間上で時計回りに次のノードであるノード「Ｅ」と、さらにその次のノード（次々ノード）であるノード「Ａ」に配置されているものとする。このような原本データと複製データの管理手法において、次に新たなデータを配置する場合を考える。その際に、ノード「Ｃ」は、例えば非特許文献２に記載の技術により、信頼性の低いノード（以下、「低信頼のノード」と称する場合がある。）であると判定されたノードであるとする。また、新たに配置するデータ（原本データ）のＩＤが、低信頼のノード「Ｃ」の担当領域に含まれるデータであるとする。
【００１２】
非特許文献３に記載の技術を、コンシステント・ハッシュ法を利用する分散処理システムに適用する場合には、図１１（ａ）に示すように、まず、新たに配置する原本データ「Ｇ２」が、ＩＤ空間上の低信頼のノード「Ｃ」の担当領域に配置される。そして、その複製データ「ｇ２」が、ＩＤ空間上で時計回りに次のノードであるノード「Ｄ」と、さらにその次のノードであるノード「Ｅ」に配置される。
【００１３】
その後、図１１（ｂ）に示すように、ノード「Ｃ」が低信頼のノードであるため、ノード「Ｃ」の担当領域に位置する原本データ「Ｇ２」と、例えば、ノード「Ｄ」に格納されている複製データ「ｇ２」とに対し、原本変更通知がネットワーク管理サーバ（図示省略）等から送信される。これにより、ノード「Ｄ」に格納されていた複製データ「ｇ２」は、原本に昇格し原本データ「Ｇ２」となる。また、低信頼のノード「Ｃ」の担当領域に位置する原本データ「Ｇ２」は、複製に降格し複製データ「ｇ２」となる。続いて、ノード「Ｄ」は、昇格した原本データ「Ｇ２」の複製データ「ｇ２」を、ＩＤ空間上で時計回りに次のノードであるノード「Ｅ」と、さらにその次のノードであるノード「Ａ」に送信するレプリケーション（データの一貫性を保つためのデータ複製処理）を実行する。
【００１４】
このように、コンシステント・ハッシュ法を利用した分散処理システムに、従来技術を適用する場合には、新規データを配置する際に、ハッシュ分散により信頼性の低いノードも、原本データの配置先として選択されてしまう。その結果、新規データの配置の度に、複製から原本へのデータ移管を行い、データの一貫性を保つためのレプリケーションが必要となる。よって、各ノードのＣＰＵ（Central Processing Unit）の処理負荷を増大させるとともに、最適なデータ配置となるための余分な時間を要していた。
なお、図１１（ｂ）に示すように、非特許文献３に記載の技術を、コンシステント・ハッシュ法を利用する分散処理システムに適用した場合には、その結果として、原本データから複製データに降格した複製データが、システムに設定された冗長度（図１１においては、原本データ「１」と複製データ「２」とで、冗長度「３」である。）を超えて、ＩＤ空間上に複製データを配置する結果となってしまう（図１１においては、ノード「Ｃ」の複製データ「ｇ２」が冗長度の設定を超えて記憶されたままとなる。）。これにより、当該ノードの記憶資源を無駄に占有することとなる。
【００１５】
このような背景を鑑みて本発明がなされたのであり、本発明は、低信頼のノードへの原本データの配置を抑止した上で、各ノードの処理負荷の増加を抑えることができる、ノードおよびデータ配置方法を提供することを課題とする。
【課題を解決するための手段】
【００１６】
前記した課題を解決するため、請求項１に記載の発明は、クラスタを構成する複数のノードそれぞれに、コンシステント・ハッシュ法によりメッセージを振り分けて処理させる分散処理システムの前記ノードであって、前記コンシステント・ハッシュ法のＩＤ空間には、前記ノードと前記ノードが処理するメッセージの処理結果としてのデータとの双方が割り当てられており、前記ＩＤ空間上に割り当てられた各前記ノードのＩＤ、および、当該ＩＤ空間上における各前記ノードの担当領域を示す振り分けＩＤ情報、並びに、前記ノードそれぞれについて、原本データを配置しないノードであることを示す無効ノードであるか否かの情報が格納される無効ノード情報、が記憶される記憶部と、前記ノード毎の被災により障害が発生する確率を示す被災確率情報を受信し、前記被災確率情報の値が所定の閾値以上のノードを前記無効ノードに決定し、前記無効ノード情報に記憶する無効ノード設定部と、受信したメッセージ内の情報である振り分けキーを用いて前記データがＩＤ空間上で割り当てられるＩＤを算出し、前記振り分けＩＤ情報を参照して当該データを担当するノードを抽出し、前記抽出したノードが、前記無効ノードとして設定されているか否かを、前記無効ノード情報を参照して判定し、前記判定したノードが無効ノードとして設定されている場合に、前記振り分けＩＤ情報および前記無効ノード情報を参照し、前記ＩＤ空間上における所定回りで前記無効ノードとして設定されていない次のノードを、前記メッセージを処理するノードとして特定し、前記特定したノードに前記メッセージを送信する振り分け部と、前記送信されたメッセージを受信し、当該メッセージに基づく処理結果を原本データとして自身の前記記憶部に記憶するとともに、前記原本データの複製を記憶させる複製ノードを、前記振り分けＩＤ情報を参照し、前記ＩＤ空間上における所定回りで冗長度に応じた数だけ前記無効ノードとして設定されているノードも含めて決定し、前記決定した複製ノードに、前記原本データの複製データを送信することにより記憶させる信号処理部と、を備えることを特徴とするノードとした。
【００１７】
また、請求項３に記載の発明は、クラスタを構成する複数のノードそれぞれに、コンシステント・ハッシュ法によりメッセージを振り分けて処理させる分散処理システムの前記ノードによるデータ配置方法であって、前記コンシステント・ハッシュ法のＩＤ空間には、前記ノードと前記ノードが処理するメッセージの処理結果としてのデータとの双方が割り当てられており、前記ノードが、前記ＩＤ空間上に割り当てられた各前記ノードのＩＤ、および、当該ＩＤ空間上における各前記ノードの担当領域を示す振り分けＩＤ情報、並びに、前記ノードそれぞれについて、原本データを配置しないノードであることを示す無効ノードであるか否かの情報が格納される無効ノード情報、が記憶される記憶部を備えており、前記ノード毎の被災により障害が発生する確率を示す被災確率情報を受信し、前記被災確率情報の値が所定の閾値以上のノードを前記無効ノードに決定し、前記無効ノード情報に記憶するステップと、受信したメッセージ内の情報である振り分けキーを用いて前記データがＩＤ空間上で割り当てられるＩＤを算出し、前記振り分けＩＤ情報を参照して当該データを担当するノードを抽出し、前記抽出したノードが、前記無効ノードとして設定されているか否かを、前記無効ノード情報を参照して判定し、前記判定したノードが無効ノードとして設定されている場合に、前記振り分けＩＤ情報および前記無効ノード情報を参照し、前記ＩＤ空間上における所定回りで前記無効ノードとして設定されていない次のノードを、前記メッセージを処理するノードとして特定し、前記特定したノードに前記メッセージを送信するステップと、前記送信されたメッセージを受信し、当該メッセージに基づく処理結果を原本データとして自身の前記記憶部に記憶するとともに、前記原本データの複製を記憶させる複製ノードを、前記振り分けＩＤ情報を参照し、前記ＩＤ空間上における所定回りで冗長度に応じた数だけ前記無効ノードとして設定されているノードも含めて決定し、前記決定した複製ノードに、前記原本データの複製データを送信することにより記憶させるステップと、を実行することを特徴とするデータ配置方法とした。
【００１８】
このようにすることで、ノードは、受信した被災確率情報に基づき、被災する確率の高い（低信頼の）ノードを無効ノードに決定する。そして、受信したメッセージの担当が無効ノードである場合には、ＩＤ空間上の所定回りで無効ノードとして設定されていない次のノードを、そのメッセージを処理するノードとして特定することができる。また、原本データの複製データは、コンシステント・ハッシュ法に基づき、無効ノードとして設定されているノードにも配置することができる。
よって、一度低信頼のノードに原本データを配置した後に、無効ノードではない高信頼のノードに原本データを移管する処理を不要とすることができ、不要なレプリケーションを行わないようにすることができる。また、無効ノードには、複製データを配置することができるため、低信頼の無効ノードの記憶資源を有効に活用することができる。
【００１９】
請求項２に記載の発明は、前記クラスタに新たなノードを増設する際に、前記無効ノードのＩＤ空間上のＩＤを、当該無効ノードのＩＤにおける前記所定回りとは反対回りで最初に位置するノードのＩＤに１を加算した値に設定しておくとともに、増設するノードのＩＤ空間上のＩＤを、前記無効ノードのＩＤに１を加算した値から、ＩＤ空間上で前記無効ノードの所定回りの次に位置するノードが担当する原本データのＩＤよりも前記所定回りとは反対回りに位置する値までのいずれかに設定するリバランシング部を、さらに備えること、を特徴とする請求項１に記載のノードとした。
【００２０】
また、請求項４に記載の発明は、前記ノードが、前記クラスタに新たなノードを増設する際に、前記無効ノードのＩＤ空間上のＩＤを、当該無効ノードのＩＤにおける前記所定回りとは反対回りで最初に位置するノードのＩＤに１を加算した値に設定しておくとともに、増設するノードのＩＤ空間上のＩＤを、前記無効ノードのＩＤに１を加算した値から、ＩＤ空間上で前記無効ノードの所定回りの次に位置するノードが担当する原本データのＩＤよりも前記所定回りとは反対回りに位置する値までのいずれかに設定するステップを、さらに実行することを特徴とする請求項３に記載のデータ配置方法とした。
【００２１】
このようにすることで、ノードは、負荷の偏りを低減するためのリバランシング（ノード増設）を行う際に、レプリケーションが発生することを抑止することができる。
【発明の効果】
【００２２】
本発明によれば、低信頼のノードへの原本データの配置を抑止した上で、各ノードの処理負荷の増加を抑える、ノードおよびデータ配置方法を提供することができる。
【図面の簡単な説明】
【００２３】
【図１】本実施形態に係るノードを含む分散処理システムの全体構成を示す図である。
【図２】本実施形態に係るノードの処理概要を説明するための図である。
【図３】本実施形態に係るノードの構成例を示す機能ブロック図である。
【図４】本実施形態に係るノード識別子管理情報のデータ構成例を示す図である。
【図５】本実施形態に係る振り分けＩＤ情報のデータ構成例を示す図である。
【図６】本実施形態に係る無効ノード情報のデータ構成例を示す図である。
【図７】本実施形態に係るノードが実行するメッセージ処理の流れを示すフローチャートである。
【図８】本実施形態に係るノードにおいて、リバランシングを行う場合の課題を説明するための図である。
【図９】本実施形態の変形例に係るノードの構成例を示す機能ブロック図である。
【図１０】本実施形態の変形例に係るノードがリバランシング（ノード増設）を行う場合の処理を説明するための図である。
【図１１】分散処理システムにおいてコンシステント・ハッシュ法を用いてデータを管理する場合における問題を説明するための図である。
【発明を実施するための形態】
【００２４】
＜全体構成＞
まず、本発明を実施するための形態（以下、「本実施形態」と称する。）に係るノード１を含む分散処理システム１０００について説明する。
図１は、本実施形態に係るノード１を含む分散処理システム１０００の全体構成を示す図である。
【００２５】
この分散処理システム１０００は、複数のノード１から構成される。各ノード１は、コンピュータなどの物理装置や仮想マシンなどの論理装置である。ロードバランサ３は、クライアント２から受信したメッセージを、単純なラウンドロビン等により振り分けて各ノード１に送信する。そして、ノード１の振り分け部１３は、クライアント２からのメッセージを、例えば、コンシステント・ハッシュ法等に基づき、メッセージを担当するノード１に振り分ける。この際、振り分け部１３は、振り分け先となるノード１が、低信頼のノード（後記する「無効ノード」）であるか否かを確認した上で、振り分けを行う（詳細は後記する。）。メッセージを担当するノード１では、信号処理部１４において、信号処理を行い、クライアント２にサービスを提供する。
【００２６】
なお、ロードバランサ３が存在せず、クライアント２から任意のノード１（振り分け部１３）にメッセージを送信することも可能である。また、振り分け部１３と信号処理部１４とは、同じノード１上に同時に存在してもよいし、別々のノード１上に存在してもよい。
【００２７】
＜ノード＞
次に、分散処理システム１０００を構成するノード１について、具体的に説明する。
【００２８】
≪概要≫
まず、本実施形態に係るノード１の処理の概要を説明する。
本実施形態に係るノード１は、分散処理システム１０００を構成するノード１それぞれについて、低信頼と判定されるノードであるか、若しくは、高信頼（低信頼ではない）と判定されるノードであるかを示す情報（後記する、「被災確率情報」）を取得し、低信頼のノード１に関して、「無効ノード」として設定しておく。本実施形態において、無効ノードとは、原本データの配置先として設定しないノード、つまり、原本データを配置しないノードを意味する。なお、後記するように、無効ノードには、原本データは配置されないが、複製データは配置される。
本実施形態に係るノード１は、新規原本データの設定や、リクエスト等を受信した際に行われる、コンシステント・ハッシュ法に基づくＩＤ空間上での時計回り探索において、無効ノードとして設定されたノード１はスキップする。そして、次の非無効ノード（無効ノードとして設定されてない通常の（高信頼の）ノード）が見つかったとき、そのノード１に原本データを配置する、若しくは、そのノード１が担当する原本データを用いて信号処理を実行する。以下、図２を参照して具体的に説明する。
【００２９】
図２は、本実施形態に係るノード１の処理概要を説明するための図である。図２（ａ）は、比較例として、通常のコンシステント・ハッシュ法に基づくデータ配置を示す図である。図２（ｂ）は、本実施形態に係るノード１が実行するデータ配置の処理を示す図である。
【００３０】
コンシステント・ハッシュ法に基づく通常のデータ配置では、図２（ａ）に示すように、各ノード１が、低信頼のノード１か高信頼のノード１であるかは考慮されない。よって、ＩＤ空間上において、例えば、原本データ「Ｇ２」が、低信頼のノード「Ｃ」の担当領域に配置され、その複製データ「ｇ２」が、ＩＤ空間上で時計回りに次のノードであるノード「Ｄ」と、さらに次のノードであるノード「Ｅ」に配置される。同様に、原本データ「Ｇ３」が、高信頼のノード「Ａ」の担当領域に配置され、その複製データ「ｇ３」が、ＩＤ空間上で時計回りに次のノードであるノード「Ｂ」と、さらに次のノードである低信頼のノード「Ｃ」に配置される。つまり、低信頼のノード「Ｃ」にも、原本データが配置されてしまう。
【００３１】
これに対し、本実施形態に係るノード１は、低信頼のノード１を予め無効ノードとして設定しておく。そして、各ノード１は、低信頼のノード１が本来担当すべきＩＤ空間上の領域に原本データを配置する際には、その無効ノードのＩＤ空間上で時計回りに次に位置する無効ノードではないノード（高信頼ノード）を、その原本データを担当するノードとして処理する。
【００３２】
具体的には、図２（ｂ）に示すように、低信頼のノード「Ｃ」が無効ノードとして設定されているとする。そして、そのノード「Ｃ」が本来担当すべきＩＤ空間上の領域に配置される原本データ「Ｇ２」について、本実施形態においては、無効ノードであるノード「Ｃ」ではなく、ＩＤ空間上で時計回りに次に位置する無効ノードではないノード（高信頼ノード）であるノード「Ｄ」が担当する。つまり、無効ノードであるノード「Ｃ」の担当領域（図２（ｂ）において、破線の楕円で示す。）上に位置するデータ（原本データ）の担当を、ＩＤ空間上で時計回りに次のノード（高信頼ノード）であるノード「Ｄ」とする。よって、ノード「Ｄ」は、原本データについては、ＩＤ空間上で自身の担当領域に加え、ノード「Ｃ」が従来担当すべき領域（ノード「Ｃ」が無効ノードでなかった場合の担当領域）も自身の担当領域として処理する（図２（ｂ）において、太実線の楕円で示す。）。ノード「Ｄ」が、原本データ「Ｇ２」の担当となることから、ノード「Ｄ」には、原本データ「Ｇ２」の複製データ「ｇ２」は配置されない。また、ノード「Ｃ」ではなく、ノード「Ｄ」が、ノード「Ｅ」とノード「Ａ」とに複製データ「ｇ２」を送信するレプリケーションを実行する。
【００３３】
このようにすることで、一度、低信頼ノードに原本データを配置した後に、高信頼のノードへ原本データを移管する処理を不要にすることができるとともに、この原本データの移管に伴う、不要なレプリケーションを実行しないようにすることができる。また、本実施形態に係るノード１の処理においても、各ノード１の信頼性は従来と同様に確保することができる。
【００３４】
≪ノードの構成≫
次に、本実施形態に係る分散処理システム１０００を構成するノード１について、具体的に説明する。なお、本実施形態に係るノード１は、分散処理システム１０００を構成する複数のノード１のうち、後記するノード識別子管理情報１００（図４参照）、振り分けＩＤ情報２００（図５参照）および無効ノード情報３００（図６参照）を管理する特権ノードとなる場合と、特権ノードからノード識別子管理情報１００、振り分けＩＤ情報２００および無効ノード情報３００を受け取り、各情報を更新して記憶する非特権ノードとなる場合とが存在する。なお、特権ノードが行う処理等については、後記する。
【００３５】
ノード１は、図１に示したように、ロードバランサ３と通信可能に接続されるともに、クラスタを構成する自身以外の他のノード１と通信可能に接続される。また、このノード１は、ロードバランサ３を介してクライアント２からメッセージを受け取ると、そのメッセージを、振り分けＩＤ情報２００および無効ノード情報３００を参照して、担当するノード１（自身を含む）に振り分け、そのメッセージの信号処理を実行する。また、各ノード１は、新たに自身が原本データを保持することとなったデータについて、当該原本データを自身の記憶部（後記する「記憶部３０」）に記憶するとともに、その原本データの複製データを格納するノード１を、振り分けＩＤ情報２００を参照して決定し、そのノード１に複製データを送信（レプリケーション）する。なお、複製データを格納するノード１は、冗長度の数から１を引いた数のノードが、ＩＤ空間上で時計回りの順で決定される。以下、本実施形態においては、冗長度が「３」、つまり、原本データ１つの他に、複製データを２つ生成するものとして説明する。
【００３６】
図３は、本実施形態に係るノード１の構成例を示す機能ブロック図である。
図３に示すように、ノード１は、制御部１０と、入出力部２０と、記憶部３０とを含んで構成される。
【００３７】
入出力部２０は、ロードバランサ３や、自身以外の他のノード１等との間の情報の入出力を行う。また、この入出力部２０は、通信回線を介して情報の送受信を行う通信インタフェース（図示省略）と、キーボード等の入力手段やモニタ等の出力手段等との間で入出力を行う入出力インタフェース（図示省略）とから構成される。
【００３８】
記憶部３０は、ハードディスクやフラッシュメモリ、ＲＡＭ（Random Access Memory）等の記憶手段からなり、処理の対象となるデータ４００や、ノード識別子管理情報１００（図４参照）、振り分けＩＤ情報２００（図５参照）、無効ノード情報３００（図６参照）等が記憶される。なお、この記憶部３０に記憶される各情報についての詳細は後記する。
【００３９】
制御部１０は、ノード１全体の制御を司り、ノード識別子管理部１１、無効ノード設定部１２、振り分け部１３、信号処理部１４、原本データ移管部１５を含んで構成される。なお、この制御部１０は、例えば、記憶部３０に格納されたプログラムをＣＰＵ（図示省略）がＲＡＭ（図示省略）に展開し実行することで実現される。
【００４０】
ノード識別子管理部１１は、分散処理システム１０００においてクラスタを構成する各ノード１のノード情報（ＩＰアドレス等）および各ノード１が担当するＩＤ空間を管理する。
具体的には、ノード識別子管理部１１は、自身が属する分散処理システム１０００へのノードの離脱（減設）や追加（増設）が発生した場合に、その情報を外部から受信し、分散処理システム１０００を構成するノード１の識別情報等が記憶されたノード識別子管理情報１００（図４）を更新する。
【００４１】
図４は、本実施形態に係るノード識別子管理情報１００のデータ構成例を示す図である。
図４に示すように、ノード識別子管理情報１００には、分散処理システム１０００を構成する各ノード１のノード識別子１０１とアドレス１０２（例えば、ＩＰアドレス）とが対応付けられて格納される。
【００４２】
このノード識別子１０１は、例えば、当該分散処理システム１０００内において予め設定される特定のノード（例えば、ノード識別子１０１の昇順に設定）のノード識別子管理部１１で付与され、当該分散処理システム１０００内の各ノード１に配信される。なお、このノード識別子１０１は、コンシステント・ハッシュのＩＤ空間において仮想ＩＤを用いる場合、仮想ＩＤ毎に付与される。
【００４３】
ノード識別子管理部１１は、外部から受信したノードＩＤの変更情報に基づき、ノード識別子管理情報１００を更新（ノード１の減設・増設を反映）し、さらに、ノード１のＩＤ空間上での担当領域を変更するため、振り分けＩＤ情報２００（図５）を更新する。
【００４４】
図５は、本実施形態に係る振り分けＩＤ情報２００のデータ構成例を示す図である。
図５に示すように、振り分けＩＤ情報２００には、ノード識別子２０１に対応付けて、そのノード１が担当するＩＤ空間２０２（担当領域）が格納される。このノード識別子２０１は、図４のノード識別子１０１と同様の情報である。図５に示す例では、ＩＤ空間の全ＩＤ数が「０」〜「９９９」の１０００であり、例えば、ノード識別子２０１が「Ａ」のノード１が、担当するＩＤ空間２０２として「０〜１９９」について担当することを示している。また、この振り分けＩＤ情報２００において、ノード識別子２０１が「Ａ」のノード１（ノード「Ａ」）のＩＤ空間上のノードＩＤは、「１９９」であり、以下同様に、ノード「Ｂ」のＩＤ空間上でのノードＩＤは「３９９」であり、ノード「Ｃ」のＩＤ空間上でのノードＩＤは「５９９」であり、ノード「Ｄ」のＩＤ空間上でのノードＩＤは「７９９」であり、ノード「Ｅ」のＩＤ空間上でのノードＩＤは「９９９」である。そして、ノード識別子管理部１１は、振り分けＩＤ情報２００において、各ノード１のノードＩＤを昇順にソートし、連続したＩＤ空間２０２として管理する。
【００４５】
なお、本実施形態においては、閉じたＩＤ空間（コンシステント・ハッシュのＩＤ空間）上において各ＩＤを時計回りに配置し、データのＩＤから時計回りに辿った場合に最初に当たったノードをそのデータの担当として説明する。しかしながら、ＩＤ空間上において各ＩＤを反時計回りに配置し、データのＩＤから反時計回りに辿った場合に最初に当たったノードをそのデータの担当とするように構成してもよい。つまり、所定の方向回りにＩＤ空間上におけるＩＤを設定することができる。
【００４６】
分散処理システム１０００内の特権ノードのノード識別子管理部１１は、各ノード１に対して、最新のノード識別子管理情報１００および振り分けＩＤ情報２００を送信する。これにより、各ノード１のノード識別子管理部１１は、ノード識別子管理情報１００および振り分けＩＤ情報２００を常に最新の状態に更新して保持する。このようにすることにより、分散処理システム１０００内の各ノード１には、同一のノード識別子管理情報１００および振り分けＩＤ情報２００が保持される。
【００４７】
また、特権ノードは、例えば、このノード識別子管理情報１００（図４）の一番上の行のノード１から順に、特権ノードとなるように設定される。ノード１が新たに特権ノードになった場合、自身が特権ノードであることを示す情報を、各ノード１等に送信する。そして、特権ノードは、クラスタ内のノード１について、ＩＤ空間上での配置変更（ノードＩＤの変更等）があった場合に、自身の振り分けＩＤ情報２００を更新し、その更新情報を、各ノード１に配信する。
【００４８】
図３に戻り、無効ノード設定部１２は、分散処理システム１０００を構成する各ノード１が、低信頼のノードであるか高信頼のノードであるかを判定するための被災確率情報を取得する。そして、ノード１それぞれについて被災確率情報を参照し、所定の被災確率以上のノード１（被災して障害が発生する確率の高いノード）を、無効ノードとして決定する。無効ノード設定部１２は、無効ノードとして決定したノード１について、無効ノード情報３００（図６参照）の無効フラグを「ＯＮ」にする。
【００４９】
なお、この被災確率情報は、例えば、上記の非特許文献２に記載の技術により実現される。非特許文献２に記載の技術では、災害（地震等）の発生位置と、ネットワーク上の各装置の位置関係に基づき被災確率を算出する。本実施形態に係る特権ノードの無効ノード設定部１２は、分散処理システム１０００を構成する各ノード１の被災確率情報を、例えばネットワーク管理装置（図示省略）等を介して外部装置から取得する。
【００５０】
図６は、本実施形態に係る無効ノード情報３００のデータ構成例を示す図である。
図６に示すように、無効ノード情報３００には、ノード識別子３０１に対応付けて、そのノード１が無効ノードか否かを示す無効フラグ３０２が格納される。このノード識別子３０１は、図４のノード識別子１０１および図５のノード識別子２０１と同様の情報である。無効フラグ３０２は、ノード識別子３０１で示されるノード１が、無効ノードか否かを示すフラグである。例えば、ノード識別子３０１が「Ｃ」のノード１（ノード「Ｃ」）は、無効フラグ３０２が「ＯＮ」であるため、ノード「Ｃ」が無効ノードであることを示している。なお、無効ノードとは、上記のように、原本データの配置先として設定しないノードを意味する。また、無効ノード以外のノード、つまり、無効フラグ３０２が「ＯＦＦ」のノードを高信頼のノードとする。
【００５１】
分散処理システム１０００内の特権ノードの無効ノード設定部１２は、外部から被災確率情報を受信し、無効ノードに該当するか否かを判定した上で、無効ノード情報３００を更新するとともに、各ノード１に対して、最新の無効ノード情報３００を送信する。これにより、各ノード１の無効ノード設定部１２が、自身の記憶部３０に記憶された無効ノード情報３００を常に最新の状態に更新して保持する。このようにすることにより、分散処理システム１０００内の各ノード１には、同一の無効ノード情報３００が保持される。
【００５２】
図３に戻り、振り分け部１３は、ロードバランサ３（図１）等を介してクライアント２から受信したメッセージ内の情報（「振り分けキー」）をもとに「ｈａｓｈ（ｋｅｙ）」を算出し、振り分けＩＤ情報２００（図５）を参照して、そのメッセージの処理を担当するノード１を抽出する。そして、振り分け部１３は、その抽出したノード１について、無効ノード情報３００（図６）を参照し、当該ノードが無効ノードであるか否かを確認する。振り分け部１３は、当該ノードが無効ノードでなければ、その抽出したノード１のアドレス情報を、ノード識別子管理情報１００（図４）を参照して取得し、その抽出したノード１へメッセージの振り分け（送信）を行う。
一方、振り分け部１３は、抽出したノード１が無効ノードであれば、振り分けＩＤ情報２００（図５）および無効ノード情報３００（図６）を参照し、その無効ノードのＩＤ空間上で時計回りに次に位置する無効ノードではないノード（高信頼のノード）を、振り分け先のノード１として特定する。そして、振り分け部１３は、特定したノード１（高信頼のノード）へメッセージの振り分け（送信）を行う。
【００５３】
信号処理部１４は、自身のノード１が担当するデータに関するメッセージの信号処理を実行する。このメッセージにより信号処理部１４が実行する処理は、例えば、データの登録、更新、検索、削除等である。また、信号処理部１４は、データの登録や更新等のメッセージを受信した場合に、振り分けＩＤ情報２００を参照し、冗長度に応じて、自身のノード１からＩＤ空間上で時計回りに次のノードというようにして、データの複製を行うノード（複製ノード）を決定する（冗長度が「３」の場合は、２つの複製ノードを決定する。）。そして、信号処理部１４は、決定した複製ノードに対して、原本データを複製した複製データの送信（レプリケーション）を実行する。
この信号処理部１４は、信号処理後に送付するメッセージに、例えば、ＳＩＰ（Session Initiation Protocol）においては「Call-id」をもとに算出したハッシュ値を振り分けキーとして埋め込む（ＳＩＰにおいては、例えばTo/FromヘッダのTagに記載する。）ようにしてもよい。これにより、振り分け部１３がそのメッセージの後続呼を受信した場合に、振り分けキーとして埋め込まれたハッシュ値を用いて、ノード識別子管理情報１００（図４）を参照し、その後続呼を担当するノード１を特定することができる。
【００５４】
原本データ移管部１５は、自身が特権ノードである場合には、無効ノード設定部１２が、外部から被災確率情報を受信し、無効ノード情報３００（図６）を更新した際に、または、自身が特権ノードではない場合は、最新の無効ノード情報３００を受信し、自身の記憶部３０に記憶された無効ノード情報３００を更新した際に、次の処理を行う。
原本データ移管部１５は、無効ノード情報３００（図６）において、自身の無効フラグ３０２が、「ＯＦＦ」から「ＯＮ」に変更されたことを確認した場合には、自身が記憶する原本データについてレプリケーションを実行した上で、当該原本データを削除する処理を行う。つまり、ノード１は、原本データを削除する前に、原本データと複製データとの同期をとるためのレプリケーションを実行し、複製データを最新の状態にする。一方、ノード１は、自身が無効ノードとなった場合には、原本データの処理を行わない。よって、無効ノードとなったノード１は、当該原本データを保持する必要がないため削除する。
【００５５】
原本データ移管部１５は、無効ノード情報３００（図６）において、自身の一つ上の行（レコード）、つまり、ＩＤ空間上で反時計回りに隣接する、直近の高信頼のノード１の無効フラグ３０２を監視し、そのノードの無効フラグ３０２が「ＯＦＦ」から「ＯＮ」になった場合に、自身が当該ノード１の担当領域について、原本データを処理するノードになったと認識し、自身が記憶部３０に格納する複製データを原本データに昇格させる。そして、その原本データの複製データを送信するレプリケーションを実行する。具体的には、原本データ移管部１５は、冗長度に応じて、自身のノード１からＩＤ空間上で時計回りに次のノードというようにして、その原本データの複製を行うノード（複製ノード）を決定する（冗長度が「３」の場合は、２つの複製ノードを決定する。）。そして、原本データ移管部１５は、決定した複製ノードに対して、原本データを複製した複製データの送信（レプリケーション）を実行する。
【００５６】
このようにすることにより、原本データ移管部１５は、分散処理システム１０００に予め設定されている冗長度を超えた複製データを、余分に記憶しておくことをなくした上で、低信頼と判定されたノード１から、高信頼のノード１に原本データを移管させることができる。
【００５７】
＜処理の流れ＞
次に、本実施形態に係るノード１が実行する、メッセージ処理の流れについて説明する。なお、ここでは、ノード１が、新規データを登録する処理を例に説明する。また、各ノード１のノード識別子管理部１１により、ノード識別子管理情報１００および振り分けＩＤ情報２００についての最新の情報が各ノード１の記憶部３０に格納されているものとする。
図７は、本実施形態に係るノード１が実行するメッセージ処理の流れを示すフローチャートである。
【００５８】
まず、特権ノードのノード１は、メッセージ処理を実行するに際して、各ノード１の被災確率情報を常に最新の情報に更新しておく。詳細には、次の処理を実行する。
特権ノードのノード１（無効ノード設定部１２）は、ネットワーク管理装置（図示省略）等から、分散処理システム１０００内の各ノード１の被災確率情報を受信する（ステップＳ１０）。
【００５９】
そして、無効ノード設定部１２は、ノード１それぞれについての被災確率情報を参照し、所定の被災確率以上のノード１を、無効ノードとして決定する。無効ノード設定部１２は、無効ノードとして決定したノード１について、無効ノード情報３００（図６）を参照し、無効フラグを「ＯＮ」に設定することにより、無効ノード情報３００を更新する（ステップＳ１１）。
【００６０】
続いて、無効ノード設定部１２は、無効ノード情報３００の更新情報を生成し、分散処理システム１０００内の各ノード１に送信する（ステップＳ１２）。なお、ここで、更新情報には、無効ノード情報３００内のデータすべてを送信してもよいし、現時点で各ノード１が記憶している無効ノード情報３００との差分を更新情報として送信してもよい。
【００６１】
次に、各ノード１の無効ノード設定部１２は、受信した更新情報（無効ノード情報３００）を用いて、自身の記憶部３０に記憶されている無効ノード情報３００を更新する（ステップＳ１３）。
ステップＳ１０〜Ｓ１３の処理を所定の時間間隔で繰り返し、各ノード１には常に最新の無効ノード情報３００を格納させておく。
【００６２】
ここで、分散処理システム１０００（図１参照）のいずれかのノード１が、クライアント２からのメッセージ（新規データ登録）を受信する（ステップＳ１４）。
【００６３】
メッセージを受信したノード１の振り分け部１３は、振り分けＩＤ情報２００（図５）および無効ノード情報３００（図６）を参照し、振り分け先となるノード１を特定し、メッセージを送信する（ステップＳ１５）。
具体的には、メッセージを受信したノード１の振り分け部１３は、受信したメッセージ内の情報（「振り分けキー」）をもとに「ｈａｓｈ（ｋｅｙ）」を算出し、振り分けＩＤ情報２００を参照して、そのメッセージの処理を担当するノード１を抽出する。そして、振り分け部１３は、その抽出したノード１について、無効ノード情報３００を参照し、当該ノードが無効ノードであるか否かを確認する。振り分け部１３は、当該ノードが無効ノードでなければ、その抽出したノード１を、メッセージの処理を担当するノードとして特定する。一方、振り分け部１３は、抽出したノード１が無効ノードであれば、その無効ノードのＩＤ空間上で時計回りに次に位置する無効ノードではないノード（高信頼のノード）を、振り分けＩＤ情報２００および無効ノード情報３００を参照して抽出し、その抽出したノードを、メッセージの処理を担当するノード１として特定する。
そして、振り分け部１３は、特定したノード１にメッセージを送信する。なお、振り分け部１３は、自身のノード１をメッセージの処理を担当するノードとして特定する場合もある。
【００６４】
振り分け先として特定されたノード１は、メッセージを受信すると、信号処理部１４が、そのメッセージに付されたデータを原本データとして、自身の記憶部３０に記憶する（ステップＳ１６）。
また、信号処理部１４は、振り分けＩＤ情報２００（図５）を参照し、冗長度に応じて、自身のノード１からＩＤ空間上で時計回りに次のノードというようにして、原本データの複製（複製データ）の配置先となるノード（複製ノード）を決定し、その複製データの送信（レプリケーション）を実行する（ステップＳ１７）。そして、メッセージ処理（新規データの登録処理）を終了する。
【００６５】
このようにすることにより、本実施形態に係るノードおよびデータ配置方法によれば、一度、低信頼のノードに原本データを配置した後に、高信頼のノードへ原本データを移管する処理を不要にすることができるとともに、この原本データの移管に伴う、不要なレプリケーションを実行しないようにすることができる。
【００６６】
（本実施形態の変形例）
次に本実施形態の変形例に係るノード１ａ（図９参照）について説明する。
本実施形態の変形例に係るノード１ａは、分散処理システム１０００の各ノード１ａの負荷を分散するように、つまり、特定のノード１ａに負荷が偏らないように、リバランシングを実行する際に、不要なレプリケーションが発生しないようにすることを特徴とする。
【００６７】
図８は、本実施形態に係るノード１（図３参照）において、リバランシングを行う場合の課題を説明するための図である。
ここでは、図８（ａ）に示すように、低信頼のノード「Ｃ」が無効ノードとして設定されているとする。そして、そのノード「Ｃ」が本来担当すべきＩＤ空間上の領域に配置されている原本データ「Ｇ２」について、本実施形態においては、無効ノードであるノード「Ｃ」ではなく、ＩＤ空間上で時計回りに次に位置する無効ノードないノード（高信頼ノード）であるノード「Ｄ」が担当している。よって、ノード「Ｄ」により、複製ノード「ｇ２」が、ＩＤ空間上で時計回りに次のノードであるノード「Ｅ」と、さらにその次のノードであるノード「Ａ」に配置されている。また、ＩＤ空間上において、原本データ「Ｇ３」が、高信頼のノード「Ａ」の担当領域に配置され、その複製データ「ｇ３」が、ＩＤ空間上で時計回りに次のノードであるノード「Ｂ」と、さらにその次のノードである低信頼のノード「Ｃ」に配置されているとする。
【００６８】
この状態において、図８（ａ）に示すように、無効ノードであるノード「Ｃ」の担当領域に、新たなノード「Ｆ」が、負荷低減等のリバランシングのために増設されることを想定する。ここで、ノード「Ｃ」は、無効ノードであるため、原本データは保持していないが、複製データ「ｇ３」は記憶している。新たなノード「Ｆ」が、無効ノードであるノード「Ｃ」の担当領域に配置されると、図８（ｂ）に示すように、冗長度を保つため、ノード「Ａ」は、新たなノード「Ｆ」を自身の原本データの複製を配置する複製ノードとして決定する。そして、ノード「Ａ」は、ノード「Ｆ」に対し原本データ「Ｇ３」の複製データ「ｇ３」を送信するレプリケーションを実行する。また、無効ノードであるノード「Ｃ」は、不要となった複製データ「ｇ３」を削除する処理を行う必要がある。
【００６９】
このように、本実施形態に係るノード１を含む分散処理システム１０００において、無効ノードの担当領域に、新たなノード１を増設するようなリバランシングを行おうとすると、必ず新たなノード１へのレプリケーションが発生してしまう。
本実施形態の変形例に係るノード１ａでは、上記したレプリケーションの発生を不要とする。以下、具体的に説明する。
【００７０】
図９は、本実施形態の変形例に係るノード１ａの構成例を示す機能ブロック図である。図３に示した、本実施形態に係るノード１と、同様の機能については、同一の名称と符号を付し、説明を省略する。
図９に示すように、本実施形態の変形例に係るノード１ａは、図３に示すノード１の各構成に加えて、制御部１０にリバランシング部１６を備える。
【００７１】
リバランシング部１６は、分散処理システム１０００を構成するノード１の増設や減設を行ったり、ＩＤ空間上の各ノード１のノードＩＤを変更したりすることにより、各ノード１の負荷の偏りの低減（リバランシング）を実現する。
このリバランシング部１６は、リバランシング処理を実行する際に、レプリケーションの発生を不要とするため、以下の所定のロジックに基づき、リバランシングを実行する。
【００７２】
〔リバランシングの所定のロジック〕
・無効ノードと高信頼ノードの位置関係を保つ。
図８において説明したように、無効ノードの担当領域に、新たに増設するノードを配置すると、無効ノードと高信頼ノードとのＩＤ空間上での位置関係が変更され、必ずレプリケーションが発生してしまう。そのため、リバランシング部１６は、リバランシングを実行する際に、無効ノードの担当領域には増設ノードを配置せず、無効ノードと高信頼ノードとのＩＤ空間上での位置関係を保つようにする。
具体的には、リバランシング部１６は、無効ノードのＩＤ空間上のＩＤ値を、反時計回りで最初のノード１の次のＩＤ値、つまり、反時計回りで最初のノード１のＩＤ値に「＋１」としたＩＤ値に設定する。なお、このＩＤ値の設定は、特権ノードのノード識別子管理部１１を介して、振り分けＩＤ情報２００（図５参照）を更新することにより行われる。
このようにすることにより、無効ノードの担当領域に、新たなノードが配置されることを防いだ上で、無効ノードには、複製ノードを配置することが可能となる。
【００７３】
図１０は、本実施形態の変形例に係るノード１ａがリバランシング（ノード増設）を行う場合の処理を説明するための図である。
本実施形態の変形例に係るノード１ａでは、図１０（ａ）に示すように、無効ノード設定部１２により、低信頼のノード「Ｃ」が無効ノードとして設定されるとともに、リバランシング部１６により、ノード「Ｃ」のＩＤ空間上の位置が、反時計回りで最初のノード１であるノード「Ｂ」の次の値（「＋１」した値）として設定される。
また、原本データ「Ｇ２」が、高信頼のノード「Ｄ」に配置され、その複製データ「ｇ２」が、ＩＤ空間上で時計回りに次のノードであるノード「Ｅ」と、さらにその次のノードであるノード「Ａ」に配置されている。さらに、原本データ「Ｇ３」が、高信頼のノード「Ａ」に配置され、その複製データ「ｇ３」が、ＩＤ空間上で時計回りに次のノードであるノード「Ｂ」と、さらにその次のノードである無効ノードのノード「Ｃ」に配置されているとする。
【００７４】
この場合において、リバランシング部１６は、無効ノードと高信頼ノードの位置関係を保った上で、増設するノード（ここでは、ノード「Ｆ」）のＩＤ空間上での位置を決定する。例えば、リバランシング部１６は、図１０（ａ）に示すように、ノード「Ｄ」の担当領域において、原本「Ｇ２」からみてＩＤ空間上で反時計回り側の位置に、増設ノードを配置する位置を決定する。
【００７５】
このリバランシング部１６の処理により、リバランシングの際のノードの増設位置が、無効ノードと高信頼ノードの位置関係を保つような位置に決定されると、図１０（ｂ）に示すように、新たなノード「Ｆ」がＩＤ空間上に配置されてもレプリケーションを発生しないようにすることができる。なお、図１０においては、無効ノード「Ｃ」のＩＤの値を、反時計回りで最初のノード１であるノード「Ｂ」の次の値（「＋１」した値）に設定しているため、常に無効ノードと高信頼ノードの位置関係を保つことが可能となる。
【００７６】
以上より、本実施形態の変形例に係るノード１ａによれば、分散処理システム１０００においてリバランシングを実行する際のレプリケーションを抑制することが可能となる。
【００７７】
なお、本実施形態の変形例に係るノード１ａのリバランシング部１６は、各ノード１のノード負荷（例えば、ＣＰＵ使用率、メモリ使用量、処理データの個数等）を監視し、各ノード１の負荷を平均した平均負荷値に基づき、各ノード１の負荷の偏りを低減するようなリバランシング処理を実行する場合においては、原本データの処理を行わない無効ノードを、平均負荷値の計算対象から外すようにする。このようにすることにより、原本データを実際に処理する高信頼ノードそれぞれについての負荷の偏りをより正確に低減することが可能となる。
【符号の説明】
【００７８】
１，１ａ  ノード
２      クライアント
３      ロードバランサ
１０    制御部
１１    ノード識別子管理部
１２    無効ノード設定部
１３    振り分け部
１４    信号処理部
１５    原本データ移管部
１６    リバランシング部
２０    入出力部
３０    記憶部
１００  ノード識別子管理情報
２００  振り分けＩＤ情報
３００  無効ノード情報
４００  データ
１０００  分散処理システム
【図１】
0006473425.tif 000002
【図２】
0006473425.tif 000003
【図３】
0006473425.tif 000004
【図４】
0006473425.tif 000005
【図５】
0006473425.tif 000006
【図６】
0006473425.tif 000007
【図７】
0006473425.tif 000008
【図８】
0006473425.tif 000009
【図９】
0006473425.tif 000010
【図１０】
0006473425.tif 000011
【図１１】
0006473425.tif 000012