(57)【要約】ＣＰＵ負荷とネットワーク負荷を独立にバランスさせることが可能な技術を提供する。  本発明の分散処理装置は、順序関係が定義されているキーであってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキーであってデータの管理に用いられるイベントキーと、を保持するキー保持手段と、ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録する分散処理装置初期化手段と、タプルを保持するルーティングテーブルを格納するルーティングテーブル格納手段と、を含む。
2012128387.tif 000002
【特許請求の範囲】
【請求項１】
構造化Ｐ２Ｐネットワークにおいて１つ以上の分散処理装置を含む分散処理システムであって、
前記分散処理装置は、
順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持するキー保持手段と、
前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録する分散処理装置初期化手段と、
前記タプルを保持するルーティングテーブルを格納するルーティングテーブル格納手段と、
を含む分散処理システム。
【請求項２】
前記分散処理装置は、さらに、
外部からイベントキーが入力されたときに、ルーティングテーブルに記憶されている各タプルのイベントキーから、外部から入力されたイベントキーまでの距離が最も小さいイベントキーである転送先イベントキーを求め、
転送先イベントキーに対応するタプルのアドレスに外部イベントキーを送信する、
データ転送手段を含む、
請求項１に記載の分散処理システム。
【請求項３】
前記所定の関係にあるルーティングキーを保持する分散処理装置は、任意のキーｋからの距離がｄであるキーを（ｋ＋ｄ）ｍｏｄ  ２ｍと定義した場合における、前記ルーティングキーからの距離が２＾（ｊ−１）（ｊ＝１，２，．．．，ｍ）であるルーティングキーを開始値として、該開始値からの距離が最も小さいルーティングキーを保持する分散処理装置である、
請求項１に記載の分散処理システム。
【請求項４】
前記分散処理装置は、さらに、
外部からイベントキーが入力されたときに、プレディセッサ記憶手段に記憶されているイベントキーであるプレディセッサイベントキーから、
前記外部から入力されたイベントキーである外部イベントキーまでの距離が、プレディセッサイベントキーから自装置のイベントキーである自イベントキーまでの距離よりも小さい場合に、自装置のアプリケーションに外部イベントキーを入力し、
プレディセッサイベントキーから外部イベントキーまでの距離が、プレディセッサイベントキーから自イベントキーまでの距離よりも大きい場合に、ルーティングテーブルに記憶されている各タプルのイベントキーと、自イベントキーとから、外部イベントキーまでの距離が最も小さいイベントキーである転送先イベントキーを求め、
転送先イベントキーが自イベントキーと一致していれば、自装置のサクセッサに外部イベントキーを送信し、
転送先イベントキーが自イベントキーと一致していなければ、転送先イベントキーに対応するタプルのアドレスに外部イベントキーを送信する、
データ転送手段を含む、
請求項３に記載の分散処理システム。
【請求項５】
前記分散処理装置は、さらにプレディセッサ記憶手段とルーティングテーブル更新手段とを含み、
前記プレディセッサ記憶手段は、
自装置のルーティングキーからの距離が最も大きいルーティングキーを保持する分散処理装置（プレディセッサ）のイベントキーと、アドレスと、を記憶し、
前記ルーティングテーブル更新手段は、
自装置のルーティングキーからの距離が１である値を開始値として、該開始値と、自装置のサクセッサのイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録し、
前記自装置のサクセッサのプレディセッサ記憶手段に記憶されるイベントキーと、アドレスと、を自装置のプレディセッサ記憶手段に記憶し、
前記サクセッサのプレディセッサ記憶手段に自装置のイベントキーと、アドレスと、を記憶し、
前記プレディセッサのルーティングテーブルから、該プレディセッサのルーティングキーからの距離が１である値を開始値とするタプルを求め、該タプルのイベントキーと、アドレスと、を自装置のイベントキーと、アドレスと、に更新する、
請求項１〜４のいずれか１項に記載の分散処理システム。
【請求項６】
前記分散処理装置は、
自装置のサクセッサとイベントデータ被通知数を通知しあうことで、サクセッサとの間でイベントデータ被通知数が均一になるように自装置のルーティングキーを更新し、前記キー保持手段が該更新後のルーティングキーを保持する、
請求項１〜５のいずれか１項に記載の分散処理システム。
【請求項７】
前記分散処理装置は、
自装置のサクセッサとイベントデータ転送数を通知しあうことで、サクセッサとの間でイベントデータ転送数が均一になるように自装置のイベントキーを更新し、前記キー保持手段が該更新後のイベントキーを保持する、
請求項１〜５のいずれか１項に記載の分散処理システム。
【請求項８】
前記分散処理装置は、
所定時間ごとに自装置のサクセッサに、自装置のイベントデータ被通知数を送信し、
イベントデータ被通知数を受信したサクセッサから、
該サクセッサが算出した該サクセッサと自装置のイベントデータ被通知数が同数になるような自装置のイベントキーと、
自装置が現在保持するイベントキーを、前記算出したイベントキーに更新することを求めるイベントキー更新要求と、
を受信した際に、前記イベントキー更新要求に基づいて自装置が保持するイベントキーを更新する、
請求項６に記載の分散処理システム。
【請求項９】
前記分散処理装置は、
所定時間ごとに、自装置のサクセッサに、自装置のイベントデータ転送数を送信し、
イベントデータ転送数を受信したサクセッサから、
該サクセッサが算出した該サクセッサと自装置のイベントデータ転送数が同数になるような自装置のルーティングキーと、
自装置が現在保持するルーティングキーを、前記算出したルーティングキーに更新することを求めるルーティングキー更新要求と、
を受信した際に、前記ルーティングキー更新要求に基づいて自装置が保持するルーティングキーを更新する、
請求項７に記載の分散処理システム。
【請求項１０】
構造化Ｐ２Ｐネットワーク上の分散処理装置であって、
順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持するキー保持手段と、
前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録する分散処理装置初期化手段と、
前記タプルを保持するルーティングテーブルを格納するルーティングテーブル格納手段と、
を含む分散処理装置。
【請求項１１】
外部からイベントキーが入力されたときに、ルーティングテーブルに記憶されている各タプルのイベントキーから、外部から入力されたイベントキーまでの距離が最も小さいイベントキーである転送先イベントキーを求め、
転送先イベントキーに対応するタプルのアドレスに外部イベントキーを送信する、
データ転送手段を、
さらに含む請求項１０に記載の分散処理装置。
【請求項１２】
前記所定の関係にあるルーティングキーを保持する分散処理装置は、任意のキーｋからの距離がｄであるキーを（ｋ＋ｄ）ｍｏｄ  ２ｍと定義した場合における、前記ルーティングキーからの距離が２＾（ｊ−１）（ｊ＝１，２，．．．，ｍ）であるルーティングキーを開始値として、該開始値からの距離が最も小さいルーティングキーを保持する分散処理装置である、
請求項１０に記載の分散処理装置。
【請求項１３】
外部からイベントキーが入力されたときに、プレディセッサ記憶手段に記憶されているイベントキーであるプレディセッサイベントキーから、
前記外部から入力されたイベントキーである外部イベントキーまでの距離が、プレディセッサイベントキーから自装置のイベントキーである自イベントキーまでの距離よりも小さい場合に、自装置のアプリケーションに外部イベントキーを入力し、
プレディセッサイベントキーから外部イベントキーまでの距離が、プレディセッサイベントキーから自イベントキーまでの距離よりも大きい場合に、ルーティングテーブルに記憶されている各タプルのイベントキーと、自イベントキーとから、外部イベントキーまでの距離が最も小さいイベントキーである転送先イベントキーを求め、
転送先イベントキーが自イベントキーと一致していれば、自装置のサクセッサに外部イベントキーを送信し、
転送先イベントキーが自イベントキーと一致していなければ、転送先イベントキーに対応するタプルのアドレスに外部イベントキーを送信する、
データ転送手段を、
さらに含む請求項１２に記載の分散処理装置。
【請求項１４】
構造化Ｐ２Ｐネットワークにおいて１つ以上の分散処理装置を含む分散処理システムにおけるルーティングテーブル作成方法であって、
順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持し、
前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録し、
前記タプルを保持するルーティングテーブルを格納する、
ルーティングテーブル作成方法。
【請求項１５】
構造化Ｐ２Ｐネットワーク上の分散処理装置に、
順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持し、
前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録し、
前記タプルを保持するルーティングテーブルを格納する、
処理を実行させるプログラムを格納する記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、大量のイベントデータを高速に処理するために、複数の分散処理装置が相互に連携して分散処理する分散処理システムに関する。
【背景技術】
【０００２】
図１は、ＬＡＮケーブルなどの伝送媒体をもって接続されるネットワークを介して、他の分散処理装置と通信する分散処理システムの概要を示す図である。図１では例として、分散処理装置１００と分散処理装置２００と分散処理装置３００と分散処理装置４００との、４つの分散処理装置が接続されている。
図１に示す分散処理システムでは、分散処理装置同士が連携して、イベントデータを、そのイベントデータを処理すべき分散処理装置へ送信する。送信先の分散処理装置は、送信されたイベントデータを処理する。他の分散処理装置に送信するために、分散処理装置は、他のいくつかの分散処理装置のアドレスを記憶している。分散処理装置は、イベントデータを転送するときには、最終的に該イベントデータを処理すべき分散処理装置に到達するように、所定の手順に従って、記憶しているアドレス群の中から該イベントデータの送信先となるアドレスを決定する。
なお、イベントデータとは、分散処理システムの外部システムで刻一刻と生成され、分散処理システム上に構築されたアプリケーションで処理されるデータである。具体的には、イベントデータとは、非接触型ＩＣカードを含むＲＦＩＤ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ  ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）やセンサなどのデバイスから大量に発生するデータであり、例えば、携帯電話から定期的に発信される位置情報等である。
非特許文献１は、構造化Ｐ２Ｐ（Ｐｅｅｒ−ｔｏ−Ｐｅｅｒ）ネットワークにおいて効率的にルーティングを行うための手法を開示する。非特許文献１に記載のルーティングアルゴリズム（以下「Ｃｈｏｒｄ」という。）では、分散処理装置はｍビット長の値（キー）をその識別子（分散処理装置ＩＤ）とする。イベントデータは、そのハッシュ値（キー）のサクセッサ（ｓｕｃｃｅｓｓｏｒ）で処理される。キーｋのサクセッサとは、分散処理システムを構成する分散処理装置のうち、キーｋからの距離が最も小さい値を識別子とする分散処理装置のことである。なお、サクセッサとは逆に、キーｋからの距離が最も大きい値を識別子とする分散処理装置をキーｋのプレディセッサと呼ぶ。
分散処理システムで処理されるイベントデータについて、その値に偏りがあるのが一般的である。例えば、人が携帯する携帯端末から位置情報をイベントデータとして定期的に発信する場合、人が密集している地域の位置情報は、そうでない地域の位置情報に比べて多くなる。イベントデータの値の偏りによって、そこから生成されるキーについても偏りが発生する。
分散処理装置におけるイベントデータの処理負荷（ＣＰＵ負荷）は、処理すべきイベントデータの数に比例する。一方、分散処理装置とネットワークの間の伝送媒体が運んでいるデータ量（ネットワーク負荷）は転送すべきイベントデータの数と処理すべきイベントデータの数の和に比例する。
ＣＰＵ負荷又はネットワーク負荷を均等にするためのアルゴリズムを、非特許文献２は“３．ＩＴＥＭ  ＢＡＬＡＮＣＩＮＧ”で開示している。非特許文献２の方式は、各分散処理装置の負荷が均等になるように分散処理装置ＩＤを変更する。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Ｃｈｏｒｄ−Ａ  Ｓｃａｌａｂｌｅ  Ｐｅｅｒ−ｔｏ−Ｐｅｅｒ  Ｌｏｏｋｕｐ  Ｓｅｒｖｉｃｅ  ｆｏｒ  Ｉｎｔｅｒｎｅｔ  Ａｐｐｌｉｃａｔｉｏｎｓ
【非特許文献２】Ｓｉｍｐｌｅ  Ｅｆｆｉｃｉｅｎｔ  Ｌｏａｄ  Ｂａｌａｎｃｉｎｇ  Ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  Ｐｅｅｒ−ｔｏ−Ｐｅｅｒ  Ｓｙｓｔｅｍｓ
【発明の概要】
【発明が解決しようとする課題】
【０００４】
非特許文献２の方式は、例えばＣｈｏｒｄなどの、ルーティングアルゴリズムに対して、分散処理装置ＩＤを調整することで、ＣＰＵ負荷又はネットワーク負荷のいずれかを分散処理装置間で均一にする。しかしながら一方の負荷を均一にすることが、他方の負荷のバランスに影響を与えてしまう。そのため、Ｃｈｏｒｄなどのルーティングアルゴリズムに対して、非特許文献２の方式を適用する場合には、ＣＰＵ負荷とネットワーク負荷の両方を同時にバランスさせることができない。
以上より本発明の目的は、ＣＰＵ負荷とネットワーク負荷を独立にバランスさせることが可能な技術を提供することである。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、本発明の分散処理システムは、構造化Ｐ２Ｐネットワークにおいて１つ以上の分散処理装置を含む分散処理システムであって、前記分散処理装置は、順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持するキー保持手段と、前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録する分散処理装置初期化手段と、前記タプルを保持するルーティングテーブルを格納するルーティングテーブル格納手段と、を含む。
上記目的を達成するために、本発明の分散処理装置は、構造化Ｐ２Ｐネットワーク上の分散処理装置であって、順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持するキー保持手段と、前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録する分散処理装置初期化手段と、前記タプルを保持するルーティングテーブルを格納するルーティングテーブル格納手段と、を含む。
上記目的を達成するために、本発明のルーティングテーブル作成方法は、構造化Ｐ２Ｐネットワークにおいて１つ以上の分散処理装置を含む分散処理システムにおけるルーティングテーブル作成方法であって、順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持し、前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録し、前記タプルを保持するルーティングテーブルを格納する。
上記目的を達成するために、本発明の記録媒体が格納するプログラムは、構造化Ｐ２Ｐネットワーク上の分散処理装置に、順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持し、前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録し、前記タプルを保持するルーティングテーブルを格納する、処理を実行させる。
【発明の効果】
【０００６】
本発明によればＣＰＵ負荷とネットワーク負荷を独立にバランスさせることが可能となる。その理由は、これまで一つのキーが担っていた、イベントデータの送信のための役割と、イベントデータの管理区間を区切るための役割を、二つの各キーの役割として分けたからである。
【図面の簡単な説明】
【０００７】
【図１】分散処理システムの概要を示す図である。
【図２】Ｃｈｏｒｄにおけるキーの概念を説明するための図である。
【図３】分散処理システムにおける各分散処理装置が記憶する識別子の例を示す図である。
【図４】各キーの発生頻度の例を示す図である。
【図５】図４に示すキー分布となる場合における図３の各分散処理装置の、イベントデータ転送数とイベントデータ被通知数を示す図である。
【図６】非特許文献２の方式によって分散処理装置ＩＤが変更された状態を示す図である。
【図７】本発明の効果を説明するための図である。
【図８】第１実施形態における分散処理装置１００の構成例を示す図である。
【図９】ルーティングテーブル格納部１１３が格納するルーティングテーブルの構造例を示す図である。
【図１０】分散処理装置初期化部１１１が行う分散処理装置初期化処理のフローチャート図である。
【図１１】分散処理装置初期化部１１１が行うルーティングテーブル初期化処理のフローチャート図である。
【図１２】分散処理装置初期化部１１１が行うサクセッサ・プレディセッサ初期化処理のフローチャート図である。
【図１３】分散処理装置初期化部１１１が行う他分散処理装置更新処理のフローチャート図である。
【図１４】更新対象分散処理装置が行うルーティングテーブル更新処理のフローチャート図である。
【図１５】図１５は、データ転送部１１５がイベントデータを転送する動作を表したフローチャート図である。
【図１６】データ転送部１１５がプレディセッサ送信機能により、データを送信する動作を表したフローチャート図である。
【図１７】本発明の第２実施形態の構成例を示す図である。
【図１８】本発明を適用した分散処理システムの例を示す図である。
【図１９】分散処理装置と、その分散処理装置のサクセッサとの間で行われるＣＰＵ負荷均一処理のフローチャート図である。
【図２０】分散処理装置と、その分散処理装置のサクセッサとの間で行われるネットワーク負荷均一処理のフローチャート図である。
【図２１】第２実施形態に係る分散処理装置５００のハードウェア構成の一例を示すブロック図である。
【発明を実施するための形態】
【０００８】
まず、本発明の実施形態の理解を容易にするために、本発明の背景を説明する。
Ｃｈｏｒｄなどのルーティングアルゴリズムに対して、非特許文献２の方式を適用する場合には、ＣＰＵ負荷とネットワーク負荷の両方を同時にバランスさせることができない。以下、その理由を、構造化Ｐ２Ｐ（Ｐｅｅｒ−ｔｏ−Ｐｅｅｒ）ネットワークのルーティングアルゴリズムについてＣｈｏｒｄを例にとって説明する。
Ｃｈｏｒｄでは、分散処理装置は、イベントデータを他の分散処理装置に転送するために、他のいくつかの分散処理装置のアドレスを保持する。それらのアドレスは、該分散処理装置の識別子からの距離が２＾（ｉ−１）（ｉ＝１，２，．．．，ｍ）であるキーｓ（開始値）のサクセッサのアドレスである。ここで開始値とは、ルーティングテーブルに登録する分散処理装置を決定するための基点となる値である。
図２は、Ｃｈｏｒｄにおけるキーの概念を説明するための図である。図２に示すようにキーはモジュロ２＾ｍの環状で表される。ここでモジュロとは、除算により余りを求める整数演算のことである。例えば、整数ａを整数ｎで割ったとき、その余りをａ  ｍｏｄ  ｎと表す。任意のキーｋからの距離がｄであるキーは、（ｋ＋ｄ）ｍｏｄ  ２＾ｍとなる。
図２の例では、ｍ＝３であり、キー７から距離が２であるキーは、（７＋２）ｍｏｄ  ２＾３＝１となる。図２に示すように、Ｃｈｏｒｄにおいて距離は、ノード間の『時計回り距離』と定義できる。
イベントデータは、そのハッシュ値（キー）のサクセッサ（ｓｕｃｃｅｓｓｏｒ）で処理される。キーｋのサクセッサとは、分散処理システムを構成する分散処理装置のうち、キーｋからの距離が最も小さい値を識別子とする分散処理装置のことである。
上述したように、イベントデータは、そのハッシュ値であるキーｋからの距離が最も小さい値である値を識別子とする分散処理装置（サクセッサ）で処理される。図２は具体例を示しており、キーｋのサクセッサが、キーｋから時計回りに数えて一番近い距離にある分散処理装置であることを示している。
図２においては、分散処理装置が、分散処理装置ＩＤが０と１と３の３つである場合が示されている。図２は、キー２のサクセッサが、分散処理装置ＩＤが３の分散処理装置であることを表している。また、図２は、キー６のサクセッサが、分散処理装置ＩＤが０の分散処理装置であることを表している。
図３は、分散処理システムにおける各分散処理装置が記憶する識別子の例を示す図である。図３は、ｍ＝８の例を示す。図３における分散処理装置のブロックの中に記述されている値は、該分散処理装置の識別子（分散処理装置ＩＤ）であり、８ビットのキーを符合なし整数で表したものである。各分散処理装置の上部にある表は、その下の分散処理装置が記憶している開始値とそのサクセッサの識別子である。各サクセッサのアドレスは、その識別子と１対１で対応付けられるので、記述を省略している。
例えば、識別子が１９１の分散処理装置について、ｉ＝１の場合の開始値は１９１＋２＾（１−１）＝１９２（ｍｏｄ  ２＾８）となる。ｉ＝８の場合の開始値は１９１＋２＾（８−１）＝６３（ｍｏｄ  ２＾８）となる。
図４は、各キーの発生頻度の例を示す図である。図４は、例えばキー０から７についてそれぞれ１秒間に１６回、そのキーをハッシュ値として算出するイベントデータを発生する例を示している。図４では、キーが１０４，１０５，１１０，１１１となるイベントデータの発生頻度が最も高い。なお図４は、偏りがある頻度で発生したイベントデータを、関連技術によって予め意図的に分類した図である。
図３の各分散処理装置が、図４に示すキー分布となるようなイベントデータを外部システムから受信した場合を考える。図４より、各分散処理装置が受信するイベントデータ数は、８×１６＋３２×４＋６４×２＋２×６４＋４×３２＋２×６４＋１６×８＋１２８×１＝１０２４イベントデータ／秒となる。よって、８つの分散処理装置から構成される分散処理システムでは、受信するイベントデータの総数は、１０２４×８＝８１９２イベントデータ／秒となる。
図５は、図４に示すキー分布となる場合における図３の各分散処理装置の、イベントデータ転送数とイベントデータ被通知数を示す図である。分散処理装置のイベントデータ転送数とは、該分散処理装置が外部システム、あるいは、別の分散処理装置からイベントデータを受信して、それを別の分散処理装置へ転送した数である。また、分散処理装置のイベントデータ被通知数とは、該分散処理装置が、最終的な到達先としてイベントを受信した数である。
分散処理装置が外部システムから受信するイベントは、それぞれ１つの到達先の分散処理装置が存在するので、図５のイベントデータ被通知数の合計値１７９２＋６４０＋５１２＋４２２４＋２５６＋２５６＋２５６＋２５６＝８１９２は全分散処理装置が受信するイベントの総数と一致する。
分散処理装置におけるイベントデータの処理負荷（ＣＰＵ負荷）は、図５のイベントデータ被通知数に比例する。ただし、分散処理装置は、送信されたイベントデータを基にアプリケーションを実行するが、各イベントデータに対するアプリケーション実行負荷は同じとする。また、一般的にイベントデータの転送するための処理負荷は、アプリケーション実行の負荷に比べて十分小さい。そのため、イベントデータ被通知数の偏りが、分散処理装置のＣＰＵ負荷の偏りを表す。
分散処理装置とネットワークの間の伝送媒体が運んでいるデータ量（ネットワーク負荷）は、イベントデータ転送数とイベントデータ被通知数の和に比例する。イベントデータの転送や被通知は、分散処理装置とネットワークの間の伝送媒体を介して行われるためである。よって、それらの和の偏りが、分散処理装置のネットワーク負荷の偏りを表す。
ここで、イベントデータのハッシュ値が図４に示す分布のときに、非特許文献２の方式によりＣＰＵ負荷を均一にすることを考える。この場合、非特許文献２の方式は、イベントデータ被通知数を均一にするために、分散処理装置ＩＤを変更する。
図６は、非特許文献２の方式によって分散処理装置ＩＤが変更された状態を示す図である。図６に示すように、８つの分散処理装置のアプリケーションが受信するイベントの総数は８１９２イベントデータ／秒であるため、１つの分散処理装置あたり、８１９２／８＝１０２４イベントデータ／秒とすることでＣＰＵ負荷が均一となる。
例えば、図６において分散処理装置ＩＤが３９である分散処理装置（以下、分散処理装置（３９）という。）は、８から３９までのキーを担当する。分散処理装置（３９）のアプリケーションが処理するイベントデータ数は、該分散処理装置が担当するキーの数に、分散処理装置の台数と発生頻度を乗算することで計算でき、（３９−８＋１）×８＝１０２４である。ただし、ここでは、全ての分散処理装置が同等の性能のＣＰＵを備えているものとする。
ネットワーク負荷を均一にする場合には、非特許文献２の方式は、イベントデータ転送数とイベントデータ被通知数の和が分散処理装置間で均一になるように、各分散処理装置のＩＤを変更する。
しかしながら、非特許文献２の方式を適用する場合には、ＣＰＵ負荷とネットワーク負荷の両方を同時にバランスさせることができない。例えば、図６では、イベントデータ被通知数は、全ての分散処理装置で同じである。しかし、イベントデータ転送数は分散処理装置ごとに異なるため、ネットワーク負荷は分散処理装置ごとに異なる。図６の例では、ＩＤが１０３、２５５である分散処理装置に、他の分散処理装置と比べて、特に大きなネットワーク負荷がかかることがわかる。
このように、Ｃｈｏｒｄにおいて非特許文献２の方式を適用した場合でも、一方の負荷を均一にすることはできても、他方の負荷について、特定の分散処理装置に負荷が集中してしまう可能性がある。特定の分散処理装置に負荷が集中した場合、その分散処理装置がボトルネックとなり、分散処理システムとしてのパフォーマンスが低下する。
以下に説明される本発明の実施形態によれば、キーを役割（管理区間を区切ることとルーティングの指針になること）毎に二つにわけることで、図７に示すようにＣＰＵ負荷とネットワーク負荷を独立にバランスすることが可能となる。なお、以下の説明では、全ての分散処理装置が同等の性能のＣＰＵを備え、また、同等の伝送性能の伝送媒体を介してネットワークに接続しているものとする。
＜第１実施形態＞
第１実施形態における分散処理システムは、図１に示されるように１つ以上の分散処理装置から構成される。分散処理装置は、順序関係が定義されている所定数（ｍ）ビットの値であるルーティングキーとイベントキーを保持する。
ここで、ルーティングキーとは、イベントデータの送信（ルーティング）のために用いられるキーである。イベントキーとは、イベントデータの管理区間を区切るためのキーである。本実施形態では、イベントキーをｍビット長としているが、順序関係が定義されていればよく、固定長である必要はない。ルーティングキーとイベントキーについて、Ｃｈｏｒｄの場合と同じように距離を定義する。
イベントデータを処理すべき分散処理装置は、該イベントデータと各分散処理装置のイベントキーによって決まる。具体的には、イベントデータを処理すべき分散処理装置は、イベントデータに対して演算を行うことにより得られるイベントキーからの距離が最も小さい値をイベントキーとして保持する分散処理装置（サクセッサ）である。イベントキーは、ハッシュ関数を用いてイベントデータから得たハッシュ値などで良いが、これに限定されない。
ここで、本実施形態において、ルーティングキーとイベントキーは所定の関係で順序関係が定義されている。説明のために、分散処理装置ｘ、ｙ、ｚのルーティングキーをｘｒ、ｙｒ、ｚｒとする。また、イベントキーをｘｅ、ｙｅ、ｚｅとする。この場合、本実施形態では（ｘｒからｙｒまでの距離）＜（ｘｒからｚｒまでの距離）ならば、（ｘｅからｙｅまでの距離）＜（ｘｅからｚｅまでの距離）とならなければならない。この条件を満たすことにより、分散処理システムは、イベントデータを処理すべき分散処理装置に徐々に効率的に近づけることができる。具体的には、分散処理システムは、ｌｏｇ＿２（分散処理装置の数）のオーダの転送回数で処理すべき分散処理装置へイベントデータを送信できる。
ここで、サクセッサとプレディセッサを以下のように定義する。
・任意のルーティングキーのサクセッサ：該ルーティングキーからの距離が最も小さい（最も近い）値をルーティングキーとする分散処理装置。
・任意のルーティングキーのプレディセッサ：該ルーティングキーからの距離が最も大きい（最も遠い）値をルーティングキーとする分散処理装置。
・任意のイベントキーのサクセッサ：該イベントキーからの距離が最も小さい（最も近い）値をイベントキーとする分散処理装置。
・任意のイベントキーのプレディセッサ：該イベントキーからの距離が最も大きい（最も遠い）値をイベントキーとする分散処理装置。
・任意の分散処理装置のサクセッサ：該分散処理装置のルーティングキーからの距離が１であるルーティングキーのサクセッサ。
・任意の分散処理装置のプレディセッサ：該分散処理装置のルーティングキーのプレディセッサ。
図８は、第１実施形態における分散処理装置１００の構成例を示す図である。図８において、分散処理装置１００は、他の分散処理装置２００とデータ転送部１１１及びデータ転送部２１５を介してイベントデータの送受信を行う。
分散処理装置１００は、分散連携部１１０と、イベントデータに対して所定の処理を行うアプリケーション１２０と、自装置である分散処理装置１００のルーティングキーとイベントキーを保持するキー保持部１３０と、を含む。
キー保持部１３０は、ルーティングキーとイベントキーとを保持する。ルーティングキーは、順序関係が定義されているキー（値）であってデータのルーティングに用いられるキーである。イベントキーは、ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるキーである。
分散連携部１１０は、分散処理装置初期化部１１１と、ルーティングテーブル更新部１１２と、ルーティングテーブル格納部１１３と、プレディセッサ記憶部１１４と、データ転送部１１５とを含む。
分散処理装置初期化部１１１は、新たな分散処理装置（以下、新規分散処理装置という。）を分散処理システムに追加するときに動作する。分散処理装置初期化部１１１は、新規分散処理装置が追加されたとき、分散処理装置１００内の、ルーティングテーブル格納部１１３が格納するルーティングテーブルと、プレディセッサ記憶部１１４の記憶内容を初期化する。また、分散処理装置初期化部１１１は、他の分散処理装置（例えば分散処理装置２００）に対して、ルーティングテーブルの更新要求（以下、ルーティングテーブル更新要求という。）を行う。
ルーティングテーブル更新部１１２は、他の分散処理装置から受信したルーティングテーブル更新要求を基に、ルーティングテーブル格納部１１３が格納するルーティングテーブルを更新する。
ルーティングテーブル格納部１１３は、ルーティングキーとイベントキーとアドレスを含むタプル（レコードと呼んでも良い。）を０以上保持し、データの転送先を決定するために使用されるルーティングテーブルを格納する。
プレディセッサ記憶部１１４は、プレディセッサのルーティングキーとイベントキーとアドレスを記憶する。
データ転送部１１５は、受信したイベントデータが、該分散処理装置が処理すべきものであれば、アプリケーションにイベントデータを通知する。該分散処理装置が処理すべきものでなければ、データ転送部１１５は、ルーティングテーブルを参照し、データの次の転送先となる分散処理装置を決定し、該分散処理装置に対して該イベントデータを送信する。
図９は、ルーティングテーブル格納部１１３が格納するルーティングテーブルの構造例を示す図である。ルーティングテーブルは、開始値、ルーティングキー、イベントキー及びアドレスからなるタプルを０以上保持する。開始値は、分散処理装置１００のルーティングキーからの距離が２＾（ｉ−１）（ｉ＝１，２，．．．，ｍ）である値である。ルーティングキーとイベントキーとアドレスは、それぞれ、該開始値のサクセッサのルーティングキーとイベントキーとアドレスである。ルーティングキーとイベントキーの値の決め方は、適切なルーティングとイベントデータの管理が可能であれば特に限定されない。
次に、分散処理装置１００を新規分散処理装置として、新たに分散処理システムに追加するときの各部の動作について説明する。
図１０は、分散処理装置初期化部１１１が行う分散処理装置初期化処理のフローチャート図である。図１０に示すように、分散処理装置１００が新規分散処理装置として分散処理システムに追加されるとき、分散処理装置初期化部１１１は外部システムからルーティングキーｒ、イベントキーｅ、最初の分散処理装置かどうかを示す情報が入力される（ステップＳ１）。ここで、ｒは、ルーティングキーとして外部システムから実際に入力された具体的な値である。ｅは、イベントキーとして外部システムから実際に入力された具体的な値である。ここで入力とは、外部システムの操作入力によるデータ設定、又は外部システムからのデータ受信を意味する。
本実施形態においては、ルーティングキーとイベントキーは、適切な値が外部システムから入力されることによって設定されるものとする。適切な値は、例えば値を入力するユーザがシステム全体の負荷状況を予め知っていることで設定することができる。又は、統計データ等を参考に設定する等の方法が考えられるが、ルーティングキーとイベントキーの設定方法はこれに限定されるものではない。
例えば、ルーティングキーは、新規分散処理装置が記憶するＩＰアドレスなど、分散処理装置の個有のデータのハッシュ値としても良い。また、イベントデータが一様ランダムに発生することが分かっている場合には、ルーティングキーは、隣り合う分散処理装置同士の距離がほぼ同じになるように設定されても良い。
イベントキーは、例えば、新規分散処理装置が追加されるときに、ＣＰＵ負荷が、新規分散処理装置のサクセッサのＣＰＵ負荷と同じになるように設定されても良い。
ルーティングキーとイベントキーは、分散処理装置同士がＣＰＵ負荷状況とネットワーク負荷状況を通知しあうことで設定されても良い。
次に、新規分散処理装置は、自装置が分散処理システムにおける最初の分散処理装置であるか否かを、最初の分散処理装置かどうかを示す情報から判断する（ステップＳ２）。
最初の分散処理装置か否かを示す情報が、新規分散処理装置が分散処理システムにおける最初の分散処理装置であることを示している場合、プレディセッサ及びあらゆるルーティングキーのサクセッサが新規分散処理装置自身である。よって、その場合には、分散処理装置初期化部１１１はまず、プレディセッサ記憶部１１４にルーティングキーｒとイベントキーｅと自装置のアドレスａを記憶する（ステップＳ３）。
次に、分散処理装置初期化部１１１は、ｉ＝１からｍについて、開始値、ルーティングキー、イベントキー、アドレスをそれぞれ、ｒからの距離が２＾（ｉ−１）である値、ｒ、ｅ、ａに設定したタプルをルーティングテーブルに登録する（ステップＳ４）。
最初の分散処理装置か否かを示す情報が、新規分散処理装置が最初の分散処理装置であることを示していなければ、分散処理装置初期化部１１１は、分散処理システムを構成する少なくとも１つの分散処理装置のアドレスｅａを取得する（ステップＳ５）。この少なくとも１つの分散処理装置は、例えばＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）でいうところの、予め登録されたデフォルトゲートウェイでも良い。
次に、分散処理装置初期化部１１１は、アドレスｅａの分散処理装置を介して新規分散処理装置のルーティングテーブル格納部１１３が格納するルーティングテーブルを初期化する処理（ルーティングテーブル初期化処理）を行う（ステップＳ６）。
次に、分散処理装置初期化部１１１は、データ転送部１１５を介して他の分散処理装置のルーティングテーブル格納部１１３が格納するルーティングテーブルを更新する処理（他分散処理装置更新処理）を行う（ステップＳ７）。
図１１は、分散処理装置初期化部１１１が図１０のステップＳ６において行うルーティングテーブル初期化処理のフローチャート図である。図１１に示すように、分散処理装置初期化部１１１は、ルーティングテーブル初期化処理において、まずサクセッサとプレディセッサを初期化する処理（サクセッサ・プレディセッサ初期化処理）を行う（ステップＳ６１）。
サクセッサ・プレディセッサ初期化処理により、新規分散処理装置のルーティングキーｒからの距離が１である値を開始値として、該開始値と、該開始値のサクセッサのルーティングキーとイベントキーとアドレスから成るタプルがルーティングテーブルに記憶される。また、プレディセッサ記憶部１１４に、ルーティングキーｒのプレディセッサのルーティングキーとイベントキーとアドレスが記憶される。
サクセッサ・プレディセッサ初期化処理の詳細については後述する。
分散処理装置初期化部１１１は、ルーティングテーブル初期化処理において、次に、ｉ＝２からｍについて、ｉに対応するタプルをルーティングテーブルに登録する。具体的には、分散処理装置初期化部１１１は、まず、ルーティングキーｒからの距離が２＾（ｉ−１）である値を開始値ｓとする（ステップＳ６２）。
分散処理装置初期化部１１１は、開始値ｓのサクセッサに、開始値ｓのサクセッサのルーティングキーｄｒ、イベントキーｄｅ及びアドレスｄａを要求する（ステップＳ６３）。分散処理装置初期化部１１１は、該要求を、データ転送部１１５に、開始値ｓ（対象のサクセッサを示すため）と、開始値ｓのサクセッサのルーティングキーｄｒ、イベントキーｄｅ及びアドレスｄａを要求するメッセージを入力することで行う。以下、単にメッセージというときは、所定の情報を要求するメッセージを意味する。
分散処理装置初期化部１１１は、データ転送部１１５を介して、開始値ｓのサクセッサから上記要求に対する応答を受信する（ステップＳ６４）。
分散処理装置初期化部１１１は、開始値、ルーティングキー、イベントキー及びアドレスをそれぞれ、ｓ、ｄｒ、ｄｅ及びｄａに設定したタプルをルーティングテーブルに登録する（ステップＳ６５）。
図１２は、分散処理装置初期化部１１１が図１１のステップＳ６１において行うサクセッサ・プレディセッサ初期化処理のフローチャート図である。図１２に示すように、まず、新規分散処理装置は、ステップＳ５１１とステップＳ５１２においてサクセッサ登録処理を行う。
すなわち、分散処理装置初期化部１１１は、最初に取得したアドレスｅａの分散処理装置に対して、ルーティングキーｒのサクセッサのルーティングキーｓｒとイベントキーｓｅとアドレスｓａを要求する（ステップＳ５１１）。アドレスｅａの分散処理装置は、自装置が格納するルーティングテーブルに基づくアルゴリズムにより、該当する分散処理装置から上記の情報を取得し、該情報を応答として新規分散処理装置に送信する。
前記要求に対する応答を受信すると、分散処理装置初期化部１１１は、開始値、ルーティングキー、イベントキー及びアドレスをそれぞれ、ｒからの距離が１である値、ｓｒ、ｓｅ、ｓａに設定したタプルをルーティングテーブルに登録する（ステップＳ５１２）。
次に、新規分散処理装置は、ステップＳ５１３とステップＳ５１４においてプレディセッサ登録処理を行う。
すなわち、分散処理装置初期化部１１１は、アドレスｓａの分散処理装置に対して、アドレスｓａの分散処理装置のプレディセッサのルーティングキーｐｒ、イベントキーｐｅ及びアドレスｐａを要求する（ステップＳ５１３）。
前記要求に対する応答を受信すると、分散処理装置初期化部１１１は、プレディセッサ記憶部１１４にｐｒ、ｐｅ及びｐａを記憶する（ステップＳ５１４）。
その後、新規分散処理装置は、サクセッサのプレディセッサ更新処理を行う。すなわち、分散処理装置初期化部１１１は、アドレスがｓａの分散処理装置に対して、該分散処理装置のプレディセッサ記憶部のルーティングキーとイベントキーとアドレスをそれぞれ、ｒとｅとａに更新するように要求する（ステップＳ５１５）。
最後に、新規分散処理装置は、プレディセッサのサクセッサ更新処理を行う。すなわち、分散処理装置初期化部１１１は、アドレスがｐａの分散処理装置に対して、該分散処理装置のルーティングキーからの距離が１である値を開始値とするタプルのルーティングキーとイベントキーとアドレスをそれぞれｒとｅとａに更新するように要求する（ステップＳ５１６）。
図１３は、分散処理装置初期化部１１１が図１０のステップＳ７において行う他分散処理装置更新処理のフローチャート図である。まず、新規分散処理装置の分散処理装置初期化部１１１は、ｉ＝２からｍについて、他の分散処理装置のうち、ルーティングキーからの距離が２＾（ｉ−１）である値のサクセッサが該新規分散処理装置である分散処理装置のルーティングテーブルを更新する。
具体的には、まず、分散処理装置初期化部１１１は、ルーティングキーｒまでの距離がｄ−１（＝２＾（ｉ−１）−１）であるルーティングキーｔｒを算出する（ステップＳ７１）。
次に、分散処理装置初期化部１１１は、ステップＳ７１で算出したルーティングキーｔｒのプレディセッサに、ルーティングテーブル更新処理を要求する（ステップＳ７２）。具体的には、分散処理装置初期化部１１１は、データ転送部１１５に、ルーティングキーｔｒとルーティングテーブル更新要求を入力する。
データ転送部１１５は、ルーティングテーブル更新要求が入力されると、プレディセッサ送信機能を呼び出す。プレディセッサ送信機能の詳細については、後述する。データ転送部１１５は、プレディセッサ送信機能により、ルーティングキーｔｒのプレディセッサに該ルーティングテーブル更新要求を送信する（ステップＳ７３）。ルーティングテーブル更新要求は、ルーティングキーｒ、イベントキーｅ、アドレスａ、ｒのプレディセッサのルーティングキーｐｒ及び距離ｄの情報を含む。
前記ルーティングテーブル更新処理の対象の分散処理装置（以下、更新対象分散処理装置という。）のルーティングテーブル更新部はデータ転送部を介してルーティングテーブル更新要求を受信する。
更新対象分散処理装置のルーティングテーブル更新部は、他の分散処理装置から受信したルーティングテーブル更新要求を基に、ルーティングテーブル格納部が格納するルーティングテーブルを更新する。
図１４は、更新対象分散処理装置が行うルーティングテーブル更新処理のフローチャート図である。図１４に示すように、まず、更新対象分散処理装置のデータ転送部は、データ転送部１１５からルーティングテーブル更新要求を受信する（ステップＳ８１）。更新対象分散処理装置のデータ転送部は、ルーティングテーブル更新要求をルーティングテーブル更新部に出力する。
次に、ルーティングテーブル更新要求が入力されたルーティングテーブル更新部は、該更新対象分散処理装置のルーティングキーｏｒからの距離がｄである値を開始値とするタプルを取得する（ステップＳ８２）。
ルーティングテーブル更新部は、ｏｒから該タプルのルーティングキーまでの距離が、ｏｒからｒまでの距離よりも大きいか否かを判断する（ステップＳ８３）。
ｏｒから該タプルのルーティングキーまでの距離が、ｏｒからｒまでの距離よりも大きいと判断した場合、ルーティングテーブル更新部は、該タプルのルーティングキーとイベントキーとアドレスをそれぞれ、ｒとｅとａに更新する（ステップＳ８４）。この更新は、開始値からの距離がより小さいｒをルーティングキーに持つ分散処理装置が、該開始値のサクセッサとなるために行われる。
ｏｒから該タプルのルーティングキーまでの距離が、ｏｒからｒまでの距離よりも小さいと判断した場合、ルーティングテーブル更新部は、ルーティングテーブル更新処理を終了する。
ステップＳ８４の後、ルーティングテーブル更新部は、該更新対象分散処理装置のプレディセッサのルーティングキーからｐｒまでの距離よりもｄが大きいか否かを判断する（ステップＳ８５）。
更新対象分散処理装置のプレディセッサのルーティングキーからｐｒまでの距離よりもｄが大きいと判断した場合、ルーティングテーブル更新部は、データ転送部を介してルーティングテーブル更新要求を該更新対象分散処理装置のプレディセッサに送信する（ステップＳ８６）。
更新対象分散処理装置のプレディセッサのルーティングキーからｐｒまでの距離よりもｄが小さいと判断した場合、ルーティングテーブル更新部は、ルーティングテーブル更新処理を終了する。
ルーティングテーブル格納部は、上記ルーティングテーブル更新処理により更新されたルーティングテーブルを格納する。
ここで、データ転送部１１５がイベントデータを受信した際に、そのイベントデータを転送する動作について詳細に説明する。イベントデータからは、ハッシュ関数によりイベントキーｄが得られているものとする。
図１５は、データ転送部１１５がイベントデータを転送する動作を表したフローチャート図である。図１５に示すように、まず、分散処理装置１００のデータ転送部１１５はイベントキーｄとメッセージを受信する（ステップＳ９１）。
データ転送部１１５は、プレディセッサ記憶部１１４を参照して、ｄが該分散処理装置１００のプレディセッサのイベントキーｐよりも大きく、分散処理装置１００のイベントキーｓ以下であるか否かを判断する（ステップＳ９２）。
ｄが分散処理装置１００のプレディセッサのイベントキーｐよりも大きく、分散処理装置１００のイベントキーｓ以下であると判断した場合、データ転送部１１５は、分散処理装置１００がｄのサクセッサであると判断する。この場合、データ転送部１１５は、分散処理装置１００のアプリケーションにｄとメッセージを入力する（ステップＳ９３）。
ｄが分散処理装置１００のプレディセッサのイベントキーｐよりも大きく、分散処理装置１００のイベントキーｓ以下でないと判断した場合、データ転送部１１５は、分散処理装置１００がｄのサクセッサでないと判断する。
この場合、データ転送部１１５は、ルーティングテーブルに登録されているタプルのイベントキーのうち、分散処理装置１００のイベントキーｋからの距離が、ｋからｄまでの距離よりも小さいイベントキーの集合を求める（ステップＳ９４）。
次に、データ転送部１１５は、求めた集合の中で、ｋからの距離が最も大きいイベントキーｉが存在するか否かを判断する（ステップＳ９５）。
データ転送部１１５は、イベントキーｉ（ｋからの距離が最も大きいイベントキー）が存在しないと判断すると、分散処理装置１００がｄのプレディセッサであると判断する（ステップＳ９６）。この場合、データ転送部１１５は、分散処理装置１００のサクセッサのアドレスをルーティングテーブルから取得し、該アドレス宛にイベントキーｄとメッセージを送信する（ステップＳ９６）。
データ転送部１１５は、イベントキーｉが存在すると判断すると、他の分散処理装置がｄのプレディセッサであると判断する。この場合、データ転送部１１５は、求めたイベントキーｉに対応するアドレス宛にイベントキーｄとメッセージを送信する（ステップＳ９７）。
分散処理装置１００のデータ転送部１１５は、また、ルーティングテーブル更新要求を転送するために、指定されたイベントキーのプレディセッサへデータを送信する機能（プレディセッサ送信機能）を有する。
図１６は、データ転送部１１５がプレディセッサ送信機能により、データを送信する動作を表したフローチャート図である。図１６に示すように、プレディセッサ送信機能は、図１５のフローチャート図におけるステップＳ９３とステップＳ９６が、ステップＳ９３’とステップＳ９６’である点のみ異なる。
ステップＳ９３’において、データ転送部１１５は、分散処理装置１００のプレディセッサへイベントキーｄとメッセージを送信する。
ステップＳ９６’において、データ転送部１１５は、ルーティングテーブル更新部１１２にイベントキーｄとメッセージを入力する。
以上説明したように、第１実施形態に係る分散処理システムによれば、ＣＰＵ負荷とネットワーク負荷を独立にバランスさせることが可能となる。その理由は、これまで一つのキーが担っていた、イベントデータの送信のための役割と、イベントデータの管理区間を区切るための役割を、二つの各キー（ルーティングキーとイベントキー）の役割として分けたからである。
図７は、本実施形態における分散処理システムの効果を説明するための図である。図７は、８つの分散処理装置から成る分散処理システムで、ハッシュ値の分布が図４のようになるイベントデータを仮定して、ＣＰＵ負荷とネットワーク負荷をバランスさせた場合の効果を示している。図７には、各分散処理装置のルーティングキー、イベントキー、イベントデータ転送数及びイベントデータ被通知数が示されている。
図７では、イベントキーを、図６に示す分散処理装置ＩＤと同じにすることで、イベントデータ被通知数を各分散処理装置間で均一にしている。図６に示す分散処理装置ＩＤと同じにすることでＣＰＵ負荷を均一にしている。
また、図７では、ルーティングキーを、図５に示す分散処理装置ＩＤのように等間隔にしている。図５に示す分散処理装置ＩＤと同じにすることで、該ルーティングキーを基に生成されるルーティングテーブルが参照する他の分散処理装置の数と、他の分散処理装置から参照されている数を、全ての分散処理装置で均一にしている。よって、外部システムから発生するイベントデータを受信する分散処理装置が一様ランダムに決定する場合には、図７に示すように、イベントデータ転送数は均一となる。
このように、これまで一つのキーが担っていた、イベントデータの送信のための役割と、イベントデータの管理区間を区切るための役割を、二つの各キーの役割として分けることで、イベントデータ被通知数とイベントデータ転送数の両方が均一となる。すなわち、ＣＰＵ負荷とネットワーク負荷が均一となる。
＜第２実施形態＞
図１７は、本発明の第２実施形態の構成例を示す図である。図１７に示すように、本発明の第２実施形態は、分散処理装置初期化部５１１とルーティングテーブル格納部５１３とを含む分散処理装置５００である。
分散処理装置５００は、分散連携部５１０とキー保持部５３０とを含む。分散連携部５１０は、分散処理装置初期化部５１１とルーティングテーブル格納部５１３とを含む。
キー保持部５３０は、順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持する。
分散処理装置初期化部５１１は、ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録する。
ルーティングテーブル格納部は、タプルを０以上保持するルーティングテーブルを格納する。
本発明の第２実施形態に係る分散処理装置によってシステムを構築することにより、ＣＰＵ負荷とネットワーク負荷を独立にバランスさせることが可能となる。その理由は、これまで一つのキーが担っていた、イベントデータの送信のための役割と、イベントデータの管理区間を区切るための役割を、二つの各キーの役割として分けたからである。
【実施例】
【０００９】
以降、本発明の実施例を示す。本実施例は、８つの分散処理装置から成る分散処理システムであり、イベントデータのハッシュ値の分布が、図４のようになると仮定する。
図１８は、本発明を適用した分散処理システムの例を示す図である。図１８は、本発明を適用した分散処理システムにおいて、ＣＰＵ負荷とネットワーク負荷をバランスさせた場合の、各分散処理装置のルーティングキー、イベントキー及びルーティングテーブルを示す。
図１８における分散処理装置のブロックの中に記述されている値がルーティングキーであり、さらに括弧で与えられている値がイベントキーである。ルーティングキー及びイベントキーは、それぞれの分散処理装置のキー保持部が保持している。また、各分散処理装置の上部にある表が、ルーティングテーブルである。ルーティングテーブルのサクセッサの項目は、サクセッサのイベントキーを表す。なお、サクセッサのアドレスは、イベントキーと１対１で対応するため、記述を省略している。
ルーティングキーがａである分散処理装置を分散処理装置ａと表記すると、例えば、分散処理装置３１において、開始値３２のサクセッサは分散処理装置６３である。分散処理装置６３のイベントキー３９が、開始値３２とのペアで分散処理装置３１のルーティングテーブルに登録されている。
本実施例では、まず分散処理装置がＣＰＵ負荷とネットワーク負荷を均一にするために、ルーティングキーとイベントキーを変更する手順の例を示す。
図１９は、分散処理装置と、その分散処理装置のサクセッサとの間で行われるＣＰＵ負荷均一処理のフローチャート図である。ＣＰＵ負荷均一処理とは、ＣＰＵ負荷を均一にするため、該分散処理装置のサクセッサとイベントデータ被通知数が等しくなるように、該分散処理装置のイベントキーを変更する処理である。
具体的には、まず、分散処理装置（ｄ）は、分散処理装置（ｄ）のサクセッサへイベントデータ被通知数を送信する（ステップＳ１０１）。
イベントデータ被通知数を受信したサクセッサは、該サクセッサと分散処理装置（ｄ）のイベントデータ被通知数が同数になるような分散処理装置（ｄ）のイベントキーを算出する（ステップＳ１０２）。
次に、サクセッサは、分散処理装置（ｄ）のイベントキーを算出したイベントキーに更新するように、分散処理装置（ｄ）へイベントキー更新要求を送信する（ステップＳ１０３）。
イベントキー更新要求を受信した分散処理装置（ｄ）は、イベントキー更新要求に基づいて自装置が保持するイベントキーを更新する（ステップＳ１０４）。
本実施例では、各分散処理装置は、過去所定時間以内の自装置のイベントデータ被通知数を計測しているものとする。上述した処理を、各分散処理装置が、定期的に実施することにより、各分散処理装置のイベントデータ被通知数は同数に収束することとなる。
図２０は、分散処理装置と、その分散処理装置のサクセッサとの間で行われるネットワーク負荷均一処理のフローチャート図である。ネットワーク負荷均一処理とは、ネットワーク負荷を均一にするための処理である。
具体的には、まず、分散処理装置（ｄ）は、分散処理装置（ｄ）のサクセッサへイベントデータ転送数を送信する（ステップＳ２０１）。
イベントデータ転送数を受信したサクセッサは、該サクセッサと分散処理装置（ｄ）のイベントデータ転送数が同数になるような分散処理装置（ｄ）のルーティングキーを算出する（ステップＳ２０２）。
次に、サクセッサは、分散処理装置（ｄ）のルーティングキーを、算出したルーティングキーに更新するように、分散処理装置（ｄ）へルーティングキー更新要求を送信する（ステップＳ２０３）。
ルーティングキー更新要求を受信した分散処理装置（ｄ）は、ルーティングキー更新要求に基づいて自装置が保持するルーティングキーを更新する（ステップＳ２０４）。
例えば、各分散処理装置は適宜イベントデータ転送数を計測しておく。分散処理装置（ｄ）のイベントデータ転送数が、分散処理装置（ｄ）のサクセッサのイベントデータ転送数よりも多ければ、分散処理装置（ｄ）は、ルーティングキーをより小さい値に更新する。
この更新によって、分散処理装置（ｄ）は、より少ない他の分散処理装置に参照されるようになるため、イベントデータの転送数は少なくなる。なお、ここで、分散処理装置（ｄ）が他の分散処理装置に参照されるとは、他の分散処理装置のルーティングテーブルに分散処理装置（ｄ）のキーやアドレスが登録されている状態を意味している。
一方、上記の更新によって、分散処理装置（ｄ）のサクセッサは、より多くの他の分散処理装置に参照されることとなるため、イベントデータの転送数は多くなる。上述した処理を、各分散処理装置が、定期的に実施することにより、各分散処理装置のイベントデータ転送数は同数に収束することとなる。
ＣＰＵ負荷やネットワーク負荷を均一にするために、分散処理装置がイベントキーやルーティングキーを算出する方法は、ＣＰＵ負荷やネットワーク負荷を均一にすることができれば、どのような方法でも良い。
例えば、分散処理装置は、ＣＰＵ負荷又はイベントデータ転送数（以下、ＣＰＵ負荷等という。）を計測しながら、イベントキー又はルーティングキー（以下、イベントキー等という。）の値を１ずつ減算して適切な値を見つけ出しても良い。
または、例えばＣＰＵ負荷等を半分にしたい場合は、分散処理装置は、単純に分散処理装置のイベントキー等の値を、現在のイベントキー等との値とプレディセッサのイベントキー等の値との間の値にしても良い。
または、例えば分散処理装置のＣＰＵ負荷を２割減らしたいとすると、分散処理装置は、自装置がイベント通知を受けているキーの中で、全体の内の２割を算出してその分が減らせるように、更新するイベントキーを算出しても良い。
さらに、分散処理装置は、ＣＰＵ負荷とネットワーク負荷の両負荷状況を考慮して、更新するイベントキー等を算出しても良い。例えば、分散処理装置は、ＣＰＵ負荷とネットワーク負荷とが反比例の関係になるように、両負荷の比を考慮してイベントキー等を算出しても良い。こうすることで、システム全体のトータルパフォーマンスを向上させることができる。
次にイベントデータを処理すべき分散処理装置に送信する具体的な動作を説明する。
例えば、分散処理装置３１が、イベントキーが１０７であるイベントデータを受信したとする。この場合、分散処理装置３１は、格納しているルーティングテーブルのサクセッサの項目を参照し、１０７までの距離が最も小さいイベントキー１０３に対応する分散処理装置９５宛てに該イベントデータを送信する。分散処理装置９５は、分散処理装置３１から該イベントデータを受信する。
次に、分散処理装置９５が、格納しているルーティングテーブルのサクセッサの項目を参照し、１０７までの距離が最も小さいイベントキー１０５に対応する分散処理装置１２７宛てに該イベントデータを送信する。
その後、分散処理装置１２７は格納しているルーティングテーブルを参照する。分散処理装置１２７は、イベントデータ１０７が分散処理装置１２７のルーティングテーブルのどのイベントキーよりも、自装置のイベントキーである１０５に最も近いと判断する。つまり、分散処理装置１２７は、自装置がイベントキー１０７のプレディセッサであると判断する。
分散処理装置１２７は、自装置１２７のサクセッサである分散処理装置１５９にイベントデータを送信する。その後、分散処理装置１５９が、受信したイベントデータを自装置のアプリケーションに通知することで、イベントデータの送信を完了する。
以上、実施形態及び実施例を参照して本発明を説明したが、本発明は以上の実施形態及び実施例に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で同業者が理解し得る様々な変更をすることができる。
図２１は、上述した第２実施形態に係る分散処理装置５００のハードウェア構成の一例を示すブロック図である。
図２１に示すように、分散処理装置５００を構成する各部は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１と、ネットワーク接続用の通信ＩＦ２（通信インターフェース２）と、メモリ３と、プログラムを格納するハードディスク等の記憶装置４とを含む、コンピュータ装置によって実現される。ただし、分散処理装置５００の構成は、図２１に示すコンピュータ装置に限定されない。
ＣＰＵ１は、オペレーティングシステムを動作させて分散処理装置５００の全体を制御する。また、ＣＰＵは１、例えばドライブ装置などに装着された記録媒体からメモリ３にプログラムやデータを読み出し、これにしたがって各種の処理を実行する。
記録装置４は、例えば光ディスク、フレキシブルディスク、磁気光ディスク、外付けハードディスク、半導体メモリ等であって、コンピュータプログラムをコンピュータ読み取り可能に記録する。記憶装置４は、例えば、ルーティングテーブルを格納するルーティンテーブル格納部でも良い。また、コンピュータプログラムは、通信網に接続されている図示しない外部コンピュータからダウンロードされても良い。
入力装置５は、例えばマウスやキーボード等であって、例えばイベントデータを入力するための装置である。
出力装置６は、例えばディスプレイ等である。
なお、これまでに説明した各実施形態において利用するブロック図は、ハードウェア単位の構成ではなく、機能単位のブロックを示している。これらの機能ブロックはハードウェア及びソフトウェアの任意の組み合わせによって実現される。また、分散処理装置５００の構成部の実現手段は特に限定されない。すなわち、分散処理装置５００は、物理的に結合した一つの装置により実現されても良いし、物理的に分離した二つ以上の装置を有線又は無線で接続し、これら複数の装置により実現されても良い。
本発明のプログラムは、上記の各実施形態で説明した各動作を、コンピュータに実行させるプログラムであれば良い。
以上、各実施の形態および実施例を参照して本発明を説明したが、本発明は上記実施の形態および実施例に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解しえる様々な変更をすることができる。
この出願は、２０１１年３月２４日に出願された日本出願特願２０１１−０６６２０４を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【００１０】
１    ＣＰＵ
２    通信ＩＦ
３    メモリ
４    記憶装置
５    入力装置
６    出力装置
１００、２００、３００、４００、５００  分散処理装置
１１０  分散連携部
１１１  分散処理装置初期化部
１１２  ルーティングテーブル更新部
１１３  ルーティングテーブル格納部
１１４  プレディセッサ記憶部
１１５、２１５  データ転送部
１２０  アプリケーション
１３０  キー保持部
５１１  分散処理装置初期化部
５１３  ルーティングテーブル格納部
【図１】
2012128387.tif 000003
【図２】
2012128387.tif 000004
【図３】
2012128387.tif 000005
【図４】
2012128387.tif 000006
【図５】
2012128387.tif 000007
【図６】
2012128387.tif 000008
【図７】
2012128387.tif 000009
【図８】
2012128387.tif 000010
【図９】
2012128387.tif 000011
【図１０】
2012128387.tif 000012
【図１１】
2012128387.tif 000013
【図１２】
2012128387.tif 000014
【図１３】
2012128387.tif 000015
【図１４】
2012128387.tif 000016
【図１５】
2012128387.tif 000017
【図１６】
2012128387.tif 000018
【図１７】
2012128387.tif 000019
【図１８】
2012128387.tif 000020
【図１９】
2012128387.tif 000021
【図２０】
2012128387.tif 000022
【図２１】
2012128387.tif 000023
【手続補正書】
【提出日】平成25年9月13日(2013.9.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
構造化Ｐ２Ｐネットワークにおいて１つ以上の分散処理装置を含む分散処理システムであって、
前記分散処理装置は、
順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持するキー保持手段と、
前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録する分散処理装置初期化手段と、
前記タプルを保持するルーティングテーブルを格納するルーティングテーブル格納手段と、
を含む分散処理システム。
【請求項２】
前記分散処理装置は、さらに、
外部からイベントキーが入力されたときに、ルーティングテーブルに記憶されている各タプルのイベントキーから、外部から入力されたイベントキーまでの距離が最も小さいイベントキーである転送先イベントキーを求め、
転送先イベントキーに対応するタプルのアドレスに外部イベントキーを送信する、
データ転送手段を含む、
請求項１に記載の分散処理システム。
【請求項３】
前記所定の関係にあるルーティングキーを保持する分散処理装置は、任意のキーkからの距離がdであるキーを(k＋d) mod 2mと定義した場合における、前記ルーティングキーからの距離が2^(j−1)（j=1,2,...,m)であるルーティングキーを開始値として、該開始値からの距離が最も小さいルーティングキーを保持する分散処理装置である、
請求項１に記載の分散処理システム。
【請求項４】
前記分散処理装置は、さらに、
外部からイベントキーが入力されたときに、プレディセッサ記憶手段に記憶されているイベントキーであるプレディセッサイベントキーから、
前記外部から入力されたイベントキーである外部イベントキーまでの距離が、プレディセッサイベントキーから自装置のイベントキーである自イベントキーまでの距離よりも小さい場合に、自装置のアプリケーションに外部イベントキーを入力し、
プレディセッサイベントキーから外部イベントキーまでの距離が、プレディセッサイベントキーから自イベントキーまでの距離よりも大きい場合に、ルーティングテーブルに記憶されている各タプルのイベントキーと、自イベントキーとから、外部イベントキーまでの距離が最も小さいイベントキーである転送先イベントキーを求め、
転送先イベントキーが自イベントキーと一致していれば、自装置のサクセッサに外部イベントキーを送信し、
転送先イベントキーが自イベントキーと一致していなければ、転送先イベントキーに対応するタプルのアドレスに外部イベントキーを送信する、
データ転送手段を含む、
請求項３に記載の分散処理システム。
【請求項５】
前記分散処理装置は、さらにプレディセッサ記憶手段とルーティングテーブル更新手段とを含み、
前記プレディセッサ記憶手段は、
自装置のルーティングキーからの距離が最も大きいルーティングキーを保持する分散処理装置（プレディセッサ）のイベントキーと、アドレスと、を記憶し、
前記ルーティングテーブル更新手段は、
自装置のルーティングキーからの距離が１である値を開始値として、該開始値と、自装置のサクセッサのイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録し、
前記自装置のサクセッサのプレディセッサ記憶手段に記憶されるイベントキーと、アドレスと、を自装置のプレディセッサ記憶手段に記憶し、
前記サクセッサのプレディセッサ記憶手段に自装置のイベントキーと、アドレスと、を記憶し、
前記プレディセッサのルーティングテーブルから、該プレディセッサのルーティングキーからの距離が１である値を開始値とするタプルを求め、該タプルのイベントキーと、アドレスと、を自装置のイベントキーと、アドレスと、に更新する、
請求項１〜４のいずれか１項に記載の分散処理システム。
【請求項６】
前記分散処理装置は、
自装置のサクセッサとイベントデータ被通知数を通知しあうことで、サクセッサとの間でイベントデータ被通知数が均一になるように自装置のルーティングキーを更新し、前記キー保持手段が該更新後のルーティングキーを保持する、
請求項１〜５のいずれか１項に記載の分散処理システム。
【請求項７】
前記分散処理装置は、
自装置のサクセッサとイベントデータ転送数を通知しあうことで、サクセッサとの間でイベントデータ転送数が均一になるように自装置のイベントキーを更新し、前記キー保持手段が該更新後のイベントキーを保持する、
請求項１〜５のいずれか１項に記載の分散処理システム。
【請求項８】
前記分散処理装置は、
所定時間ごとに自装置のサクセッサに、自装置のイベントデータ被通知数を送信し、
イベントデータ被通知数を受信したサクセッサから、
該サクセッサが算出した該サクセッサと自装置のイベントデータ被通知数が同数になるような自装置のイベントキーと、
自装置が現在保持するイベントキーを、前記算出したイベントキーに更新することを求めるイベントキー更新要求と、
を受信した際に、前記イベントキー更新要求に基づいて自装置が保持するイベントキーを更新する、
請求項６に記載の分散処理システム。
【請求項９】
前記分散処理装置は、
所定時間ごとに、自装置のサクセッサに、自装置のイベントデータ転送数を送信し、
イベントデータ転送数を受信したサクセッサから、
該サクセッサが算出した該サクセッサと自装置のイベントデータ転送数が同数になるような自装置のルーティングキーと、
自装置が現在保持するルーティングキーを、前記算出したルーティングキーに更新することを求めるルーティングキー更新要求と、
を受信した際に、前記ルーティングキー更新要求に基づいて自装置が保持するルーティングキーを更新する、
請求項７に記載の分散処理システム。
【請求項１０】
構造化Ｐ２Ｐネットワーク上の分散処理装置であって、
順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持するキー保持手段と、
前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録する分散処理装置初期化手段と、
前記タプルを保持するルーティングテーブルを格納するルーティングテーブル格納手段と、
を含む分散処理装置。
【請求項１１】
外部からイベントキーが入力されたときに、ルーティングテーブルに記憶されている各タプルのイベントキーから、外部から入力されたイベントキーまでの距離が最も小さいイベントキーである転送先イベントキーを求め、
転送先イベントキーに対応するタプルのアドレスに外部イベントキーを送信する、
データ転送手段を、
さらに含む請求項１０に記載の分散処理装置。
【請求項１２】
前記所定の関係にあるルーティングキーを保持する分散処理装置は、任意のキーkからの距離がdであるキーを(k＋d) mod 2mと定義した場合における、前記ルーティングキーからの距離が2^(j−1)（j=1,2,...,m)であるルーティングキーを開始値として、該開始値からの距離が最も小さいルーティングキーを保持する分散処理装置である、
請求項１０に記載の分散処理装置。
【請求項１３】
外部からイベントキーが入力されたときに、プレディセッサ記憶手段に記憶されているイベントキーであるプレディセッサイベントキーから、
前記外部から入力されたイベントキーである外部イベントキーまでの距離が、プレディセッサイベントキーから自装置のイベントキーである自イベントキーまでの距離よりも小さい場合に、自装置のアプリケーションに外部イベントキーを入力し、
プレディセッサイベントキーから外部イベントキーまでの距離が、プレディセッサイベントキーから自イベントキーまでの距離よりも大きい場合に、ルーティングテーブルに記憶されている各タプルのイベントキーと、自イベントキーとから、外部イベントキーまでの距離が最も小さいイベントキーである転送先イベントキーを求め、
転送先イベントキーが自イベントキーと一致していれば、自装置のサクセッサに外部イベントキーを送信し、
転送先イベントキーが自イベントキーと一致していなければ、転送先イベントキーに対応するタプルのアドレスに外部イベントキーを送信する、
データ転送手段を、
さらに含む請求項１２に記載の分散処理装置。
【請求項１４】
構造化Ｐ２Ｐネットワークにおいて１つ以上の分散処理装置を含む分散処理システムにおけるルーティングテーブル作成方法であって、
順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持し、
前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録し、
前記タプルを保持するルーティングテーブルを格納する、
ルーティングテーブル作成方法。
【請求項１５】
構造化Ｐ２Ｐネットワーク上の分散処理装置に、
順序関係が定義されているキー（値）であってデータのルーティングに用いられるルーティングキーと、該ルーティングキーとの関係で順序関係が定義されているキー（値）であってデータの管理に用いられるイベントキーと、を保持し、
前記ルーティングキーと所定の関係にあるルーティングキーを保持する分散処理装置のイベントキーと、アドレスと、を含むタプルをルーティングテーブルに登録し、
前記タプルを保持するルーティングテーブルを格納する、
処理を実行させるプログラム。
【国際調査報告】
2012128387.tif 000024
2012128387.tif 000025
2012128387.tif 000026
2012128387.tif 000027