以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る処理装置の機能構成例を示す図である。第1の実施の形態に係る処理装置10は、ノード1〜4にデータ並列で処理させるデータ5,6の処理を実行させるノードを管理する。データ5,6には、第1識別子が付与されている。第1識別子は、例えばキーとも呼ばれる。
処理装置10は、データに付与された第1識別子に基づいて、そのデータを処理するノードを決定する。そのために処理装置10は、第1マップ11、第2マップ12、第1記録手段13、削除手段14、決定手段15、第2記録手段16、および処理ノード変更手段17を有する。
第1マップ11は、データの第1識別子単位で、そのデータを処理するノードを管理するための管理情報の記憶領域である。第1マップ11には、受信したデータに付与された第1識別子、第1識別子が付与されたデータを処理するノード、および第1識別子が付与された該データの処理に関する負荷情報を対応付けて記憶される。
第2マップ12は、データに付与された第1識別子に対する所定の計算で算出した第2識別子(例えばハッシュ値)単位で、そのデータを処理するノードを管理するための管理情報の記憶領域である。第2マップ12には、第2識別子、所定の計算の結果が第2識別子となる第1識別子が付与されたデータを処理するノードが対応付けて記憶される。また第2マップ12には、第2識別子に対応付けて、受信したデータに付与された第1識別子のうち、計算により第2識別子となった第1識別子と、その第1識別子が付与されたデータの処理に関する負荷情報が記憶される。
第1記録手段13は、受信したデータに付与された第1識別子、その第1識別子が付与されたデータを処理するノード、およびその第1識別子が付与されたデータの処理に関する負荷情報を対応付けて、第1マップ11に記録する。なお負荷情報は、例えば、データの処理の実行後に、そのデータを処理したノードから取得して、第1マップ11に記録される。なお第1マップ11に記録できる第1識別子の数には、所定の閾値が上限となる。第1記録手段13は、第1マップ11に記録された第1識別子の数が閾値に達するまで、第1識別子を第1マップ11に記録する。第1マップ11に記録された第1識別子の数が、閾値に達した後は、第1マップ11から第1識別子が削除されるまで、第1記録手段13は、第1マップ11への第1識別子の記録は行わない。
第1記録手段13は、例えば、第1マップ11に記憶された第1識別子の数が閾値に満たないとき、第2マップ12に記憶された第1識別子から、負荷情報に基づいて第1識別子を選択する。そして第1記録手段13は、選択した第1識別子、第1識別子が付与されたデータを処理するノード、および第1識別子が付与されたデータの処理に関する負荷情報を対応付けて、第1マップ11に記録する。例えば第1記録手段13は、第2マップ12に記憶された第1識別子のうち、負荷情報に示される負荷が大きい方から所定数の第1識別子を選択し、第1マップ11に記録する。
第1記録手段13は、第2マップ12に記憶された第1識別子を選択する際、例えば第2マップ12から、対応付けられた第1識別子の負荷情報に示される負荷の合計が大きい方から所定数の第2識別子を選択する。そして第1記録手段13は、選択した第2識別子に対応づけられた第1識別子の中から、負荷情報に基づいて第1識別子を選択する。
削除手段14は、第1マップ11に記憶された第1識別子の数が閾値に達した後、第1マップ11に記憶された負荷情報に基づいて選択した第1識別子を、第1マップ11から削除する。例えば削除手段14は、第1マップ11に記憶された複数の第1識別子のうち、負荷情報に示される負荷が小さい方から所定数の第1識別子を選択し、その第1識別子を削除する。
決定手段15は、データ5,6の受信に応じ、データ5,6に付与された第1識別子が第1マップ11に記憶されていれば、第1マップ11において該第1識別子に対応付けられたノードに該データを処理させることを決定する。また決定手段15は、第1識別子が第1マップ11に記憶されていなければ、データ5,6に付与された第1識別子に対する所定の計算で算出した第2識別子に対応付けて、第2マップ12に登録されているノードに、データ5,6を処理させることを決定する。そして決定手段15は、データ5,6を、そのデータを処理させると決定したノードに送信する。
第2記録手段16は、第1マップ11から削除した第1識別子と、その第1識別子が付与されたデータの処理に関する負荷情報とを、第1識別子に対する所定の計算で算出した第2識別子に対応付けて、第2マップ12に記録する。
処理ノード変更手段17は、複数のノード間の負荷の差が少なくなるように、第1マップ11において第1識別子に対応付けられたノードと、第2マップ12において第2識別子に対応付けられたノードとを変更する。例えば処理ノード変更手段17は、負荷の大きいノードに対応付けられた第1識別子または第2識別子を選択し、選択した第1識別子または第2識別子に対応するノードを、負荷の少ないノードに変更する。
このような処理装置10によれば、例えばデータ5を受信すると、まず第1マップ11が参照される。図1の例では、データ5の第1識別子「120」は第1マップ11に記憶されており、ノード名「Node 1」のノード2が対応付けられている。そこでデータ5は、ノード2に転送され、ノード2においてデータ5が処理される。また処理装置10がデータ6を受信すると、まず第1マップ11が参照される。図1の例では、データ6の第1識別子「52」は第1マップ11に記憶されていない。そこで第2マップ12が参照される。ここで、第1識別子「52」に所定の計算を行った結果は「0」であるものとする。図1の例では、第2マップ12において、第2識別子「0」には、ノード名「Node 0」のノード1が対応付けられている。そこでデータ6は、ノード1に転送され、ノード1においてデータ6が処理される。
このように第1の実施の形態では、データ並列における各データを処理するノードを管理するための管理情報として、第1マップ11と第2マップ12とを併用している。そのため、受信したデータの第1識別子の数が少ない間は、第1マップ11を用いて、各データを処理するノードがキー単位で管理される。キー単位で管理されることで、ノードに実行させるデータを小さい単位で調整でき、ノード間の負荷の差を抑制できる。
第1識別子の数が増加すると、第1マップ11で管理しきれない分が、第2マップ12で管理される。第2マップ12における第2識別子は、例えばハッシュ値のように、第1識別子よりもデータ長が短い。そのため、生成される可能性のあるすべての第2識別子を第2マップ12に記録したとしても、第1識別子のすべてを個別に管理する場合よりも、第2マップ12のサイズは小さくなる。従って、管理情報のデータ量の肥大化が抑止される。
なお第2識別子は、第1識別子よりもデータ長が短いため、異なる第1識別子の所定の計算の結果、同じ第2識別子となることがある。そこで、例えば第1マップ11から第1識別子を削除する際に、例えば、負荷の少ない方から所定数の第1識別子を削除することで、第1マップ11には、比較的負荷の大きい第1識別子が残され、負荷の少ない第1識別子が、第2マップ12により第2識別子単位で管理される。1つの第2識別子に複数の第1識別子が属し、それらの第1識別子が付与されたデータが同じノードで処理されることになっても、第1識別子それぞれの負荷が少なくてすめば、そのノードの負荷が過大にならずにすむ。特定のノードの負荷が過大になることが抑止されれば、ノード間の負荷の差は小さくなる。
また第1マップ11に空きがあれば、例えば、第2マップ12に第2識別子に対応付けて記録されている第1識別子のうち、負荷の大きい方から所定数の第1識別子が、第1マップ11に記録される。これにより、第2マップ12により第2識別子単位で管理されるようになった第1識別子でも、負荷の高い第1識別子は、第1マップ11に記録して第1識別子単位で管理できる。その結果、1つの第2識別子に複数の第1識別子が属し、それらの第1識別子が付与されたデータの処理の負荷が高いことにより、その第2識別子に対応付けられたノードの負荷が過大になることを抑止できる。
さらに、第2マップ12に記録されていた第1識別子のうち、負荷の大きい方から所定数の第1識別子を第1マップ11に記録するとき、例えば対応付けられた第1識別子の負荷情報に示される負荷の合計が大きい方から所定数の第2識別子が選択される。そして選択され第2識別子に対応づけられた第1識別子の中から、負荷情報に基づいて、第1マップ11に記録する第1識別子が選択される。これにより、ノード間の負荷の均等化が促進される。
なお、第1記録手段13、削除手段14、決定手段15、第2記録手段16、および処理ノード変更手段17は、例えば処理装置10が有するプロセッサにより実現することができる。また、第1マップ11および第2マップ12は、例えば処理装置10が有するメモリにより実現することができる。
図1の例では、ノード1〜4とは別に処理装置10が設けられているが、処理装置10が有する要素の一部または全部を、いずれか1つまたは複数のノード内に設けてもよい。また、図1に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、複合イベント処理(CEP)システムにおいて、多数のデータを分散処理するものである。複合イベント処理では、ビッグデータと呼ばれる膨大な量のデータを処理する場合がある。
図2は、複合イベント処理の一例を示す図である。複合イベント処理システム30は、ビッグデータと呼ばれる膨大な量のデータを処理するコンピュータシステムである。例えば複合イベント処理システム30は、各種機器が有するセンサからデータを取得する(センシングする)。例えば1つの機器から送信されるデータは、ストリームとして複合イベント処理システム30に入力される。
センサを有する機器には、気象衛星、定点カメラ、スマートシティ内の機器、携帯端末、物流センタ内のシステム、健康機器、交通監視システムなどがある。センシング対象のセンサの量が膨大になれば、各センサから複合イベント処理システム30に送信されるデータは、ビッグデータとなる。
複合イベント処理システム30では、データを受信すると、予め用意されたルールを適用し、そのデータの出力元の機器の状態に応じ、ユーザに役立つ情報を抽出する。そして複合イベント処理システム30は、例えばユーザの所有する携帯端末31を制御して、ユーザのナビゲーションを行う。ナビゲーションにより、役立つ情報がユーザに知らされる。
複合イベント処理システム30では、ビッグデータを効率的に処理するために、データ並列処理を行う。
図3は、データ並列処理の一例を示す図である。例えば複合イベント処理システム30は、店舗42が提供するサービスの契約者に関する契約者情報32を保持する。そして複合イベント処理システム30は、契約者それぞれが有する管理対象機器41a,41b,・・・から、契約者ID付きの位置情報を取得する。管理対象機器41a,41b,・・・は、例えば携帯端末である。複合イベント処理システム30では、契約者IDごとの契約者情報32の検索を、並列で処理する。そして複合イベント処理システム30は、例えば、契約者の位置と嗜好とに基づいて、その契約者に合ったクーポンの発行依頼を、店舗42内のサーバに送信する。すると、店舗42内のサーバが、契約者ごとの適切なクーポンを、契約者が所有する管理対象機器41a,41b,・・・宛てに送信する。
複合イベント処理システム30では、このような並列処理が、様々な入力データに応じて実行される。そのため入力データ量が肥大化した場合、効率的に処理するために、複数のノードでデータを処理することになる。
第2の実施の形態の複合イベント処理システム30は、管理対象機器41a,41b,・・・からのデータ入力をイベントとし、そのイベントのキーに基づいて、イベントを複数のノードのいずれかに処理させる。イベントのキーとしては、例えば管理対象機器41a,41b,・・・のIDを用いることができる。管理対象機器41a,41b,・・・のIDをキーとしてイベントの振り分けを行えば、ある管理対象機器が出力したデータを、1つのノードで処理することができる。
なお同じキーを有する複数のイベントは、そのキーに対応する状態情報を記憶するノードで処理される。例えばキーが自動車のIDである場合、キーに対応する状態情報は、その自動車の状態(外部から施錠中か、正しく解錠されたかなど)を示す情報である。この自動車のセンサがエンジン始動操作を検知し、その操作を示すデータを複合イベント処理システム30に送信すると、自動車が外部から施錠中であれば、データに応じたイベント処理により、例えばセキュリティセンタに対して警報が発せられる。他方、自動車が正しく解錠されていれば、データに応じたイベント処理により、自動車の運行開始が記録される。このように、キーに対応する状態情報の内容に応じて、イベントの処理結果が異なる。そのため、同じキーを有するイベントは、そのキーの状態情報を記憶するサーバに転送される。そのキーを有するイベントを処理するサーバを変更する場合、変更先のサーバへ状態情報が送信される。
ここで、すべてのキーについて、どのノードで実行するのかを位置管理テーブルで管理すると、入力されるデータの増加に伴い、位置管理テーブルが肥大化する。例えばキーが32ビットの符号なし整数型(unsigned int)の場合、位置管理テーブルのエントリ数は最大40億個となる。その結果、各ノードのメモリ容量が圧迫される。しかも位置管理テーブル内のエントリ数が多ければ、位置管理テーブルの更新頻度も多くなり、ノードの処理負荷が増大する。
位置管理テーブルの肥大化を抑止するためには、ハッシュ関数を用いることができる。ハッシュ関数を用いる場合、位置管理テーブルには、ハッシュ値と、ハッシュ関数による計算の結果、そのハッシュ値となるキーを有するイベントを処理するノードとの対応関係が登録される。ハッシュ関数を用いることで、位置管理テーブルに登録するエントリ数を抑止できる。ただし、ハッシュ関数を用いてイベントを処理するノードを管理すると、ハッシュ関数によって得られるハッシュ値が不均一になることで、ノードの負荷が不均一になることがある。
第2の実施の形態では、位置管理テーブルの肥大化と、ノードの負荷の不均一化とを抑止するために、キーごとのイベントのノードへの割り当てと、ハッシュ関数を用いたイベントのノードへの割り当てとを併用する。以下、同じハッシュ値が得られるキーの集合をVNodeと呼ぶ。
ハッシュ関数を使ってキー単位の状態を束ねて扱うことで、データ並列性を引き出すことができる。なお第2の実施の形態では、キーごとのイベントのノードへの割り当てを併用するため、データ並列性が十分引き出せるだけのVNodeを設ければよく、それ以上の細分化はしなくてもよい。例えばデータ並列性は利用するノード数の10倍程度もあれば十分である。すなわち、ノードを1,000台利用するならば、VNode数を10,000個用意し、10,000並列を確保できればよい。
なお、キーとノードとの対応関係の管理に求められる要件は、以下の通りである。
第1の要件は、高速性を得るため、イベント転送の度にキーからVNodeを特定できることである。この場合、イベントの1回の転送で目的のノードにたどり着くことが望ましい。
第2の要件は、VNodeマップテーブルの保持に用いるメモリ容量が十分小さいことである。例えばVNodeマップテーブルのエントリ数は、10,000個ぐらいまでに抑えることが望ましい。なお第2の実施の形態では、キーごとの負荷量が管理されるが、使用するメモリ容量の抑制のためには、VNodeと、そのVNodeに属する各キーの負荷量との対応関係は、マップ以外の手段で管理することが望ましい。
第3の要件は、VNodeの属するキーを有するイベントを実行するためのノードの負荷と、キー単位で管理している各キーを有するイベントを実行するためのノードの負荷との差が少ないことである。負荷の差を少なくしておけば、例えば突出して負荷の大きいVNodeが生じることが抑止できる。突出して負荷の大きいVNodeがあると、そのVNodeのイベントを処理するノードの負荷が過大となるため、ノード間の負荷の均一化が図りづらくなる。突出して負荷の大きいVNodeの発生を抑止できれば、ノード間の負荷の均一化が図りやすくなる。
なお複数のVNode間で、所属キー数をなるべく均等にするようにしてもよい。キーごとの負荷に大差がないことが分かっていれば、VNodeの所属キー数を均等にすることで、ノード間の負荷も均等化されることが期待できる。特に各VNodeに属するキー数が不均一になりやすい場合には、所属キー数をなるべく均等にすることが、ノード間の負荷の均等化に有効に作用する。各VNodeに属するキー数が不均一になりやすい場合とは、例えばキーが疎な場合である。キーが疎とは、例えばキーが複数の数字で表されるとき、飛び飛びの数字しかキーとして使用されていないような場合である。高速道路のあるインターチェインジを通過した車両のナンバーをキーとした場合、キーは疎となる。
第4の要件は、キー数が少ないときには、キーをそのまま扱えることである。キーが少ないのであれば、ハッシュ関数を用いずに、キーごとに適切な振り分け先のノードを管理した方が、負荷の均等化を促進できる。キーをそのまま扱えるようにした場合でも、キー数が増加すれば、一部のキーをVNodeで管理するように移行させ、キー数が減少すれば、VNodeで管理していたキーをキー単位に管理するように移行させることが望ましい。キーの管理方法を、キー単位とVNode単位とで相互に移行させる場合でも、少ない処理負荷で移行できることが望ましい。また、VNodeに属するキーに対応するイベントの単位時間当たりの処理数と、キー単位で振り分け先のノードが管理されているキーに対応するイベントの単位時間当たりの処理数との差は、少ないことが望ましい。
第5の要件は、同一VNodeに属するキーであっても同時に実行できることである。
以上の要件を満たすために、第2の実施の形態の複合イベント処理システム30では、以下のようにしてキーとノードとの対応関係を管理する。
・キーのままでノードとの対応をキー用のマップで保持する。
・VNodeについても、ノードとの対応をマップで保持する。
・両マップのサイズに上限を設け、キー用のマップのサイズが上限いっぱいになったら、負荷が軽いキーからVNodeでの管理に以降する。
・どのキーがどのVNodeに入るかは、ハッシュ法などを用いる。
・定期的にVNodeやキー単独の負荷が均一になるように、キー用のマップとVnode用のマップとの間で、キーの入替を行う。
・イベント転送時には、そのキーが単独でノードに割り付けられているかをまず調べ、存在しなければVNodeの担当ノードに転送し、Vnode担当ノードに存在の有無をチェックさせる。
・キーが新規作成の場合には、Vnodeの担当ノード上でキーを新規作成し、キー単独でマップに入れるか、VNodeに入れるかを選択する。
・マップをシステム全体で共有するため、キー単独でマップに入れた場合、マップの変更依頼を、キーとノードとの対応関係を管理するマネージャに送る。
以下、キーごとのイベントのノードへの割り当てと、ハッシュ関数を用いたイベントのノードへの割り当てとを併用した複合イベント処理システム30について、詳細に説明する。
図4は、第2の実施の形態の複合イベント処理システム構成例を示す図である。ネットワーク20を介して管理対象機器41a,41b,・・・とロードバランサ300とが接続されている。管理対象機器41a,41b,・・・は、センサの計測値などのデータを、ネットワーク20を介してロードバランサ300に送信する。
ロードバランサ300には、スイッチ28を介して、複数のノード100,100a,100b,100cと管理ノード200とが接続されている。ロードバランサ300は、管理対象機器41a,41b,・・・から受信したデータを、ラウンドロビンなどの所定のアルゴリズムで、複数のノード100,100a,100b,100cに振り分ける。各データは、処理対象のイベントとして振り分け先のノードに転送される。
複数のノード100,100a,100b,100cは、イベントを処理するノードを管理するための位置管理情報を有する。複数のノード100,100a,100b,100cは、イベントを受信すると、位置管理情報を参照し、そのデータを処理するノードが、自分自身か否かを判断する。イベントを受信したノードは、そのイベントを処理するのが自分自身であれば、そのイベントに応じた処理を実行する。またイベントを受信したノードは、そのイベントを処理するのが自分自身でなければ、そのイベントに応じた処理を実行するノードに、イベントを転送する。
管理ノード200は、負荷が均等化されるようにイベントを処理するノードを決定し、複数のノード100,100a,100b,100cそれぞれの位置管理情報の更新を指示する。複数のノード100,100a,100b,100cそれぞれは、管理ノード200からの指示に従って、位置管理情報を更新する。
なお複数のノード100,100a,100b,100cは、自身が処理するイベントのデータの送信元の管理対象機器の、現在の状態を管理している。複数のノード100,100a,100b,100cは、位置管理情報の更新により、自身が処理してきたイベントを、以後、別のノードに処理させることになった場合、そのイベントの送信元の管理対象機器の状態を示す情報を、そのノードに送信する。
図5は、本実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。ノード100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101がプログラムを実行することで実現する機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
メモリ102は、ノード100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に必要な各種データが格納される。メモリ102としては、例えばRAM(Random Access Memory)などの揮発性の半導体記憶装置が使用される。
バス109に接続されている周辺機器としては、HDD(Hard Disk Drive)103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
HDD103は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103は、ノード100の補助記憶装置として使用される。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、フラッシュメモリなどの不揮発性の半導体記憶装置を使用することもできる。
グラフィック処理装置104には、モニタ21が接続されている。グラフィック処理装置104は、プロセッサ101からの命令に従って、画像をモニタ21の画面に表示させる。モニタ21としては、CRT(Cathode Ray Tube)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード22とマウス23とが接続されている。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をプロセッサ101に送信する。なお、マウス23は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ装置106は、レーザ光などを利用して、光ディスク24に記録されたデータの読み取りを行う。光ディスク24は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク24には、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。
機器接続インタフェース107は、ノード100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置25やメモリリーダライタ26を接続することができる。メモリ装置25は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ26は、メモリカード27へのデータの書き込み、またはメモリカード27からのデータの読み出しを行う装置である。メモリカード27は、カード型の記録媒体である。
ネットワークインタフェース108は、ネットワーク20に接続されている。ネットワークインタフェース108は、ネットワーク20を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。なお、第1の実施の形態に示した処理装置10も、図5に示したノード100と同様のハードウェアにより実現することができる。また他のノード100a,100b,100c、管理ノード200、およびロードバランサ300も、図5に示したノード100と同様のハードウェアにより実現することができる。
ノード100は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態の処理機能を実現する。ノード100に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、ノード100に実行させるプログラムをHDD103に格納しておくことができる。プロセッサ101は、HDD103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。またノード100に実行させるプログラムを、光ディスク24、メモリ装置25、メモリカード27などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、HDD103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
図6は、各ノードの機能の一例を示すブロック図である。ノード100は、通信部110、イベント転送部120、およびイベント処理部130を有する。通信部110は、他のノードとの間でイベントなどの情報の送受信を行う。イベント転送部120は、イベント処理部130で発生したイベントの他のノードへの転送や、受信したイベントのイベント処理部130への転送を行う。イベント処理部130は、受信したイベントを処理する。他のノード100a,100b,100cもノード100と同様に、通信部110a,110b,110c、イベント転送部120a,120b,120c、およびイベント処理部130a,130b,130cを有する。
管理ノード200は、マネージャ210を有する。マネージャ210は、イベントをどのノードに処理させるのかを管理する。例えばマネージャ210は、負荷の重いノードで実行しているイベントを、負荷の軽いノードで実行させるように、イベントのノードへの割り当てを変更する。
次にノード100内の要素間の通信内容について説明する。
図7は、ノード内の要素間の通信例を示す図である。通信部110は、ロードバランサ300または他のノードからイベントまたは負荷情報を受信すると、受信したイベントまたは負荷情報をイベント転送部120に送信する。通信部110は、他のノードから、キーに対応する状態情報を受信すると、その状態情報をイベント処理部130に送信する。通信部110は、管理ノード200から位置変更要求を受信すると、その位置変更要求をイベント転送部120に送信する、通信部110は、管理ノード200から状態移動依頼を受信すると、その状態受信依頼をイベント処理部130に送信する。通信部110は、イベント転送部120からイベントを受信すると、そのイベントの宛先として指定されているノードへ、そのイベントを送信する。通信部110は、イベント転送部120から入替情報を受信すると、その入替情報を管理ノード200に送信する。通信部110は、イベント処理部130から状態移動完了の通知を受信すると、その通知を管理ノード200に送信する。通信部110は、イベント処理部130からキーに対応する状態情報を受信すると、以後、そのキーに対応するイベントを処理するノードへ、状態情報を送信する。
イベント転送部120は、通信部110またはイベント処理部130からイベントを受信すると、そのイベントを処理するノードを判断する。ノード100自身が処理するイベントであれば、イベント転送部120は、受信したイベントをイベント処理部130に送信する。また他のノードが処理するイベントであれば、イベント転送部120は、そのイベントを処理するノードを宛先に指定し、受信したイベントを通信部110に送信する。イベント転送部120は、通信部110から位置変更要求を受信すると、内部に保持している位置管理情報を更新する。イベント転送部120は、通信部110から負荷情報を受信すると、内部に保持している他のノードの負荷情報を更新する。イベント転送部120は、キー単位で管理するイベントと、VNode単位で管理するイベントとを入替えると、入替結果を示す入替情報を通信部110に送信する。
イベント処理部130は、イベント転送部120からイベントを受信すると、そのイベントの処理を実行する。イベントの処理の実行の結果、別のイベントが発生した場合、イベント処理部130は、発生したイベントをイベント転送部120に送信する。イベント処理部130は、イベントの実行により生じたノード100の負荷を示す負荷情報を、イベント転送部120に送信する。イベント処理部130は、キーに対応する状態移動依頼を受信すると、該当する状態情報を通信部110に送信する。
次に、イベント転送部120の機能を、さらに詳細に説明する。
図8は、イベント転送部の機能の一例を示すブロック図である。イベント転送部120は、イベント受信先確認部121、イベント送信先検索部122、および位置管理部123を有する。
イベント受信先確認部121は、通信部110が他のノードなどから受信したイベント(受信イベント)を取得すると、その受信イベントの受信先を確認する。例えばイベント受信先確認部121は、受信イベントのキーを指定した位置読出要求を、位置管理部123に送信する。位置管理部123からは、受信イベントのキーに対応する状態情報を記憶するノードの位置(ノード名やアドレス)が、位置情報として返信される。イベント受信先確認部121は、取得した位置情報が自身のノード100であれば、受信イベントをイベント処理部130に送信する。またイベント受信先確認部121は、取得した位置情報が他のノードであれば、受信イベントを、位置情報に示されるノード宛ての送信イベントとして、通信部110に送信する。
イベント送信先検索部122は、イベント処理部130が発行したイベント(送信イベント)を取得すると、その送信イベントの受信先を確認する。例えばイベント送信先検索部122は、送信イベントのキーを指定した位置読出要求を、位置管理部123に送信する。位置管理部123からは、送信イベントのキーに対応する状態情報を記憶するノードの位置(ノード名やアドレス)が、位置情報として返信される。イベント送信先検索部122は、取得した位置情報が自身のノード100であれば、送信イベントをイベント処理部130に送信する。またイベント送信先検索部122は、取得した位置情報が他のノードであれば、送信イベントを、位置情報に示されるノード宛ての送信イベントとして、通信部110に送信する。
位置管理部123は、イベント受信先確認部121またはイベント送信先検索部122から位置読出要求を受信すると、キー単位またはVNode単位でキーに対応するイベントを処理するノードを関連づけたマップを参照する。そして位置管理部123は、参照したマップに基づいて、位置読出要求で指定されたキーに対応するノードを特定する。そして位置管理部123は、特定したノードを示す位置情報を、イベント受信先確認部121またはイベント送信先検索部122に送信する。また位置管理部123は、通信部110から位置変更要求を受信すると、位置変更要求に応じて、キー単位またはVNode単位でキーに対応するイベントを処理するノードを関連づけたマップを更新する。そして位置管理部123は、マップの更新が完了すると、書込完了の応答を通信部110に送信する。位置管理部123は、キー単位で管理するキーとVNode単位で管理するキーとの入替を実施した場合、入替内容を示す入替情報を通信部110に送信する。さらに位置管理部123は、通信部110またはイベント処理部130から、キーに対応するイベントの処理の負荷情報を受信すると、そのキーに対応付けて負荷情報を記憶する。
次に、位置管理部123の機能を、さらに詳細に説明する。
図9は、位置管理部の機能の一例を示すブロック図である。位置管理部123は、VNodeマップテーブル123a、個別キーマップテーブル123b、表選択部123c、および定期調整部123dを有する。
VNodeマップテーブル123aは、VNodeに属するキーを特定する情報(例えばハッシュ値)に対応付けて、そのキーに対応するイベントを処理するノードが登録されたデータテーブルである。
個別キーマップテーブル123bは、イベントのキーに対応付けて、そのイベントを処理するノードが登録されたデータテーブルである。
表選択部123cは、通信部110から位置変更要求を受信すると、位置変更要求に従ってVNodeマップテーブル123aまたは個別キーマップテーブル123bを更新する。例えば位置変更要求により、あるVNodeに属するキーに対応するイベントを処理するノードの変更が指示された場合を想定する。この場合、表選択部123cは、VNodeマップテーブル123a内の該当VNodeに関するエントリに関する、ノード変更の書込要求を出力する。この書込要求に基づいて、VNodeマップテーブル123a内の該当エントリが更新される。また位置変更要求により、あるキーに対応するイベントを処理するノードの変更が指示された場合、表選択部123cは、個別キーマップテーブル123b内の該当キーに関するエントリに関する、ノード変更の書込要求を出力する。この書込要求に基づいて、個別キーマップテーブル123b内の該当エントリが更新される。書込要求に応じたエントリ更新の書き込みが完了すると、表選択部123cは、通信部110へ書込完了の応答を送信する。
また表選択部123cは、イベント受信先確認部121またはイベント送信先検索部122から位置読出要求を受信すると、位置読出要求で指定されたキーに対応するエントリの、個別キーマップテーブル123bからの読出要求を出力する。個別キーマップテーブル123bからの読出要求では、個別キーマップテーブル123bから、読出要求で指定したキーに対応するノードのノード名が、読出結果として出力される。個別キーマップテーブル123bからノード名が検出できない場合、表選択部123cは、位置読出要求で指定されたキーに対応するエントリの、VNodeマップテーブル123aからの読出要求を出力する。VNodeマップテーブル123aからの読出要求の際には、表選択部123cは、ハッシュ関数によりキーに対応するハッシュ値を計算し、ハッシュ値を指定した読出要求を出力する。すると、VNodeマップテーブル123aから、指定したハッシュ値に対応するVNodeのノード名が出力される。表選択部123cは、位置読出要求に対応する位置情報として、個別キーマップテーブル123bまたはVNodeマップテーブル123aから取得したノード名を出力する。
定期調整部123dは、個別キーマップテーブル123bによりキー単位で管理されているキーと、VNodeマップテーブル123aによりVNode単位で管理されているキーとの入替を、定期的に行う。例えば定期調整部123dは、キーの入替を行う場合、個別キーマップテーブル123bまたはVNodeマップテーブル123aへの読出要求により、各テーブル内のエントリを読み出す。また定期調整部123dは、キーの入替を行う場合、個別キーマップテーブル123bまたはVNodeマップテーブル123aへの書込要求により、個別キーマップテーブル123bまたはVNodeマップテーブル123aの内容を更新する。
さらに定期調整部123dは、キーごとの負荷情報を受信すると、そのキーに対応付けて、負荷情報を個別キーマップテーブル123bとVNodeマップテーブル123aとに登録する。
なお、図6〜図9に示したノード100,100a,100b,100c内の各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図6〜図9に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
次に、各マップテーブルの内容について詳細に説明する。
図10は、VNodeマップテーブルの一例を示す図である。VNodeマップテーブル123aには、ハッシュ値、ノード名、収容キー数、合計CPU負荷、合計メモリ使用量、および個別キー負荷情報の欄が設けられている。VNodeマップテーブル123aには、VNodeごとのエントリが登録されている。
ハッシュ値の欄には、VNodeに属するイベントが有するキーに基づいて、ハッシュ関数の計算によって得られるハッシュ値が設定される。ハッシュ値としては、例えばメルセンヌ数が用いられる。ノード名の欄には、VNodeに属するイベントを実行するノードのノード名が設定される。収容キー数の欄には、VNodeに属するキー(収容キー)の数が設定される。合計CPU負荷の欄には、収容キーを有するイベントの処理を実行することによるCPUへの負荷が設定される。CPUの負荷は、例えばCPUの使用回数で表される。またCPU使用率をCPUの負荷としてもよい。合計メモリ使用量の欄には、収容キーを有するイベントの処理を実行することにより使用されるメモリの合計量が設定される。
個別キー負荷情報の欄には、自ノードでイベントを実行するVNodeに属する各キーの負荷情報(個別キー負荷情報)が設定される。個別キー負荷情報には、例えば、キー値と、そのキーを有するイベントを実行することによるCPU負荷とメモリ使用量とが含まれる。図10の例では、ノード100自身のノード名が「Node 3」である場合であり、ノード名の欄に「Node 3」と設定されているエントリについてのみ、個別キー負荷情報が設定されている。ノード100以外のノードに対応するエントリについては、個別キー負荷情報の欄は空欄である。自ノードで実行するイベントに関するVNodeのエントリにのみ個別キー負荷情報を設定するようにすることで、VNodeマップテーブル123aのサイズを低減することができる。また個別キー負荷情報の欄には、例えば連結リスト形式で個別キー負荷情報が設定される。
なお図10では、分かりやすいようにVNodeマップテーブル123aを表イメージで記載したが、HashMapのような構造であってもよい。
図11は、個別キーマップテーブルの一例を示す図である。個別キーマップテーブル123bには、キー値、ノード名、CPU負荷、およびメモリ使用量の欄が設けられている。個別キーマップテーブル123bには、キー単位で管理されるキーごとのエントリが登録されている。
キー値の欄には、発生したイベントが有していたキーの値(キー値)が設定される。ノード名の欄には、対応するキーを有するイベントの処理を実行するノードのノード名が設定される。CPU負荷の欄には、対応するキーを有するイベントの処理を実行することによるCPU負荷が設定される。メモリ使用量の欄には、対応するキーを有するイベントの処理を実行する際のメモリ使用量が設定される。
なお図11では、分かりやすいように個別キーマップテーブル123bを表イメージで記載したが、HashMapのような構造であってもよい。
以上のような構成のシステムを用いて、データ並列による複合イベント処理が行われる。各データを処理するノードは、VNodeマップテーブル123aと個別キーマップテーブル123bとを用いて管理される。各データを処理するノードの管理に関する処理について詳細に説明する。
複合イベント処理システム30の運用開始前に、VNodeマップテーブル123aに対する初期記憶位置設定処理が行われる。
図12は、初期記憶位置設定処理の手順の一例を示すフローチャートである。
[ステップS101]ノード100の位置管理部123は、VNodeマップテーブル123aに初期値を設定する。例えば位置管理部123は、VNodeマップテーブル123aのハッシュ値の欄に、生成可能なハッシュ値を設定する。また位置管理部123は、VNodeマップテーブル123aのハッシュ値の欄以外の各欄に、0やnullなど初期値を設定する。他のノード100a,100b,100cでも同様の初期値設定処理が行われる。
[ステップS102]管理ノード200のマネージャ210は、生成可能なハッシュ値ごとに、対応するVNodeに属するキーを有するイベントを処理するノードを決定する。例えばマネージャ210は、各ノード100,100a,100b,100cで処理するVNode数が均等になるように、VNodeに属するキーを有するイベントを処理するノードを決定する。そしてマネージャ210は、各ノード100,100a,100b,100cに対して、各VNodeについての、VNodeに属するキーを有するイベントの実行位置のノードを示す位置変更要求を送信する。この位置変更要求には、例えばハッシュ値と、そのハッシュ値が得られるキーを有するイベントを実行するノードのノード名との組が含まれる。例えばノード100に送信された位置変更要求は、通信部110からイベント転送部120に送られる。イベント転送部120では、位置変更要求を位置管理部123が受信する。
[ステップS103]各ノード100,100a,100b,100cのイベント転送部120,120a,120b,120cは、位置書込処理を行う。位置書込処理により、各ノード100,100a,100b,100c内のVNodeマップテーブルに、VNodeのハッシュ値に対応付けて、ノード名が設定される。
このような初期記憶位置設定処理を実施した後、システムの運用が開始される。システムの運用が開始されると、管理対象機器41a,41b,・・・からデータが入力され、入力データを処理するイベントが発生する。発生したイベントは、ロードバランサ300によって、いずれかのノードに転送される。イベントを受信したノードでは、イベント受信処理が行われる。
図13は、イベント受信処理の手順の一例を示すフローチャートである。以下、ノード100がイベントを受信した場合を想定して、イベントの受信処理を説明する。
[ステップS111]通信部110は、受信イベントをイベント転送部120に送信する。
[ステップS112]イベント転送部120では、イベント受信先確認部121が、受信イベントが有するキーを指定して、位置管理部123に位置読出要求を送信する。
[ステップS113]位置管理部123は、指定されたキーに対応する状態情報の位置読出処理を行う。この処理の詳細は後述する(図15参照)。
[ステップS114]イベント受信先確認部121は、位置管理部123から位置情報を受信し、その位置情報のノード名が自ノード(ノード100)か否かを判断する。位置情報のノード名が自ノードであれば、処理がステップS115に進められる。位置情報のノード名が自ノードでなければ、処理がステップS116に進められる。
[ステップS115]イベント受信先確認部121は、位置情報のノード名が自ノードの場合、受信イベントをイベント処理部130に送信し、イベント受信処理を終了する。
[ステップS116]イベント受信先確認部121は、位置情報のノード名が自ノードでない場合、受信イベントを、取得した位置情報のノード名を宛先とする送信イベントに変更し、その送信イベントの送信を、通信部110に依頼する。すると通信部110が、送信イベントを、宛先で指定されたノードに送信する。その後、イベント受信処理が終了する。
イベント処理部130でイベントを実行した場合、他のイベントが発生する場合がある。イベントが発生すると、そのイベントの送信処理が行われる。
図14は、イベント送信処理の手順の一例を示すフローチャートである。
[ステップS121]イベント処理部130は、発生したイベントにキーを付与し、送信イベントとしてイベント転送部120に送信する。
[ステップS122]イベント転送部120では、イベント送信先検索部122が、送信イベントが有するキーを指定して、位置管理部123に位置読出要求を送信する。
[ステップS123]位置管理部123は、指定されたキーに対応する状態情報の位置読出処理を行う。この処理の詳細は後述する(図15参照)。
[ステップS124]イベント送信先検索部122は、位置管理部123から位置情報を受信し、その位置情報のノード名が自ノード(ノード100)か否かを判断する。位置情報のノード名が自ノードであれば、処理がステップS125に進められる。位置情報のノード名が自ノードでなければ、処理がステップS126に進められる。
[ステップS125]イベント送信先検索部122は、位置情報のノード名が自ノードの場合、送信イベントをイベント処理部130に送信し、イベント受信処理を終了する。
[ステップS126]イベント送信先検索部122は、位置情報のノード名が自ノードでない場合、取得した位置情報のノード名を送信イベントの宛先として、その送信イベントの送信を通信部110に依頼する。すると通信部110が、送信イベントを、宛先で指定されたノードに送信する。その後、イベント受信処理が終了する。
次にステップS113またはステップS123で行われる位置読出処理について、詳細に説明する。
図15は、位置読出処理の手順の一例を示すフローチャートである。
[ステップS131]位置管理部123の表選択部123cは、個別キーマップテーブル123bを参照し、位置読出要求で指定されたキーが存在するか否かを判断する。キーが存在していれば、処理がステップS132に進められる。存在していなければ、処理がステップS133に進められる。
[ステップS132]表選択部123cは、位置読出要求で指定されたキーを有するエントリを個別キーマップテーブル123bから抽出し、そのエントリ内のノード名を取得する。そして表選択部123cは、位置読出要求の送信元に、ノード名を位置情報として応答する。その後、位置読出処理が終了する。
[ステップS133]表選択部123cは、該当するキーが存在しない場合、そのキーのハッシュ値を算出する。表選択部123cは、VNodeマップテーブル123a内の、算出したハッシュ値に対応するエントリからノード名を取得する。
[ステップS134]表選択部123cは、取得したノード名が自ノード(ノード100)のノード名かを判断する。自ノードのノード名であれば、処理がステップS136に進められる。自ノードのノード名でなければ、処理がステップS135に進められる。
[ステップS135]表選択部123cは、自ノードのノード名でなければ、位置読出要求の送信元に、取得したノード名を宛先の位置情報として応答する。その後、位置読出処理が終了する。
[ステップS136]表選択部123cは、自ノードのノード名であれば、個別キーマップテーブル123bに空きがあるか否かを判断する。例えば位置管理部123には、個別キーマップテーブル123bの最大エントリ数が設定されている。現在の個別キーマップテーブル123b内のエントリ数が最大エントリ数に満たなければ、空きがあると判断される。空きがある場合、処理がステップS137に進められる。空きがなければ、処理がステップS138に進められる。
[ステップS137]表選択部123cは、キー新規登録の位置書込処理を行う。これにより、個別キーマップテーブル123bの空きエントリに、キー値と自ノードのノード名が記録される。この位置書込処理の詳細は後述する(図18参照)。
[ステップS138]表選択部123cは、位置読出要求の送信元に、自ノードのノード名を宛先の位置情報として応答する。その後、位置読出処理が終了する。
位置読出処理では、VNode単位で管理されていたキーの位置読出要求が出された場合、そのキーを有するイベントを処理するノードが自ノードであり、個別キーマップテーブル123bに空きがあれば、そのキーの管理が、キー単位に移行される。すなわちそのキーに関するキー値とノード名とが、個別キーマップテーブル123bに書き込まれる。これにより、使用されたキーから順に、VNode単位での管理から、キー単位での管理に移行される。
VNode単位での管理とキー単位での管理とは、マネージャ210からの位置変更要求に応じた位置変更処理によっても変更される。例えばマネージャ210は、ノード間の負荷の差が少なくなるように、キーまたはVNodeについて、対応するイベントの処理を実行するノードを変更する。その際、位置変更処理に先だって、各キーに対応する状態情報の移動が行われる。
図16は、状態情報移動処理の手順の一例を示すフローチャートである。
[ステップS141]マネージャ210は、各ノード100,100a,100b,100cから通知された負荷情報に基づいて、状態情報の移動の要否を判断する。例えばマネージャ210は、ノード間の負荷の差が所定値以上になっている場合、状態情報の移動をすると判断する。状態情報を移動する場合、マネージャ210は、負荷が高いノードで処理しているキーまたはVNodeに対応する状態情報を、負荷の低いノードに移動することを決定する。
以下、ノード100aからノード100へ状態情報を移動するものとして、ステップS142〜ステップS147の処理を説明する。
[ステップS142]マネージャ210は、移動対象の状態情報を有するノード100aのイベント処理部130aに、移動する状態情報と移動先のノード100とを指定して、状態移動依頼を送信する。
[ステップS143]ノード100aのイベント処理部130aは、状態移動依頼を受信すると、通信部110aに状態情報を送信し、移動先のノード100への状態情報の送信を依頼する。
[ステップS144]通信部110aは、状態情報をノード100宛てに送信する。
[ステップS145]移動先のノード100では、通信部110が状態情報を受信する。
[ステップS146]状態情報を受信した通信部110は、イベント処理部130へ状態情報を転送する。
[ステップS147]イベント処理部130は、受信した状態情報を保持すると共に、マネージャ210への状態移動完了の通知を、通信部110に送信する。通信部110は、状態移動完了の通知を、マネージャ210に送信する。
[ステップS148]マネージャ210は、状態情報の移動に合わせて、各キーを有するイベントを処理するノードが変更されるように、すべてのノード100,100a,100b,100cに対して、位置変更要求を送信する。
マネージャ210が送信した位置変更要求は、各ノード100,100a,100b,100cで受信される。そして各ノード100,100a,100b,100cそれぞれで、位置変更処理が行われる。以下、ノード100における変更処理を詳細に説明する。
図17は、位置変更処理の手順の一例を示すフローチャートである。
[ステップS151]通信部110は、マネージャ210から位置変更要求を受信する。通信部110は、受信した位置変更要求をイベント転送部120に送信する。
[ステップS152]イベント転送部120内の位置管理部123が、位置書込処理を行う。位置書込処理の詳細は後述する(図18参照)。
[ステップS153]位置管理部123は、位置書込処理が終了すると、書込完了の応答を通信部110へ送信する。通信部110は、書込完了応答をマネージャ210に送信する。
図18は、位置書込処理の手順の一例を示すフローチャートである。
[ステップS161]位置管理部123の表選択部123cは、受信した位置変更要求が、VNodeに関する位置変更要求なのか否かを判断する。VNodeに関する位置変更要求は、特定のVNodeに属するキーを有するイベントを実行するノードの変更要求である。VNodeに関する位置変更要求には、VNodeに属するキーに対応するハッシュ値と、変更先のノードのノード名とが含まれる。VNodeに関する位置変更要求であれば、処理がステップS162に進められる。VNodeに関する位置変更要求でなければ、キーに関する位置の変更要求であると判断され、処理がステップS163に進められる。
なおキーに関する位置変更要求には、個別キーマップテーブル123bからのキーのエントリの削除要求と、キーに対応するノード名の登録要求とがある。キーに関する位置の変更要求には、キーのキー値が含まれる。またキーに関する位置の変更要求が、キーに対応するノード名の登録要求であれば、登録するノード名が位置の変更要求に含まれる。
[ステップS162]VNodeに関する位置変更要求であれば、表選択部123cは、VNodeマップテーブル123aから、位置変更要求に示されたハッシュ値に該当するレコードを検索する。そして表選択部123cは、該当するレコードのノード名を、位置変更要求に示されたノード名に更新する。その後、位置書込処理が終了する。
[ステップS163]表選択部123cは、キーに関する位置変更要求の場合、その位置変更要求が、キーのエントリの削除要求なのか否かを判断する。削除要求であれば、処理がステップS164に進められる。削除要求でなければ、処理がステップS165に進められる。
[ステップS164]表選択部123cは、キーのエントリの削除要求であれば、位置変更要求に示されるキーに対応するエントリを、個別キーマップテーブル123bから検索する。そして表選択部123cは、該当するエントリを削除する。その後、位置書込処理が終了する。
[ステップS165]キーのエントリの削除要求でなければ、表選択部123cは、位置変更要求に示されるキーに対応するエントリが、個別キーマップテーブル123bにあるか否かを判断する。該当するエントリがあれば、処理がステップS166に進められる。該当するエントリがなければ、処理がステップS167に進められる。
[ステップS166]表選択部123cは、個別キーマップテーブル123bから、位置変更要求に示されるキーに対応するエントリを抽出する。そして表選択部123cは、該当エントリのノード名を、位置変更要求に示されるノード名に変更する。その後、位置書込処理が終了する。
[ステップS167]表選択部123cは、位置変更要求に示されるキー値とノード名とを、個別キーマップテーブル123bの空きエントリに書き込む。その後、位置書込処理が終了する。
以上のようにして、キーまたはVNodeに対応するイベントを実行するノードが変更される。ノード間の負荷が減少するように変更されることで、システム内でのノードの負荷が均等化され、システムの運用効率が向上する。
なおキーまたはVNodeによるノードの負荷を適切に判断するため、各ノードにおいて負荷情報が適宜記録される。各ノードは、自ノードの負荷情報と、他ノードの負荷情報とを共に記録する。自ノードの負荷情報については、キーごとの負荷とVNodeごとの負荷とが記録される。他ノードの負荷情報については、VNodeごとの負荷が記録される。以下、負荷情報記録処理について詳細に説明する。
図19は、自ノードの負荷に関する負荷情報記録処理の手順を示すフローチャートである。
[ステップS171]ノード100のイベント処理部130は、定期的に自ノードで処理するイベントのキーごとの負荷を取得する。例えばイベント処理部130は、イベントを処理するプロセスのCPU負荷や、そのプロセスのメモリ使用量をOSから取得する。イベント処理部130は、取得した負荷情報、対応するイベントが有するキーに対応付けて、位置管理部123に送信する。
[ステップS172]位置管理部123は、負荷情報に対応付けられたキーに対応する、個別キーマップテーブル123bのエントリがあるか否かを判断する。該当するエントリがあれば、処理がステップS173に進められる。該当するエントリがなければ、処理がステップS174に進められる。
[ステップS173]位置管理部123は、受信した負荷情報に対応付けられたキーに対応する、個別キーマップテーブル123b内のエントリに、その負荷情報(CPU負荷、メモリ使用量)を記録する。
[ステップS174]位置管理部123は、受信した負荷情報に対応付けられたキーのハッシュ値を計算し、そのハッシュ値に対応するエントリをVNodeマップテーブル123aから検索する。
[ステップS175]位置管理部123は、VNodeマップテーブル123aの該当エントリの個別キー負荷情報に、受信した負荷情報を記録する。
[ステップS176]位置管理部123は、VNodeマップテーブル123aの該当エントリの統計値(合計CPU負荷、合計メモリ使用量)を更新する。
[ステップS177]位置管理部123は、マネージャ210にキーごとの負荷情報を通知する。
このようにして、自ノードの負荷に関する負荷情報が記録される。
図20は、他ノードの負荷に関する負荷情報記録処理の手順の一例を示すフローチャートである。
[ステップS181]位置管理部123は、定期的に、マネージャ210から他ノードのキーごとの負荷情報を取得する。
[ステップS182]位置管理部123は、負荷情報に対応するキーのハッシュ値を計算し、そのハッシュ値に対応するエントリをVNodeマップテーブル123aから検索する。
[ステップS183]位置管理部123は、VNodeマップテーブル123aの該当エントリの統計値(合計CPU負荷、合計メモリ使用量)を更新する。
以上のようにして、位置管理部123は、負荷情報を更新することができる。そして位置管理部123の定期調整部123dは、キー単位で管理するキー(個別管理キー)の入替処理を、定期的に行う。
図21は、個別管理キー入替処理の手順の一例を示すフローチャートである。
[ステップS191]マネージャ210と各ノードが連携し、入替対象のキーの決定処理を行う。入替対象決定処理の詳細は後述する(図22参照)。
以下、VNode単位で管理していたキーをキー単位で管理するようにすることを、個別管理化と呼ぶ。逆に、キー単位で管理していたキーをVNode単位で管理するようにすることを、個別管理解除と呼ぶ。
[ステップS192]マネージャ210は、個別管理解除対象のキーの負荷と、個別管理化対象キーの負荷とを比較する。そしてマネージャ210は、個別管理化対象キーの負荷の方が、個別管理解除対象のキーの負荷よりも大きい場合にのみ、入替を許可する。マネージャ210が入替を許可すると、その旨が、定期調整部123dに通知される。入替が許可されると、処理がステップS193に進められる。すべてのキーの入替が許可されなかった場合、入替処理は終了する。
[ステップS193]各ノードは、決定された入替対象のキーの入替(個別管理化または個別管理解除)を行う。入替処理の詳細は後述する(図23参照)。
図22は、入替対象決定処理の手順の一例を示すフローチャートである。
[ステップS201]各ノード100,100a,100b,100cは、自ノードが処理を実行しているイベントのキーが属するVNodeの負荷情報(CPU使用率、メモリ使用量など)をマネージャ210に通知する。
[ステップS202]マネージャ210は、負荷の大きなVNodeから順に、所定個数分のVNodeを選択し、個別管理化対象のキーの抽出元とする。なお収容キー数の大きなVNodeから順に、所定個数分のVNodeを選択し、個別管理化対象のキーの抽出元としてもよい。収容キー数の大きなVNodeを個別管理化対象のキーの抽出元とすることで、VNode間の収容キー数の均等化を図ることができる。収容キー数でVNodeの選択を行うのであれば、ステップS201の負荷情報の通知は不要となり、処理の効率化が図れる。
マネージャ210は、選択したVNodeに属するキーを有するイベントを処理するノードに対して、そのVNodeからの個別管理化対象のキーの選択を指示する。以下、ノード100に対して指示が出されたものとする。
[ステップS203]ノード100の定期調整部123dは、マネージャ210が選択したVNodeの属するキーを、個別管理化の候補とするキーを選択する。
[ステップS204]定期調整部123dは、候補のキーと、そのキーの負荷情報とを、マネージャ210に通知する。
[ステップS205]マネージャ210は、候補のキーの中から、負荷の重い所定数のキーを個別管理化対象のキーに決定する。
[ステップS206]マネージャ210は、ノード100の個別キーマップテーブル123bにより個別管理しているキーの中から、負荷の軽い所定数のキーを個別管理解除キーに決定する。個別管理化対象のキーの数分の空きエントリが個別キーマップテーブル123b内にあるかどうかを判断する。空きエントリが不足している場合、定期調整部123dは、個別キーマップテーブル123b内の負荷の軽いキーから順に、空きエントリの不足分だけ選択し、個別管理解除対象のキーとする。
図23は、入替処理の手順の一例を示すフローチャートである。
[ステップS211]マネージャ210は、ノード100に対して、個別キーマップテーブル123b内に個別管理化対象のキーの数分の空きエントリを作成するように指示する。このときマネージャ210からノード100に、個別管理解除対象のキーが通知される。
[ステップS212]ノード100の定期調整部123dは、個別管理解除対象のキーのエントリを、個別キーマップテーブル123bから削除することをマネージャ210に通知する。この通知は、ステップS214の後に行ってもよい。
[ステップS213]定期調整部123dは、個別管理解除対象キーの負荷を、VNodeマップテーブル123a内の、そのキーのハッシュ値に対応するエントリの負荷情報に追加する。例えば定期調整部123dは、個別管理解除対象キーのCPU負荷を合計CPU負荷に加算し、メモリ使用量を合計メモリ使用量に加算する。また個別管理解除対象キーのキー値と負荷情報とを、個別キー負荷情報に追加登録する。さらに定期調整部123dは、個別管理解除対象キーの数を、収容キー数に加算する。
[ステップS214]定期調整部123dは、個別管理解除対象キーのエントリを、個別キーマップテーブル123bから削除する。
[ステップS215]マネージャ210は、個別管理化対象キーの個別キーマップテーブル123bへの登録を、ノード100に指示する。
[ステップS216]ノード100の定期調整部123dは、個別管理化対象キーを個別キーマップテーブル123bに登録し、個別管理化対象キーを追加したことをマネージャに通知する。
[ステップS217]定期調整部123dは、個別管理化対象キーの負荷を、VNodeマップテーブル123a内の、そのキーのハッシュ値に対応するエントリの負荷情報に追加する。例えば定期調整部123dは、個別管理化対象キーのCPU負荷を合計CPU負荷から減算し、メモリ使用量を合計メモリ使用量に減算する。また個別管理化対象キーのキー値と負荷情報とを、個別キー負荷情報から削除する。さらに定期調整部123dは、個別管理化対象キーの数を、収容キー数から減算する。
[ステップS218]定期調整部123dは、個別管理化対象キーのエントリを個別キーマップテーブル123bに追加する。
このようにして、キー単位で管理していたキーと、VNode単位で管理していたキーとの管理単位の入替が行われる。この際、負荷の高いVNodeに属していたキーのうち、負荷の高いキーの個別管理化が行われ、キー単位で管理していたキーのうち、負荷の低いキーの個別管理解除が行われる。これにより、各VNodeの負荷の統計量(合計CPU負荷または合計メモリ使用量)と、キー単位で管理している各キーの負荷(CPU負荷またはメモリ使用量)との差が小さくなる。
次に図24、図25を参照し、個別管理するキーの入替例を説明する。
図24は、入替前の状態を示す図である。図24の例では、ハッシュ値「0」のVNodeが、個別管理化するキーの抽出元として選択されたものとする。現在、このVNodeに属するキー数は3である。個別キーマップテーブル123bの最大エントリ数は2エントリである。また、個別キーマップテーブル123bには、現在、2エントリが登録されている。入替の判断に用いる負荷情報としては、メモリ使用量のみを用いるものとする。また入替時に一度に選択するキー数は1つとする。
図24の例では、既に個別管理化するキーの抽出元とするVNodeが選択されているため、選択されたVNodeに属するキー(キー値「3」、「79」、「33」)の中から、負荷の最も高いキーが、個別管理化対象のキーとして選択される。図24の例では、キー値「79」のキーのメモリ使用量が「600」であり、負荷が最も高い。そのためキー値「79」のキーが、個別管理対象のキーとして選択される。
また個別キーマップテーブル123bからは、最も負荷の少ないキーが、個別管理解除対象のキーとして選択される。図24の例では、キー値「52」のキーのメモリ使用量が「10」であり、最も負荷が少ない。そこでキー値「52」のキーが、個別管理解除対象のキーとして選択される。
このとき個別管理化対象のキーの負荷と、個別管理解除対象のキーの負荷とが比較され、個別管理化対象のキーの負荷の方が大きければ、入替が認められる。図24の例では、個別管理化対象のキー(キー値「79」)の負荷は「600」であり、個別管理解除対象のキー(キー値「52」)の負荷「10」よりも大きいため、入替が認められる。
入替が認められると、定期調整部123dからマネージャ210に、キー値「52」のキーを個別管理解除対象キーとすることが通知される。次に、VNodeマップテーブル123aのハッシュ値「0」のエントリの収容キー数が1加算され「4」になる。合計メモリ使用量が10加算され「910」になる。またVNodeマップテーブル123aの個別キー負荷情報に、キー値「52」のキーの負荷情報が追加される。そして個別キーマップテーブル123bから、キー値「52」のキーのエントリを削除される。これにより、個別キーマップテーブル123bに、空きエントリが確保される。
空きエントリが作成されると、定期調整部123dからマネージャ210に、キー値「79」のキーが個別管理化対象のキーとして通知される。次に、VNodeマップテーブル123aのハッシュ値「0」のエントリの収容キー数が1減算され「3」になる。さらに、合計メモリ使用量が「600」減算され「310」になる。VNodeマップテーブル123aの個別キー負荷情報からは、キー値「79」の負荷情報が削除される。そして個別キーマップテーブル123bに、キー値「79」のエントリが追加される。
図25は、入替後の状態を示す図である。図25に示すように、キー単位で管理するキーの入替処理を行ったことで、ハッシュ値「0」のVNodeの負荷が低下し、キー単位で管理されているキーのうち、最も負荷の少ないキーの負荷が増加している。その結果、VNodeの負荷と、キー単位で管理しているキーの負荷との差が少なくなっている。これらの負荷の差が少なくなることで、VNodeに属するキーを有するイベントを処理するノード、またはキー単位で管理しているキーに属するキーを有するイベントを処理するノードを変更する際に、ノード間の負荷の均等化が容易となる。例えば負荷が極端に高いVNodeがあると、そのVNodeに属するキーを有するイベントをどのノードに処理させるようにしても、そのノードは過負荷となってしまう。上記の入替処理を実施すれば、負荷が極端に高いVNodeが生じることを抑止できる。その結果、ノード間の負荷の均等化が促進される。
なお、第2の実施の形態における図12〜図23の処理は、管理ノード200のマネージャ210と各ノード100,100a,100b,100cの要素とが連携して実行しているが、全体をいずれか1つの装置(例えば管理ノード)で実施することもできる。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。