【0008】
まず、本発明の実施形態の理解を容易にするために、本発明の背景を説明する。
Chordなどのルーティングアルゴリズムに対して、非特許文献2の方式を適用する場合には、CPU負荷とネットワーク負荷の両方を同時にバランスさせることができない。以下、その理由を、構造化P2P(Peer−to−Peer)ネットワークのルーティングアルゴリズムについてChordを例にとって説明する。
Chordでは、分散処理装置は、イベントデータを他の分散処理装置に転送するために、他のいくつかの分散処理装置のアドレスを保持する。それらのアドレスは、該分散処理装置の識別子からの距離が2^(i−1)(i=1,2,...,m)であるキーs(開始値)のサクセッサのアドレスである。ここで開始値とは、ルーティングテーブルに登録する分散処理装置を決定するための基点となる値である。
図2は、Chordにおけるキーの概念を説明するための図である。
図2に示すようにキーはモジュロ2^mの環状で表される。ここでモジュロとは、除算により余りを求める整数演算のことである。例えば、整数aを整数nで割ったとき、その余りをa mod nと表す。任意のキーkからの距離がdであるキーは、(k+d)mod 2^mとなる。
図2の例では、m=3であり、キー7から距離が2であるキーは、(7+2)mod 2^3=1となる。
図2に示すように、Chordにおいて距離は、ノード間の『時計回り距離』と定義できる。
イベントデータは、そのハッシュ値(キー)のサクセッサ(successor)で処理される。キーkのサクセッサとは、分散処理システムを構成する分散処理装置のうち、キーkからの距離が最も小さい値を識別子とする分散処理装置のことである。
上述したように、イベントデータは、そのハッシュ値であるキーkからの距離が最も小さい値である値を識別子とする分散処理装置(サクセッサ)で処理される。
図2は具体例を示しており、キーkのサクセッサが、キーkから時計回りに数えて一番近い距離にある分散処理装置であることを示している。
図2においては、分散処理装置が、分散処理装置IDが0と1と3の3つである場合が示されている。
図2は、キー2のサクセッサが、分散処理装置IDが3の分散処理装置であることを表している。また、
図2は、キー6のサクセッサが、分散処理装置IDが0の分散処理装置であることを表している。
図3は、分散処理システムにおける各分散処理装置が記憶する識別子の例を示す図である。
図3は、m=8の例を示す。
図3における分散処理装置のブロックの中に記述されている値は、該分散処理装置の識別子(分散処理装置ID)であり、8ビットのキーを符合なし整数で表したものである。各分散処理装置の上部にある表は、その下の分散処理装置が記憶している開始値とそのサクセッサの識別子である。各サクセッサのアドレスは、その識別子と1対1で対応付けられるので、記述を省略している。
例えば、識別子が191の分散処理装置について、i=1の場合の開始値は191+2^(1−1)=192(mod 2^8)となる。i=8の場合の開始値は191+2^(8−1)=63(mod 2^8)となる。
図4は、各キーの発生頻度の例を示す図である。
図4は、例えばキー0から7についてそれぞれ1秒間に16回、そのキーをハッシュ値として算出するイベントデータを発生する例を示している。
図4では、キーが104,105,110,111となるイベントデータの発生頻度が最も高い。なお
図4は、偏りがある頻度で発生したイベントデータを、関連技術によって予め意図的に分類した図である。
図3の各分散処理装置が、
図4に示すキー分布となるようなイベントデータを外部システムから受信した場合を考える。
図4より、各分散処理装置が受信するイベントデータ数は、8×16+32×4+64×2+2×64+4×32+2×64+16×8+128×1=1024イベントデータ/秒となる。よって、8つの分散処理装置から構成される分散処理システムでは、受信するイベントデータの総数は、1024×8=8192イベントデータ/秒となる。
図5は、
図4に示すキー分布となる場合における
図3の各分散処理装置の、イベントデータ転送数とイベントデータ被通知数を示す図である。分散処理装置のイベントデータ転送数とは、該分散処理装置が外部システム、あるいは、別の分散処理装置からイベントデータを受信して、それを別の分散処理装置へ転送した数である。また、分散処理装置のイベントデータ被通知数とは、該分散処理装置が、最終的な到達先としてイベントを受信した数である。
分散処理装置が外部システムから受信するイベントは、それぞれ1つの到達先の分散処理装置が存在するので、
図5のイベントデータ被通知数の合計値1792+640+512+4224+256+256+256+256=8192は全分散処理装置が受信するイベントの総数と一致する。
分散処理装置におけるイベントデータの処理負荷(CPU負荷)は、
図5のイベントデータ被通知数に比例する。ただし、分散処理装置は、送信されたイベントデータを基にアプリケーションを実行するが、各イベントデータに対するアプリケーション実行負荷は同じとする。また、一般的にイベントデータの転送するための処理負荷は、アプリケーション実行の負荷に比べて十分小さい。そのため、イベントデータ被通知数の偏りが、分散処理装置のCPU負荷の偏りを表す。
分散処理装置とネットワークの間の伝送媒体が運んでいるデータ量(ネットワーク負荷)は、イベントデータ転送数とイベントデータ被通知数の和に比例する。イベントデータの転送や被通知は、分散処理装置とネットワークの間の伝送媒体を介して行われるためである。よって、それらの和の偏りが、分散処理装置のネットワーク負荷の偏りを表す。
ここで、イベントデータのハッシュ値が
図4に示す分布のときに、非特許文献2の方式によりCPU負荷を均一にすることを考える。この場合、非特許文献2の方式は、イベントデータ被通知数を均一にするために、分散処理装置IDを変更する。
図6は、非特許文献2の方式によって分散処理装置IDが変更された状態を示す図である。
図6に示すように、8つの分散処理装置のアプリケーションが受信するイベントの総数は8192イベントデータ/秒であるため、1つの分散処理装置あたり、8192/8=1024イベントデータ/秒とすることでCPU負荷が均一となる。
例えば、
図6において分散処理装置IDが39である分散処理装置(以下、分散処理装置(39)という。)は、8から39までのキーを担当する。分散処理装置(39)のアプリケーションが処理するイベントデータ数は、該分散処理装置が担当するキーの数に、分散処理装置の台数と発生頻度を乗算することで計算でき、(39−8+1)×8=1024である。ただし、ここでは、全ての分散処理装置が同等の性能のCPUを備えているものとする。
ネットワーク負荷を均一にする場合には、非特許文献2の方式は、イベントデータ転送数とイベントデータ被通知数の和が分散処理装置間で均一になるように、各分散処理装置のIDを変更する。
しかしながら、非特許文献2の方式を適用する場合には、CPU負荷とネットワーク負荷の両方を同時にバランスさせることができない。例えば、
図6では、イベントデータ被通知数は、全ての分散処理装置で同じである。しかし、イベントデータ転送数は分散処理装置ごとに異なるため、ネットワーク負荷は分散処理装置ごとに異なる。
図6の例では、IDが103、255である分散処理装置に、他の分散処理装置と比べて、特に大きなネットワーク負荷がかかることがわかる。
このように、Chordにおいて非特許文献2の方式を適用した場合でも、一方の負荷を均一にすることはできても、他方の負荷について、特定の分散処理装置に負荷が集中してしまう可能性がある。特定の分散処理装置に負荷が集中した場合、その分散処理装置がボトルネックとなり、分散処理システムとしてのパフォーマンスが低下する。
以下に説明される本発明の実施形態によれば、キーを役割(管理区間を区切ることとルーティングの指針になること)毎に二つにわけることで、
図7に示すようにCPU負荷とネットワーク負荷を独立にバランスすることが可能となる。なお、以下の説明では、全ての分散処理装置が同等の性能のCPUを備え、また、同等の伝送性能の伝送媒体を介してネットワークに接続しているものとする。
<第1実施形態>
第1実施形態における分散処理システムは、
図1に示されるように1つ以上の分散処理装置から構成される。分散処理装置は、順序関係が定義されている所定数(m)ビットの値であるルーティングキーとイベントキーを保持する。
ここで、ルーティングキーとは、イベントデータの送信(ルーティング)のために用いられるキーである。イベントキーとは、イベントデータの管理区間を区切るためのキーである。本実施形態では、イベントキーをmビット長としているが、順序関係が定義されていればよく、固定長である必要はない。ルーティングキーとイベントキーについて、Chordの場合と同じように距離を定義する。
イベントデータを処理すべき分散処理装置は、該イベントデータと各分散処理装置のイベントキーによって決まる。具体的には、イベントデータを処理すべき分散処理装置は、イベントデータに対して演算を行うことにより得られるイベントキーからの距離が最も小さい値をイベントキーとして保持する分散処理装置(サクセッサ)である。イベントキーは、ハッシュ関数を用いてイベントデータから得たハッシュ値などで良いが、これに限定されない。
ここで、本実施形態において、ルーティングキーとイベントキーは所定の関係で順序関係が定義されている。説明のために、分散処理装置x、y、zのルーティングキーをxr、yr、zrとする。また、イベントキーをxe、ye、zeとする。この場合、本実施形態では(xrからyrまでの距離)<(xrからzrまでの距離)ならば、(xeからyeまでの距離)<(xeからzeまでの距離)とならなければならない。この条件を満たすことにより、分散処理システムは、イベントデータを処理すべき分散処理装置に徐々に効率的に近づけることができる。具体的には、分散処理システムは、log_2(分散処理装置の数)のオーダの転送回数で処理すべき分散処理装置へイベントデータを送信できる。
ここで、サクセッサとプレディセッサを以下のように定義する。
・任意のルーティングキーのサクセッサ:該ルーティングキーからの距離が最も小さい(最も近い)値をルーティングキーとする分散処理装置。
・任意のルーティングキーのプレディセッサ:該ルーティングキーからの距離が最も大きい(最も遠い)値をルーティングキーとする分散処理装置。
・任意のイベントキーのサクセッサ:該イベントキーからの距離が最も小さい(最も近い)値をイベントキーとする分散処理装置。
・任意のイベントキーのプレディセッサ:該イベントキーからの距離が最も大きい(最も遠い)値をイベントキーとする分散処理装置。
・任意の分散処理装置のサクセッサ:該分散処理装置のルーティングキーからの距離が1であるルーティングキーのサクセッサ。
・任意の分散処理装置のプレディセッサ:該分散処理装置のルーティングキーのプレディセッサ。
図8は、第1実施形態における分散処理装置100の構成例を示す図である。
図8において、分散処理装置100は、他の分散処理装置200とデータ転送部111及びデータ転送部215を介してイベントデータの送受信を行う。
分散処理装置100は、分散連携部110と、イベントデータに対して所定の処理を行うアプリケーション120と、自装置である分散処理装置100のルーティングキーとイベントキーを保持するキー保持部130と、を含む。
キー保持部130は、ルーティングキーとイベントキーとを保持する。ルーティングキーは、順序関係が定義されているキー(値)であってデータのルーティングに用いられるキーである。イベントキーは、ルーティングキーとの関係で順序関係が定義されているキー(値)であってデータの管理に用いられるキーである。
分散連携部110は、分散処理装置初期化部111と、ルーティングテーブル更新部112と、ルーティングテーブル格納部113と、プレディセッサ記憶部114と、データ転送部115とを含む。
分散処理装置初期化部111は、新たな分散処理装置(以下、新規分散処理装置という。)を分散処理システムに追加するときに動作する。分散処理装置初期化部111は、新規分散処理装置が追加されたとき、分散処理装置100内の、ルーティングテーブル格納部113が格納するルーティングテーブルと、プレディセッサ記憶部114の記憶内容を初期化する。また、分散処理装置初期化部111は、他の分散処理装置(例えば分散処理装置200)に対して、ルーティングテーブルの更新要求(以下、ルーティングテーブル更新要求という。)を行う。
ルーティングテーブル更新部112は、他の分散処理装置から受信したルーティングテーブル更新要求を基に、ルーティングテーブル格納部113が格納するルーティングテーブルを更新する。
ルーティングテーブル格納部113は、ルーティングキーとイベントキーとアドレスを含むタプル(レコードと呼んでも良い。)を0以上保持し、データの転送先を決定するために使用されるルーティングテーブルを格納する。
プレディセッサ記憶部114は、プレディセッサのルーティングキーとイベントキーとアドレスを記憶する。
データ転送部115は、受信したイベントデータが、該分散処理装置が処理すべきものであれば、アプリケーションにイベントデータを通知する。該分散処理装置が処理すべきものでなければ、データ転送部115は、ルーティングテーブルを参照し、データの次の転送先となる分散処理装置を決定し、該分散処理装置に対して該イベントデータを送信する。
図9は、ルーティングテーブル格納部113が格納するルーティングテーブルの構造例を示す図である。ルーティングテーブルは、開始値、ルーティングキー、イベントキー及びアドレスからなるタプルを0以上保持する。開始値は、分散処理装置100のルーティングキーからの距離が2^(i−1)(i=1,2,...,m)である値である。ルーティングキーとイベントキーとアドレスは、それぞれ、該開始値のサクセッサのルーティングキーとイベントキーとアドレスである。ルーティングキーとイベントキーの値の決め方は、適切なルーティングとイベントデータの管理が可能であれば特に限定されない。
次に、分散処理装置100を新規分散処理装置として、新たに分散処理システムに追加するときの各部の動作について説明する。
図10は、分散処理装置初期化部111が行う分散処理装置初期化処理のフローチャート図である。
図10に示すように、分散処理装置100が新規分散処理装置として分散処理システムに追加されるとき、分散処理装置初期化部111は外部システムからルーティングキーr、イベントキーe、最初の分散処理装置かどうかを示す情報が入力される(ステップS1)。ここで、rは、ルーティングキーとして外部システムから実際に入力された具体的な値である。eは、イベントキーとして外部システムから実際に入力された具体的な値である。ここで入力とは、外部システムの操作入力によるデータ設定、又は外部システムからのデータ受信を意味する。
本実施形態においては、ルーティングキーとイベントキーは、適切な値が外部システムから入力されることによって設定されるものとする。適切な値は、例えば値を入力するユーザがシステム全体の負荷状況を予め知っていることで設定することができる。又は、統計データ等を参考に設定する等の方法が考えられるが、ルーティングキーとイベントキーの設定方法はこれに限定されるものではない。
例えば、ルーティングキーは、新規分散処理装置が記憶するIPアドレスなど、分散処理装置の個有のデータのハッシュ値としても良い。また、イベントデータが一様ランダムに発生することが分かっている場合には、ルーティングキーは、隣り合う分散処理装置同士の距離がほぼ同じになるように設定されても良い。
イベントキーは、例えば、新規分散処理装置が追加されるときに、CPU負荷が、新規分散処理装置のサクセッサのCPU負荷と同じになるように設定されても良い。
ルーティングキーとイベントキーは、分散処理装置同士がCPU負荷状況とネットワーク負荷状況を通知しあうことで設定されても良い。
次に、新規分散処理装置は、自装置が分散処理システムにおける最初の分散処理装置であるか否かを、最初の分散処理装置かどうかを示す情報から判断する(ステップS2)。
最初の分散処理装置か否かを示す情報が、新規分散処理装置が分散処理システムにおける最初の分散処理装置であることを示している場合、プレディセッサ及びあらゆるルーティングキーのサクセッサが新規分散処理装置自身である。よって、その場合には、分散処理装置初期化部111はまず、プレディセッサ記憶部114にルーティングキーrとイベントキーeと自装置のアドレスaを記憶する(ステップS3)。
次に、分散処理装置初期化部111は、i=1からmについて、開始値、ルーティングキー、イベントキー、アドレスをそれぞれ、rからの距離が2^(i−1)である値、r、e、aに設定したタプルをルーティングテーブルに登録する(ステップS4)。
最初の分散処理装置か否かを示す情報が、新規分散処理装置が最初の分散処理装置であることを示していなければ、分散処理装置初期化部111は、分散処理システムを構成する少なくとも1つの分散処理装置のアドレスeaを取得する(ステップS5)。この少なくとも1つの分散処理装置は、例えばLAN(Local Area Network)でいうところの、予め登録されたデフォルトゲートウェイでも良い。
次に、分散処理装置初期化部111は、アドレスeaの分散処理装置を介して新規分散処理装置のルーティングテーブル格納部113が格納するルーティングテーブルを初期化する処理(ルーティングテーブル初期化処理)を行う(ステップS6)。
次に、分散処理装置初期化部111は、データ転送部115を介して他の分散処理装置のルーティングテーブル格納部113が格納するルーティングテーブルを更新する処理(他分散処理装置更新処理)を行う(ステップS7)。
図11は、分散処理装置初期化部111が
図10のステップS6において行うルーティングテーブル初期化処理のフローチャート図である。
図11に示すように、分散処理装置初期化部111は、ルーティングテーブル初期化処理において、まずサクセッサとプレディセッサを初期化する処理(サクセッサ・プレディセッサ初期化処理)を行う(ステップS61)。
サクセッサ・プレディセッサ初期化処理により、新規分散処理装置のルーティングキーrからの距離が1である値を開始値として、該開始値と、該開始値のサクセッサのルーティングキーとイベントキーとアドレスから成るタプルがルーティングテーブルに記憶される。また、プレディセッサ記憶部114に、ルーティングキーrのプレディセッサのルーティングキーとイベントキーとアドレスが記憶される。
サクセッサ・プレディセッサ初期化処理の詳細については後述する。
分散処理装置初期化部111は、ルーティングテーブル初期化処理において、次に、i=2からmについて、iに対応するタプルをルーティングテーブルに登録する。具体的には、分散処理装置初期化部111は、まず、ルーティングキーrからの距離が2^(i−1)である値を開始値sとする(ステップS62)。
分散処理装置初期化部111は、開始値sのサクセッサに、開始値sのサクセッサのルーティングキーdr、イベントキーde及びアドレスdaを要求する(ステップS63)。分散処理装置初期化部111は、該要求を、データ転送部115に、開始値s(対象のサクセッサを示すため)と、開始値sのサクセッサのルーティングキーdr、イベントキーde及びアドレスdaを要求するメッセージを入力することで行う。以下、単にメッセージというときは、所定の情報を要求するメッセージを意味する。
分散処理装置初期化部111は、データ転送部115を介して、開始値sのサクセッサから上記要求に対する応答を受信する(ステップS64)。
分散処理装置初期化部111は、開始値、ルーティングキー、イベントキー及びアドレスをそれぞれ、s、dr、de及びdaに設定したタプルをルーティングテーブルに登録する(ステップS65)。
図12は、分散処理装置初期化部111が
図11のステップS61において行うサクセッサ・プレディセッサ初期化処理のフローチャート図である。
図12に示すように、まず、新規分散処理装置は、ステップS511とステップS512においてサクセッサ登録処理を行う。
すなわち、分散処理装置初期化部111は、最初に取得したアドレスeaの分散処理装置に対して、ルーティングキーrのサクセッサのルーティングキーsrとイベントキーseとアドレスsaを要求する(ステップS511)。アドレスeaの分散処理装置は、自装置が格納するルーティングテーブルに基づくアルゴリズムにより、該当する分散処理装置から上記の情報を取得し、該情報を応答として新規分散処理装置に送信する。
前記要求に対する応答を受信すると、分散処理装置初期化部111は、開始値、ルーティングキー、イベントキー及びアドレスをそれぞれ、rからの距離が1である値、sr、se、saに設定したタプルをルーティングテーブルに登録する(ステップS512)。
次に、新規分散処理装置は、ステップS513とステップS514においてプレディセッサ登録処理を行う。
すなわち、分散処理装置初期化部111は、アドレスsaの分散処理装置に対して、アドレスsaの分散処理装置のプレディセッサのルーティングキーpr、イベントキーpe及びアドレスpaを要求する(ステップS513)。
前記要求に対する応答を受信すると、分散処理装置初期化部111は、プレディセッサ記憶部114にpr、pe及びpaを記憶する(ステップS514)。
その後、新規分散処理装置は、サクセッサのプレディセッサ更新処理を行う。すなわち、分散処理装置初期化部111は、アドレスがsaの分散処理装置に対して、該分散処理装置のプレディセッサ記憶部のルーティングキーとイベントキーとアドレスをそれぞれ、rとeとaに更新するように要求する(ステップS515)。
最後に、新規分散処理装置は、プレディセッサのサクセッサ更新処理を行う。すなわち、分散処理装置初期化部111は、アドレスがpaの分散処理装置に対して、該分散処理装置のルーティングキーからの距離が1である値を開始値とするタプルのルーティングキーとイベントキーとアドレスをそれぞれrとeとaに更新するように要求する(ステップS516)。
図13は、分散処理装置初期化部111が
図10のステップS7において行う他分散処理装置更新処理のフローチャート図である。まず、新規分散処理装置の分散処理装置初期化部111は、i=2からmについて、他の分散処理装置のうち、ルーティングキーからの距離が2^(i−1)である値のサクセッサが該新規分散処理装置である分散処理装置のルーティングテーブルを更新する。
具体的には、まず、分散処理装置初期化部111は、ルーティングキーrまでの距離がd−1(=2^(i−1)−1)であるルーティングキーtrを算出する(ステップS71)。
次に、分散処理装置初期化部111は、ステップS71で算出したルーティングキーtrのプレディセッサに、ルーティングテーブル更新処理を要求する(ステップS72)。具体的には、分散処理装置初期化部111は、データ転送部115に、ルーティングキーtrとルーティングテーブル更新要求を入力する。
データ転送部115は、ルーティングテーブル更新要求が入力されると、プレディセッサ送信機能を呼び出す。プレディセッサ送信機能の詳細については、後述する。データ転送部115は、プレディセッサ送信機能により、ルーティングキーtrのプレディセッサに該ルーティングテーブル更新要求を送信する(ステップS73)。ルーティングテーブル更新要求は、ルーティングキーr、イベントキーe、アドレスa、rのプレディセッサのルーティングキーpr及び距離dの情報を含む。
前記ルーティングテーブル更新処理の対象の分散処理装置(以下、更新対象分散処理装置という。)のルーティングテーブル更新部はデータ転送部を介してルーティングテーブル更新要求を受信する。
更新対象分散処理装置のルーティングテーブル更新部は、他の分散処理装置から受信したルーティングテーブル更新要求を基に、ルーティングテーブル格納部が格納するルーティングテーブルを更新する。
図14は、更新対象分散処理装置が行うルーティングテーブル更新処理のフローチャート図である。
図14に示すように、まず、更新対象分散処理装置のデータ転送部は、データ転送部115からルーティングテーブル更新要求を受信する(ステップS81)。更新対象分散処理装置のデータ転送部は、ルーティングテーブル更新要求をルーティングテーブル更新部に出力する。
次に、ルーティングテーブル更新要求が入力されたルーティングテーブル更新部は、該更新対象分散処理装置のルーティングキーorからの距離がdである値を開始値とするタプルを取得する(ステップS82)。
ルーティングテーブル更新部は、orから該タプルのルーティングキーまでの距離が、orからrまでの距離よりも大きいか否かを判断する(ステップS83)。
orから該タプルのルーティングキーまでの距離が、orからrまでの距離よりも大きいと判断した場合、ルーティングテーブル更新部は、該タプルのルーティングキーとイベントキーとアドレスをそれぞれ、rとeとaに更新する(ステップS84)。この更新は、開始値からの距離がより小さいrをルーティングキーに持つ分散処理装置が、該開始値のサクセッサとなるために行われる。
orから該タプルのルーティングキーまでの距離が、orからrまでの距離よりも小さいと判断した場合、ルーティングテーブル更新部は、ルーティングテーブル更新処理を終了する。
ステップS84の後、ルーティングテーブル更新部は、該更新対象分散処理装置のプレディセッサのルーティングキーからprまでの距離よりもdが大きいか否かを判断する(ステップS85)。
更新対象分散処理装置のプレディセッサのルーティングキーからprまでの距離よりもdが大きいと判断した場合、ルーティングテーブル更新部は、データ転送部を介してルーティングテーブル更新要求を該更新対象分散処理装置のプレディセッサに送信する(ステップS86)。
更新対象分散処理装置のプレディセッサのルーティングキーからprまでの距離よりもdが小さいと判断した場合、ルーティングテーブル更新部は、ルーティングテーブル更新処理を終了する。
ルーティングテーブル格納部は、上記ルーティングテーブル更新処理により更新されたルーティングテーブルを格納する。
ここで、データ転送部115がイベントデータを受信した際に、そのイベントデータを転送する動作について詳細に説明する。イベントデータからは、ハッシュ関数によりイベントキーdが得られているものとする。
図15は、データ転送部115がイベントデータを転送する動作を表したフローチャート図である。
図15に示すように、まず、分散処理装置100のデータ転送部115はイベントキーdとメッセージを受信する(ステップS91)。
データ転送部115は、プレディセッサ記憶部114を参照して、dが該分散処理装置100のプレディセッサのイベントキーpよりも大きく、分散処理装置100のイベントキーs以下であるか否かを判断する(ステップS92)。
dが分散処理装置100のプレディセッサのイベントキーpよりも大きく、分散処理装置100のイベントキーs以下であると判断した場合、データ転送部115は、分散処理装置100がdのサクセッサであると判断する。この場合、データ転送部115は、分散処理装置100のアプリケーションにdとメッセージを入力する(ステップS93)。
dが分散処理装置100のプレディセッサのイベントキーpよりも大きく、分散処理装置100のイベントキーs以下でないと判断した場合、データ転送部115は、分散処理装置100がdのサクセッサでないと判断する。
この場合、データ転送部115は、ルーティングテーブルに登録されているタプルのイベントキーのうち、分散処理装置100のイベントキーkからの距離が、kからdまでの距離よりも小さいイベントキーの集合を求める(ステップS94)。
次に、データ転送部115は、求めた集合の中で、kからの距離が最も大きいイベントキーiが存在するか否かを判断する(ステップS95)。
データ転送部115は、イベントキーi(kからの距離が最も大きいイベントキー)が存在しないと判断すると、分散処理装置100がdのプレディセッサであると判断する(ステップS96)。この場合、データ転送部115は、分散処理装置100のサクセッサのアドレスをルーティングテーブルから取得し、該アドレス宛にイベントキーdとメッセージを送信する(ステップS96)。
データ転送部115は、イベントキーiが存在すると判断すると、他の分散処理装置がdのプレディセッサであると判断する。この場合、データ転送部115は、求めたイベントキーiに対応するアドレス宛にイベントキーdとメッセージを送信する(ステップS97)。
分散処理装置100のデータ転送部115は、また、ルーティングテーブル更新要求を転送するために、指定されたイベントキーのプレディセッサへデータを送信する機能(プレディセッサ送信機能)を有する。
図16は、データ転送部115がプレディセッサ送信機能により、データを送信する動作を表したフローチャート図である。
図16に示すように、プレディセッサ送信機能は、
図15のフローチャート図におけるステップS93とステップS96が、ステップS93’とステップS96’である点のみ異なる。
ステップS93’において、データ転送部115は、分散処理装置100のプレディセッサへイベントキーdとメッセージを送信する。
ステップS96’において、データ転送部115は、ルーティングテーブル更新部112にイベントキーdとメッセージを入力する。
以上説明したように、第1実施形態に係る分散処理システムによれば、CPU負荷とネットワーク負荷を独立にバランスさせることが可能となる。その理由は、これまで一つのキーが担っていた、イベントデータの送信のための役割と、イベントデータの管理区間を区切るための役割を、二つの各キー(ルーティングキーとイベントキー)の役割として分けたからである。
図7は、本実施形態における分散処理システムの効果を説明するための図である。
図7は、8つの分散処理装置から成る分散処理システムで、ハッシュ値の分布が
図4のようになるイベントデータを仮定して、CPU負荷とネットワーク負荷をバランスさせた場合の効果を示している。
図7には、各分散処理装置のルーティングキー、イベントキー、イベントデータ転送数及びイベントデータ被通知数が示されている。
図7では、イベントキーを、
図6に示す分散処理装置IDと同じにすることで、イベントデータ被通知数を各分散処理装置間で均一にしている。
図6に示す分散処理装置IDと同じにすることでCPU負荷を均一にしている。
また、
図7では、ルーティングキーを、
図5に示す分散処理装置IDのように等間隔にしている。
図5に示す分散処理装置IDと同じにすることで、該ルーティングキーを基に生成されるルーティングテーブルが参照する他の分散処理装置の数と、他の分散処理装置から参照されている数を、全ての分散処理装置で均一にしている。よって、外部システムから発生するイベントデータを受信する分散処理装置が一様ランダムに決定する場合には、
図7に示すように、イベントデータ転送数は均一となる。
このように、これまで一つのキーが担っていた、イベントデータの送信のための役割と、イベントデータの管理区間を区切るための役割を、二つの各キーの役割として分けることで、イベントデータ被通知数とイベントデータ転送数の両方が均一となる。すなわち、CPU負荷とネットワーク負荷が均一となる。
<第2実施形態>
図17は、本発明の第2実施形態の構成例を示す図である。
図17に示すように、本発明の第2実施形態は、分散処理装置初期化部511とルーティングテーブル格納部513とを含む分散処理装置500である。
分散処理装置500は、分散連携部510とキー保持部530とを含む。分散連携部510は、分散処理装置初期化部511とルーティングテーブル格納部513とを含む。
キー保持部530は、順序関係が定義されているキー(値)であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー(値)であってデータの管理に用いられるイベントキーと、を保持する。
分散処理装置初期化部511は、ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録する。
ルーティングテーブル格納部は、タプルを0以上保持するルーティングテーブルを格納する。
本発明の第2実施形態に係る分散処理装置によってシステムを構築することにより、CPU負荷とネットワーク負荷を独立にバランスさせることが可能となる。その理由は、これまで一つのキーが担っていた、イベントデータの送信のための役割と、イベントデータの管理区間を区切るための役割を、二つの各キーの役割として分けたからである。
【実施例】
【0009】
以降、本発明の実施例を示す。本実施例は、8つの分散処理装置から成る分散処理システムであり、イベントデータのハッシュ値の分布が、
図4のようになると仮定する。
図18は、本発明を適用した分散処理システムの例を示す図である。
図18は、本発明を適用した分散処理システムにおいて、CPU負荷とネットワーク負荷をバランスさせた場合の、各分散処理装置のルーティングキー、イベントキー及びルーティングテーブルを示す。
図18における分散処理装置のブロックの中に記述されている値がルーティングキーであり、さらに括弧で与えられている値がイベントキーである。ルーティングキー及びイベントキーは、それぞれの分散処理装置のキー保持部が保持している。また、各分散処理装置の上部にある表が、ルーティングテーブルである。ルーティングテーブルのサクセッサの項目は、サクセッサのイベントキーを表す。なお、サクセッサのアドレスは、イベントキーと1対1で対応するため、記述を省略している。
ルーティングキーがaである分散処理装置を分散処理装置aと表記すると、例えば、分散処理装置31において、開始値32のサクセッサは分散処理装置63である。分散処理装置63のイベントキー39が、開始値32とのペアで分散処理装置31のルーティングテーブルに登録されている。
本実施例では、まず分散処理装置がCPU負荷とネットワーク負荷を均一にするために、ルーティングキーとイベントキーを変更する手順の例を示す。
図19は、分散処理装置と、その分散処理装置のサクセッサとの間で行われるCPU負荷均一処理のフローチャート図である。CPU負荷均一処理とは、CPU負荷を均一にするため、該分散処理装置のサクセッサとイベントデータ被通知数が等しくなるように、該分散処理装置のイベントキーを変更する処理である。
具体的には、まず、分散処理装置(d)は、分散処理装置(d)のサクセッサへイベントデータ被通知数を送信する(ステップS101)。
イベントデータ被通知数を受信したサクセッサは、該サクセッサと分散処理装置(d)のイベントデータ被通知数が同数になるような分散処理装置(d)のイベントキーを算出する(ステップS102)。
次に、サクセッサは、分散処理装置(d)のイベントキーを算出したイベントキーに更新するように、分散処理装置(d)へイベントキー更新要求を送信する(ステップS103)。
イベントキー更新要求を受信した分散処理装置(d)は、イベントキー更新要求に基づいて自装置が保持するイベントキーを更新する(ステップS104)。
本実施例では、各分散処理装置は、過去所定時間以内の自装置のイベントデータ被通知数を計測しているものとする。上述した処理を、各分散処理装置が、定期的に実施することにより、各分散処理装置のイベントデータ被通知数は同数に収束することとなる。
図20は、分散処理装置と、その分散処理装置のサクセッサとの間で行われるネットワーク負荷均一処理のフローチャート図である。ネットワーク負荷均一処理とは、ネットワーク負荷を均一にするための処理である。
具体的には、まず、分散処理装置(d)は、分散処理装置(d)のサクセッサへイベントデータ転送数を送信する(ステップS201)。
イベントデータ転送数を受信したサクセッサは、該サクセッサと分散処理装置(d)のイベントデータ転送数が同数になるような分散処理装置(d)のルーティングキーを算出する(ステップS202)。
次に、サクセッサは、分散処理装置(d)のルーティングキーを、算出したルーティングキーに更新するように、分散処理装置(d)へルーティングキー更新要求を送信する(ステップS203)。
ルーティングキー更新要求を受信した分散処理装置(d)は、ルーティングキー更新要求に基づいて自装置が保持するルーティングキーを更新する(ステップS204)。
例えば、各分散処理装置は適宜イベントデータ転送数を計測しておく。分散処理装置(d)のイベントデータ転送数が、分散処理装置(d)のサクセッサのイベントデータ転送数よりも多ければ、分散処理装置(d)は、ルーティングキーをより小さい値に更新する。
この更新によって、分散処理装置(d)は、より少ない他の分散処理装置に参照されるようになるため、イベントデータの転送数は少なくなる。なお、ここで、分散処理装置(d)が他の分散処理装置に参照されるとは、他の分散処理装置のルーティングテーブルに分散処理装置(d)のキーやアドレスが登録されている状態を意味している。
一方、上記の更新によって、分散処理装置(d)のサクセッサは、より多くの他の分散処理装置に参照されることとなるため、イベントデータの転送数は多くなる。上述した処理を、各分散処理装置が、定期的に実施することにより、各分散処理装置のイベントデータ転送数は同数に収束することとなる。
CPU負荷やネットワーク負荷を均一にするために、分散処理装置がイベントキーやルーティングキーを算出する方法は、CPU負荷やネットワーク負荷を均一にすることができれば、どのような方法でも良い。
例えば、分散処理装置は、CPU負荷又はイベントデータ転送数(以下、CPU負荷等という。)を計測しながら、イベントキー又はルーティングキー(以下、イベントキー等という。)の値を1ずつ減算して適切な値を見つけ出しても良い。
または、例えばCPU負荷等を半分にしたい場合は、分散処理装置は、単純に分散処理装置のイベントキー等の値を、現在のイベントキー等との値とプレディセッサのイベントキー等の値との間の値にしても良い。
または、例えば分散処理装置のCPU負荷を2割減らしたいとすると、分散処理装置は、自装置がイベント通知を受けているキーの中で、全体の内の2割を算出してその分が減らせるように、更新するイベントキーを算出しても良い。
さらに、分散処理装置は、CPU負荷とネットワーク負荷の両負荷状況を考慮して、更新するイベントキー等を算出しても良い。例えば、分散処理装置は、CPU負荷とネットワーク負荷とが反比例の関係になるように、両負荷の比を考慮してイベントキー等を算出しても良い。こうすることで、システム全体のトータルパフォーマンスを向上させることができる。
次にイベントデータを処理すべき分散処理装置に送信する具体的な動作を説明する。
例えば、分散処理装置31が、イベントキーが107であるイベントデータを受信したとする。この場合、分散処理装置31は、格納しているルーティングテーブルのサクセッサの項目を参照し、107までの距離が最も小さいイベントキー103に対応する分散処理装置95宛てに該イベントデータを送信する。分散処理装置95は、分散処理装置31から該イベントデータを受信する。
次に、分散処理装置95が、格納しているルーティングテーブルのサクセッサの項目を参照し、107までの距離が最も小さいイベントキー105に対応する分散処理装置127宛てに該イベントデータを送信する。
その後、分散処理装置127は格納しているルーティングテーブルを参照する。分散処理装置127は、イベントデータ107が分散処理装置127のルーティングテーブルのどのイベントキーよりも、自装置のイベントキーである105に最も近いと判断する。つまり、分散処理装置127は、自装置がイベントキー107のプレディセッサであると判断する。
分散処理装置127は、自装置127のサクセッサである分散処理装置159にイベントデータを送信する。その後、分散処理装置159が、受信したイベントデータを自装置のアプリケーションに通知することで、イベントデータの送信を完了する。
以上、実施形態及び実施例を参照して本発明を説明したが、本発明は以上の実施形態及び実施例に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で同業者が理解し得る様々な変更をすることができる。
図21は、上述した第2実施形態に係る分散処理装置500のハードウェア構成の一例を示すブロック図である。
図21に示すように、分散処理装置500を構成する各部は、CPU(Central Processing Unit)1と、ネットワーク接続用の通信IF2(通信インターフェース2)と、メモリ3と、プログラムを格納するハードディスク等の記憶装置4とを含む、コンピュータ装置によって実現される。ただし、分散処理装置500の構成は、
図21に示すコンピュータ装置に限定されない。
CPU1は、オペレーティングシステムを動作させて分散処理装置500の全体を制御する。また、CPUは1、例えばドライブ装置などに装着された記録媒体からメモリ3にプログラムやデータを読み出し、これにしたがって各種の処理を実行する。
記録装置4は、例えば光ディスク、フレキシブルディスク、磁気光ディスク、外付けハードディスク、半導体メモリ等であって、コンピュータプログラムをコンピュータ読み取り可能に記録する。記憶装置4は、例えば、ルーティングテーブルを格納するルーティンテーブル格納部でも良い。また、コンピュータプログラムは、通信網に接続されている図示しない外部コンピュータからダウンロードされても良い。
入力装置5は、例えばマウスやキーボード等であって、例えばイベントデータを入力するための装置である。
出力装置6は、例えばディスプレイ等である。
なお、これまでに説明した各実施形態において利用するブロック図は、ハードウェア単位の構成ではなく、機能単位のブロックを示している。これらの機能ブロックはハードウェア及びソフトウェアの任意の組み合わせによって実現される。また、分散処理装置500の構成部の実現手段は特に限定されない。すなわち、分散処理装置500は、物理的に結合した一つの装置により実現されても良いし、物理的に分離した二つ以上の装置を有線又は無線で接続し、これら複数の装置により実現されても良い。
本発明のプログラムは、上記の各実施形態で説明した各動作を、コンピュータに実行させるプログラムであれば良い。
以上、各実施の形態および実施例を参照して本発明を説明したが、本発明は上記実施の形態および実施例に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解しえる様々な変更をすることができる。
この出願は、2011年3月24日に出願された日本出願特願2011−066204を基礎とする優先権を主張し、その開示の全てをここに取り込む。