(57)【特許請求の範囲】
【請求項１】
複数のノード装置が協調して動作し、各ノード装置とノード装置により管理される各データとに識別子が割り当てられ、当該識別子の値により各データについて管理を担当するノード装置が定められるともに、ノード装置には複数の識別子が割り当てられ、各データの識別子は一意の値を入力とするハッシュ関数により割り当てられる分散システムにおいて、前記ノード装置に識別子を割り当てる方法であって、
前記分散システムのノード装置に対する識別子割当てイベントを検出する第一のステップと、
前記識別子割当てイベントを検出すると、前記分散システムにおける割当て済みの識別子を格納した識別子一覧表にアクセスする第二のステップと、
前記識別子一覧表を参照して、前記識別子一覧表に格納されている隣り合う識別子の間の領域が最大となる隣り合う識別子を決定する第三のステップと、
前記決定された隣り合う識別子の間の領域内の何れかの識別子を前記ノード装置に割り当てる第四のステップと、
を有し、
前記第三のステップと前記第四のステップとを所定数の回数繰り返してノード装置に複数の識別子を割り当てる方法。
【請求項２】
前記分散システムにおいて識別子が割当て済みのノード装置を削除するノード装置削除イベントを検出するステップと、
前記ノード装置削除イベントを検出すると、前記ノード装置に割り当てられていた識別子を割当解放し、前記削除されたノード装置の処理負荷を前記識別子一覧表の割当解放された識別子に隣り合う識別子を有するノード装置に再割当てするステップと、
をさらに有する、請求項１記載の方法。
【請求項３】
前記第四のステップは、前記決定された隣り合う識別子の間の領域を等分するよう前記識別子を前記ノード装置に割り当てる、請求項１又は２記載の方法。
【請求項４】
前記第四のステップは、前記決定された隣り合う識別子の間の領域を、前記ノード装置の計算能力及び／又は記憶容量に応じて分割するよう前記識別子を前記ノード装置に割り当てる、請求項１乃至３何れか一項記載の方法。
【請求項５】
請求項１乃至４何れか一項記載の方法をコンピュータに実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のノードが協調して動作する分散システムに関し、より詳細には、分散システムにおいてノード間の負荷の分散を可能にするノードに対する識別子割当て方法及びプログラムに関する。
【背景技術】
【０００２】
一般に、複数のノードが協調して動作する分散システムでは、分散システム内の個々のノードを認識し識別するための識別子が割り当てられる。一部の分散システムでは、識別子は、単に個々のノードの識別を可能にしさえすればよいという役割しか有していない。その場合、識別子の割当ては、ノード間で同じ値が使われることがないよう、一意な値を割当てるものであればよい。一方で、コンシステント・ハッシング（非特許文献１）のように、識別子の役割が、識別子の値によって個々のノードが担当する処理負荷量等が決定されるなど、個々のノードの識別以上の意味を持つような分散システムも存在する。
【０００３】
このような分散システムにおいて、コンシステント・ハッシング（Consistent  Hashing）などに基づくデータ管理方法が利用されている。コンシステント・ハッシングによると、各ノードを識別するための識別子と、これらのノードにより管理される各データを識別するための識別子とが割り当てられる。あるノードが管理するデータの識別子の範囲は、典型的には、当該ノードの識別子と、当該ノードより小さな値の識別子を有するノードのうち最も大きな値の識別子を有するノードの識別子との間で定められる。そして、これらのノードやデータの識別子をハッシュ関数などを用いて返される無作為な値により割当てることによって、個々のノードが担当するデータの量は確率的に均等になり、このような分散データ管理プログラムによりノード間の負荷を均等にすることが可能となる。
【０００４】
図１は、従来技術による無作為な識別子割当て方法による単一の識別子の割当ての一例を示す。図１では、識別子の値の小さいものから、円形にノードが並べて示されている。ここで円形に並べているのは、コンシステント・ハッシング等では識別子の最大値の次に最小値が来るためである。この円のことを、コンシステント・ハッシングの用語に倣いＩＤ空間と呼称する。ＩＤ空間上に数字とともに配置されている丸や四角等の記号はノードの識別子を表し、数字はそのノードが何番目に分散システムに追加されたものかを表している。なお、ＩＤ空間上では時計周りに行くほど識別子の値が大きくなるものとする。ここで、ノードの担当する領域とは、そのノードの識別子から反時計周りに別のノードの識別子までの円弧に相当する。図１に示される例では、ノード１の担当する領域とは、ノード１とノード２との間の円弧のことである。この領域の大小に比例して、ノードの担当するデータや処理の負荷量が決まる。図１は、コンシステント・ハッシングにおける最も基本的なノードの識別子の割り当て方法の具体例である。ここではノードは５つまで追加されており、それぞれに無作為な値の識別子が与えられてＩＤ空間上に存在している。識別子の値が無作為に決められているため、ノード間の領域の大きさにもばらつきが見られる。
【０００５】
このように、このコンシステント・ハッシングにおいては、ノードとデータの識別子の割り当ては、ハッシュ関数によって行われる。ハッシュ関数は入力に対して、無作為な出力を返す関数である。ある入力に対しては常に同じ出力を返すことから、完全にランダムな値を返す関数ではなく、元々の入力の持っていた意味等を無視した出力を返すという意味で、無作為な出力を行う関数である。このハッシュ関数に、ノードやデータ毎に決まった一意な値、例えばノードの名前やアドレス、データの名前等を入力することで得られた値を、識別子として利用する。
【０００６】
このような識別子の割り当て方法を用いる場合、個々のノードの担当するデータの識別子の範囲は、高い確率で平均値よりも大きくなる。これはランダウの漸近記法によって記すならば、各ノードの担当する負荷の量が、平均負荷のΘ（ｌｏｇＮ）倍になると記述することができる（Ｎはノードの総数）。これは、ノード数が多いほど平均よりも多くの負荷を担当しなければならないノードが存在することを意味する。コンシステント・ハッシングではこの問題の緩和のために、１つのノードに対し複数の識別子を割り当てることによって、確率的にこの担当する負荷を均一化することを行っている。
【０００７】
図２は、従来技術による無作為な識別子割当て方法による複数の識別子の割当ての一例を示す。図２では、ノード１つにつき複数の識別子が割り当てられている。コンシステント・ハッシングでは、負荷の分散のためにこの方法を用いることが言及されている。図２では、ノード１つにつき３つの識別子を割り当てる場合に、３つのノードが追加されている状態を表している。各ノードは３つの識別子のそれぞれの担当する３つの領域を束ねただけの領域を担当する形となる。大数の法則により、１つのノードに割り当てる識別子の数を増やすほど、ノード単位での領域は平均化される。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】D. Karger, E. Lehman, T. Leighton, M. Levine, D. Lewin, and R. Panigrahy, "Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web," in Proceedings of the 29th ACM Symposium on Theory of Computing (STOC'97), pp.654-663, May 1997.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述したような従来技術による１つのノードに対し複数の識別子を割り当てるという方法は、一定の効果を持つものの、より均一性の高い負荷分散を行いたいような分散システムにおいては、更なる改善が求められる。
【００１０】
より効果的な識別子の割当て方法を検討する際に、以下のような事項を考慮する必要がある。１つには、ノードの識別子を割り当てた後、これを変更してはならないということである。これは、ノードの識別子を変更すると幾つかのノードの担当する量が変化し、ノード間でのデータの移動というノード間の通信コストが大きい処理が発生するためである。このコストは場合によってはそもそものデータ管理の処理自体を阻害しうるものであり、負荷の均一化以前に回避しなければならない。
【００１１】
もう１つは、分散システムにおいては、分散システムを構成するノードの数が動的に変化しうるという点である。分散システム全体で処理すべきデータの量が増加しているような場合には、ノードを追加しノード数を増やす。処理すべきデータの量が減ったり、あるいは何らかの故障によってノードがノードとして処理を継続することができなくなった場合には、当該ノードを削除して全体のノード数を減らす。ここで、ノード数が減る場合、削除されたノードが担当していた範囲は、担当範囲の決定方法（あるノードが管理するデータの識別子の範囲を、ノード自身の識別子と、当該ノードより小さな値の識別子を持つノードの中で最も大きい値の識別子を持つノードの識別子との間と定める）に従って、削除されたノードよりも大きい識別子を持つ直近のノードによって引き継がれることになる。そのため、仮に各ノードによって担当する量が完全に均一であった場合でも、いずれかのノードの削除が行われると、そのノードの担当していた量が隣のノードに引き継がれ、引き継いだノードは担当量がそれまでの２倍になってしまうことになる。
【００１２】
本発明の課題は、上記問題点に鑑み、分散システムのノード数が変動しても個々のノードの負荷を均一化することを可能にする識別子割当て方法及びプログラムを提供することである。
【課題を解決するための手段】
【００１３】
上記課題を解決するため、本発明の一態様は、複数のノード装置が協調して動作する分散システムにおいて、前記ノード装置に識別子を割り当てる方法であって、前記分散システムのノード装置に対する識別子割当てイベントを検出するステップと、前記識別子割当てイベントを検出すると、前記分散システムにおける割当て済みの識別子を格納した識別子一覧表にアクセスするステップと、前記識別子一覧表を参照して、前記識別子一覧表に格納されている隣り合う識別子の間の領域が最大となる隣り合う識別子を決定するステップと、前記決定された隣り合う識別子の間の領域内の何れかの識別子を前記ノード装置に割り当てるステップとを有する方法に関する。
【発明の効果】
【００１４】
本発明によると、分散システムの識別子の間隔を均一化することにより、各ノードの担当する処理量やデータ量を均一化し、ノード間の負担量を均等にすることが可能になる。また、分散システムにおけるノードの追加・削除などの状況に関わらず、ノード間の負担を公平化することができ、システム全体の利用効率を向上させることが可能になる。
【図面の簡単な説明】
【００１５】
【図１】図１は、従来技術による識別子割当て方法による単一の識別子の割当ての一例を示す。
【図２】図２は、従来技術による識別子割当て方法による複数の識別子の割当ての一例を示す。
【図３】図３は、本発明の一実施例による識別子割当て装置の構成を示す。
【図４】図４は、本発明の一実施例による識別子割当て装置を備えた分散システムの構成を示す。
【図５】図５は、本発明の一実施例による識別子割当て装置を備えた分散システムの他の構成を示す。
【図６】図６は、本発明の一実施例による識別子割当て方法による単一の識別子の割当ての一例を示す。
【図７】図７は、本発明の一実施例による識別子割当て方法による複数の識別子の割当ての一例を示す。
【図８】図８は、本発明の一実施例による識別子割当て方法によるノードを削除した場合の単一の識別子の割当てにおける担当領域変更の一例を示す。
【図９】図９は、本発明の一実施例による識別子割当て方法によるノードを削除した場合の複数の識別子の割当てにおける担当領域変更の一例を示す。
【図１０】図１０は、本発明の一実施例による識別子割当て方法の処理を示すフロー図である。
【発明を実施するための形態】
【００１６】
以下、図面に基づいて本発明の実施の形態を説明する。
【００１７】
まず、本発明の原理を説明する。本発明では、ノードへの識別子の割り当てに際して、各ノードに１つの識別子ではなく複数の識別子を割り当てることが可能である。各識別子はそれぞれに担当する範囲を持ち、それらを１つのノードがまとめて管理する形になる。個々の識別子の担当する範囲は、従来技術に関して述べたようにΘ（ｌｏｇＮ）倍になる確率が高いが、複数の識別子で担当される範囲を総合することで、大数の法則により均一性が向上する。
【００１８】
また、ノードが削除される場合、個々の識別子の担当範囲は、各識別子よりも値が大きい直近の識別子によって引き継がれる。これらの引き継ぎ先の識別子を持つノードは１つのノードでなく、いくつかのノードである可能性が高い。これにより、ノードの削除時の負荷が隣のノードに引き継がれ、負荷の均一性が崩れるという従来技術による問題を軽減することができる。
【００１９】
また、個々の識別子の割り当てに際して、従来技術のようにハッシュ関数を用いて無作為な値を割り当てるのではなく、偏りが生じている部分を平均化するような値を作為的に割り当てる。すなわち、識別子を割り当てる時点での識別子間の間隔の大きい順に、ノードに割り当てる領域を識別子の数だけ選択し、その領域の中のある値を識別子として割り当てることで、ノードの担当範囲の決定方法に従って、それまで間隔の大きかった領域を２つに分割するものである。
【００２０】
これは、従来技術のように確率的に識別子間の間隔の平均化を行うのではなく、決定的に識別子間の間隔の均一化を行うことを意味する。これにより、従来技術では平均よりも間隔の大きい領域がある場合も、次に追加されたノードがこの領域を分割するような識別子を持つかどうかはランダムであったものが、この決定的な方法では確実に大きな領域を分割するような識別子を持つことになる。
【００２１】
ここで、単純にノード追加時の識別子の間隔の均一性だけを考えるならば、１つのノードに複数の識別子を割り当てる必要はなく、上記の決定的な方法によってノードに１つだけ識別子を割り当てればよい。一方で、識別子が１つしか割り当てられない場合、ノードが削除された場合に生じた不均一性は、次にノードが追加されるまで均一化されることはない。本発明では、複数の識別子の割り当てと、決定的な識別子の割り当てを併用することで、従来技術による問題点であるノード数の変動における均一性の欠如を生じさせることなく、個々のノードの負荷の均一化を実現することができる。
【００２２】
次に、本発明の一実施例による識別子割当て装置を説明する。図３は、本発明の一実施例による識別子割当て装置の構成を示す。識別子割当て装置１００は、典型的には、補助記憶装置、メモリ装置、ＣＰＵ、通信装置などの各種ハードウェアリソースの１以上から構成される。補助記憶装置は、ハードディスクやフラッシュメモリなどから構成され、後述される各種処理及び機能を実現するプログラムやデータを格納する。メモリ装置は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などから構成され、プログラムの起動指示があった場合に、補助記憶装置からプログラムを読み出して格納する。ＣＰＵは、情報を処理するプロセッサとして機能し、メモリ装置に格納されたプログラムに従って後述される各種機能を実現する。通信装置は、ネットワークを介し他の装置と接続するための各種通信回路から構成される。通信装置は、典型的には、各種ネットワークと接続するための通信インタフェースなどを有する。なお、識別子割当て装置１００は、上述したハードウェア構成に限定されるものでなく、ネットワークを介し各ノードと双方向通信するための機能を有する他の何れか適切なハードウェア構成を有してもよい。
【００２３】
なお、識別子割当て装置１００は、図４に示されるように、サーバ・クライアントタイプの分散システムのサーバとして配置されてもよい。すなわち、識別子割当て装置１００は、分散システムの各ノードと接続することで、ノードから識別子割当て要求を受け、これに応答して識別子を割当てるサーバとして機能する。
【００２４】
あるいは、識別子割当て装置１００は、図５に示されるように、分散システムの各ノード内に配置されてもよい。すなわち、識別子割当て装置１００は、分散システムのノード上に、独立した装置又はプログラムもしくは分散システムのプログラムの一部として組み込まれてもよい。
【００２５】
なお、本発明の識別子割当て装置１００は、独立した物理的装置である必要はなく、プロセッサとメモリとを備えた汎用コンピュータに後述される識別子割当て機能及び方法を実行させるためのコンピュータプログラムとして実現されてもよい。この場合、そのプログラムの動作する位置は限定されず、分散システムから識別子割当て要求が受けられ、分散システムのノードの識別子の一覧表を保持し、もしくは参照可能であれば、どのような接続構成であっても動作可能である。
【００２６】
なお、本明細書で記述するノードとは、分散システムの処理の構成要素のことであり、具体的には分散システムを構成する各計算機がノードとして実現される。一方で、複数の仮想マシンを用いたり、分散システムのプログラムを複数起動することで、１つの計算機上で複数のノードが存在する形を実現することも可能である。
【００２７】
図３に示されるように、識別子割当て装置１００は、識別子一覧表格納部１０１と、識別子決定部１１０とからなる。
【００２８】
識別子一覧表格納部１０１は、分散システム内のノードに対してすでに割当てられている識別子を記述した識別子一覧表を格納する。上述したように、本発明による識別子は、個々のノードを特定するだけでなく、識別子の値によって個々のノードが担当する処理負荷の量等が決定されるなど、個々のノードの識別以上の意味を有している。識別子一覧表は、典型的には、分散システム内の既存のノードに割当て済みの識別子を、ノード名やノードが分散システムに接続された順番などに関連付けて格納する。これにより、ノード削除時に、削除対象のノードに割り当てられている識別子を迅速に特定することができる。
【００２９】
識別子決定部１１０は、新たなノードの追加など識別子割当てイベントに応答して、識別子一覧表を参照して、後述される処理により割り当てるべき識別子を決定する。さらに、識別子を決定した後、識別子決定部１１０は、当該識別子を識別子一覧表格納部１０１に通知し、識別子一覧表を更新させる。
【００３０】
識別子決定部１１０は、決定的識別子決定部１１１と、複数識別子割当て部１１２とを有する。決定的識別子決定部１１１は、まず識別子一覧表を参照することで、分散システムの全ノードの識別子を取得し、それらを識別子の大きさの順に並べ、識別子間の距離を計算する。この識別子間の距離は、例えば、図１及び２に示されたＩＤ空間上の距離であり、隣り合う識別子間の距離は、当該識別子間の円弧の長さ、当該識別子と円の中心とにより画成される扇型領域の面積などとして定義されてもよい。なお、本明細書における「隣り合う」、「値の間隔が大きい」、「領域が大きい」などの表現は、このような識別子間の距離の定義に基いた表現である。一般に、距離の定義にはユークリッドノルムや排他論理和等が用いられる。本明細書では特に断りなくユークリッドノルムを距離の定義として用いるが、本発明はこれに限定されるものでなく、排他論理和やあるいはその他の距離の定義を用いてもよい。
【００３１】
決定的識別子決定部１１１は、計算した距離の情報をもとに、識別子間の間隔の大きい順に、分散システムから要求された識別子の個数だけ領域（上述したＩＤ空間では、識別子間の円弧）を選択する。選択した個々の領域中に含まれる値をそれぞれ識別子として設定し、分散システムにこの複数の識別子を通知する。このような識別子決定方法によると、領域内の何れかの値を識別子に取ることで、この識別子を割り当てられたノードが、それまでに存在し不均一性の原因となっていた領域を大きい順に分割することになる。
【００３２】
なお、識別子の割り当ての際に識別子の間隔が大きい順に領域を選択するものとしたが、この間隔の大きさが同じものが複数あった場合に、そのいずれかを選択するかを決定する選択方法については、本明細書においては特に限定しない。ここでは、一例として領域内の識別子の値が小さい領域、すなわち、図１及び２に示されるようなＩＤ空間では、反時計回りの方向にある領域から選択するものとする。
【００３３】
ここで、選択された領域をどのように分割するか、すなわち、選択された領域内の何れの識別子を決定するかについては、いくつかの方法が考えられる。例えば、最もシンプルな例は均等に２分割する方法である。この場合、新しいノードが分散システムに追加されるたびに最大領域の大きさが半分に分割されていくことで、識別子間の間隔の偏りを補正していく形となる。他の実施例では、各ノードの計算能力や記憶容量に応じて、割り当てる領域を調整するようにしてもよい。すなわち、任意の比率で領域を分割するようにしてもよい。しかしながら、本発明は、上述した分割の比率について限定されるものでなく、他の適切な任意の比率による分割方法が利用されてもよい。
【００３４】
上述した識別子の決定方法により、各ノードの担当する領域が均一化され、各ノードの担当する処理の量やデータの量についても均一化されることになる。なお、コンシステント・ハッシングの仕組みを使って、データの格納位置の決定ではなく分散システムの処理を行う位置を決定する場合がある。本明細書では以下特に断りなく、データの分散の仕組みにおいて本発明による識別子割当て装置を適用することを前提として説明を行うが、分散システムの処理を行う位置を決定する場合にも本発明を適用可能であり、データの格納位置の決定のみに本発明の適用対象を限定するものではない。
【００３５】
複数識別子割当て部１１２は、分散システムから要求された個数だけ、１つのノードに対して決定的識別子決定部１１１を使用して複数の識別子を割り当てる。具体的には、複数識別子割当て部１１２は、分散システムから要求された識別子の個数に対応して、上述した決定的識別子決定部１１１の処理を複数回実行させ、決定された複数の識別子を当該ノードに割当てる。
【００３６】
次に、図６〜９を参照して、本発明の上述した識別子割当て装置による識別子割当ての具体例を説明する。図６〜９では、図１及び２と同様に、識別子の値の小さいものから、円形にノードが並べて示されている。この円により示されるＩＤ空間上に数字とともに配置されている丸や四角等の記号はノードの識別子を表し、数字はそのノードが何番目に分散システムに追加されたものかを表している。なお、ＩＤ空間上では時計周りに行くほど識別子の値が大きくなるものとする。ここで、ノードの担当する領域とは、そのノードの識別子から反時計周りに別のノードの識別子までの円弧に相当する。この領域の大小に比例して、ノードの担当するデータや処理の負荷量が決まる。
【００３７】
図６は、本発明の決定的な識別子割り当て方法を用いて、５つのノードに単一の識別子を割り当てた際の状態を表している。ここでは、一例として領域を均等に２分割する形で識別子を割り当てている。一切の領域が存在しない初期状態では、ノード１への識別子の割り当てには任意の値が割り当てられ、ノード２以降は、それぞれ存在する領域のうち最大の領域の中間に新しい識別子が割り当てられる。図６の例では、同じ大きさの領域が複数存在する場合は、円の最も上側の点（図６ではノード１が存在する場所）を始点として、最も識別子の小さい領域を選択することとしている。このため、ノード４まで追加された時点で正確に４分割されていたＩＤ空間において、次のノード５は、ノード３の管理する領域、すなわち、ノード１とノード３との間の領域の中央に識別子を割り当てられ、ノード３の担当していた領域を２分割することとなる。
【００３８】
図７は、図６に示した決定的な識別子の割り当て手法を用いて、３つのノードのそれぞれに３つの識別子を割り当てた場合の状態を表している。図２の場合と同様に、大数の法則により図６の例よりも個々のノードの担当する領域が均一になっていることがわかる。また、図２の例とは異なり、決定的に識別子の値が決定されているため、確率によってばらつきが生じることのない、常に同じ形でＩＤ空間上に識別子が配置されていく形となる。そのため、図１，２の従来技術による識別子割当て方法及び図６の単一の識別子割当て方法と比較して、図７に示される本発明の複数識別子割当て方法は、確率に依らず安定していて、かつ最も領域が均一化される方法であることがわかる。
【００３９】
図８，９はノードの削除時におけるノードの担当領域の変化を表したものである。このようなノードの削除は、例えば、分散システムの管理者などからのノードの削除指示、ノードの故障、分散システムからのノードの接続解除などによりトリガーされる。図８は、各ノードに単一の識別子が割り当てられる図１の例において、ノード１が削除された場合のノードの担当領域の変化を示している。図８の左側に示されるように、ノード１が削除される前は、ノード１は円弧２０１の領域を担当し、ノード４は円弧２００の領域を担当していた。これが、図８の右側に示されるように、ノード１が削除されると、ノード１の担当していた円弧２０１の領域全体がそのまま隣接するノード４に引き継がれ、ノード４の担当領域が円弧２０２にまで増大する。
【００４０】
一方、図９は、各ノードに複数の識別子が割り当てられる図２の例において、ノード１が削除された場合のノードの担当領域の変化を示している。図９の左側に示されるように、ノード１が削除される前は、ノード１は３つの円弧３０１，３０３，３０５を担当している。これが、図９の右側に示されるように、ノード１が削除されると、その担当していた３つの領域は、円弧３０１の領域はノード２の担当する円弧３００に引き継がれ、円弧３０６となる。円弧３０３の領域はノード２の担当する円弧３０２に引き継がれ、円弧３０７となる。円弧３０５の領域はノード３の担当する円弧３０４に引き継がれ、円弧３０８となる。このように、ノード１つにつき複数の識別子を割り当てることによって、図８の例と比較して、図８の例では削除されたノード１の担当領域はそのままノード４が引き継ぎ、担当領域間の不均一を増大させていたが、図９の例ではノード１の３つの担当領域をノード２，３の２つのノードで引き継いだため、不均一の増大が抑えられている。また、１つのノードに割り当てる識別子の個数を増加させることで、更にノードの削除時の不均一を抑えることができる。
【００４１】
なお、ここでは図１と図２の例を用いてノードが削除された場合の１つのノードに複数の識別子を割り当てる識別子割当て方法の優位点を説明したが、図６と図７の例においても複数の識別子を割当てることにより同様の優位点が得られることは明らかであろう。
これまでの例によっても、本発明の複数識別子割当て方法を用いた図７の例が、ノードの追加の状態とノードの削除の状態の何れにおいても、各ノードの担当する負荷が最も均一に分散していることが理解されるであろう。
【００４２】
次に、図１０を参照して、本発明の一実施例による識別子割当て方法を説明する。図１０は、本発明の一実施例による決定的な複数識別子割当て方法の処理を示すフロー図である。なお、図１０に示される処理フローは例示的なものにすぎず、本発明は図示された処理フローに限定されるものでない。
【００４３】
本実施例による識別子割り当て方法は、新たに追加されたノードに対する識別子の割当て要求により開始される（ステップＳ１０１）。次に、ステップＳ１０２において、１ノードごとに割当てる識別子の個数ｖと、この時点で存在している全ての識別子の総数ａと、これらの識別子を記述した識別子一覧表とが入力される。その後、ステップＳ１０３において、初期化処理としてカウンタ変数ｉに０が設定される。
【００４４】
次に、ステップ１０４において、現時点で割当て済みの識別子の総数が０であるか、すなわち、ａ＝０であるか判定される。現時点で割当て済みの識別子の総数が０である場合（ステップＳ１０４：ｙｅｓ）、すなわち、現在割当てようとしている識別子がこの分散システムにおける最初のノードの最初の識別子である場合、ステップＳ１０５において、割当てられる識別子の値を０に設定する。例えば、これは、図７に示される上端のノード１の識別子に相当する。
【００４５】
他方、現時点で割当て済みの識別子の総数が０でない場合（ステップＳ１０４：ｎｏ）、ステップＳ１０６において、さらに現時点で割当て済みの識別子の総数が１であるか、すなわち、ａ＝１であるか判定される。現時点で割当て済みの識別子の総数が１である場合（Ｓ１０６：ｙｅｓ）、すなわち、現在割当てようとしている識別子がこの分散システムにおける２番目の識別子である場合、ステップＳ１０７において、割当てられる識別子の値を（識別子の取りうる上限値÷２）に設定する。例えば、これは、図７に示される下端のノード１の識別子に相当する。
【００４６】
他方、現時点で割当て済みの識別子の総数が１でない場合（Ｓ１０６：ｎｏ）、本実施例の複数識別子割当て方法は、ステップＳ１０８以降において、識別子一覧表を参照して割当てる識別子の値を決定する。ステップＳ１０８において、識別子一覧表を参照し、隣り合う識別子間の距離が最大となる領域を決定する。次に、ステップＳ１０９において、決定された領域の開始点及び終了点に相当する識別子をそれぞれＩＤｋ及びＩＤｋ＋１としたとき、割当てられる識別子は、この領域を２等分する値、すなわち、（ＩＤｋ＋ＩＤｋ＋１）÷２により算出される識別子に設定される。なお、厳密には、最大の領域｜ＩＤｋ−ＩＤｋ＋１｜が識別子の上限値をまたいで存在する場合がある。この場合、上記の式では２等分することができないが、その場合も適切に領域の中央値を返す式を適用するものとする。
【００４７】
このようにしてステップＳ１０５，Ｓ１０７及びＳ１０９で新しい識別子が取得された後、ステップＳ１１０において、カウンタ変数ｉと識別子の総数ａの値をそれぞれ１だけインクリメントすると共に、識別子一覧表を更新する。
【００４８】
ステップＳ１１１において、カウンタ変数ｉが１ノード毎に割当てられる識別子の個数ｖに満たない場合（Ｓ１１１：ｎｏ）、更なる識別子を割当てるため、ステップＳ１０６に戻って、同様の手順を実行することによって更なる識別子を割り当てる。他方、カウンタ変数ｉが１ノード毎に割当てられる識別子の個数ｖに等しい場合（Ｓ１１１：ｙｅｓ）、必要なｖ個の識別子の割当てが完了したことになるため、当該処理を終了する（ステップＳ１１２）。
【００４９】
本発明の識別子割当て装置及び方法では、ノードによって管理されるデータのそれぞれに識別子を割当て、あるノードが管理するデータの識別子の範囲を、ノード自身の識別子と、当該ノードよりも値の小さい識別子を持つノードの中では最も大きい値の識別子を持つノードの識別子との間と定める。また、各ノードの担当するデータ量等の負荷が均等に分散されるよう識別子の間隔が最も大きい領域から順に、１つのノードにつき複数の識別子を割り当てる。
【００５０】
なお、上述した実施例では、主にコンシステント・ハッシングのフレームワークにおいて、本発明の識別子割当て装置及び方法を用いる場合が説明されるが、本発明は、これに限定されるものでなく、識別子が識別以上の意味を持つ任意の分散プログラムに適用可能である。
【００５１】
本発明の識別子割当て装置及び方法によると、分散システムの識別子の間隔を均一化することができ、それによりノードの担当する処理量やデータ量を均一化し、ノード間の負担量が公平になる。また、ノードの削除時に均一性が崩れる問題についても、各ノードに複数の識別子を割り当てることによって、これを軽減する。これらの特性により、分散システムにおいて、ノードの追加・削除などの状況に関わらずに、ノード間の負担を公平化することができ、システム全体の利用効率を上昇させることが可能になる。
【００５２】
以上、本発明の実施例について詳述したが、本発明は上述した特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【００５３】
１００  識別子割当て装置
１０１  識別子一覧表格納部
１１０  識別子決定部
１１１  決定的識別子決定部
１１２  複数識別子割当て部
【図１】
0005514041.tif 000002
【図２】
0005514041.tif 000003
【図３】
0005514041.tif 000004
【図４】
0005514041.tif 000005
【図５】
0005514041.tif 000006
【図６】
0005514041.tif 000007
【図７】
0005514041.tif 000008
【図８】
0005514041.tif 000009
【図９】
0005514041.tif 000010
【図１０】
0005514041.tif 000011