(57)【要約】【課題】所定の順序で実行される複数の処理のうち、一部の処理に変更があった場合でも、簡易に処理インスタンスを配備すること。【解決手段】サーバノード１は、所定の順序で実行される複数の処理のそれぞれの処理インスタンスが配備された複数のノードにおける処理が変更された場合に、変更された処理の変更内容に応じて、複数の処理の中から再配備の対象の処理を特定する特定部６ｂを有する。サーバノード１は、特定部６ｂにより特定された処理の処理インスタンスを生成する生成部６ｃを有する．サーバノード１は、複数のノードの中から、生成部６ｃにより生成された処理インスタンスを配備するノードを特定し、特定したノードに、生成部６ｃにより生成された処理インスタンスを配備する配備部６ｄを有する。【選択図】図１０
2015115013.tif 000002
【特許請求の範囲】
【請求項１】
所定の順序で実行される複数の処理のそれぞれの処理インスタンスが配備された複数のノードにおける前記処理が変更された場合に、変更された該処理の変更内容に応じて、前記複数の処理の中から再配備の対象の処理を特定する特定部と、
前記特定部により特定された処理の処理インスタンスを生成する生成部と、
前記複数のノードの中から、前記生成部により生成された処理インスタンスを配備するノードを特定し、特定したノードに、前記生成部により生成された処理インスタンスを配備する配備部と、
を有することを特徴とする分散配備装置。
【請求項２】
前記複数の処理のそれぞれは、処理対象のデータに対して所定の単位ごとに所定の処理を実行し、
前記特定部は、前記変更された処理が、処理対象のデータに対して前記所定の単位とは異なる単位で、前記所定の処理とは異なる処理を実行する場合には、前記複数の処理の中から、前記変更された処理以降に実行される処理を特定する
ことを特徴とする請求項１に記載の分散配備装置。
【請求項３】
前記特定部は、前記変更された処理が、処理対象のデータに対して前記所定の単位とは異なる単位で、前記所定の処理を実行する場合には、前記複数の処理の中から、前記変更された処理を特定する
ことを特徴とする請求項２に記載の分散配備装置。
【請求項４】
前記特定部は、前記変更された処理が、処理対象のデータに対して前記所定の単位で、前記所定の処理とは異なる処理を実行する場合には、前記複数の処理の中から、前記変更された処理よりも後に実行される処理を特定する
ことを特徴とする請求項２または３に記載の分散配備装置。
【請求項５】
前記特定部は、前記変更された処理が、処理対象のデータに対して前記所定の単位で、前記所定の処理を実行する場合には、前記複数の処理の中からいずれの処理も特定しない
ことを特徴とする請求項２〜４のいずれか１項に記載の分散配備装置。
【請求項６】
コンピュータに、
所定の順序で実行される複数の処理のそれぞれの処理インスタンスが配備された複数のノードにおける前記処理が変更された場合に、変更された該処理の変更内容に応じて、前記複数の処理の中から再配備の対象の処理を特定し、
特定された処理の処理インスタンスを生成し、
前記複数のノードの中から、生成された処理インスタンスを配備するノードを特定し、特定したノードに、前記生成された処理インスタンスを配備する
処理を実行させることを特徴とする分散配備プログラム。
【請求項７】
コンピュータが、
所定の順序で実行される複数の処理のそれぞれの処理インスタンスが配備された複数のノードにおける前記処理が変更された場合に、変更された該処理の変更内容に応じて、前記複数の処理の中から再配備の対象の処理を特定し、
特定された処理の処理インスタンスを生成し、
前記複数のノードの中から、生成された処理インスタンスを配備するノードを特定し、特定したノードに、前記生成された処理インスタンスを配備する
処理を実行することを特徴とする分散配備方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散配備装置、分散配備方法及び分散配備プログラムに関する。
【背景技術】
【０００２】
センサノードによってセンシングされたセンシングデータをイベントとして採取するセンサネットワークが知られている。かかるセンサネットワークを介してサーバノードに採取されたイベントに応じて各種のサービス、例えばアラートの発信や機器の制御などが提供される。
【０００３】
このように、センサノードからのイベントをサーバノードに収集させる場合には、全てのイベントがサーバノードに集中して通知されることになる。このため、サーバノードの処理の負荷が増大するとともに、ネットワークのトラフィックの増加に伴ってネットワーク帯域も逼迫する。また、センサネットワークにおいては、あるセンサノードの処理量を、他のセンサノードの処理量よりも低くするなどの所定の制約条件がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２６９２５０号公報
【特許文献２】特開２０１２−１７５４１８号公報
【特許文献３】特開平７−２６２１１５号公報
【特許文献４】特開平１１−３４５２５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここで、サーバノードの負荷とネットワークトラフィックを抑制しつつ、所定の制約条件を満たすように、センサノードやイベントを中継する中継ノードなどの下位ノードに配備する処理インスタンスを決定する技術の一例として、以下のような技術が考えられる。例えば、下位ノードに配備する処理インスタンスを決定する技術は、まず、イベントの発生状況やセンサネットワークのトポロジに応じてイベントの収集経路を決定する。そして、下位ノードに配備する処理インスタンスを決定する技術は、決定した収集経路に基づいて、下位ノードと、下位ノードに対して配備された、イベントを処理する処理インスタンスとの全ての組合せについて、次のような処理を行う。すなわち、下位ノードの配備する処理インスタンスを決定する技術は、全ての組合せについて、サーバノードの負荷を示す第１の評価値と、ネットワークトラフィックを示す第２の評価値と、所定の制約条件のうち違反した条件の数を示す第３の評価値とを算出する。そして、下位ノードに配備する処理インスタンスを決定する技術は、第１の評価値と、第２の評価値と、第３の評価値とに基づいて、下位ノードに配備する処理インスタンスを決定する。
【０００６】
上述した下位ノードに配備する処理インスタンスを決定する技術では、収集経路上に処理インスタンスを配備するために、所定の順序で実行される複数のモジュールのそれぞれを処理対象のデータ毎に論理的に分割した処理インスタンスを生成する。そして、下位ノードに配備する処理インスタンスを生成する技術では、生成した処理インスタンスの処理対象データと、収集経路上のデータの流れとを見比べて、処理インスタンスを配備すべきノードを決定する。
【０００７】
ここで、下位ノードに配備する処理インスタンスを決定する技術では、処理インスタンスを生成する際に、各モジュールの入出力データを表すログを解析することにより、各モジュールを分割する分割数を算出する。ここで、各モジュールの入力データの一例としては、各モジュールに入力されるイベントが挙げられ、各モジュールの出力データの一例としては、各モジュールによって加工されたイベントが挙げられる。そして、下位ノードに配備する処理インスタンスを決定する技術では、モジュールごとに、分割数分の処理インスタンスを生成し、処理インスタンスの接続関係を示すインスタンスフローを生成し、インスタンスフローを用いて処理インスタンスの配備先のノードを決定する。そして、下位ノードに配備する処理インスタンスを決定する技術では、決定された配備先のノードに、処理インスタンスを配備する。
【０００８】
このように、インスタンスフローを生成する際には、実際に各モジュールを実行させて各モジュールの入出力データを表すログを解析する必要があり、多大な時間がかかる。
【０００９】
ここで、一部のモジュールを変更する時には、変更モジュールが変えた出力データの影響によって、変更部より後に実行するモジュール間の入出力関係が変わるか解析する必要がある。また、変更部より前に実行するモジュールは前記解析のために変更モジュールの入力データを作る必要がある。このため、複数のモジュールのうち一部のモジュールに変更があった場合でも、実際に全てのモジュールを実行させて全てのモジュールの入出力データを表すログを解析してインスタンスフローを生成し、インスタンスフローを用いて処理インスタンスの配備先を決定する。このため、一部のモジュールに変更があった場合であっても、全てのモジュールの入出力データを表すログを解析対象とするので、多大な時間がかかるという問題がある。
【００１０】
１つの側面では、本発明は、所定の順序で実行される複数の処理のうち、一部の処理に変更があった場合でも、簡易に処理インスタンスを配備することができる分散配備装置、分散配備方法及び分散配備プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
分散配備装置は、所定の順序で実行される複数の処理のそれぞれの処理インスタンスが配備された複数のノードにおける前記処理が変更された場合に、変更された該処理の変更内容に応じて、前記複数の処理の中から再配備の対象の処理を特定する特定部を有する。分散配備装置は、前記特定部により特定された処理の処理インスタンスを生成する生成部を有する．分散配備装置は、前記複数のノードの中から、前記生成部により生成された処理インスタンスを配備するノードを特定し、特定したノードに、前記生成部により生成された処理インスタンスを配備する配備部を有する。
【発明の効果】
【００１２】
所定の順序で実行される複数の処理のうち、一部の処理に変更があった場合でも、簡易に処理インスタンスを配備することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例に係るセンサネットワークシステムのシステム構成の一例を示す図である。
【図２】図２は、開発されたアプリケーションの一例を示す図である。
【図３】図３は、図２の例に示すアプリケーションとともに、サーバノードに送信されるアプリケーション定義データの一例を示す図である。
【図４】図４は、イベントを加工する処理が変更されたかどうかを開発者に問い合わせるための画面の一例を示す図である。
【図５】図５は、変更されたアプリケーションの一例を示す図である。
【図６Ａ】図６Ａは、アプリケーション定義データの登録方法を説明するための図である。
【図６Ｂ】図６Ｂは、アプリケーション定義データの登録方法を説明するための図である。
【図６Ｃ】図６Ｃは、アプリケーション定義データの登録方法を説明するための図である。
【図７Ａ】図７Ａは、アプリケーション定義データの登録方法を説明するための図である。
【図７Ｂ】図７Ｂは、アプリケーション定義データの登録方法を説明するための図である。
【図７Ｃ】図７Ｃは、アプリケーション定義データの登録方法を説明するための図である。
【図８Ａ】図８Ａは、アプリケーション定義データの登録方法を説明するための図である。
【図８Ｂ】図８Ｂは、アプリケーション定義データの登録方法を説明するための図である。
【図８Ｃ】図８Ｃは、アプリケーション定義データの登録方法を説明するための図である。
【図９Ａ】図９Ａは、アプリケーション定義データの登録方法を説明するための図である。
【図９Ｂ】図９Ｂは、アプリケーション定義データの登録方法を説明するための図である。
【図９Ｃ】図９Ｃは、アプリケーション定義データの登録方法を説明するための図である。
【図１０】図１０は、実施例に係るサーバノードの機能構成の一例を示すブロック図である。
【図１１】図１１は、アプリケーションの変更前後のインスタンスフロー及び処理インスタンスの配備先の一例を示す図である。
【図１２】図１２は、アプリケーションの変更前後のインスタンスフロー及び処理インスタンスの配備先の一例を示す図である。
【図１３】図１３は、アプリケーションの変更前後のインスタンスフロー及び処理インスタンスの配備先の一例を示す図である。
【図１４】図１４は、アプリケーションの変更前後のインスタンスフロー及び処理インスタンスの配備先の一例を示す図である。
【図１５】図１５は、実施例に係るセンサノードの機能構成の一例を示すブロック図である。
【図１６】図１６は、実施例に係るＧＷノードの機能構成の一例を示すブロック図である。
【図１７】図１７は、実施例に係る分散配備処理の手順を示すフローチャートである。
【図１８】図１８は、分散配備プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示する分散配備装置の一例であるサーバノード、分散配備プログラム及び分散配備方法の実施例を図面に基づいて詳細に説明する。なお、実施例は開示の技術を限定するものではない。
【実施例】
【００１５】
［実施例に係るセンサネットワークシステムのシステム構成の一例］
図１は、実施例に係るセンサネットワークシステムのシステム構成の一例を示す図である。図１に示すセンサネットワークシステム１０は、イベントを加工する処理を行う各種の処理インスタンス（モジュール）をどのノード（センサノード、ＧＷノード、サーバノード）に配備するかを決定するシステムである。ここでいうイベントとは、センサノードによってセンシングされたデータ、または、センシングされたデータが加工処理されたデータを指す。
【００１６】
図１の例に示すように、センサネットワークシステム１０は、サーバノード１と、５つのセンサノード２１ａ〜２１ｅと、４つのＧＷ（GateWay）ノード２２ａ〜２２ｄとを有する。図１の例では、センサノード２１ａ，２１ｂと、ＧＷノード２２ａとが通信可能に接続される。また、センサノード２１ｃ，２１ｄ，２１ｅと、ＧＷノード２２ｂとが通信可能に接続される。また、ＧＷノード２２ａ，２２ｂと、ＧＷノード２２ｃとが通信可能に接続される。また、ＧＷノード２２ｃと、ＧＷノード２２ｄとが通信可能に接続される。
【００１７】
また、図１の例では、サーバノード１とＧＷノード２２ｄとがネットワーク２３を介して通信可能に接続される。ネットワーク２３の一例としては、有線または無線を問わず、インターネット（internet）、ＬＡＮ（Local  Area  Network）やＶＰＮ（Virtual  Private  Network）などの通信網が挙げられる。なお、図１では、センサネットワークシステム１０が、５つのセンサノード２１ａ〜２１ｅを有する場合を例示したが、センサネットワークシステム１０は、任意の数のセンサノードを有することができる。また、以下の説明では、５つのセンサノード２１ａ〜２１ｅを区別することなく総称する場合には、単に、「センサノード２１」と表記する。また、図１の例では、センサネットワークシステム１０が、４つのＧＷノード２２ａ〜２２ｄを有する場合を例示したが、センサネットワークシステム１０は、任意の数のＧＷノードを有することができる。また、以下の説明では、４つのＧＷノード２２ａ〜２２ｄを区別することなく総称する場合には、単に、「ＧＷノード２２」と表記する。
【００１８】
また、図１の例では、サーバノード１と、端末９９とが通信可能に接続される。端末９９は、センサネットワークシステム１０で実行される複数のモジュールを含むアプリケーションを開発者が開発や変更するための開発環境における端末である。開発者が端末９９を操作することによりアプリケーションを開発したり、開発済みのアプリケーションを変更したりする。そして、端末９９は、開発されたアプリケーションや、変更されたアプリケーションをサーバノード１に送信する。
【００１９】
また、端末９９は、アプリケーションをサーバノード１に送信する際に、アプリケーションとともに、アプリケーション定義データをサーバノード１に送信する。ここで、アプリケーション定義データについて説明する。
【００２０】
図２は、開発されたアプリケーションの一例を示す図である。また、図３は、図２の例に示すアプリケーションとともに、サーバノードに送信されるアプリケーション定義データの一例を示す図である。
【００２１】
図２に示すアプリケーションは、所定の順序で実行される３つのモジュールを有する。１番目に実行されるモジュールは、従業員単位で、業務で使用するＰＣ（Personal  Computer）などの各種の機器の消費電力を取得するモジュールであり、名称が「電力取得１」である。１番目に実行されるモジュールの次に実行されるモジュール、すなわち、２番目に実行されるモジュールは、会社の部署単位で、各部署に属する従業員の消費電力を集計するモジュールであり、名称が「電力集計２」である。２番目に実行されるモジュールの次に実行されるモジュール、すなわち、３番目に実行されるモジュールは、会社単位で、部署単位で集計された消費電力を集計するモジュールであり、名称が「電力集計３」である。図２に示すようなアプリケーションが開発された場合には、端末９９は、図２に示すアプリケーションとともに、図３に示すアプリケーション定義データをサーバノード１に送信する。
【００２２】
図３の例に示すアプリケーション定義データは、「処理名」、「入力型」、「出力型」、「集約キー名」、「モジュール」、「処理設定」、「処理変更」、「集約キー変更」の各項目を有する。これらの各項目には、アプリケーションを開発した開発者などが端末９９を操作することにより各種の内容が登録されたり、端末９９がアプリケーションの変更を検知したときに各種の内容が登録される。
【００２３】
「処理名」の項目には、開発したアプリケーションに含まれる、所定の順序で実行される複数のモジュールのそれぞれの名称が開発者などにより登録される。図３の例は、アプリケーション定義データの１番目のレコードの「処理名」の項目に、開発したアプリケーションに含まれる１番目に実行されるモジュールの名称「電力取得１」が登録された場合を示す。また、図３の例は、アプリケーション定義データの２番目のレコードの「処理名」の項目に、開発したアプリケーションに含まれる２番目に実行されるモジュールの名称「電力集計２」が登録された場合を示す。また、図３の例は、アプリケーション定義データの３番目のレコードの「処理名」の項目に、開発したアプリケーションに含まれる３番目に実行されるモジュールの名称「電力集計３」が登録された場合を示す。
【００２４】
「入力型」の項目には、「処理名」の項目に名称が登録されたモジュールの入力となるイベントの型が開発者などにより登録される。図３の例は、アプリケーション定義データの１番目のレコードの「入力型」の項目に、イベントの型「センサ電力」が登録された場合を示す。ここで、「センサ電力」は、名称が「電力取得１」であるモジュールの入力となるイベントの型であり、センサによって検出されて出力された、従業員の消費電力を含むイベントの型である。また、図３の例は、アプリケーション定義データの２番目のレコードの「入力型」の項目に、イベントの型「集計電力１」が登録された場合を示す。ここで、「集計電力１」は、名称が「電力集計２」であるモジュールの入力となるイベントの型であり、名称が「電力取得１」であるモジュールによって加工されたイベントの型である。また、図３の例は、アプリケーション定義データの３番目のレコードの「入力型」の項目に、イベントの型「集計電力２」が登録された場合を示す。ここで、「集計電力２」は、名称が「電力集計３」であるモジュールの入力となるイベントの型であり、名称が「電力集計２」であるモジュールによって加工されたイベントの型である。
【００２５】
「出力型」の項目には、「処理名」の項目に名称が登録されたモジュールによって実行された処理の出力となるイベントの型が開発者などにより登録される。図３の例は、アプリケーション定義データの１番目のレコードの「出力型」の項目に、イベントの型「集計電力１」が登録された場合を示す。この「集計電力１」は、名称が「電力取得１」であるモジュールによって加工されたイベントの型である。また、図３の例は、アプリケーション定義データの２番目のレコードの「出力型」の項目に、イベントの型「集計電力２」が登録された場合を示す。この「集計電力２」は、名称が「電力集計２」であるモジュールによって加工されたイベントの型である。また、図３の例は、アプリケーション定義データの３番目のレコードの「出力型」の項目に、イベントの型「集計電力結果」が登録された場合を示す。この「集計電力結果」は、名称が「電力集計３」であるモジュールによって加工されたイベントの型である。
【００２６】
「集約キー名」の項目には、「処理名」の項目に名称が登録されたモジュールによって実行される処理における処理単位を示すキーが開発者などにより登録される。図３の例は、アプリケーション定義データの１番目のレコードの「集約キー名」の項目に、従業員ＩＤが登録された場合を示す。すなわち、図３の例に示すアプリケーション定義データの１番目のレコードの「集約キー名」の項目は、名称が「電力取得１」であるモジュールにより、従業員ＩＤが示す従業員単位で、業務で使用する各種の機器の消費電力を取得する処理が実行されることを示す。また、図３の例は、アプリケーション定義データの２番目のレコードの「集約キー名」の項目に、部署ＩＤが登録された場合を示す。すなわち、図３の例に示すアプリケーション定義データの２番目のレコードの「集約キー名」の項目は、名称が「電力集計２」であるモジュールにより、部署ＩＤが示す部署単位で、各部署に属する従業員の消費電力を集計する処理が実行されることを示す。また、図３の例は、アプリケーション定義データの３番目のレコードの「集約キー名」の項目に、会社ＩＤが登録された場合を示す。すなわち、図３の例に示すアプリケーション定義データの３番目のレコードの「集約キー名」の項目は、名称が「電力集計３」であるモジュールにより、会社ＩＤが示す会社単位で、各部署の消費電力を集計する処理が実行されることを示す。
【００２７】
「モジュール」の項目には、「処理名」の項目に名称が登録されたモジュールが開発者などにより登録される。図３の例は、アプリケーション定義データの１番目のレコードの「モジュール」の項目に、名称が「電力取得１」であるモジュール「取得.jar」が登録された場合を示す。また、図３の例は、アプリケーション定義データの２番目のレコードの「モジュール」の項目に、名称が「電力集計２」であるモジュール「集計.jar」が登録された場合を示す。また、図３の例は、アプリケーション定義データの３番目のレコードの「モジュール」の項目に、名称が「電力集計３」であるモジュール「集計.jar」が登録された場合を示す。
【００２８】
「処理設定」の項目には、「処理名」の項目に名称が登録されたモジュールが各種の処理を実行する際に用いるパラメータが開発者などにより登録される。図３の例は、アプリケーション定義データの１番目のレコードの「処理設定」の項目に、「取得対象=list.xml」が登録された場合を示す。この「取得対象=list.xml」は、消費電力を取得する処理を実行する際に、消費電力を取得する対象の従業員の従業員ＩＤと同従業員の消費電力を計測するセンサのアドレス（ＵＲＬなど）が登録されたlist.xmlを参照して、list.xmlに従業員ＩＤが登録された従業員について消費電力を取得することを示す。また、図３の例は、アプリケーション定義データの２番目のレコードの「処理設定」の項目に、「集計キー＝電力」が登録された場合を示す。この「集計キー＝電力」は、部署単位で、入力されたイベントの属性に含まれる「電力」をキーとして、「電力」に対応付けられた消費電力を集計することを示す。また、図３の例は、アプリケーション定義データの３番目のレコードの「処理設定」の項目に、「集計キー＝電力」が登録された場合を示す。この「集計キー＝電力」は、会社単位で、入力されたイベントの属性に含まれる「電力」をキーとして、「電力」に対応付けられた消費電力を集計することを示す。
【００２９】
「処理変更」の項目には、「処理名」の項目に名称が登録されたモジュールが変更された場合に、端末９９によって「あり」が登録される。例えば、端末９９は、アプリケーションが開発された時点では、全てのモジュールのそれぞれに対応する「処理変更」の項目に「なし」を登録する。また、端末９９は、アプリケーションに含まれるモジュールが開発者により変更されたか否かを監視している。そして、端末９９は、モジュールに変更があったことを検知した場合に、変更があったモジュールに対応する「処理変更」の項目に、「あり」を登録する。図２の例に示すアプリケーションは、開発されてから、いずれのモジュールも変更されていないので、図３の例に示すように、全てのモジュールのそれぞれに対応する「処理変更」の項目には、「なし」が登録される。
【００３０】
「集約キー変更」の項目には、「処理名」の項目に名称が登録されたモジュールが変更され、変更されたモジュールによって実行される処理における処理単位が変更された場合には、端末９９によって「あり」が登録される。また、「集約キー変更」の項目には、モジュールが変更されても、処理単位が変更されていない場合には、端末９９によって「なし」が登録される。例えば、端末９９は、アプリケーションが開発された時点では、全てのモジュールのそれぞれに対応する「集約キー変更」の項目に「なし」を登録する。そして、端末９９は、モジュールに変更があったことを検知し、かつ、変更されたモジュールによって実行される処理における処理単位が変更されたことを検知した場合に、変更されたモジュールに対応する「集約キー変更」の項目に、「あり」を登録する。ここで、処理単位が変更された場合には、「集約キー名」の項目に登録された内容も変更されるので、「処理変更」の項目には、「集約キー名」の項目に登録された内容に変更があった場合に、「あり」が登録され、「集約キー名」の項目に登録された内容に変更がない場合に、「なし」が登録されることとなる。図２の例に示すアプリケーションは、開発されてから、いずれのモジュールも変更されていないので、図３の例に示すように、全てのモジュールのそれぞれに対応する「集約キー変更」の項目には、「なし」が登録される。
【００３１】
また、「集約キー変更」の項目には、「処理名」の項目に名称が登録されたモジュールが実行する処理によって、入力されたイベントを加工する処理が変更された場合に、端末９９によって「あり」が登録される。例えば、端末９９は、モジュールに変更があったことを検知した場合には、入力されたイベントを加工する処理が変更されたかどうかを開発者に問い合わせるための画面を端末９９の図示しない表示部に表示する。図４は、イベントを加工する処理が変更されたかどうかを開発者に問い合わせるための画面の一例を示す図である。例えば、図４の例に示す画面は、名称が「電力集計２」であるモジュールにおいて、会社単位で消費電力を集計する、名称が「電力集計３」であるモジュールに対して出力するイベントを加工する際の処理を変更したかどうかを問い合わせるための画面である。図４の例に示す画面において、「Ｙｅｓ」と表記されたボタンが押下されると、端末９９は、イベントを加工する際の処理に変更があったため、「電力集計３」であるモジュールに対応する「集約キー変更」の項目に、「あり」を登録する。また、図４の例に示す画面において、「Ｎｏ」と表記されたボタンが押下されると、端末９９は、イベントを加工する際の処理に変更がなかったため、名称が「電力集計３」であるモジュールに対応する「集約キー変更」の項目に、「なし」を登録する。
【００３２】
図２に示すアプリケーションが開発された場合には、端末９９は、開発されたアプリケーションとともに、上述したような方法で各種の内容が登録された図３に示すアプリケーション定義データをサーバノード１に送信する。
【００３３】
また、図２に示すアプリケーションに対して、開発者が、図５の例に示すように、名称が「電力集計２」であるモジュールが実行する処理における処理単位を「部署」から「Project（プロジェクト）」に変更した場合について説明する。なお、開発者は、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理をも変更している。この場合には、モジュールを変更した開発者が、図３に示すアプリケーション定義データにおける２番目のレコードの「集約キー名」の項目に登録された「部署ＩＤ」を、プロジェクトを示す「プロジェクトＩＤ」に変更する。そして、端末９９は、２番目のレコードの「集約キー名」の項目の登録内容が「プロジェクトＩＤ」に変更されたアプリケーション定義データの「処理変更」及び「集約キー変更」の各項目の登録内容をクリアする。そして、端末９９は、図６Ａに示すように、名称が「電力集計２」である変更されたモジュールの「処理変更」の項目に、「あり」を登録し、その他の変更されていないモジュールの「処理変更」の項目に、「なし」を登録する。そして、端末９９は、図６Ｂに示すように、処理単位が「部署」から「Project（プロジェクト）」に変更されたモジュールの「集約キー変更」の項目に「あり」を登録する。そして、端末９９は、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理が変更されたかどうかを開発者に問い合わせるための画面を端末９９の図示しない表示部に表示する。なお、この場合における、入力されたイベントを加工する処理は、名称が「電力集計３」であるモジュールに対して出力するイベントを加工する際の処理のことを指す。また、ここでは、開発者から、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理が変更されたとの回答を得たものとする。この場合には、端末９９は、図６Ｃに示すように、名称が「電力集計３」であるモジュールに対応する「集約キー変更」の項目に、「あり」を登録する。また、図６Ｃに示すように、端末９９は、変更されたモジュールよりも前に実行されるモジュール、すなわち、名称が「電力取得１」であるモジュールに対応する「集約キー変更」の項目には、「なし」を登録する。そして、端末９９は、図５に示す変更されたアプリケーションとともに、上述したような方法で各種の内容が登録された図６Ｃに示すアプリケーション定義データをサーバノード１に送信する。
【００３４】
また、図２に示すアプリケーションに対して、開発者が、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理を変更した場合について説明する。この場合には、端末９９は、図３に示すアプリケーション定義データの「処理変更」及び「集約キー変更」の各項目の登録内容をクリアする。そして、端末９９は、図７Ａに示すように、名称が「電力集計２」である変更されたモジュールに対応する「処理変更」の項目に、「あり」を登録し、その他の変更されていないモジュールの「処理変更」の項目に、「なし」を登録する。そして、端末９９は、名称が「電力集計２」であるモジュールにおいて処理単位が変更されていないため、図７Ｂに示すように、名称が「電力集計２」であるモジュールに対応する「集約キー変更」の項目に「なし」を登録する。そして、端末９９は、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理が変更されたかどうかを開発者に問い合わせるための画面を端末９９の図示しない表示部に表示する。ここでは、開発者から、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理が変更されたとの回答を得たものとする。この場合には、端末９９は、図７Ｃに示すように、名称が「電力集計３」であるモジュールに対応する「集約キー変更」の項目に、「あり」を登録する。また、図７Ｃに示すように、端末９９は、変更されたモジュールよりも前に実行されるモジュール、すなわち、名称が「電力取得１」であるモジュールに対応する「集約キー変更」の項目に、「なし」を登録する。そして、端末９９は、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理が変更されたアプリケーションとともに、上述したような方法で各種の内容が登録された図７Ｃに示すアプリケーション定義データをサーバノード１に送信する。
【００３５】
また、図２に示すアプリケーションに対して、開発者が、名称が「電力集計２」であるモジュールが実行する処理における処理単位を「部署」から「Project（プロジェクト）」に変更した場合について説明する。なお、開発者は、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理については変更していない。この場合には、モジュールを変更した開発者が、図３に示すアプリケーション定義データにおける２番目のレコードの「集約キー名」の項目に登録された「部署ＩＤ」を、プロジェクトを示す「プロジェクトＩＤ」に変更する。そして、端末９９は、２番目のレコードの「集約キー名」の項目の登録内容が「プロジェクトＩＤ」に変更されたアプリケーション定義データの「処理変更」及び「集約キー変更」の各項目の登録内容をクリアする。そして、端末９９は、図８Ａに示すように、名称が「電力集計２」である変更されたモジュールの「処理変更」の項目に、「あり」を登録し、その他の変更されていないモジュールの「処理変更」の項目に、「なし」を登録する。そして、端末９９は、図８Ｂに示すように、処理単位が「部署」から「Project（プロジェクト）」に変更されたモジュールに対応する「集約キー変更」の項目に「あり」を登録する。そして、端末９９は、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理が変更されたかどうかを開発者に問い合わせるための画面を端末９９の図示しない表示部に表示する。ここでは、開発者から、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理が変更されていないとの回答を得たものとする。この場合には、端末９９は、図８Ｃに示すように、名称が「電力集計３」であるモジュールに対応する「集約キー変更」の項目に、「なし」を登録する。また、図８Ｃに示すように、端末９９は、変更されたモジュールよりも前に実行されるモジュール、すなわち、名称が「電力取得１」であるモジュールに対応する「集約キー変更」の項目に、「なし」を登録する。そして、端末９９は、処理単位が「部署」から「Project」に変更されたアプリケーションとともに、上述したような方法で各種の内容が登録された図８Ｃに示すアプリケーション定義データをサーバノード１に送信する。
【００３６】
また、図２に示すアプリケーションに対して、開発者が、名称が「電力集計２」であるモジュールを変更したが、処理単位、及び、入力されたイベントを加工する処理について変更していない場合について説明する。この場合には、端末９９は、図３に示すアプリケーション定義データの「処理変更」及び「集約キー変更」の各項目の登録内容をクリアする。そして、端末９９は、図９Ａに示すように、名称が「電力集計２」である変更されたモジュールの「処理変更」の項目に、「あり」を登録し、その他の変更されていないモジュールの「処理変更」の項目に、「なし」を登録する。そして、端末９９は、名称が「電力集計２」であるモジュールにおいて処理単位が変更されていないため、図９Ｂに示すように、名称が「電力集計２」であるモジュールに対応する「集約キー変更」の項目に「なし」を登録する。そして、端末９９は、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理が変更されたかどうかを開発者に問い合わせるための画面を端末９９の図示しない表示部に表示する。ここでは、開発者から、名称が「電力集計２」であるモジュールにおいて、入力されたイベントを加工する処理が変更されていないとの回答を得たものとする。この場合には、端末９９は、図９Ｃに示すように、名称が「電力集計３」であるモジュールに対応する「集約キー変更」の項目に、「なし」を登録する。また、図９Ｃに示すように、端末９９は、変更されたモジュールよりも前に実行されるモジュール、すなわち、名称が「電力取得１」であるモジュールに対応する「集約キー変更」の項目に、「なし」を登録する。そして、端末９９は、名称が「電力集計２」であるモジュールが変更されたが、このモジュールにおいて処理単位、及び、入力されたイベントを加工する処理については変更されていないアプリケーションとともに、上述したような方法で各種の内容が登録された図８Ｃに示すアプリケーション定義データをサーバノード１に送信する。
【００３７】
図１の説明に戻り、センサネットワークシステム１０では、センサノード２１から送信されたイベントを、ＧＷノード２２及びネットワーク２３を介して、サーバノード１が収集する。
【００３８】
センサノード２１は、センサが搭載された通信端末である。センサノード２１の一態様としては、パーソナルコンピュータやパーソナルコンピュータの周辺機器、ＡＶ（Audio  Visual）機器、携帯電話機やＰＨＳ（Personal  Handyphone  System）の携帯端末、家電製品などの各種の機器が挙げられる。また、センサノード２１に搭載されるセンサの一態様としては、照度を検出する照度センサ、温度を検出する温度センサ、湿度を検出する湿度センサ、温度及び湿度を検出する温湿度センサなどの環境センサが挙げられる。なお、センサノード２１に搭載されるセンサは、環境センサに限られない。例えば、センサノード２１に搭載されるセンサは、ＧＰＳ（Global  Positioning  System）センサ、加速度センサ、ジャイロセンサや従業員の消費電力を検出するセンサなどの各種のセンサでもよい。ここで、以下、センサノード２１に、従業員の消費電力を検出するセンサが搭載された場合について説明する。
【００３９】
ＧＷノード２２は、サーバノード１とセンサノード２１との通信を中継するノードである。例えば、ＧＷノード２２は、センサノード２１から送信されたイベントを受信し、受信したイベントを、ネットワーク２３を介してサーバノード１へ送信する。以下の説明では、センサネットワークにおけるルートノードであるサーバノード１以外のノード、すなわち、センサノード２１およびＧＷノード２２を「下位ノード」と表記する場合がある。
【００４０】
サーバノード１は、センサネットワークにおけるルートノードとしての機能を有する。サーバノード１は、イベントを加工する処理を行う各種のモジュールをどのノード（センサノード、ＧＷノード、サーバノード）に配備するかを決定するサーバである。
【００４１】
［サーバノード１の機能構成の一例］
続いて、本実施例に係るサーバノード１の機能構成の一例について説明する。図１０は、実施例に係るサーバノードの機能構成の一例を示すブロック図である。図１０の例に示すように、サーバノード１は、入力部２と、出力部３と、通信部４と、制御部６と、アプリケーション記憶部５ａと、アプリケーション定義データ記憶部５ｂとを有する。
【００４２】
入力部２は、各種の情報をサーバノード１に入力する。例えば、入力部２は、サーバノード１のユーザから、後述の分散配備処理を実行する指示を受け付けた場合には、受け付けた指示をサーバノード１に入力する。入力部２のデバイスの一例としては、キーボードやマウスなどが挙げられる。
【００４３】
出力部３は、各種の情報を出力する。例えば、出力部３は、後述の配備部６ｄが実行する処理により、イベントを加工する処理を行う各種のモジュールの配備先を示す情報を表示するように制御される。出力部３のデバイスの一例としては、液晶ディスプレイなどの各種の表示装置や、音声を出力する音声出力装置が挙げられる。
【００４４】
通信部４は、サーバノード１と、下位ノードとの通信を行う。例えば、通信部４は、端末９９から送信されたアプリケーション及びアプリケーション定義データを受信すると、受信したアプリケーション及びアプリケーション定義データを制御部６に送信する。また、通信部４は、後述の配備部６ｄが実行する後述の処理により、モジュールを下位ノードに送信するように制御される。通信部４のデバイスの一例として、ネットワークインタフェースカードなどの各種の通信を行うためのデバイスが挙げられる。
【００４５】
アプリケーション記憶部５ａには、後述の登録部６ａにより、サーバノード１が受信したアプリケーションのうち、最新のアプリケーションが登録される。
【００４６】
アプリケーション定義データ記憶部５ｂには、後述の登録部６ａにより、サーバノード１が受信したアプリケーション定義データのうち、最新のアプリケーション定義データが登録される。
【００４７】
制御部６は、登録部６ａと、特定部６ｂと、生成部６ｃと、配備部６ｄとを有する。制御部６は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）、ＦＰＧＡ（Field  Programmable  Gate  Array）、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）などの回路である。
【００４８】
登録部６ａは、各種の情報を登録する。登録部６ａの一態様について説明する。例えば、登録部６ａは、通信部４により送信されたアプリケーションを受信すると、受信したアプリケーションをアプリケーション記憶部５ａに登録する。なお、登録部６ａは、受信したアプリケーションをアプリケーション記憶部５ａに登録する際に、アプリケーション記憶部５ａに他のアプリケーションが記憶されている場合には、他のアプリケーションをアプリケーション記憶部５ａから削除する。そして、登録部６ａは、受信したアプリケーションをアプリケーション記憶部５ａに登録する。これにより、アプリケーション記憶部５ａには、サーバノード１が受信したアプリケーションのうち、最新のアプリケーションのみが記憶される。
【００４９】
また、登録部６ａは、通信部４により送信されたアプリケーション定義データを受信すると、受信したアプリケーション定義データをアプリケーション定義データ記憶部５ｂに登録する。なお、登録部６ａは、受信したアプリケーション定義データをアプリケーション定義データ記憶部５ｂに登録する際に、アプリケーション定義データ記憶部５ｂに他のアプリケーション定義データが記憶されている場合には、他のアプリケーション定義データを削除する。そして、登録部６ａは、受信したアプリケーション定義データをアプリケーション定義データ記憶部５ｂに登録する。これにより、アプリケーション定義データ記憶部５ｂには、サーバノード１が受信したアプリケーション定義データのうち、最新のアプリケーション定義データのみが記憶される。
【００５０】
特定部６ｂは、所定の順序で実行される複数のモジュールのそれぞれの処理インスタンスが配備された複数の下位ノードにおけるモジュールが変更された場合に、次の処理を行う。すなわち、特定部６ｂは、変更されたモジュールの変更内容に応じて、複数のモジュールの中から再配備の対象のモジュールを特定する。
【００５１】
特定部６ｂの一態様について説明する。例えば、特定部６ｂは、登録部６ａによりアプリケーションがアプリケーション記憶部５ａに登録され、アプリケーション定義データがアプリケーション定義データ記憶部５ｂに登録された場合に、次の処理を行う。すなわち、特定部６ｂは、アプリケーション記憶部５ａからアプリケーションを取得するとともに、アプリケーション定義データ記憶部５ｂからアプリケーション定義データを取得する。
【００５２】
そして、特定部６ｂは、取得したアプリケーション定義データの全レコードの中に、「処理変更」の項目に「あり」が登録されたレコードがあるか否かを判定する。「処理変更」の項目に「あり」が登録されたレコードがあると判定した場合には、特定部６ｂは、「処理変更」の項目に「あり」が登録されたレコードの「集約キー変更」の項目に登録された内容を取得する。すなわち、「処理変更」の項目に「あり」が登録されたレコードがあると判定した場合には、特定部６ｂは、変更されたモジュールにおいて、処理単位が変更されたか否かを示す情報を取得する。
【００５３】
また、「処理変更」の項目に「あり」が登録されたレコードがあると判定した場合には、特定部６ｂは、「処理変更」の項目に「あり」が登録されたレコードの「出力型」の項目に登録された内容を取得する。そして、特定部６ｂは、取得した「出力型」の項目の登録内容が、「入力型」の項目に登録されたレコードをアプリケーション定義データの全レコードの中から特定する。さらに特定したレコードの「出力型」の項目の登録内容が、「入力型」の項目に登録されたレコードを特定し、出力-入力の連鎖が続く限り再帰的に特定を続ける。そして、特定部６ｂは、特定したレコードの「集約キー変更」の項目に登録された内容を取得する。すなわち、「処理変更」の項目に「あり」が登録されたレコードがあると判定した場合には、特定部６ｂは、変更されたモジュールにおいて、実行される処理の内容が変更されたか否かを示す情報を取得する。
【００５４】
上述したように、特定部６ｂは、モジュールが変更された場合に、変更されたモジュールにおいて、処理単位が変更されたか否かを示す情報を取得し、実行される処理の内容が変更されたか否かを示す情報を取得する。例えば、図６Ｃに示すアプリケーション定義データをアプリケーション定義データ記憶部５ｂから取得した場合には、特定部６ｂは、次の情報を取得する。すなわち、特定部６ｂは、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されたことを示す情報「あり」を取得し、実行される処理の内容が変更されたことを示す情報「あり」を取得する。また、図７Ｃに示すアプリケーション定義データをアプリケーション定義データ記憶部５ｂから取得した場合には、特定部６ｂは、次の情報を取得する。すなわち、特定部６ｂは、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されていないことを示す情報「なし」を取得し、実行される処理の内容が変更されたことを示す情報「あり」を取得する。また、図８Ｃに示すアプリケーション定義データをアプリケーション定義データ記憶部５ｂから取得した場合には、特定部６ｂは、次の情報を取得する。すなわち、特定部６ｂは、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されていることを示す情報「あり」を取得し、実行される処理の内容が変更されていないことを示す情報「なし」を取得する。また、図９Ｃに示すアプリケーション定義データをアプリケーション定義データ記憶部５ｂから取得した場合には、特定部６ｂは、次の情報を取得する。すなわち、特定部６ｂは、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されていないことを示す情報「なし」を取得し、実行される処理の内容が変更されていないことを示す情報「なし」を取得する。
【００５５】
そして、特定部６ｂは、取得した処理単位が変更されたか否かを示す情報、及び、取得した実行される処理の内容が変更されたか否かを示す情報に応じて、再配備の対象となるモジュールを特定する。
【００５６】
例えば、図６Ｃに示すアプリケーション定義データから、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されたことを示す情報「あり」を取得し、実行される処理の内容が変更されたことを示す情報「あり」を取得した場合について説明する。この場合には、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されたため、名称が「電力集計２」であるモジュールの処理インスタンスが変更される。また、名称が「電力集計２」であるモジュールにおいて、実行される処理の内容が変更されたため、名称が「電力集計３」であるモジュールの処理インスタンスが変更される。そこで、特定部６ｂは、名称が「電力集計２」であるモジュール、及び、名称が「電力集計３」であるモジュールを再配備するために、名称が「電力集計２」であるモジュール、及び、名称が「電力集計３」であるモジュールを再配備の対象のモジュールとして特定する。
【００５７】
また、図７Ｃに示すアプリケーション定義データから、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されていないことを示す情報「なし」を取得し、実行される処理の内容が変更されたことを示す情報「あり」を取得した場合について説明する。この場合には、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されていないため、名称が「電力集計２」であるモジュールの処理インスタンスは、変更されない。一方、名称が「電力集計２」であるモジュールにおいて、実行される処理の内容が変更されたため、名称が「電力集計３」であるモジュールの処理インスタンスは、変更される。そこで、特定部６ｂは、名称が「電力集計３」であるモジュールを再配備するために、名称が「電力集計３」であるモジュールを再配備の対象のモジュールとして特定する。
【００５８】
また、図８Ｃに示すアプリケーション定義データから、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されたことを示す情報「あり」を取得し、実行される処理の内容が変更されていないことを示す情報「なし」を取得した場合について説明する。この場合には、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されたため、名称が「電力集計２」であるモジュールの処理インスタンスは、変更される。一方、名称が「電力集計２」であるモジュールにおいて、実行される処理の内容が変更されないため、名称が「電力集計３」であるモジュールの処理インスタンスは、変更されない。そこで、特定部６ｂは、名称が「電力集計２」であるモジュールを再配備するために、名称が「電力集計２」であるモジュールを再配備の対象のモジュールとして特定する。
【００５９】
また、図９Ｃに示すアプリケーション定義データから、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されていないことを示す情報「なし」を取得し、実行される処理の内容が変更されていないことを示す情報「なし」を取得した場合について説明する。この場合には、名称が「電力集計２」であるモジュールにおいて、処理単位が変更されていないため、名称が「電力集計２」であるモジュールの処理インスタンスは、変更されない。また、名称が「電力集計２」であるモジュールにおいて、実行される処理の内容が変更されないため、名称が「電力集計３」であるモジュールの処理インスタンスも、変更されない。そこで、この場合には、特定部６ｂは、再配備の対象のモジュールを特定しない。
【００６０】
生成部６ｃは、特定部６ｂにより特定されたモジュールの処理インスタンスを生成する。
【００６１】
生成部６ｃの一態様について説明する。例えば、生成部６ｃは、特定されたモジュールを、下位ノードのうちイベントが流れる方向の最下流側に位置するノードに配備した上で、アプリケーションに含まれる複数のモジュールを実行させる。そして、生成部６ｃは、特定されたモジュールの入出力データを表すログを解析することにより、特定されたモジュールを分割する分割数を算出する。ここで、モジュールの入力データの一例としては、モジュールに入力されるイベントが挙げられ、モジュールの出力データの一例としては、モジュールによって加工されたイベントが挙げられる。そして、生成部６ｃは、特定されたモジュールについて分割数分の処理インスタンスを生成する。そして、生成部６ｃは、アプリケーションに含まれる複数のモジュールのそれぞれの処理インスタンスの接続関係を示すインスタンスフローを生成する。
【００６２】
図１１〜図１４を参照して、生成部６ｃが実行する処理の一例について説明する。図１１は、アプリケーションの変更前後のインスタンスフロー及び処理インスタンスの配備先の一例を示す図である。図１１中左上側には、図２に示す変更前のアプリケーションに含まれるモジュールの処理インスタンスが接続されたインスタンスフローが示されている。このインスタンスフローは、名称が「電力取得１」であるモジュールの処理インスタンス「取得１ａ」〜「取得１ｅ」と、名称が「電力集計２」であるモジュールの処理インスタンス「集計２ｘ」、「集計２ｙ」と、名称が「電力集計３」であるモジュールの処理インスタンス「集計３Ｐ」、「集計３Ｑ」との接続関係を示す。なお、処理インスタンス「取得１ａ」〜「取得１ｅ」のそれぞれは、処理インスタンス「１ａ」〜「１ｅ」のそれぞれと表記される場合がある。また、処理インスタンス「集計２ｘ」、「集計２ｙ」のそれぞれは、処理インスタンス「２ｘ」、「２ｙ」のそれぞれと表記される場合がある。また、処理インスタンス「集計３Ｐ」、「集計３Ｑ」のそれぞれは、処理インスタンス「３Ｐ」、「３Ｑ」のそれぞれと表記される場合がある。各インスタンスの末尾につく記号は、各処理の集約キー値に対応する。すなわち、「取得１ａ」〜「取得１ｅ」は従業員ＩＤ「ａ」〜「ｅ」の各データに対応する処理を行い、「集計２ｘ」、「集計２ｙ」は部署ＩＤ「ｘ」と「ｙ」に対応する処理を行う。また、後述する末尾に？が付くインスタンスは、集約キーの値が不明の場合の処理、あるいは既知でない集約キー値に対応する処理を表す。また、図１１中左下側には、図２に示す変更前のアプリケーションに含まれるモジュールの処理インスタンスの配備先の一例が示されている。図１１中左下側に示す例は、処理インスタンス「１ａ」、「１ｂ」がＧＷノード２２ａに配備され、処理インスタンス「１ｃ」〜「１ｅ」、「２ｙ」がＧＷノード２２ｂに配備され、処理インスタンス「２ｘ」、「３Ｐ」、「３Ｑ」がＧＷノード２２ｃに配備された場合を示す。このような場合に、名称が「電力集計２」であるモジュール、及び、名称が「電力集計３」であるモジュールが再配備の対象のモジュールとして特定された場合には、生成部６ｃは、次の処理を行う。すなわち、生成部６ｃは、図１１中右下側に示すように、イベントが流れる方向において最上流に位置するＧＷノード２２ｄに、名称が「電力集計２」であるモジュール「２？」、及び、名称が「電力集計３」であるモジュール「３？」をまず配備する。そして、生成部６ｃは、アプリケーションに含まれる複数のモジュールを実行させる。そして、生成部６ｃは、モジュール「２？」，「３？」の入出力データを表すログを解析することにより、モジュール「２？」，「３？」のそれぞれを分割する分割数を算出する。そして、生成部６ｃは、モジュール「２？」，「３？」のそれぞれについて分割数分の処理インスタンスを生成する。そして、生成部６ｃは、アプリケーションに含まれる複数のモジュールのそれぞれの処理インスタンスの接続関係を示すインスタンスフローを生成する。これにより、全てのモジュールの入出力データを解析することなく、インスタンスフローを生成することができるので、複数のモジュールのうち、一部のモジュールに変更があった場合でも、簡易にインスタンスフローを生成することができる。なお、図１１中右上側には、モジュール「２？」，「３？」と、処理インスタンス「１ａ」〜「１ｅ」との接続関係が示されている。
【００６３】
図１２は、アプリケーションの変更前後のインスタンスフロー及び処理インスタンスの配備先の一例を示す図である。図１２中左上側には、図２に示す変更前のアプリケーションに含まれるモジュールの処理インスタンスが接続されたインスタンスフローが示されている。このインスタンスフローは、図１１中左側に示されたインスタンスフローと同様であるため、説明を省略する。また、図１２中左下側には、図２に示す変更前のアプリケーションに含まれるモジュールの処理インスタンスの配備先の一例が示されている。この処理インスタンスの配備先の一例についても、図１１中左下側に示された処理インスタンスの配備先の一例と同様であるため、説明を省略する。図１２中左上側及び図１２中左下側に示すような場合に、名称が「電力集計３」であるモジュールが再配備の対象のモジュールとして特定された場合には、生成部６ｃは、次の処理を行う。すなわち、生成部６ｃは、図１２中右下側に示すように、イベントが流れる方向において最上流に位置するＧＷノード２２ｄに、名称が「電力集計３」であるモジュール「３？」をまず配備する。そして、生成部６ｃは、アプリケーションに含まれる複数のモジュールを実行させる。そして、生成部６ｃは、モジュール「３？」の入出力データを表すログを解析することにより、モジュール「３？」を分割する分割数を算出する。そして、生成部６ｃは、モジュール「３？」について分割数分の処理インスタンスを生成する。そして、生成部６ｃは、アプリケーションに含まれる複数のモジュールのそれぞれの処理インスタンスの接続関係を示すインスタンスフローを生成する。これにより、全てのモジュールの入出力データを解析することなく、インスタンスフローを生成することができるので、複数のモジュールのうち、一部のモジュールに変更があった場合でも、簡易にインスタンスフローを生成することができる。なお、図１２中右上側には、モジュール「３？」と、処理インスタンス「１ａ」〜「１ｅ」，「２ｘ」，「２ｙ」との接続関係が示されている。
【００６４】
図１３は、アプリケーションの変更前後のインスタンスフロー及び処理インスタンスの配備先の一例を示す図である。図１３中左上側には、図２に示す変更前のアプリケーションに含まれるモジュールの処理インスタンスが接続されたインスタンスフローが示されている。このインスタンスフローは、図１１中左側に示されたインスタンスフローと同様であるため、説明を省略する。また、図１３中左下側には、図２に示す変更前のアプリケーションに含まれるモジュールの処理インスタンスの配備先の一例が示されている。この処理インスタンスの配備先の一例についても、図１１中左下側に示された処理インスタンスの配備先の一例と同様であるため、説明を省略する。図１３中左上側及び図１３中左下側に示すような場合に、名称が「電力集計２」であるモジュールが再配備の対象のモジュールとして特定された場合には、生成部６ｃは、次の処理を行う。すなわち、生成部６ｃは、図１３中右下側に示すように、イベントが流れる方向において最上流に位置するＧＷノード２２ｄに、名称が「電力集計３」であるモジュール「２？」をまず配備する。これに加えて、生成部６ｃは、処理インスタンス「３Ｐ」，「３Ｑ」をもＧＷノード２２ｄに配備する。これは、処理インスタンス「３Ｐ」，「３Ｑ」がＧＷノード２２ｃに配備された場合に、複数のモジュールが実行された場合には、処理インスタンス「３Ｐ」，「３Ｑ」とモジュール「２？」との通信に時間がかかってしまうからである。そして、生成部６ｃは、アプリケーションに含まれる複数のモジュールを実行させる。そして、生成部６ｃは、モジュール「２？」の入出力データを表すログを解析することにより、モジュール「２？」を分割する分割数を算出する。そして、生成部６ｃは、モジュール「２？」について分割数分の処理インスタンスを生成する。そして、生成部６ｃは、アプリケーションに含まれる複数のモジュールのそれぞれの処理インスタンスの接続関係を示すインスタンスフローを生成する。これにより、全てのモジュールの入出力データを解析することなく、インスタンスフローを生成することができるので、複数のモジュールのうち、一部のモジュールに変更があった場合でも、簡易にインスタンスフローを生成することができる。なお、図１３中右上側には、モジュール「２？」と、処理インスタンス「１ａ」〜「１ｅ」，「３Ｐ」，「３Ｑ」との接続関係が示されている。
【００６５】
図１４は、アプリケーションの変更前後のインスタンスフロー及び処理インスタンスの配備先の一例を示す図である。図１４中左上側には、図２に示す変更前のアプリケーションに含まれるモジュールの処理インスタンスが接続されたインスタンスフローが示されている。このインスタンスフローは、図１１中左側に示されたインスタンスフローと同様であるため、説明を省略する。また、図１４中左下側には、図２に示す変更前のアプリケーションに含まれるモジュールの処理インスタンスの配備先の一例が示されている。この処理インスタンスの配備先の一例についても、図１１中左下側に示された処理インスタンスの配備先の一例と同様であるため、説明を省略する。図１４中左上側及び図１４中左下側に示すような場合に、モジュールが変更されたにも関わらず、再配備の対象のモジュールが特定されなかった場合には、生成部６ｃは、何も処理を行わず、サーバノード１は、モジュールの配備先に変更がないものとして扱う。これにより、一部のモジュールに変更があった場合でも、インスタンスフローを再生成しないので、簡易にモジュールの配備先が決定できる結果、簡易にモジュールを配備することができる。なお、図１４中右上側には、処理インスタンス「１ａ」〜「１ｅ」，「２ｘ」，「２ｙ」，「３Ｐ」，「３Ｑ」との接続関係を示すインスタンスフローが示されている。
【００６６】
この実施例の処理の中で、集約キーの変更などで対応するデータが集約されると保証されないインスタンス「２ｘ」「２ｙ」「３Ｐ」「３Ｑ」を消滅させ、未知のデータに対応する「２？」または「３？」を生成するケースがある。この時、消滅させたインスタンスの内容を、対応する未知データのインスタンスに移動して引き継いでも良い。すなわち、インスタンス「２？」に「２ｙ」「２ｘ」のデータを移動し、インスタンス「３？」に「３Ｐ」「３Ｑ」のデータを移動する。この時、未知のデータに対応するインスタンス「２？」は、再びデータｘに対応するデータが届いた場合には「２ｘ」から引き継いだデータを元に処理を継続する。さらに、引き継いだインスタンス内容に対応するデータが届かない場合、一定時間の後に内容を消去すると良い。
【００６７】
図１０の説明に戻り、配備部６ｄは、生成部６ｃにより生成されたインスタンスフローを用いて処理インスタンスの配備先のノードを決定し、決定された配備先のノードに、処理インスタンスを配備する。したがって、本実施例によれば、上述したように、インスタンスフローを簡易に生成することができる結果、簡易に処理インスタンスを配備先のノードに配備することができる。
【００６８】
センサノード２１の機能構成について説明する。図１５は、実施例に係るセンサノードの機能構成の一例を示す図である。図１５に示すように、センサノード２１は、制御部７０を有する。制御部７０は、センサノード２１に搭載されたセンサによってセンシングされたデータをイベントとして、ＧＷノード２２及びネットワーク２３を介して、サーバノード１へ送信する。また、制御部７０は、サーバノード１から送信された処理インスタンスを受信すると、受信した処理インスタンスを自ノードに配備する。これにより、制御部７０は、受信した処理インスタンスを実行することができる。
【００６９】
次に、ＧＷノード２２の機能構成について説明する。図１６は、実施例に係るＧＷノードの機能構成の一例を示す図である。図１６に示すように、ＧＷノード２２は、制御部７１を有する。制御部７１は、センサノード２１から送信されたイベントを受信すると、受信したイベントをネットワーク２３を介して、サーバノード１へ送信する。また、制御部７１は、サーバノード１から送信された処理インスタンスを受信すると、受信した処理インスタンスを自ノードに配備する。これにより、制御部７１は、受信した処理インスタンスを実行することができる。
【００７０】
［処理の流れ］
次に、実施例に係るサーバノード１が実行する分散配備処理の流れについて説明する。図１７は、実施例に係る分散配備処理の手順を示すフローチャートである。実施例に係る分散配備処理は、例えば、通信部４により送信されたアプリケーション及びアプリケーション定義データを制御部６が受信するたびに、制御部６により実行される。
【００７１】
図１７に示すように、登録部６ａは、受信したアプリケーションをアプリケーション記憶部５ａに登録し、受信したアプリケーション定義データをアプリケーション定義データ記憶部５ｂに登録する（Ｓ１０１）。
【００７２】
そして、特定部６ｂは、アプリケーション記憶部５ａからアプリケーションを取得するとともに、アプリケーション定義データ記憶部５ｂからアプリケーション定義データを取得する（Ｓ１０２）。
【００７３】
そして、特定部６ｂは、取得したアプリケーション定義データの全レコードの中に、「処理変更」の項目に「あり」が登録されたレコードがあるか否かを判定する（Ｓ１０３）。「処理変更」の項目に「あり」が登録されたレコードがあると判定した場合（Ｓ１０３；Ｙｅｓ）には、特定部６ｂは、次の処理を行う。すなわち、特定部６ｂは、変更されたモジュールにおいて、処理単位が変更されたか否かを示す情報を取得し、実行される処理の内容が変更されたか否かを示す情報を取得する。そして、特定部６ｂは、処理単位が変更されたことを示す情報「あり」を取得し、かつ、実行される処理の内容が変更されたことを示す情報「あり」を取得したか否かを判定する（Ｓ１０４）。処理単位が変更されたことを示す情報「あり」を取得し、かつ、実行される処理の内容が変更されたことを示す情報「あり」を取得したと判定した場合（Ｓ１０４；Ｙｅｓ）には、特定部６ｂは、次の処理を行う。すなわち、特定部６ｂは、変更されたモジュール、及び、変更されたモジュールより後に実行されるモジュールを再配備の対象のモジュールとして特定し（Ｓ１０５）、後述するＳ１１０に進む。
【００７４】
処理単位が変更されたことを示す情報「あり」を取得していないか、または、実行される処理の内容が変更されたことを示す情報「あり」を取得していないと判定した場合（Ｓ１０４；Ｎｏ）には、特定部６ｂは、次の処理を行う。すなわち、特定部６ｂは、処理単位が変更されていないことを示す情報「なし」を取得し、かつ、実行される処理の内容が変更されたことを示す情報「あり」を取得したか否かを判定する（Ｓ１０６）。
【００７５】
処理単位が変更されていないことを示す情報「なし」を取得し、かつ、実行される処理の内容が変更されたことを示す情報「あり」を取得したと判定した場合（Ｓ１０６；Ｙｅｓ）には、特定部６ｂは、次の処理を行う。すなわち、特定部６ｂは、変更されたモジュールより後に実行されるモジュールを再配備の対象のモジュールとして特定し（Ｓ１０７）、後述するＳ１１０に進む。
【００７６】
処理単位が変更されていないことを示す情報「なし」を取得していなか、または、実行される処理の内容が変更されたことを示す情報「あり」を取得していないと判定した場合（Ｓ１０６；Ｎｏ）には、特定部６ｂは、次の処理を行う。すなわち、特定部６ｂは、処理単位が変更されたことを示す情報「あり」を取得し、かつ、実行される処理の内容が変更されていないことを示す情報「なし」を取得したか否かを判定する（Ｓ１０８）。
【００７７】
処理単位が変更されたことを示す情報「あり」を取得し、かつ、実行される処理の内容が変更されていないことを示す情報「なし」を取得したと判定した場合（Ｓ１０８；Ｙｅｓ）には、特定部６ｂは、次の処理を行う。すなわち、特定部６ｂは、変更されたモジュールを再配備の対象のモジュールとして特定し（Ｓ１０９）、後述するＳ１１０に進む。一方、処理単位が変更されたことを示す情報「あり」を取得していないか、または、実行される処理の内容が変更されていないことを示す情報「なし」を取得していないと判定した場合（Ｓ１０８；Ｎｏ）には、分散配備処理を終了する。
【００７８】
Ｓ１１０では、生成部６ｃは、特定されたモジュールを、下位ノードのうちイベントが流れる方向の最下流側に位置するノードに配備した上で、アプリケーションに含まれる複数のモジュールを実行させる。そして、生成部６ｃは、特定されたモジュールの入出力データを表すログを解析することにより、特定されたモジュールを分割する分割数を算出する。ここで、モジュールの入力データの一例としては、モジュールに入力されるイベントが挙げられ、モジュールの出力データの一例としては、モジュールによって加工されたイベントが挙げられる。そして、生成部６ｃは、特定されたモジュールについて分割数分の処理インスタンスを生成する。そして、生成部６ｃは、アプリケーションに含まれる複数のモジュールのそれぞれの処理インスタンスの接続関係を示すインスタンスフローを生成する。
【００７９】
そして、配備部６ｄは、生成部６ｃにより生成されたインスタンスフローを用いて処理インスタンスの配備先のノードを決定し、決定された配備先のノードに、処理インスタンスを配備し（Ｓ１１１）、分散配備処理を終了する。
【００８０】
一方、取得したアプリケーション定義データの全レコードの中に、「処理変更」の項目に「あり」が登録されたレコードがないと判定した場合（Ｓ１０３；Ｎｏ）には、生成部６ｃは、取得したアプリケーションに含まれる全てのモジュールを、いずれかの下位ノードに仮に配備した上で、アプリケーションに含まれる複数のモジュールを実行させる。そして、生成部６ｃは、全てのモジュールの入出力データを表すログを解析することにより、全てのモジュールのそれぞれを分割する分割数を算出する。そして、生成部６ｃは、全てのモジュールのそれぞれについて分割数分の処理インスタンスを生成する。そして、生成部６ｃは、アプリケーションに含まれる全てのモジュールのそれぞれの処理インスタンスの接続関係を示すインスタンスフローを生成する（Ｓ１１２）。
【００８１】
そして、配備部６ｄは、生成部６ｃにより生成されたインスタンスフローを用いて処理インスタンスの配備先のノードを決定し、決定された配備先のノードに、処理インスタンスを配備し（Ｓ１１３）、分散配備処理を終了する。
【００８２】
上述したように、本実施例に係るサーバノード１によれば、簡易に処理インスタンスを配備先のノードに配備することができる。
【００８３】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
【００８４】
例えば、実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、実施例において説明した各処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。
【００８５】
また、各種の負荷や使用状況などに応じて、実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。
【００８６】
また、各種の負荷や使用状況などに応じて、実施例において説明した各処理の各ステップでの処理の順番を変更できる。
【００８７】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【００８８】
［分散配備プログラム］
また、上記の実施例で説明したサーバノード１の各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、図１８を用いて、上記の実施例で説明したサーバノード１と同様の機能を有する分散配備プログラムを実行するコンピュータの一例を説明する。図１８は、分散配備プログラムを実行するコンピュータを示す図である。
【００８９】
図１８に示すように、コンピュータ３００は、ＣＰＵ３１０、ＲＯＭ３２０、ＨＤＤ（Hard  Disk  Drive）３３０、ＲＡＭ３４０を有する。これら各機器３１０〜３４０は、バス３５０を介して接続されている。
【００９０】
ＲＯＭ３２０には、ＯＳ（Operating  System）などの基本プログラムが記憶されている。また、ＨＤＤ３３０には、登録部６ａと、特定部６ｂと、生成部６ｃと、配備部６ｄと同様の機能を発揮する分散配備プログラム３３０ａが予め記憶される。
【００９１】
そして、ＣＰＵ３１０が、分散配備プログラム３３０ａをＨＤＤ３３０から読み出して実行する。
【００９２】
なお、上記した分散配備プログラム３３０ａについては、必ずしも最初からＨＤＤ３３０に記憶させておく必要はない。
【００９３】
例えば、コンピュータ３００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に分散配備プログラム３３０ａを記憶させておく。そして、コンピュータ３００がこれらから分散配備プログラム３３０ａを読み出して実行するようにしてもよい。
【００９４】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ３００に接続される「他のコンピュータ（またはサーバ）」などに分散配備プログラム３３０ａを記憶させておく。そして、コンピュータ３００がこれらから分散配備プログラム３３０ａを読み出して実行するようにしてもよい。
【符号の説明】
【００９５】
１        サーバノード
５ａ      アプリケーション記憶部
５ｂ      アプリケーション定義データ記憶部
６        制御部
６ａ      登録部
６ｂ      特定部
６ｃ      生成部
６ｄ      配備部
【図１】
2015115013.tif 000003
【図２】
2015115013.tif 000004
【図３】
2015115013.tif 000005
【図４】
2015115013.tif 000006
【図５】
2015115013.tif 000007
【図６Ａ】
2015115013.tif 000008
【図６Ｂ】
2015115013.tif 000009
【図６Ｃ】
2015115013.tif 000010
【図７Ａ】
2015115013.tif 000011
【図７Ｂ】
2015115013.tif 000012
【図７Ｃ】
2015115013.tif 000013
【図８Ａ】
2015115013.tif 000014
【図８Ｂ】
2015115013.tif 000015
【図８Ｃ】
2015115013.tif 000016
【図９Ａ】
2015115013.tif 000017
【図９Ｂ】
2015115013.tif 000018
【図９Ｃ】
2015115013.tif 000019
【図１０】
2015115013.tif 000020
【図１１】
2015115013.tif 000021
【図１２】
2015115013.tif 000022
【図１３】
2015115013.tif 000023
【図１４】
2015115013.tif 000024
【図１５】
2015115013.tif 000025
【図１６】
2015115013.tif 000026
【図１７】
2015115013.tif 000027
【図１８】
2015115013.tif 000028