以下に、図面を参照して、本発明にかかる処理プログラム、およびイベント処理方法の実施の形態を詳細に説明する。
(実施の形態にかかるイベント処理方法の一実施例)
図1は、実施の形態にかかるイベント処理方法の一実施例を示す説明図である。情報処理装置100は、並列分散処理システムに含まれる複数のノードのいずれかのノードとして動作することができるコンピュータである。それぞれのノードは、処理対象のデータを処理する処理プログラムを有し、処理対象のデータを処理する。
ここで、並列分散処理システムでは、それぞれのノードが有する処理プログラムを更新し、それぞれのノードが有する処理プログラムに対して機能を追加、削除または更新することが求められる場合がある。
しかしながら、この場合、処理プログラムが更新済みのノードと未更新のノードとが混在し、処理対象のデータが、更新済みの処理プログラムで処理されるか、未更新の処理プログラムで処理されるかが不明確になる。そして、同じタイミングに発生した処理対象データが、更新済みの処理プログラムで処理される場合と、未更新の処理プログラムで処理される場合とが混在し、処理の不整合が発生する。
これに対し、処理の不整合を発生させずに、それぞれのノードが有する処理プログラムを更新する方法として、以下に示す方法1や方法2が考えられる。
方法1は、並列分散処理システムで、処理対象のデータを収集し、それぞれのノードに送信する管理ノードに、処理対象のデータの送信を中断させた状態で、それぞれのノードが有する処理プログラムを更新する方法である。方法1では、具体的には、管理ノードによる送信を中断させ、それぞれのノードの記憶内容を退避し、それぞれのノードが有する処理プログラムを更新し、退避した記憶内容をそれぞれのノードに戻した後、管理ノードによる送信を再開する。
しかしながら、方法1では、管理ノードによる送信を中断させるため、並列分散処理システムが停止し、並列分散処理システムの性能低下を招いてしまう。また、並列分散処理システムに含まれるノードの数が増大するほど、並列分散処理システムが停止する時間が増大してしまう傾向がある。そして、処理のタイムアウトが発生しやすくなる。
方法2は、並列分散処理システムに、現在運用中のノードを含む旧系統と、新たな処理プログラムを有するノードを含む新系統との2系統を用意することにより、見かけ上それぞれのノードが有する処理プログラムを更新する方法である。方法2では、具体的には、管理ノードによる送信を中断させ、旧系統のノードの記憶内容を新系統のノードに複製し、宛先を新系統のノードに切り替えて管理ノードによる送信を再開する。
しかしながら、方法2でも、方法1と同様に、管理ノードによる送信を中断させるため、並列分散処理システムが停止し、並列分散処理システムの性能低下を招いてしまう。そして、処理のタイムアウトが発生しやすくなる。また、並列分散処理システムを実現するために用意するノードの数の増大化を招き、並列分散処理システムのコストの増大化を招いてしまう。
このように、方法1や方法2のいずれの方法でも、それぞれのノードが有する処理プログラムを更新する際、並列分散処理システムが停止してしまい、処理のタイムアウトが発生しやすくなるという問題がある。このため、処理の不整合を発生させず、かつ、並列分散処理システムを停止させず、それぞれのノードが有する処理プログラムを更新可能にすることが望まれる。
そこで、本実施の形態では、制御メッセージに応じてイベント種別に対応するプラグインを追加、削除または更新可能にし、イベント発生時のイベントメッセージに応じてイベント種別に対応するプラグインを実行可能にするイベント処理方法について説明する。これによれば、イベント処理方法は、処理の不整合を発生させず、かつ、並列分散処理システムを停止させず、それぞれのノードが有する処理プログラムを更新可能にすることができる。
図1において、情報処理装置100は、処理プログラムを有する。処理プログラムは、少なくとも、プラグイン130を呼び出すことができるメインプログラムを含む。処理プログラムは、さらに、プラグイン130を含むことができる。処理プログラムは、プラグイン130を追加、削除または更新されることにより、更新される。
(1-1)情報処理装置100は、制御メッセージ120を受信する。制御メッセージ120は、少なくとも、プラグイン130の実行条件になるイベントの種別を示す情報、および当該プラグイン130に関する情報を対応付けて表す。制御メッセージ120は、さらに、イベントの発生元を識別する情報を表してもよい。プラグイン130に関する情報は、例えば、プラグイン130を記憶した記憶領域のアドレスである。イベントは、例えば、人や物の状態変化である。状態は、例えば、速度である。
情報処理装置100は、制御メッセージ120を受信した場合、受信した制御メッセージ120から特定されるイベントの種別を示す情報とプラグイン130とを対応付けて記憶部110に記憶する。情報処理装置100は、例えば、制御メッセージ120に含まれるアドレスが示す記憶領域から、プラグイン130を読み出す。そして、情報処理装置100は、制御メッセージ120に含まれるイベントの種別を示す情報と、読み出したプラグイン130とを対応付けて記憶部110に記憶する。情報処理装置100は、具体的には、図5~図7に後述する動作例1に示すような動作を行う。
(1-2)情報処理装置100は、イベントメッセージ140を受信する。イベントメッセージ140は、少なくともイベントの種別を示す情報を表す。イベントメッセージ140は、さらに、イベントの内容を示す情報を表してもよい。イベントの内容を示す情報は、例えば、人や物の状態変化があったタイミングにおける、人や物の状態を示す情報である。イベントメッセージ140は、さらに、イベントの発生元を識別する情報を表してもよい。
情報処理装置100は、イベントメッセージ140を受信した場合、受信したイベントメッセージ140から特定されるイベントの種別を示す情報に対応付けて記憶部110に記憶されたプラグイン130を実行する。情報処理装置100は、例えば、プラグイン130を実行し、イベントメッセージ140に含まれる人や物の状態を示す情報を処理する。情報処理装置100は、具体的には、図5~図7に後述する動作例1に示すような動作を行う。
これにより、情報処理装置100は、制御メッセージ120を受信したことに応じて処理プログラムに新たなプラグイン130を追加し、処理プログラムを更新することができる。また、情報処理装置100は、イベントメッセージ140と制御メッセージ120とを受信順に扱うことができる。このため、並列分散処理システムに含まれる複数のノードのそれぞれのノードとして動作する情報処理装置100に、一斉に制御メッセージ120が送信されれば、処理の不整合が発生しないようにすることができる。
また、情報処理装置100は、処理プログラムを更新する際もイベントメッセージ140を受信可能である。このため、情報処理装置100は、並列分散処理システムが停止しないようにすることができ、処理のタイムアウトの発生を抑制することができる。また、情報処理装置100は、並列分散処理システムに含まれるノードの数を増大させずに、処理プログラムの更新を実現することができる。
ここでは、情報処理装置100が、プラグイン130を追加するための制御メッセージ120を受信したことに応じて、処理プログラムにプラグイン130を追加する場合について説明したが、これに限らない。例えば、プラグイン130を削除するための制御メッセージ120が用意され、情報処理装置100が、プラグイン130を削除するための制御メッセージ120を受信したことに応じて、処理プログラムに含まれるプラグイン130を削除する場合があってもよい。
ここでは、情報処理装置100が、制御メッセージ120を受信したタイミングで、プラグイン130を記憶部110に記憶して有効化する場合について説明したが、これに限らない。例えば、プラグイン130が有効な期間が設定され、情報処理装置100が、プラグイン130が有効な期間になったタイミングで、プラグイン130を有効化する場合があってもよい。具体的には、情報処理装置100が、図15および図16に後述する動作例2に示すような動作を行う場合があってもよい。
この場合、情報処理装置100が、有効な期間が過ぎたプラグイン130を削除する場合があってもよい。また、情報処理装置100が、さらに、有効な期間が過ぎた後、特定の同期メッセージを受信するまで、プラグイン130の削除を待機する場合があってもよい。具体的には、情報処理装置100が、図21および図22に後述する動作例3に示すような動作を行う場合があってもよい。
ここでは、情報処理装置100が、制御メッセージ120を受信したタイミングで、プラグイン130を記憶部110に記憶して有効化する場合について説明したが、これに限らない。例えば、情報処理装置100が、制御メッセージ120を受信した後、特定の同期メッセージを受信したタイミングで、プラグイン130を有効化する場合があってもよい。具体的には、情報処理装置100が、図26および図27に後述する動作例4に示すような動作を行う場合があってもよい。
ここでは、情報処理装置100が、特定の記憶領域からプラグイン130を読み出す場合について説明したが、これに限らない。例えば、プラグイン130に関する情報が、プラグイン130を符号化した情報であり、情報処理装置100が、プラグイン130を符号化した情報から、プラグイン130を復号する場合があってもよい。具体的には、情報処理装置100が、図35~図37に後述する動作例5に示すような動作、または、図42~図44に後述する動作例6に示すような動作を行う場合があってもよい。
(並列分散処理システム200の一例)
次に、図2を用いて、図1に示した情報処理装置100を適用した、並列分散処理システム200の一例について説明する。
図2は、並列分散処理システム200の一例を示す説明図である。図2において、並列分散処理システム200は、分散ノード201-1~201-Nと、管理ノード202と、端末装置203と、開発ノード204とを含む。以下の説明では、分散ノード201-1~201-Nを区別せずに単に「分散ノード201」と表記する場合がある。
並列分散処理システム200において、分散ノード201と、管理ノード202と、端末装置203と、開発ノード204とは、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
分散ノード201は、図1に示した情報処理装置100として動作するコンピュータである。分散ノード201は、制御メッセージを受信すると、制御メッセージに応じてプラグインを追加、削除または更新する。分散ノード201は、イベントメッセージを受信すると、イベントメッセージに応じてプラグインを実行する。分散ノード201は、例えば、サーバ、PC(Personal Computer)などである。
管理ノード202は、端末装置203からイベントメッセージを収集し、分散ノード201に送信するコンピュータである。また、管理ノード202は、制御メッセージを分散ノード201に送信する。管理ノード202は、例えば、端末装置203からイベントメッセージを収集し、入力バッファに蓄積する。また、管理ノード202は、例えば、開発ノード204からの制御メッセージ生成の指示に基づいて制御メッセージを生成し、入力バッファに蓄積する。そして、管理ノード202は、例えば、入力バッファに蓄積されたイベントメッセージおよび制御メッセージを、FIFO(First In First Out)形式で分散ノード201に送信する。管理ノード202は、例えば、サーバ、PCなどである。
端末装置203は、イベントの発生元の事物に対応するコンピュータである。端末装置203は、例えば、人に保持される装置である。端末装置203は、例えば、移動体に搭載された装置である。移動体は、例えば、車である。端末装置203は、イベントの発生に応じてイベントメッセージを生成し、管理ノード202に送信する。端末装置203は、例えば、PC、タブレット端末、スマートフォン、ウェアラブル端末などである。
開発ノード204は、制御メッセージ生成の指示を管理ノード202に送信するコンピュータである。開発ノード204は、例えば、分散ノード201に対してプラグインの追加、削除または更新をするときに、管理ノード202へ制御メッセージ生成の指示を送信する。開発ノード204は、例えば、サーバ、PCなどである。
ここでは、管理ノード202が、分散ノード201とは異なる装置である場合について説明したが、これに限らない。例えば、管理ノード202が、いずれかの分散ノード201と一体である場合があってもよい。また、例えば、管理ノード202が、開発ノード204と一体である場合があってもよい。
ここでは、分散ノード201と管理ノード202と端末装置203と開発ノード204とが、ネットワーク210を介して接続される場合について説明したが、これに限らない。例えば、分散ノード201と管理ノード202と開発ノード204とを接続するネットワークと、管理ノード202と端末装置203とを接続するネットワークとが異なる場合があってもよい。
(分散ノード201のハードウェア構成例)
次に、図3を用いて、分散ノード201のハードウェア構成例について説明する。
図3は、分散ノード201のハードウェア構成例を示すブロック図である。図3において、分散ノード201は、CPU(Central Processing Unit)301と、メモリ302と、ネットワークI/F(Interface)303と、記録媒体I/F304と、記録媒体305とを有する。また、各構成部は、バス300によってそれぞれ接続される。
ここで、CPU301は、分散ノード201の全体の制御を司る。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることで、コーディングされている処理をCPU301に実行させる。
ネットワークI/F303は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、ネットワークI/F303は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F303には、例えば、モデムやLANアダプタなどを採用することができる。
記録媒体I/F304は、CPU301の制御に従って記録媒体305に対するデータのリード/ライトを制御する。記録媒体I/F304は、例えば、ディスクドライブ、SSD(Solid State Drive)、USB(Universal Serial Bus)ポートなどである。記録媒体305は、記録媒体I/F304の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体305は、例えば、ディスク、半導体メモリ、USBメモリなどである。記録媒体305は、分散ノード201から着脱可能であってもよい。
分散ノード201は、上述した構成部のほか、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、分散ノード201は、記録媒体I/F304や記録媒体305を複数有していてもよい。また、分散ノード201は、記録媒体I/F304や記録媒体305を有していなくてもよい。
(管理ノード202のハードウェア構成例)
管理ノード202のハードウェア構成例は、図3に示した分散ノード201のハードウェア構成例と同様であるため、説明を省略する。
(端末装置203のハードウェア構成例)
端末装置203のハードウェア構成例は、図3に示した分散ノード201のハードウェア構成例と同様であるため、説明を省略する。端末装置203は、さらに、センサ装置を有してもよい。
センサ装置は、例えば、端末装置203の状態を検出する。センサ装置は、具体的には、端末装置203の位置、動き、および向きのうち少なくともいずれかを検出する。センサ装置は、具体的には、加速度センサ、地磁気センサ、光センサ、振動センサなどの少なくともいずれかにより実現される。センサ装置は、GPS(Global Positioning System)受信機により実現され、端末装置203のGPS座標を検出してもよい。
センサ装置は、例えば、生体情報を取得してもよい。センサ装置は、例えば、生体情報として、体温、脈拍、心拍、呼吸などに関する情報を取得する。センサ装置は、例えば、生体情報として、指紋、静脈、顔貌、声紋、掌形、網膜、虹彩などに関する情報を取得してもよい。センサ装置は、例えば、画像情報を取得してもよい。
(開発ノード204のハードウェア構成例)
開発ノード204のハードウェア構成例は、図3に示した分散ノード201のハードウェア構成例と同様であるため、説明を省略する。
(情報処理装置100の機能的構成例)
次に、図4を用いて、情報処理装置100の機能的構成例について説明する。
図4は、情報処理装置100の機能的構成例を示すブロック図である。情報処理装置100は、記憶部400と、取得部401と、更新部402と、実行部403と、出力部404とを含む。
記憶部400は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域によって実現される。以下では、記憶部400が、情報処理装置100に含まれる場合について説明するが、これに限らない。例えば、記憶部400が、情報処理装置100とは異なる装置に含まれ、記憶部400の記憶内容が情報処理装置100から参照可能である場合があってもよい。
取得部401~出力部404は、制御部の一例として機能する。取得部401~出力部404は、具体的には、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶されたプログラムをCPU301に実行させることにより、または、ネットワークI/F303により、その機能を実現する。各機能部の処理結果は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶される。
記憶部400は、各機能部の処理において参照され、または更新される各種情報を記憶する。記憶部400は、例えば、プラグインを記憶する。プラグインは、メインプログラムから呼出可能なサブプログラムである。記憶部400は、具体的には、イベントの種別を示す情報と、プラグインとを対応付けて記憶する。イベントは、例えば、事物の状態変化である。種別は、事物の何の状態が変化したかを示す。これにより、記憶部400は、イベントの種別を示す情報に対応するプラグインを実行可能にすることができる。
ここで、プラグインは、例えば、実行形式データで記憶される。また、プラグインは、符号化して記憶されてもよい。また、プラグインは、プラグインの置き場所を示す情報として記憶されてもよい。置き場所は、例えば、情報処理装置100の記憶領域である。置き場所は、例えば、情報処理装置100とは異なる装置の記憶領域であってもよい。
記憶部400は、具体的には、イベントの発生元を識別する情報と、イベントの種別を示す情報と、プラグインとを対応付けて記憶してもよい。イベントの発生元は、特定の事物である。特定の事物は、例えば、人や自動車などである。これにより、記憶部400は、イベントの発生元を識別する情報ごとに、イベントの種別を示す情報に対応するプラグインを実行可能にすることができる。
記憶部400は、具体的には、イベントの発生元を識別する情報と、イベントの種別を示す情報と、プラグインと、当該プラグインが有効な期間を対応付けて記憶してもよい。有効な期間は、プラグインが実行可能な期間である。これにより、記憶部400は、プラグインが有効な期間を特定可能にすることができる。
記憶部400は、さらに、プラグインを、プラグインを符号化した情報から算出されるダイジェスト値と対応付けて記憶してもよい。ダイジェスト値は、例えば、ハッシュ値である。プラグインを符号化した情報が、ダイジェスト値として用いられてもよい。これにより、記憶部400は、プラグインを符号化した情報を復号しなくても、当該プラグインを取得可能にすることができる。
取得部401は、各機能部の処理に用いられる各種情報を取得し、各機能部に出力する。取得部401は、例えば、各機能部の処理に用いられる各種情報を記憶部400から取得し、各機能部に出力してもよい。取得部401は、例えば、各機能部の処理に用いられる各種情報を、情報処理装置100とは異なる装置から取得し、各機能部に出力してもよい。
取得部401は、第1制御メッセージを受信する。第1制御メッセージは、少なくとも、追加するプラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す。第1制御メッセージは、さらに、イベントの発生元を識別する情報を表してもよい。プラグインに関する情報は、例えば、プラグインを記憶した記憶領域のアドレスである。プラグインに関する情報は、例えば、プラグインを符号化した情報であってもよい。イベントは、例えば、人や物の状態変化である。第1制御メッセージは、さらに、プラグインが有効な期間を示す情報を表してもよい。第1制御メッセージは、例えば、管理ノード202から情報処理装置100として動作する分散ノード201に一斉に送信される。
取得部401は、第2制御メッセージを受信する。第2制御メッセージは、少なくとも、削除するプラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す。第2制御メッセージは、さらに、イベントの発生元を識別する情報を表してもよい。第2制御メッセージは、例えば、管理ノード202から情報処理装置100として動作する分散ノード201に一斉に送信される。
取得部401は、イベントの種別を示す情報を表すイベントメッセージを受信する。イベントメッセージは、少なくともイベントの種別を示す情報を表す。イベントメッセージは、さらに、イベントの内容を示す情報を表してもよい。イベントの内容を示す情報は、例えば、人や物の状態変化があったタイミングにおける、人や物の状態を示す情報である。人や物の状態を示す情報は、例えば、端末装置203が有するセンサ装置が検出した情報に基づく情報である。イベントメッセージは、さらに、イベントの発生元を識別する情報を表してもよい。イベントメッセージは、さらに、イベントが発生した時点を示す情報を表してもよい。
取得部401は、プラグインが有効な期間を変更する第3制御メッセージを受信してもよい。第3制御メッセージは、少なくとも、有効な期間を変更するプラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す。第3制御メッセージは、さらに、イベントの発生元を識別する情報を表してもよい。
取得部401は、プラグインを更新する第4制御メッセージを受信してもよい。第4制御メッセージは、例えば、第1制御メッセージと第2制御メッセージとを統合したようなメッセージである。第4制御メッセージは、少なくとも、更新対象であり削除されるプラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報、更新により追加される新しいプラグインに関する情報を対応付けて表す。第4制御メッセージは、さらに、イベントの発生元を識別する情報を表してもよい。
また、第4制御メッセージは、例えば、第1制御メッセージと第3制御メッセージとを統合したようなメッセージであってもよい。第4制御メッセージは、少なくとも、有効な期間を変更することで削除されるプラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報、更新により追加される新しいプラグインに関する情報を対応付けて表す。第4制御メッセージは、さらに、イベントの発生元を識別する情報を表してもよい。
取得部401は、定期的に発行される同期メッセージを受信する。同期メッセージは、例えば、バリアメッセージである。バリアメッセージは、記憶部400の記憶内容をバックアップする指示を表す。バリアメッセージは、具体的には、分散チェックポイントによる障害復旧のためのバックアップの指示を表す。バックアップは、具体的には、チェックポイントとして外部記憶装置に保存することである。バリアメッセージは、例えば、管理ノード202から送信される。
更新部402は、プラグインを記憶部400に記憶する。
更新部402は、例えば、第1制御メッセージを受信した場合、受信した第1制御メッセージから特定されるイベントの種別を示す情報とプラグインとを対応付けて記憶部400に記憶する。これにより、更新部402は、第1制御メッセージを受信したことに応じて処理プログラムに新たなプラグインを追加することができ、処理プログラムを更新することができる。
更新部402は、例えば、第1制御メッセージを受信した場合、受信した第1制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグインとを対応付けて記憶部400に記憶してもよい。更新部402は、具体的には、図5~図7に後述する動作例1に示すような動作を行う。これにより、更新部402は、イベントの発生元ごとに異なるプラグインを記憶することができる。
更新部402は、例えば、受信した第1制御メッセージから特定される、イベントの発生元を識別する情報と、イベントの種別を示す情報と、プラグインと、当該プラグインが有効な期間を対応付けて記憶部400に記憶してもよい。更新部402は、具体的には、図15および図16に後述する動作例2に示すような動作を行う。これにより、更新部402は、処理の不整合を防止可能なようにプラグインを記憶することができる。
更新部402は、第1制御メッセージを受信した場合、定期的に発行される同期メッセージを受信するまで待機してもよい。更新部402は、同期メッセージを受信し、記憶部400の記憶内容をバックアップする。バックアップは、具体的には、チェックポイントとして外部記憶装置に保存することである。更新部402は、バックアップした後に、受信した第1制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグインとを対応付けて記憶部400に記憶する。更新部402は、具体的には、図26および図27に後述する動作例4に示すような動作を行う。これにより、更新部402は、バックアップを正常に実施可能にすることができる。
更新部402は、例えば、第1制御メッセージを受信した場合、受信した第1制御メッセージに含まれるプラグインを符号化した情報から、当該プラグインを復号してもよい。更新部402は、受信した第1制御メッセージに含まれるイベントの発生元を識別する情報とイベントの種別を示す情報と復号したプラグインとを対応付けて記憶部400に記憶する。更新部402は、具体的には、図35~図37に後述する動作例5に示すような動作を行う。これにより、更新部402は、プラグイン取得によるアクセス集中を回避することができる。
更新部402は、例えば、第1制御メッセージを受信した場合、受信した第1制御メッセージに含まれるプラグインを符号化した情報から算出されるダイジェスト値が記憶部400に記憶されていなければ、当該プラグインを復号してもよい。更新部402は、復号したプラグインを、当該ダイジェスト値と対応付けて記憶部400に記憶する。更新部402は、具体的には、図42~図44に後述する動作例6に示すような動作を行う。これにより、更新部402は、今後同じプラグインを符号化した情報を受信した際に、復号済みのプラグインを取得し再利用可能にすることができる。
更新部402は、例えば、第1制御メッセージを受信した場合、受信した第1制御メッセージに含まれるプラグインを符号化した情報から算出されるダイジェスト値が記憶部400に記憶されていれば、記憶部400から当該プラグインを取得してもよい。更新部402は、具体的には、図42~図44に後述する動作例6に示すような動作を行う。これにより、更新部402は、復号にかかる負担の低減化を図ることができる。
更新部402は、プラグインを記憶部400から削除する。
更新部402は、例えば、第2制御メッセージを受信した場合、受信した第2制御メッセージから特定されるイベントの種別を示す情報に対応付けて記憶部400に記憶されたプラグインを削除する。これにより、更新部402は、処理プログラムからプラグインを削除することができ、処理プログラムを更新することができる。
更新部402は、例えば、第2制御メッセージを受信した場合、受信した第2制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部400に記憶されたプラグインを削除してもよい。これにより、更新部402は、特定のイベントの発生元に対応するプラグインを選択的に削除することができ、処理プログラムを更新することができる。
更新部402は、例えば、第2制御メッセージを受信した場合、受信した第2制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部400に記憶されたプラグインを特定してもよい。更新部402は、特定したプラグインが、第2制御メッセージから特定されるプラグインと一致すれば、当該プラグインを削除する。更新部402は、具体的には、図5~図7に後述する動作例1に示すような動作を行う。これにより、更新部402は、処理プログラムからプラグインを削除することができ、処理プログラムを更新することができる。また、更新部402は、イベントの発生元とイベントの種別との同じ組み合わせに対応するプラグインが複数あっても、いずれかのプラグインを選択的に削除することができる。
更新部402は、例えば、受信したイベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部400に記憶されたプラグインが有効な期間を特定してもよい。更新部402は、特定した期間より、イベントメッセージから特定されるイベントが発生した時点が後であれば、当該プラグインを削除する。更新部402は、具体的には、図15および図16に後述する動作例2に示すような動作を行う。これにより、更新部402は、処理プログラムからプラグインを削除することができ、処理プログラムを更新することができる。
更新部402は、同期メッセージを受信した場合、記憶部400の記憶内容をバックアップした後、記憶部400に記憶されたプラグインが有効な期間を特定してもよい。更新部402は、特定した期間より、最後に受信したイベントメッセージから特定されるイベントが発生した時点が後であれば、当該プラグインを削除する。更新部402は、具体的には、図21および図22に後述する動作例3に示すような動作を行う。これにより、更新部402は、バックアップを正常に実施可能にすることができる。
更新部402は、例えば、第2制御メッセージを受信した場合、同期メッセージを受信するまで待機してもよい。更新部402は、同期メッセージを受信し、記憶部400の記憶内容をバックアップする。更新部402は、バックアップした後に、受信した第2制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部400に記憶されたプラグインを特定する。更新部402は、特定したプラグインが、第2制御メッセージから特定されるプラグインと一致すれば、当該プラグインを削除する。更新部402は、具体的には、図26および図27に後述する動作例4に示すような動作を行う。これにより、更新部402は、処理の不整合を防止することができる。
更新部402は、プラグインが有効な期間を変更する第3制御メッセージを受信した場合、プラグインが有効な期間を変更してもよい。更新部402は、例えば、第3制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部400に記憶されたプラグインが有効な期間を変更する。これにより、更新部402は、プラグインが有効な期間を更新することができる。
更新部402は、プラグインを更新する第4制御メッセージを受信した場合、プラグインを更新してもよい。更新部402は、例えば、第1制御メッセージに応じたプラグインの追加と、第2制御メッセージに応じたプラグインの削除とを組み合わせることにより、プラグインの更新を実現する。これにより、更新部402は、プラグインを更新することができ、処理プログラムを更新することができる。
更新部402は、例えば、第1制御メッセージに応じたプラグインの追加と、第3制御メッセージに応じたプラグインが有効な期間の変更によるプラグインの削除とを組み合わせることにより、プラグインの更新を実現してもよい。これにより、更新部402は、プラグインを更新することができ、処理プログラムを更新することができる。
実行部403は、プラグインを実行する。
実行部403は、例えば、イベントメッセージを受信した場合、受信したイベントメッセージから特定されるイベントの種別を示す情報に対応付けて記憶部400に記憶されたプラグインを実行する。これにより、実行部403は、イベントメッセージを処理することができる。
実行部403は、例えば、イベントメッセージを受信した場合、受信したイベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部400に記憶されたプラグインを実行する。実行部403は、具体的には、図5~図7に後述する動作例1に示すような動作を行う。これにより、実行部403は、イベントの発生元ごとに、イベントメッセージの処理内容を変更することができる。
実行部403は、例えば、受信したイベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部400に記憶されたプラグインが有効な期間を特定してもよい。実行部403は、特定した期間に、イベントメッセージから特定されるイベントが発生した時点が含まれれば、当該プラグインを実行する。実行部403は、具体的には、図15および図16に後述する動作例2に示すような動作を行う。これにより、実行部403は、処理の不整合を防止することができる。
出力部404は、プラグインの実行結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F303による外部装置への送信、または、メモリ302や記録媒体305などの記憶領域への記憶である。これにより、出力部404は、プラグインの実行結果を利用可能にすることができる。
出力部404は、各機能部の処理結果を出力してもよい。これにより、出力部404は、各機能部の処理結果を利用者に通知可能にし、情報処理装置100の管理や運用、例えば、情報処理装置100の設定値の更新などを支援することができ、情報処理装置100の利便性の向上を図ることができる。
(並列分散処理システム200の動作例1)
次に、図5~図7を用いて、並列分散処理システム200の動作例1について説明する。まず、図5の説明に移行し、動作例1における並列分散処理システム200の動作の流れについて説明する。
図5は、動作例1における並列分散処理システム200の動作の流れを示す説明図である。動作例1において、管理ノード202は、イベントメッセージと同じ経路で、制御メッセージを分散ノード201に送信する。
管理ノード202は、具体的には、イベントメッセージを受け付けると、入力バッファに追加する。また、管理ノード202は、具体的には、それぞれの分散ノード201に宛てた制御メッセージを送信し始めてから送信し終えるまでの間に、イベントメッセージが混在して送信されないように、制御メッセージを纏めて入力バッファに追加する。管理ノード202は、入力バッファの格納順に、イベントメッセージや制御メッセージを、分散ノード201に送信する。
分散ノード201は、イベントメッセージと制御メッセージとを、受信順に処理する。分散ノード201は、例えば、制御メッセージを受信すると、制御メッセージに応じてプラグインを追加、削除または更新する。分散ノード201は、例えば、イベントメッセージを受信すると、イベントメッセージに応じてプラグインを実行する。これにより、分散ノード201は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。
また、並列分散処理システム200は、それぞれの分散ノード201に一斉に制御メッセージが送信されるようにして、処理の不整合が発生しないようにすることができる。並列分散処理システム200は、例えば、制御メッセージより前に送信されるイベントメッセージが、一律で、更新前の処理プログラムによって処理されるようにすることができる。一方で、並列分散処理システム200は、例えば、制御メッセージより後に送信されるイベントメッセージが、一律で、更新後の処理プログラムによって処理されるようにすることができる。
また、分散ノード201は、処理プログラムを更新する際もイベントメッセージを受信可能である。並列分散処理システム200は、それぞれの分散ノード201に制御メッセージを送信した後、イベントメッセージの送信を停止せずに、続けてイベントメッセージを送信することができる。このため、並列分散処理システム200は、停止せずに処理プログラムを動的に更新することができ、処理のタイムアウトの発生を抑制することができる。また、並列分散処理システム200は、分散ノード201の数を増大させずに、処理プログラムの更新を実現することができる。
次に、図6の説明に移行し、動作例1における各種メッセージの一例について説明した後、図7の説明に移行し、動作例1における各種メッセージを受信する場合についての分散ノード201の具体的な機能的構成例について説明する。
図6は、動作例1における各種メッセージの一例を示す説明図である。動作例1において、並列分散処理システム200は、例えば、イベントメッセージ601、プラグインを追加する制御メッセージ602、プラグインを削除する制御メッセージ603、プラグインを更新する制御メッセージ604を利用する。
イベントメッセージ601は、IDと、時刻と、種別と、1以上のステートとのフィールドを有する。ステートは、ステート名とステート内容との組み合わせである。IDのフィールドには、イベントの発生元の事物を識別する情報としてIDが設定される。時刻のフィールドには、イベントの発生時刻が設定される。種別のフィールドには、メッセージの種別として「イベント」が設定される。
ステートのフィールドには、事物について発生したイベントに関する情報が設定される。ステートのフィールドには、例えば、ステート名と、ステート内容とが設定される。ステート名は、イベントの種別を示す情報である。ステート名は、具体的には、事物に関する何の状態が変化したイベントであるかを示す。状態は、例えば、速度である。ステート内容は、イベントの内容を示す情報である。ステート内容は、具体的には、事物の状態を示す特徴量である。特徴量は、速度の値である。
プラグインを追加する制御メッセージ602は、IDと、時刻と、種別と、対象ステート名と、追加するプラグインの置き場所についての情報とのフィールドを有する。IDのフィールドには、イベントの発生元の事物を識別する情報としてIDが設定される。時刻のフィールドには、制御メッセージの生成時刻が設定される。種別のフィールドには、メッセージの種別として「プラグイン追加」が設定される。
対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。追加するプラグインの置き場所についての情報のフィールドには、プラグインの実行形式データであるプラグインデータが記憶された記憶領域のアドレスが設定される。
プラグインを削除する制御メッセージ603は、IDと、時刻と、種別と、対象ステート名と、削除するプラグインの置き場所についての情報とのフィールドを有する。IDのフィールドには、イベントの発生元の事物を識別する情報としてIDが設定される。時刻のフィールドには、制御メッセージの生成時刻が設定される。種別のフィールドには、メッセージの種別として「プラグイン削除」が設定される。
対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。削除するプラグインの置き場所についての情報のフィールドには、プラグインの実行形式データであるプラグインデータが記憶された記憶領域のアドレスが設定される。
プラグインを更新する制御メッセージ604は、IDと、時刻と、種別と、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報とのフィールドを有する。IDのフィールドには、イベントの発生元の事物を識別する情報としてIDが設定される。時刻のフィールドには、制御メッセージの生成時刻が設定される。種別のフィールドには、メッセージの種別として「プラグイン更新」が設定される。
対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。更新対象のプラグインの置き場所についての情報のフィールドには、更新により削除されるプラグインの実行形式データであるプラグインデータが記憶された記憶領域のアドレスが設定される。新しいプラグインの置き場所についての情報のフィールドには、更新により追加されるプラグインの実行形式データであるプラグインデータが記憶された記憶領域のアドレスが設定される。
図7は、動作例1における分散ノード201の具体的な機能的構成例を示す説明図である。図7に示すように、分散ノード201は、仮想オブジェクトテーブル721のリスト720を有する。仮想オブジェクトテーブル721は、例えば、図3に示した分散ノード201のメモリ302や記録媒体305などの記憶領域により実現される。
仮想オブジェクトテーブル721は、IDのフィールドを有する。仮想オブジェクトテーブル721は、ステート名と、ステート内容とのフィールドを対応付けて有する。仮想オブジェクトテーブル721は、各フィールドに情報を設定することにより、レコードが記憶される。
IDのフィールドには、イベントの発生元の事物を識別する情報としてIDが設定される。ステート名のフィールドには、イベントの種別を示す情報としてステート名が設定される。ステート内容のフィールドには、イベントの内容を示す情報としてステート内容が設定される。
図7に示すように、分散ノード201は、プラグイン管理テーブル711のリスト710を有する。プラグイン管理テーブル711は、例えば、図3に示した分散ノード201のメモリ302や記録媒体305などの記憶領域により実現される。
プラグイン管理テーブル711は、IDのフィールドを有する。プラグイン管理テーブル711は、さらに、対象ステート名と、プラグインデータとのフィールドを対応付けて有する。プラグイン管理テーブル711は、各フィールドに情報を設定することにより、レコードが記憶される。以下の説明では、対象ステート名とプラグインデータとを合わせて「プラグイン設定情報」と表記する場合がある。
IDのフィールドには、イベントの発生元の事物を識別する情報としてIDが設定される。対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。プラグインデータのフィールドには、プラグインの実行形式データであるプラグインデータが設定される。
図7に示すように、分散ノード201は、メッセージ判別部701と、制御メッセージパーサ部702と、プラグイン管理部703と、イベントメッセージパーサ部704と、ステート管理部705と、プラグイン実行部706とを有する。
メッセージ判別部701は、イベントメッセージ601、プラグインを追加する制御メッセージ602、プラグインを削除する制御メッセージ603、プラグインを更新する制御メッセージ604のいずれかのメッセージの入力を受け付ける。メッセージ判別部701は、入力されたメッセージの種別を判別し、制御メッセージパーサ部702またはイベントメッセージパーサ部704に引き渡す。
制御メッセージパーサ部702は、プラグインを追加する制御メッセージ602、プラグインを削除する制御メッセージ603、プラグインを更新する制御メッセージ604を解釈する。制御メッセージパーサ部702は、例えば、プラグインを追加する制御メッセージ602から、IDと、対象ステート名と、追加するプラグインの置き場所についての情報とを抽出し、プラグイン管理部703に引き渡す。
制御メッセージパーサ部702は、例えば、プラグインを削除する制御メッセージ603から、IDと、対象ステート名と、削除するプラグインの置き場所についての情報とを抽出し、プラグイン管理部703に引き渡す。制御メッセージパーサ部702は、例えば、プラグインを更新する制御メッセージ604から、IDと、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報とを抽出する。制御メッセージパーサ部702は、抽出した情報を、プラグイン管理部703に引き渡す。
プラグイン管理部703は、制御メッセージパーサ部702から引き渡された情報に基づいて、プラグイン管理テーブル711を更新する。プラグイン管理部703は、例えば、IDと、対象ステート名と、追加するプラグインの置き場所についての情報とを受け付ける。プラグイン管理部703は、受け付けたIDに対応するプラグイン管理テーブル711を特定する。プラグイン管理部703は、追加するプラグインの置き場所についての情報に基づいて、追加するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部703は、特定したプラグイン管理テーブル711に、受け付けた対象ステート名と、取得したプラグインデータとを対応付けて追加する。
プラグイン管理部703は、例えば、IDと、対象ステート名と、削除するプラグインの置き場所についての情報とを受け付ける。プラグイン管理部703は、受け付けたIDに対応するプラグイン管理テーブル711を特定する。プラグイン管理部703は、削除するプラグインの置き場所についての情報に基づいて、削除するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部703は、特定したプラグイン管理テーブル711に、受け付けた対象ステート名に対応付けて、取得したプラグインデータと一致するプラグインデータがあれば、当該プラグインデータを削除する。
プラグイン管理部703は、例えば、IDと、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報とを受け付ける。プラグイン管理部703は、受け付けたIDに対応するプラグイン管理テーブル711を特定する。プラグイン管理部703は、更新対象のプラグインの置き場所についての情報に基づいて、更新対象であり削除されるプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部703は、新しいプラグインの置き場所についての情報に基づいて、新しいプラグインの実行形式データであるプラグインデータを取得する。
プラグイン管理部703は、特定したプラグイン管理テーブル711に、受け付けた対象ステート名に対応付けて、更新対象であり削除されるプラグインデータと一致するプラグインデータがあれば、当該プラグインデータを削除する。プラグイン管理部703は、特定したプラグイン管理テーブル711に、受け付けた対象ステート名と、取得した新しいプラグインデータとを対応付けて追加する。
イベントメッセージパーサ部704は、イベントメッセージ601を解釈し、IDと、1以上のステートを抽出し、ステート管理部705に引き渡す。ステート管理部705は、IDと、1以上のステートとを受け付ける。ステート管理部705は、受け付けたIDに対応する仮想オブジェクトテーブル721を特定する。ステート管理部705は、特定した仮想オブジェクトテーブル721を、受け付けた1以上のステートで更新する。ステート管理部705は、いずれかのステートのステート内容が変更された場合、IDおよび当該ステートのステート名を含む変更通知を、プラグイン実行部706に引き渡す。
プラグイン実行部706は、変更通知に含まれるIDに対応するプラグイン管理テーブル711を特定する。プラグイン実行部706は、変更通知に含まれるステート名で、特定したプラグイン管理テーブル711のうちの対象ステート名を検索する。プラグイン実行部706は、検索した対象ステート名に対応付けられたプラグインデータを実行する。プラグイン実行部706は、対象ステート名が検索できなければ、プラグインデータを実行しない。
これにより、分散ノード201は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。また、並列分散処理システム200は、それぞれの分散ノード201に一斉に制御メッセージが送信されるようにして、処理の不整合が発生しないようにすることができる。並列分散処理システム200は、例えば、制御メッセージより前に送信されるイベントメッセージが、一律で、更新前の処理プログラムによって処理されるようにすることができる。一方で、並列分散処理システム200は、例えば、制御メッセージより後に送信されるイベントメッセージが、一律で、更新後の処理プログラムによって処理されるようにすることができる。
また、分散ノード201は、処理プログラムを更新する際もイベントメッセージを受信可能である。並列分散処理システム200は、それぞれの分散ノード201に制御メッセージを送信した後、イベントメッセージの送信を停止せずに、続けてイベントメッセージを送信することができる。このため、並列分散処理システム200は、停止せずに処理プログラムを動的に更新することができ、処理のタイムアウトの発生を抑制することができる。また、並列分散処理システム200は、分散ノード201の数を増大させずに、処理プログラムの更新を実現することができる。また、管理ノード202は、イベントメッセージの送信を中断しなくてよいため、入力バッファに要する記憶領域のサイズの低減化を図ることができる。
(動作例1における全体処理手順)
次に、図8を用いて、分散ノード201が実行する、動作例1における全体処理手順の一例について説明する。全体処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図8は、動作例1における全体処理手順の一例を示すフローチャートである。図8において、分散ノード201は、メッセージの到着まで待機する(ステップS801)。そして、分散ノード201は、ステップS802の処理に移行する。
ステップS802では、分散ノード201は、処理待ちのメッセージがあるか否かを判定する(ステップS802)。ここで、処理待ちのメッセージがない場合(ステップS802:No)、分散ノード201は、ステップS801の処理に戻る。一方で、処理待ちのメッセージがある場合(ステップS802:Yes)、分散ノード201は、ステップS803の処理に移行する。
ステップS803では、分散ノード201は、処理待ちのメッセージを1つ取り出す(ステップS803)。
次に、分散ノード201は、取り出した処理対象のメッセージが制御メッセージであるか否かを判定する(ステップS804)。ここで、制御メッセージではない場合(ステップS804:No)、分散ノード201は、ステップS805の処理に移行する。一方で、制御メッセージである場合(ステップS804:Yes)、分散ノード201は、ステップS806の処理に移行する。
ステップS805では、分散ノード201は、図9に後述するイベントメッセージ処理を実行する(ステップS805)。そして、分散ノード201は、ステップS802の処理に戻る。
ステップS806では、分散ノード201は、図11に後述する制御系イベント処理を実行する(ステップS806)。そして、分散ノード201は、ステップS802の処理に戻る。
(動作例1におけるイベントメッセージ処理手順)
次に、図9を用いて、分散ノード201が実行する、動作例1におけるイベントメッセージ処理手順の一例について説明する。イベントメッセージ処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図9は、動作例1におけるイベントメッセージ処理手順の一例を示すフローチャートである。図9において、分散ノード201は、仮想オブジェクトテーブル721のリスト720のうちの仮想オブジェクトテーブル721を選択する(ステップS901)。
次に、分散ノード201は、選択した仮想オブジェクトテーブル721のIDが、取り出したイベントメッセージのIDと一致するか否かを判定する(ステップS902)。ここで、一致する場合(ステップS902:Yes)、分散ノード201は、ステップS906の処理に移行する。一方で、一致しない場合(ステップS902:No)、分散ノード201は、ステップS903の処理に移行する。
ステップS903では、分散ノード201は、仮想オブジェクトテーブル721のリスト720のうちのすべての仮想オブジェクトテーブル721を選択したか否かを判定する(ステップS903)。ここで、未選択の仮想オブジェクトテーブル721がある場合(ステップS903:No)、分散ノード201は、ステップS901の処理に戻る。一方で、すべての仮想オブジェクトテーブル721を選択している場合(ステップS903:Yes)、分散ノード201は、ステップS904の処理に移行する。
ステップS904では、分散ノード201は、新しい仮想オブジェクトテーブル721を生成し、仮想オブジェクトテーブル721のリスト720に登録する(ステップS904)。次に、分散ノード201は、登録した仮想オブジェクトテーブル721のIDに、イベントメッセージのIDを設定する(ステップS905)。そして、分散ノード201は、ステップS906の処理に移行する。
ステップS906では、分散ノード201は、イベントメッセージのうちのステート名を選択する(ステップS906)。次に、分散ノード201は、仮想オブジェクトテーブル721のうちのステート名を選択する(ステップS907)。
そして、分散ノード201は、イベントメッセージのうちのステート名と、仮想オブジェクトテーブル721のうちのステート名とが一致するか否かを判定する(ステップS908)。一致しない場合(ステップS908:No)、分散ノード201は、ステップS909の処理に移行する。一方で、一致する場合(ステップS908:Yes)、分散ノード201は、ステップS911の処理に移行する。
ステップS909では、分散ノード201は、仮想オブジェクトテーブル721のうちのすべてのステート名を選択したか否かを判定する(ステップS909)。ここで、未選択のステート名がある場合(ステップS909:No)、分散ノード201は、ステップS907の処理に戻る。一方で、すべてのステート名を選択している場合(ステップS909:Yes)、分散ノード201は、ステップS910の処理に移行する。
ステップS910では、分散ノード201は、仮想オブジェクトテーブル721に、イベントメッセージのうちのステート名とステート内容とを対応付けて追加する(ステップS910)。そして、分散ノード201は、ステップS913の処理に移行する。
ステップS911では、分散ノード201は、イベントメッセージのうちのステート内容と、仮想オブジェクトテーブル721のうちのステート内容とが一致するか否かを判定する(ステップS911)。ここで、一致しない場合(ステップS911:No)、分散ノード201は、ステップS912の処理に移行する。一方で、一致する場合(ステップS911:Yes)、分散ノード201は、ステップS914の処理に移行する。
ステップS912では、分散ノード201は、イベントメッセージのうちのステート内容で、仮想オブジェクトテーブル721のうちのステート内容を更新する(ステップS912)。そして、分散ノード201は、ステップS913の処理に移行する。
ステップS913では、分散ノード201は、ステート内容に対して、図10に後述するプラグイン処理を実行する(ステップS913)。そして、分散ノード201は、ステップS914の処理に移行する。
ステップS914では、分散ノード201は、イベントメッセージのうちのすべてのステート名を選択したか否かを判定する(ステップS914)。ここで、未選択のステート名がある場合(ステップS914:No)、分散ノード201は、ステップS906の処理に戻る。一方で、すべてのステート名を選択している場合(ステップS914:Yes)、分散ノード201は、イベントメッセージ処理を終了する。
(動作例1におけるプラグイン処理手順)
次に、図10を用いて、分散ノード201が実行する、動作例1におけるプラグイン処理手順の一例について説明する。プラグイン処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図10は、動作例1におけるプラグイン処理手順の一例を示すフローチャートである。図10において、分散ノード201は、プラグイン管理テーブル711のリスト710のうちのプラグイン管理テーブル711を選択する(ステップS1001)。
次に、分散ノード201は、選択したプラグイン管理テーブル711のIDが、取り出したイベントメッセージのIDと一致するか否かを判定する(ステップS1002)。ここで、一致しない場合(ステップS1002:No)、分散ノード201は、ステップS1003の処理に移行する。一方で、一致する場合(ステップS1002:Yes)、分散ノード201は、ステップS1004の処理に移行する。
ステップS1003では、分散ノード201は、プラグイン管理テーブル711のリスト710のうちのすべてのプラグイン管理テーブル711を選択したか否かを判定する(ステップS1003)。ここで、未選択のプラグイン管理テーブル711がある場合(ステップS1003:No)、分散ノード201は、ステップS1001の処理に戻る。一方で、すべてのプラグイン管理テーブル711を選択している場合(ステップS1003:Yes)、分散ノード201は、プラグイン処理を終了する。
ステップS1004では、分散ノード201は、プラグイン管理テーブル711のうちのプラグイン設定情報を選択する(ステップS1004)。
次に、分散ノード201は、イベントメッセージのステート名とプラグイン設定情報のステート名とが一致するか否かを判定する(ステップS1005)。ここで、一致する場合(ステップS1005:Yes)、分散ノード201は、ステップS1006の処理に移行する。一方で、一致しない場合(ステップS1005:No)、分散ノード201は、ステップS1007の処理に移行する。
ステップS1006では、分散ノード201は、プラグインを実行する(ステップS1006)。次に、分散ノード201は、ステップS1007の処理に移行する。
ステップS1007では、分散ノード201は、プラグイン管理テーブル711のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS1007)。ここで、未選択のプラグイン設定情報がある場合(ステップS1007:No)、分散ノード201は、ステップS1004の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS1007:Yes)、分散ノード201は、プラグイン処理を終了する。
(動作例1における制御系イベント処理手順)
次に、図11を用いて、分散ノード201が実行する、動作例1における制御系イベント処理手順の一例について説明する。制御系イベント処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図11は、動作例1における制御系イベント処理手順の一例を示すフローチャートである。図11において、分散ノード201は、制御メッセージがプラグイン追加を表すか否かを判定する(ステップS1101)。ここで、プラグイン追加を表す場合(ステップS1101:Yes)、分散ノード201は、ステップS1102の処理に移行する。一方で、プラグイン追加を表さない場合(ステップS1101:No)、分散ノード201は、ステップS1103の処理に移行する。
ステップS1102では、分散ノード201は、図12に後述するプラグイン追加処理を実行する(ステップS1102)。そして、分散ノード201は、制御系イベント処理を終了する。
ステップS1103では、分散ノード201は、制御メッセージがプラグイン削除を表すか否かを判定する(ステップS1103)。ここで、プラグイン削除を表す場合(ステップS1103:Yes)、分散ノード201は、ステップS1104の処理に移行する。一方で、プラグイン削除を表さない場合(ステップS1103:No)、分散ノード201は、ステップS1105の処理に移行する。
ステップS1104では、分散ノード201は、図13に後述するプラグイン削除処理を実行する(ステップS1104)。そして、分散ノード201は、制御系イベント処理を終了する。
ステップS1105では、分散ノード201は、制御メッセージがプラグイン更新を表すか否かを判定する(ステップS1105)。ここで、プラグイン更新を表す場合(ステップS1105:Yes)、分散ノード201は、ステップS1106の処理に移行する。一方で、プラグイン更新を表さない場合(ステップS1105:No)、分散ノード201は、制御系イベント処理を終了する。
ステップS1106では、分散ノード201は、図14に後述するプラグイン更新処理を実行する(ステップS1106)。そして、分散ノード201は、制御系イベント処理を終了する。
(動作例1におけるプラグイン追加処理手順)
次に、図12を用いて、分散ノード201が実行する、動作例1におけるプラグイン追加処理手順の一例について説明する。プラグイン追加処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図12は、動作例1におけるプラグイン追加処理手順の一例を示すフローチャートである。図12において、分散ノード201は、制御メッセージに含まれる追加するプラグインに関する情報に基づいて、プラグインの実行形式データを取得する(ステップS1201)。次に、分散ノード201は、ステップS1202の処理に移行する。
ステップS1202では、分散ノード201は、プラグイン管理テーブル711のリスト710のうちのプラグイン管理テーブル711を選択する(ステップS1202)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル711のIDとが一致するか否かを判定する(ステップS1203)。ここで、一致する場合(ステップS1203:Yes)、分散ノード201は、ステップS1204の処理に移行する。一方で、一致しない場合(ステップS1203:No)、分散ノード201は、ステップS1205の処理に移行する。
ステップS1204では、分散ノード201は、プラグイン管理テーブル711のプラグイン設定情報に、制御メッセージに対応する情報を追加する(ステップS1204)。そして、分散ノード201は、ステップS1208の処理に移行する。
ステップS1205では、分散ノード201は、プラグイン管理テーブル711のリスト710のうちのすべてのプラグイン管理テーブル711を選択したか否かを判定する(ステップS1205)。ここで、未選択のプラグイン管理テーブル711がある場合(ステップS1205:No)、分散ノード201は、ステップS1202の処理に戻る。一方で、すべてのプラグイン管理テーブル711を選択している場合(ステップS1205:Yes)、分散ノード201は、ステップS1206の処理に移行する。
ステップS1206では、分散ノード201は、新しいプラグイン管理テーブル711を生成し、プラグイン管理テーブル711のリスト710に登録する(ステップS1206)。次に、分散ノード201は、生成したプラグイン管理テーブル711のIDに制御メッセージのIDを設定する(ステップS1207)。そして、分散ノード201は、ステップS1208の処理に移行する。
ステップS1208では、分散ノード201は、プラグイン管理テーブル711のプラグイン設定情報に、制御メッセージに対応する情報を追加する(ステップS1208)。そして、分散ノード201は、プラグイン追加処理を終了する。
(動作例1におけるプラグイン削除処理手順)
次に、図13を用いて、分散ノード201が実行する、動作例1におけるプラグイン削除処理手順の一例について説明する。プラグイン削除処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図13は、動作例1におけるプラグイン削除処理手順の一例を示すフローチャートである。図13において、分散ノード201は、制御メッセージに含まれる削除するプラグインに関する情報に基づいて、プラグインの実行形式データを取得する(ステップS1301)。次に、分散ノード201は、ステップS1302の処理に移行する。
ステップS1302では、分散ノード201は、プラグイン管理テーブル711のリスト710のうちのプラグイン管理テーブル711を選択する(ステップS1302)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル711のIDとが一致するか否かを判定する(ステップS1303)。ここで、一致しない場合(ステップS1303:No)、分散ノード201は、ステップS1304の処理に移行する。一方で、一致する場合(ステップS1303:Yes)、分散ノード201は、ステップS1305の処理に移行する。
ステップS1304では、分散ノード201は、プラグイン管理テーブル711のリスト710のうちすべてのプラグイン管理テーブル711を選択したか否かを判定する(ステップS1304)。ここで、未選択のプラグイン管理テーブル711がある場合(ステップS1304:No)、分散ノード201は、ステップS1302の処理に戻る。一方で、すべてのプラグイン管理テーブル711を選択している場合(ステップS1304:Yes)、分散ノード201は、プラグイン削除処理を終了する。
ステップS1305では、分散ノード201は、プラグイン管理テーブル711のうちのプラグイン設定情報を選択する(ステップS1305)。
次に、分散ノード201は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する(ステップS1306)。ここで、一致しない場合(ステップS1306:No)、分散ノード201は、ステップS1309の処理に移行する。一方で、一致する場合(ステップS1306:Yes)、分散ノード201は、ステップS1307の処理に移行する。
ステップS1307では、分散ノード201は、削除するプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する(ステップS1307)。ここで、一致しない場合(ステップS1307:No)、分散ノード201は、ステップS1309の処理に移行する。一方で、一致する場合(ステップS1307:Yes)、分散ノード201は、ステップS1308の処理に移行する。
ステップS1308では、分散ノード201は、プラグイン設定情報を削除する(ステップS1308)。そして、分散ノード201は、ステップS1309の処理に移行する。
ステップS1309では、分散ノード201は、プラグイン管理テーブル711のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS1309)。ここで、未選択のプラグイン設定情報がある場合(ステップS1309:No)、分散ノード201は、ステップS1305の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS1309:Yes)、分散ノード201は、プラグイン削除処理を終了する。
(動作例1におけるプラグイン更新処理手順)
次に、図14を用いて、分散ノード201が実行する、動作例1におけるプラグイン更新処理手順の一例について説明する。プラグイン更新処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図14は、動作例1におけるプラグイン更新処理手順の一例を示すフローチャートである。図14において、分散ノード201は、制御メッセージに含まれる更新元のプラグインに関する情報に基づいて、更新元のプラグインの実行形式データを取得する(ステップS1401)。
次に、分散ノード201は、制御メッセージに含まれる更新先のプラグインに関する情報に基づいて、更新先のプラグインの実行形式データを取得する(ステップS1402)。そして、分散ノード201は、ステップS1403の処理に移行する。
ステップS1403では、分散ノード201は、プラグイン管理テーブル711のリスト710のうちのプラグイン管理テーブル711を選択する(ステップS1403)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル711のIDとが一致するか否かを判定する(ステップS1404)。ここで、一致しない場合(ステップS1404:No)、分散ノード201は、ステップS1405の処理に移行する。一方で、一致する場合(ステップS1404:Yes)、分散ノード201は、ステップS1406の処理に移行する。
ステップS1405では、分散ノード201は、プラグイン管理テーブル711のリスト710のうちすべてのプラグイン管理テーブル711を選択したか否かを判定する(ステップS1405)。ここで、未選択のプラグイン管理テーブル711がある場合(ステップS1405:No)、分散ノード201は、ステップS1403の処理に戻る。一方で、すべてのプラグイン管理テーブル711を選択している場合(ステップS1405:Yes)、分散ノード201は、プラグイン更新処理を終了する。
ステップS1406では、分散ノード201は、プラグイン管理テーブル711のうちのプラグイン設定情報を選択する(ステップS1406)。
次に、分散ノード201は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する(ステップS1407)。ここで、一致しない場合(ステップS1407:No)、分散ノード201は、ステップS1410の処理に移行する。一方で、一致する場合(ステップS1407:Yes)、分散ノード201は、ステップS1408の処理に移行する。
ステップS1408では、分散ノード201は、更新元のプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する(ステップS1408)。ここで、一致しない場合(ステップS1408:No)、分散ノード201は、ステップS1410の処理に移行する。一方で、一致する場合(ステップS1408:Yes)、分散ノード201は、ステップS1409の処理に移行する。
ステップS1409では、分散ノード201は、プラグイン設定情報のプラグインデータを、更新先のプラグインの実行形式データで更新する(ステップS1409)。そして、分散ノード201は、ステップS1410の処理に移行する。
ステップS1410では、分散ノード201は、プラグイン管理テーブル711のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS1410)。ここで、未選択のプラグイン設定情報がある場合(ステップS1410:No)、分散ノード201は、ステップS1406の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS1410:Yes)、分散ノード201は、プラグイン更新処理を終了する。
ここで、分散ノード201は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード201は、一部ステップの処理を省略してもよい場合がある。
(並列分散処理システム200の動作例2)
次に、図15および図16を用いて、並列分散処理システム200の動作例2について説明する。上述した動作例1は、制御メッセージを受信したタイミングで、プラグインをプラグイン管理テーブルに記憶し、プラグインを有効化する動作例である。有効化は、プラグインの実行形式データであるプラグインデータを実行可能にすることである。
これに対し、動作例2は、プラグインが有効な期間が設定され、制御メッセージを受信したタイミングに関わらず、プラグインが有効な期間になってからプラグインを有効化する動作例である。これによれば、動作例2は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの分散ノード201における到着順が入れ替わった場合にも、処理の不整合を防止することができる。
まず、図15の説明に移行し、動作例2における各種メッセージの一例について説明した後、図16の説明に移行し、動作例2における各種メッセージを受信する場合についての分散ノード201の具体的な機能的構成例について説明する。
図15は、動作例2における各種メッセージの一例を示す説明図である。動作例2において、並列分散処理システム200は、例えば、イベントメッセージ1501、プラグインを追加する制御メッセージ1502、プラグインの有効期限を変更する制御メッセージ1503、プラグインを更新する制御メッセージ1504を利用する。
イベントメッセージ1501は、図6に示したイベントメッセージ601と同様であるため、説明を省略する。
プラグインを追加する制御メッセージ1502は、IDと、時刻と、種別と、対象ステート名と、追加するプラグインの置き場所についての情報と、開始時間と、終了時間とのフィールドを有する。IDと、時刻と、種別と、対象ステート名と、追加するプラグインの置き場所についての情報とのフィールドは、図6に示したプラグインを追加する制御メッセージ602と同様であるため、説明を省略する。開始時間のフィールドには、追加するプラグインの有効期限が開始する時刻が設定される。終了時間のフィールドには、追加するプラグインの有効期限が終了する時刻が設定される。
プラグインの有効期限を変更する制御メッセージ1503は、IDと、時刻と、種別と、対象ステート名と、有効期限を変更するプラグインの置き場所についての情報と、開始時間と、終了時間とのフィールドを有する。IDのフィールドには、イベントの発生元の事物を識別する情報としてIDが設定される。時刻のフィールドには、制御メッセージの生成時刻が設定される。種別のフィールドには、メッセージの種別として「プラグイン有効期限変更」が設定される。
対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。有効期限を変更するプラグインの置き場所についての情報のフィールドには、プラグインの実行形式データであるプラグインデータが記憶された記憶領域のアドレスが設定される。開始時間のフィールドには、有効期限を変更するプラグインの有効期限が開始する時刻が設定される。終了時間のフィールドには、有効期限を変更するプラグインの有効期限が終了する時刻が設定される。
プラグインを更新する制御メッセージ1504は、IDと、時刻と、種別と、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報と、開始時間と、終了時間とのフィールドを有する。IDと、時刻と、種別と、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報とのフィールドは、図6に示したプラグインを更新する制御メッセージ604と同様であるため、説明を省略する。開始時間のフィールドには、新しいプラグインの有効期限が開始する時刻が設定される。終了時間のフィールドには、新しいプラグインの有効期限が終了する時刻が設定される。
図16は、動作例2における分散ノード201の具体的な機能的構成例を示す説明図である。図16に示すように、分散ノード201は、仮想オブジェクトテーブル1621のリスト1620を有する。仮想オブジェクトテーブル1621は、図7に示した仮想オブジェクトテーブル721と同様であるため、説明を省略する。
図16に示すように、分散ノード201は、プラグイン管理テーブル1611のリスト1610を有する。プラグイン管理テーブル1611は、例えば、図3に示した分散ノード201のメモリ302や記録媒体305などの記憶領域により実現される。
プラグイン管理テーブル1611は、IDのフィールドを有する。プラグイン管理テーブル1611は、さらに、対象ステート名と、開始時刻と、終了時刻と、プラグインデータとのフィールドを対応付けて有する。プラグイン管理テーブル1611は、各フィールドに情報を設定することにより、レコードが記憶される。以下の説明では、対象ステート名と、開始時刻と、終了時刻と、プラグインデータとを合わせて「プラグイン設定情報」と表記する場合がある。
IDのフィールドには、イベントの発生元の事物を識別する情報としてIDが設定される。対象ステート名のフィールドには、プラグインの実行条件となるイベントの種別を示す情報として対象ステート名が設定される。開始時刻のフィールドには、プラグインの有効期限の開始時刻が設定される。終了時刻のフィールドには、プラグインの有効期限の終了時刻が設定される。プラグインデータのフィールドには、プラグインの実行形式データであるプラグインデータが設定される。
図16に示すように、分散ノード201は、メッセージ判別部1601と、制御メッセージパーサ部1602と、プラグイン管理部1603と、イベントメッセージパーサ部1604と、ステート管理部1605と、プラグイン実行部1606とを有する。
メッセージ判別部1601は、イベントメッセージ1501、プラグインを追加する制御メッセージ1502、プラグインの有効期限を変更する制御メッセージ1503、プラグインを更新する制御メッセージ1504のいずれかのメッセージの入力を受け付ける。メッセージ判別部1601は、入力されたメッセージの種別を判別し、制御メッセージパーサ部1602またはイベントメッセージパーサ部1604に引き渡す。
制御メッセージパーサ部1602は、プラグインを追加する制御メッセージ1502、プラグインの有効期限を変更する制御メッセージ1503、プラグインを更新する制御メッセージ1504を解釈する。制御メッセージパーサ部1602は、例えば、プラグインを追加する制御メッセージ1502から、IDと、対象ステート名と、追加するプラグインの置き場所についての情報と、開始時間と、終了時間とを抽出し、プラグイン管理部1603に引き渡す。
制御メッセージパーサ部1602は、例えば、プラグインの有効期限を変更する制御メッセージ1503から、IDと、対象ステート名と、有効期限を変更するプラグインの置き場所についての情報と、開始時間と、終了時間とを抽出する。制御メッセージパーサ部1602は、抽出した情報を、プラグイン管理部1603に引き渡す。制御メッセージパーサ部1602は、例えば、制御メッセージ1504から、IDと、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報と、開始時間と、終了時間とを抽出する。制御メッセージパーサ部1602は、抽出した情報を、プラグイン管理部1603に引き渡す。
プラグイン管理部1603は、制御メッセージパーサ部1602から引き渡された情報に基づいて、プラグイン管理テーブル1611を更新する。プラグイン管理部1603は、例えば、IDと、対象ステート名と、追加するプラグインの置き場所についての情報と、開始時間と、終了時間とを受け付ける。プラグイン管理部1603は、受け付けたIDに対応するプラグイン管理テーブル1611を特定する。プラグイン管理部1603は、追加するプラグインの置き場所についての情報に基づいて、追加するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部1603は、特定したプラグイン管理テーブル1611に、受け付けた対象ステート名と、開始時間と、終了時間と、取得したプラグインデータとを対応付けて追加する。
プラグイン管理部1603は、例えば、IDと、対象ステート名と、有効期限を変更するプラグインの置き場所についての情報と、開始時間と、終了時間とを受け付ける。プラグイン管理部1603は、受け付けたIDに対応するプラグイン管理テーブル1611を特定する。プラグイン管理部1603は、有効期限を変更するプラグインの置き場所についての情報に基づいて、有効期限を変更するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部1603は、特定したプラグイン管理テーブル1611に、受け付けた対象ステート名に対応付けて、取得したプラグインデータと一致するプラグインデータがあれば、当該プラグインデータの開始時刻と終了時刻とを変更する。
プラグイン管理部1603は、例えば、IDと、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報と、開始時間と、終了時間とを受け付ける。プラグイン管理部1603は、受け付けたIDに対応するプラグイン管理テーブル1611を特定する。プラグイン管理部1603は、更新対象のプラグインの置き場所についての情報に基づいて、更新対象であり削除されるプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部1603は、新しいプラグインの置き場所についての情報に基づいて、新しいプラグインの実行形式データであるプラグインデータを取得する。
プラグイン管理部1603は、特定したプラグイン管理テーブル1611に、受け付けた対象ステート名に対応付けて、更新対象であり有効期限の変更により削除されるプラグインデータと一致するプラグインデータがあるか否かを判定する。プラグイン管理部1603は、プラグインデータがあれば、当該プラグインデータの有効期限の終了時刻を、受け付けた開始時間の単位時間前に設定する。プラグイン管理部1603は、特定したプラグイン管理テーブル1611に、受け付けた対象ステート名と、開始時間と、終了時間と、取得した新しいプラグインデータとを対応付けて追加する。プラグイン管理部1603は、有効期限を過ぎたプラグインがあれば、当該プラグインの実行形式データであるプラグインデータを、プラグイン管理テーブル1611から削除する。
イベントメッセージパーサ部1604は、イベントメッセージ1501を解釈し、IDと、時刻と、1以上のステートを抽出し、ステート管理部1605に引き渡す。ステート管理部1605は、IDと、時刻と、1以上のステートとを受け付ける。ステート管理部1605は、受け付けたIDに対応する仮想オブジェクトテーブル1621を特定する。ステート管理部1605は、特定した仮想オブジェクトテーブル1621を、受け付けた1以上のステートで更新する。ステート管理部1605は、いずれかのステートのステート内容が変更された場合、抽出したID、抽出した時刻および当該ステートのステート名を含む変更通知を、プラグイン実行部1606に引き渡す。
プラグイン実行部1606は、変更通知に含まれるIDに対応するプラグイン管理テーブル1611を特定する。プラグイン実行部1606は、変更通知に含まれるステート名で、特定したプラグイン管理テーブル1611のうちの対象ステート名を検索する。プラグイン実行部1606は、検索した対象ステート名に対応付けられた開始時刻から終了時刻までの有効期限に、受け付けた時刻が含まれれば、検索した対象ステート名に対応付けられたプラグインデータを実行する。プラグイン実行部1606は、対象ステート名が検索できなければ、プラグインデータを実行しない。
これにより、分散ノード201は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。分散ノード201は、例えば、更新対象であり削除される古いプラグインデータの有効期限の終了時刻を、新しいプラグインデータの有効期限の開始時間の単位時間前に設定するため、古いプラグインデータを新しいプラグインデータで更新することができる。また、並列分散処理システム200は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの分散ノード201における到着順が入れ替わった場合にも、処理の不整合を防止することができる。
(動作例2における全体処理手順)
動作例2における全体処理手順は、図8に示した動作例1における全体処理手順と同様であるため、説明を省略する。また、動作例2における全体処理手順では、図11に示した動作例1における制御系イベント処理の代わりに、図18に後述する動作例2における制御系イベント処理が呼び出される。
(動作例2におけるイベントメッセージ処理手順)
動作例2におけるイベントメッセージ処理手順は、図9に示した動作例1におけるイベントメッセージ処理手順と同様であるため、説明を省略する。また、動作例2におけるイベントメッセージ処理手順では、図10に示した動作例1におけるプラグイン処理に代わり、図17に後述する動作例2におけるプラグイン処理が呼び出される。
(動作例2におけるプラグイン処理手順)
次に、図17を用いて、分散ノード201が実行する、動作例2におけるプラグイン処理手順の一例について説明する。プラグイン処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図17は、動作例2におけるプラグイン処理手順の一例を示すフローチャートである。図17において、分散ノード201は、プラグイン管理テーブル1611のリスト1610のうちのプラグイン管理テーブル1611を選択する(ステップS1701)。
次に、分散ノード201は、選択したプラグイン管理テーブル1611のIDが、取り出したイベントメッセージのIDと一致するか否かを判定する(ステップS1702)。ここで、一致しない場合(ステップS1702:No)、分散ノード201は、ステップS1703の処理に移行する。一方で、一致する場合(ステップS1702:Yes)、分散ノード201は、ステップS1704の処理に移行する。
ステップS1703では、分散ノード201は、プラグイン管理テーブル1611のリスト1610のうちのすべてのプラグイン管理テーブル1611を選択したか否かを判定する(ステップS1703)。ここで、未選択のプラグイン管理テーブル1611がある場合(ステップS1703:No)、分散ノード201は、ステップS1701の処理に戻る。一方で、すべてのプラグイン管理テーブル1611を選択している場合(ステップS1703:Yes)、分散ノード201は、プラグイン処理を終了する。
ステップS1704では、分散ノード201は、プラグイン管理テーブル1611のうちのプラグイン設定情報を選択する(ステップS1704)。
次に、分散ノード201は、イベントメッセージのステート名とプラグイン設定情報のステート名とが一致するか否かを判定する(ステップS1705)。ここで、一致する場合(ステップS1705:Yes)、分散ノード201は、ステップS1706の処理に移行する。一方で、一致しない場合(ステップS1705:No)、分散ノード201は、ステップS1709の処理に移行する。
ステップS1706では、分散ノード201は、イベントメッセージの時刻が、プラグインの有効期限内であるか否かを判定する(ステップS1706)。ここで、有効期限内ではない場合(ステップS1706:No)、分散ノード201は、ステップS1707の処理に移行する。一方で、有効期限内である場合(ステップS1706:Yes)、分散ノード201は、ステップS1708の処理に移行する。
ステップS1707では、分散ノード201は、プラグインを削除する(ステップS1707)。そして、分散ノード201は、ステップS1709の処理に移行する。
ステップS1708では、分散ノード201は、プラグインを実行する(ステップS1708)。そして、分散ノード201は、ステップS1709の処理に移行する。
ステップS1709では、分散ノード201は、プラグイン管理テーブル1611のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS1709)。ここで、未選択のプラグイン設定情報がある場合(ステップS1709:No)、分散ノード201は、ステップS1704の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS1709:Yes)、分散ノード201は、プラグイン処理を終了する。
(動作例2における制御系イベント処理手順)
次に、図18を用いて、分散ノード201が実行する、動作例2における制御系イベント処理手順の一例について説明する。制御系イベント処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図18は、動作例2における制御系イベント処理手順の一例を示すフローチャートである。図18において、分散ノード201は、制御メッセージがプラグイン追加を表すか否かを判定する(ステップS1801)。ここで、プラグイン追加を表す場合(ステップS1801:Yes)、分散ノード201は、ステップS1802の処理に移行する。一方で、プラグイン追加を表さない場合(ステップS1801:No)、分散ノード201は、ステップS1803の処理に移行する。
ステップS1802では、分散ノード201は、図12に上述したプラグイン追加処理を実行する(ステップS1802)。そして、分散ノード201は、制御系イベント処理を終了する。
ステップS1803では、分散ノード201は、制御メッセージが有効期限の変更を表すか否かを判定する(ステップS1803)。ここで、有効期限の変更を表す場合(ステップS1803:Yes)、分散ノード201は、ステップS1804の処理に移行する。一方で、有効期限の変更を表さない場合(ステップS1803:No)、分散ノード201は、ステップS1805の処理に移行する。
ステップS1804では、分散ノード201は、図19に後述する有効期限変更処理を実行する(ステップS1804)。そして、分散ノード201は、制御系イベント処理を終了する。
ステップS1805では、分散ノード201は、制御メッセージがプラグイン更新を表すか否かを判定する(ステップS1805)。ここで、プラグイン更新を表す場合(ステップS1805:Yes)、分散ノード201は、ステップS1806の処理に移行する。一方で、プラグイン更新を表さない場合(ステップS1805:No)、分散ノード201は、制御系イベント処理を終了する。
ステップS1806では、分散ノード201は、図20に後述するプラグイン更新処理を実行する(ステップS1806)。そして、分散ノード201は、制御系イベント処理を終了する。
(動作例2におけるプラグイン追加処理手順)
動作例2におけるプラグイン追加処理手順は、図12に示した動作例1におけるプラグイン追加処理手順と同様であるため、説明を省略する。
(動作例2における有効期限変更処理手順)
次に、図19を用いて、分散ノード201が実行する、動作例2における有効期限変更処理手順の一例について説明する。有効期限変更処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図19は、動作例2における有効期限変更処理手順の一例を示すフローチャートである。図19において、分散ノード201は、制御メッセージに含まれる有効期限を変更するプラグインに関する情報に基づいて、プラグインの実行形式データを取得する(ステップS1901)。次に、分散ノード201は、ステップS1902の処理に移行する。
ステップS1902では、分散ノード201は、プラグイン管理テーブル1611のリスト1610のうちのプラグイン管理テーブル1611を選択する(ステップS1902)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル1611のIDとが一致するか否かを判定する(ステップS1903)。ここで、一致しない場合(ステップS1903:No)、分散ノード201は、ステップS1904の処理に移行する。一方で、一致する場合(ステップS1903:Yes)、分散ノード201は、ステップS1905の処理に移行する。
ステップS1904では、分散ノード201は、プラグイン管理テーブル1611のリスト1610のうちすべてのプラグイン管理テーブル1611を選択したか否かを判定する(ステップS1904)。ここで、未選択のプラグイン管理テーブル1611がある場合(ステップS1904:No)、分散ノード201は、ステップS1902の処理に戻る。一方で、すべてのプラグイン管理テーブル1611を選択している場合(ステップS1904:Yes)、分散ノード201は、有効期限変更処理を終了する。
ステップS1905では、分散ノード201は、プラグイン管理テーブル1611のうちのプラグイン設定情報を選択する(ステップS1905)。
次に、分散ノード201は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する(ステップS1906)。ここで、一致しない場合(ステップS1906:No)、分散ノード201は、ステップS1909の処理に移行する。一方で、一致する場合(ステップS1906:Yes)、分散ノード201は、ステップS1907の処理に移行する。
ステップS1907では、分散ノード201は、有効期限を変更するプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する(ステップS1907)。ここで、一致しない場合(ステップS1907:No)、分散ノード201は、ステップS1909の処理に移行する。一方で、一致する場合(ステップS1907:Yes)、分散ノード201は、ステップS1908の処理に移行する。
ステップS1908では、分散ノード201は、プラグイン設定情報の有効期限を変更する(ステップS1908)。そして、分散ノード201は、ステップS1909の処理に移行する。
ステップS1909では、分散ノード201は、プラグイン管理テーブル1611のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS1909)。ここで、未選択のプラグイン設定情報がある場合(ステップS1909:No)、分散ノード201は、ステップS1905の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS1909:Yes)、分散ノード201は、有効期限変更処理を終了する。
(動作例2におけるプラグイン更新処理手順)
次に、図20を用いて、分散ノード201が実行する、動作例2におけるプラグイン更新処理手順の一例について説明する。プラグイン更新処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図20は、動作例2におけるプラグイン更新処理手順の一例を示すフローチャートである。図20において、分散ノード201は、図12に上述したプラグイン追加処理を実行する(ステップS2001)。次に、分散ノード201は、図19に上述した有効期限変更処理を実行する(ステップS2002)。そして、分散ノード201は、プラグイン更新処理を終了する。
ここで、分散ノード201は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード201は、一部ステップの処理を省略してもよい場合がある。
(並列分散処理システム200の動作例3)
次に、並列分散処理システム200の動作例3について説明する。上述した動作例2は、有効期限が過ぎたプラグインを削除する動作例である。
これに対し、動作例3は、有効な期間が過ぎた後、バリアメッセージを受信するまで、プラグインの削除を待機する動作例である。これによれば、動作例3は、バリアメッセージの到着までプラグインを削除せずに保存しておくことができ、分散チェックポイントにより障害復旧可能なように、バリアメッセージに応じたバックアップを正常に実施可能にすることができる。
分散チェックポイントによる障害復旧は、具体的には、管理ノード202が、メッセージを一定時間保存しておき、分散ノード201が、内部状態の情報を外部記憶装置にチェックポイントとしてバックアップすることにより、実現される。障害発生時には、分散ノード201が内部状態の情報を戻し、管理ノード202がメッセージを再送することにより、障害復旧が行われる。
まず、図21の説明に移行し、動作例3における各種メッセージの一例について説明した後、図22の説明に移行し、動作例3における各種メッセージを受信する場合についての分散ノード201の具体的な機能的構成例について説明する。
図21は、動作例3における各種メッセージの一例を示す説明図である。動作例3において、並列分散処理システム200は、例えば、イベントメッセージ2101、プラグインを追加する制御メッセージ2102、プラグインの有効期限を変更する制御メッセージ2103、プラグインを更新する制御メッセージ2104を利用する。また、並列分散処理システム200は、例えば、バリアメッセージ2105を利用する。
イベントメッセージ2101は、図6に示したイベントメッセージ601と同様であるため、説明を省略する。プラグインを追加する制御メッセージ2102は、図15に示したプラグインを追加する制御メッセージ1502と同様であるため、説明を省略する。
プラグインの有効期限を変更する制御メッセージ2103は、図15に示したプラグインの有効期限を変更する制御メッセージ1503と同様であるため、説明を省略する。プラグインを更新する制御メッセージ2104は、図15に示したプラグインを更新する制御メッセージ1504と同様であるため、説明を省略する。バリアメッセージ2105は、特有のバリア番号を有する。
図22は、動作例3における分散ノード201の具体的な機能的構成例を示す説明図である。図22に示すように、分散ノード201は、仮想オブジェクトテーブル2221のリスト2220を有する。仮想オブジェクトテーブル2221は、図7に示した仮想オブジェクトテーブル721と同様であるため、説明を省略する。
図22に示すように、分散ノード201は、プラグイン管理テーブル2211のリスト2210を有する。プラグイン管理テーブル2211は、図16に示したプラグイン管理テーブル1611と同様であるため、説明を省略する。
図22に示すように、分散ノード201は、メッセージ判別部2201と、制御メッセージパーサ部2202と、プラグイン管理部2203と、バリア処理部2204とを有する。また、分散ノード201は、イベントメッセージパーサ部2205と、ステート管理部2206と、プラグイン実行部2207とを有する。
メッセージ判別部2201は、イベントメッセージ2101、プラグインを追加する制御メッセージ2102、プラグインの有効期限を変更する制御メッセージ2103、プラグインを更新する制御メッセージ2104の入力を受け付ける。また、メッセージ判別部2201は、バリアメッセージ2105の入力を受け付ける。メッセージ判別部2201は、入力されたメッセージの種別を判別し、制御メッセージパーサ部2202、バリア処理部2204、またはイベントメッセージパーサ部2205に引き渡す。
制御メッセージパーサ部2202は、図16に示した制御メッセージパーサ部1602と同様であるため、説明を省略する。
プラグイン管理部2203は、プラグインを削除する動作以外は、図16に示したプラグイン管理部1603と同様である。プラグイン管理部2203は、バリア処理部2204から有効期限が過ぎたプラグインの削除依頼を受け付けると、当該プラグインの実行形式データであるプラグインデータを、プラグイン管理テーブル2211から削除する。
バリア処理部2204は、バリアメッセージ2105を受け付けると、仮想オブジェクトテーブル2221やプラグイン管理テーブル2211をバックアップする。バリア処理部2204は、バックアップが終了した後、プラグイン管理部2203に有効期限が過ぎたプラグインの削除依頼を出力する。
イベントメッセージパーサ部2205は、図16に示したイベントメッセージパーサ部1604と同様であるため、説明を省略する。ステート管理部2206は、図16に示したステート管理部1605と同様であるため、説明を省略する。プラグイン実行部2207は、図16に示したプラグイン実行部1606と同様であるため、説明を省略する。
これにより、分散ノード201は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。また、並列分散処理システム200は、バリアメッセージに応じたバックアップを正常に実施可能にすることができ、並列分散処理システム200の状態を正常に巻き戻し可能にすることができる。
並列分散処理システム200は、具体的には、分散ノード201が、内部状態の情報を外部記憶装置にチェックポイントとしてバックアップするまで、プラグインを削除させず、プラグインをバックアップ可能にすることができる。このため、並列分散処理システム200は、障害発生時に、分散ノード201が内部状態の情報を戻すことを可能にし、障害復旧を実施可能にすることができる。
(動作例3における全体処理手順)
次に、図23を用いて、分散ノード201が実行する、動作例3における全体処理手順の一例について説明する。全体処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図23は、動作例3における全体処理手順の一例を示すフローチャートである。図23において、分散ノード201は、メッセージの到着まで待機する(ステップS2301)。
次に、分散ノード201は、処理待ちのメッセージがあるか否かを判定する(ステップS2302)。ここで、処理待ちのメッセージがない場合(ステップS2302:No)、分散ノード201は、ステップS2301の処理に戻る。一方で、処理待ちのメッセージがある場合(ステップS2302:Yes)、分散ノード201は、ステップS2303の処理に移行する。
ステップS2303では、分散ノード201は、処理待ちのメッセージを1つ取り出す(ステップS2303)。
次に、分散ノード201は、取り出した処理対象のメッセージが制御メッセージであるか否かを判定する(ステップS2304)。ここで、制御メッセージである場合(ステップS2304:Yes)、分散ノード201は、ステップS2305の処理に移行する。一方で、制御メッセージではない場合(ステップS2304:No)、分散ノード201は、ステップS2306の処理に移行する。
ステップS2305では、分散ノード201は、図11に上述した制御系イベント処理を実行する(ステップS2305)。そして、分散ノード201は、ステップS2302の処理に戻る。
ステップS2306では、分散ノード201は、イベントメッセージがバリアメッセージであるか否かを判定する(ステップS2306)。ここで、バリアメッセージではない場合(ステップS2306:No)、分散ノード201は、ステップS2307の処理に移行する。一方で、バリアメッセージである場合(ステップS2306:Yes)、分散ノード201は、ステップS2308の処理に移行する。
ステップS2307では、分散ノード201は、図9に上述したイベントメッセージ処理を実行する(ステップS2307)。そして、分散ノード201は、ステップS2302の処理に戻る。
ステップS2308では、分散ノード201は、図25に後述するバリア処理を実行する(ステップS2308)。そして、分散ノード201は、ステップS2302の処理に戻る。
(動作例3におけるイベントメッセージ処理手順)
動作例3におけるイベントメッセージ処理手順は、図9に示した動作例1におけるイベントメッセージ処理手順と同様であるため、説明を省略する。また、動作例3におけるイベントメッセージ処理手順では、図10に示した動作例1におけるプラグイン処理に代わり、図24に後述する動作例3におけるプラグイン処理が呼び出される。
(動作例3におけるプラグイン処理手順)
次に、図24を用いて、分散ノード201が実行する、動作例3におけるプラグイン処理手順の一例について説明する。プラグイン処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図24は、動作例3におけるプラグイン処理手順の一例を示すフローチャートである。図24において、分散ノード201は、プラグイン管理テーブル2211のリスト2210のうちのプラグイン管理テーブル2211を選択する(ステップS2401)。
次に、分散ノード201は、選択したプラグイン管理テーブル2211のIDが、取り出したイベントメッセージのIDと一致するか否かを判定する(ステップS2402)。ここで、一致しない場合(ステップS2402:No)、分散ノード201は、ステップS2403の処理に移行する。一方で、一致する場合(ステップS2402:Yes)、分散ノード201は、ステップS2404の処理に移行する。
ステップS2403では、分散ノード201は、プラグイン管理テーブル2211のリスト2210のうちのすべてのプラグイン管理テーブル2211を選択したか否かを判定する(ステップS2403)。ここで、未選択のプラグイン管理テーブル2211がある場合(ステップS2403:No)、分散ノード201は、ステップS2401の処理に戻る。一方で、すべてのプラグイン管理テーブル2211を選択している場合(ステップS2403:Yes)、分散ノード201は、プラグイン処理を終了する。
ステップS2404では、分散ノード201は、プラグイン管理テーブル2211のうちのプラグイン設定情報を選択する(ステップS2404)。
次に、分散ノード201は、イベントメッセージのステート名とプラグイン設定情報のステート名とが一致するか否かを判定する(ステップS2405)。ここで、一致する場合(ステップS2405:Yes)、分散ノード201は、ステップS2406の処理に移行する。一方で、一致しない場合(ステップS2405:No)、分散ノード201は、ステップS2408の処理に移行する。
ステップS2406では、分散ノード201は、イベントメッセージの時刻が、プラグインの有効期限内であるか否かを判定する(ステップS2406)。ここで、有効期限内ではない場合(ステップS2406:No)、分散ノード201は、ステップS2408の処理に移行する。一方で、有効期限内である場合(ステップS2406:Yes)、分散ノード201は、ステップS2407の処理に移行する。
ステップS2407では、分散ノード201は、プラグインを実行する(ステップS2407)。そして、分散ノード201は、ステップS2408の処理に移行する。
ステップS2408では、分散ノード201は、プラグイン管理テーブル2211のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS2408)。ここで、未選択のプラグイン設定情報がある場合(ステップS2408:No)、分散ノード201は、ステップS2404の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS2408:Yes)、分散ノード201は、プラグイン処理を終了する。
(動作例3における制御系イベント処理手順)
動作例3における制御系イベント処理手順は、図18に示した動作例2における制御系イベント処理手順と同様であるため、説明を省略する。
(動作例3におけるプラグイン追加処理手順)
動作例3におけるプラグイン追加処理手順は、図12に示した動作例1におけるプラグイン追加処理手順と同様であるため、説明を省略する。
(動作例3における有効期限変更処理手順)
動作例3における有効期限変更処理手順は、図19に示した動作例2における有効期限変更処理手順と同様であるため、説明を省略する。
(動作例3におけるプラグイン更新処理手順)
動作例3におけるプラグイン更新処理手順は、図20に示した動作例2におけるプラグイン更新処理手順と同様であるため、説明を省略する。
(動作例3におけるバリア処理手順)
次に、図25を用いて、分散ノード201が実行する、動作例3におけるバリア処理手順の一例について説明する。バリア処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図25は、動作例3におけるバリア処理手順の一例を示すフローチャートである。図25において、分散ノード201は、仮想オブジェクトテーブル2221およびプラグイン管理テーブル2211を外部記憶装置に保存する(ステップS2501)。次に、分散ノード201は、ステップS2502の処理に移行する。
ステップS2502では、分散ノード201は、プラグイン管理テーブル2211のリスト2210のうちのプラグイン管理テーブル2211を選択する(ステップS2502)。次に、分散ノード201は、ステップS2503の処理に移行する。
ステップS2503では、分散ノード201は、プラグイン管理テーブル2211のうちのプラグイン設定情報を選択する(ステップS2503)。
次に、分散ノード201は、プラグインの有効期限が、最後に処理したメッセージの時刻よりも前であるか否かを判定する(ステップS2504)。ここで、前である場合(ステップS2504:Yes)、分散ノード201は、ステップS2505の処理に移行する。一方で、前ではない場合(ステップS2504:No)、分散ノード201は、ステップS2506の処理に移行する。
ステップS2505では、分散ノード201は、プラグインを削除する(ステップS2505)。次に、分散ノード201は、ステップS2506の処理に移行する。
ステップS2506では、分散ノード201は、プラグイン管理テーブル2211のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS2506)。ここで、未選択のプラグイン設定情報がある場合(ステップS2506:No)、分散ノード201は、ステップS2503の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS2506:Yes)、ステップS2507の処理に移行する。
ステップS2507では、分散ノード201は、プラグイン管理テーブル2211のリスト2210のうちのすべてのプラグイン管理テーブル2211を選択したか否かを判定する(ステップS2507)。ここで、未選択のプラグイン管理テーブル2211がある場合(ステップS2507:No)、分散ノード201は、ステップS2502の処理に戻る。一方で、すべてのプラグイン管理テーブル2211を選択している場合(ステップS2507:Yes)、分散ノード201は、バリア処理を終了する。
ここで、分散ノード201は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード201は、一部ステップの処理を省略してもよい場合がある。
(並列分散処理システム200の動作例4)
次に、並列分散処理システム200の動作例4について説明する。上述した動作例1は、制御メッセージを受信したタイミングで、プラグインをプラグイン管理テーブルに記憶し、プラグインを有効化する動作例である。
これに対し、動作例4は、制御メッセージを受信した後、バリアメッセージを受信したタイミングで、プラグインを有効化する動作例である。これによれば、動作例4は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの分散ノード201における到着順が入れ替わった場合にも、処理の不整合を防止することができる。
まず、図26の説明に移行し、動作例4における各種メッセージの一例について説明した後、図27の説明に移行し、動作例4における各種メッセージを受信する場合についての分散ノード201の具体的な機能的構成例について説明する。
図26は、動作例4における各種メッセージの一例を示す説明図である。動作例4において、並列分散処理システム200は、例えば、イベントメッセージ2601、プラグインを追加する制御メッセージ2602、プラグインを削除する制御メッセージ2603、プラグインを更新する制御メッセージ2604を利用する。また、並列分散処理システム200は、例えば、バリアメッセージ2605を利用する。
イベントメッセージ2601は、図6に示したイベントメッセージ601と同様であるため、説明を省略する。プラグインを追加する制御メッセージ2602は、図6に示したプラグインを追加する制御メッセージ602と同様であるため、説明を省略する。
プラグインを削除する制御メッセージ2603は、図6に示したプラグインを削除する制御メッセージ603と同様であるため、説明を省略する。プラグインを更新する制御メッセージ2604は、図6に示したプラグインを更新する制御メッセージ604と同様であるため、説明を省略する。バリアメッセージ2605は、バリア番号を有する。
図27は、動作例4における分散ノード201の具体的な機能的構成例を示す説明図である。図27に示すように、分散ノード201は、仮想オブジェクトテーブル2721のリスト2720を有する。仮想オブジェクトテーブル2721は、図7に示した仮想オブジェクトテーブル721と同様であるため、説明を省略する。
図27に示すように、分散ノード201は、プラグイン管理テーブル2711のリスト2710を有する。プラグイン管理テーブル2711は、図7に示したプラグイン管理テーブル711と同様であるため、説明を省略する。
図27に示すように、分散ノード201は、プラグイン操作待機テーブル2730を有する。プラグイン操作待機テーブル2730は、例えば、図3に示した分散ノード201のメモリ302や記録媒体305などの記憶領域により実現される。
プラグイン操作待機テーブル2730は、IDのフィールドを有する。プラグイン操作待機テーブル2730は、さらに、対象IDと、ステート名と、プラグインデータと、操作種別とのフィールドを対応付けて有する。プラグイン操作待機テーブル2730は、各フィールドに情報を設定することにより、レコードが記憶される。
対象IDのフィールドには、プラグインの追加や削除が行われるプラグイン管理テーブル2711に対応するIDが設定される。ステート名のフィールドには、追加や削除が行われるプラグインの実行条件となるイベントの種別を示す情報としてステート名が設定される。プラグインデータのフィールドには、プラグインの実行形式データであるプラグインデータが設定される。操作種別のフィールドには、プラグインの追加や削除のいずれの操作を行うかを識別する操作種別が設定される。
図27に示すように、分散ノード201は、メッセージ判別部2701と、制御メッセージパーサ部2702と、プラグイン管理部2703と、バリア処理部2704とを有する。また、分散ノード201は、イベントメッセージパーサ部2705と、ステート管理部2706と、プラグイン実行部2707とを有する。
メッセージ判別部2701は、イベントメッセージ2601、プラグインを追加する制御メッセージ2602、プラグインを削除する制御メッセージ2603、プラグインを更新する制御メッセージ2604の入力を受け付ける。また、メッセージ判別部2701は、バリアメッセージ2605の入力を受け付ける。メッセージ判別部2701は、入力されたメッセージの種別を判別し、制御メッセージパーサ部2702、バリア処理部2704、またはイベントメッセージパーサ部2705に引き渡す。
制御メッセージパーサ部2702は、図7に示した制御メッセージパーサ部702と同様であるため、説明を省略する。
プラグイン管理部2703は、制御メッセージパーサ部2702から引き渡された情報に基づいて、プラグイン管理テーブル2711を更新する。プラグイン管理部2703は、例えば、IDと、対象ステート名と、追加するプラグインの置き場所についての情報とを受け付ける。プラグイン管理部2703は、受け付けたIDに対応するプラグイン管理テーブル2711を特定する。プラグイン管理部2703は、追加するプラグインの置き場所についての情報に基づいて、追加するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部2703は、特定したプラグイン管理テーブル2711に、受け付けた対象ステート名と、取得したプラグインデータとを対応付けて追加する追加操作を待機する。プラグイン管理部2703は、例えば、プラグイン操作待機テーブル2730に、追加操作のレコードを記憶して、追加操作を待機する。
プラグイン管理部2703は、例えば、IDと、対象ステート名と、削除するプラグインの置き場所についての情報とを受け付ける。プラグイン管理部2703は、受け付けたIDに対応するプラグイン管理テーブル2711を特定する。プラグイン管理部2703は、削除するプラグインの置き場所についての情報に基づいて、削除するプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部2703は、特定したプラグイン管理テーブル2711に、受け付けた対象ステート名に対応付けて、取得したプラグインデータと一致するプラグインデータがあれば、当該プラグインデータを削除する削除操作を待機する。プラグイン管理部2703は、例えば、プラグイン操作待機テーブル2730に、削除操作のレコードを記憶して、削除操作を待機する。
プラグイン管理部2703は、例えば、IDと、対象ステート名と、更新対象のプラグインの置き場所についての情報と、新しいプラグインの置き場所についての情報とを受け付ける。プラグイン管理部2703は、受け付けたIDに対応するプラグイン管理テーブル2711を特定する。プラグイン管理部2703は、更新対象のプラグインの置き場所についての情報に基づいて、更新対象であり削除されるプラグインの実行形式データであるプラグインデータを取得する。プラグイン管理部2703は、新しいプラグインの置き場所についての情報に基づいて、新しいプラグインの実行形式データであるプラグインデータを取得する。
プラグイン管理部2703は、特定したプラグイン管理テーブル2711に、受け付けた対象ステート名に対応付けて、更新対象であり削除されるプラグインデータと一致するプラグインデータがあれば、当該プラグインデータを削除する削除操作を待機する。プラグイン管理部2703は、例えば、プラグイン操作待機テーブル2730に、削除操作のレコードを記憶して、削除操作を待機する。プラグイン管理部2703は、特定したプラグイン管理テーブル2711に、受け付けた対象ステート名と、取得した新しいプラグインデータとを対応付けて追加する追加操作を待機する。プラグイン管理部2703は、例えば、プラグイン操作待機テーブル2730に、追加操作のレコードを記憶して、追加操作を待機する。プラグイン管理部2703は、プラグイン更新起動通知を受け付けると、待機した追加操作および削除操作を実行する。
バリア処理部2704は、バリアメッセージ2605を受け付けると、仮想オブジェクトテーブル2721やプラグイン管理テーブル2711をバックアップする。バリア処理部2704は、バックアップが終了した後、プラグイン管理部2703にプラグイン更新起動通知を出力する。
イベントメッセージパーサ部2705は、図7に示したイベントメッセージパーサ部704と同様であるため、説明を省略する。ステート管理部2706は、図7に示したステート管理部705と同様であるため、説明を省略する。プラグイン実行部2707は、図7に示したプラグイン実行部706と同様であるため、説明を省略する。
これにより、分散ノード201は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。また、並列分散処理システム200は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの分散ノード201における到着順が入れ替わった場合にも、処理の不整合を防止することができる。並列分散処理システム200は、具体的には、バリアメッセージ2605が、それぞれの分散ノード201に、前後のメッセージとの到着順が入れ替わらない性質を有するため、バリアメッセージ2605を基準に、処理の不整合を防止することができる。
また、並列分散処理システム200は、バリアメッセージ2605に応じたバックアップを正常に実施可能にすることができ、並列分散処理システム200の状態を正常に巻き戻し可能にすることができる。
(動作例4における全体処理手順)
次に、図28を用いて、分散ノード201が実行する、動作例4における全体処理手順の一例について説明する。全体処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図28は、動作例4における全体処理手順の一例を示すフローチャートである。図28において、分散ノード201は、メッセージの到着まで待機する(ステップS2801)。そして、分散ノード201は、ステップS2802の処理に移行する。
ステップS2802では、分散ノード201は、処理待ちのメッセージがあるか否かを判定する(ステップS2802)。ここで、処理待ちのメッセージがない場合(ステップS2802:No)、分散ノード201は、ステップS2801の処理に戻る。一方で、処理待ちのメッセージがある場合(ステップS2802:Yes)、分散ノード201は、ステップS2803の処理に移行する。
ステップS2803では、分散ノード201は、処理待ちのメッセージを1つ取り出す(ステップS2803)。
次に、分散ノード201は、取り出した処理対象のメッセージが制御メッセージであるか否かを判定する(ステップS2804)。ここで、制御メッセージではない場合(ステップS2804:No)、分散ノード201は、ステップS2806の処理に移行する。一方で、制御メッセージである場合(ステップS2804:Yes)、分散ノード201は、ステップS2805の処理に移行する。
ステップS2805では、分散ノード201は、図11に上述した制御系イベント処理を実行する(ステップS2805)。そして、分散ノード201は、ステップS2802の処理に戻る。
ステップS2806では、分散ノード201は、イベントメッセージがバリアメッセージであるか否かを判定する(ステップS2806)。ここで、バリアメッセージではない場合(ステップS2806:No)、分散ノード201は、ステップS2807の処理に移行する。一方で、バリアメッセージである場合(ステップS2806:Yes)、分散ノード201は、ステップS2808の処理に移行する。
ステップS2807では、分散ノード201は、図9に上述したイベントメッセージ処理を実行する(ステップS2807)。そして、分散ノード201は、ステップS2802の処理に戻る。
ステップS2808では、分散ノード201は、図32に後述するバリア処理を実行する(ステップS2808)。そして、分散ノード201は、ステップS2802の処理に戻る。
(動作例4におけるイベントメッセージ処理手順)
動作例4におけるイベントメッセージ処理手順は、図9に示した動作例1におけるイベントメッセージ処理手順と同様であるため、説明を省略する。
(動作例4におけるプラグイン処理手順)
動作例4におけるプラグイン処理手順は、図10に示した動作例1におけるプラグイン処理手順と同様であるため、説明を省略する。
(動作例4における制御系イベント処理手順)
動作例4における制御系イベント処理手順は、図11に示した動作例1における制御系イベント処理手順と同様であるため、説明を省略する。また、動作例4における制御系イベント処理では、図12に示した動作例1におけるプラグイン追加処理の代わりに、図29に後述する動作例4におけるプラグイン追加処理が呼び出される。
また、動作例4における制御系イベント処理では、図13に示した動作例1におけるプラグイン削除処理の代わりに、図30に後述する動作例4におけるプラグイン削除処理が呼び出される。また、動作例4における制御系イベント処理では、図14に示した動作例1におけるプラグイン更新処理の代わりに、図31に後述する動作例4におけるプラグイン更新処理が呼び出される。
(動作例4におけるプラグイン追加処理手順)
次に、図29を用いて、分散ノード201が実行する、動作例4におけるプラグイン追加処理手順の一例について説明する。プラグイン追加処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図29は、動作例4におけるプラグイン追加処理手順の一例を示すフローチャートである。図29において、分散ノード201は、制御メッセージに含まれる追加するプラグインに関する情報に基づいて、プラグインの実行形式データを取得する(ステップS2901)。
次に、分散ノード201は、プラグイン操作待機テーブル2730に、追加するプラグインに関する情報を、操作種別=追加と対応付けて登録する(ステップS2902)。そして、分散ノード201は、プラグイン追加処理を終了する。
(動作例4におけるプラグイン削除処理手順)
次に、図30を用いて、分散ノード201が実行する、動作例4におけるプラグイン削除処理手順の一例について説明する。プラグイン削除処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図30は、動作例4におけるプラグイン削除処理手順の一例を示すフローチャートである。図30において、分散ノード201は、制御メッセージに含まれる削除するプラグインに関する情報に基づいて、プラグインの実行形式データを取得する(ステップS3001)。
次に、分散ノード201は、プラグイン操作待機テーブル2730に、削除するプラグインに関する情報を、操作種別=削除と対応付けて登録する(ステップS3002)。そして、分散ノード201は、プラグイン削除処理を終了する。
(動作例4におけるプラグイン更新処理手順)
次に、図31を用いて、分散ノード201が実行する、動作例4におけるプラグイン更新処理手順の一例について説明する。プラグイン更新処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図31は、動作例4におけるプラグイン更新処理手順の一例を示すフローチャートである。図31において、分散ノード201は、制御メッセージに含まれる更新元のプラグインに関する情報に基づいて、更新元のプラグインの実行形式データを取得する(ステップS3101)。次に、分散ノード201は、制御メッセージに含まれる更新先のプラグインに関する情報に基づいて、更新先のプラグインの実行形式データを取得する(ステップS3102)。
そして、分散ノード201は、プラグイン操作待機テーブル2730に、更新元のプラグインに関する情報を、操作種別=削除と対応付けて登録する(ステップS3103)。次に、分散ノード201は、プラグイン操作待機テーブル2730に、更新先のプラグインに関する情報を、操作種別=追加と対応付けて登録する(ステップS3104)。そして、分散ノード201は、プラグイン更新処理を終了する。
(動作例4におけるバリア処理手順)
次に、図32を用いて、分散ノード201が実行する、動作例4におけるバリア処理手順の一例について説明する。バリア処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図32は、動作例4におけるバリア処理手順の一例を示すフローチャートである。図32において、分散ノード201は、仮想オブジェクトテーブル2721およびプラグイン管理テーブル2711を外部記憶装置に保存する(ステップS3201)。そして、分散ノード201は、ステップS3202の処理に移行する。
ステップS3202では、分散ノード201は、プラグイン操作待機テーブル2730のうちのレコードを選択する(ステップS3202)。
次に、分散ノード201は、レコードの操作種別=追加であるか否かを判定する(ステップS3203)。ここで、追加である場合(ステップS3203:Yes)、分散ノード201は、ステップS3204の処理に移行する。一方で、追加ではない場合(ステップS3203:No)、分散ノード201は、ステップS3205の処理に移行する。
ステップS3204では、分散ノード201は、図33に後述する追加操作処理を実行する(ステップS3204)。そして、分散ノード201は、ステップS3207の処理に移行する。
ステップS3205では、分散ノード201は、レコードの操作種別=削除であるか否かを判定する(ステップS3205)。ここで、削除である場合(ステップS3205:Yes)、分散ノード201は、ステップS3206の処理に移行する。一方で、削除ではない場合(ステップS3205:No)、分散ノード201は、ステップS3207の処理に移行する。
ステップS3206では、分散ノード201は、図34に後述する削除操作処理を実行する(ステップS3206)。そして、分散ノード201は、ステップS3207の処理に移行する。
ステップS3207では、分散ノード201は、プラグイン操作待機テーブル2730のうちのすべてのレコードを選択したか否かを判定する(ステップS3207)。ここで、未選択のレコードがある場合(ステップS3207:No)、分散ノード201は、ステップS3202の処理に移行する。一方で、すべてのレコードを選択している場合(ステップS3207:Yes)、分散ノード201は、バリア処理を終了する。
(動作例4における追加操作処理手順)
次に、図33を用いて、分散ノード201が実行する、動作例4における追加操作処理手順の一例について説明する。追加操作処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図33は、動作例4における追加操作処理手順の一例を示すフローチャートである。図33において、分散ノード201は、プラグイン管理テーブル2711のリスト2710のうちのプラグイン管理テーブル2711を選択する(ステップS3301)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル2711のIDとが一致するか否かを判定する(ステップS3302)。ここで、一致する場合(ステップS3302:Yes)、分散ノード201は、ステップS3303の処理に移行する。一方で、一致しない場合(ステップS3302:No)、分散ノード201は、ステップS3304の処理に移行する。
ステップS3303では、分散ノード201は、プラグイン管理テーブル2711のプラグイン設定情報に、プラグイン操作待機テーブル2730のレコードに対応する情報を追加する(ステップS3303)。そして、分散ノード201は、追加操作処理を終了する。
ステップS3304では、分散ノード201は、プラグイン管理テーブル2711のリスト2710のうちのすべてのプラグイン管理テーブル2711を選択したか否かを判定する(ステップS3304)。ここで、未選択のプラグイン管理テーブル2711がある場合(ステップS3304:No)、分散ノード201は、ステップS3301の処理に戻る。一方で、すべてのプラグイン管理テーブル2711を選択している場合(ステップS3304:Yes)、分散ノード201は、ステップS3305の処理に移行する。
ステップS3305では、分散ノード201は、新しいプラグイン管理テーブル2711を生成し、プラグイン管理テーブル2711のリスト2710に登録する(ステップS3305)。次に、分散ノード201は、生成したプラグイン管理テーブル2711のIDに制御メッセージのIDを設定する(ステップS3306)。
そして、分散ノード201は、プラグイン管理テーブル2711のプラグイン設定情報に、制御メッセージに対応する情報を追加する(ステップS3307)。その後、分散ノード201は、追加操作処理を終了する。
(動作例4における削除操作処理手順)
次に、図34を用いて、分散ノード201が実行する、動作例4における削除操作処理手順の一例について説明する。削除操作処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図34は、動作例4における削除操作処理手順の一例を示すフローチャートである。図34において、分散ノード201は、プラグイン管理テーブル2711のリスト2710のうちのプラグイン管理テーブル2711を選択する(ステップS3401)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル2711のIDとが一致するか否かを判定する(ステップS3402)。ここで、一致しない場合(ステップS3402:No)、分散ノード201は、ステップS3403の処理に移行する。一方で、一致する場合(ステップS3402:Yes)、分散ノード201は、ステップS3404の処理に移行する。
ステップS3403では、分散ノード201は、プラグイン管理テーブル2711のリスト2710のうちすべてのプラグイン管理テーブル2711を選択したか否かを判定する(ステップS3403)。未選択のプラグイン管理テーブル2711がある場合(ステップS3403:No)、分散ノード201は、ステップS3401の処理に戻る。一方で、すべてのプラグイン管理テーブル2711を選択している場合(ステップS3403:Yes)、分散ノード201は、削除操作処理を終了する。
ステップS3404では、分散ノード201は、プラグイン管理テーブル2711のうちのプラグイン設定情報を選択する(ステップS3404)。
次に、分散ノード201は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する(ステップS3405)。ここで、一致しない場合(ステップS3405:No)、分散ノード201は、ステップS3408の処理に移行する。一方で、一致する場合(ステップS3405:Yes)、分散ノード201は、ステップS3406の処理に移行する。
ステップS3406では、分散ノード201は、削除するプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する(ステップS3406)。ここで、一致しない場合(ステップS3406:No)、分散ノード201は、ステップS3408の処理に移行する。一方で、一致する場合(ステップS3406:Yes)、分散ノード201は、ステップS3407の処理に移行する。
ステップS3407では、分散ノード201は、プラグイン設定情報を削除する(ステップS3407)。そして、分散ノード201は、ステップS3408の処理に移行する。
ステップS3408では、分散ノード201は、プラグイン管理テーブル2711のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS3408)。ここで、未選択のプラグイン設定情報がある場合(ステップS3408:No)、分散ノード201は、ステップS3404の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS3408:Yes)、分散ノード201は、削除操作処理を終了する。
ここで、分散ノード201は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード201は、一部ステップの処理を省略してもよい場合がある。
(並列分散処理システム200の動作例5)
次に、並列分散処理システム200の動作例5について説明する。上述した動作例1~動作例4は、分散ノード201が、特定の記憶領域からプラグインを読み出す動作例である。特定の記憶領域は、例えば、ダウンロード先である。特定の記憶領域は、例えば、分散ノード201とは異なるコンピュータの記憶領域である。
これに対し、動作例5は、分散ノード201が、プラグインを符号化した情報から、プラグインを復号する動作例である。これによれば、動作例5は、複数の分散ノード201が、特定の記憶領域からプラグインを読み出すことによる、特定の記憶領域へのアクセス集中を回避することができる。
まず、図35の説明に移行し、動作例5における並列分散処理システム200の動作の流れについて説明する。
図35は、動作例5における並列分散処理システム200の動作の流れを示す説明図である。動作例5において、並列分散処理システム200は、各種制御メッセージ3500に、プラグインデータを符号化した状態で含むようにする。プラグイン管理テーブル3510は、プラグインデータを符号化したデータから復号されたプラグインデータを記憶する。これにより、並列分散処理システム200は、複数の分散ノード201が、特定の記憶領域からプラグインを読み出すことによるアクセス集中を回避することができる。
次に、図36の説明に移行し、動作例5における各種メッセージの一例について説明した後、図37の説明に移行し、動作例5における各種メッセージを受信する場合についての分散ノード201の具体的な機能的構成例について説明する。
図36は、動作例5における各種メッセージの一例を示す説明図である。動作例5において、並列分散処理システム200は、例えば、イベントメッセージ3601、プラグインを追加する制御メッセージ3602、プラグインの有効期限を変更する制御メッセージ3603、プラグインを更新する制御メッセージ3604を利用する。
イベントメッセージ3601は、図6に示したイベントメッセージ601と同様であるが、プラグインの置き場所についての情報の代わりに、プラグインを符号化したデータを含む。プラグインを追加する制御メッセージ3602は、図6に示したプラグインを追加する制御メッセージ602と同様であるが、プラグインの置き場所についての情報の代わりに、プラグインを符号化したデータを含む。
プラグインを削除する制御メッセージ3603は、図6に示したプラグインを削除する制御メッセージ603と同様であるが、プラグインの置き場所についての情報の代わりに、プラグインを符号化したデータを含む。プラグインを更新する制御メッセージ3604は、図6に示したプラグインを更新する制御メッセージ604と同様であるが、プラグインの置き場所についての情報の代わりに、プラグインを符号化したデータを含む。
図37は、動作例5における分散ノード201の具体的な機能的構成例を示す説明図である。図37に示すように、分散ノード201は、仮想オブジェクトテーブル3721のリスト3720を有する。仮想オブジェクトテーブル3721は、図7に示した仮想オブジェクトテーブル721と同様であるため、説明を省略する。
図37に示すように、分散ノード201は、プラグイン管理テーブル3711のリスト3710を有する。プラグイン管理テーブル3711は、図7に示したプラグイン管理テーブル711や図35に示したプラグイン管理テーブル3510と同様であるため、説明を省略する。
図37に示すように、分散ノード201は、メッセージ判別部3701と、制御メッセージパーサ部3702と、プラグイン管理部3703と、プラグインデコード部3704とを有する。分散ノード201は、イベントメッセージパーサ部3705と、ステート管理部3706と、プラグイン実行部3707とを有する。
メッセージ判別部3701は、図7に示したメッセージ判別部701と同様であるため、説明を省略する。制御メッセージパーサ部3702は、図7に示した制御メッセージパーサ部702と同様であるため、説明を省略する。
プラグイン管理部3703は、プラグインデータを取得する動作以外は、図7に示したプラグイン管理部3703と同様である。プラグイン管理部3703は、プラグインの置き場所に基づきプラグインデータを取得する代わりに、プラグインデコード部3704を介して、プラグインを符号化したデータに基づいて、プラグインデータを取得する。プラグインデコード部3704は、プラグインを符号化したデータから、プラグインデータを復号する。
イベントメッセージパーサ部3705は、図7に示したイベントメッセージパーサ部704と同様であるため、説明を省略する。ステート管理部3706は、図7に示したステート管理部705と同様であるため、説明を省略する。プラグイン実行部3707は、図7に示したプラグイン実行部706と同様であるため、説明を省略する。
これにより、分散ノード201は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。また、並列分散処理システム200は、複数の分散ノード201が、特定の記憶領域からプラグインを読み出すことによる、特定の記憶領域へのアクセス集中を回避することができる。
(動作例5における全体処理手順)
動作例5における全体処理手順は、図8に示した動作例1における全体処理手順と同様であるため、説明を省略する。
(動作例5におけるイベントメッセージ処理手順)
動作例5におけるイベントメッセージ処理手順は、図9に示した動作例1におけるイベントメッセージ処理手順と同様であるため、説明を省略する。
(動作例5におけるプラグイン処理手順)
動作例5におけるプラグイン処理手順は、図10に示した動作例1におけるプラグイン処理手順と同様であるため、説明を省略する。
(動作例5における制御系イベント処理手順)
動作例5における制御系イベント処理手順は、図11に示した動作例1における制御系イベント処理手順と同様であるため、説明を省略する。また、動作例5における制御系イベント処理では、図12に示した動作例1におけるプラグイン追加処理の代わりに、図38に後述する動作例5におけるプラグイン追加処理が呼び出される。
また、動作例5における制御系イベント処理では、図13に示した動作例1におけるプラグイン削除処理の代わりに、図40に後述する動作例5におけるプラグイン削除処理が呼び出される。また、動作例5における制御系イベント処理では、図14に示した動作例1におけるプラグイン更新処理の代わりに、図41に後述する動作例5におけるプラグイン更新処理が呼び出される。
(動作例5におけるプラグイン追加処理手順)
次に、図38を用いて、分散ノード201が実行する、動作例5におけるプラグイン追加処理手順の一例について説明する。プラグイン追加処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図38は、動作例5におけるプラグイン追加処理手順の一例を示すフローチャートである。図38において、分散ノード201は、制御メッセージに対して、図39に後述するデコード処理を実行する(ステップS3801)。次に、分散ノード201は、ステップS3802の処理に移行する。
ステップS3802では、分散ノード201は、プラグイン管理テーブル3711のリスト3710のうちのプラグイン管理テーブル3711を選択する(ステップS3802)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル3711のIDとが一致するか否かを判定する(ステップS3803)。ここで、一致する場合(ステップS3803:Yes)、分散ノード201は、ステップS3804の処理に移行する。一方で、一致しない場合(ステップS3803:No)、分散ノード201は、ステップS3805の処理に移行する。
ステップS3804では、分散ノード201は、プラグイン管理テーブル3711のプラグイン設定情報に、制御メッセージに対応する情報を追加する(ステップS3804)。そして、分散ノード201は、ステップS3808の処理に移行する。
ステップS3805では、分散ノード201は、プラグイン管理テーブル3711のリスト3710のうちのすべてのプラグイン管理テーブル3711を選択したか否かを判定する(ステップS3805)。ここで、未選択のプラグイン管理テーブル3711がある場合(ステップS3805:No)、分散ノード201は、ステップS3802の処理に戻る。一方で、すべてのプラグイン管理テーブル3711を選択している場合(ステップS3805:Yes)、分散ノード201は、ステップS3806の処理に移行する。
ステップS3806では、分散ノード201は、新しいプラグイン管理テーブル3711を生成し、プラグイン管理テーブル3711のリスト3710に登録する(ステップS3806)。次に、分散ノード201は、生成したプラグイン管理テーブル3711のIDに制御メッセージのIDを設定する(ステップS3807)。そして、分散ノード201は、ステップS3808の処理に移行する。
ステップS3808では、分散ノード201は、プラグイン管理テーブル3711のプラグイン設定情報に、制御メッセージに対応する情報を追加する(ステップS3808)。そして、分散ノード201は、プラグイン追加処理を終了する。
(動作例5におけるデコード処理手順)
次に、図39を用いて、分散ノード201が実行する、動作例5におけるデコード処理手順の一例について説明する。デコード処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図39は、動作例5におけるデコード処理手順の一例を示すフローチャートである。図39において、分散ノード201は、制御メッセージから符号化されたプラグインを抽出する(ステップS3901)。次に、分散ノード201は、抽出した符号化されたプラグインから、プラグインを復号する(ステップS3902)。そして、分散ノード201は、デコード処理を終了する。
(動作例5におけるプラグイン削除処理手順)
次に、図40を用いて、分散ノード201が実行する、動作例5におけるプラグイン削除処理手順の一例について説明する。プラグイン削除処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図40は、動作例5におけるプラグイン削除処理手順の一例を示すフローチャートである。図40において、分散ノード201は、制御メッセージに対して、図39に上述したデコード処理を実行する(ステップS4001)。次に、分散ノード201は、ステップS4002の処理に移行する。
ステップS4002では、分散ノード201は、プラグイン管理テーブル3711のリスト3710のうちのプラグイン管理テーブル3711を選択する(ステップS4002)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル3711のIDとが一致するか否かを判定する(ステップS4003)。ここで、一致しない場合(ステップS4003:No)、分散ノード201は、ステップS4004の処理に移行する。一方で、一致する場合(ステップS4003:Yes)、分散ノード201は、ステップS4005の処理に移行する。
ステップS4004では、分散ノード201は、プラグイン管理テーブル3711のリスト3710のうちすべてのプラグイン管理テーブル3711を選択したか否かを判定する(ステップS4004)。ここで、未選択のプラグイン管理テーブル3711がある場合(ステップS4004:No)、分散ノード201は、ステップS4002の処理に戻る。一方で、すべてのプラグイン管理テーブル3711を選択している場合(ステップS4004:Yes)、分散ノード201は、プラグイン削除処理を終了する。
ステップS4005では、分散ノード201は、プラグイン管理テーブル3711のうちのプラグイン設定情報を選択する(ステップS4005)。
次に、分散ノード201は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する(ステップS4006)。ここで、一致しない場合(ステップS4006:No)、分散ノード201は、ステップS4009の処理に移行する。一方で、一致する場合(ステップS4006:Yes)、分散ノード201は、ステップS4007の処理に移行する。
ステップS4007では、分散ノード201は、削除するプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する(ステップS4007)。ここで、一致しない場合(ステップS4007:No)、分散ノード201は、ステップS4009の処理に移行する。一方で、一致する場合(ステップS4007:Yes)、分散ノード201は、ステップS4008の処理に移行する。
ステップS4008では、分散ノード201は、プラグイン設定情報を削除する(ステップS4008)。そして、分散ノード201は、ステップS4009の処理に移行する。
ステップS4009では、分散ノード201は、プラグイン管理テーブル3711のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS4009)。ここで、未選択のプラグイン設定情報がある場合(ステップS4009:No)、分散ノード201は、ステップS4005の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS4009:Yes)、分散ノード201は、プラグイン削除処理を終了する。
(動作例5におけるプラグイン更新処理手順)
次に、図41を用いて、分散ノード201が実行する、動作例5におけるプラグイン更新処理手順の一例について説明する。プラグイン更新処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図41は、動作例5におけるプラグイン更新処理手順の一例を示すフローチャートである。図41において、分散ノード201は、制御メッセージに対して、図39に上述したデコード処理を実行し、更新元のプラグインの実行形式データを取得する(ステップS4101)。
次に、分散ノード201は、制御メッセージに対して、図39に上述したデコード処理を実行し、更新先のプラグインの実行形式データを取得する(ステップS4102)。そして、分散ノード201は、ステップS4103の処理に移行する。
ステップS4103では、分散ノード201は、プラグイン管理テーブル3711のリスト3710のうちのプラグイン管理テーブル3711を選択する(ステップS4103)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル3711のIDとが一致するか否かを判定する(ステップS4104)。ここで、一致しない場合(ステップS4104:No)、分散ノード201は、ステップS4105の処理に移行する。一方で、一致する場合(ステップS4104:Yes)、分散ノード201は、ステップS4106の処理に移行する。
ステップS4105では、分散ノード201は、プラグイン管理テーブル3711のリスト3710のうちすべてのプラグイン管理テーブル3711を選択したか否かを判定する(ステップS4105)。ここで、未選択のプラグイン管理テーブル3711がある場合(ステップS4105:No)、分散ノード201は、ステップS4103の処理に戻る。一方で、すべてのプラグイン管理テーブル3711を選択している場合(ステップS4105:Yes)、分散ノード201は、プラグイン更新処理を終了する。
ステップS4106では、分散ノード201は、プラグイン管理テーブル3711のうちのプラグイン設定情報を選択する(ステップS4106)。
次に、分散ノード201は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する(ステップS4107)。ここで、一致しない場合(ステップS4107:No)、分散ノード201は、ステップS4110の処理に移行する。一方で、一致する場合(ステップS4107:Yes)、分散ノード201は、ステップS4108の処理に移行する。
ステップS4108では、分散ノード201は、更新元のプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する(ステップS4108)。ここで、一致しない場合(ステップS4108:No)、分散ノード201は、ステップS4110の処理に移行する。一方で、一致する場合(ステップS4108:Yes)、分散ノード201は、ステップS4109の処理に移行する。
ステップS4109では、分散ノード201は、プラグイン設定情報のプラグインデータを、更新先のプラグインの実行形式データで更新する(ステップS4109)。そして、分散ノード201は、ステップS4110の処理に移行する。
ステップS4110では、分散ノード201は、プラグイン管理テーブル3711のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS4110)。ここで、未選択のプラグイン設定情報がある場合(ステップS4110:No)、分散ノード201は、ステップS4106の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS4110:Yes)、分散ノード201は、プラグイン更新処理を終了する。
ここで、分散ノード201は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード201は、一部ステップの処理を省略してもよい場合がある。
(並列分散処理システム200の動作例6)
次に、並列分散処理システム200の動作例6について説明する。上述した動作例5は、分散ノード201が、プラグインを符号化した情報から、プラグインを毎回復号する動作例である。
これに対し、動作例6は、分散ノード201が、プラグインを復号した際に、プラグインをキャッシュし、再利用可能にする動作例である。これによれば、動作例6は、同じプラグインを符号化した情報を複数回受け付けた場合に、プラグインの復号による処理量の増大化を抑制することができる。
まず、図42の説明に移行し、動作例6における並列分散処理システム200の動作の流れについて説明する。
図42は、動作例6における並列分散処理システム200の動作の流れを示す説明図である。動作例6において、分散ノード201は、プラグインキャッシュ管理部4201と、プラグインデコード部4202と、プラグインキャッシュ管理テーブル4210を有する。プラグインデコード部4202は、依頼された復号処理を実行する。
プラグインキャッシュ管理部4201は、プラグインを符号化したデータのハッシュ値と対応付けて、プラグインデコード部4202に依頼して復号したプラグインデータを、プラグインキャッシュ管理テーブル4210に記憶しておく。そして、プラグインキャッシュ管理部4201は、新たにデコード対象になったプラグインを符号化したデータのハッシュ値に対応付けて、プラグインキャッシュ管理テーブル4210にプラグインデータが記憶されていれば、当該プラグインデータを取得する。これにより、分散ノード201は、復号を省略することができ、プラグインの復号による処理量の増大化を抑制することができる。
次に、図43の説明に移行し、動作例6における各種メッセージの一例について説明した後、図44の説明に移行し、動作例6における各種メッセージを受信する場合についての分散ノード201の具体的な機能的構成例について説明する。
図43は、動作例6における各種メッセージの一例を示す説明図である。動作例6において、並列分散処理システム200は、例えば、イベントメッセージ4301、プラグインを追加する制御メッセージ4302、プラグインの有効期限を変更する制御メッセージ4303、プラグインを更新する制御メッセージ4304を利用する。
イベントメッセージ4301は、図36に示したイベントメッセージ3601と同様であるため、説明を省略する。プラグインを追加する制御メッセージ4302は、図36に示したプラグインを追加する制御メッセージ3602と同様であるため、説明を省略する。
プラグインを削除する制御メッセージ4303は、図36に示したプラグインを削除する制御メッセージ3603と同様であるため、説明を省略する。プラグインを更新する制御メッセージ4304は、図36に示したプラグインを更新する制御メッセージ3604と同様であるため、説明を省略する。
図44は、動作例6における分散ノード201の具体的な機能的構成例を示す説明図である。図44に示すように、分散ノード201は、仮想オブジェクトテーブル4421のリスト4420を有する。仮想オブジェクトテーブル4421は、図7に示した仮想オブジェクトテーブル721と同様であるため、説明を省略する。
図44に示すように、分散ノード201は、プラグイン管理テーブル4411のリスト4410を有する。プラグイン管理テーブル4411は、図7に示したプラグイン管理テーブル711と同様であるため、説明を省略する。
図44に示すように、分散ノード201は、メッセージ判別部4401と、制御メッセージパーサ部4402と、プラグイン管理部4403と、イベントメッセージパーサ部4404と、ステート管理部4405と、プラグイン実行部4406とを有する。分散ノード201は、さらに、プラグインデコード部4202と、プラグインキャッシュ管理部4201とを有する。
メッセージ判別部4401は、図7に示したメッセージ判別部701と同様であるため、説明を省略する。制御メッセージパーサ部4402は、図7に示した制御メッセージパーサ部702と同様であるため、説明を省略する。
プラグイン管理部4403は、図7に示したプラグイン管理部703と同様である。プラグイン管理部4403は、プラグインの置き場所に基づきプラグインデータを取得する代わりに、プラグインデコード部4202およびプラグインキャッシュ管理部4201を介してプラグインを符号化したデータに基づきプラグインデータを取得する。
プラグインキャッシュ管理部4201は、プラグインを符号化したデータのハッシュ値と対応付けて、プラグインデコード部4202に依頼して復号したプラグインデータを、プラグインキャッシュ管理テーブル4210に記憶しておく。プラグインキャッシュ管理部4201は、新たにデコード対象になったプラグインを符号化したデータのハッシュ値に対応付けて、プラグインキャッシュ管理テーブル4210にプラグインデータが記憶されていれば、当該プラグインデータを取得する。プラグインキャッシュ管理部4201は、プラグインデータを取得した場合、プラグインデコード部4202に復号を省略させる。プラグインデコード部4202は、プラグインを符号化したデータから、プラグインデータを復号する。
イベントメッセージパーサ部4404は、図7に示したイベントメッセージパーサ部704と同様であるため、説明を省略する。ステート管理部4405は、図7に示したステート管理部705と同様であるため、説明を省略する。プラグイン実行部4406は、図7に示したプラグイン実行部706と同様であるため、説明を省略する。
これにより、分散ノード201は、処理プログラムに対してプラグインを追加、削除または更新し、処理プログラムを更新することができる。また、分散ノード201は、プラグインの復号による処理量の増大化を抑制することができる。分散ノード201は、例えば、異なるIDに対して同じプラグインを対応付ける場合のような、同じプラグインを符号化した情報を複数回受け付ける場合に、プラグインの復号による処理量の増大化を抑制することができる。
(動作例6における全体処理手順)
動作例6における全体処理手順は、図8に示した動作例1における全体処理手順と同様であるため、説明を省略する。
(動作例6におけるイベントメッセージ処理手順)
動作例6におけるイベントメッセージ処理手順は、図9に示した動作例1におけるイベントメッセージ処理手順と同様であるため、説明を省略する。
(動作例6におけるプラグイン処理手順)
動作例6におけるプラグイン処理手順は、図10に示した動作例1におけるプラグイン処理手順と同様であるため、説明を省略する。
(動作例6における制御系イベント処理手順)
動作例6における制御系イベント処理手順は、図11に示した動作例1における制御系イベント処理手順と同様であるため、説明を省略する。また、動作例6における制御系イベント処理では、図12に示した動作例1におけるプラグイン追加処理の代わりに、図45に後述する動作例6におけるプラグイン追加処理が呼び出される。
また、動作例6における制御系イベント処理では、図13に示した動作例1におけるプラグイン削除処理の代わりに、図47に後述する動作例6におけるプラグイン削除処理が呼び出される。また、動作例6における制御系イベント処理では、図14に示した動作例1におけるプラグイン更新処理の代わりに、図48に後述する動作例6におけるプラグイン更新処理が呼び出される。
(動作例6におけるプラグイン追加処理手順)
次に、図45を用いて、分散ノード201が実行する、動作例6におけるプラグイン追加処理手順の一例について説明する。プラグイン追加処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図45は、動作例6におけるプラグイン追加処理手順の一例を示すフローチャートである。図45において、分散ノード201は、制御メッセージに対して、図46に後述するキャッシュ処理を実行する(ステップS4501)。次に、分散ノード201は、ステップS4502の処理に移行する。
ステップS4502では、分散ノード201は、プラグイン管理テーブル4411のリスト4410のうちのプラグイン管理テーブル4411を選択する(ステップS4502)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル4411のIDとが一致するか否かを判定する(ステップS4503)。ここで、一致する場合(ステップS4503:Yes)、分散ノード201は、ステップS4504の処理に移行する。一方で、一致しない場合(ステップS4503:No)、分散ノード201は、ステップS4505の処理に移行する。
ステップS4504では、分散ノード201は、プラグイン管理テーブル4411のプラグイン設定情報に、制御メッセージに対応する情報を追加する(ステップS4504)。そして、分散ノード201は、ステップS4508の処理に移行する。
ステップS4505では、分散ノード201は、プラグイン管理テーブル4411のリスト4410のうちのすべてのプラグイン管理テーブル4411を選択したか否かを判定する(ステップS4505)。ここで、未選択のプラグイン管理テーブル4411がある場合(ステップS4505:No)、分散ノード201は、ステップS4502の処理に戻る。一方で、すべてのプラグイン管理テーブル4411を選択している場合(ステップS4505:Yes)、分散ノード201は、ステップS4506の処理に移行する。
ステップS4506では、分散ノード201は、新しいプラグイン管理テーブル4411を生成し、プラグイン管理テーブル4411のリスト4410に登録する(ステップS4506)。次に、分散ノード201は、生成したプラグイン管理テーブル4411のIDに制御メッセージのIDを設定する(ステップS4507)。そして、分散ノード201は、ステップS4508の処理に移行する。
ステップS4508では、分散ノード201は、プラグイン管理テーブル4411のプラグイン設定情報に、制御メッセージに対応する情報を追加する(ステップS4508)。そして、分散ノード201は、プラグイン追加処理を終了する。
(動作例6におけるキャッシュ処理手順)
次に、図46を用いて、分散ノード201が実行する、動作例6におけるキャッシュ処理手順の一例について説明する。キャッシュ処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図46は、動作例6におけるキャッシュ処理手順の一例を示すフローチャートである。図46において、分散ノード201は、制御メッセージに含まれる符号化されたプラグインのダイジェスト値を算出する(ステップS4601)。そして、分散ノード201は、ステップS4602の処理に移行する。
ステップS4602では、分散ノード201は、プラグインキャッシュ管理テーブル4210のうちのレコードを選択する(ステップS4602)。
次に、分散ノード201は、算出したダイジェスト値とレコードのダイジェスト値とが一致するか否かを判定する(ステップS4603)。ここで、一致する場合(ステップS4603:Yes)、分散ノード201は、ステップS4604の処理に移行する。一方で、一致しない場合(ステップS4603:No)、分散ノード201は、ステップS4605の処理に移行する。
ステップS4604では、分散ノード201は、ダイジェスト値に対応するプラグインデータを取得する(ステップS4604)。そして、分散ノード201は、キャッシュ処理を終了する。
ステップS4605では、分散ノード201は、プラグインキャッシュ管理テーブル4210のうちのすべてのレコードを選択したか否かを判定する(ステップS4605)。ここで、未選択のレコードがある場合(ステップS4605:No)、分散ノード201は、ステップS4602の処理に戻る。一方で、すべてのレコードを選択している場合(ステップS4605:Yes)、分散ノード201は、ステップS4606の処理に移行する。
ステップS4606では、分散ノード201は、制御メッセージに対して、図39に上述したデコード処理を実行する(ステップS4606)。
次に、分散ノード201は、プラグインキャッシュ管理テーブル4210に、復号されたプラグインを、復号されたプラグインのダイジェスト値をキーにして登録する(ステップS4607)。そして、分散ノード201は、キャッシュ処理を終了する。
(動作例6におけるプラグイン削除処理手順)
次に、図47を用いて、分散ノード201が実行する、動作例6におけるプラグイン削除処理手順の一例について説明する。プラグイン削除処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図47は、動作例6におけるプラグイン削除処理手順の一例を示すフローチャートである。図47において、分散ノード201は、制御メッセージに対して、図46に上述したキャッシュ処理を実行する(ステップS4701)。次に、分散ノード201は、ステップS4702の処理に移行する。
ステップS4702では、分散ノード201は、プラグイン管理テーブル4411のリスト4410のうちのプラグイン管理テーブル4411を選択する(ステップS4702)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル4411のIDとが一致するか否かを判定する(ステップS4703)。ここで、一致しない場合(ステップS4703:No)、分散ノード201は、ステップS4704の処理に移行する。一方で、一致する場合(ステップS4703:Yes)、分散ノード201は、ステップS4705の処理に移行する。
ステップS4704では、分散ノード201は、プラグイン管理テーブル4411のリスト4410のうちすべてのプラグイン管理テーブル4411を選択したか否かを判定する(ステップS4704)。ここで、未選択のプラグイン管理テーブル4411がある場合(ステップS4704:No)、分散ノード201は、ステップS4702の処理に戻る。一方で、すべてのプラグイン管理テーブル4411を選択している場合(ステップS4704:Yes)、分散ノード201は、プラグイン削除処理を終了する。
ステップS4705では、分散ノード201は、プラグイン管理テーブル4411のうちのプラグイン設定情報を選択する(ステップS4705)。
次に、分散ノード201は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する(ステップS4706)。ここで、一致しない場合(ステップS4706:No)、分散ノード201は、ステップS4709の処理に移行する。一方で、一致する場合(ステップS4706:Yes)、分散ノード201は、ステップS4707の処理に移行する。
ステップS4707では、分散ノード201は、削除するプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する(ステップS4707)。ここで、一致しない場合(ステップS4707:No)、分散ノード201は、ステップS4709の処理に移行する。一方で、一致する場合(ステップS4707:Yes)、分散ノード201は、ステップS4708の処理に移行する。
ステップS4708では、分散ノード201は、プラグイン設定情報を削除する(ステップS4708)。そして、分散ノード201は、ステップS4709の処理に移行する。
ステップS4709では、分散ノード201は、プラグイン管理テーブル4411のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS4709)。ここで、未選択のプラグイン設定情報がある場合(ステップS4709:No)、分散ノード201は、ステップS4705の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS4709:Yes)、分散ノード201は、プラグイン削除処理を終了する。
(動作例6におけるプラグイン更新処理手順)
次に、図48を用いて、分散ノード201が実行する、動作例6におけるプラグイン更新処理手順の一例について説明する。プラグイン更新処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図48は、動作例6におけるプラグイン更新処理手順の一例を示すフローチャートである。図48において、分散ノード201は、制御メッセージに対して、図46に上述したキャッシュ処理を実行し、更新元のプラグインの実行形式データを取得する(ステップS4801)。
次に、分散ノード201は、制御メッセージに対して、図46に上述したキャッシュ処理を実行し、更新先のプラグインの実行形式データを取得する(ステップS4802)。そして、分散ノード201は、ステップS4803の処理に移行する。
ステップS4803では、分散ノード201は、プラグイン管理テーブル4411のリスト4410のうちのプラグイン管理テーブル4411を選択する(ステップS4803)。
次に、分散ノード201は、制御メッセージのIDとプラグイン管理テーブル4411のIDとが一致するか否かを判定する(ステップS4804)。ここで、一致しない場合(ステップS4804:No)、分散ノード201は、ステップS4805の処理に移行する。一方で、一致する場合(ステップS4804:Yes)、分散ノード201は、ステップS4806の処理に移行する。
ステップS4805では、分散ノード201は、プラグイン管理テーブル4411のリスト4410のうちすべてのプラグイン管理テーブル4411を選択したか否かを判定する(ステップS4805)。ここで、未選択のプラグイン管理テーブル4411がある場合(ステップS4805:No)、分散ノード201は、ステップS4803の処理に戻る。一方で、すべてのプラグイン管理テーブル4411を選択している場合(ステップS4805:Yes)、分散ノード201は、プラグイン更新処理を終了する。
ステップS4806では、分散ノード201は、プラグイン管理テーブル4411のうちのプラグイン設定情報を選択する(ステップS4806)。
次に、分散ノード201は、制御メッセージのステート名と、プラグイン設定情報のステート名とが一致するか否かを判定する(ステップS4807)。ここで、一致しない場合(ステップS4807:No)、分散ノード201は、ステップS4810の処理に移行する。一方で、一致する場合(ステップS4807:Yes)、分散ノード201は、ステップS4808の処理に移行する。
ステップS4808では、分散ノード201は、更新元のプラグインの実行形式データと、プラグイン設定情報のプラグインデータとが一致するか否かを判定する(ステップS4808)。ここで、一致しない場合(ステップS4808:No)、分散ノード201は、ステップS4810の処理に移行する。一方で、一致する場合(ステップS4808:Yes)、分散ノード201は、ステップS4809の処理に移行する。
ステップS4809では、分散ノード201は、プラグイン設定情報のプラグインデータを、更新先のプラグインの実行形式データで更新する(ステップS4809)。そして、分散ノード201は、ステップS4810の処理に移行する。
ステップS4810では、分散ノード201は、プラグイン管理テーブル4411のうちのすべてのプラグイン設定情報を選択したか否かを判定する(ステップS4810)。ここで、未選択のプラグイン設定情報がある場合(ステップS4810:No)、分散ノード201は、ステップS4806の処理に戻る。一方で、すべてのプラグイン設定情報を選択している場合(ステップS4810:Yes)、分散ノード201は、プラグイン更新処理を終了する。
ここで、分散ノード201は、一部ステップの処理の順序を入れ替えて実行してもよい場合がある。また、分散ノード201は、一部ステップの処理を省略してもよい場合がある。
(並列分散処理システム200の適用例)
次に、図49~図56を用いて、並列分散処理システム200の適用例について説明する。
図49は、並列分散処理システム200の適用例を示す説明図である。図49に示すように、並列分散処理システム200は、例えば、フレームワークとしてApache Flinkを利用する。並列分散処理システム200は、上述した分散ノード201に対応する計算機4901-1~4901-Nと、マスタノードである計算機4902と、上述した管理ノード202に対応する計算機4903とを含む。以下の説明では、計算機4901-1~4901-Nを区別せずに単に「計算機4901」と表記する場合がある。
計算機4901は、Flink Slave Runtimeを動作させ、分散ノードソフトウェアを動作させる。計算機4901は、Apache Flinkのジョブとして、上述した動作例1~動作例6の動作を実現する。計算機4902は、Flink Slave Runtimeを動作させる。計算機4903は、メッセージキューを有し、イベントメッセージを受け付け、計算機4901に送信する。
計算機4902間は、例えば、クラスタ間通信ネットワーク4910により接続される。計算機4902と計算機4903とは、例えば、クラスタ間通信ネットワーク4910により接続される。次に、図50の説明に移行する。
図50は、適用例におけるメッセージフローを示す説明図である。図50に示すように、計算機4903からイベントメッセージや制御メッセージが、計算機4901に送信される。計算機4901は、文字列解釈ブロック5001と仮想オブジェクトブロック5002とを有する。
文字列解釈ブロック5001は、受け付けたイベントメッセージや制御メッセージの文字列を解釈し、受け付けたイベントメッセージや制御メッセージの宛先を判別する。そして、文字列解釈ブロック5001は、受け付けたイベントメッセージや制御メッセージを、自装置の仮想オブジェクトブロック5002、または他装置の仮想オブジェクトブロック5002に送信する。
仮想オブジェクトブロック5002は、イベントメッセージや制御メッセージを処理する。仮想オブジェクトブロック5002は、具体的には、上述した動作例1~動作例6のいずれかの動作、または、上述した動作例1~動作例6のうちの2以上を組み合わせた動作を実現するように、イベントメッセージや制御メッセージを処理する。次に、図51および図52の説明に移行し、動作例3と動作例6とを組み合わせた動作を実現する機能的構成例について説明する。
図51および図52は、適用例における計算機4901の具体的な機能的構成例を示す説明図である。図51に示すように、文字列解釈ブロック5001は、文字列解釈モジュール5101と、宛先決定モジュール5102とを有する。
文字列解釈ブロック5001は、受け付けたイベントメッセージや制御メッセージのJSON形式の文字列を内部表現に変換し、宛先決定モジュール5102に出力する。宛先決定モジュール5102は、内部表現に基づいて、受け付けたイベントメッセージや制御メッセージの宛先を判別し、自装置の仮想オブジェクトブロック5002、または他装置の仮想オブジェクトブロック5002に送信する。次に、図52の説明に移行する。
図52に示すように、仮想オブジェクトブロック5002は、仮想オブジェクトテーブル5221のリスト5220と、プラグイン管理テーブル5211のリスト5210と、プラグインキャッシュ管理テーブル5230とを有する。
仮想オブジェクトテーブル5221は、図22に示した仮想オブジェクトテーブル2221や図44に示した仮想オブジェクトテーブル4421と同様である。プラグイン管理テーブル5211は、図22に示したプラグイン管理テーブル2211や図44に示したプラグイン管理テーブル4411と同様である。プラグインキャッシュ管理テーブル5230は、図42に示したプラグインキャッシュ管理テーブル4210と同様である。
また、仮想オブジェクトブロック5002は、メッセージ判別部5201と、制御メッセージパーサ部5202と、プラグイン管理部5203と、バリア処理部5204とを有する。また、仮想オブジェクトブロック5002は、プラグインキャッシュ管理部5205と、プラグインデコード部5206とを有する。また、仮想オブジェクトブロック5002は、イベントメッセージパーサ部5207と、ステート管理部5208と、プラグイン実行部5209とを有する。
メッセージ判別部5201は、図22に示したメッセージ判別部2201および図44に示したメッセージ判別部4401と同様に動作する。制御メッセージパーサ部5202は、図22に示した制御メッセージパーサ部2202および図44に示した制御メッセージパーサ部4402と同様に動作する。プラグイン管理部5203は、図22に示したプラグイン管理部2203および図44に示したプラグイン管理部4403と同様に動作する。
バリア処理部5204は、図22に示したバリア処理部2204と同様に動作する。プラグインキャッシュ管理部5205は、図42に示したプラグインキャッシュ管理部4201と同様に動作する。プラグインデコード部5206は、図42に示したプラグインデコード部4202と同様に動作する。
イベントメッセージパーサ部5207は、図22に示したイベントメッセージパーサ部2205および図44に示したイベントメッセージパーサ部4404と同様に動作する。ステート管理部5208は、図22に示したステート管理部2206および図44に示したステート管理部4405と同様に動作する。プラグイン実行部5209は、図22に示したプラグイン実行部2207および図44に示したプラグイン実行部4406と同様に動作する。次に、図53~図56の説明に移行し、各種メッセージの具体例について説明する。
図53は、適用例におけるイベントメッセージ5300の具体例を示す説明図である。イベントメッセージ5300は、イベントメッセージ601と同様に、IDと、時刻と、種別と、1以上のステートとのフィールドを有する。
図53の“id”はIDのフィールドに対応する。図53の“lat”、“lon”、“speed”はステートのフィールドに対応し、ステート名を表す。図53の“time”は時刻のフィールドに対応する。図53の“type”は種別のフィールドに対応する。次に、図54の説明に移行する。
図54は、適用例におけるプラグインを追加する制御メッセージ5400の具体例を示す説明図である。制御メッセージ5400は、制御メッセージ2102や制御メッセージ4302を統合したメッセージに対応する。制御メッセージ5400は、IDと、時刻と、種別と、対象ステート名と、追加するプラグインを符号化したデータと、開始時間と、終了時間とのフィールドを有する。
図54の“end”は終了時間のフィールドに対応する。“-1”は終了時間が未定を示す。図54の“id”はIDのフィールドに対応する。図54の“plugin_data”は追加するプラグインを符号化したデータのフィールドに対応する。図54の“start”は開始時間のフィールドに対応する。図54の“target_state_name”は対象ステート名のフィールドに対応する。図54の“time”は時刻のフィールドに対応する。図54の“type”は種別のフィールドに対応する。次に、図55の説明に移行する。
図55は、適用例におけるプラグインの有効期限を変更する制御メッセージ5500の具体例を示す説明図である。制御メッセージ5500は、制御メッセージ2103や制御メッセージ4303を統合したメッセージに対応する。制御メッセージ5500は、IDと、時刻と、種別と、対象ステート名と、有効期限を変更するプラグインを符号化したデータと、終了時間とのフィールドを有する。
図55の“end”は終了時間のフィールドに対応する。図55の“id”はIDのフィールドに対応する。図55の“plugin_data”は有効期限を変更するプラグインを符号化したデータのフィールドに対応する。図55の“target_state_name”は対象ステート名のフィールドに対応する。図55の“time”は時刻のフィールドに対応する。図55の“type”は種別のフィールドに対応する。次に、図56の説明に移行する。
図56は、適用例におけるプラグインを更新する制御メッセージ5600の具体例を示す説明図である。制御メッセージ5600は、制御メッセージ2104や制御メッセージ4304を統合したメッセージに対応する。制御メッセージ5600は、IDと、時刻と、種別と、対象ステート名と、更新対象のプラグインを符号化したデータと、新しいプラグインを符号化したデータと、開始時間と、終了時間とのフィールドを有する。
図56の“type”は種別のフィールドに対応する。図56の“id”はIDのフィールドに対応する。図56の“time”は時刻のフィールドに対応する。図56の“start”は開始時間のフィールドに対応する。図56の“end”は終了時間のフィールドに対応する。図56の“target_state_name”は対象ステート名のフィールドに対応する。図56の“old_plugin_data”は更新対象のプラグインを符号化したデータのフィールドに対応する。図56の“new_plugin_data”は新しいプラグインを符号化したデータのフィールドに対応する。
図57は、並列分散処理システム200の応用的な適用例を示す説明図である。図57に示すように、計算機4901は、仮想オブジェクトブロックを複数有する場合があってもよい。図57の例では、計算機4901は、文字列解釈ブロック5701と仮想オブジェクトブロック5702と仮想オブジェクトブロック5703とを有する。文字列解釈ブロック5701は、図50に示した文字列解釈ブロック5001と同様であるが、各種メッセージを、直接、仮想オブジェクトブロック5703に入力可能である。仮想オブジェクトブロック5702は、イベントメッセージを生成し、仮想オブジェクトブロック5703に入力可能である。
具体的には、並列分散処理システム200が、自動車を監視するIoTシステムを実現する場合が考えられる。この場合、前段の各仮想オブジェクトブロック5702は、個々の自動車の端末装置で発生したイベントデータを処理する。前段の各仮想オブジェクトブロック5702は、例えば、各自動車の現在の位置と速度、位置と速度の履歴などの情報をステートとして記憶する。
後段の仮想オブジェクトブロック5703は、特定の条件に該当する自動車を集計するサービスに対応し、前段の各仮想オブジェクトブロック5702で発生したイベントデータを処理する。後段の仮想オブジェクトブロック5703は、例えば、前段の各仮想オブジェクトブロック5702から連続運転時間を示すイベントデータを受け付け、連続運転時間が4時間を超える自動車を検出し、運転手に警告を送る。
以上説明したように、情報処理装置100によれば、制御メッセージ120を受信することができる。情報処理装置100によれば、制御メッセージ120を受信した場合、受信した制御メッセージ120から特定されるイベントの種別を示す情報とプラグイン130とを対応付けて記憶部110に記憶することができる。情報処理装置100によれば、イベントメッセージ140を受信することができる。情報処理装置100によれば、イベントメッセージ140を受信した場合、受信したイベントメッセージ140から特定されるイベントの種別を示す情報に対応付けて記憶部110に記憶されたプラグイン130を実行することができる。これにより、情報処理装置100は、制御メッセージ120を受信したことに応じて処理プログラムに新たなプラグイン130を追加し、処理プログラムを更新することができる。
情報処理装置100によれば、受信した制御メッセージ120から特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグイン130とを対応付けて記憶部110に記憶することができる。情報処理装置100によれば、受信したイベントメッセージ140から特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて記憶部110に記憶されたプラグイン130を実行することができる。これにより、情報処理装置100は、イベントの発生元ごとに、同じ種別のイベントについて異なるプラグインを実行可能にすることができる。
情報処理装置100によれば、削除するプラグイン130についての第2制御メッセージを受信することができる。情報処理装置100によれば、第2制御メッセージから特定されるプラグイン130を削除することができる。これにより、情報処理装置100は、制御メッセージ120を受信したことに応じて処理プログラムからプラグイン130を削除し、処理プログラムを更新することができる。
情報処理装置100によれば、受信した制御メッセージ120から特定されるプラグイン130が有効な期間を記憶部110に記憶することができる。情報処理装置100によれば、記憶部110に記憶されたプラグイン130が有効な期間に、イベントメッセージ140から特定されるイベントが発生した時点が含まれれば、当該プラグイン130を実行することができる。これにより、情報処理装置100は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの到着順が入れ替わった場合にも、処理の不整合を防止することができる。
情報処理装置100によれば、記憶部110に記憶されたプラグイン130が有効な期間より、受信したイベントメッセージ140から特定されるイベントが発生した時点が後であれば、当該プラグイン130を削除することができる。これにより、情報処理装置100は、処理プログラムからプラグイン130を削除し、処理プログラムを更新することができる。
情報処理装置100によれば、定期的に発行される同期メッセージを受信した場合、記憶部110の記憶内容をバックアップすることができる。情報処理装置100によれば、バックアップ後、記憶部110に記憶されたプラグイン130が有効な期間より、最後に受信したイベントメッセージ140から特定されるイベントが発生した時点が後であれば、当該プラグイン130を削除することができる。これにより、情報処理装置100は、バックアップを正常に実施し、巻き戻し可能にすることができる。
情報処理装置100によれば、バックアップ後、受信した制御メッセージ120から特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグイン130とを対応付けて記憶部110に記憶することができる。これにより、情報処理装置100は、ネットワーク遅延などの原因で、イベントメッセージと制御メッセージとの到着順が入れ替わった場合にも、処理の不整合を防止することができる。
情報処理装置100によれば、削除するプラグイン130についての第2制御メッセージを受信することができる。情報処理装置100によれば、第2制御メッセージを受信した場合、同期メッセージを受信し、記憶部110の記憶内容をバックアップした後に、プラグイン130を削除することができる。これにより、情報処理装置100は、処理プログラムからプラグイン130を削除し、処理プログラムを更新することができる。
情報処理装置100によれば、プラグイン130に関する情報として、プラグイン130を記憶した記憶領域のアドレスを利用することができる。これにより、情報処理装置100は、プラグイン130を取得することができ、制御メッセージ120のデータ量の増大化を抑制することができる。
情報処理装置100によれば、プラグイン130に関する情報として、プラグイン130を符号化した情報を利用することができる。これにより、情報処理装置100は、プラグイン130を取得する際に、アクセス集中を回避することができる。
情報処理装置100によれば、復号したプラグイン130を、ダイジェスト値と対応付けてキャッシュすることができる。これにより、情報処理装置100は、プラグイン130を再利用可能にし、復号にかかる処理量の低減化を図ることができる。
情報処理装置100は、並列分散処理システムに含まれる複数のノードのいずれかのノードのコンピュータとして動作することができる。情報処理装置100は、イベントメッセージ140を収集して複数のノードのいずれかのノードに送信するコンピュータから複数のノードに一斉に送信された制御メッセージ120を受信することができる。これにより、情報処理装置100は、処理の不整合が発生しないようにすることができる。
なお、本実施の形態で説明したイベント処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本実施の形態で説明した処理プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本実施の形態で説明した処理プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す制御メッセージを受信した場合、受信した前記制御メッセージから特定されるイベントの種別を示す情報とプラグインとを対応付けて記憶部に記憶し、
イベントの種別を示す情報を表すイベントメッセージを受信した場合、受信した前記イベントメッセージから特定されるイベントの種別を示す情報に対応付けて前記記憶部に記憶されたプラグインを実行する、
処理を実行させることを特徴とする処理プログラム。
(付記2)前記制御メッセージは、さらに、イベントの発生元を識別する情報を表し、
前記イベントメッセージは、さらに、イベントの発生元を識別する情報を表し、
前記記憶する処理は、前記制御メッセージを受信した場合、受信した前記制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグインとを対応付けて前記記憶部に記憶し、
前記実行する処理は、前記イベントメッセージを受信した場合、受信した前記イベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインを実行する、ことを特徴とする付記1に記載の処理プログラム。
(付記3)前記コンピュータに、
イベントの発生元を識別する情報、プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す第2制御メッセージを受信した場合、受信した前記第2制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが、前記第2制御メッセージから特定されるプラグインと一致すれば、当該プラグインを削除する、処理を実行させることを特徴とする付記2に記載の処理プログラム。
(付記4)前記制御メッセージは、さらに、プラグインが有効な期間を示す情報を表し、
前記イベントメッセージは、さらに、イベントが発生した時点を示す情報を表し、
前記記憶する処理は、受信した前記制御メッセージから特定される、イベントの発生元を識別する情報と、イベントの種別を示す情報と、プラグインと、当該プラグインが有効な期間を対応付けて前記記憶部に記憶し、
前記実行する処理は、受信した前記イベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが有効な期間に、前記イベントメッセージから特定されるイベントが発生した時点が含まれれば、当該プラグインを実行する、ことを特徴とする付記2に記載の処理プログラム。
(付記5)前記コンピュータに、
受信した前記イベントメッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが有効な期間より、前記イベントメッセージから特定されるイベントが発生した時点が後であれば、当該プラグインを削除する、処理を実行させることを特徴とする付記4に記載の処理プログラム。
(付記6)前記コンピュータに、
定期的に発行される同期メッセージを受信した場合、前記記憶部の記憶内容をバックアップした後、前記記憶部に記憶されたプラグインが有効な期間より、最後に受信した前記イベントメッセージから特定されるイベントが発生した時点が後であれば、当該プラグインを削除する、処理を実行させることを特徴とする付記4に記載の処理プログラム。
(付記7)前記記憶する処理は、前記制御メッセージを受信した場合、定期的に発行される同期メッセージを受信し、前記記憶部の記憶内容をバックアップした後に、受信した前記制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とプラグインとを対応付けて前記記憶部に記憶する、ことを特徴とする付記2に記載の処理プログラム。
(付記8)前記コンピュータに、
イベントの発生元を識別する情報、プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す第2制御メッセージを受信した場合、前記同期メッセージを受信し、前記記憶部の記憶内容をバックアップした後に、受信した前記第2制御メッセージから特定されるイベントの発生元を識別する情報とイベントの種別を示す情報とに対応付けて前記記憶部に記憶されたプラグインが、前記第2制御メッセージから特定されるプラグインと一致すれば、当該プラグインを削除する、処理を実行させることを特徴とする付記7に記載の処理プログラム。
(付記9)前記プラグインに関する情報は、前記プラグインを記憶した記憶領域のアドレスである、ことを特徴とする付記2~8のいずれか一つに記載の処理プログラム。
(付記10)前記プラグインに関する情報は、前記プラグインを符号化した情報であり、
前記コンピュータに、
前記制御メッセージを受信した場合、受信した前記制御メッセージに含まれるプラグインを符号化した情報から、当該プラグインを復号する、処理を実行させ、
前記記憶する処理は、受信した前記制御メッセージに含まれるイベントの発生元を識別する情報とイベントの種別を示す情報と復号したプラグインとを対応付けて前記記憶部に記憶する、ことを特徴とする付記2~8のいずれか一つに記載の処理プログラム。
(付記11)前記復号する処理は、前記制御メッセージを受信した場合、受信した前記制御メッセージに含まれるプラグインを符号化した情報から算出されるダイジェスト値が第2記憶部に記憶されていなければ、当該プラグインを復号し、当該ダイジェスト値と対応付けて前記第2記憶部に記憶し、前記第2記憶部に記憶されていれば、前記第2記憶部から当該プラグインを取得する、ことを特徴とする付記10に記載の処理プログラム。
(付記12)前記コンピュータは、並列分散処理システムに含まれる複数のノードのいずれかのノードのコンピュータであり、
前記コンピュータに、前記イベントメッセージを収集して前記複数のノードのいずれかのノードに送信する情報処理装置から前記複数のノードに一斉に送信された前記制御メッセージを受信する、処理を実行させることを特徴とする付記1~11のいずれか一つに記載の処理プログラム。
(付記13)コンピュータが、
プラグインの実行条件になるイベントの種別を示す情報、および当該プラグインに関する情報を対応付けて表す制御メッセージを受信した場合、受信した前記制御メッセージから特定されるイベントの種別を示す情報とプラグインとを対応付けて記憶部に記憶し、
イベントの種別を示す情報を表すイベントメッセージを受信した場合、受信した前記イベントメッセージから特定されるイベントの種別を示す情報に対応付けて前記記憶部に記憶されたプラグインを実行する、
処理を実行することを特徴とするイベント処理方法。