(57)【特許請求の範囲】
【請求項１】
複数のクエリが複数の装置のいずれかに割り当てられ、それぞれ設定された条件に対象データが合致した場合に処理を実行する複数のクエリが複数の装置のいずれかに割り当てられた分散処理システムについて、処理結果を送信するクエリ間の通信回数を示す通信回数情報を取得する取得部と、
前記通信回数情報に基づいて、クエリの組を特定する特定部と、
前記特定部により特定されたクエリの組を同一の装置に配置することを決定する決定部と、
を有することを特徴とする配置装置。 
【請求項２】
複数のクエリが複数の装置のいずれかに割り当てられ、それぞれ設定された条件にデータが合致した場合に処理を実行する複数のクエリが複数の装置のいずれかに割り当てられた分散処理システムについて、対象データに対する複数のクエリが実行された順序を示す順序情報を取得する取得部と、
前記順序情報に基づいて、クエリ間の通信回数を示す通信回数情報を算出する算出部と、
前記通信回数情報に基づいて、クエリの組を特定する特定部と、
前記特定部により特定されたクエリの組を同一の装置に配置することを決定する決定部と、
を有することを特徴とする配置装置。 
【請求項３】
前記特定部は、前記通信回数が最も多いクエリの組を特定する
ことを特徴とする請求項１または２に記載の配置装置。 
【請求項４】
前記決定部は、前記通信回数が最も多いクエリの組が複数組である場合には、前記複数のクエリの組について、当該クエリを含む処理要素の負荷の合計が最も小さいクエリの組、または、前記複数のクエリの接続関係を示すクエリグラフ上において間に接続されるクエリの数が最も少ないクエリの組を特定する
ことを特徴とする請求項３に記載の配置装置。 
【請求項５】
前記決定部による決定結果に基づいて、前記特定部により特定されたクエリの組が同一の装置に配置されるように制御する配置制御部
をさらに有することを特徴とする請求項１〜４のいずれか１つに記載の配置装置。 
【請求項６】
前記配置制御部は、前記特定部により特定されたクエリの組に含まれるクエリが負荷が第一の閾値を超えた装置と負荷が第二の閾値未満の装置に配置されている場合、負荷が第一の閾値を超えた装置に配置されているクエリが、負荷が第二の閾値未満の装置に配置されることで同一の装置に配置されるように制御する
ことを特徴とする請求項５に記載の配置装置。 
【請求項７】
前記配置制御部は、前記複数の装置の負荷が第一の閾値を超えている場合には、前記特定部により特定されたクエリの組が、前記複数の装置以外の他の装置に配置されるように制御する
ことを特徴とする請求項５に記載の配置装置。 
【請求項８】
前記配置制御部は、前記複数の装置の負荷が第二の閾値未満である場合には、前記特定部により特定されたクエリの組、および、前記複数の装置のうち負荷が第三の閾値を超えた装置に配置されたクエリが、前記複数の装置のうち、前記複数の装置の台数よりも少ない台数の装置に配置されるように制御する
ことを特徴とする請求項５に記載の配置装置。 
【請求項９】
前記配置制御部は、前記決定部が、前記複数のクエリのうち、所定のクエリのみを実行する装置を、他のクエリを配置する前記同一の装置としないように制御する
ことを特徴とする請求項５に記載の配置装置。 
【請求項１０】
前記配置制御部は、前記特定部により特定されたクエリの組が示すいずれかのクエリが、前記複数の装置のうち当該クエリが配置された装置のみで実行可能である場合には、当該装置以外の他の装置へ当該クエリを配置しないように制御する
ことを特徴とする請求項５に記載の配置装置。 
【請求項１１】
前記取得部は、前記装置によりクエリの実行に伴って記録または集計された前記情報を取得する
ことを特徴とする請求項１〜１０のいずれか１つに記載の配置装置。 
【請求項１２】
コンピュータを、
複数のクエリが複数の装置のいずれかに割り当てられ、それぞれ設定された条件に対象データが合致した場合に処理を実行する複数のクエリが複数の装置のいずれかに割り当てられた分散処理システムについて、処理結果を送信するクエリ間の通信回数を示す通信回数情報を前記複数の装置のいずれかから取得する取得部と、
前記取得部が取得した前記通信回数情報に基づいて、クエリの組を特定する特定部と、
前記特定部が特定したクエリの組を同一の装置に配置することを決定する決定部と、
を備える配置装置として機能させるための配置プログラム。 
【請求項１３】
コンピュータを、
複数のクエリが複数の装置のいずれかに割り当てられ、それぞれ設定された条件にデータが合致した場合に処理を実行する複数のクエリが複数の装置のいずれかに割り当てられた分散処理システムについて、対象データに対する複数のクエリが実行された順序を示す順序情報を前記複数の装置のいずれかから取得する取得部と、
前記取得部が取得した順序情報に基づいて、クエリ間の通信回数を示す通信回数情報を算出する算出部と、
前記算出部が算出した通信回数情報に基づいて、クエリの組を特定する特定部と、
前記特定部が特定したクエリの組を同一の装置に配置することを決定する決定部と、
を備える配置装置として機能させるための配置プログラム。 
【請求項１４】
プロセッサとメモリとを備えるコンピュータが実行する配置方法であって、
前記プロセッサは、複数のクエリが複数の装置のいずれかに割り当てられ、それぞれ設定された条件に対象データが合致した場合に処理を実行する複数のクエリが複数の装置のいずれかに割り当てられた分散処理システムについて、処理結果を送信するクエリ間の通信回数を示す通信回数情報を前記複数の装置のいずれかから取得して前記メモリに記憶し、
前記プロセッサは、前記通信回数情報に基づいて、クエリの組を特定し、
前記プロセッサは、特定されたクエリの組を同一の装置に配置することを決定する
各処理を実行することを特徴とする配置方法。 
【請求項１５】
プロセッサとメモリとを備えるコンピュータが実行する配置方法であって、
前記プロセッサは、複数のクエリが複数の装置のいずれかに割り当てられ、それぞれ設定された条件にデータが合致した場合に処理を実行する複数のクエリが複数の装置のいずれかに割り当てられた分散処理システムについて、対象データに対する複数のクエリが実行された順序を示す順序情報を前記複数の装置のいずれかから取得して前記メモリに記憶し、
前記プロセッサは、前記順序情報に基づいて、クエリ間の通信回数を示す通信回数情報を算出し、
前記プロセッサは、前記通信回数情報に基づいて、クエリの組を特定し、
前記プロセッサは、特定されたクエリの組を同一の装置に配置することを決定する
各処理を実行することを特徴とする配置方法。 
【請求項１６】
連携してイベントを実行する複数の処理要求文が複数の装置のいずれかに割り当てられ、それぞれ設定された条件に対象データが合致した場合に処理を実行する複数の処理要求文が複数の装置のいずれかに割り当てられた分散処理システムについて、処理結果を送信する処理要求文間の通信回数を示す通信回数情報を取得する取得部と、
前記通信回数情報に基づいて、処理要求文の組を特定する特定部と、
特定された前記処理要求文の組を同一の装置に配置するための装置を決定する決定部と、
を有することを特徴とする配置装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、配置装置、配置プログラムおよび配置方法に関する。
【背景技術】
【０００２】
様々な対象から刻々と収集される多数のデータを並列に処理する技術として複合イベント処理（ＣＥＰ；Complex  Event  Processing）がある。複合イベント処理では、受信したデータに対してイベントの発生を検出し、発生が検出されたイベントに関する処理が実行される。なお、複合イベント処理は、ＥＳＰ（Event  Stream  Processing）と称される場合もある。以下の説明では、ＣＥＰの技術の範囲に、ＥＳＰが含まれるものとして説明する。
【０００３】
複合イベント処理を行うＣＥＰシステムでは、一時的に大量の受信データを処理する場合がある。この場合、ＣＥＰシステムにおける受信データの処理を行う装置では、処理負荷が高くなるため、処理性能が低下する場合がある。
【０００４】
そこで、例えば、ＣＥＰシステムでは、クラウド技術などの柔軟な資源割り当てが可能な技術を用いて、処理負荷の変動に応じて複数のサーバや仮想マシン（ＶＭ；Virtual  Machine）に、処理の分散が行われる。かかる処理の分散について、一例を挙げて説明すると、処理負荷が高いサーバや仮想マシンに配置されたクエリと呼ばれる処理要求文や、クエリに付随するデータを処理要素として、他のサーバや仮想マシンに移動させて処理の分散を行う。
【０００５】
また、予め定められた、クエリに設定された処理の実行順序などの情報を含むクエリグラフに基づいて、実行順序が前後するクエリ、すなわち、クエリグラフにおいて隣接するクエリ同士を同一の装置に配置する技術がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開第２００９／００４９１８７号明細書
【特許文献２】米国特許出願公開第２００９／０３１９６８７号明細書
【非特許文献】
【０００７】
【非特許文献１】Ｍｅｈｕｌ  Ａ．  Ｓｈａｈ，Ｊｏｓｅｐｈ  Ｍ．  Ｈｅｌｌｅｒｓｔｅｉｎ，Ｓｉｒｉｓｈ  Ｃｈａｎｄｒａｓｅｋａｒａｎ  ａｎｄ  Ｍｉｃｈａｅｌ  Ｊ．Ｆｒａｎｋｌｉｎ著、“Ｆｌｕｘ：Ａｎ  Ａｄａｐｔｉｖｅ  Ｐａｒｔｉｔｉｏｎｉｎｇ  Ｏｐｅｒａｔｏｒ  ｆｏｒ  Ｃｏｎｔｉｎｕｏｕｓ  Ｑｕｅｒｙ  Ｓｙｓｔｅｍｓ”，ＩＣＤＥ，２００３
【非特許文献２】Ｙｉｎｇ  Ｘｉｎｇ著、“Ｌｏａｄ  Ｄｉｓｔｒｉｂｕｔｉｏｎ  ｆｏｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｔｒｅａｍ  Ｐｒｏｃｅｓｓｉｎｇ”，ＥＤＢＴ，２００４  ＷＯＲＫＳＨＯＰＳ
【非特許文献３】Ｙｉｎｇ  Ｘｉｎｇ，Ｓｔａｎ  Ｚｄｏｎｉｋ，  Ｊｅｏｎｇ−Ｈｙｏｎ  Ｈｗａｎｇ著、“Ｄｙｎａｍｉｃ  Ｌｏａｄ  Ｄｉｓｔｒｉｂｕｔｉｏｎ  ｉｎ  ｔｈｅ  Ｂｏｒｅａｌｉｓ  Ｓｔｒｅａｍ  Ｐｒｏｃｅｓｓｏｒ”，ＩＣＤＥ，２００５
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記の技術では、装置間の通信の増加を抑制することが困難であるという問題がある。以下、具体例を挙げて説明する。まず、上記の処理の分散の技術の一例を説明する。
【０００９】
図３５Ａおよび図３５Ｂは、上記の処理の分散の技術の一例を説明するための図である。図３５Ａの例は、クエリの接続関係を示すクエリグラフの一例を示す。図３５Ａの例のクエリグラフは、クエリＱ１の実行結果が用いられて、クエリＱ２が実行されることを示す。また、図３５Ａの例のクエリグラフは、クエリＱ２の実行結果が用いられて、クエリＱ３が実行されることを示す。また、図３５Ａおよび図３５Ｂの例では、処理負荷に応じて、クエリＱ１およびクエリＱ３がサーバ９０に配置され、クエリＱ２がサーバ９１に配置された場合を示す。図３５Ａおよび図３５Ｂの例では、サーバ９０はクエリＱ１の実行結果をクエリＱ２が配置されたサーバ９１へ送信する。また、図３５Ａおよび図３５Ｂの例では、サーバ９１はクエリＱ２の実行結果をクエリＱ３が配置されたサーバ９０へ送信する。このように、図３５Ａおよび図３５Ｂの例では、クエリＱ１〜Ｑ３を実行する場合に、サーバ９０およびサーバ９１間で実行結果の送信が２回も行われる。
【００１０】
次に、上記の隣接するクエリ同士を同一の装置に配置する技術の一例について説明する。図３６Ａおよび図３６Ｂは、上記の隣接するクエリ同士を同一の装置に配置する技術の一例を説明するための図である。図３６Ａの例は、クエリの接続関係を示すクエリグラフの一例を示す。図３６Ａの例のクエリグラフは、クエリＱ１の実行結果が用いられて、クエリＱ２、Ｑ３が実行されることを示す。また、図３６Ａの例のクエリグラフは、クエリＱ２の実行結果が用いられて、クエリＱ３が実行されることを示す。また、図３６Ａおよび図３６Ｂの例では、クエリグラフが示すクエリの隣接関係に応じて、クエリＱ１およびクエリＱ２がサーバ９０に配置され、クエリＱ３がサーバ９１に配置された場合を示す。ここで、クエリＱ１が配置された装置からクエリＱ２が配置された装置への処理結果の送信回数よりも、クエリＱ１が配置された装置からクエリＱ３が配置された装置への処理結果の送信回数が多い場合を説明する。この場合、図３６Ａおよび図３６Ｂの例では、通信サーバ９０は、クエリＱ１、Ｑ２が同一のサーバ９０に配置されたため、クエリＱ１、Ｑ２間では、実行結果の送信を行わない。しかしながら、図３６Ａおよび図３６Ｂの例では、通信サーバ９０は、クエリＱ１の実行結果をクエリＱ３が配置されたサーバ９１へ送信する。このように、図３５Ａおよび図３５Ｂの例では、クエリＱ１〜Ｑ３を実行する場合に、サーバ９０およびサーバ９１間で実行結果の送信が行われてしまう。
【００１１】
したがって、上記の技術では、装置間の通信の増加を抑制することが困難である。
【００１２】
１つの側面では、本発明は、装置間の通信の増加を抑制することを目的とする。
【課題を解決するための手段】
【００１３】
１つの案では、本願の開示する配置装置は、取得部と、特定部と、決定部とを有する。取得部は、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された複数のクエリについて、クエリ間の通信回数を示す情報を取得する。特定部は、取得部により取得された情報が示す通信回数に基づいて、クエリの組を特定する。決定部は、特定部により特定されたクエリの組を同一の装置に配置することを決定する。
【００１４】
また、他の案では、本願の開示する配置装置は、取得部と、算出部と、特定部と、決定部とを有する。取得部は、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された複数のクエリについて、クエリが実行された順序を示す情報を取得する。算出部は、取得部により取得された情報に基づいて、クエリ間の通信回数を算出する。特定部は、算出部により算出された通信回数に基づいて、クエリの組を特定する。決定部は、特定部により特定されたクエリの組を同一の装置に配置することを決定する。
【００１５】
また、他の案では、本願の開示する配置装置は、取得部と、算出部と、特定部と、決定部とを有する。取得部は、複数の処理要求文を連携してイベントを実行する該処理要求文が１以上配置された複数の装置が実行した処理要求文間の通信回数を示す情報を取得する。特定部は、通信回数に基づいて、処理要求文の組を特定する。決定部は、特定された処理要求文の組を同一の装置に配置するための装置を決定する。
【発明の効果】
【００１６】
装置間の通信の増加を抑制することができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、実施例１に係る配置装置を含むＣＥＰシステムの構成の一例を示す図である。
【図２】図２は、実施例２に係る配置装置を含むＣＥＰシステムの構成の一例を示す図である。
【図３】図３は、実施例３に係るＣＥＰシステムの構成の一例を示す図である。
【図４】図４は、実施例３に係るＶＭの処理の一例を説明するための図である。
【図５】図５は、実施例３に係るＶＭの処理の一例を説明するための図である。
【図６】図６は、実施例３に係るＶＭの処理の一例を説明するための図である。
【図７Ａ】図７Ａは、通信回数情報のデータ構造の一例を示す図である。
【図７Ｂ】図７Ｂは、通信回数情報のデータ構造の一例を示す図である。
【図７Ｃ】図７Ｃは、通信回数情報のデータ構造の一例を示す図である。
【図７Ｄ】図７Ｄは、通信回数情報のデータ構造の一例を示す図である。
【図８】図８は、実施例３に係るＶＭの処理の一例を説明するための図である。
【図９】図９は、データの流れに沿ってＣＥＰシステムの構成を模式的に示した図である。
【図１０Ａ】図１０Ａは、クエリの移動の一例を示す図である。
【図１０Ｂ】図１０Ｂは、クエリの移動の他の一例を示す図である。
【図１１】図１１は、クエリのグループ分けの一例を示す図である。
【図１２】図１２は、管理サーバの構成の一例を示す図である。
【図１３】図１３は、移動指示リストのデータ構造の一例を示す図である。
【図１４】図１４は、実施例３に係る管理サーバが実行する処理の一例を説明するための図である。
【図１５】図１５は、取得処理の手順を示すフローチャートである。
【図１６】図１６は、決定処理の手順を示すフローチャートである。
【図１７】図１７は、決定処理の手順を示すフローチャートである。
【図１８】図１８は、決定処理の手順を示すフローチャートである。
【図１９】図１９は、配置制御処理の手順を示すフローチャートである。
【図２０】図２０は、実施例４に係る管理サーバの構成を示すブロック図である。
【図２１】図２１は、実施例４に係る管理サーバが実行する処理の一例を説明するための図である。
【図２２】図２２は、実施例４に係る決定処理の手順を示すフローチャートである。
【図２３】図２３は、実施例４に係る決定処理の手順を示すフローチャートである。
【図２４】図２４は、実施例４に係る決定処理の手順を示すフローチャートである。
【図２５】図２５は、実施例５に係る管理サーバの構成を示すブロック図である。
【図２６】図２６は、実施例５に係る管理サーバが実行する処理の一例を説明するための図である。
【図２７】図２７は、実施例５に係る決定処理の手順を示すフローチャートである。
【図２８】図２８は、実施例５に係る決定処理の手順を示すフローチャートである。
【図２９】図２９は、実施例５に係る決定処理の手順を示すフローチャートである。
【図３０】図３０は、変形例に係る第一の除外処理の手順を示すフローチャートである。
【図３１】図３１は、変形例に係る第二の除外処理の手順を示すフローチャートである。
【図３２】図３２は、変形例に係る管理サーバの構成の一例を示す図である。
【図３３】図３３は、変形例に係る算出処理の手順を示すフローチャートである。
【図３４】図３４は、配置プログラムを実行するコンピュータを示す図である。
【図３５Ａ】図３５Ａは、上記の処理の分散の技術の一例を説明するための図である。
【図３５Ｂ】図３５Ｂは、上記の処理の分散の技術の一例を説明するための図である。
【図３６Ａ】図３６Ａは、上記の隣接するクエリ同士を同一の装置に配置する技術の一例を説明するための図である。
【図３６Ｂ】図３６Ｂは、上記の隣接するクエリ同士を同一の装置に配置する技術の一例を説明するための図である。
【発明を実施するための形態】
【００１８】
以下に、本願の開示する配置装置、配置プログラムおよび配置方法の各実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１９】
実施例１に係る配置装置について説明する。図１は、実施例１に係る配置装置を含むＣＥＰシステムの構成の一例を示す図である。図１の例のＣＥＰシステムは、配置装置１と複数の装置２ａ〜２ｃとを有する。図１の例では、配置装置１と、複数の装置２ａ〜２ｃとが接続される。したがって、配置装置１および複数の装置２ａ〜２ｃの各装置は、互いに通信を行うことができる。
【００２０】
配置装置１は、ＣＥＰシステムを管理する物理サーバである。例えば、配置装置１は、データセンサや各企業に設けられた管理用のサーバである。装置２ａ〜２ｃの各々は、物理サーバまたは物理サーバ上で動作する仮想マシンである。各装置２ａ〜２ｃには、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリ３ａ〜３ｃが配置される。各装置２ａ〜２ｃには、様々な対象から収集されたデータが配信（送信）される。各装置２ａ〜２ｃは、ＣＥＰシステムの外部から受信したデータ、または、ＣＥＰシステム内の他のクエリでの処理結果を示すデータを受信する。そして、各装置２ａ〜２ｃは、クエリ３ａ〜３ｃのそれぞれに設定された条件に合致した場合に、クエリ３ａ〜３ｃのそれぞれに設定された処理を実行する。
【００２１】
また、各装置２ａ〜２ｃに配置されたクエリ３ａ〜３ｃのそれぞれは、配置装置１により装置２ａ〜２ｃのいずれかの装置に再び配置される。例えば、各装置２ａ〜２ｃは、処理負荷を分散させる場合には、処理負荷が高い装置から処理負荷が低い装置へクエリを移動させる。
【００２２】
ここで、クエリ３ｂを実行する際に、クエリ３ａの処理結果（実行結果）が用いられ、また、クエリ３ｃを実行する際に、クエリ３ａまたはクエリ３ｃの処理結果が用いられる場合について説明する。この場合、装置２ａは、外部から受信したデータが、クエリ３ａに設定された条件に合致した場合に、クエリ３ａに設定された処理を実行する。そして、装置２ａは、クエリ３ａに設定された処理を実行した処理結果を、クエリ３ｂが配置された装置２ｂ、または、クエリ３ｃが配置された装置２ｃへ送信する。また、装置２ｂは、装置２ａから受信したデータが、クエリ３ｂに設定された条件に合致した場合に、クエリ３ｂに設定された処理を実行する。そして、装置２ｂは、クエリ３ｂに設定された処理を実行した処理結果を、クエリ３ｃが配置された装置２ｃへ送信する。ここで、装置２ａは、クエリ３ａに設定された処理を実行した処理結果を、装置２ｂよりも装置２ｃへ送信する回数が多い場合について説明する。なお、上述したように、装置２ｂは、装置２ａから受信したデータに基づいて、クエリ３ｂに設定された処理を実行し、処理結果を、装置２ｃへ送信する。この場合、結果的に、クエリ３ａ，３ｃ間の通信回数は、クエリ３ｂ，３ｃ間の通信回数よりも多い。このとき、後述する配置装置１の制御により、通信回数が多いクエリ３ａ，３ｃ間のクエリ３ａ，３ｃの組が同一の装置へ配置させることが決定される。
【００２３】
また、装置２ｃは、クエリ３ａ，３ｂ間、クエリ３ａ，３ｃ間、クエリ３ｂ，３ｃ間の通信回数を集計し、集計結果を配置装置１に送信する。すなわち、装置２ｃは、各クエリ間の通信回数を示す情報を配置装置１に送信する。なお、「クエリＡ，Ｂ間の通信回数」は、クエリＡが配置された装置と、クエリＢが配置された装置とで通信された（処理結果を送信した）回数を指す。
【００２４】
図１に示すように、配置装置１は、取得部１ａと、特定部１ｂと、決定部１ｃとを有する。
【００２５】
取得部１ａは、クエリ間の通信回数を示す情報を取得する。例えば、取得部１ａは、装置２ｃから送信された各クエリ間の通信回数を示す情報を受信することにより、かかる情報を取得する。
【００２６】
特定部１ｂは、取得部１ａにより取得された情報が示す通信回数に基づいて、クエリの組を特定する。例えば、特定部１ｂは、クエリ３ａ，３ｂ間、クエリ３ａ，３ｃ間、クエリ３ｂ，３ｃ間のうち、通信回数が最も多いクエリ３ａ，３ｃ間のクエリ３ａ，３ｃの組を特定する。
【００２７】
決定部１ｃは、特定部１ｂにより特定されたクエリの組を同一の装置に配置することを決定する。例えば、決定部１ｃは、特定部１ｂにより特定されたクエリ３ａ，３ｃの組を同一の装置２ａ，２ｂまたは２ｃなどに配置することを決定する。
【００２８】
このように、本実施例に係る配置装置１は、クエリ３ａ，３ｃを同一の装置へ配置することを決定する。したがって、この決定に基づきクエリ３ａ，３ｃが同一の装置へ配置された場合には、クエリ３ａ，３ｃが同一の装置へ配置される前に装置２ａ，２ｃ間で行われていたような、２つの装置間での処理結果の通信が行われなくなる。したがって、本実施例に係る配置装置１によれば、通信回数の増加を抑制することができる。
【００２９】
なお、図１の例では、機能的な構成を示したため、取得部１ａと、特定部１ｂと、決定部１ｃとを別に分けているが、１つのデバイスで構成してもよい。デバイスの一例としては、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路が挙げられる。なお、かかるデバイスとして、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路を採用することもできる。
【実施例２】
【００３０】
次に、実施例２について説明する。図２は、実施例２に係る配置装置を含むＣＥＰシステムの構成の一例を示す図である。図２の例のＣＥＰシステムは、配置装置５と複数の装置６ａ〜６ｃとを有する。図２の例では、配置装置５と、複数の装置６ａ〜６ｃとが接続される。したがって、配置装置５および複数の装置６ａ〜６ｃの各装置は、互いに通信を行うことができる。
【００３１】
配置装置５は、ＣＥＰシステムを管理する物理サーバである。例えば、配置装置５は、データセンサや各企業に設けられた管理用のサーバである。装置６ａ〜６ｃの各々は、物理サーバまたは物理サーバ上で動作する仮想マシンである。各装置６ａ〜６ｃには、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリ７ａ〜７ｃが配置される。各装置６ａ〜６ｃには、様々な対象から収集されたデータが配信（送信）される。各装置６ａ〜６ｃは、ＣＥＰシステムの外部から受信したデータ、または、ＣＥＰシステム内の他のクエリでの処理結果を示すデータを受信する。そして、各装置６ａ〜６ｃは、受信したデータがクエリ７ａ〜７ｃのそれぞれに設定された条件に合致した場合に、クエリ７ａ〜７ｃのそれぞれに設定された処理を実行する。
【００３２】
また、各装置６ａ〜６ｃに配置されたクエリ７ａ〜７ｃのそれぞれは、配置装置５により装置６ａ〜６ｃのいずれかの装置に再び配置される。例えば、各装置６ａ〜６ｃは、処理負荷を分散させる場合には、処理負荷が高い装置から処理負荷が低い装置へクエリを移動させる。
【００３３】
ここで、クエリ７ｂを実行する際に、クエリ７ａの処理結果が用いられ、また、クエリ７ｃを実行する際に、クエリ７ａまたはクエリ７ｃの処理結果が用いられる場合について説明する。この場合、装置６ａは、外部から受信したデータが、クエリ７ａに設定された条件に合致した場合に、クエリ７ａに設定された処理を実行する。そして、装置６ａは、クエリ７ａに設定された処理を実行した処理結果を、クエリ７ｂが配置された装置６ｂ、または、クエリ７ｃが配置された装置６ｃへ送信する。また、装置６ｂは、装置６ａから受信したデータが、クエリ７ｂに設定された条件に合致した場合に、クエリ７ｂに設定された処理を実行する。そして、装置６ｂは、クエリ７ｂに設定された処理を実行した処理結果を、クエリ７ｃが配置された装置６ｃへ送信する。ここで、装置６ａは、クエリ７ａに設定された処理を実行した処理結果を、装置６ｂよりも装置６ｃへ送信する回数が多い場合について説明する。なお、上述したように、装置６ｂは、装置６ａから受信したデータに基づいて、クエリ７ｂに設定された処理を実行し、処理結果を、装置６ｃへ送信する。そのため、結果的に、クエリ７ａ，７ｃ間の通信回数は、クエリ７ｂ，７ｃ間の通信回数よりも多い。このとき、後述する配置装置５の制御により、通信回数が多いクエリ７ａ，７ｃ間のクエリ７ａ，７ｃの組を同一の装置へ配置することが決定される。
【００３４】
また、各装置６ａ〜６ｃは、他の装置からクエリの識別子を受信していない場合に、クエリに設定された処理を実行した場合には、次のような情報を他の装置に送信する。すなわち、各装置６ａ〜６ｃは、処理結果と、実行したクエリの識別子とを他の装置に送信する。例えば、装置６ａは、他の装置からクエリの識別子を受信していない場合に、クエリ７ａに設定された処理の処理結果と、実行したクエリ７ａの識別子とを装置６ｂまたは装置６ｃに送信する。
【００３５】
また、各装置６ａ〜６ｃは、他の装置からクエリの識別子を受信した場合には、処理結果とともに、受信したクエリの識別子と実行したクエリの識別子とをクエリの実行順が認識可能な形式にして送信する。例えば、装置６ｂは、クエリ７ｂに設定された処理の処理結果を装置６ｃに送信する。これに加えて、装置６ｂは、装置６ａからクエリ７ａの識別子を受信した場合に、次のような処理を行う。すなわち、装置６ｂは、クエリの実行順が認識可能なように、受信したクエリ７ａの識別子の次に、実行したクエリ７ｂの識別子が並んだ情報、換言すれば、クエリ７ａが実行された後に、クエリ７ｂが実行されたことが認識可能な情報を装置６ｃに送信する。また、装置６ｃは、クエリ７ｃに設定された処理の処理結果を配信装置５に送信する。これに加えて、装置６ｃは、受信したクエリの識別子がクエリ７ａの識別子である場合には、クエリの実行順が認識可能なように、次のような処理を行う。すなわち、装置６ｃは、受信したクエリ７ａの識別子の次に、実行したクエリ７ｃの識別子が並んだ情報、換言すれば、クエリ７ａが実行された後に、クエリ７ｃが実行されたことが認識可能な情報を装置６ｃに送信する。また、装置６ｃは、受信したクエリの識別子がクエリ７ａの識別子およびクエリ７ｂの識別子である場合には、クエリの実行順が認識可能なように、次のような処理を行う。すなわち、装置６ｃは、クエリ７ａの識別子、クエリ７ｂの識別子、実行したクエリ７ｃの識別子の順で識別子が並んだ情報、換言すれば、クエリ７ａが実行された後に、クエリ７ｂ、クエリ７ｃの順で実行されたことが認識可能な情報を配置装置５に送信する。このようにして、装置６ｃは、クエリが実行された順序を示す情報を配置装置５に送信する。
【００３６】
図２に示すように、配置装置５は、取得部５ａと、算出部５ｂと、特定部５ｃと、決定部５ｄとを有する。
【００３７】
取得部５ａは、クエリが実行された順序を示す情報を取得する。例えば、取得部５ａは、装置６ｃから送信されたクエリが実行された順序を示す情報を受信することにより、かかる情報を取得する。
【００３８】
算出部５ｂは、取得部５ａにより取得された情報に基づいて、クエリ間の通信回数を算出する。例えば、算出部５ｂは、クエリが実行された順序を示す情報に、クエリ７ａの次に、クエリ７ｃが実行されたことを示す情報が含まれている場合には、クエリ７ａ，７ｃ間の通信回数を１つインクリメントする。また、算出部５ｂは、クエリが実行された順序を示す情報に、クエリ７ａの次に、クエリ７ｂが実行されたことを示す情報が含まれている場合には、クエリ７ａ，７ｂ間の通信回数を１つインクリメントする。また、算出部５ｂは、クエリが実行された順序を示す情報に、クエリ７ｂの次に、クエリ７ｃが実行されたことを示す情報が含まれている場合には、クエリ７ｂ，７ｃ間の通信回数を１つインクリメントする。
【００３９】
特定部５ｃは、算出部５ｂにより算出された通信回数に基づいて、クエリの組を特定する。例えば、特定部５ｃは、クエリ７ａ，７ｂ間、クエリ７ａ，７ｃ間、クエリ７ｂ，７ｃ間のうち、通信回数が最も多いクエリ７ａ，７ｃ間のクエリ７ａ，７ｃの組を特定する。
【００４０】
決定部５ｄは、特定部５ｃにより特定されたクエリの組を同一の装置に配置することを決定する。例えば、決定部５ｄは、特定部５ｃにより特定されたクエリ７ａ，７ｃの組を同一の装置６ａまたは６ｃに配置することを決定する。
【００４１】
このように、本実施例に係る配置装置５は、クエリ７ａ，７ｃを同一の装置へ配置することを決定する。したがって、この決定に基づきクエリ７ａ，７ｃが同一の装置へ配置された場合には、クエリ７ａ，７ｃが同一の装置へ配置される前に装置６ａ，６ｃ間で行われていたような、２つの装置間での処理結果の通信が行われなくなる。したがって、本実施例に係る配置装置５によれば、通信回数の増加を抑制することができる。
【００４２】
なお、図２の例では、機能的な構成を示したため、取得部５ａと、算出部５ｂと、特定部５ｃと、決定部５ｄとを別に分けているが、１つのデバイスで構成してもよい。デバイスの一例としては、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路が挙げられる。なお、かかるデバイスとして、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路を採用することもできる。
【実施例３】
【００４３】
実施例３について説明する。実施例３では、複数のサーバ上でそれぞれＶＭが動作し、ＶＭにクエリが配置されたＣＥＰシステムについて説明する。図３は、実施例３に係るＣＥＰシステムの構成の一例を示す図である。ＣＥＰシステム１０は、サーバ２０と、サーバ３１と、サーバ３２と、サーバ３３と、サーバ３４と、サーバ３５と、管理サーバ４０とを有する。これらの各サーバは、ネットワーク９９を介して接続される。すなわち、図３の例のＣＥＰシステム１０では、各サーバ間で通信を行うことができる。かかるネットワーク９９の一態様としては、有線または無線を問わず、ＬＡＮ（Local  Area  Network）やＶＰＮ（Virtual  Private  Network）などの任意の通信網が挙げられる。また、図３の例では、サーバ３１〜３５の台数を５台、管理サーバ４０の台数を１台、サーバ２０の台数を１台とする場合について例示したが、これらの台数は任意の値を採用することができる。
【００４４】
サーバ３１では、ＶＭ３１ａ，３１ｂが動作する。同様に、各サーバ３２〜３５では、それぞれ、ＶＭ３２ａ，３２ｂ、ＶＭ３３ａ，３３ｂ、ＶＭ３４ａ，３４ｂ、ＶＭ３５ａ，３５ｂが動作する。本実施例の説明では、これらの各ＶＭ３２ａ、３２ｂ、３３ａ、３３ｂ、ＶＭ３４ａ、３４ｂ、３５ａ、３５ｂを区別無く説明する場合には、単にＶＭと総称する。また、図３の例では、各サーバ３１〜３５上で動作するＶＭの台数が２台の場合について例示したが、各サーバ３１〜３５上で動作するＶＭの台数は、任意の値を採ることができる。ＶＭには、後述するように、管理サーバ４０の制御により、クエリが配置される。また、ＶＭは、ＣＥＰシステム１０の外部から受信したデータであって後述の前処理が行われたデータ、または、ＣＥＰシステム１０内の他のクエリでの処理結果を示すデータを受信する。そして、ＶＭは、受信したデータが、ＶＭに配置されたクエリに設定された条件に合致した場合に、クエリに設定された処理を実行する。
【００４５】
また、ＶＭは、後述するように、管理サーバ４０から、処理結果の送信先のＶＭのアドレス、例えば、ＩＰ（Internet  Protocol）アドレスが通知される。また、ＶＭには、後述するように、管理サーバ４０から、クエリグラフが送信される。
【００４６】
また、ＶＭは、他のＶＭからクエリの識別子を受信していない場合に、クエリに設定された処理を実行したときには、次のような情報を他のＶＭに送信する。すなわち、ＶＭは、処理結果と、実行したクエリの識別子とを含むデータを、アドレスに対応するＶＭに送信する。ここで、以下の説明において、かかるデータを「イベントデータ」と表記する場合がある。
【００４７】
また、ＶＭは、他のＶＭからクエリの識別子を受信した場合には、受信したクエリの識別子と実行したクエリの識別子とをクエリの実行順が認識可能な形式にして、処理結果とともにイベントデータに含め、イベントデータを送信する。例えば、ＶＭは、通知されたアドレスを用いて、アドレスに対応するＶＭに、かかるイベントデータを送信する。このとき、ＶＭは、他のＶＭからクエリの識別子を受信した場合に、次のような処理を行う。すなわち、ＶＭは、クエリの実行順が認識可能なように、受信したクエリの識別子の次に、実行したクエリの識別子が並んだ情報、換言すれば、クエリが実行された順序が認識可能な情報をイベントデータに含めて、アドレスに対応するＶＭに送信する。
【００４８】
具体例を挙げて、実施例３に係るＶＭの処理を説明する。図４〜図６は、実施例３に係るＶＭの処理の一例を説明するための図である。図４は、ＶＭに送信されるクエリグラフ６０の一例を示す。図４の例では、クエリグラフ６０は、クエリに設定された処理の実行順序を示す。図４の例のクエリグラフ６０は、クエリ６１に設定された処理の実行結果が用いられて、クエリ６２に設定された処理が実行されることを示す。また、図４の例では、クエリ６３〜６８の各クエリに設定された処理についても同様にして実行される。また、図４の例のクエリグラフ６０は、最初に実行される処理が設定されたクエリが、クエリ６１であることを示す。また、図４の例のクエリグラフ６０は、最後に実行される処理が設定されたクエリが、クエリ６５であることを示す。したがって、図６の例に示すクエリグラフ６０が送信されたＶＭは、自身に配置されたクエリと、クエリグラフ６０の内容とから、自身に配置されたクエリが、最後に実行される処理が設定されたクエリであるか否かを判定することができる。例えば、ＶＭは、クエリグラフ６０を受信した場合に、クエリグラフ６０を参照し、自身に配置されたクエリが、クエリ６５であるか否かを判定することで、自身に配置されたクエリが、最後に実行される処理が設定されたクエリであるか否かを判定できる。
【００４９】
図５は、他のクエリグラフ７０の一部の例を示す。図５の例では、クエリグラフ７０は、クエリ７１に設定された処理の処理結果が用いられて、クエリ７２，７３に設定された処理が実行されることを示す。また、図５の例のクエリグラフ７０は、クエリ７２に設定された処理の処理結果が用いられて、クエリ７３に設定された処理が実行されることを示す。ここで、管理サーバ４０により、クエリグラフ７０が、ＶＭに送信され、ＶＭ３１ａにクエリ７１、ＶＭ３２ａにクエリ７２、ＶＭ３３ａにクエリ７３が配置された場合のＶＭ３１ａ，３２ａ，３３ａの動作の一例について説明する。なお、以下の説明では、クエリ７１〜７３のそれぞれを、「Ｑ１」、「Ｑ２」、「Ｑ３」と表記する場合がある。
【００５０】
図６の例では、ＶＭ３１ａ，３２ａ，３３ａのそれぞれは、まず、自身に配置されたクエリＱ１，Ｑ２，Ｑ３のそれぞれが、クエリグラフ７０が示す、最後に実行される処理が設定されたクエリＱ３であるか否かを判定する。これにより、ＶＭ３１ａ，３２ａは、自身に配置されたクエリＱ１，Ｑ２が、最後に実行される処理が設定されたクエリでないと判定する。またＶＭ３３ａは、自身に配置されたクエリＱ３が、最後に実行される処理が設定されたクエリであると判定する。このような判定をしたＶＭ３３ａは、後述するように、イベントデータに含まれるクエリＱ１，Ｑ２，Ｑ３の実行順序から、各クエリ間の通信回数を集計し、集計結果を含む通信回数情報を管理サーバ４０に送信する。
【００５１】
図６の例では、ＶＭ３１ａは、ＶＭ３２ａに送信するイベントデータ３６ａの「ＩＤ（Identification）」の項目に、イベントデータを識別するための識別子を登録する。また、ＶＭ３１ａは、イベントデータ３６ａの「処理結果」の項目に、クエリＱ１に設定された処理の処理結果を登録する。また、ＶＭ３１ａは、イベントデータ３６ａの「実行順序」の項目に、実行した処理が設定されたクエリＱ１の識別子「Ｑ１」を登録する。また、ＶＭ３１ａは、イベントデータ３６ａのその他の各種項目についても、各項目に対応する情報を登録する。このようにして、ＶＭ３１ａは、イベントデータ３６ａを生成する。そして、ＶＭ３１ａは、管理サーバ４０から通知された、処理結果の送信先のＶＭ３２ａのアドレスを用いて、ＶＭ３２ａに、生成したイベントデータ３６ａを送信する。
【００５２】
また、ＶＭ３１ａは、ＶＭ３３ａに送信するイベントデータ３６ｂの「ＩＤ」の項目に、イベントデータを識別するための識別子を登録する。また、ＶＭ３１ａは、イベントデータ３６ｂの「処理結果」の項目に、クエリＱ１に設定された処理の処理結果を登録する。また、ＶＭ３１ａは、イベントデータ３６ｂの「実行順序」の項目に、実行した処理が設定されたクエリＱ１の識別子「Ｑ１」を登録する。また、ＶＭ３１ａは、イベントデータ３６ｂのその他の各種項目についても、各項目に対応する情報を登録する。このようにして、ＶＭ３１ａは、イベントデータ３６ｂを生成する。そして、ＶＭ３１ａは、管理サーバ４０から通知された、処理結果の送信先のＶＭ３３ａのアドレスを用いて、ＶＭ３３ａに、生成したイベントデータ３６ｂを送信する。
【００５３】
そして、ＶＭ３２ａは、イベントデータ３６ａを受信すると、イベントデータ３６ａの「処理結果」の項目に登録された処理結果のデータが、クエリＱ２に設定された条件に合致するか否かを判定する。続いて、ＶＭ３２ａは、合致した場合に、クエリＱ２に設定された処理を実行する。そして、ＶＭ３２ａは、ＶＭ３３ａに送信するイベントデータ３６ｃの「ＩＤ」の項目に、イベントデータを識別するための識別子を登録する。また、ＶＭ３２ａは、イベントデータ３６ｃの「処理結果」の項目に、クエリＱ２に設定された処理の処理結果を登録する。また、ＶＭ３２ａは、イベントデータ３６ａの「実行順序」の項目に登録された識別子「Ｑ１」を取得し、取得した識別子「Ｑ１」の次に、実行した処理が設定されたクエリＱ２の識別子「Ｑ２」が並ぶように、次のような処理を行う。すなわち、ＶＭ３２ａは、イベントデータ３６ｃの「実行順序」の項目に、識別子「Ｑ１」の次に、識別子「Ｑ２」が並んで登録されるように、識別子「Ｑ１」および「Ｑ２」を登録する。また、ＶＭ３２ａは、イベントデータ３６ｃのその他の各種項目についても、各項目に対応する情報を登録する。このようにして、ＶＭ３２ａは、イベントデータ３６ｃを生成する。そして、ＶＭ３２ａは、管理サーバ４０から通知された、処理結果の送信先のＶＭ３３ａのアドレスを用いて、ＶＭ３３ａに、生成したイベントデータ３６ｃを送信する。
【００５４】
ＶＭ３３ａは、イベントデータ３６ｂを受信すると、イベントデータ３６ｂの「処理結果」の項目に登録された処理結果のデータが、クエリＱ３に設定された条件に合致するか否かを判定する。続いて、ＶＭ３３ａは、合致した場合に、クエリＱ３に設定された処理を実行する。そして、ＶＭ３３ａは、イベントデータ３６ｂの「実行順序」の項目に登録された識別子「Ｑ１」を取得し、取得した識別子「Ｑ１」の次に、実行した処理が設定されたクエリＱ３の識別子「Ｑ３」が並んだ情報「Ｑ１、Ｑ３」を生成する。そして、ＶＭ３３ａは、生成した情報「Ｑ１、Ｑ３」を参照して、識別子「Ｑ１」が示すクエリＱ１に設定された処理が実行された後に、識別子「Ｑ３」が示すクエリＱ３に設定された処理が実行されたと判定する。続いて、ＶＭ３３ａは、判定結果に基づいて、通信回数情報３７の送信元の項目「Ｑ１」、送信先の項目「Ｑ３」に対応する項目に登録された値を１つインクリメントする。
【００５５】
図７Ａ〜図７Ｄは、通信回数情報のデータ構造の一例を示す図である。通信回数情報３７には、クエリ間の通信回数が登録される。図７Ａの例では、通信回数情報３７は、クエリに設定された処理の実行順序が前後となる２つのクエリについて、先に実行された処理が設定されたクエリ（先クエリ）と、後に実行された処理が設定されたクエリ（後クエリ）とに対応する通信回数が登録される項目３７ａを有する。図７Ａの例は、ＶＭ３３ａにより項目３７ａの値がインクリメントされる前の、いわゆる初期状態を示し、全ての項目３７ａの値は、「０」である。
【００５６】
通信回数情報３７の項目３７ａの登録内容が、図７Ａの例が示す場合に、上述したように、ＶＭ３３ａが、クエリＱ１に設定された処理が実行された後に、クエリＱ３に設定された処理が実行されたと判定したときには、ＶＭ３３ａは、次のような処理を行う。すなわち、ＶＭ３３ａは、図７Ｂの例に示すように、「先クエリ」の項目が「Ｑ１」、「後クエリ」の項目が「Ｑ３」に対応する項目３７ａに登録された値を１つインクリメントする。
【００５７】
また、ＶＭ３３ａは、イベントデータ３６ｃを受信すると、イベントデータ３６ｃの「処理結果」の項目に登録された処理結果のデータが、クエリＱ３に設定された条件に合致するか否かを判定する。続いて、ＶＭ３３ａは、合致した場合に、クエリＱ３に設定された処理を実行する。そして、ＶＭ３３ａは、イベントデータ３６ｃの「実行順序」の項目に登録された識別子「Ｑ１，Ｑ２」を取得し、取得した識別子「Ｑ１，Ｑ２」の次に、実行した処理が設定されたクエリＱ３の識別子「Ｑ３」が並んだ情報「Ｑ１，Ｑ２，Ｑ３」を生成する。そして、ＶＭ３３ａは、生成した情報「Ｑ１，Ｑ２，Ｑ３」を参照して、識別子「Ｑ１」が示すクエリＱ１に設定された処理が実行された後に、識別子「Ｑ２」が示すクエリＱ２に設定された処理が実行されたと判定する。また、ＶＭ３３ａは、生成した情報「Ｑ１，Ｑ２，Ｑ３」を参照して、識別子「Ｑ２」が示すクエリＱ２に設定された処理が実行された後に、識別子「Ｑ３」が示すクエリＱ３に設定された処理が実行されたと判定する。続いて、ＶＭ３３ａは、判定結果に基づいて、通信回数情報３７の送信元の項目「Ｑ１」、送信先の項目「Ｑ２」に対応する項目に登録された値を１つインクリメントする。また、ＶＭ３３ａは、判定結果に基づいて、通信回数情報３７の送信元の項目「Ｑ２」、送信先の項目「Ｑ３」に対応する項目に登録された値を１つインクリメントする。
【００５８】
通信回数情報３７の項目３７ａの登録内容が、図７Ａの例が示す場合に、上述したように、ＶＭ３３ａが、クエリＱ１に設定された処理が実行された後に、クエリＱ２に設定された処理が実行されたと判定したときには、ＶＭ３３ａは、次のような処理を行う。すなわち、ＶＭ３３ａは、図７Ｃの例に示すように、「先クエリ」の項目が「Ｑ１」、「後クエリ」の項目が「Ｑ２」に対応する項目３７ａに登録された値を１つインクリメントする。また、この場合に、上述したように、ＶＭ３３ａが、クエリＱ２に設定された処理が実行された後に、クエリＱ３に設定された処理が実行されたと判定したときには、ＶＭ３３ａは、次のような処理を行う。すなわち、ＶＭ３３ａは、図７Ｃの例に示すように、「先クエリ」の項目が「Ｑ２」、「後クエリ」の項目が「Ｑ３」に対応する項目３７ａに登録された値を１つインクリメントする。
【００５９】
また、図７Ａの例が示す場合から、クエリＱ１に設定された処理が実行された後に、クエリＱ３に設定された処理が実行されたと判定した回数が「１０」である場合には、ＶＭ３３ａは、次のような処理を行う。すなわち、ＶＭ３３ａは、「先クエリ」の項目が「Ｑ１」、「後クエリ」の項目が「Ｑ３」に対応する項目３７ａに登録された値を１つインクリメントすることを１０回行う。この結果、図７Ｄの例に示すように、「先クエリ」の項目が「Ｑ１」、「後クエリ」の項目が「Ｑ３」に対応する項目３７ａに登録された値が「１０」となる。また、クエリＱ１に設定された処理が実行された後に、クエリＱ２に設定された処理が実行されたと判定した回数が「１」である場合には、ＶＭ３３ａは、次のような処理を行う。すなわち、ＶＭ３３ａは、「先クエリ」の項目が「Ｑ１」、「後クエリ」の項目が「Ｑ２」に対応する項目３７ａに登録された値を１つインクリメントすることを１回行う。この結果、図７Ｄの例に示すように、「先クエリ」の項目が「Ｑ１」、「後クエリ」の項目が「Ｑ２」に対応する項目３７ａに登録された値が「１」となる。また、クエリＱ２に設定された処理が実行された後に、クエリＱ３に設定された処理が実行されたと判定した回数が「１」である場合には、ＶＭ３３ａは、次のような処理を行う。すなわち、ＶＭ３３ａは、「先クエリ」の項目が「Ｑ２」、「後クエリ」の項目が「Ｑ３」に対応する項目３７ａに登録された値を１つインクリメントすることを１回行う。この結果、図７Ｄの例に示すように、「先クエリ」の項目が「Ｑ２」、「後クエリ」の項目が「Ｑ３」に対応する項目３７ａに登録された値が「１」となる。
【００６０】
このようにして、自身に配置されたクエリＱ３が、最後に実行される処理が設定されたクエリであると判定をしたＶＭ３３ａは、イベントデータに含まれるクエリＱ１，Ｑ２などの実行順序から、各クエリ間の通信回数を集計する。そして、ＶＭ３３ａは、集計結果を含む通信回数情報３７を生成する。続いて、ＶＭ３３ａは、所定時間間隔、例えば、１分毎に、生成した通信回数情報３７を管理サーバ４０に送信する。
【００６１】
また、ＶＭは、所定時間ごと、例えば、１分ごとに、負荷を示す負荷情報を管理サーバ４０へ送信する。なお、負荷情報は、例えば、クエリおよびクエリに付随するデータなどを含む処理要素ごとの負荷を示す情報である。
【００６２】
具体例を挙げて、実施例３に係るＶＭの処理を説明する。図８は、実施例３に係るＶＭの処理の一例を説明するための図である。図８の例では、ＶＭ３１ａは、管理サーバ４０に送信する負荷情報３８ａの「装置」の項目に、ＶＭ３１ａの識別子「３１ａ」を登録する。また、図８の例では、ＶＭ３１ａは、負荷情報３８ａの「クエリ」の項目に、ＶＭ３１ａに配置されたクエリＱ１の識別子「Ｑ１」を登録する。また、図８の例では、ＶＭ３１ａは、負荷情報３８ａの「処理要素」の項目に、クエリＱ１およびクエリＱ１に付随するデータを含む処理要素の識別子「Ｖ１」を登録する。また、図８の例では、ＶＭ３１ａは、負荷情報３８ａの「負荷値」の項目に、処理要素の負荷、例えば、単位時間の間（例えば、１秒間）に処理されたイベントの数ｍを登録する。
【００６３】
また、図８の例では、ＶＭ３２ａは、管理サーバ４０に送信する負荷情報３８ｂの「装置」の項目に、ＶＭ３２ａの識別子「３２ａ」を登録する。また、図８の例では、ＶＭ３２ａは、負荷情報３８ｂの「クエリ」の項目に、ＶＭ３２ａに配置されたクエリＱ２の識別子「Ｑ２」を登録する。また、図８の例では、ＶＭ３２ａは、負荷情報３８ｂの「処理要素」の項目に、クエリＱ２およびクエリＱ２に付随するデータを含む処理要素の識別子「Ｖ２」を登録する。また、図８の例では、ＶＭ３２ａは、負荷情報３８ｂの「負荷値」の項目に、処理要素の負荷、例えば、単位時間の間（例えば、１秒間）に処理されたイベントの数ｎを登録する。
【００６４】
また、図８の例では、ＶＭ３３ａは、管理サーバ４０に送信する負荷情報３８ｃの「装置」の項目に、ＶＭ３３ａの識別子「３３ａ」を登録する。また、図８の例では、ＶＭ３３ａは、負荷情報３８ｃの「クエリ」の項目に、ＶＭ３３ａに配置されたクエリＱ３の識別子「Ｑ３」を登録する。また、図８の例では、ＶＭ３３ａは、負荷情報３８ｃの「処理要素」の項目に、クエリＱ３およびクエリＱ３に付随するデータを含む処理要素の識別子「Ｖ３」を登録する。また、図８の例では、ＶＭ３３ａは、負荷情報３８ｃの「負荷値」の項目に、処理要素の負荷、例えば、単位時間の間（例えば、１秒間）に処理されたイベントの数ｒを登録する。
【００６５】
このようにして、ＶＭ３１ａ〜３３ａのそれぞれは、負荷情報３８ａ〜３８ｃのそれぞれを生成する。
【００６６】
また、図８の例では、ＶＭ３１ａ〜３３ａのそれぞれは、負荷情報３８ａ〜３８ｃのそれぞれを、所定時間ごとに、管理サーバ４０に送信する。
【００６７】
管理サーバ４０は、サーバ２０、サーバ３１〜３５、ＶＭ３１ａ〜３５ａ，３１ｂ〜３５ｂを管理するサーバである。管理サーバ４０は、クエリの配置を制御する。
【００６８】
図９は、データの流れに沿ってＣＥＰシステムの構成を模式的に示した図である。サーバ２０、ＶＭ３１ａ〜３５ａ，３１ｂ〜３５ｂおよび管理サーバ４０は、各クエリが処理対象とするデータ毎に当該クエリの配置先が登録されたルーティングテーブル５０を記憶する。
【００６９】
サーバ２０は、外部ネットワーク９８を介して様々な対象から多数のデータを受信する。サーバ２０は、受信したデータを所定のデータ構成に整える前処理を行う。そして、サーバ２０は、ルーティングテーブル５０に基づき、受信したデータを処理対象とするクエリの配置先を特定する。続いて、サーバ２０は、前処理が行われたデータを特定した配置先のＶＭへ送信する。なお、図３および図９の例では、サーバ２０の台数が１台である場合を例示したが、サーバ２０を複数台設けて、複数のサーバ２０により受信したデータを各ＶＭへ送信してもよい。
【００７０】
ＶＭは、それぞれエンジン５１を動作させる。エンジン５１は、複合イベント処理を実現するソフトウェアである。エンジン５１は、受信したデータと、クエリの条件式とを突合させてイベントを検出し、検出したイベントの処理を実行する制御を行う。また、ＣＥＰシステム１０では、複数のクエリにより一連の処理を実行させる。例えば、上位のクエリによる処理結果のデータを下位のクエリへ送信する。そして、下位のクエリでは、送信されたデータを、下位のクエリに設定された処理を実行する際に用いる。エンジン５１は、複数のクエリにより一連の処理を実行する場合、クエリによる処理結果のデータを下位のクエリが配置されたＶＭへ送信する。また、エンジン５１は、管理サーバ４０からのクエリの移動の指示に応じて、他のＶＭ上で動作するエンジン５１との間でクエリを移動させる制御を行う。
【００７１】
ここで、クエリの移動について説明する。クエリは、付随するデータを有する場合がある。例えば、クエリが処理対象とするデータの所定の期間の平均を求める処理を行う場合、平均を算出するために所定の期間より長い期間の間に受信したデータを保持する。また、クエリは、処理にテーブルなどの所定のデータを用いる場合もある。エンジン５１は、クエリを移動させる場合、クエリおよびクエリに付随するデータを処理要素として移動させる。
【００７２】
また、クエリの移動には、複数のケースが考えられる。図１０Ａは、クエリの移動の一例を示す図である。図１０Ａに示すように、クエリ毎に処理対象とするデータが異なる場合、クエリを移動させ、移動先で処理対象とするデータを処理させる。例えば、処理を分散させる場合、各クエリをそれぞれ異なるＶＭに移動させて、各ＶＭによりデータを処理させる。一方、処理負荷が低い場合などには、クエリをより少ない台数のＶＭ、例えば、１台のＶＭに移動させ、１台のＶＭによりデータを処理させる。
【００７３】
一方、クエリは、処理対象とするデータが複数である場合がある。例えば、データとして証券コードおよび株価がＶＭに配信され、クエリが証券コード毎に株価の一定期間の移動平均を求める処理を行う場合がある。図１０Ｂは、クエリの移動の他の一例を示す図である。図１０Ｂの例では、図１０Ｂの左側に示すように、クエリは、データ１〜ｎが処理対象である。この場合、処理対象のデータ１〜ｎ毎に、クエリを移動させる。例えば、処理の分散を行う場合、クエリを複製して他のＶＭに移動させ、処理対象のデータ１〜ｎをそれぞれ異なるＶＭにより処理させる。一方、処理負荷が低い場合などには、クエリを１台のＶＭに配置させ、処理対象のデータ１〜ｎを１台のＶＭにより処理させる。
【００７４】
ここで、本実施例では、複数のクエリのそれぞれを複数のグループに分け、グループ毎に移動する。また、ルーティングテーブル５０は、グループ毎に格納先を管理する。図１１は、クエリのグループ分けの一例を示す図である。例えば、本実施例では、処理対象とする各データに、データを識別するキーが所定ビットの整数データとして含まれ、それぞれのクエリに処理の条件ごとに異なるキーが設定されている。この場合、処理の条件ごとに設定されたキーを用いて、キーから値を算出する所定の関数、例えば、ハッシュ関数によりハッシュ値を算出して、ハッシュ値が同一となるクエリを同一のグループとしてグループ分けする。例えば、処理の条件に設定されたキーを用いて、ハッシュ関数により算出されたハッシュ値が同一となるクエリを同一のグループとして静的にグループを分ける。図１１の例は、クエリをグループ分けした各グループを「Ｖ−Ｎｏｄｅ」とする場合を示す。そして、本実施例では、Ｖ−Ｎｏｄｅ毎に、クエリをＶＭに配置する。なお、本実施例では、複数のクエリのそれぞれが異なるグループに分けられることとする。
【００７５】
ルーティングテーブル５０には、Ｖ−Ｎｏｄｅ毎に配置先が登録される。例えば、ルーティングテーブル５０は、Ｖ−Ｎｏｄｅの識別子が登録される項目と、配置先のＶＭのＩＰアドレスが登録される項目とを有する。
【００７６】
サーバ２０および各ＶＭのエンジン５１は、キーに基づいてクエリの配置先を判別する。例えば、サーバ２０は、受信したデータに含まれるキーを用いてハッシュ関数によりハッシュ値を算出する。そして、サーバ２０は、ルーティングテーブル５０からＶ−Ｎｏｄｅの識別子が登録される項目に、算出したハッシュ値が登録されたレコードを検索する。続いて、サーバ２０は、検索の結果、レコードが得られた場合、得られたレコードの配置先のＶＭのＩＰアドレスが登録される項目に登録されたＩＰアドレスを取得する。そして、サーバ２０は、取得したＩＰアドレスを用いて、ＶＭと通信を行う。
【００７７】
上述したように、各ＶＭは、負荷情報を管理サーバ４０へ送信する。そして、後述するように、管理サーバ４０が、各ＶＭから送信された負荷情報に基づき、クエリを移動させるための指示（移動指示）を送信する。なお、本実施例では、Ｖ−Ｎｏｄｅ単位でクエリの移動が行われる。管理サーバ４０は、移動先のＶＭ３１のＩＰアドレスおよび移動対象のＶ−Ｎｏｄｅの識別子を含む移動指示を移動元のＶＭに送信する。移動指示を受信したＶＭのエンジン５１は、移動対象のＶ−Ｎｏｄｅに属するクエリや当該クエリに付随するデータなどの処理要素をシリアライズして移動先のＶＭへ送信する。
【００７８】
移動先のＶＭのエンジン５１は、送信されたデータをデシリアライズして復元し、復元されたクエリの駆動を開始する。また、エンジン５１は、ルーティングテーブル５０の移動したＶ−Ｎｏｄｅに属するクエリの格納先を自身が動作するＶＭのＩＰアドレスに更新する。そして、エンジン５１は、他のＶＭ、サーバ２０および管理サーバ４０に対して移動対象のＶ−Ｎｏｄｅの識別子および移動先のＶＭのＩＰアドレスを含むルーティングテーブル更新指示を通知する。なお、管理サーバ４０は、移動元および移動先のＶＭのＩＰアドレス、並びに、移動された処理要素の識別子など移動に関する各情報を把握しているため、管理サーバ４０が、ルーティングテーブル更新指示を送信することもできる。
【００７９】
各ＶＭ、サーバ２０および管理サーバ４０は、ルーティングテーブル更新指示が通知された場合、次のような処理を行う。すなわち、各ＶＭ、サーバ２０および管理サーバ４０は、ルーティングテーブル５０の通知された移動対象のＶ−Ｎｏｄｅに属するクエリの格納先を、通知されたルーティングテーブル更新指示に含まれる移動先のＶＭのＩＰアドレスに更新する。
【００８０】
図１２は、管理サーバの構成の一例を示す図である。図１２に示すように、管理サーバ４０は、入力部４１と、出力部４２と、通信部４３と、記憶部４４と、制御部４５とを有する。
【００８１】
入力部４１は、各種情報を制御部４５に入力する。例えば、入力部４１は、ユーザからの各種指示を受け付けて、受け付けた指示を制御部４５に入力する。入力部４１のデバイスの一例としては、マウスやキーボードなどのユーザの操作を受け付けるデバイスなどが挙げられる。
【００８２】
出力部４２は、各種の情報を出力する。例えば、出力部４２は、ＶＭの稼働状態などを表示する。出力部４２のデバイスの一例としては、液晶ディスプレイなどが挙げられる。
【００８３】
通信部４３は、各装置間の通信を行うためのインターフェースである。例えば、通信部４３は、ネットワーク９９に接続される。これにより、管理サーバ４０と、サーバ２０、各ＶＭとが通信を行うことができる。例えば、通信部４３は、ネットワーク９９を介して、ＶＭから通信回数情報３７を受信した場合には、受信した通信回数情報３７を制御部４５に送信する。また、通信部４３は、ネットワーク９９を介して、ＶＭから負荷情報３８を受信した場合には、受信した負荷情報３８を制御部４５へ送信する。
【００８４】
記憶部４４は、各種情報を記憶する。例えば、記憶部４４は、上述したルーティングテーブル５０、通信回数情報３７、負荷情報３８、移動指示リスト４６を記憶する。
【００８５】
通信回数情報３７は、ＶＭから送信された情報であり、後述の取得部４５ｂによりＶＭから取得され、記憶部４４に格納される。負荷情報３８は、ＶＭから送信された情報であり、後述の取得部４５ｂによりＶＭから取得され、記憶部４４に格納される。
【００８６】
移動指示リスト４６には、移動対象の処理要素の識別子、移動元のＶＭのＩＰアドレス、移動先のＶＭのＩＰアドレスが後述の決定部４５ｄにより登録される。図１３は、移動指示リストのデータ構造の一例を示す図である。図１３の例では、移動指示リスト４６は、移動対象の処理要素の識別子が登録される「処理要素」の項目４６ａ、移動元のＶＭのＩＰアドレスが登録される「移動元」の項目４６ｂ、移動先のＶＭのＩＰアドレスが登録される「移動先」の項目４６ｃを有する。
【００８７】
記憶部４４は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部４４は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ（Random  Access  Memory)、ＲＯＭ（Read  Only  Memory)であってもよい。
【００８８】
制御部４５は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図１２に示すように、制御部４５は、初期配置部４５ａと、取得部４５ｂと、特定部４５ｃと、決定部４５ｄと、配置制御部４５ｅとを有する。
【００８９】
初期配置部４５ａは、クエリグラフに基づいて、既知の技術を用いて、複数のＶＭにクエリを配置する。また、初期配置部４５ａは、クエリグラフを各ＶＭに送信する。また、初期配置部４５ａは、各ＶＭに、各ＶＭが実行する処理が設定されたクエリを通知する。また、初期配置部４５ａは、各ＶＭに、処理の処理結果の送信先のＶＭのＩＰアドレスを送信する。
【００９０】
取得部４５ｂは、各種情報を取得する。例えば、取得部４５ｂは、複数のＶＭにおいて処理が実行された複数のクエリについて、クエリ間の通信回数を示す通信回数情報３７を取得する。
【００９１】
具体例を挙げて説明する。取得部４５ｂは、通信部４３を介して、ＶＭから送信された通信回数情報３７を受信することで、通信回数情報３７を取得する。通信回数情報３７を取得した場合には、取得部４５ｂは、取得した通信回数情報３７を記憶部４４に格納する。また、取得部４５ｂは、通信部４３を介して、ＶＭから送信された負荷情報３８を受信することで、負荷情報３８を取得する。負荷情報３８を取得した場合には、取得部４５ｂは、取得した負荷情報３８を記憶部４４に格納する。また、取得部４５ｂは、記憶部４４に記憶された通信回数情報３７、負荷情報３８を取得する。
【００９２】
特定部４５ｃは、各種情報を特定する。例えば、特定部４５ｃは、取得部４５ｂにより取得された通信回数情報が示す通信回数に基づいて、クエリの組を特定する。
【００９３】
具体例を挙げて説明する。まず、特定部４５ｃは、取得部４５ｂにより取得された負荷情報３８を用いて、ＶＭごとに、処理要素ごとの負荷の和を算出し、各ＶＭの負荷を算出する。続いて、特定部４５ｃは、算出した各ＶＭの負荷を用いて、全ＶＭの負荷の平均値Ａｖｅを算出する。その後、特定部４５ｃは、負荷が閾値α以上のＶＭがあるか否かを判定する。
【００９４】
図１４は、実施例３に係る管理サーバが実行する処理の一例を説明するための図である。図１４の例は、５つのＶＭ３１ａ〜３５ａのそれぞれの負荷を示す。横軸は、ＶＭを示し、縦軸は、ＶＭの負荷を示す。また、ＶＭの中の「Ｈｉｇｈ」は、負荷が第一の閾値を超えた高負荷である処理要素を示す。また、ＶＭの中の「Ｍｉｄｄｌｅ」は、負荷が第一の閾値以下で、かつ、第一の閾値より小さい第二の閾値を超えた中負荷である処理要素を示す。また、ＶＭの中の「Ｌｏｗ」は、負荷が第二の閾値以下である小負荷である処理要素を示す。図１４の例では、閾値αは、上限の負荷の警戒値である。また、図１４の例では、閾値βは、閾値αよりも小さく、下限の負荷の警戒値である。図１４の例では、ＶＭ３１ａの負荷が閾値αを超えているため、特定部４５ｃは、負荷が閾値α以上のＶＭがあると判定する。
【００９５】
負荷が閾値α以上のＶＭがある場合には、特定部４５ｃは、負荷が閾値α以上の全てのＶＭを移動元のＶＭの候補とする。例えば、図１４の例では、特定部４５ｃは、負荷が閾値α以上のＶＭ３１ａを移動元のＶＭの候補とする。
【００９６】
そして、特定部４５ｃは、負荷が平均値Ａｖｅ未満の全てのＶＭを移動先のＶＭの候補とする。例えば、図１４の例では、負荷が平均値Ａｖｅ未満のＶＭ３５ａを移動先のＶＭの候補とする。
【００９７】
そして、特定部４５ｃは、下記の処理で、特定したクエリの組について、全ての移動元のＶＭおよび全ての移動先のＶＭの組み合わせにおいて、同一のＶＭに配置することが可能か検証したか否かを判定する。検証していない場合には、特定部４５ｃは、下記の処理で、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたＶＭに移動することが移動指示リスト４６に登録済みであるか否かを判定する。
【００９８】
登録されていない場合には、特定部４５ｃは、下記の処理で、移動元のＶＭの候補のうち、未選択のＶＭがあるか否かを判定する。未選択のＶＭがない場合には、特定部４５ｃは、移動先のＶＭの候補の全ＶＭを未選択とする。そして、特定部４５ｃは、以降の処理を行う。一方、未選択のＶＭがある場合には、特定部４５ｃは、移動元のＶＭの候補の中から、未選択のＶＭを１つ選択する。
【００９９】
そして、特定部４５ｃは、下記の処理で、移動先のＶＭの候補のうち、未選択のＶＭがあるか否かを判定する。未選択のＶＭがない場合には、特定部４５ｃは、移動先のＶＭの候補の全ＶＭを未選択とする。そして、特定部４５ｃは、上述した、特定したクエリの組について、全ての移動元のＶＭおよび全ての移動先のＶＭの組み合わせにおいて、同一のＶＭに配置することが可能か検証したか否かの判定を再び行う。そして、特定部４５ｃは、以降の処理を行う。一方、未選択のＶＭがある場合には、特定部４５ｃは、移動先のＶＭの候補の中から、未選択のＶＭを１つ選択する。
【０１００】
続いて、特定部４５ｃは、下記の処理で、クエリの組が特定されたか否かを判定する。クエリの組が特定されていない場合には、特定部４５ｃは、取得部４５ｂにより取得された通信回数情報３７を用いて、通信回数が最大のクエリの組を特定する。例えば、図７Ｄの例に示す通信回数情報３７を用いた場合には、特定部４５ｃは、通信回数が１０回であるクエリＱ１とクエリＱ３との組を選択する。
【０１０１】
そして、特定部４５ｃは、特定した組の数は複数であるか否かを判定する。複数である場合には、予め管理サーバ４０に与えられたクエリグラフを参照し、特定した組ごとに、クエリ間の距離を算出する。例えば、図５の例に示すクエリグラフ７０において、特定部４５ｃがクエリＱ１とクエリＱ２との組、および、クエリＱ１とクエリＱ３との組の２つの組を特定した場合について説明する。この場合、特定部４５ｃは、クエリグラフ７０上で、クエリＱ１とクエリＱ２との距離、および、クエリＱ１とクエリＱ３との距離を算出する。なお、図５の例では、クエリグラフ７０上で、クエリＱ１とクエリＱ２との距離のほうが、クエリＱ１とクエリＱ３との距離よりも小さい。すなわち、クエリＱ１とクエリＱ２との距離のほうが、クエリＱ１とクエリＱ３との距離よりも近い。
【０１０２】
続いて、特定部４５ｃは、算出した距離が最も近いクエリの組の数が複数であるか否かを判定する。図５の例では、特定部４５ｃは、算出した距離が最も近いクエリＱ１とクエリＱ２との組の数は、１つなので、算出した距離が最も近いクエリの組の数が複数ではないと判定する。
【０１０３】
算出した距離が最も近いクエリの組の数が複数である場合には、特定部４５ｃは、算出した距離が最も近いクエリの複数の組のうち、クエリを含む処理要素の負荷の合計が最も小さいクエリの組を特定する。また、算出した距離が最も近いクエリの組の数が複数でない場合には、特定部４５ｃは、特定した複数の組の中から、距離が最も近いクエリの組を特定する。
【０１０４】
決定部４５ｄは、各種情報を決定する。例えば、決定部４５ｄは、特定部４５ｃにより特定されたクエリの組を同一のＶＭに配置することを決定する。
【０１０５】
具体例を挙げて説明する。まず、決定部４５ｄは、特定部４５ｃにより特定されたクエリの組について、一方のクエリが、新たに選択された移動元のＶＭに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のＶＭに配置されたクエリであるか否かを判定する。一方のクエリが、新たに選択された移動元のＶＭに配置されたクエリでないか、または、他方のクエリが、新たに選択された移動先のＶＭに配置されたクエリでない場合には、上述した、移動先のＶＭの候補のうち、未選択のＶＭがあるか否かの判定を行う。そして、以降の処理を行う。
【０１０６】
一方、あるクエリが、新たに選択された移動元のＶＭに配置されたクエリであり、かつ、他のクエリが、新たに選択された移動先のＶＭに配置されたクエリである場合には、決定部４５ｄは、新たに選択された移動先のＶＭに、特定したクエリの組のうち、新たに選択された移動元のＶＭに配置されたクエリを含む処理要素を移動させた場合の負荷Ｙを算出する。すなわち、決定部４５ｄは、移動先のＶＭの負荷に、特定したクエリの組のうち、新たに選択された移動元のＶＭに配置されたクエリを含む処理要素の負荷を加えた値を、負荷Ｙとして算出する。
【０１０７】
そして、決定部４５ｄは、算出した負荷Ｙの値が平均値Ａｖｅより小さく、かつ、負荷Ｙの値が閾値βより大きいか否かを判定する。算出した負荷Ｙの値が平均値Ａｖｅ以上であるか、または、負荷Ｙの値が閾値β以下である場合には、上述した、移動先のＶＭの候補のうち、未選択のＶＭがあるか否かの判定を行う。そして、以降の処理を行う。一方、負荷Ｙの値が平均値Ａｖｅより小さく、かつ、負荷Ｙの値が閾値βより大きい場合には、決定部４５ｄは、次のような処理を行う。すなわち、決定部４５ｄは、特定したクエリの組のうち、新たに選択された移動元のＶＭに配置されたクエリを含む処理要素を、移動元のＶＭから、新たに選択された移動先のＶＭへ移動することを決定する。
【０１０８】
このように、本実施例に係る管理サーバ４０は、特定した組の２つのクエリを含む２つの処理要素を同一のＶＭへ配置することを決定する。よって、この決定に基づき２つの処理要素が同一のＶＭへ配置された場合には、２つの処理要素が同一のＶＭへ配置される前に２つのＶＭ間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ４０によれば、通信回数の増加を抑制することができる。
【０１０９】
また、本実施例に係る管理サーバ４０は、複数のクエリと呼ばれる処理要求文を連携してイベントを実行する処理要求文が１以上配置された複数の装置が実行した処理要求文間の通信回数を示す情報を取得する。そして、管理サーバ４０は、通信回数に基づいて、処理要求文の組を特定する。続いて、管理サーバ４０は、特定された処理要求文の組を同一の装置に配置するための装置を決定する。よって、この決定に基づき２つの処理要求文が同一のＶＭへ配置された場合には、２つの処理要求文が同一のＶＭへ配置される前に２つのＶＭ間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ４０によれば、通信回数の増加を抑制することができる。
【０１１０】
また、本実施例に係る管理サーバ４０によれば、優先的に、通信回数の多い処理要素を１つのＶＭに配置することを決定することができる。
【０１１１】
また、本実施例に係る管理サーバ４０によれば、処理要素を移動させた場合に、移動先のＶＭの負荷の値を平均値Ａｖｅより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【０１１２】
そして、決定部４５ｄは、移動が決定された処理要素の識別子と、移動元のＶＭのＩＰアドレスと、移動先のＶＭのＩＰアドレスとを対応付けて、移動指示リスト４６に登録することにより、移動指示リスト４６を更新する。続いて、決定部４５ｄは、移動が決定された処理要素の移動元のＶＭを、移動元のＶＭの候補から外すとともに、移動先のＶＭを、移動先のＶＭの候補から外す。
【０１１３】
続いて、決定部４５ｄは、移動先のＶＭの候補、および、移動元のＶＭの候補の全ＶＭを未選択とする。その後、決定部４５ｄは、上述した、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたＶＭに移動することが移動指示リスト４６に登録済みであるか否かの判定を再び行い、そして、以降の処理を行う。
【０１１４】
また、特定部４５ｃにより、特定したクエリの組について、全ての移動元のＶＭおよび全ての移動先のＶＭの組み合わせにおいて、同一のＶＭに配置することが可能か検証したと判定された場合には、決定部４５ｄは、移動元のＶＭの候補の全ＶＭを未選択とする。そして、決定部４５ｄは、移動元のＶＭの候補のうち、未選択のＶＭがあるか否かを判定する。未選択のＶＭがある場合には、移動元のＶＭの候補の中から、未選択のＶＭを１つ選択する。
【０１１５】
その後、決定部４５ｄは、変数Ｎに「１」を設定する。そして、決定部４５ｄは、新たに選択された移動元のＶＭの処理要素のうち、Ｎ番目に負荷が高い処理要素を選択する。Ｎ＝１である場合、図１４の例では、決定部４５ｄは、ＶＭ３１ａの処理要素のうち、１番目に負荷が高い一番上の「Ｈｉｇｈ」の処理要素を選択する。
【０１１６】
続いて、決定部４５ｄは、下記の処理で、移動先のＶＭの候補のうち、未選択のＶＭがあるか否かを判定する。未選択のＶＭがない場合には、決定部４５ｄは、上述した、移動元のＶＭの候補のうち未選択のＶＭがあるか否かの判定を再び行い、以降の処理を続ける。一方、未選択のＶＭがある場合には、決定部４５ｄは、移動先のＶＭの候補の中から、未選択のＶＭを１つ選択する。
【０１１７】
その後、決定部４５ｄは、新たに選択された移動先のＶＭに、新たに選択されたＮ番目に負荷が高い処理要素を移動させた場合の負荷Ｙ´を算出する。すなわち、決定部４５ｄは、移動先のＶＭの負荷に、選択されたＮ番目に負荷が高い処理要素の負荷を加えた値を、負荷Ｙ´として算出する。例えば、Ｎ＝１である場合、図１４の例では、決定部４５ｄは、ＶＭ３５ａの負荷に、ＶＭ３１ａの処理要素のうち一番上の「Ｈｉｇｈ」の処理要素の負荷を加えた値を、負荷Ｙ´として算出する。
【０１１８】
そして、決定部４５ｄは、算出した負荷Ｙ´の値が平均値Ａｖｅより小さく、かつ、負荷Ｙ´の値が閾値βより大きいか否かを判定する。算出した負荷Ｙ´の値が平均値Ａｖｅ以上であるか、または、負荷Ｙ´の値が閾値β以下である場合には、決定部４５ｄは、変数Ｎの値を１つインクリメントする。その後、決定部４５ｄは、変数Ｎの値が、新たに選択された移動元のＶＭの処理要素の数Ｋを超えたか否かを判定する。変数Ｎの値が、処理要素の数Ｋを超えていない場合には、決定部４５ｄは、新たに選択された移動元のＶＭの処理要素のうち、Ｎ番目に負荷が高い処理要素を特定する。Ｎ＝２である場合、図１４の例では、決定部４５ｄは、ＶＭ３１ａの処理要素のうち、２番目に負荷が高い一番下の「Ｈｉｇｈ」の処理要素を選択する。そして、決定部４５ｄは、上述した、新たに選択された移動先のＶＭに、新たに選択されたＮ番目に負荷が高い処理要素を移動させた場合の負荷Ｙを算出する処理を再び行い、以降の処理を続ける。
【０１１９】
一方、変数Ｎの値が、処理要素の数Ｋを超えた場合には、決定部４５ｄは、上述した、移動先のＶＭの候補のうち未選択のＶＭがあるか否かの判定を再び行い、以降の処理を続ける。
【０１２０】
また、算出した負荷Ｙ´の値が平均値Ａｖｅより小さく、かつ、負荷Ｙ´の値が閾値βより大きい場合には、決定部４５ｄは、次のような判定を行う。すなわち、決定部４５ｄは、新たに選択されたＮ番目に負荷が高い処理要素を、新たに選択された移動元のＶＭから、新たに選択された移動先のＶＭへ移動することを決定する。
【０１２１】
このように、本実施例に係る管理サーバ４０によれば、処理要素を移動させた場合に、移動先のＶＭの負荷の値を平均値Ａｖｅより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【０１２２】
そして、決定部４５ｄは、移動が決定された処理要素の識別子と、移動元のＶＭのＩＰアドレスと、移動先のＶＭのＩＰアドレスとを対応付けて、移動指示リスト４６に登録することにより、移動指示リスト４６を更新する。続いて、決定部４５ｄは、移動が決定された処理要素の移動元のＶＭを、移動元のＶＭの候補から外すとともに、移動先のＶＭを、移動先のＶＭの候補から外す。
【０１２３】
続いて、決定部４５ｄは、移動先のＶＭの候補、および、移動元のＶＭの候補の全ＶＭを未選択とする。その後、決定部４５ｄは、上述した、移動元のＶＭの候補のうち未選択のＶＭがあるか否かの判定を再び行い、以降の処理を続ける。
【０１２４】
配置制御部４５ｅは、処理要素の配置を制御する。例えば、配置制御部４５ｅは、決定部４５ｄによる処理要素の配置の決定結果に基づいて、特定部４５ｃにより特定されたクエリの組が同一のＶＭに配置されるように制御する。
【０１２５】
具体例を挙げて説明する。配置制御部４５ｅは、まず、記憶部４４から移動指示リスト４６を取得する。そして、配置制御部４５ｅは、前回取得した内容と比較して、移動指示リスト４６に、新たに追加された内容があるか否かを判定する。新たに追加された内容がある場合には、配置制御部４５ｅは、新たに追加されたレコードの「移動元」の項目に登録されたＩＰアドレスを用いて、次のような処理を行う。すなわち、配置制御部４５ｅは、移動元に、レコードの「処理要素」の項目に登録された識別子が示す処理要素を、レコードの「移動先」の項目に登録されたＩＰアドレスが示す移動先に移動させる指示（移動指示）を送信する。これにより、移動元のＶＭは、移動先のＶＭに移動対象の処理要素を送信して、処理要素を移動させる。例えば、新たに追加されたレコードに、「移動元」および「移動先」の各項目に、特定したクエリの組のそれぞれが配置されたＶＭのＩＰアドレスが登録されている場合には、配置制御部４５ｅは、クエリの組を１つのＶＭに配置するように制御することができる。続いて、配置制御部４５ｅは、ＶＭ、サーバ２０および管理サーバ４０に対して移動対象のＶ−Ｎｏｄｅの識別子および移動先のＶＭのＩＰアドレスを含むルーティングテーブル更新指示を送信する。
【０１２６】
制御部４５は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路である。
【０１２７】
次に、本実施例に係る管理サーバ４０が実行する各処理の流れを説明する。図１５は、取得処理の手順を示すフローチャートである。この取得処理は、例えば、ＶＭからのデータを受信したタイミングで実行される。
【０１２８】
図１５に示すように、取得部４５ｂは、受信したデータが、通信回数情報３７であるか否かを判定する（Ｓ１０１）。通信回数情報３７である場合（Ｓ１０１肯定）には、取得部４５ｂは、受信した通信回数情報３７を取得し、取得した通信回数情報３７を記憶部４４に格納し（Ｓ１０２）、処理を終了する。一方、通信回数情報３７でない場合（Ｓ１０１否定）には、取得部４５ｂは、負荷情報３８であるか否かを判定する（Ｓ１０３）。負荷情報３８である場合（Ｓ１０３肯定）には、取得部４５ｂは、受信した負荷情報３８を取得し、取得した負荷情報３８を記憶部４４に格納し（Ｓ１０４）、処理を終了する。また、負荷情報３８でない場合（Ｓ１０３否定）にも、処理を終了する。
【０１２９】
図１６〜１８は、決定処理の手順を示すフローチャートである。この決定処理は、所定間隔ごとに実行される。
【０１３０】
図１６〜１８に示すように、取得部４５ｂは、記憶部４４から負荷情報３８を取得する（Ｓ２０１）。特定部４５ｃは、取得部４５ｂにより取得された負荷情報３８を用いて、ＶＭごとに、処理要素ごとの負荷の和を算出し、各ＶＭの負荷を算出する（Ｓ２０２）。続いて、特定部４５ｃは、算出した各ＶＭの負荷を用いて、全ＶＭの負荷の平均値Ａｖｅを算出する（Ｓ２０３）。その後、特定部４５ｃは、負荷が閾値α以上のＶＭがあるか否かを判定する（Ｓ２０４）。
【０１３１】
負荷が閾値α以上のＶＭがない場合（Ｓ２０４否定）には、処理を終了する。一方、負荷が閾値α以上のＶＭがある場合（Ｓ２０４肯定）には、特定部４５ｃは、負荷が閾値α以上の全てのＶＭを移動元のＶＭの候補とする（Ｓ２０５）。
【０１３２】
そして、特定部４５ｃは、負荷が平均値Ａｖｅ未満の全てのＶＭを移動先のＶＭの候補とする（Ｓ２０６）。続いて、特定部４５ｃは、下記の処理で、特定したクエリの組について、全ての移動元のＶＭおよび全ての移動先のＶＭの組み合わせにおいて、同一のＶＭに配置することが可能か検証したか否かを判定する（Ｓ２０７）。検証していない場合（Ｓ２０７否定）には、特定部４５ｃは、下記のＳ２２５の処理で、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたＶＭに移動することが移動指示リスト４６に登録済みであるか否かを判定する（Ｓ２０８）。
【０１３３】
登録されている場合（Ｓ２０８肯定）には、Ｓ２２９へ進む。登録されていない場合（Ｓ２０８否定）には、特定部４５ｃは、下記のＳ２１０の処理において、移動元のＶＭの候補のうち、未選択のＶＭがあるか否かを判定する（Ｓ２０９）。未選択のＶＭがない場合（Ｓ２０９否定）には、Ｓ２１２へ進む。一方、未選択のＶＭがある場合（Ｓ２０９肯定）には、特定部４５ｃは、移動元のＶＭの候補の中から、未選択のＶＭを１つ選択する（Ｓ２１０）。
【０１３４】
そして、特定部４５ｃは、下記のＳ２１２の処理において、移動先のＶＭの候補のうち、未選択のＶＭがあるか否かを判定する（Ｓ２１１）。未選択のＶＭがない場合（Ｓ２１１否定）には、特定部４５ｃは、移動先のＶＭの候補の全ＶＭを未選択とする（Ｓ２１２）。そして、Ｓ２０７へ戻る。一方、未選択のＶＭがある場合（Ｓ２１１肯定）には、特定部４５ｃは、移動元のＶＭの候補の中から、未選択のＶＭを１つ選択する（Ｓ２１３）。
【０１３５】
続いて、特定部４５ｃは、下記のＳ２１６、Ｓ２２０、Ｓ２２１のいずれかの処理で、クエリの組が特定されたか否かを判定する（Ｓ２１４）。クエリの組が特定された場合（Ｓ２１４肯定）には、Ｓ２２２へ進む。一方、クエリの組が特定されていない場合（Ｓ２１４否定）には、取得部４５ｂは、記憶部４４から通信回数情報３７を取得する（Ｓ２１５）。そして、特定部４５ｃは、取得部４５ｂにより取得された通信回数情報３７を用いて、通信回数が最大のクエリの組を特定する（Ｓ２１６）。
【０１３６】
続いて、特定部４５ｃは、特定した組の数は複数であるか否かを判定する（Ｓ２１７）。複数でない場合（Ｓ２１７否定）には、Ｓ２２２へ進む。一方、複数である場合（Ｓ２１７肯定）には、特定部４５ｃは、予め管理サーバ４０に与えられたクエリグラフを参照し、特定した組ごとに、クエリ間の距離を算出する（Ｓ２１８）。
【０１３７】
続いて、特定部４５ｃは、算出した距離が最も近いクエリの組の数が複数であるか否かを判定する（Ｓ２１９）。
【０１３８】
算出した距離が最も近いクエリの組の数が複数である場合（Ｓ２１９肯定）には、特定部４５ｃは、算出した距離が最も近いクエリの複数の組のうち、クエリを含む処理要素の負荷の合計が最も小さいクエリの組を特定し（Ｓ２２１）、Ｓ２２２へ進む。また、算出した距離が最も近いクエリの組の数が複数でない場合（Ｓ２１９否定）には、特定部４５ｃは、特定した複数の組の中から、距離が最も近いクエリの組を特定し（Ｓ２２０）、Ｓ２２２へ進む。
【０１３９】
決定部４５ｄは、特定部４５ｃにより特定されたクエリの組について、一方のクエリが、新たに選択された移動元のＶＭに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のＶＭに配置されたクエリであるか否かを判定する（Ｓ２２２）。一方のクエリが、新たに選択された移動元のＶＭに配置されたクエリでないか、または、他方のクエリが、新たに選択された移動先のＶＭに配置されたクエリでない場合（Ｓ２２２否定）には、Ｓ２１１に戻る。
【０１４０】
また、一方のクエリが、新たに選択された移動元のＶＭに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のＶＭに配置されたクエリである場合（Ｓ２２２肯定）には、決定部４５ｄは、次のような処理を行う。すなわち、決定部４５ｄは、新たに選択された移動先のＶＭに、特定したクエリの組のうち、新たに選択された移動元のＶＭに配置されたクエリを含む処理要素を移動させた場合の負荷Ｙを算出する（Ｓ２２３）。
【０１４１】
そして、決定部４５ｄは、算出した負荷Ｙの値が平均値Ａｖｅより小さく、かつ、負荷Ｙの値が閾値βより大きいか否かを判定する（Ｓ２２４）。算出した負荷Ｙの値が平均値Ａｖｅ以上であるか、または、負荷Ｙの値が閾値β以下である場合（Ｓ２２４否定）には、Ｓ２１１に戻る。一方、負荷Ｙの値が平均値Ａｖｅより小さく、かつ、負荷Ｙの値が閾値βより大きい場合（Ｓ２２４肯定）には、決定部４５ｄは、次のような処理を行う。すなわち、決定部４５ｄは、特定したクエリの組のうち、新たに選択された移動元のＶＭに配置されたクエリを含む処理要素を、移動元のＶＭから、新たに選択された移動先のＶＭへ移動することを決定し、移動指示リスト４６を更新する（Ｓ２２５）。続いて、決定部４５ｄは、移動が決定された処理要素の移動元のＶＭを、移動元のＶＭの候補から外すとともに、移動先のＶＭを、移動先のＶＭの候補から外す（Ｓ２２６）。
【０１４２】
続いて、決定部４５ｄは、移動先のＶＭの候補、および、移動元のＶＭの候補の全ＶＭを未選択とし（Ｓ２２７）、Ｓ２０８へ戻る。
【０１４３】
また、特定部４５ｃにより、特定したクエリの組について、全ての移動元のＶＭおよび全ての移動先のＶＭの組み合わせにおいて、同一のＶＭに配置することが可能か検証したと判定された場合（Ｓ２０７肯定）には、決定部４５ｄは、次のような処理を行う。すなわち、決定部４５ｄは、移動元のＶＭの候補の全ＶＭを未選択とする（Ｓ２２８）。そして、決定部４５ｄは、移動元のＶＭの候補のうち、未選択のＶＭがあるか否かを判定する（Ｓ２２９）。未選択のＶＭがない場合（Ｓ２２９否定）には、処理を終了する。一方、未選択のＶＭがある場合（Ｓ２２９肯定）には、移動元のＶＭの候補の中から、未選択のＶＭを１つ選択する（Ｓ２３０）。
【０１４４】
その後、決定部４５ｄは、変数Ｎに「１」を設定する（Ｓ２３１）。そして、決定部４５ｄは、新たに選択された移動元のＶＭの処理要素のうち、Ｎ番目に負荷が高い処理要素を選択する（Ｓ２３２）。
【０１４５】
続いて、決定部４５ｄは、下記のＳ２３４の処理で、移動先のＶＭの候補のうち、未選択のＶＭがあるか否かを判定する（Ｓ２３３）。未選択のＶＭがない場合（Ｓ２３３否定）には、Ｓ２２９へ戻る。一方、未選択のＶＭがある場合（Ｓ２３３肯定）には、決定部４５ｄは、移動先のＶＭの候補の中から、未選択のＶＭを１つ選択する（Ｓ２３４）。
【０１４６】
その後、決定部４５ｄは、新たに選択された移動先のＶＭに、新たに選択されたＮ番目に負荷が高い処理要素を移動させた場合の負荷Ｙ´を算出する（Ｓ２３５）。
【０１４７】
そして、決定部４５ｄは、算出した負荷Ｙ´の値が平均値Ａｖｅより小さく、かつ、負荷Ｙ´の値が閾値βより大きいか否かを判定する（Ｓ２３６）。算出した負荷Ｙ´の値が平均値Ａｖｅ以上であるか、または、負荷Ｙ´の値が閾値β以下である場合（Ｓ２３６否定）には、決定部４５ｄは、変数Ｎの値を１つインクリメントする（Ｓ２３７）。その後、決定部４５ｄは、変数Ｎの値が、新たに選択された移動元のＶＭの処理要素の数Ｋを超えたか否かを判定する（Ｓ２３８）。変数Ｎの値が、処理要素の数Ｋを超えていない場合（Ｓ２３８否定）には、決定部４５ｄは、新たに選択された移動元のＶＭの処理要素のうち、Ｎ番目に負荷が高い処理要素を特定し（Ｓ２３９）、Ｓ２３５へ戻る。
【０１４８】
一方、変数Ｎの値が、処理要素の数Ｋを超えた場合（Ｓ２３８肯定）には、Ｓ２３３へ戻る。
【０１４９】
また、算出した負荷Ｙ´の値が平均値Ａｖｅより小さく、かつ、負荷Ｙ´の値が閾値βより大きい場合（Ｓ２３６肯定）には、決定部４５ｄは、次のような判定を行う。すなわち、決定部４５ｄは、新たに選択されたＮ番目に負荷が高い処理要素を、新たに選択された移動元のＶＭから、新たに選択された移動先のＶＭへ移動することを決定し、移動指示リスト４６を更新する（Ｓ２４０）。続いて、決定部４５ｄは、移動が決定された処理要素の移動元のＶＭを、移動元のＶＭの候補から外すとともに、移動先のＶＭを、移動先のＶＭの候補から外す（Ｓ２４１）。
【０１５０】
続いて、決定部４５ｄは、移動先のＶＭの候補、および、移動元のＶＭの候補の全ＶＭを未選択とし（Ｓ２４２）、Ｓ２２９へ戻る。
【０１５１】
図１９は、配置制御処理の手順を示すフローチャートである。この配置制御処理は、所定間隔ごとに実行される。
【０１５２】
図１９に示すように、配置制御部４５ｅは、記憶部４４から移動指示リスト４６を取得する（Ｓ３０１）。そして、配置制御部４５ｅは、前回取得した内容と比較して、移動指示リスト４６に、新たに追加された内容があるか否かを判定する（Ｓ３０２）。新たに追加された内容がある場合（Ｓ３０２肯定）には、配置制御部４５ｅは、新たに追加されたレコードの「移動元」の項目に登録されたＩＰアドレスを用いて、次のような処理を行う。すなわち、配置制御部４５ｅは、移動元に、レコードの「処理要素」の項目に登録された識別子が示す処理要素を、レコードの「移動先」の項目に登録されたＩＰアドレスが示す移動先に移動させる指示（移動指示）を送信する（Ｓ３０３）。続いて、配置制御部４５ｅは、ＶＭ、サーバ２０および管理サーバ４０に対して移動対象のＶ−Ｎｏｄｅの識別子および移動先のＶＭのＩＰアドレスを含むルーティングテーブル更新指示を送信し（Ｓ３０４）、処理を終了する。また、新たに追加された内容がない場合（Ｓ３０２否定）にも、処理を終了する。
【０１５３】
上述してきたように、本実施例に係る管理サーバ４０は、特定した組の２つのクエリを含む２つの処理要素を同一のＶＭへ配置することを決定する。したがって、この決定に基づき２つの処理要素が同一のＶＭへ配置された場合には、２つの処理要素が同一のＶＭへ配置される前に２つのＶＭ間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ４０によれば、通信回数の増加を抑制することができる。
【０１５４】
また、本実施例に係る管理サーバ４０によれば、優先的に、通信回数の多い処理要素を１つのＶＭに配置することを決定することができる。
【０１５５】
また、本実施例に係る管理サーバ４０によれば、処理要素を移動させた場合に、移動先のＶＭの負荷の値を平均値Ａｖｅより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【実施例４】
【０１５６】
実施例４について説明する。実施例４では、全ＶＭの処理要素の負荷の平均値が閾値αを超えた場合には、クエリを配置させるＶＭの台数を増やす場合について説明する。
【０１５７】
図２０は、実施例４に係る管理サーバの構成を示すブロック図である。図２０に示すように、管理サーバ８０の制御部４５は、図１２に示す実施例３に係る制御部４５に比較して、特定部４５ｃ、決定部４５ｄに代えて特定部８１ｃ、決定部８１ｄを有する点が異なる。なお、以下では、上記の実施例３などと同様の機能を果たす各部については図１２などと同様の符号を付し、その説明は省略する。
【０１５８】
図２１は、実施例４に係る管理サーバが実行する処理の一例を説明するための図である。図２１の例は、５つのＶＭ３１ａ〜３５ａのそれぞれの負荷を示す。横軸は、ＶＭを示し、縦軸は、ＶＭの負荷を示す。また、ＶＭの中の「Ｈｉｇｈ」は、負荷が第一の閾値を超えた高負荷である処理要素を示す。また、ＶＭの中の「Ｍｉｄｄｌｅ」は、負荷が第一の閾値以下で、かつ、第一の閾値より小さい第二の閾値を超えた中負荷である処理要素を示す。また、ＶＭの中の「Ｌｏｗ」は、負荷が第二の閾値以下である小負荷である処理要素を示す。図２１の例では、閾値αは、上限の負荷の警戒値である。また、図２１の例では、閾値βは、閾値αよりも小さく、下限の負荷の警戒値である。図２１の例では、５つのＶＭの負荷の平均値Ａｖｅが閾値αを超えている。そこで、図２１の例では、ＶＭの台数を２台（ＶＭ３１ｂ、ＶＭ３２ｂ）増やして、増やした２台のＶＭ３１ｂ，３２ｂに、処理要素を移動させて、合計７台のＶＭの負荷の平均値Ａｖｅが、予め定められた値ＷＣとなるように、管理サーバ８０は制御する。
【０１５９】
特定部８１ｃは、実施例３に係る特定部４５ｃと比較して、下記の点が異なる。まず、特定部８１ｃは、全ＶＭの負荷の合計Ｔを算出する。また、特定部４５ｃでは、負荷が閾値α以上のＶＭがあるか否かの判定を行っていたが、特定部８１ｃは、この判定に代えて、平均値Ａｖｅが閾値α以上であるか否かの判定を行う。例えば、図２１の例では、５台のＶＭの負荷の平均値Ａｖｅが閾値αを超えているので、特定部８１ｃは、この場合には、平均値Ａｖｅが閾値α以上であると判定する。
【０１６０】
また、特定部８１ｃは、平均値Ａｖｅが閾値α以上である場合には、算出した全ＶＭの負荷の合計Ｔを、予め定められた値ＷＣで除した値（Ｔ／ＷＣ）を算出する。なお、値（Ｔ／ＷＣ）は、平均のＶＭの負荷をＷＣとする場合のＶＭの台数を示す。そして、特定部８１ｃは、負荷がＷＣの場合におけるＶＭの台数（Ｔ／ＷＣ）から、現在のＶＭの台数Ｓを減じた値ΔＳ（＝（Ｔ／ＷＣ）−Ｓ）を算出して、増加させるＶＭの台数を算出する。
【０１６１】
また、特定部４５ｃでは、負荷が平均値Ａｖｅ未満の全てのＶＭを移動先のＶＭの候補とするが、特定部８１ｃは、このような移動先のＶＭの候補の選出に代えて、ΔＳ分の台数の新規の全てのＶＭを移動先のＶＭの候補とする。例えば、図２１の例では、特定部８１ｃは、ΔＳ＝２（７−５）台分の台数の新規の全てのＶＭ３１ｂ，３２ｂを移動先のＶＭの候補とする。
【０１６２】
決定部８１ｄは、実施例３に係る決定部４５ｄと比較して、下記の点が異なる。決定部４５ｄでは、算出した負荷Ｙの値が平均値Ａｖｅより小さく、かつ、負荷Ｙの値が閾値βより大きいか否かの判定を行うが、決定部８１ｄは、この判定に代えて、次のような処理を行う。すなわち、決定部８１ｄは、算出した負荷Ｙの値がＷＣより小さく、かつ、負荷Ｙの値が閾値βより大きいか否かを判定する。また、決定部４５ｄでは、算出した負荷Ｙ´の値が平均値Ａｖｅより小さく、かつ、負荷Ｙ´の値が閾値βより大きいか否かの判定を行うが、決定部８１ｄは、この判定に代えて、次のような処理を行う。すなわち、決定部８１ｄは、算出した負荷Ｙ´の値がＷＣより小さく、かつ、負荷Ｙ´の値が閾値βより大きいか否かを判定する。これにより、移動先のＶＭにおいて、処理要素が移動された場合の負荷を、ＷＣより小さく、かつ、閾値βより大きくすることができる。また、ＶＭの平均の負荷がＷＣとなるようなＶＭの台数を決定することができる。
【０１６３】
また、本実施例に係る管理サーバ８０は、特定した組の２つのクエリを含む２つの処理要素を同一のＶＭへ配置することを決定する。したがって、この決定に基づき２つの処理要素が同一のＶＭへ配置された場合には、２つの処理要素が同一のＶＭへ配置される前に２つのＶＭ間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ８０によれば、通信回数の増加を抑制することができる。
【０１６４】
また、本実施例に係る管理サーバ８０によれば、優先的に、通信回数の多い処理要素を１つのＶＭに配置することを決定することができる。
【０１６５】
また、本実施例に係る管理サーバ８０によれば、処理要素を移動させた場合に、移動先のＶＭの負荷の値を平均値Ａｖｅより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【０１６６】
次に、本実施例に係る管理サーバ８０が実行する各処理の流れを説明する。取得処理、配置制御処理については、実施例３と同様であるので説明を省略し、実施例４に係る決定処理について説明する。図２２〜２４は、実施例４に係る決定処理の手順を示すフローチャートである。この決定処理は、所定間隔ごとに実行される。なお、実施例３と同様の処理については、同一の符号を付して説明する。
【０１６７】
図２２〜２４に示すように、特定部８１ｃは、Ｓ２０２の次に、全ＶＭの負荷の合計Ｔを算出する（Ｓ４０１）。また、特定部８１ｃは、Ｓ２０３の次に、Ｓ２０４に代えて、平均値Ａｖｅが閾値α以上であるか否かを判定する（Ｓ４０２）。
【０１６８】
平均値Ａｖｅが閾値α以上でない場合（Ｓ４０２否定）には、処理を終了する。一方、平均値Ａｖｅが閾値α以上である場合（Ｓ４０２肯定）には、特定部８１ｃは、算出した全ＶＭの負荷の合計Ｔを、予め定められた値ＷＣで除した値（Ｔ／ＷＣ）を算出する（Ｓ４０３）。そして、特定部８１ｃは、負荷がＷＣの場合におけるＶＭの台数（Ｔ／ＷＣ）から、現在のＶＭの台数Ｓを減じた値ΔＳ（＝（Ｔ／ＷＣ）−Ｓ）を算出して、増加させるＶＭの台数を算出する（Ｓ４０４）。
【０１６９】
また、特定部８１ｃは、Ｓ２０５の次に、Ｓ２０６に代えて、ΔＳ分の台数の新規の全てのＶＭを移動先のＶＭの候補とする（Ｓ４０５）。
【０１７０】
また、決定部８１ｄは、Ｓ２２４に代えて、算出した負荷Ｙの値がＷＣより小さく、かつ、負荷Ｙの値が閾値βより大きいか否かを判定する（Ｓ４０６）。また、決定部８１ｄは、Ｓ２３６に代えて、算出した負荷Ｙ´の値がＷＣより小さく、かつ、負荷Ｙ´の値が閾値βより大きいか否かを判定する（Ｓ４０７）。
【０１７１】
上述してきたように、本実施例に係る管理サーバ８０は、特定した組の２つのクエリを含む２つの処理要素を同一のＶＭへ配置することを決定する。したがって、この決定に基づき２つの処理要素が同一のＶＭへ配置された場合には、２つの処理要素が同一のＶＭへ配置される前に２つのＶＭ間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ８０によれば、通信回数の増加を抑制することができる。
【０１７２】
また、本実施例に係る管理サーバ８０によれば、優先的に、通信回数の多い処理要素を１つのＶＭに配置することを決定することができる。
【０１７３】
また、本実施例に係る管理サーバ８０によれば、処理要素を移動させた場合に、移動先のＶＭの負荷の値を平均値Ａｖｅより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【０１７４】
また、本実施例に係る管理サーバ８０によれば、移動先のＶＭにおいて、処理要素が移動された場合の負荷を、ＷＣより小さく、かつ、閾値βより大きくすることができる。
【０１７５】
また、本実施例に係る管理サーバ８０によれば、ＶＭの平均の負荷がＷＣとなるようなＶＭの台数を決定することができる。
【実施例５】
【０１７６】
実施例５について説明する。実施例５では、全ＶＭの処理要素の負荷の平均値が閾値βより小さい場合には、クエリを配置させるＶＭの台数を減らす場合について説明する。
【０１７７】
図２５は、実施例５に係る管理サーバの構成を示すブロック図である。図２５に示すように、管理サーバ８２の制御部４５は、図２０に示す実施例４に係る制御部４５に比較して、特定部８１ｃ、決定部８１ｄに代えて特定部８３ｃ、決定部８３ｄを有する点が異なる。なお、以下では、上記の各実施例と同様の機能を果たす各部については同様の符号を付し、その説明を省略する。
【０１７８】
図２６は、実施例５に係る管理サーバが実行する処理の一例を説明するための図である。図２６の例は、５つのＶＭ３１ａ〜３５ａのそれぞれの負荷を示す。横軸は、ＶＭを示し、縦軸は、ＶＭの負荷を示す。また、ＶＭの中の「Ｈｉｇｈ」は、負荷が第一の閾値を超えた高負荷である処理要素を示す。また、ＶＭの中の「Ｍｉｄｄｌｅ」は、負荷が第一の閾値以下で、かつ、第一の閾値より小さい第二の閾値を超えた中負荷である処理要素を示す。また、ＶＭの中の「Ｌｏｗ」は、負荷が第二の閾値以下である小負荷である処理要素を示す。図２６の例では、閾値αは、上限の負荷の警戒値である。また、図２６の例では、閾値βは、閾値αよりも小さく、下限の負荷の警戒値である。図２６の例では、５つのＶＭの負荷の平均値Ａｖｅが閾値βよりも小さい。そこで、図２６の例では、まず、クエリを配置させるＶＭの台数を２台（ＶＭ３４ａ、ＶＭ３５ａ）減らす。そして、残ったＶＭのうち負荷がＷＣ未満の全てのＶＭ（ＶＭ３２ａ、ＶＭ３３ａ）に、減らした２台のＶＭ３４ａ，３５ａの処理要素を移動させて、合計３台のＶＭの負荷の平均値Ａｖｅが、予め定められた値ＷＣとなるように、管理サーバ８２は制御する。
【０１７９】
特定部８３ｃは、実施例４に係る特定部８１ｃと比較して、下記の点が異なる。まず、特定部８１ｃでは、平均値Ａｖｅが閾値α以上であるか否かの判定を行われていたが、特定部８３ｃは、平均値Ａｖｅが閾値βより小さいか否かを判定する。例えば、図２６の例では、５台のＶＭの負荷の平均値Ａｖｅが閾値βより小さいので、特定部８３ｃは、この場合には、平均値Ａｖｅが閾値βより小さいと判定する。
【０１８０】
また、特定部８１ｃでは、ΔＳ（＝（Ｔ／ＷＣ）−Ｓ）を算出して、増加させるＶＭの台数を算出するが、特定部８３ｃは、ΔＳの算出に代えて、減らすＶＭの台数ΔＳ´（＝Ｓ−（Ｔ／ＷＣ））を算出する。
【０１８１】
また、特定部８１ｃでは、負荷が閾値α以上の全てのＶＭを移動元のＶＭの候補とするが、特定部８３ｃは、全てのＶＭのうち、負荷が低い方からΔＳ´の値が示す台数分のＶＭを移動元のＶＭの候補とする。例えば、図２６の例では、特定部８３ｃは、ΔＳ´＝２（５−３）台分の台数の負荷が低いＶＭ３４ａ，３５ａを移動元のＶＭの候補とする。
【０１８２】
また、特定部８１ｃでは、ΔＳの値が示す台数分の台数の新規の全てのＶＭを移動先の候補とするが、特定部８３ｃは、減らす対象でないＶＭ、すなわち、残りのＶＭのうち、負荷がＷＣ未満の全てのＶＭを移動先のＶＭの候補とする。例えば、図２６の例では、特定部８３ｃは、残りのＶＭ３１ａ〜３３ａのうち、負荷がＷＣ未満の全てのＶＭ３２ａ、ＶＭ３３ａを移動元のＶＭの候補とする。これにより、ＶＭの平均の負荷がＷＣとなるようなＶＭの台数を決定することができる。また、移動先のＶＭにおいて、処理要素が移動された場合の負荷を、ＷＣより小さく、かつ、閾値βより大きくすることができる。
【０１８３】
また、本実施例に係る管理サーバ８２は、特定した組の２つのクエリを含む２つの処理要素を同一のＶＭへ配置することを決定する。したがって、この決定に基づき２つの処理要素が同一のＶＭへ配置された場合には、２つの処理要素が同一のＶＭへ配置される前に２つのＶＭ間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ８２によれば、通信回数の増加を抑制することができる。
【０１８４】
また、本実施例に係る管理サーバ８２によれば、優先的に、通信回数の多い処理要素を１つのＶＭに配置することを決定することができる。
【０１８５】
また、本実施例に係る管理サーバ８２によれば、処理要素を移動させた場合に、移動先のＶＭの負荷の値を平均値Ａｖｅより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【０１８６】
次に、本実施例に係る管理サーバ８２が実行する各処理の流れを説明する。取得処理、配置制御処理については、実施例４と同様であるので説明を省略し、実施例５に係る決定処理について説明する。図２７〜２９は、実施例５に係る決定処理の手順を示すフローチャートである。この決定処理は、所定間隔ごとに実行される。なお、実施例３や実施例４と同様の処理については、同一の符号を付して説明する。
【０１８７】
図２７〜２９に示すように、特定部８３ｃは、Ｓ２０３の次に、Ｓ４０２に代えて、平均値Ａｖｅが閾値βより小さいか否かを判定する（Ｓ５０１）。
【０１８８】
また、特定部８３ｃは、Ｓ４０３の次に、Ｓ４０４に代えて、現在のＶＭの台数Ｓから、負荷がＷＣの場合におけるＶＭの台数（Ｔ／ＷＣ）を減じた値ΔＳ´（＝Ｓ−（Ｔ／ＷＣ））を算出して、増加させるＶＭの台数を算出する（Ｓ５０２）。そして、特定部８３ｃは、Ｓ２０５に代えて、全てのＶＭのうち、負荷が低い方からΔＳ´の値が示す台数分のＶＭを移動元のＶＭの候補とする（Ｓ５０３）。続いて、特定部８３ｃは、Ｓ４０５に代えて、残りのＶＭのうち、負荷がＷＣ未満の全てのＶＭを移動先のＶＭの候補とする（Ｓ５０４）。
【０１８９】
上述してきたように、本実施例に係る管理サーバ８２は、特定した組の２つのクエリを含む２つの処理要素を同一のＶＭへ配置することを決定する。したがって、この決定に基づき２つの処理要素が同一のＶＭへ配置された場合には、２つの処理要素が同一のＶＭへ配置される前に２つのＶＭ間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ８２によれば、通信回数の増加を抑制することができる。
【０１９０】
また、本実施例に係る管理サーバ８２によれば、優先的に、通信回数の多い処理要素を１つのＶＭに配置することを決定することができる。
【０１９１】
また、本実施例に係る管理サーバ８２によれば、処理要素を移動させた場合に、移動先のＶＭの負荷の値を平均値Ａｖｅより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【０１９２】
また、本実施例に係る管理サーバ８２によれば、移動先のＶＭにおいて、処理要素が移動された場合の負荷を、ＷＣより小さく、かつ、閾値βより大きくすることができる。
【０１９３】
また、本実施例に係る管理サーバ８２によれば、ＶＭの平均の負荷がＷＣとなるようなＶＭの台数を決定することができる。
【０１９４】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【０１９５】
まず、上述した各実施例の変形例について説明する。例えば、ＣＥＰシステム内においてクエリを配置することが可能な複数の装置のうち、特定の装置のみ実行可能なクエリがある。そこで、この場合に、このクエリを含む処理要素を、他の装置に配置しないように管理サーバが制御する変形例について説明する。上述した各実施例の変形例における管理サーバは、特定の装置に配置された該当クエリの移動が不可であることを示す第一の不可情報を記憶部に格納する。そして、変形例における特定部や決定部などは、移動元の装置の候補が選出された後に、記憶部に第一の不可情報があるか否かを判定し、第一の不可情報がある場合には、第一の不可情報を参照する。続いて、変形例における特定部や決定部などは、第一の不可情報に該当する特定の装置が、移動元の装置の候補として選出された場合には、特定の装置を移動元の装置の候補から外す。なお、変形例における特定部や決定部は、移動元の装置の候補が選出される前に、第一の不可情報を参照し、第一の不可情報が示す特定の装置を、移動元の装置の候補に選出しないようにすることもできる。
【０１９６】
図３０は、変形例に係る第一の除外処理の手順を示すフローチャートである。第一の除外処理は、例えば、移動元のＶＭの候補が選出された後に、決定処理の一部の処理として実行される。図３０に示すように、変形例における特定部や決定部などは、記憶部を検索し、記憶部に第一の不可情報があるか否かを判定する（Ｓ６０１）。第一の不可情報がない場合（Ｓ６０１否定）には、決定処理を進める。一方、第一の不可情報がある場合（Ｓ６０１肯定）には、変形例における特定部や決定部などは、記憶部から第一の不可情報を取得し、取得した第一の不可情報に基づいて、移動元の装置の候補の中に、第一の不可情報が示す特定の装置があるか否かを判定する（Ｓ６０２）。
【０１９７】
移動元の装置の候補の中に、第一の不可情報が示す特定の装置がある場合（Ｓ６０２肯定）には、変形例における特定部や決定部などは、特定の装置を移動元の装置の候補から外し（Ｓ６０３）、決定処理を進める。また、移動元の装置の候補の中に、第一の不可情報が示す特定の装置がない場合（Ｓ６０２否定）にも、決定処理を進める。
【０１９８】
上述したように、変形例は、ＣＥＰシステム内においてクエリを配置することが可能な複数の装置のうち、特定の装置のみでしか実行できないクエリについては、クエリが配置された装置を移動元の装置の候補から外す。したがって、変形例によれば、移動元の装置の候補の台数が減るため、処理要素を移動させる際の処理コストが抑制される。また、変形例によれば、特定の装置のみでしか実行できないクエリを他の装置に移動させてしまう事象が発生することを抑制することができる。
【０１９９】
また、ＣＥＰシステム内において、複数のクエリのうち、特定のクエリしか実行できない装置がある。そこで、この場合に、この装置に、他の装置の処理要素を移動させないように管理サーバが制御する変形例について説明する。上述した各実施例の変形例における管理サーバは、特定のクエリしか実行できない装置に、他の装置からのクエリの移動が不可であることを示す第二の不可情報を記憶部に格納する。そして、変形例における特定部や決定部などは、移動先の装置の候補が選出された後に、記憶部に第二の不可情報があるか否かを判定し、第二の不可情報がある場合には、第二の不可情報を参照する。続いて、変形例における特定部や決定部などは、第二の不可情報に該当する装置が、移動先の装置の候補として選出された場合には、この装置を移動先の装置の候補から外す。なお、変形例における特定部や決定部は、移動先の装置の候補が選出される前に、第二の不可情報を参照し、第二の不可情報が示す装置を、移動先の装置の候補に選出しないようにすることもできる。
【０２００】
図３１は、変形例に係る第二の除外処理の手順を示すフローチャートである。第二の除外処理は、例えば、移動先のＶＭの候補が選出された後に、決定処理の一部の処理として実行される。図３１に示すように、変形例における特定部や決定部などは、記憶部を検索し、記憶部に第二の不可情報があるか否かを判定する（Ｓ７０１）。第二の不可情報がない場合（Ｓ７０１否定）には、決定処理を進める。一方、第二の不可情報がある場合（Ｓ７０１肯定）には、変形例における特定部や決定部などは、記憶部から第二の不可情報を取得し、取得した第二の不可情報に基づいて、移動先の装置の候補の中に、第二の不可情報が示す装置があるか否かを判定する（Ｓ７０２）。
【０２０１】
移動先の装置の候補の中に、第二の不可情報が示す装置がある場合（Ｓ７０２肯定）には、変形例における特定部や決定部などは、この装置を移動先の装置の候補から外し（Ｓ７０３）、決定処理を進める。また、移動先の装置の候補の中に、第二の不可情報が示す装置がない場合（Ｓ７０２否定）にも、決定処理を進める。
【０２０２】
上述したように、変形例は、ＣＥＰシステム内において、複数のクエリのうち、特定のクエリしか実行できない装置については、移動先の装置の候補から外す。したがって、変形例によれば、移動先の装置の候補の台数が減るため、処理要素を移動させる際の処理コストが抑制される。また、変形例によれば、特定のクエリしか実行できない装置に、他の装置から他のクエリを移動させてしまう事象が発生することを抑制することができる。
【０２０３】
また、上記の各実施例では、ＶＭが、クエリ間の通信回数を算出し、算出した通信回数を含む通信回数情報３７を管理サーバに送信する場合について例示した。しかしながら、開示の装置は、これに限定されない。そこで、ＶＭが、クエリの実行順序を示す順序情報を管理サーバに送信し、順序情報を受信した管理サーバがクエリ間の通信回数を算出し、算出した通信回数に基づいて、クエリの組を特定する変形例について説明する。
【０２０４】
図３２は、変形例に係る管理サーバの構成の一例を示す図である。図３２の例は、実施例５の変形例を示す。図３２に示すように、管理サーバ８６の制御部４５は、算出部８７を有する。変形例では、ＶＭから送信された順序情報を取得部４５ｂが取得し、取得した順序情報を記憶部４４に格納する。そして、算出部８７は、所定のタイミング、例えば、決定処理において、記憶部４４に記憶された通信回数情報３７が取得部４５ｂにより取得される前に、記憶部４４から順序情報を取得する。続いて、算出部８７は、取得した順序情報が示すクエリの実行順序から、クエリの通信回数を算出する。その後、算出部８７は、算出したクエリの通信回数分の値を該当項目に登録した通信回数情報３７を記憶部４４に格納する。
【０２０５】
図３３は、変形例に係る算出処理の手順を示すフローチャートである。算出処理は、例えば、決定処理の一部の処理として、取得部により通信回数情報３７が取得される前に実行される。図３３に示すように、算出部８７は、記憶部４４から順序情報を取得する（Ｓ８０１）。続いて、算出部８７は、取得した順序情報が示すクエリの実行順序から、クエリの通信回数を算出する（Ｓ８０２）。その後、算出部８７は、算出したクエリの通信回数分の値を該当項目に登録した通信回数情報３７を記憶部４４に格納する（Ｓ８０３）。
【０２０６】
上述したように、変形例では、ＶＭは、クエリの通信回数を算出することなく、クエリの実行順序を管理サーバに送信する。そして、変形例では、クエリの実行順序からクエリの通信回数を算出し、算出した通信回数を用いて、クエリの組を特定する。したがって、変形例によれば、ＶＭの処理コストを抑制することができる。なお、上記では、実施例５の変形例について説明したが、実施例３および実施例４などについても、実施例５の変形例と同様の技術を取り入れることができる。
【０２０７】
また、上記の各実施例では、ＶＭにクエリを配置した場合について説明したが、開示の装置は、物理サーバにクエリを配置して同様の処理を行うことができる。
【０２０８】
また、実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、本実施例において説明した各処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。
【０２０９】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。
【０２１０】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更できる。
【０２１１】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【０２１２】
［配置プログラム］
また、上記の実施例で説明した配置装置および管理サーバの各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、図３４を用いて、上記の各実施例で説明した配置装置または管理サーバと同様の機能を有する配置プログラムを実行するコンピュータの一例を説明する。図３４は、配置プログラムを実行するコンピュータを示す図である。
【０２１３】
図３４に示すように、コンピュータ３００は、ＣＰＵ（Central  Processing  Unit）３１０、ＲＯＭ（Read  Only  Memory）３２０、ＨＤＤ（Hard  Disk  Drive）３３０、ＲＡＭ（Random  Access  Memory）３４０を有する。これら３１０〜３４０の各符号が示す各機器は、バス３５０を介して接続される。
【０２１４】
ＲＯＭ３２０には、ＯＳなどの基本プログラムが記憶されている。また、ＨＤＤ３３０には、上記の各実施例で示す初期配置部と、取得部と、算出部と、特定部と、決定部と、配置制御部と同様の機能を発揮する配置プログラムが予め記憶される。なお、配置プログラムについては、適宜分離しても良い。また、ＨＤＤ３３０には、ルーティングテーブル、通信回数情報、負荷情報、移動指示リストが設けられる。これらルーティングテーブル、通信回数情報、負荷情報、移動指示リスト、順序情報は、上述したルーティングテーブル５０、通信回数情報３７、負荷情報３８、移動指示リスト４６、順序情報に対応する。
【０２１５】
そして、ＣＰＵ３１０が、配置プログラムをＨＤＤ３３０から読み出して実行する。
【０２１６】
そして、ＣＰＵ３１０は、ルーティングテーブル、通信回数情報、負荷情報、移動指示リストを読み出してＲＡＭ３４０に格納する。さらに、ＣＰＵ３１０は、ＲＡＭ３４０に格納されたルーティングテーブル、通信回数情報、負荷情報、移動指示リストを用いて、配置プログラムを実行する。なお、ＲＡＭ３４０に格納される各データは、常に全てのデータがＲＡＭ３３０に格納されなくともよい。処理に用いられるデータがＲＡＭ３４０に格納されれば良い。
【０２１７】
なお、上記した配置プログラムについては、必ずしも最初からＨＤＤ３３０に記憶させておく必要はない。
【０２１８】
例えば、コンピュータ３００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」にプログラムを記憶させておく。そして、コンピュータ３００がこれらからプログラムを読み出して実行するようにしてもよい。  
【０２１９】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ３００に接続される「他のコンピュータ（またはサーバ）」などにプログラムを記憶させておく。そして、コンピュータ３００がこれらからプログラムを読み出して実行するようにしてもよい。
【符号の説明】
【０２２０】
１        配置装置
１ａ      取得部
１ｂ      特定部
１ｃ      決定部
２        配置装置
２ａ      取得部
２ｂ      算出部
２ｃ      特定部
２ｄ      決定部
【図１】
0005862245.tif 000002
【図２】
0005862245.tif 000003
【図３】
0005862245.tif 000004
【図４】
0005862245.tif 000005
【図５】
0005862245.tif 000006
【図６】
0005862245.tif 000007
【図７Ａ】
0005862245.tif 000008
【図７Ｂ】
0005862245.tif 000009
【図７Ｃ】
0005862245.tif 000010
【図７Ｄ】
0005862245.tif 000011
【図８】
0005862245.tif 000012
【図９】
0005862245.tif 000013
【図１０Ａ】
0005862245.tif 000014
【図１０Ｂ】
0005862245.tif 000015
【図１１】
0005862245.tif 000016
【図１２】
0005862245.tif 000017
【図１３】
0005862245.tif 000018
【図１４】
0005862245.tif 000019
【図１５】
0005862245.tif 000020
【図１６】
0005862245.tif 000021
【図１７】
0005862245.tif 000022
【図１８】
0005862245.tif 000023
【図１９】
0005862245.tif 000024
【図２０】
0005862245.tif 000025
【図２１】
0005862245.tif 000026
【図２２】
0005862245.tif 000027
【図２３】
0005862245.tif 000028
【図２４】
0005862245.tif 000029
【図２５】
0005862245.tif 000030
【図２６】
0005862245.tif 000031
【図２７】
0005862245.tif 000032
【図２８】
0005862245.tif 000033
【図２９】
0005862245.tif 000034
【図３０】
0005862245.tif 000035
【図３１】
0005862245.tif 000036
【図３２】
0005862245.tif 000037
【図３３】
0005862245.tif 000038
【図３４】
0005862245.tif 000039
【図３５Ａ】
0005862245.tif 000040
【図３５Ｂ】
0005862245.tif 000041
【図３６Ａ】
0005862245.tif 000042
【図３６Ｂ】
0005862245.tif 000043