配置装置、配置プログラムおよび配置方法
【課題】装置間の通信の増加を抑制すること。
【解決手段】配置装置1は、取得部1aと、特定部1bと、決定部1cとを有する。取得部1aは、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された複数のクエリについて、クエリ間の通信回数を示す情報を取得する。特定部1bは、取得部1aにより取得された情報が示す通信回数に基づいて、クエリの組を特定する。決定部1cは、特定部1bにより特定されたクエリの組を同一の装置に配置することを決定する。
【解決手段】配置装置1は、取得部1aと、特定部1bと、決定部1cとを有する。取得部1aは、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された複数のクエリについて、クエリ間の通信回数を示す情報を取得する。特定部1bは、取得部1aにより取得された情報が示す通信回数に基づいて、クエリの組を特定する。決定部1cは、特定部1bにより特定されたクエリの組を同一の装置に配置することを決定する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、配置装置、配置プログラムおよび配置方法に関する。
【背景技術】
【0002】
様々な対象から刻々と収集される多数のデータを並列に処理する技術として複合イベント処理(CEP;Complex Event Processing)がある。複合イベント処理では、受信したデータに対してイベントの発生を検出し、発生が検出されたイベントに関する処理が実行される。なお、複合イベント処理は、ESP(Event Stream Processing)と称される場合もある。以下の説明では、CEPの技術の範囲に、ESPが含まれるものとして説明する。
【0003】
複合イベント処理を行うCEPシステムでは、一時的に大量の受信データを処理する場合がある。この場合、CEPシステムにおける受信データの処理を行う装置では、処理負荷が高くなるため、処理性能が低下する場合がある。
【0004】
そこで、例えば、CEPシステムでは、クラウド技術などの柔軟な資源割り当てが可能な技術を用いて、処理負荷の変動に応じて複数のサーバや仮想マシン(VM;Virtual Machine)に、処理の分散が行われる。かかる処理の分散について、一例を挙げて説明すると、処理負荷が高いサーバや仮想マシンに配置されたクエリと呼ばれる処理要求文や、クエリに付随するデータを処理要素として、他のサーバや仮想マシンに移動させて処理の分散を行う。
【0005】
また、予め定められた、クエリに設定された処理の実行順序などの情報を含むクエリグラフに基づいて、実行順序が前後するクエリ、すなわち、クエリグラフにおいて隣接するクエリ同士を同一の装置に配置する技術がある。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】米国特許出願公開第2009/0049187号明細書
【特許文献2】米国特許出願公開第2009/0319687号明細書
【非特許文献】
【0007】
【非特許文献1】Mehul A. Shah,Joseph M. Hellerstein,Sirish Chandrasekaran and Michael J.Franklin著、“Flux:An Adaptive Partitioning Operator for Continuous Query Systems”,ICDE,2003
【非特許文献2】Ying Xing著、“Load Distribution for Distributed Stream Processing”,EDBT,2004 WORKSHOPS
【非特許文献3】Ying Xing,Stan Zdonik, Jeong−Hyon Hwang著、“Dynamic Load Distribution in the Borealis Stream Processor”,ICDE,2005
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、上記の技術では、装置間の通信の増加を抑制することが困難であるという問題がある。以下、具体例を挙げて説明する。まず、上記の処理の分散の技術の一例を説明する。
【0009】
図35Aおよび図35Bは、上記の処理の分散の技術の一例を説明するための図である。図35Aの例は、クエリの接続関係を示すクエリグラフの一例を示す。図35Aの例のクエリグラフは、クエリQ1の実行結果が用いられて、クエリQ2が実行されることを示す。また、図35Aの例のクエリグラフは、クエリQ2の実行結果が用いられて、クエリQ3が実行されることを示す。また、図35Aおよび図35Bの例では、処理負荷に応じて、クエリQ1およびクエリQ3がサーバ90に配置され、クエリQ2がサーバ91に配置された場合を示す。図35Aおよび図35Bの例では、サーバ90はクエリQ1の実行結果をクエリQ2が配置されたサーバ91へ送信する。また、図35Aおよび図35Bの例では、サーバ91はクエリQ2の実行結果をクエリQ3が配置されたサーバ90へ送信する。このように、図35Aおよび図35Bの例では、クエリQ1〜Q3を実行する場合に、サーバ90およびサーバ91間で実行結果の送信が2回も行われる。
【0010】
次に、上記の隣接するクエリ同士を同一の装置に配置する技術の一例について説明する。図36Aおよび図36Bは、上記の隣接するクエリ同士を同一の装置に配置する技術の一例を説明するための図である。図36Aの例は、クエリの接続関係を示すクエリグラフの一例を示す。図36Aの例のクエリグラフは、クエリQ1の実行結果が用いられて、クエリQ2、Q3が実行されることを示す。また、図36Aの例のクエリグラフは、クエリQ2の実行結果が用いられて、クエリQ3が実行されることを示す。また、図36Aおよび図36Bの例では、クエリグラフが示すクエリの隣接関係に応じて、クエリQ1およびクエリQ2がサーバ90に配置され、クエリQ3がサーバ91に配置された場合を示す。ここで、クエリQ1が配置された装置からクエリQ2が配置された装置への処理結果の送信回数よりも、クエリQ1が配置された装置からクエリQ3が配置された装置への処理結果の送信回数が多い場合を説明する。この場合、図36Aおよび図36Bの例では、通信サーバ90は、クエリQ1、Q2が同一のサーバ90に配置されたため、クエリQ1、Q2間では、実行結果の送信を行わない。しかしながら、図36Aおよび図36Bの例では、通信サーバ90は、クエリQ1の実行結果をクエリQ3が配置されたサーバ91へ送信する。このように、図35Aおよび図35Bの例では、クエリQ1〜Q3を実行する場合に、サーバ90およびサーバ91間で実行結果の送信が行われてしまう。
【0011】
したがって、上記の技術では、装置間の通信の増加を抑制することが困難である。
【0012】
1つの側面では、本発明は、装置間の通信の増加を抑制することを目的とする。
【課題を解決するための手段】
【0013】
1つの案では、本願の開示する配置装置は、取得部と、特定部と、決定部とを有する。取得部は、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された複数のクエリについて、クエリ間の通信回数を示す情報を取得する。特定部は、取得部により取得された情報が示す通信回数に基づいて、クエリの組を特定する。決定部は、特定部により特定されたクエリの組を同一の装置に配置することを決定する。
【0014】
また、他の案では、本願の開示する配置装置は、取得部と、算出部と、特定部と、決定部とを有する。取得部は、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された複数のクエリについて、クエリが実行された順序を示す情報を取得する。算出部は、取得部により取得された情報に基づいて、クエリ間の通信回数を算出する。特定部は、算出部により算出された通信回数に基づいて、クエリの組を特定する。決定部は、特定部により特定されたクエリの組を同一の装置に配置することを決定する。
【0015】
また、他の案では、本願の開示する配置装置は、取得部と、算出部と、特定部と、決定部とを有する。取得部は、複数の処理要求文を連携してイベントを実行する該処理要求文が1以上配置された複数の装置が実行した処理要求文間の通信回数を示す情報を取得する。特定部は、通信回数に基づいて、処理要求文の組を特定する。決定部は、特定された処理要求文の組を同一の装置に配置するための装置を決定する。
【発明の効果】
【0016】
装置間の通信の増加を抑制することができる。
【図面の簡単な説明】
【0017】
【図1】図1は、実施例1に係る配置装置を含むCEPシステムの構成の一例を示す図である。
【図2】図2は、実施例2に係る配置装置を含むCEPシステムの構成の一例を示す図である。
【図3】図3は、実施例3に係るCEPシステムの構成の一例を示す図である。
【図4】図4は、実施例3に係るVMの処理の一例を説明するための図である。
【図5】図5は、実施例3に係るVMの処理の一例を説明するための図である。
【図6】図6は、実施例3に係るVMの処理の一例を説明するための図である。
【図7A】図7Aは、通信回数情報のデータ構造の一例を示す図である。
【図7B】図7Bは、通信回数情報のデータ構造の一例を示す図である。
【図7C】図7Cは、通信回数情報のデータ構造の一例を示す図である。
【図7D】図7Dは、通信回数情報のデータ構造の一例を示す図である。
【図8】図8は、実施例3に係るVMの処理の一例を説明するための図である。
【図9】図9は、データの流れに沿ってCEPシステムの構成を模式的に示した図である。
【図10A】図10Aは、クエリの移動の一例を示す図である。
【図10B】図10Bは、クエリの移動の他の一例を示す図である。
【図11】図11は、クエリのグループ分けの一例を示す図である。
【図12】図12は、管理サーバの構成の一例を示す図である。
【図13】図13は、移動指示リストのデータ構造の一例を示す図である。
【図14】図14は、実施例3に係る管理サーバが実行する処理の一例を説明するための図である。
【図15】図15は、取得処理の手順を示すフローチャートである。
【図16】図16は、決定処理の手順を示すフローチャートである。
【図17】図17は、決定処理の手順を示すフローチャートである。
【図18】図18は、決定処理の手順を示すフローチャートである。
【図19】図19は、配置制御処理の手順を示すフローチャートである。
【図20】図20は、実施例4に係る管理サーバの構成を示すブロック図である。
【図21】図21は、実施例4に係る管理サーバが実行する処理の一例を説明するための図である。
【図22】図22は、実施例4に係る決定処理の手順を示すフローチャートである。
【図23】図23は、実施例4に係る決定処理の手順を示すフローチャートである。
【図24】図24は、実施例4に係る決定処理の手順を示すフローチャートである。
【図25】図25は、実施例5に係る管理サーバの構成を示すブロック図である。
【図26】図26は、実施例5に係る管理サーバが実行する処理の一例を説明するための図である。
【図27】図27は、実施例5に係る決定処理の手順を示すフローチャートである。
【図28】図28は、実施例5に係る決定処理の手順を示すフローチャートである。
【図29】図29は、実施例5に係る決定処理の手順を示すフローチャートである。
【図30】図30は、変形例に係る第一の除外処理の手順を示すフローチャートである。
【図31】図31は、変形例に係る第二の除外処理の手順を示すフローチャートである。
【図32】図32は、変形例に係る管理サーバの構成の一例を示す図である。
【図33】図33は、変形例に係る算出処理の手順を示すフローチャートである。
【図34】図34は、配置プログラムを実行するコンピュータを示す図である。
【図35A】図35Aは、上記の処理の分散の技術の一例を説明するための図である。
【図35B】図35Bは、上記の処理の分散の技術の一例を説明するための図である。
【図36A】図36Aは、上記の隣接するクエリ同士を同一の装置に配置する技術の一例を説明するための図である。
【図36B】図36Bは、上記の隣接するクエリ同士を同一の装置に配置する技術の一例を説明するための図である。
【発明を実施するための形態】
【0018】
以下に、本願の開示する配置装置、配置プログラムおよび配置方法の各実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例1】
【0019】
実施例1に係る配置装置について説明する。図1は、実施例1に係る配置装置を含むCEPシステムの構成の一例を示す図である。図1の例のCEPシステムは、配置装置1と複数の装置2a〜2cとを有する。図1の例では、配置装置1と、複数の装置2a〜2cとが接続される。したがって、配置装置1および複数の装置2a〜2cの各装置は、互いに通信を行うことができる。
【0020】
配置装置1は、CEPシステムを管理する物理サーバである。例えば、配置装置1は、データセンサや各企業に設けられた管理用のサーバである。装置2a〜2cの各々は、物理サーバまたは物理サーバ上で動作する仮想マシンである。各装置2a〜2cには、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリ3a〜3cが配置される。各装置2a〜2cには、様々な対象から収集されたデータが配信(送信)される。各装置2a〜2cは、CEPシステムの外部から受信したデータ、または、CEPシステム内の他のクエリでの処理結果を示すデータを受信する。そして、各装置2a〜2cは、クエリ3a〜3cのそれぞれに設定された条件に合致した場合に、クエリ3a〜3cのそれぞれに設定された処理を実行する。
【0021】
また、各装置2a〜2cに配置されたクエリ3a〜3cのそれぞれは、配置装置1により装置2a〜2cのいずれかの装置に再び配置される。例えば、各装置2a〜2cは、処理負荷を分散させる場合には、処理負荷が高い装置から処理負荷が低い装置へクエリを移動させる。
【0022】
ここで、クエリ3bを実行する際に、クエリ3aの処理結果(実行結果)が用いられ、また、クエリ3cを実行する際に、クエリ3aまたはクエリ3cの処理結果が用いられる場合について説明する。この場合、装置2aは、外部から受信したデータが、クエリ3aに設定された条件に合致した場合に、クエリ3aに設定された処理を実行する。そして、装置2aは、クエリ3aに設定された処理を実行した処理結果を、クエリ3bが配置された装置2b、または、クエリ3cが配置された装置2cへ送信する。また、装置2bは、装置2aから受信したデータが、クエリ3bに設定された条件に合致した場合に、クエリ3bに設定された処理を実行する。そして、装置2bは、クエリ3bに設定された処理を実行した処理結果を、クエリ3cが配置された装置2cへ送信する。ここで、装置2aは、クエリ3aに設定された処理を実行した処理結果を、装置2bよりも装置2cへ送信する回数が多い場合について説明する。なお、上述したように、装置2bは、装置2aから受信したデータに基づいて、クエリ3bに設定された処理を実行し、処理結果を、装置2cへ送信する。この場合、結果的に、クエリ3a,3c間の通信回数は、クエリ3b,3c間の通信回数よりも多い。このとき、後述する配置装置1の制御により、通信回数が多いクエリ3a,3c間のクエリ3a,3cの組が同一の装置へ配置させることが決定される。
【0023】
また、装置2cは、クエリ3a,3b間、クエリ3a,3c間、クエリ3b,3c間の通信回数を集計し、集計結果を配置装置1に送信する。すなわち、装置2cは、各クエリ間の通信回数を示す情報を配置装置1に送信する。なお、「クエリA,B間の通信回数」は、クエリAが配置された装置と、クエリBが配置された装置とで通信された(処理結果を送信した)回数を指す。
【0024】
図1に示すように、配置装置1は、取得部1aと、特定部1bと、決定部1cとを有する。
【0025】
取得部1aは、クエリ間の通信回数を示す情報を取得する。例えば、取得部1aは、装置2cから送信された各クエリ間の通信回数を示す情報を受信することにより、かかる情報を取得する。
【0026】
特定部1bは、取得部1aにより取得された情報が示す通信回数に基づいて、クエリの組を特定する。例えば、特定部1bは、クエリ3a,3b間、クエリ3a,3c間、クエリ3b,3c間のうち、通信回数が最も多いクエリ3a,3c間のクエリ3a,3cの組を特定する。
【0027】
決定部1cは、特定部1bにより特定されたクエリの組を同一の装置に配置することを決定する。例えば、決定部1cは、特定部1bにより特定されたクエリ3a,3cの組を同一の装置2a,2bまたは2cなどに配置することを決定する。
【0028】
このように、本実施例に係る配置装置1は、クエリ3a,3cを同一の装置へ配置することを決定する。したがって、この決定に基づきクエリ3a,3cが同一の装置へ配置された場合には、クエリ3a,3cが同一の装置へ配置される前に装置2a,2c間で行われていたような、2つの装置間での処理結果の通信が行われなくなる。したがって、本実施例に係る配置装置1によれば、通信回数の増加を抑制することができる。
【0029】
なお、図1の例では、機能的な構成を示したため、取得部1aと、特定部1bと、決定部1cとを別に分けているが、1つのデバイスで構成してもよい。デバイスの一例としては、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路が挙げられる。なお、かかるデバイスとして、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を採用することもできる。
【実施例2】
【0030】
次に、実施例2について説明する。図2は、実施例2に係る配置装置を含むCEPシステムの構成の一例を示す図である。図2の例のCEPシステムは、配置装置5と複数の装置6a〜6cとを有する。図2の例では、配置装置5と、複数の装置6a〜6cとが接続される。したがって、配置装置5および複数の装置6a〜6cの各装置は、互いに通信を行うことができる。
【0031】
配置装置5は、CEPシステムを管理する物理サーバである。例えば、配置装置5は、データセンサや各企業に設けられた管理用のサーバである。装置6a〜6cの各々は、物理サーバまたは物理サーバ上で動作する仮想マシンである。各装置6a〜6cには、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリ7a〜7cが配置される。各装置6a〜6cには、様々な対象から収集されたデータが配信(送信)される。各装置6a〜6cは、CEPシステムの外部から受信したデータ、または、CEPシステム内の他のクエリでの処理結果を示すデータを受信する。そして、各装置6a〜6cは、受信したデータがクエリ7a〜7cのそれぞれに設定された条件に合致した場合に、クエリ7a〜7cのそれぞれに設定された処理を実行する。
【0032】
また、各装置6a〜6cに配置されたクエリ7a〜7cのそれぞれは、配置装置5により装置6a〜6cのいずれかの装置に再び配置される。例えば、各装置6a〜6cは、処理負荷を分散させる場合には、処理負荷が高い装置から処理負荷が低い装置へクエリを移動させる。
【0033】
ここで、クエリ7bを実行する際に、クエリ7aの処理結果が用いられ、また、クエリ7cを実行する際に、クエリ7aまたはクエリ7cの処理結果が用いられる場合について説明する。この場合、装置6aは、外部から受信したデータが、クエリ7aに設定された条件に合致した場合に、クエリ7aに設定された処理を実行する。そして、装置6aは、クエリ7aに設定された処理を実行した処理結果を、クエリ7bが配置された装置6b、または、クエリ7cが配置された装置6cへ送信する。また、装置6bは、装置6aから受信したデータが、クエリ7bに設定された条件に合致した場合に、クエリ7bに設定された処理を実行する。そして、装置6bは、クエリ7bに設定された処理を実行した処理結果を、クエリ7cが配置された装置6cへ送信する。ここで、装置6aは、クエリ7aに設定された処理を実行した処理結果を、装置6bよりも装置6cへ送信する回数が多い場合について説明する。なお、上述したように、装置6bは、装置6aから受信したデータに基づいて、クエリ7bに設定された処理を実行し、処理結果を、装置6cへ送信する。そのため、結果的に、クエリ7a,7c間の通信回数は、クエリ7b,7c間の通信回数よりも多い。このとき、後述する配置装置5の制御により、通信回数が多いクエリ7a,7c間のクエリ7a,7cの組を同一の装置へ配置することが決定される。
【0034】
また、各装置6a〜6cは、他の装置からクエリの識別子を受信していない場合に、クエリに設定された処理を実行した場合には、次のような情報を他の装置に送信する。すなわち、各装置6a〜6cは、処理結果と、実行したクエリの識別子とを他の装置に送信する。例えば、装置6aは、他の装置からクエリの識別子を受信していない場合に、クエリ7aに設定された処理の処理結果と、実行したクエリ7aの識別子とを装置6bまたは装置6cに送信する。
【0035】
また、各装置6a〜6cは、他の装置からクエリの識別子を受信した場合には、処理結果とともに、受信したクエリの識別子と実行したクエリの識別子とをクエリの実行順が認識可能な形式にして送信する。例えば、装置6bは、クエリ7bに設定された処理の処理結果を装置6cに送信する。これに加えて、装置6bは、装置6aからクエリ7aの識別子を受信した場合に、次のような処理を行う。すなわち、装置6bは、クエリの実行順が認識可能なように、受信したクエリ7aの識別子の次に、実行したクエリ7bの識別子が並んだ情報、換言すれば、クエリ7aが実行された後に、クエリ7bが実行されたことが認識可能な情報を装置6cに送信する。また、装置6cは、クエリ7cに設定された処理の処理結果を配信装置5に送信する。これに加えて、装置6cは、受信したクエリの識別子がクエリ7aの識別子である場合には、クエリの実行順が認識可能なように、次のような処理を行う。すなわち、装置6cは、受信したクエリ7aの識別子の次に、実行したクエリ7cの識別子が並んだ情報、換言すれば、クエリ7aが実行された後に、クエリ7cが実行されたことが認識可能な情報を装置6cに送信する。また、装置6cは、受信したクエリの識別子がクエリ7aの識別子およびクエリ7bの識別子である場合には、クエリの実行順が認識可能なように、次のような処理を行う。すなわち、装置6cは、クエリ7aの識別子、クエリ7bの識別子、実行したクエリ7cの識別子の順で識別子が並んだ情報、換言すれば、クエリ7aが実行された後に、クエリ7b、クエリ7cの順で実行されたことが認識可能な情報を配置装置5に送信する。このようにして、装置6cは、クエリが実行された順序を示す情報を配置装置5に送信する。
【0036】
図2に示すように、配置装置5は、取得部5aと、算出部5bと、特定部5cと、決定部5dとを有する。
【0037】
取得部5aは、クエリが実行された順序を示す情報を取得する。例えば、取得部5aは、装置6cから送信されたクエリが実行された順序を示す情報を受信することにより、かかる情報を取得する。
【0038】
算出部5bは、取得部5aにより取得された情報に基づいて、クエリ間の通信回数を算出する。例えば、算出部5bは、クエリが実行された順序を示す情報に、クエリ7aの次に、クエリ7cが実行されたことを示す情報が含まれている場合には、クエリ7a,7c間の通信回数を1つインクリメントする。また、算出部5bは、クエリが実行された順序を示す情報に、クエリ7aの次に、クエリ7bが実行されたことを示す情報が含まれている場合には、クエリ7a,7b間の通信回数を1つインクリメントする。また、算出部5bは、クエリが実行された順序を示す情報に、クエリ7bの次に、クエリ7cが実行されたことを示す情報が含まれている場合には、クエリ7b,7c間の通信回数を1つインクリメントする。
【0039】
特定部5cは、算出部5bにより算出された通信回数に基づいて、クエリの組を特定する。例えば、特定部5cは、クエリ7a,7b間、クエリ7a,7c間、クエリ7b,7c間のうち、通信回数が最も多いクエリ7a,7c間のクエリ7a,7cの組を特定する。
【0040】
決定部5dは、特定部5cにより特定されたクエリの組を同一の装置に配置することを決定する。例えば、決定部5dは、特定部5cにより特定されたクエリ7a,7cの組を同一の装置6aまたは6cに配置することを決定する。
【0041】
このように、本実施例に係る配置装置5は、クエリ7a,7cを同一の装置へ配置することを決定する。したがって、この決定に基づきクエリ7a,7cが同一の装置へ配置された場合には、クエリ7a,7cが同一の装置へ配置される前に装置6a,6c間で行われていたような、2つの装置間での処理結果の通信が行われなくなる。したがって、本実施例に係る配置装置5によれば、通信回数の増加を抑制することができる。
【0042】
なお、図2の例では、機能的な構成を示したため、取得部5aと、算出部5bと、特定部5cと、決定部5dとを別に分けているが、1つのデバイスで構成してもよい。デバイスの一例としては、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路が挙げられる。なお、かかるデバイスとして、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を採用することもできる。
【実施例3】
【0043】
実施例3について説明する。実施例3では、複数のサーバ上でそれぞれVMが動作し、VMにクエリが配置されたCEPシステムについて説明する。図3は、実施例3に係るCEPシステムの構成の一例を示す図である。CEPシステム10は、サーバ20と、サーバ31と、サーバ32と、サーバ33と、サーバ34と、サーバ35と、管理サーバ40とを有する。これらの各サーバは、ネットワーク99を介して接続される。すなわち、図3の例のCEPシステム10では、各サーバ間で通信を行うことができる。かかるネットワーク99の一態様としては、有線または無線を問わず、LAN(Local Area Network)やVPN(Virtual Private Network)などの任意の通信網が挙げられる。また、図3の例では、サーバ31〜35の台数を5台、管理サーバ40の台数を1台、サーバ20の台数を1台とする場合について例示したが、これらの台数は任意の値を採用することができる。
【0044】
サーバ31では、VM31a,31bが動作する。同様に、各サーバ32〜35では、それぞれ、VM32a,32b、VM33a,33b、VM34a,34b、VM35a,35bが動作する。本実施例の説明では、これらの各VM32a、32b、33a、33b、VM34a、34b、35a、35bを区別無く説明する場合には、単にVMと総称する。また、図3の例では、各サーバ31〜35上で動作するVMの台数が2台の場合について例示したが、各サーバ31〜35上で動作するVMの台数は、任意の値を採ることができる。VMには、後述するように、管理サーバ40の制御により、クエリが配置される。また、VMは、CEPシステム10の外部から受信したデータであって後述の前処理が行われたデータ、または、CEPシステム10内の他のクエリでの処理結果を示すデータを受信する。そして、VMは、受信したデータが、VMに配置されたクエリに設定された条件に合致した場合に、クエリに設定された処理を実行する。
【0045】
また、VMは、後述するように、管理サーバ40から、処理結果の送信先のVMのアドレス、例えば、IP(Internet Protocol)アドレスが通知される。また、VMには、後述するように、管理サーバ40から、クエリグラフが送信される。
【0046】
また、VMは、他のVMからクエリの識別子を受信していない場合に、クエリに設定された処理を実行したときには、次のような情報を他のVMに送信する。すなわち、VMは、処理結果と、実行したクエリの識別子とを含むデータを、アドレスに対応するVMに送信する。ここで、以下の説明において、かかるデータを「イベントデータ」と表記する場合がある。
【0047】
また、VMは、他のVMからクエリの識別子を受信した場合には、受信したクエリの識別子と実行したクエリの識別子とをクエリの実行順が認識可能な形式にして、処理結果とともにイベントデータに含め、イベントデータを送信する。例えば、VMは、通知されたアドレスを用いて、アドレスに対応するVMに、かかるイベントデータを送信する。このとき、VMは、他のVMからクエリの識別子を受信した場合に、次のような処理を行う。すなわち、VMは、クエリの実行順が認識可能なように、受信したクエリの識別子の次に、実行したクエリの識別子が並んだ情報、換言すれば、クエリが実行された順序が認識可能な情報をイベントデータに含めて、アドレスに対応するVMに送信する。
【0048】
具体例を挙げて、実施例3に係るVMの処理を説明する。図4〜図6は、実施例3に係るVMの処理の一例を説明するための図である。図4は、VMに送信されるクエリグラフ60の一例を示す。図4の例では、クエリグラフ60は、クエリに設定された処理の実行順序を示す。図4の例のクエリグラフ60は、クエリ61に設定された処理の実行結果が用いられて、クエリ62に設定された処理が実行されることを示す。また、図4の例では、クエリ63〜68の各クエリに設定された処理についても同様にして実行される。また、図4の例のクエリグラフ60は、最初に実行される処理が設定されたクエリが、クエリ61であることを示す。また、図4の例のクエリグラフ60は、最後に実行される処理が設定されたクエリが、クエリ65であることを示す。したがって、図6の例に示すクエリグラフ60が送信されたVMは、自身に配置されたクエリと、クエリグラフ60の内容とから、自身に配置されたクエリが、最後に実行される処理が設定されたクエリであるか否かを判定することができる。例えば、VMは、クエリグラフ60を受信した場合に、クエリグラフ60を参照し、自身に配置されたクエリが、クエリ65であるか否かを判定することで、自身に配置されたクエリが、最後に実行される処理が設定されたクエリであるか否かを判定できる。
【0049】
図5は、他のクエリグラフ70の一部の例を示す。図5の例では、クエリグラフ70は、クエリ71に設定された処理の処理結果が用いられて、クエリ72,73に設定された処理が実行されることを示す。また、図5の例のクエリグラフ70は、クエリ72に設定された処理の処理結果が用いられて、クエリ73に設定された処理が実行されることを示す。ここで、管理サーバ40により、クエリグラフ70が、VMに送信され、VM31aにクエリ71、VM32aにクエリ72、VM33aにクエリ73が配置された場合のVM31a,32a,33aの動作の一例について説明する。なお、以下の説明では、クエリ71〜73のそれぞれを、「Q1」、「Q2」、「Q3」と表記する場合がある。
【0050】
図6の例では、VM31a,32a,33aのそれぞれは、まず、自身に配置されたクエリQ1,Q2,Q3のそれぞれが、クエリグラフ70が示す、最後に実行される処理が設定されたクエリQ3であるか否かを判定する。これにより、VM31a,32aは、自身に配置されたクエリQ1,Q2が、最後に実行される処理が設定されたクエリでないと判定する。またVM33aは、自身に配置されたクエリQ3が、最後に実行される処理が設定されたクエリであると判定する。このような判定をしたVM33aは、後述するように、イベントデータに含まれるクエリQ1,Q2,Q3の実行順序から、各クエリ間の通信回数を集計し、集計結果を含む通信回数情報を管理サーバ40に送信する。
【0051】
図6の例では、VM31aは、VM32aに送信するイベントデータ36aの「ID(Identification)」の項目に、イベントデータを識別するための識別子を登録する。また、VM31aは、イベントデータ36aの「処理結果」の項目に、クエリQ1に設定された処理の処理結果を登録する。また、VM31aは、イベントデータ36aの「実行順序」の項目に、実行した処理が設定されたクエリQ1の識別子「Q1」を登録する。また、VM31aは、イベントデータ36aのその他の各種項目についても、各項目に対応する情報を登録する。このようにして、VM31aは、イベントデータ36aを生成する。そして、VM31aは、管理サーバ40から通知された、処理結果の送信先のVM32aのアドレスを用いて、VM32aに、生成したイベントデータ36aを送信する。
【0052】
また、VM31aは、VM33aに送信するイベントデータ36bの「ID」の項目に、イベントデータを識別するための識別子を登録する。また、VM31aは、イベントデータ36bの「処理結果」の項目に、クエリQ1に設定された処理の処理結果を登録する。また、VM31aは、イベントデータ36bの「実行順序」の項目に、実行した処理が設定されたクエリQ1の識別子「Q1」を登録する。また、VM31aは、イベントデータ36bのその他の各種項目についても、各項目に対応する情報を登録する。このようにして、VM31aは、イベントデータ36bを生成する。そして、VM31aは、管理サーバ40から通知された、処理結果の送信先のVM33aのアドレスを用いて、VM33aに、生成したイベントデータ36bを送信する。
【0053】
そして、VM32aは、イベントデータ36aを受信すると、イベントデータ36aの「処理結果」の項目に登録された処理結果のデータが、クエリQ2に設定された条件に合致するか否かを判定する。続いて、VM32aは、合致した場合に、クエリQ2に設定された処理を実行する。そして、VM32aは、VM33aに送信するイベントデータ36cの「ID」の項目に、イベントデータを識別するための識別子を登録する。また、VM32aは、イベントデータ36cの「処理結果」の項目に、クエリQ2に設定された処理の処理結果を登録する。また、VM32aは、イベントデータ36aの「実行順序」の項目に登録された識別子「Q1」を取得し、取得した識別子「Q1」の次に、実行した処理が設定されたクエリQ2の識別子「Q2」が並ぶように、次のような処理を行う。すなわち、VM32aは、イベントデータ36cの「実行順序」の項目に、識別子「Q1」の次に、識別子「Q2」が並んで登録されるように、識別子「Q1」および「Q2」を登録する。また、VM32aは、イベントデータ36cのその他の各種項目についても、各項目に対応する情報を登録する。このようにして、VM32aは、イベントデータ36cを生成する。そして、VM32aは、管理サーバ40から通知された、処理結果の送信先のVM33aのアドレスを用いて、VM33aに、生成したイベントデータ36cを送信する。
【0054】
VM33aは、イベントデータ36bを受信すると、イベントデータ36bの「処理結果」の項目に登録された処理結果のデータが、クエリQ3に設定された条件に合致するか否かを判定する。続いて、VM33aは、合致した場合に、クエリQ3に設定された処理を実行する。そして、VM33aは、イベントデータ36bの「実行順序」の項目に登録された識別子「Q1」を取得し、取得した識別子「Q1」の次に、実行した処理が設定されたクエリQ3の識別子「Q3」が並んだ情報「Q1、Q3」を生成する。そして、VM33aは、生成した情報「Q1、Q3」を参照して、識別子「Q1」が示すクエリQ1に設定された処理が実行された後に、識別子「Q3」が示すクエリQ3に設定された処理が実行されたと判定する。続いて、VM33aは、判定結果に基づいて、通信回数情報37の送信元の項目「Q1」、送信先の項目「Q3」に対応する項目に登録された値を1つインクリメントする。
【0055】
図7A〜図7Dは、通信回数情報のデータ構造の一例を示す図である。通信回数情報37には、クエリ間の通信回数が登録される。図7Aの例では、通信回数情報37は、クエリに設定された処理の実行順序が前後となる2つのクエリについて、先に実行された処理が設定されたクエリ(先クエリ)と、後に実行された処理が設定されたクエリ(後クエリ)とに対応する通信回数が登録される項目37aを有する。図7Aの例は、VM33aにより項目37aの値がインクリメントされる前の、いわゆる初期状態を示し、全ての項目37aの値は、「0」である。
【0056】
通信回数情報37の項目37aの登録内容が、図7Aの例が示す場合に、上述したように、VM33aが、クエリQ1に設定された処理が実行された後に、クエリQ3に設定された処理が実行されたと判定したときには、VM33aは、次のような処理を行う。すなわち、VM33aは、図7Bの例に示すように、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値を1つインクリメントする。
【0057】
また、VM33aは、イベントデータ36cを受信すると、イベントデータ36cの「処理結果」の項目に登録された処理結果のデータが、クエリQ3に設定された条件に合致するか否かを判定する。続いて、VM33aは、合致した場合に、クエリQ3に設定された処理を実行する。そして、VM33aは、イベントデータ36cの「実行順序」の項目に登録された識別子「Q1,Q2」を取得し、取得した識別子「Q1,Q2」の次に、実行した処理が設定されたクエリQ3の識別子「Q3」が並んだ情報「Q1,Q2,Q3」を生成する。そして、VM33aは、生成した情報「Q1,Q2,Q3」を参照して、識別子「Q1」が示すクエリQ1に設定された処理が実行された後に、識別子「Q2」が示すクエリQ2に設定された処理が実行されたと判定する。また、VM33aは、生成した情報「Q1,Q2,Q3」を参照して、識別子「Q2」が示すクエリQ2に設定された処理が実行された後に、識別子「Q3」が示すクエリQ3に設定された処理が実行されたと判定する。続いて、VM33aは、判定結果に基づいて、通信回数情報37の送信元の項目「Q1」、送信先の項目「Q2」に対応する項目に登録された値を1つインクリメントする。また、VM33aは、判定結果に基づいて、通信回数情報37の送信元の項目「Q2」、送信先の項目「Q3」に対応する項目に登録された値を1つインクリメントする。
【0058】
通信回数情報37の項目37aの登録内容が、図7Aの例が示す場合に、上述したように、VM33aが、クエリQ1に設定された処理が実行された後に、クエリQ2に設定された処理が実行されたと判定したときには、VM33aは、次のような処理を行う。すなわち、VM33aは、図7Cの例に示すように、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q2」に対応する項目37aに登録された値を1つインクリメントする。また、この場合に、上述したように、VM33aが、クエリQ2に設定された処理が実行された後に、クエリQ3に設定された処理が実行されたと判定したときには、VM33aは、次のような処理を行う。すなわち、VM33aは、図7Cの例に示すように、「先クエリ」の項目が「Q2」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値を1つインクリメントする。
【0059】
また、図7Aの例が示す場合から、クエリQ1に設定された処理が実行された後に、クエリQ3に設定された処理が実行されたと判定した回数が「10」である場合には、VM33aは、次のような処理を行う。すなわち、VM33aは、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値を1つインクリメントすることを10回行う。この結果、図7Dの例に示すように、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値が「10」となる。また、クエリQ1に設定された処理が実行された後に、クエリQ2に設定された処理が実行されたと判定した回数が「1」である場合には、VM33aは、次のような処理を行う。すなわち、VM33aは、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q2」に対応する項目37aに登録された値を1つインクリメントすることを1回行う。この結果、図7Dの例に示すように、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q2」に対応する項目37aに登録された値が「1」となる。また、クエリQ2に設定された処理が実行された後に、クエリQ3に設定された処理が実行されたと判定した回数が「1」である場合には、VM33aは、次のような処理を行う。すなわち、VM33aは、「先クエリ」の項目が「Q2」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値を1つインクリメントすることを1回行う。この結果、図7Dの例に示すように、「先クエリ」の項目が「Q2」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値が「1」となる。
【0060】
このようにして、自身に配置されたクエリQ3が、最後に実行される処理が設定されたクエリであると判定をしたVM33aは、イベントデータに含まれるクエリQ1,Q2などの実行順序から、各クエリ間の通信回数を集計する。そして、VM33aは、集計結果を含む通信回数情報37を生成する。続いて、VM33aは、所定時間間隔、例えば、1分毎に、生成した通信回数情報37を管理サーバ40に送信する。
【0061】
また、VMは、所定時間ごと、例えば、1分ごとに、負荷を示す負荷情報を管理サーバ40へ送信する。なお、負荷情報は、例えば、クエリおよびクエリに付随するデータなどを含む処理要素ごとの負荷を示す情報である。
【0062】
具体例を挙げて、実施例3に係るVMの処理を説明する。図8は、実施例3に係るVMの処理の一例を説明するための図である。図8の例では、VM31aは、管理サーバ40に送信する負荷情報38aの「装置」の項目に、VM31aの識別子「31a」を登録する。また、図8の例では、VM31aは、負荷情報38aの「クエリ」の項目に、VM31aに配置されたクエリQ1の識別子「Q1」を登録する。また、図8の例では、VM31aは、負荷情報38aの「処理要素」の項目に、クエリQ1およびクエリQ1に付随するデータを含む処理要素の識別子「V1」を登録する。また、図8の例では、VM31aは、負荷情報38aの「負荷値」の項目に、処理要素の負荷、例えば、単位時間の間(例えば、1秒間)に処理されたイベントの数mを登録する。
【0063】
また、図8の例では、VM32aは、管理サーバ40に送信する負荷情報38bの「装置」の項目に、VM32aの識別子「32a」を登録する。また、図8の例では、VM32aは、負荷情報38bの「クエリ」の項目に、VM32aに配置されたクエリQ2の識別子「Q2」を登録する。また、図8の例では、VM32aは、負荷情報38bの「処理要素」の項目に、クエリQ2およびクエリQ2に付随するデータを含む処理要素の識別子「V2」を登録する。また、図8の例では、VM32aは、負荷情報38bの「負荷値」の項目に、処理要素の負荷、例えば、単位時間の間(例えば、1秒間)に処理されたイベントの数nを登録する。
【0064】
また、図8の例では、VM33aは、管理サーバ40に送信する負荷情報38cの「装置」の項目に、VM33aの識別子「33a」を登録する。また、図8の例では、VM33aは、負荷情報38cの「クエリ」の項目に、VM33aに配置されたクエリQ3の識別子「Q3」を登録する。また、図8の例では、VM33aは、負荷情報38cの「処理要素」の項目に、クエリQ3およびクエリQ3に付随するデータを含む処理要素の識別子「V3」を登録する。また、図8の例では、VM33aは、負荷情報38cの「負荷値」の項目に、処理要素の負荷、例えば、単位時間の間(例えば、1秒間)に処理されたイベントの数rを登録する。
【0065】
このようにして、VM31a〜33aのそれぞれは、負荷情報38a〜38cのそれぞれを生成する。
【0066】
また、図8の例では、VM31a〜33aのそれぞれは、負荷情報38a〜38cのそれぞれを、所定時間ごとに、管理サーバ40に送信する。
【0067】
管理サーバ40は、サーバ20、サーバ31〜35、VM31a〜35a,31b〜35bを管理するサーバである。管理サーバ40は、クエリの配置を制御する。
【0068】
図9は、データの流れに沿ってCEPシステムの構成を模式的に示した図である。サーバ20、VM31a〜35a,31b〜35bおよび管理サーバ40は、各クエリが処理対象とするデータ毎に当該クエリの配置先が登録されたルーティングテーブル50を記憶する。
【0069】
サーバ20は、外部ネットワーク98を介して様々な対象から多数のデータを受信する。サーバ20は、受信したデータを所定のデータ構成に整える前処理を行う。そして、サーバ20は、ルーティングテーブル50に基づき、受信したデータを処理対象とするクエリの配置先を特定する。続いて、サーバ20は、前処理が行われたデータを特定した配置先のVMへ送信する。なお、図3および図9の例では、サーバ20の台数が1台である場合を例示したが、サーバ20を複数台設けて、複数のサーバ20により受信したデータを各VMへ送信してもよい。
【0070】
VMは、それぞれエンジン51を動作させる。エンジン51は、複合イベント処理を実現するソフトウェアである。エンジン51は、受信したデータと、クエリの条件式とを突合させてイベントを検出し、検出したイベントの処理を実行する制御を行う。また、CEPシステム10では、複数のクエリにより一連の処理を実行させる。例えば、上位のクエリによる処理結果のデータを下位のクエリへ送信する。そして、下位のクエリでは、送信されたデータを、下位のクエリに設定された処理を実行する際に用いる。エンジン51は、複数のクエリにより一連の処理を実行する場合、クエリによる処理結果のデータを下位のクエリが配置されたVMへ送信する。また、エンジン51は、管理サーバ40からのクエリの移動の指示に応じて、他のVM上で動作するエンジン51との間でクエリを移動させる制御を行う。
【0071】
ここで、クエリの移動について説明する。クエリは、付随するデータを有する場合がある。例えば、クエリが処理対象とするデータの所定の期間の平均を求める処理を行う場合、平均を算出するために所定の期間より長い期間の間に受信したデータを保持する。また、クエリは、処理にテーブルなどの所定のデータを用いる場合もある。エンジン51は、クエリを移動させる場合、クエリおよびクエリに付随するデータを処理要素として移動させる。
【0072】
また、クエリの移動には、複数のケースが考えられる。図10Aは、クエリの移動の一例を示す図である。図10Aに示すように、クエリ毎に処理対象とするデータが異なる場合、クエリを移動させ、移動先で処理対象とするデータを処理させる。例えば、処理を分散させる場合、各クエリをそれぞれ異なるVMに移動させて、各VMによりデータを処理させる。一方、処理負荷が低い場合などには、クエリをより少ない台数のVM、例えば、1台のVMに移動させ、1台のVMによりデータを処理させる。
【0073】
一方、クエリは、処理対象とするデータが複数である場合がある。例えば、データとして証券コードおよび株価がVMに配信され、クエリが証券コード毎に株価の一定期間の移動平均を求める処理を行う場合がある。図10Bは、クエリの移動の他の一例を示す図である。図10Bの例では、図10Bの左側に示すように、クエリは、データ1〜nが処理対象である。この場合、処理対象のデータ1〜n毎に、クエリを移動させる。例えば、処理の分散を行う場合、クエリを複製して他のVMに移動させ、処理対象のデータ1〜nをそれぞれ異なるVMにより処理させる。一方、処理負荷が低い場合などには、クエリを1台のVMに配置させ、処理対象のデータ1〜nを1台のVMにより処理させる。
【0074】
ここで、本実施例では、複数のクエリのそれぞれを複数のグループに分け、グループ毎に移動する。また、ルーティングテーブル50は、グループ毎に格納先を管理する。図11は、クエリのグループ分けの一例を示す図である。例えば、本実施例では、処理対象とする各データに、データを識別するキーが所定ビットの整数データとして含まれ、それぞれのクエリに処理の条件ごとに異なるキーが設定されている。この場合、処理の条件ごとに設定されたキーを用いて、キーから値を算出する所定の関数、例えば、ハッシュ関数によりハッシュ値を算出して、ハッシュ値が同一となるクエリを同一のグループとしてグループ分けする。例えば、処理の条件に設定されたキーを用いて、ハッシュ関数により算出されたハッシュ値が同一となるクエリを同一のグループとして静的にグループを分ける。図11の例は、クエリをグループ分けした各グループを「V−Node」とする場合を示す。そして、本実施例では、V−Node毎に、クエリをVMに配置する。なお、本実施例では、複数のクエリのそれぞれが異なるグループに分けられることとする。
【0075】
ルーティングテーブル50には、V−Node毎に配置先が登録される。例えば、ルーティングテーブル50は、V−Nodeの識別子が登録される項目と、配置先のVMのIPアドレスが登録される項目とを有する。
【0076】
サーバ20および各VMのエンジン51は、キーに基づいてクエリの配置先を判別する。例えば、サーバ20は、受信したデータに含まれるキーを用いてハッシュ関数によりハッシュ値を算出する。そして、サーバ20は、ルーティングテーブル50からV−Nodeの識別子が登録される項目に、算出したハッシュ値が登録されたレコードを検索する。続いて、サーバ20は、検索の結果、レコードが得られた場合、得られたレコードの配置先のVMのIPアドレスが登録される項目に登録されたIPアドレスを取得する。そして、サーバ20は、取得したIPアドレスを用いて、VMと通信を行う。
【0077】
上述したように、各VMは、負荷情報を管理サーバ40へ送信する。そして、後述するように、管理サーバ40が、各VMから送信された負荷情報に基づき、クエリを移動させるための指示(移動指示)を送信する。なお、本実施例では、V−Node単位でクエリの移動が行われる。管理サーバ40は、移動先のVM31のIPアドレスおよび移動対象のV−Nodeの識別子を含む移動指示を移動元のVMに送信する。移動指示を受信したVMのエンジン51は、移動対象のV−Nodeに属するクエリや当該クエリに付随するデータなどの処理要素をシリアライズして移動先のVMへ送信する。
【0078】
移動先のVMのエンジン51は、送信されたデータをデシリアライズして復元し、復元されたクエリの駆動を開始する。また、エンジン51は、ルーティングテーブル50の移動したV−Nodeに属するクエリの格納先を自身が動作するVMのIPアドレスに更新する。そして、エンジン51は、他のVM、サーバ20および管理サーバ40に対して移動対象のV−Nodeの識別子および移動先のVMのIPアドレスを含むルーティングテーブル更新指示を通知する。なお、管理サーバ40は、移動元および移動先のVMのIPアドレス、並びに、移動された処理要素の識別子など移動に関する各情報を把握しているため、管理サーバ40が、ルーティングテーブル更新指示を送信することもできる。
【0079】
各VM、サーバ20および管理サーバ40は、ルーティングテーブル更新指示が通知された場合、次のような処理を行う。すなわち、各VM、サーバ20および管理サーバ40は、ルーティングテーブル50の通知された移動対象のV−Nodeに属するクエリの格納先を、通知されたルーティングテーブル更新指示に含まれる移動先のVMのIPアドレスに更新する。
【0080】
図12は、管理サーバの構成の一例を示す図である。図12に示すように、管理サーバ40は、入力部41と、出力部42と、通信部43と、記憶部44と、制御部45とを有する。
【0081】
入力部41は、各種情報を制御部45に入力する。例えば、入力部41は、ユーザからの各種指示を受け付けて、受け付けた指示を制御部45に入力する。入力部41のデバイスの一例としては、マウスやキーボードなどのユーザの操作を受け付けるデバイスなどが挙げられる。
【0082】
出力部42は、各種の情報を出力する。例えば、出力部42は、VMの稼働状態などを表示する。出力部42のデバイスの一例としては、液晶ディスプレイなどが挙げられる。
【0083】
通信部43は、各装置間の通信を行うためのインターフェースである。例えば、通信部43は、ネットワーク99に接続される。これにより、管理サーバ40と、サーバ20、各VMとが通信を行うことができる。例えば、通信部43は、ネットワーク99を介して、VMから通信回数情報37を受信した場合には、受信した通信回数情報37を制御部45に送信する。また、通信部43は、ネットワーク99を介して、VMから負荷情報38を受信した場合には、受信した負荷情報38を制御部45へ送信する。
【0084】
記憶部44は、各種情報を記憶する。例えば、記憶部44は、上述したルーティングテーブル50、通信回数情報37、負荷情報38、移動指示リスト46を記憶する。
【0085】
通信回数情報37は、VMから送信された情報であり、後述の取得部45bによりVMから取得され、記憶部44に格納される。負荷情報38は、VMから送信された情報であり、後述の取得部45bによりVMから取得され、記憶部44に格納される。
【0086】
移動指示リスト46には、移動対象の処理要素の識別子、移動元のVMのIPアドレス、移動先のVMのIPアドレスが後述の決定部45dにより登録される。図13は、移動指示リストのデータ構造の一例を示す図である。図13の例では、移動指示リスト46は、移動対象の処理要素の識別子が登録される「処理要素」の項目46a、移動元のVMのIPアドレスが登録される「移動元」の項目46b、移動先のVMのIPアドレスが登録される「移動先」の項目46cを有する。
【0087】
記憶部44は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部44は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
【0088】
制御部45は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図12に示すように、制御部45は、初期配置部45aと、取得部45bと、特定部45cと、決定部45dと、配置制御部45eとを有する。
【0089】
初期配置部45aは、クエリグラフに基づいて、既知の技術を用いて、複数のVMにクエリを配置する。また、初期配置部45aは、クエリグラフを各VMに送信する。また、初期配置部45aは、各VMに、各VMが実行する処理が設定されたクエリを通知する。また、初期配置部45aは、各VMに、処理の処理結果の送信先のVMのIPアドレスを送信する。
【0090】
取得部45bは、各種情報を取得する。例えば、取得部45bは、複数のVMにおいて処理が実行された複数のクエリについて、クエリ間の通信回数を示す通信回数情報37を取得する。
【0091】
具体例を挙げて説明する。取得部45bは、通信部43を介して、VMから送信された通信回数情報37を受信することで、通信回数情報37を取得する。通信回数情報37を取得した場合には、取得部45bは、取得した通信回数情報37を記憶部44に格納する。また、取得部45bは、通信部43を介して、VMから送信された負荷情報38を受信することで、負荷情報38を取得する。負荷情報38を取得した場合には、取得部45bは、取得した負荷情報38を記憶部44に格納する。また、取得部45bは、記憶部44に記憶された通信回数情報37、負荷情報38を取得する。
【0092】
特定部45cは、各種情報を特定する。例えば、特定部45cは、取得部45bにより取得された通信回数情報が示す通信回数に基づいて、クエリの組を特定する。
【0093】
具体例を挙げて説明する。まず、特定部45cは、取得部45bにより取得された負荷情報38を用いて、VMごとに、処理要素ごとの負荷の和を算出し、各VMの負荷を算出する。続いて、特定部45cは、算出した各VMの負荷を用いて、全VMの負荷の平均値Aveを算出する。その後、特定部45cは、負荷が閾値α以上のVMがあるか否かを判定する。
【0094】
図14は、実施例3に係る管理サーバが実行する処理の一例を説明するための図である。図14の例は、5つのVM31a〜35aのそれぞれの負荷を示す。横軸は、VMを示し、縦軸は、VMの負荷を示す。また、VMの中の「High」は、負荷が第一の閾値を超えた高負荷である処理要素を示す。また、VMの中の「Middle」は、負荷が第一の閾値以下で、かつ、第一の閾値より小さい第二の閾値を超えた中負荷である処理要素を示す。また、VMの中の「Low」は、負荷が第二の閾値以下である小負荷である処理要素を示す。図14の例では、閾値αは、上限の負荷の警戒値である。また、図14の例では、閾値βは、閾値αよりも小さく、下限の負荷の警戒値である。図14の例では、VM31aの負荷が閾値αを超えているため、特定部45cは、負荷が閾値α以上のVMがあると判定する。
【0095】
負荷が閾値α以上のVMがある場合には、特定部45cは、負荷が閾値α以上の全てのVMを移動元のVMの候補とする。例えば、図14の例では、特定部45cは、負荷が閾値α以上のVM31aを移動元のVMの候補とする。
【0096】
そして、特定部45cは、負荷が平均値Ave未満の全てのVMを移動先のVMの候補とする。例えば、図14の例では、負荷が平均値Ave未満のVM35aを移動先のVMの候補とする。
【0097】
そして、特定部45cは、下記の処理で、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したか否かを判定する。検証していない場合には、特定部45cは、下記の処理で、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたVMに移動することが移動指示リスト46に登録済みであるか否かを判定する。
【0098】
登録されていない場合には、特定部45cは、下記の処理で、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがない場合には、特定部45cは、移動先のVMの候補の全VMを未選択とする。そして、特定部45cは、以降の処理を行う。一方、未選択のVMがある場合には、特定部45cは、移動元のVMの候補の中から、未選択のVMを1つ選択する。
【0099】
そして、特定部45cは、下記の処理で、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがない場合には、特定部45cは、移動先のVMの候補の全VMを未選択とする。そして、特定部45cは、上述した、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したか否かの判定を再び行う。そして、特定部45cは、以降の処理を行う。一方、未選択のVMがある場合には、特定部45cは、移動先のVMの候補の中から、未選択のVMを1つ選択する。
【0100】
続いて、特定部45cは、下記の処理で、クエリの組が特定されたか否かを判定する。クエリの組が特定されていない場合には、特定部45cは、取得部45bにより取得された通信回数情報37を用いて、通信回数が最大のクエリの組を特定する。例えば、図7Dの例に示す通信回数情報37を用いた場合には、特定部45cは、通信回数が10回であるクエリQ1とクエリQ3との組を選択する。
【0101】
そして、特定部45cは、特定した組の数は複数であるか否かを判定する。複数である場合には、予め管理サーバ40に与えられたクエリグラフを参照し、特定した組ごとに、クエリ間の距離を算出する。例えば、図5の例に示すクエリグラフ70において、特定部45cがクエリQ1とクエリQ2との組、および、クエリQ1とクエリQ3との組の2つの組を特定した場合について説明する。この場合、特定部45cは、クエリグラフ70上で、クエリQ1とクエリQ2との距離、および、クエリQ1とクエリQ3との距離を算出する。なお、図5の例では、クエリグラフ70上で、クエリQ1とクエリQ2との距離のほうが、クエリQ1とクエリQ3との距離よりも小さい。すなわち、クエリQ1とクエリQ2との距離のほうが、クエリQ1とクエリQ3との距離よりも近い。
【0102】
続いて、特定部45cは、算出した距離が最も近いクエリの組の数が複数であるか否かを判定する。図5の例では、特定部45cは、算出した距離が最も近いクエリQ1とクエリQ2との組の数は、1つなので、算出した距離が最も近いクエリの組の数が複数ではないと判定する。
【0103】
算出した距離が最も近いクエリの組の数が複数である場合には、特定部45cは、算出した距離が最も近いクエリの複数の組のうち、クエリを含む処理要素の負荷の合計が最も小さいクエリの組を特定する。また、算出した距離が最も近いクエリの組の数が複数でない場合には、特定部45cは、特定した複数の組の中から、距離が最も近いクエリの組を特定する。
【0104】
決定部45dは、各種情報を決定する。例えば、決定部45dは、特定部45cにより特定されたクエリの組を同一のVMに配置することを決定する。
【0105】
具体例を挙げて説明する。まず、決定部45dは、特定部45cにより特定されたクエリの組について、一方のクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のVMに配置されたクエリであるか否かを判定する。一方のクエリが、新たに選択された移動元のVMに配置されたクエリでないか、または、他方のクエリが、新たに選択された移動先のVMに配置されたクエリでない場合には、上述した、移動先のVMの候補のうち、未選択のVMがあるか否かの判定を行う。そして、以降の処理を行う。
【0106】
一方、あるクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他のクエリが、新たに選択された移動先のVMに配置されたクエリである場合には、決定部45dは、新たに選択された移動先のVMに、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素を移動させた場合の負荷Yを算出する。すなわち、決定部45dは、移動先のVMの負荷に、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素の負荷を加えた値を、負荷Yとして算出する。
【0107】
そして、決定部45dは、算出した負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きいか否かを判定する。算出した負荷Yの値が平均値Ave以上であるか、または、負荷Yの値が閾値β以下である場合には、上述した、移動先のVMの候補のうち、未選択のVMがあるか否かの判定を行う。そして、以降の処理を行う。一方、負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きい場合には、決定部45dは、次のような処理を行う。すなわち、決定部45dは、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素を、移動元のVMから、新たに選択された移動先のVMへ移動することを決定する。
【0108】
このように、本実施例に係る管理サーバ40は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。よって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ40によれば、通信回数の増加を抑制することができる。
【0109】
また、本実施例に係る管理サーバ40は、複数のクエリと呼ばれる処理要求文を連携してイベントを実行する処理要求文が1以上配置された複数の装置が実行した処理要求文間の通信回数を示す情報を取得する。そして、管理サーバ40は、通信回数に基づいて、処理要求文の組を特定する。続いて、管理サーバ40は、特定された処理要求文の組を同一の装置に配置するための装置を決定する。よって、この決定に基づき2つの処理要求文が同一のVMへ配置された場合には、2つの処理要求文が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ40によれば、通信回数の増加を抑制することができる。
【0110】
また、本実施例に係る管理サーバ40によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0111】
また、本実施例に係る管理サーバ40によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0112】
そして、決定部45dは、移動が決定された処理要素の識別子と、移動元のVMのIPアドレスと、移動先のVMのIPアドレスとを対応付けて、移動指示リスト46に登録することにより、移動指示リスト46を更新する。続いて、決定部45dは、移動が決定された処理要素の移動元のVMを、移動元のVMの候補から外すとともに、移動先のVMを、移動先のVMの候補から外す。
【0113】
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とする。その後、決定部45dは、上述した、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたVMに移動することが移動指示リスト46に登録済みであるか否かの判定を再び行い、そして、以降の処理を行う。
【0114】
また、特定部45cにより、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したと判定された場合には、決定部45dは、移動元のVMの候補の全VMを未選択とする。そして、決定部45dは、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがある場合には、移動元のVMの候補の中から、未選択のVMを1つ選択する。
【0115】
その後、決定部45dは、変数Nに「1」を設定する。そして、決定部45dは、新たに選択された移動元のVMの処理要素のうち、N番目に負荷が高い処理要素を選択する。N=1である場合、図14の例では、決定部45dは、VM31aの処理要素のうち、1番目に負荷が高い一番上の「High」の処理要素を選択する。
【0116】
続いて、決定部45dは、下記の処理で、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがない場合には、決定部45dは、上述した、移動元のVMの候補のうち未選択のVMがあるか否かの判定を再び行い、以降の処理を続ける。一方、未選択のVMがある場合には、決定部45dは、移動先のVMの候補の中から、未選択のVMを1つ選択する。
【0117】
その後、決定部45dは、新たに選択された移動先のVMに、新たに選択されたN番目に負荷が高い処理要素を移動させた場合の負荷Y´を算出する。すなわち、決定部45dは、移動先のVMの負荷に、選択されたN番目に負荷が高い処理要素の負荷を加えた値を、負荷Y´として算出する。例えば、N=1である場合、図14の例では、決定部45dは、VM35aの負荷に、VM31aの処理要素のうち一番上の「High」の処理要素の負荷を加えた値を、負荷Y´として算出する。
【0118】
そして、決定部45dは、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きいか否かを判定する。算出した負荷Y´の値が平均値Ave以上であるか、または、負荷Y´の値が閾値β以下である場合には、決定部45dは、変数Nの値を1つインクリメントする。その後、決定部45dは、変数Nの値が、新たに選択された移動元のVMの処理要素の数Kを超えたか否かを判定する。変数Nの値が、処理要素の数Kを超えていない場合には、決定部45dは、新たに選択された移動元のVMの処理要素のうち、N番目に負荷が高い処理要素を特定する。N=2である場合、図14の例では、決定部45dは、VM31aの処理要素のうち、2番目に負荷が高い一番下の「High」の処理要素を選択する。そして、決定部45dは、上述した、新たに選択された移動先のVMに、新たに選択されたN番目に負荷が高い処理要素を移動させた場合の負荷Yを算出する処理を再び行い、以降の処理を続ける。
【0119】
一方、変数Nの値が、処理要素の数Kを超えた場合には、決定部45dは、上述した、移動先のVMの候補のうち未選択のVMがあるか否かの判定を再び行い、以降の処理を続ける。
【0120】
また、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きい場合には、決定部45dは、次のような判定を行う。すなわち、決定部45dは、新たに選択されたN番目に負荷が高い処理要素を、新たに選択された移動元のVMから、新たに選択された移動先のVMへ移動することを決定する。
【0121】
このように、本実施例に係る管理サーバ40によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0122】
そして、決定部45dは、移動が決定された処理要素の識別子と、移動元のVMのIPアドレスと、移動先のVMのIPアドレスとを対応付けて、移動指示リスト46に登録することにより、移動指示リスト46を更新する。続いて、決定部45dは、移動が決定された処理要素の移動元のVMを、移動元のVMの候補から外すとともに、移動先のVMを、移動先のVMの候補から外す。
【0123】
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とする。その後、決定部45dは、上述した、移動元のVMの候補のうち未選択のVMがあるか否かの判定を再び行い、以降の処理を続ける。
【0124】
配置制御部45eは、処理要素の配置を制御する。例えば、配置制御部45eは、決定部45dによる処理要素の配置の決定結果に基づいて、特定部45cにより特定されたクエリの組が同一のVMに配置されるように制御する。
【0125】
具体例を挙げて説明する。配置制御部45eは、まず、記憶部44から移動指示リスト46を取得する。そして、配置制御部45eは、前回取得した内容と比較して、移動指示リスト46に、新たに追加された内容があるか否かを判定する。新たに追加された内容がある場合には、配置制御部45eは、新たに追加されたレコードの「移動元」の項目に登録されたIPアドレスを用いて、次のような処理を行う。すなわち、配置制御部45eは、移動元に、レコードの「処理要素」の項目に登録された識別子が示す処理要素を、レコードの「移動先」の項目に登録されたIPアドレスが示す移動先に移動させる指示(移動指示)を送信する。これにより、移動元のVMは、移動先のVMに移動対象の処理要素を送信して、処理要素を移動させる。例えば、新たに追加されたレコードに、「移動元」および「移動先」の各項目に、特定したクエリの組のそれぞれが配置されたVMのIPアドレスが登録されている場合には、配置制御部45eは、クエリの組を1つのVMに配置するように制御することができる。続いて、配置制御部45eは、VM、サーバ20および管理サーバ40に対して移動対象のV−Nodeの識別子および移動先のVMのIPアドレスを含むルーティングテーブル更新指示を送信する。
【0126】
制御部45は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。
【0127】
次に、本実施例に係る管理サーバ40が実行する各処理の流れを説明する。図15は、取得処理の手順を示すフローチャートである。この取得処理は、例えば、VMからのデータを受信したタイミングで実行される。
【0128】
図15に示すように、取得部45bは、受信したデータが、通信回数情報37であるか否かを判定する(S101)。通信回数情報37である場合(S101肯定)には、取得部45bは、受信した通信回数情報37を取得し、取得した通信回数情報37を記憶部44に格納し(S102)、処理を終了する。一方、通信回数情報37でない場合(S101否定)には、取得部45bは、負荷情報38であるか否かを判定する(S103)。負荷情報38である場合(S103肯定)には、取得部45bは、受信した負荷情報38を取得し、取得した負荷情報38を記憶部44に格納し(S104)、処理を終了する。また、負荷情報38でない場合(S103否定)にも、処理を終了する。
【0129】
図16〜18は、決定処理の手順を示すフローチャートである。この決定処理は、所定間隔ごとに実行される。
【0130】
図16〜18に示すように、取得部45bは、記憶部44から負荷情報38を取得する(S201)。特定部45cは、取得部45bにより取得された負荷情報38を用いて、VMごとに、処理要素ごとの負荷の和を算出し、各VMの負荷を算出する(S202)。続いて、特定部45cは、算出した各VMの負荷を用いて、全VMの負荷の平均値Aveを算出する(S203)。その後、特定部45cは、負荷が閾値α以上のVMがあるか否かを判定する(S204)。
【0131】
負荷が閾値α以上のVMがない場合(S204否定)には、処理を終了する。一方、負荷が閾値α以上のVMがある場合(S204肯定)には、特定部45cは、負荷が閾値α以上の全てのVMを移動元のVMの候補とする(S205)。
【0132】
そして、特定部45cは、負荷が平均値Ave未満の全てのVMを移動先のVMの候補とする(S206)。続いて、特定部45cは、下記の処理で、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したか否かを判定する(S207)。検証していない場合(S207否定)には、特定部45cは、下記のS225の処理で、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたVMに移動することが移動指示リスト46に登録済みであるか否かを判定する(S208)。
【0133】
登録されている場合(S208肯定)には、S229へ進む。登録されていない場合(S208否定)には、特定部45cは、下記のS210の処理において、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する(S209)。未選択のVMがない場合(S209否定)には、S212へ進む。一方、未選択のVMがある場合(S209肯定)には、特定部45cは、移動元のVMの候補の中から、未選択のVMを1つ選択する(S210)。
【0134】
そして、特定部45cは、下記のS212の処理において、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する(S211)。未選択のVMがない場合(S211否定)には、特定部45cは、移動先のVMの候補の全VMを未選択とする(S212)。そして、S207へ戻る。一方、未選択のVMがある場合(S211肯定)には、特定部45cは、移動元のVMの候補の中から、未選択のVMを1つ選択する(S213)。
【0135】
続いて、特定部45cは、下記のS216、S220、S221のいずれかの処理で、クエリの組が特定されたか否かを判定する(S214)。クエリの組が特定された場合(S214肯定)には、S222へ進む。一方、クエリの組が特定されていない場合(S214否定)には、取得部45bは、記憶部44から通信回数情報37を取得する(S215)。そして、特定部45cは、取得部45bにより取得された通信回数情報37を用いて、通信回数が最大のクエリの組を特定する(S216)。
【0136】
続いて、特定部45cは、特定した組の数は複数であるか否かを判定する(S217)。複数でない場合(S217否定)には、S222へ進む。一方、複数である場合(S217肯定)には、特定部45cは、予め管理サーバ40に与えられたクエリグラフを参照し、特定した組ごとに、クエリ間の距離を算出する(S218)。
【0137】
続いて、特定部45cは、算出した距離が最も近いクエリの組の数が複数であるか否かを判定する(S219)。
【0138】
算出した距離が最も近いクエリの組の数が複数である場合(S219肯定)には、特定部45cは、算出した距離が最も近いクエリの複数の組のうち、クエリを含む処理要素の負荷の合計が最も小さいクエリの組を特定し(S221)、S222へ進む。また、算出した距離が最も近いクエリの組の数が複数でない場合(S219否定)には、特定部45cは、特定した複数の組の中から、距離が最も近いクエリの組を特定し(S220)、S222へ進む。
【0139】
決定部45dは、特定部45cにより特定されたクエリの組について、一方のクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のVMに配置されたクエリであるか否かを判定する(S222)。一方のクエリが、新たに選択された移動元のVMに配置されたクエリでないか、または、他方のクエリが、新たに選択された移動先のVMに配置されたクエリでない場合(S222否定)には、S211に戻る。
【0140】
また、一方のクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のVMに配置されたクエリである場合(S222肯定)には、決定部45dは、次のような処理を行う。すなわち、決定部45dは、新たに選択された移動先のVMに、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素を移動させた場合の負荷Yを算出する(S223)。
【0141】
そして、決定部45dは、算出した負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きいか否かを判定する(S224)。算出した負荷Yの値が平均値Ave以上であるか、または、負荷Yの値が閾値β以下である場合(S224否定)には、S211に戻る。一方、負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きい場合(S224肯定)には、決定部45dは、次のような処理を行う。すなわち、決定部45dは、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素を、移動元のVMから、新たに選択された移動先のVMへ移動することを決定し、移動指示リスト46を更新する(S225)。続いて、決定部45dは、移動が決定された処理要素の移動元のVMを、移動元のVMの候補から外すとともに、移動先のVMを、移動先のVMの候補から外す(S226)。
【0142】
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とし(S227)、S208へ戻る。
【0143】
また、特定部45cにより、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したと判定された場合(S207肯定)には、決定部45dは、次のような処理を行う。すなわち、決定部45dは、移動元のVMの候補の全VMを未選択とする(S228)。そして、決定部45dは、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する(S229)。未選択のVMがない場合(S229否定)には、処理を終了する。一方、未選択のVMがある場合(S229肯定)には、移動元のVMの候補の中から、未選択のVMを1つ選択する(S230)。
【0144】
その後、決定部45dは、変数Nに「1」を設定する(S231)。そして、決定部45dは、新たに選択された移動元のVMの処理要素のうち、N番目に負荷が高い処理要素を選択する(S232)。
【0145】
続いて、決定部45dは、下記のS234の処理で、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する(S233)。未選択のVMがない場合(S233否定)には、S229へ戻る。一方、未選択のVMがある場合(S233肯定)には、決定部45dは、移動先のVMの候補の中から、未選択のVMを1つ選択する(S234)。
【0146】
その後、決定部45dは、新たに選択された移動先のVMに、新たに選択されたN番目に負荷が高い処理要素を移動させた場合の負荷Y´を算出する(S235)。
【0147】
そして、決定部45dは、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きいか否かを判定する(S236)。算出した負荷Y´の値が平均値Ave以上であるか、または、負荷Y´の値が閾値β以下である場合(S236否定)には、決定部45dは、変数Nの値を1つインクリメントする(S237)。その後、決定部45dは、変数Nの値が、新たに選択された移動元のVMの処理要素の数Kを超えたか否かを判定する(S238)。変数Nの値が、処理要素の数Kを超えていない場合(S238否定)には、決定部45dは、新たに選択された移動元のVMの処理要素のうち、N番目に負荷が高い処理要素を特定し(S239)、S235へ戻る。
【0148】
一方、変数Nの値が、処理要素の数Kを超えた場合(S238肯定)には、S233へ戻る。
【0149】
また、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きい場合(S236肯定)には、決定部45dは、次のような判定を行う。すなわち、決定部45dは、新たに選択されたN番目に負荷が高い処理要素を、新たに選択された移動元のVMから、新たに選択された移動先のVMへ移動することを決定し、移動指示リスト46を更新する(S240)。続いて、決定部45dは、移動が決定された処理要素の移動元のVMを、移動元のVMの候補から外すとともに、移動先のVMを、移動先のVMの候補から外す(S241)。
【0150】
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とし(S242)、S229へ戻る。
【0151】
図19は、配置制御処理の手順を示すフローチャートである。この配置制御処理は、所定間隔ごとに実行される。
【0152】
図19に示すように、配置制御部45eは、記憶部44から移動指示リスト46を取得する(S301)。そして、配置制御部45eは、前回取得した内容と比較して、移動指示リスト46に、新たに追加された内容があるか否かを判定する(S302)。新たに追加された内容がある場合(S302肯定)には、配置制御部45eは、新たに追加されたレコードの「移動元」の項目に登録されたIPアドレスを用いて、次のような処理を行う。すなわち、配置制御部45eは、移動元に、レコードの「処理要素」の項目に登録された識別子が示す処理要素を、レコードの「移動先」の項目に登録されたIPアドレスが示す移動先に移動させる指示(移動指示)を送信する(S303)。続いて、配置制御部45eは、VM、サーバ20および管理サーバ40に対して移動対象のV−Nodeの識別子および移動先のVMのIPアドレスを含むルーティングテーブル更新指示を送信し(S304)、処理を終了する。また、新たに追加された内容がない場合(S302否定)にも、処理を終了する。
【0153】
上述してきたように、本実施例に係る管理サーバ40は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ40によれば、通信回数の増加を抑制することができる。
【0154】
また、本実施例に係る管理サーバ40によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0155】
また、本実施例に係る管理サーバ40によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【実施例4】
【0156】
実施例4について説明する。実施例4では、全VMの処理要素の負荷の平均値が閾値αを超えた場合には、クエリを配置させるVMの台数を増やす場合について説明する。
【0157】
図20は、実施例4に係る管理サーバの構成を示すブロック図である。図20に示すように、管理サーバ80の制御部45は、図12に示す実施例3に係る制御部45に比較して、特定部45c、決定部45dに代えて特定部81c、決定部81dを有する点が異なる。なお、以下では、上記の実施例3などと同様の機能を果たす各部については図12などと同様の符号を付し、その説明は省略する。
【0158】
図21は、実施例4に係る管理サーバが実行する処理の一例を説明するための図である。図21の例は、5つのVM31a〜35aのそれぞれの負荷を示す。横軸は、VMを示し、縦軸は、VMの負荷を示す。また、VMの中の「High」は、負荷が第一の閾値を超えた高負荷である処理要素を示す。また、VMの中の「Middle」は、負荷が第一の閾値以下で、かつ、第一の閾値より小さい第二の閾値を超えた中負荷である処理要素を示す。また、VMの中の「Low」は、負荷が第二の閾値以下である小負荷である処理要素を示す。図21の例では、閾値αは、上限の負荷の警戒値である。また、図21の例では、閾値βは、閾値αよりも小さく、下限の負荷の警戒値である。図21の例では、5つのVMの負荷の平均値Aveが閾値αを超えている。そこで、図21の例では、VMの台数を2台(VM31b、VM32b)増やして、増やした2台のVM31b,32bに、処理要素を移動させて、合計7台のVMの負荷の平均値Aveが、予め定められた値WCとなるように、管理サーバ80は制御する。
【0159】
特定部81cは、実施例3に係る特定部45cと比較して、下記の点が異なる。まず、特定部81cは、全VMの負荷の合計Tを算出する。また、特定部45cでは、負荷が閾値α以上のVMがあるか否かの判定を行っていたが、特定部81cは、この判定に代えて、平均値Aveが閾値α以上であるか否かの判定を行う。例えば、図21の例では、5台のVMの負荷の平均値Aveが閾値αを超えているので、特定部81cは、この場合には、平均値Aveが閾値α以上であると判定する。
【0160】
また、特定部81cは、平均値Aveが閾値α以上である場合には、算出した全VMの負荷の合計Tを、予め定められた値WCで除した値(T/WC)を算出する。なお、値(T/WC)は、平均のVMの負荷をWCとする場合のVMの台数を示す。そして、特定部81cは、負荷がWCの場合におけるVMの台数(T/WC)から、現在のVMの台数Sを減じた値ΔS(=(T/WC)−S)を算出して、増加させるVMの台数を算出する。
【0161】
また、特定部45cでは、負荷が平均値Ave未満の全てのVMを移動先のVMの候補とするが、特定部81cは、このような移動先のVMの候補の選出に代えて、ΔS分の台数の新規の全てのVMを移動先のVMの候補とする。例えば、図21の例では、特定部81cは、ΔS=2(7−5)台分の台数の新規の全てのVM31b,32bを移動先のVMの候補とする。
【0162】
決定部81dは、実施例3に係る決定部45dと比較して、下記の点が異なる。決定部45dでは、算出した負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きいか否かの判定を行うが、決定部81dは、この判定に代えて、次のような処理を行う。すなわち、決定部81dは、算出した負荷Yの値がWCより小さく、かつ、負荷Yの値が閾値βより大きいか否かを判定する。また、決定部45dでは、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きいか否かの判定を行うが、決定部81dは、この判定に代えて、次のような処理を行う。すなわち、決定部81dは、算出した負荷Y´の値がWCより小さく、かつ、負荷Y´の値が閾値βより大きいか否かを判定する。これにより、移動先のVMにおいて、処理要素が移動された場合の負荷を、WCより小さく、かつ、閾値βより大きくすることができる。また、VMの平均の負荷がWCとなるようなVMの台数を決定することができる。
【0163】
また、本実施例に係る管理サーバ80は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ80によれば、通信回数の増加を抑制することができる。
【0164】
また、本実施例に係る管理サーバ80によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0165】
また、本実施例に係る管理サーバ80によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0166】
次に、本実施例に係る管理サーバ80が実行する各処理の流れを説明する。取得処理、配置制御処理については、実施例3と同様であるので説明を省略し、実施例4に係る決定処理について説明する。図22〜24は、実施例4に係る決定処理の手順を示すフローチャートである。この決定処理は、所定間隔ごとに実行される。なお、実施例3と同様の処理については、同一の符号を付して説明する。
【0167】
図22〜24に示すように、特定部81cは、S202の次に、全VMの負荷の合計Tを算出する(S401)。また、特定部81cは、S203の次に、S204に代えて、平均値Aveが閾値α以上であるか否かを判定する(S402)。
【0168】
平均値Aveが閾値α以上でない場合(S402否定)には、処理を終了する。一方、平均値Aveが閾値α以上である場合(S402肯定)には、特定部81cは、算出した全VMの負荷の合計Tを、予め定められた値WCで除した値(T/WC)を算出する(S403)。そして、特定部81cは、負荷がWCの場合におけるVMの台数(T/WC)から、現在のVMの台数Sを減じた値ΔS(=(T/WC)−S)を算出して、増加させるVMの台数を算出する(S404)。
【0169】
また、特定部81cは、S205の次に、S206に代えて、ΔS分の台数の新規の全てのVMを移動先のVMの候補とする(S405)。
【0170】
また、決定部81dは、S224に代えて、算出した負荷Yの値がWCより小さく、かつ、負荷Yの値が閾値βより大きいか否かを判定する(S406)。また、決定部81dは、S236に代えて、算出した負荷Y´の値がWCより小さく、かつ、負荷Y´の値が閾値βより大きいか否かを判定する(S407)。
【0171】
上述してきたように、本実施例に係る管理サーバ80は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ80によれば、通信回数の増加を抑制することができる。
【0172】
また、本実施例に係る管理サーバ80によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0173】
また、本実施例に係る管理サーバ80によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0174】
また、本実施例に係る管理サーバ80によれば、移動先のVMにおいて、処理要素が移動された場合の負荷を、WCより小さく、かつ、閾値βより大きくすることができる。
【0175】
また、本実施例に係る管理サーバ80によれば、VMの平均の負荷がWCとなるようなVMの台数を決定することができる。
【実施例5】
【0176】
実施例5について説明する。実施例5では、全VMの処理要素の負荷の平均値が閾値βより小さい場合には、クエリを配置させるVMの台数を減らす場合について説明する。
【0177】
図25は、実施例5に係る管理サーバの構成を示すブロック図である。図25に示すように、管理サーバ82の制御部45は、図20に示す実施例4に係る制御部45に比較して、特定部81c、決定部81dに代えて特定部83c、決定部83dを有する点が異なる。なお、以下では、上記の各実施例と同様の機能を果たす各部については同様の符号を付し、その説明を省略する。
【0178】
図26は、実施例5に係る管理サーバが実行する処理の一例を説明するための図である。図26の例は、5つのVM31a〜35aのそれぞれの負荷を示す。横軸は、VMを示し、縦軸は、VMの負荷を示す。また、VMの中の「High」は、負荷が第一の閾値を超えた高負荷である処理要素を示す。また、VMの中の「Middle」は、負荷が第一の閾値以下で、かつ、第一の閾値より小さい第二の閾値を超えた中負荷である処理要素を示す。また、VMの中の「Low」は、負荷が第二の閾値以下である小負荷である処理要素を示す。図26の例では、閾値αは、上限の負荷の警戒値である。また、図26の例では、閾値βは、閾値αよりも小さく、下限の負荷の警戒値である。図26の例では、5つのVMの負荷の平均値Aveが閾値βよりも小さい。そこで、図26の例では、まず、クエリを配置させるVMの台数を2台(VM34a、VM35a)減らす。そして、残ったVMのうち負荷がWC未満の全てのVM(VM32a、VM33a)に、減らした2台のVM34a,35aの処理要素を移動させて、合計3台のVMの負荷の平均値Aveが、予め定められた値WCとなるように、管理サーバ82は制御する。
【0179】
特定部83cは、実施例4に係る特定部81cと比較して、下記の点が異なる。まず、特定部81cでは、平均値Aveが閾値α以上であるか否かの判定を行われていたが、特定部83cは、平均値Aveが閾値βより小さいか否かを判定する。例えば、図26の例では、5台のVMの負荷の平均値Aveが閾値βより小さいので、特定部83cは、この場合には、平均値Aveが閾値βより小さいと判定する。
【0180】
また、特定部81cでは、ΔS(=(T/WC)−S)を算出して、増加させるVMの台数を算出するが、特定部83cは、ΔSの算出に代えて、減らすVMの台数ΔS´(=S−(T/WC))を算出する。
【0181】
また、特定部81cでは、負荷が閾値α以上の全てのVMを移動元のVMの候補とするが、特定部83cは、全てのVMのうち、負荷が低い方からΔS´の値が示す台数分のVMを移動元のVMの候補とする。例えば、図26の例では、特定部83cは、ΔS´=2(5−3)台分の台数の負荷が低いVM34a,35aを移動元のVMの候補とする。
【0182】
また、特定部81cでは、ΔSの値が示す台数分の台数の新規の全てのVMを移動先の候補とするが、特定部83cは、減らす対象でないVM、すなわち、残りのVMのうち、負荷がWC未満の全てのVMを移動先のVMの候補とする。例えば、図26の例では、特定部83cは、残りのVM31a〜33aのうち、負荷がWC未満の全てのVM32a、VM33aを移動元のVMの候補とする。これにより、VMの平均の負荷がWCとなるようなVMの台数を決定することができる。また、移動先のVMにおいて、処理要素が移動された場合の負荷を、WCより小さく、かつ、閾値βより大きくすることができる。
【0183】
また、本実施例に係る管理サーバ82は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ82によれば、通信回数の増加を抑制することができる。
【0184】
また、本実施例に係る管理サーバ82によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0185】
また、本実施例に係る管理サーバ82によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0186】
次に、本実施例に係る管理サーバ82が実行する各処理の流れを説明する。取得処理、配置制御処理については、実施例4と同様であるので説明を省略し、実施例5に係る決定処理について説明する。図27〜29は、実施例5に係る決定処理の手順を示すフローチャートである。この決定処理は、所定間隔ごとに実行される。なお、実施例3や実施例4と同様の処理については、同一の符号を付して説明する。
【0187】
図27〜29に示すように、特定部83cは、S203の次に、S402に代えて、平均値Aveが閾値βより小さいか否かを判定する(S501)。
【0188】
また、特定部83cは、S403の次に、S404に代えて、現在のVMの台数Sから、負荷がWCの場合におけるVMの台数(T/WC)を減じた値ΔS´(=S−(T/WC))を算出して、増加させるVMの台数を算出する(S502)。そして、特定部83cは、S205に代えて、全てのVMのうち、負荷が低い方からΔS´の値が示す台数分のVMを移動元のVMの候補とする(S503)。続いて、特定部83cは、S405に代えて、残りのVMのうち、負荷がWC未満の全てのVMを移動先のVMの候補とする(S504)。
【0189】
上述してきたように、本実施例に係る管理サーバ82は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ82によれば、通信回数の増加を抑制することができる。
【0190】
また、本実施例に係る管理サーバ82によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0191】
また、本実施例に係る管理サーバ82によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0192】
また、本実施例に係る管理サーバ82によれば、移動先のVMにおいて、処理要素が移動された場合の負荷を、WCより小さく、かつ、閾値βより大きくすることができる。
【0193】
また、本実施例に係る管理サーバ82によれば、VMの平均の負荷がWCとなるようなVMの台数を決定することができる。
【0194】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【0195】
まず、上述した各実施例の変形例について説明する。例えば、CEPシステム内においてクエリを配置することが可能な複数の装置のうち、特定の装置のみ実行可能なクエリがある。そこで、この場合に、このクエリを含む処理要素を、他の装置に配置しないように管理サーバが制御する変形例について説明する。上述した各実施例の変形例における管理サーバは、特定の装置に配置された該当クエリの移動が不可であることを示す第一の不可情報を記憶部に格納する。そして、変形例における特定部や決定部などは、移動元の装置の候補が選出された後に、記憶部に第一の不可情報があるか否かを判定し、第一の不可情報がある場合には、第一の不可情報を参照する。続いて、変形例における特定部や決定部などは、第一の不可情報に該当する特定の装置が、移動元の装置の候補として選出された場合には、特定の装置を移動元の装置の候補から外す。なお、変形例における特定部や決定部は、移動元の装置の候補が選出される前に、第一の不可情報を参照し、第一の不可情報が示す特定の装置を、移動元の装置の候補に選出しないようにすることもできる。
【0196】
図30は、変形例に係る第一の除外処理の手順を示すフローチャートである。第一の除外処理は、例えば、移動元のVMの候補が選出された後に、決定処理の一部の処理として実行される。図30に示すように、変形例における特定部や決定部などは、記憶部を検索し、記憶部に第一の不可情報があるか否かを判定する(S601)。第一の不可情報がない場合(S601否定)には、決定処理を進める。一方、第一の不可情報がある場合(S601肯定)には、変形例における特定部や決定部などは、記憶部から第一の不可情報を取得し、取得した第一の不可情報に基づいて、移動元の装置の候補の中に、第一の不可情報が示す特定の装置があるか否かを判定する(S602)。
【0197】
移動元の装置の候補の中に、第一の不可情報が示す特定の装置がある場合(S602肯定)には、変形例における特定部や決定部などは、特定の装置を移動元の装置の候補から外し(S603)、決定処理を進める。また、移動元の装置の候補の中に、第一の不可情報が示す特定の装置がない場合(S602否定)にも、決定処理を進める。
【0198】
上述したように、変形例は、CEPシステム内においてクエリを配置することが可能な複数の装置のうち、特定の装置のみでしか実行できないクエリについては、クエリが配置された装置を移動元の装置の候補から外す。したがって、変形例によれば、移動元の装置の候補の台数が減るため、処理要素を移動させる際の処理コストが抑制される。また、変形例によれば、特定の装置のみでしか実行できないクエリを他の装置に移動させてしまう事象が発生することを抑制することができる。
【0199】
また、CEPシステム内において、複数のクエリのうち、特定のクエリしか実行できない装置がある。そこで、この場合に、この装置に、他の装置の処理要素を移動させないように管理サーバが制御する変形例について説明する。上述した各実施例の変形例における管理サーバは、特定のクエリしか実行できない装置に、他の装置からのクエリの移動が不可であることを示す第二の不可情報を記憶部に格納する。そして、変形例における特定部や決定部などは、移動先の装置の候補が選出された後に、記憶部に第二の不可情報があるか否かを判定し、第二の不可情報がある場合には、第二の不可情報を参照する。続いて、変形例における特定部や決定部などは、第二の不可情報に該当する装置が、移動先の装置の候補として選出された場合には、この装置を移動先の装置の候補から外す。なお、変形例における特定部や決定部は、移動先の装置の候補が選出される前に、第二の不可情報を参照し、第二の不可情報が示す装置を、移動先の装置の候補に選出しないようにすることもできる。
【0200】
図31は、変形例に係る第二の除外処理の手順を示すフローチャートである。第二の除外処理は、例えば、移動先のVMの候補が選出された後に、決定処理の一部の処理として実行される。図31に示すように、変形例における特定部や決定部などは、記憶部を検索し、記憶部に第二の不可情報があるか否かを判定する(S701)。第二の不可情報がない場合(S701否定)には、決定処理を進める。一方、第二の不可情報がある場合(S701肯定)には、変形例における特定部や決定部などは、記憶部から第二の不可情報を取得し、取得した第二の不可情報に基づいて、移動先の装置の候補の中に、第二の不可情報が示す装置があるか否かを判定する(S702)。
【0201】
移動先の装置の候補の中に、第二の不可情報が示す装置がある場合(S702肯定)には、変形例における特定部や決定部などは、この装置を移動先の装置の候補から外し(S703)、決定処理を進める。また、移動先の装置の候補の中に、第二の不可情報が示す装置がない場合(S702否定)にも、決定処理を進める。
【0202】
上述したように、変形例は、CEPシステム内において、複数のクエリのうち、特定のクエリしか実行できない装置については、移動先の装置の候補から外す。したがって、変形例によれば、移動先の装置の候補の台数が減るため、処理要素を移動させる際の処理コストが抑制される。また、変形例によれば、特定のクエリしか実行できない装置に、他の装置から他のクエリを移動させてしまう事象が発生することを抑制することができる。
【0203】
また、上記の各実施例では、VMが、クエリ間の通信回数を算出し、算出した通信回数を含む通信回数情報37を管理サーバに送信する場合について例示した。しかしながら、開示の装置は、これに限定されない。そこで、VMが、クエリの実行順序を示す順序情報を管理サーバに送信し、順序情報を受信した管理サーバがクエリ間の通信回数を算出し、算出した通信回数に基づいて、クエリの組を特定する変形例について説明する。
【0204】
図32は、変形例に係る管理サーバの構成の一例を示す図である。図32の例は、実施例5の変形例を示す。図32に示すように、管理サーバ86の制御部45は、算出部87を有する。変形例では、VMから送信された順序情報を取得部45bが取得し、取得した順序情報を記憶部44に格納する。そして、算出部87は、所定のタイミング、例えば、決定処理において、記憶部44に記憶された通信回数情報37が取得部45bにより取得される前に、記憶部44から順序情報を取得する。続いて、算出部87は、取得した順序情報が示すクエリの実行順序から、クエリの通信回数を算出する。その後、算出部87は、算出したクエリの通信回数分の値を該当項目に登録した通信回数情報37を記憶部44に格納する。
【0205】
図33は、変形例に係る算出処理の手順を示すフローチャートである。算出処理は、例えば、決定処理の一部の処理として、取得部により通信回数情報37が取得される前に実行される。図33に示すように、算出部87は、記憶部44から順序情報を取得する(S801)。続いて、算出部87は、取得した順序情報が示すクエリの実行順序から、クエリの通信回数を算出する(S802)。その後、算出部87は、算出したクエリの通信回数分の値を該当項目に登録した通信回数情報37を記憶部44に格納する(S803)。
【0206】
上述したように、変形例では、VMは、クエリの通信回数を算出することなく、クエリの実行順序を管理サーバに送信する。そして、変形例では、クエリの実行順序からクエリの通信回数を算出し、算出した通信回数を用いて、クエリの組を特定する。したがって、変形例によれば、VMの処理コストを抑制することができる。なお、上記では、実施例5の変形例について説明したが、実施例3および実施例4などについても、実施例5の変形例と同様の技術を取り入れることができる。
【0207】
また、上記の各実施例では、VMにクエリを配置した場合について説明したが、開示の装置は、物理サーバにクエリを配置して同様の処理を行うことができる。
【0208】
また、実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、本実施例において説明した各処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。
【0209】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。
【0210】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更できる。
【0211】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【0212】
[配置プログラム]
また、上記の実施例で説明した配置装置および管理サーバの各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、図34を用いて、上記の各実施例で説明した配置装置または管理サーバと同様の機能を有する配置プログラムを実行するコンピュータの一例を説明する。図34は、配置プログラムを実行するコンピュータを示す図である。
【0213】
図34に示すように、コンピュータ300は、CPU(Central Processing Unit)310、ROM(Read Only Memory)320、HDD(Hard Disk Drive)330、RAM(Random Access Memory)340を有する。これら310〜340の各符号が示す各機器は、バス350を介して接続される。
【0214】
ROM320には、OSなどの基本プログラムが記憶されている。また、HDD330には、上記の各実施例で示す初期配置部と、取得部と、算出部と、特定部と、決定部と、配置制御部と同様の機能を発揮する配置プログラムが予め記憶される。なお、配置プログラムについては、適宜分離しても良い。また、HDD330には、ルーティングテーブル、通信回数情報、負荷情報、移動指示リストが設けられる。これらルーティングテーブル、通信回数情報、負荷情報、移動指示リスト、順序情報は、上述したルーティングテーブル50、通信回数情報37、負荷情報38、移動指示リスト46、順序情報に対応する。
【0215】
そして、CPU310が、配置プログラムをHDD330から読み出して実行する。
【0216】
そして、CPU310は、ルーティングテーブル、通信回数情報、負荷情報、移動指示リストを読み出してRAM340に格納する。さらに、CPU310は、RAM340に格納されたルーティングテーブル、通信回数情報、負荷情報、移動指示リストを用いて、配置プログラムを実行する。なお、RAM340に格納される各データは、常に全てのデータがRAM330に格納されなくともよい。処理に用いられるデータがRAM340に格納されれば良い。
【0217】
なお、上記した配置プログラムについては、必ずしも最初からHDD330に記憶させておく必要はない。
【0218】
例えば、コンピュータ300に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」にプログラムを記憶させておく。そして、コンピュータ300がこれらからプログラムを読み出して実行するようにしてもよい。
【0219】
さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータ300に接続される「他のコンピュータ(またはサーバ)」などにプログラムを記憶させておく。そして、コンピュータ300がこれらからプログラムを読み出して実行するようにしてもよい。
【符号の説明】
【0220】
1 配置装置
1a 取得部
1b 特定部
1c 決定部
2 配置装置
2a 取得部
2b 算出部
2c 特定部
2d 決定部
【技術分野】
【0001】
本発明は、配置装置、配置プログラムおよび配置方法に関する。
【背景技術】
【0002】
様々な対象から刻々と収集される多数のデータを並列に処理する技術として複合イベント処理(CEP;Complex Event Processing)がある。複合イベント処理では、受信したデータに対してイベントの発生を検出し、発生が検出されたイベントに関する処理が実行される。なお、複合イベント処理は、ESP(Event Stream Processing)と称される場合もある。以下の説明では、CEPの技術の範囲に、ESPが含まれるものとして説明する。
【0003】
複合イベント処理を行うCEPシステムでは、一時的に大量の受信データを処理する場合がある。この場合、CEPシステムにおける受信データの処理を行う装置では、処理負荷が高くなるため、処理性能が低下する場合がある。
【0004】
そこで、例えば、CEPシステムでは、クラウド技術などの柔軟な資源割り当てが可能な技術を用いて、処理負荷の変動に応じて複数のサーバや仮想マシン(VM;Virtual Machine)に、処理の分散が行われる。かかる処理の分散について、一例を挙げて説明すると、処理負荷が高いサーバや仮想マシンに配置されたクエリと呼ばれる処理要求文や、クエリに付随するデータを処理要素として、他のサーバや仮想マシンに移動させて処理の分散を行う。
【0005】
また、予め定められた、クエリに設定された処理の実行順序などの情報を含むクエリグラフに基づいて、実行順序が前後するクエリ、すなわち、クエリグラフにおいて隣接するクエリ同士を同一の装置に配置する技術がある。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】米国特許出願公開第2009/0049187号明細書
【特許文献2】米国特許出願公開第2009/0319687号明細書
【非特許文献】
【0007】
【非特許文献1】Mehul A. Shah,Joseph M. Hellerstein,Sirish Chandrasekaran and Michael J.Franklin著、“Flux:An Adaptive Partitioning Operator for Continuous Query Systems”,ICDE,2003
【非特許文献2】Ying Xing著、“Load Distribution for Distributed Stream Processing”,EDBT,2004 WORKSHOPS
【非特許文献3】Ying Xing,Stan Zdonik, Jeong−Hyon Hwang著、“Dynamic Load Distribution in the Borealis Stream Processor”,ICDE,2005
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、上記の技術では、装置間の通信の増加を抑制することが困難であるという問題がある。以下、具体例を挙げて説明する。まず、上記の処理の分散の技術の一例を説明する。
【0009】
図35Aおよび図35Bは、上記の処理の分散の技術の一例を説明するための図である。図35Aの例は、クエリの接続関係を示すクエリグラフの一例を示す。図35Aの例のクエリグラフは、クエリQ1の実行結果が用いられて、クエリQ2が実行されることを示す。また、図35Aの例のクエリグラフは、クエリQ2の実行結果が用いられて、クエリQ3が実行されることを示す。また、図35Aおよび図35Bの例では、処理負荷に応じて、クエリQ1およびクエリQ3がサーバ90に配置され、クエリQ2がサーバ91に配置された場合を示す。図35Aおよび図35Bの例では、サーバ90はクエリQ1の実行結果をクエリQ2が配置されたサーバ91へ送信する。また、図35Aおよび図35Bの例では、サーバ91はクエリQ2の実行結果をクエリQ3が配置されたサーバ90へ送信する。このように、図35Aおよび図35Bの例では、クエリQ1〜Q3を実行する場合に、サーバ90およびサーバ91間で実行結果の送信が2回も行われる。
【0010】
次に、上記の隣接するクエリ同士を同一の装置に配置する技術の一例について説明する。図36Aおよび図36Bは、上記の隣接するクエリ同士を同一の装置に配置する技術の一例を説明するための図である。図36Aの例は、クエリの接続関係を示すクエリグラフの一例を示す。図36Aの例のクエリグラフは、クエリQ1の実行結果が用いられて、クエリQ2、Q3が実行されることを示す。また、図36Aの例のクエリグラフは、クエリQ2の実行結果が用いられて、クエリQ3が実行されることを示す。また、図36Aおよび図36Bの例では、クエリグラフが示すクエリの隣接関係に応じて、クエリQ1およびクエリQ2がサーバ90に配置され、クエリQ3がサーバ91に配置された場合を示す。ここで、クエリQ1が配置された装置からクエリQ2が配置された装置への処理結果の送信回数よりも、クエリQ1が配置された装置からクエリQ3が配置された装置への処理結果の送信回数が多い場合を説明する。この場合、図36Aおよび図36Bの例では、通信サーバ90は、クエリQ1、Q2が同一のサーバ90に配置されたため、クエリQ1、Q2間では、実行結果の送信を行わない。しかしながら、図36Aおよび図36Bの例では、通信サーバ90は、クエリQ1の実行結果をクエリQ3が配置されたサーバ91へ送信する。このように、図35Aおよび図35Bの例では、クエリQ1〜Q3を実行する場合に、サーバ90およびサーバ91間で実行結果の送信が行われてしまう。
【0011】
したがって、上記の技術では、装置間の通信の増加を抑制することが困難である。
【0012】
1つの側面では、本発明は、装置間の通信の増加を抑制することを目的とする。
【課題を解決するための手段】
【0013】
1つの案では、本願の開示する配置装置は、取得部と、特定部と、決定部とを有する。取得部は、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された複数のクエリについて、クエリ間の通信回数を示す情報を取得する。特定部は、取得部により取得された情報が示す通信回数に基づいて、クエリの組を特定する。決定部は、特定部により特定されたクエリの組を同一の装置に配置することを決定する。
【0014】
また、他の案では、本願の開示する配置装置は、取得部と、算出部と、特定部と、決定部とを有する。取得部は、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された複数のクエリについて、クエリが実行された順序を示す情報を取得する。算出部は、取得部により取得された情報に基づいて、クエリ間の通信回数を算出する。特定部は、算出部により算出された通信回数に基づいて、クエリの組を特定する。決定部は、特定部により特定されたクエリの組を同一の装置に配置することを決定する。
【0015】
また、他の案では、本願の開示する配置装置は、取得部と、算出部と、特定部と、決定部とを有する。取得部は、複数の処理要求文を連携してイベントを実行する該処理要求文が1以上配置された複数の装置が実行した処理要求文間の通信回数を示す情報を取得する。特定部は、通信回数に基づいて、処理要求文の組を特定する。決定部は、特定された処理要求文の組を同一の装置に配置するための装置を決定する。
【発明の効果】
【0016】
装置間の通信の増加を抑制することができる。
【図面の簡単な説明】
【0017】
【図1】図1は、実施例1に係る配置装置を含むCEPシステムの構成の一例を示す図である。
【図2】図2は、実施例2に係る配置装置を含むCEPシステムの構成の一例を示す図である。
【図3】図3は、実施例3に係るCEPシステムの構成の一例を示す図である。
【図4】図4は、実施例3に係るVMの処理の一例を説明するための図である。
【図5】図5は、実施例3に係るVMの処理の一例を説明するための図である。
【図6】図6は、実施例3に係るVMの処理の一例を説明するための図である。
【図7A】図7Aは、通信回数情報のデータ構造の一例を示す図である。
【図7B】図7Bは、通信回数情報のデータ構造の一例を示す図である。
【図7C】図7Cは、通信回数情報のデータ構造の一例を示す図である。
【図7D】図7Dは、通信回数情報のデータ構造の一例を示す図である。
【図8】図8は、実施例3に係るVMの処理の一例を説明するための図である。
【図9】図9は、データの流れに沿ってCEPシステムの構成を模式的に示した図である。
【図10A】図10Aは、クエリの移動の一例を示す図である。
【図10B】図10Bは、クエリの移動の他の一例を示す図である。
【図11】図11は、クエリのグループ分けの一例を示す図である。
【図12】図12は、管理サーバの構成の一例を示す図である。
【図13】図13は、移動指示リストのデータ構造の一例を示す図である。
【図14】図14は、実施例3に係る管理サーバが実行する処理の一例を説明するための図である。
【図15】図15は、取得処理の手順を示すフローチャートである。
【図16】図16は、決定処理の手順を示すフローチャートである。
【図17】図17は、決定処理の手順を示すフローチャートである。
【図18】図18は、決定処理の手順を示すフローチャートである。
【図19】図19は、配置制御処理の手順を示すフローチャートである。
【図20】図20は、実施例4に係る管理サーバの構成を示すブロック図である。
【図21】図21は、実施例4に係る管理サーバが実行する処理の一例を説明するための図である。
【図22】図22は、実施例4に係る決定処理の手順を示すフローチャートである。
【図23】図23は、実施例4に係る決定処理の手順を示すフローチャートである。
【図24】図24は、実施例4に係る決定処理の手順を示すフローチャートである。
【図25】図25は、実施例5に係る管理サーバの構成を示すブロック図である。
【図26】図26は、実施例5に係る管理サーバが実行する処理の一例を説明するための図である。
【図27】図27は、実施例5に係る決定処理の手順を示すフローチャートである。
【図28】図28は、実施例5に係る決定処理の手順を示すフローチャートである。
【図29】図29は、実施例5に係る決定処理の手順を示すフローチャートである。
【図30】図30は、変形例に係る第一の除外処理の手順を示すフローチャートである。
【図31】図31は、変形例に係る第二の除外処理の手順を示すフローチャートである。
【図32】図32は、変形例に係る管理サーバの構成の一例を示す図である。
【図33】図33は、変形例に係る算出処理の手順を示すフローチャートである。
【図34】図34は、配置プログラムを実行するコンピュータを示す図である。
【図35A】図35Aは、上記の処理の分散の技術の一例を説明するための図である。
【図35B】図35Bは、上記の処理の分散の技術の一例を説明するための図である。
【図36A】図36Aは、上記の隣接するクエリ同士を同一の装置に配置する技術の一例を説明するための図である。
【図36B】図36Bは、上記の隣接するクエリ同士を同一の装置に配置する技術の一例を説明するための図である。
【発明を実施するための形態】
【0018】
以下に、本願の開示する配置装置、配置プログラムおよび配置方法の各実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例1】
【0019】
実施例1に係る配置装置について説明する。図1は、実施例1に係る配置装置を含むCEPシステムの構成の一例を示す図である。図1の例のCEPシステムは、配置装置1と複数の装置2a〜2cとを有する。図1の例では、配置装置1と、複数の装置2a〜2cとが接続される。したがって、配置装置1および複数の装置2a〜2cの各装置は、互いに通信を行うことができる。
【0020】
配置装置1は、CEPシステムを管理する物理サーバである。例えば、配置装置1は、データセンサや各企業に設けられた管理用のサーバである。装置2a〜2cの各々は、物理サーバまたは物理サーバ上で動作する仮想マシンである。各装置2a〜2cには、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリ3a〜3cが配置される。各装置2a〜2cには、様々な対象から収集されたデータが配信(送信)される。各装置2a〜2cは、CEPシステムの外部から受信したデータ、または、CEPシステム内の他のクエリでの処理結果を示すデータを受信する。そして、各装置2a〜2cは、クエリ3a〜3cのそれぞれに設定された条件に合致した場合に、クエリ3a〜3cのそれぞれに設定された処理を実行する。
【0021】
また、各装置2a〜2cに配置されたクエリ3a〜3cのそれぞれは、配置装置1により装置2a〜2cのいずれかの装置に再び配置される。例えば、各装置2a〜2cは、処理負荷を分散させる場合には、処理負荷が高い装置から処理負荷が低い装置へクエリを移動させる。
【0022】
ここで、クエリ3bを実行する際に、クエリ3aの処理結果(実行結果)が用いられ、また、クエリ3cを実行する際に、クエリ3aまたはクエリ3cの処理結果が用いられる場合について説明する。この場合、装置2aは、外部から受信したデータが、クエリ3aに設定された条件に合致した場合に、クエリ3aに設定された処理を実行する。そして、装置2aは、クエリ3aに設定された処理を実行した処理結果を、クエリ3bが配置された装置2b、または、クエリ3cが配置された装置2cへ送信する。また、装置2bは、装置2aから受信したデータが、クエリ3bに設定された条件に合致した場合に、クエリ3bに設定された処理を実行する。そして、装置2bは、クエリ3bに設定された処理を実行した処理結果を、クエリ3cが配置された装置2cへ送信する。ここで、装置2aは、クエリ3aに設定された処理を実行した処理結果を、装置2bよりも装置2cへ送信する回数が多い場合について説明する。なお、上述したように、装置2bは、装置2aから受信したデータに基づいて、クエリ3bに設定された処理を実行し、処理結果を、装置2cへ送信する。この場合、結果的に、クエリ3a,3c間の通信回数は、クエリ3b,3c間の通信回数よりも多い。このとき、後述する配置装置1の制御により、通信回数が多いクエリ3a,3c間のクエリ3a,3cの組が同一の装置へ配置させることが決定される。
【0023】
また、装置2cは、クエリ3a,3b間、クエリ3a,3c間、クエリ3b,3c間の通信回数を集計し、集計結果を配置装置1に送信する。すなわち、装置2cは、各クエリ間の通信回数を示す情報を配置装置1に送信する。なお、「クエリA,B間の通信回数」は、クエリAが配置された装置と、クエリBが配置された装置とで通信された(処理結果を送信した)回数を指す。
【0024】
図1に示すように、配置装置1は、取得部1aと、特定部1bと、決定部1cとを有する。
【0025】
取得部1aは、クエリ間の通信回数を示す情報を取得する。例えば、取得部1aは、装置2cから送信された各クエリ間の通信回数を示す情報を受信することにより、かかる情報を取得する。
【0026】
特定部1bは、取得部1aにより取得された情報が示す通信回数に基づいて、クエリの組を特定する。例えば、特定部1bは、クエリ3a,3b間、クエリ3a,3c間、クエリ3b,3c間のうち、通信回数が最も多いクエリ3a,3c間のクエリ3a,3cの組を特定する。
【0027】
決定部1cは、特定部1bにより特定されたクエリの組を同一の装置に配置することを決定する。例えば、決定部1cは、特定部1bにより特定されたクエリ3a,3cの組を同一の装置2a,2bまたは2cなどに配置することを決定する。
【0028】
このように、本実施例に係る配置装置1は、クエリ3a,3cを同一の装置へ配置することを決定する。したがって、この決定に基づきクエリ3a,3cが同一の装置へ配置された場合には、クエリ3a,3cが同一の装置へ配置される前に装置2a,2c間で行われていたような、2つの装置間での処理結果の通信が行われなくなる。したがって、本実施例に係る配置装置1によれば、通信回数の増加を抑制することができる。
【0029】
なお、図1の例では、機能的な構成を示したため、取得部1aと、特定部1bと、決定部1cとを別に分けているが、1つのデバイスで構成してもよい。デバイスの一例としては、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路が挙げられる。なお、かかるデバイスとして、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を採用することもできる。
【実施例2】
【0030】
次に、実施例2について説明する。図2は、実施例2に係る配置装置を含むCEPシステムの構成の一例を示す図である。図2の例のCEPシステムは、配置装置5と複数の装置6a〜6cとを有する。図2の例では、配置装置5と、複数の装置6a〜6cとが接続される。したがって、配置装置5および複数の装置6a〜6cの各装置は、互いに通信を行うことができる。
【0031】
配置装置5は、CEPシステムを管理する物理サーバである。例えば、配置装置5は、データセンサや各企業に設けられた管理用のサーバである。装置6a〜6cの各々は、物理サーバまたは物理サーバ上で動作する仮想マシンである。各装置6a〜6cには、それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリ7a〜7cが配置される。各装置6a〜6cには、様々な対象から収集されたデータが配信(送信)される。各装置6a〜6cは、CEPシステムの外部から受信したデータ、または、CEPシステム内の他のクエリでの処理結果を示すデータを受信する。そして、各装置6a〜6cは、受信したデータがクエリ7a〜7cのそれぞれに設定された条件に合致した場合に、クエリ7a〜7cのそれぞれに設定された処理を実行する。
【0032】
また、各装置6a〜6cに配置されたクエリ7a〜7cのそれぞれは、配置装置5により装置6a〜6cのいずれかの装置に再び配置される。例えば、各装置6a〜6cは、処理負荷を分散させる場合には、処理負荷が高い装置から処理負荷が低い装置へクエリを移動させる。
【0033】
ここで、クエリ7bを実行する際に、クエリ7aの処理結果が用いられ、また、クエリ7cを実行する際に、クエリ7aまたはクエリ7cの処理結果が用いられる場合について説明する。この場合、装置6aは、外部から受信したデータが、クエリ7aに設定された条件に合致した場合に、クエリ7aに設定された処理を実行する。そして、装置6aは、クエリ7aに設定された処理を実行した処理結果を、クエリ7bが配置された装置6b、または、クエリ7cが配置された装置6cへ送信する。また、装置6bは、装置6aから受信したデータが、クエリ7bに設定された条件に合致した場合に、クエリ7bに設定された処理を実行する。そして、装置6bは、クエリ7bに設定された処理を実行した処理結果を、クエリ7cが配置された装置6cへ送信する。ここで、装置6aは、クエリ7aに設定された処理を実行した処理結果を、装置6bよりも装置6cへ送信する回数が多い場合について説明する。なお、上述したように、装置6bは、装置6aから受信したデータに基づいて、クエリ7bに設定された処理を実行し、処理結果を、装置6cへ送信する。そのため、結果的に、クエリ7a,7c間の通信回数は、クエリ7b,7c間の通信回数よりも多い。このとき、後述する配置装置5の制御により、通信回数が多いクエリ7a,7c間のクエリ7a,7cの組を同一の装置へ配置することが決定される。
【0034】
また、各装置6a〜6cは、他の装置からクエリの識別子を受信していない場合に、クエリに設定された処理を実行した場合には、次のような情報を他の装置に送信する。すなわち、各装置6a〜6cは、処理結果と、実行したクエリの識別子とを他の装置に送信する。例えば、装置6aは、他の装置からクエリの識別子を受信していない場合に、クエリ7aに設定された処理の処理結果と、実行したクエリ7aの識別子とを装置6bまたは装置6cに送信する。
【0035】
また、各装置6a〜6cは、他の装置からクエリの識別子を受信した場合には、処理結果とともに、受信したクエリの識別子と実行したクエリの識別子とをクエリの実行順が認識可能な形式にして送信する。例えば、装置6bは、クエリ7bに設定された処理の処理結果を装置6cに送信する。これに加えて、装置6bは、装置6aからクエリ7aの識別子を受信した場合に、次のような処理を行う。すなわち、装置6bは、クエリの実行順が認識可能なように、受信したクエリ7aの識別子の次に、実行したクエリ7bの識別子が並んだ情報、換言すれば、クエリ7aが実行された後に、クエリ7bが実行されたことが認識可能な情報を装置6cに送信する。また、装置6cは、クエリ7cに設定された処理の処理結果を配信装置5に送信する。これに加えて、装置6cは、受信したクエリの識別子がクエリ7aの識別子である場合には、クエリの実行順が認識可能なように、次のような処理を行う。すなわち、装置6cは、受信したクエリ7aの識別子の次に、実行したクエリ7cの識別子が並んだ情報、換言すれば、クエリ7aが実行された後に、クエリ7cが実行されたことが認識可能な情報を装置6cに送信する。また、装置6cは、受信したクエリの識別子がクエリ7aの識別子およびクエリ7bの識別子である場合には、クエリの実行順が認識可能なように、次のような処理を行う。すなわち、装置6cは、クエリ7aの識別子、クエリ7bの識別子、実行したクエリ7cの識別子の順で識別子が並んだ情報、換言すれば、クエリ7aが実行された後に、クエリ7b、クエリ7cの順で実行されたことが認識可能な情報を配置装置5に送信する。このようにして、装置6cは、クエリが実行された順序を示す情報を配置装置5に送信する。
【0036】
図2に示すように、配置装置5は、取得部5aと、算出部5bと、特定部5cと、決定部5dとを有する。
【0037】
取得部5aは、クエリが実行された順序を示す情報を取得する。例えば、取得部5aは、装置6cから送信されたクエリが実行された順序を示す情報を受信することにより、かかる情報を取得する。
【0038】
算出部5bは、取得部5aにより取得された情報に基づいて、クエリ間の通信回数を算出する。例えば、算出部5bは、クエリが実行された順序を示す情報に、クエリ7aの次に、クエリ7cが実行されたことを示す情報が含まれている場合には、クエリ7a,7c間の通信回数を1つインクリメントする。また、算出部5bは、クエリが実行された順序を示す情報に、クエリ7aの次に、クエリ7bが実行されたことを示す情報が含まれている場合には、クエリ7a,7b間の通信回数を1つインクリメントする。また、算出部5bは、クエリが実行された順序を示す情報に、クエリ7bの次に、クエリ7cが実行されたことを示す情報が含まれている場合には、クエリ7b,7c間の通信回数を1つインクリメントする。
【0039】
特定部5cは、算出部5bにより算出された通信回数に基づいて、クエリの組を特定する。例えば、特定部5cは、クエリ7a,7b間、クエリ7a,7c間、クエリ7b,7c間のうち、通信回数が最も多いクエリ7a,7c間のクエリ7a,7cの組を特定する。
【0040】
決定部5dは、特定部5cにより特定されたクエリの組を同一の装置に配置することを決定する。例えば、決定部5dは、特定部5cにより特定されたクエリ7a,7cの組を同一の装置6aまたは6cに配置することを決定する。
【0041】
このように、本実施例に係る配置装置5は、クエリ7a,7cを同一の装置へ配置することを決定する。したがって、この決定に基づきクエリ7a,7cが同一の装置へ配置された場合には、クエリ7a,7cが同一の装置へ配置される前に装置6a,6c間で行われていたような、2つの装置間での処理結果の通信が行われなくなる。したがって、本実施例に係る配置装置5によれば、通信回数の増加を抑制することができる。
【0042】
なお、図2の例では、機能的な構成を示したため、取得部5aと、算出部5bと、特定部5cと、決定部5dとを別に分けているが、1つのデバイスで構成してもよい。デバイスの一例としては、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路が挙げられる。なお、かかるデバイスとして、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を採用することもできる。
【実施例3】
【0043】
実施例3について説明する。実施例3では、複数のサーバ上でそれぞれVMが動作し、VMにクエリが配置されたCEPシステムについて説明する。図3は、実施例3に係るCEPシステムの構成の一例を示す図である。CEPシステム10は、サーバ20と、サーバ31と、サーバ32と、サーバ33と、サーバ34と、サーバ35と、管理サーバ40とを有する。これらの各サーバは、ネットワーク99を介して接続される。すなわち、図3の例のCEPシステム10では、各サーバ間で通信を行うことができる。かかるネットワーク99の一態様としては、有線または無線を問わず、LAN(Local Area Network)やVPN(Virtual Private Network)などの任意の通信網が挙げられる。また、図3の例では、サーバ31〜35の台数を5台、管理サーバ40の台数を1台、サーバ20の台数を1台とする場合について例示したが、これらの台数は任意の値を採用することができる。
【0044】
サーバ31では、VM31a,31bが動作する。同様に、各サーバ32〜35では、それぞれ、VM32a,32b、VM33a,33b、VM34a,34b、VM35a,35bが動作する。本実施例の説明では、これらの各VM32a、32b、33a、33b、VM34a、34b、35a、35bを区別無く説明する場合には、単にVMと総称する。また、図3の例では、各サーバ31〜35上で動作するVMの台数が2台の場合について例示したが、各サーバ31〜35上で動作するVMの台数は、任意の値を採ることができる。VMには、後述するように、管理サーバ40の制御により、クエリが配置される。また、VMは、CEPシステム10の外部から受信したデータであって後述の前処理が行われたデータ、または、CEPシステム10内の他のクエリでの処理結果を示すデータを受信する。そして、VMは、受信したデータが、VMに配置されたクエリに設定された条件に合致した場合に、クエリに設定された処理を実行する。
【0045】
また、VMは、後述するように、管理サーバ40から、処理結果の送信先のVMのアドレス、例えば、IP(Internet Protocol)アドレスが通知される。また、VMには、後述するように、管理サーバ40から、クエリグラフが送信される。
【0046】
また、VMは、他のVMからクエリの識別子を受信していない場合に、クエリに設定された処理を実行したときには、次のような情報を他のVMに送信する。すなわち、VMは、処理結果と、実行したクエリの識別子とを含むデータを、アドレスに対応するVMに送信する。ここで、以下の説明において、かかるデータを「イベントデータ」と表記する場合がある。
【0047】
また、VMは、他のVMからクエリの識別子を受信した場合には、受信したクエリの識別子と実行したクエリの識別子とをクエリの実行順が認識可能な形式にして、処理結果とともにイベントデータに含め、イベントデータを送信する。例えば、VMは、通知されたアドレスを用いて、アドレスに対応するVMに、かかるイベントデータを送信する。このとき、VMは、他のVMからクエリの識別子を受信した場合に、次のような処理を行う。すなわち、VMは、クエリの実行順が認識可能なように、受信したクエリの識別子の次に、実行したクエリの識別子が並んだ情報、換言すれば、クエリが実行された順序が認識可能な情報をイベントデータに含めて、アドレスに対応するVMに送信する。
【0048】
具体例を挙げて、実施例3に係るVMの処理を説明する。図4〜図6は、実施例3に係るVMの処理の一例を説明するための図である。図4は、VMに送信されるクエリグラフ60の一例を示す。図4の例では、クエリグラフ60は、クエリに設定された処理の実行順序を示す。図4の例のクエリグラフ60は、クエリ61に設定された処理の実行結果が用いられて、クエリ62に設定された処理が実行されることを示す。また、図4の例では、クエリ63〜68の各クエリに設定された処理についても同様にして実行される。また、図4の例のクエリグラフ60は、最初に実行される処理が設定されたクエリが、クエリ61であることを示す。また、図4の例のクエリグラフ60は、最後に実行される処理が設定されたクエリが、クエリ65であることを示す。したがって、図6の例に示すクエリグラフ60が送信されたVMは、自身に配置されたクエリと、クエリグラフ60の内容とから、自身に配置されたクエリが、最後に実行される処理が設定されたクエリであるか否かを判定することができる。例えば、VMは、クエリグラフ60を受信した場合に、クエリグラフ60を参照し、自身に配置されたクエリが、クエリ65であるか否かを判定することで、自身に配置されたクエリが、最後に実行される処理が設定されたクエリであるか否かを判定できる。
【0049】
図5は、他のクエリグラフ70の一部の例を示す。図5の例では、クエリグラフ70は、クエリ71に設定された処理の処理結果が用いられて、クエリ72,73に設定された処理が実行されることを示す。また、図5の例のクエリグラフ70は、クエリ72に設定された処理の処理結果が用いられて、クエリ73に設定された処理が実行されることを示す。ここで、管理サーバ40により、クエリグラフ70が、VMに送信され、VM31aにクエリ71、VM32aにクエリ72、VM33aにクエリ73が配置された場合のVM31a,32a,33aの動作の一例について説明する。なお、以下の説明では、クエリ71〜73のそれぞれを、「Q1」、「Q2」、「Q3」と表記する場合がある。
【0050】
図6の例では、VM31a,32a,33aのそれぞれは、まず、自身に配置されたクエリQ1,Q2,Q3のそれぞれが、クエリグラフ70が示す、最後に実行される処理が設定されたクエリQ3であるか否かを判定する。これにより、VM31a,32aは、自身に配置されたクエリQ1,Q2が、最後に実行される処理が設定されたクエリでないと判定する。またVM33aは、自身に配置されたクエリQ3が、最後に実行される処理が設定されたクエリであると判定する。このような判定をしたVM33aは、後述するように、イベントデータに含まれるクエリQ1,Q2,Q3の実行順序から、各クエリ間の通信回数を集計し、集計結果を含む通信回数情報を管理サーバ40に送信する。
【0051】
図6の例では、VM31aは、VM32aに送信するイベントデータ36aの「ID(Identification)」の項目に、イベントデータを識別するための識別子を登録する。また、VM31aは、イベントデータ36aの「処理結果」の項目に、クエリQ1に設定された処理の処理結果を登録する。また、VM31aは、イベントデータ36aの「実行順序」の項目に、実行した処理が設定されたクエリQ1の識別子「Q1」を登録する。また、VM31aは、イベントデータ36aのその他の各種項目についても、各項目に対応する情報を登録する。このようにして、VM31aは、イベントデータ36aを生成する。そして、VM31aは、管理サーバ40から通知された、処理結果の送信先のVM32aのアドレスを用いて、VM32aに、生成したイベントデータ36aを送信する。
【0052】
また、VM31aは、VM33aに送信するイベントデータ36bの「ID」の項目に、イベントデータを識別するための識別子を登録する。また、VM31aは、イベントデータ36bの「処理結果」の項目に、クエリQ1に設定された処理の処理結果を登録する。また、VM31aは、イベントデータ36bの「実行順序」の項目に、実行した処理が設定されたクエリQ1の識別子「Q1」を登録する。また、VM31aは、イベントデータ36bのその他の各種項目についても、各項目に対応する情報を登録する。このようにして、VM31aは、イベントデータ36bを生成する。そして、VM31aは、管理サーバ40から通知された、処理結果の送信先のVM33aのアドレスを用いて、VM33aに、生成したイベントデータ36bを送信する。
【0053】
そして、VM32aは、イベントデータ36aを受信すると、イベントデータ36aの「処理結果」の項目に登録された処理結果のデータが、クエリQ2に設定された条件に合致するか否かを判定する。続いて、VM32aは、合致した場合に、クエリQ2に設定された処理を実行する。そして、VM32aは、VM33aに送信するイベントデータ36cの「ID」の項目に、イベントデータを識別するための識別子を登録する。また、VM32aは、イベントデータ36cの「処理結果」の項目に、クエリQ2に設定された処理の処理結果を登録する。また、VM32aは、イベントデータ36aの「実行順序」の項目に登録された識別子「Q1」を取得し、取得した識別子「Q1」の次に、実行した処理が設定されたクエリQ2の識別子「Q2」が並ぶように、次のような処理を行う。すなわち、VM32aは、イベントデータ36cの「実行順序」の項目に、識別子「Q1」の次に、識別子「Q2」が並んで登録されるように、識別子「Q1」および「Q2」を登録する。また、VM32aは、イベントデータ36cのその他の各種項目についても、各項目に対応する情報を登録する。このようにして、VM32aは、イベントデータ36cを生成する。そして、VM32aは、管理サーバ40から通知された、処理結果の送信先のVM33aのアドレスを用いて、VM33aに、生成したイベントデータ36cを送信する。
【0054】
VM33aは、イベントデータ36bを受信すると、イベントデータ36bの「処理結果」の項目に登録された処理結果のデータが、クエリQ3に設定された条件に合致するか否かを判定する。続いて、VM33aは、合致した場合に、クエリQ3に設定された処理を実行する。そして、VM33aは、イベントデータ36bの「実行順序」の項目に登録された識別子「Q1」を取得し、取得した識別子「Q1」の次に、実行した処理が設定されたクエリQ3の識別子「Q3」が並んだ情報「Q1、Q3」を生成する。そして、VM33aは、生成した情報「Q1、Q3」を参照して、識別子「Q1」が示すクエリQ1に設定された処理が実行された後に、識別子「Q3」が示すクエリQ3に設定された処理が実行されたと判定する。続いて、VM33aは、判定結果に基づいて、通信回数情報37の送信元の項目「Q1」、送信先の項目「Q3」に対応する項目に登録された値を1つインクリメントする。
【0055】
図7A〜図7Dは、通信回数情報のデータ構造の一例を示す図である。通信回数情報37には、クエリ間の通信回数が登録される。図7Aの例では、通信回数情報37は、クエリに設定された処理の実行順序が前後となる2つのクエリについて、先に実行された処理が設定されたクエリ(先クエリ)と、後に実行された処理が設定されたクエリ(後クエリ)とに対応する通信回数が登録される項目37aを有する。図7Aの例は、VM33aにより項目37aの値がインクリメントされる前の、いわゆる初期状態を示し、全ての項目37aの値は、「0」である。
【0056】
通信回数情報37の項目37aの登録内容が、図7Aの例が示す場合に、上述したように、VM33aが、クエリQ1に設定された処理が実行された後に、クエリQ3に設定された処理が実行されたと判定したときには、VM33aは、次のような処理を行う。すなわち、VM33aは、図7Bの例に示すように、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値を1つインクリメントする。
【0057】
また、VM33aは、イベントデータ36cを受信すると、イベントデータ36cの「処理結果」の項目に登録された処理結果のデータが、クエリQ3に設定された条件に合致するか否かを判定する。続いて、VM33aは、合致した場合に、クエリQ3に設定された処理を実行する。そして、VM33aは、イベントデータ36cの「実行順序」の項目に登録された識別子「Q1,Q2」を取得し、取得した識別子「Q1,Q2」の次に、実行した処理が設定されたクエリQ3の識別子「Q3」が並んだ情報「Q1,Q2,Q3」を生成する。そして、VM33aは、生成した情報「Q1,Q2,Q3」を参照して、識別子「Q1」が示すクエリQ1に設定された処理が実行された後に、識別子「Q2」が示すクエリQ2に設定された処理が実行されたと判定する。また、VM33aは、生成した情報「Q1,Q2,Q3」を参照して、識別子「Q2」が示すクエリQ2に設定された処理が実行された後に、識別子「Q3」が示すクエリQ3に設定された処理が実行されたと判定する。続いて、VM33aは、判定結果に基づいて、通信回数情報37の送信元の項目「Q1」、送信先の項目「Q2」に対応する項目に登録された値を1つインクリメントする。また、VM33aは、判定結果に基づいて、通信回数情報37の送信元の項目「Q2」、送信先の項目「Q3」に対応する項目に登録された値を1つインクリメントする。
【0058】
通信回数情報37の項目37aの登録内容が、図7Aの例が示す場合に、上述したように、VM33aが、クエリQ1に設定された処理が実行された後に、クエリQ2に設定された処理が実行されたと判定したときには、VM33aは、次のような処理を行う。すなわち、VM33aは、図7Cの例に示すように、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q2」に対応する項目37aに登録された値を1つインクリメントする。また、この場合に、上述したように、VM33aが、クエリQ2に設定された処理が実行された後に、クエリQ3に設定された処理が実行されたと判定したときには、VM33aは、次のような処理を行う。すなわち、VM33aは、図7Cの例に示すように、「先クエリ」の項目が「Q2」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値を1つインクリメントする。
【0059】
また、図7Aの例が示す場合から、クエリQ1に設定された処理が実行された後に、クエリQ3に設定された処理が実行されたと判定した回数が「10」である場合には、VM33aは、次のような処理を行う。すなわち、VM33aは、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値を1つインクリメントすることを10回行う。この結果、図7Dの例に示すように、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値が「10」となる。また、クエリQ1に設定された処理が実行された後に、クエリQ2に設定された処理が実行されたと判定した回数が「1」である場合には、VM33aは、次のような処理を行う。すなわち、VM33aは、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q2」に対応する項目37aに登録された値を1つインクリメントすることを1回行う。この結果、図7Dの例に示すように、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q2」に対応する項目37aに登録された値が「1」となる。また、クエリQ2に設定された処理が実行された後に、クエリQ3に設定された処理が実行されたと判定した回数が「1」である場合には、VM33aは、次のような処理を行う。すなわち、VM33aは、「先クエリ」の項目が「Q2」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値を1つインクリメントすることを1回行う。この結果、図7Dの例に示すように、「先クエリ」の項目が「Q2」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値が「1」となる。
【0060】
このようにして、自身に配置されたクエリQ3が、最後に実行される処理が設定されたクエリであると判定をしたVM33aは、イベントデータに含まれるクエリQ1,Q2などの実行順序から、各クエリ間の通信回数を集計する。そして、VM33aは、集計結果を含む通信回数情報37を生成する。続いて、VM33aは、所定時間間隔、例えば、1分毎に、生成した通信回数情報37を管理サーバ40に送信する。
【0061】
また、VMは、所定時間ごと、例えば、1分ごとに、負荷を示す負荷情報を管理サーバ40へ送信する。なお、負荷情報は、例えば、クエリおよびクエリに付随するデータなどを含む処理要素ごとの負荷を示す情報である。
【0062】
具体例を挙げて、実施例3に係るVMの処理を説明する。図8は、実施例3に係るVMの処理の一例を説明するための図である。図8の例では、VM31aは、管理サーバ40に送信する負荷情報38aの「装置」の項目に、VM31aの識別子「31a」を登録する。また、図8の例では、VM31aは、負荷情報38aの「クエリ」の項目に、VM31aに配置されたクエリQ1の識別子「Q1」を登録する。また、図8の例では、VM31aは、負荷情報38aの「処理要素」の項目に、クエリQ1およびクエリQ1に付随するデータを含む処理要素の識別子「V1」を登録する。また、図8の例では、VM31aは、負荷情報38aの「負荷値」の項目に、処理要素の負荷、例えば、単位時間の間(例えば、1秒間)に処理されたイベントの数mを登録する。
【0063】
また、図8の例では、VM32aは、管理サーバ40に送信する負荷情報38bの「装置」の項目に、VM32aの識別子「32a」を登録する。また、図8の例では、VM32aは、負荷情報38bの「クエリ」の項目に、VM32aに配置されたクエリQ2の識別子「Q2」を登録する。また、図8の例では、VM32aは、負荷情報38bの「処理要素」の項目に、クエリQ2およびクエリQ2に付随するデータを含む処理要素の識別子「V2」を登録する。また、図8の例では、VM32aは、負荷情報38bの「負荷値」の項目に、処理要素の負荷、例えば、単位時間の間(例えば、1秒間)に処理されたイベントの数nを登録する。
【0064】
また、図8の例では、VM33aは、管理サーバ40に送信する負荷情報38cの「装置」の項目に、VM33aの識別子「33a」を登録する。また、図8の例では、VM33aは、負荷情報38cの「クエリ」の項目に、VM33aに配置されたクエリQ3の識別子「Q3」を登録する。また、図8の例では、VM33aは、負荷情報38cの「処理要素」の項目に、クエリQ3およびクエリQ3に付随するデータを含む処理要素の識別子「V3」を登録する。また、図8の例では、VM33aは、負荷情報38cの「負荷値」の項目に、処理要素の負荷、例えば、単位時間の間(例えば、1秒間)に処理されたイベントの数rを登録する。
【0065】
このようにして、VM31a〜33aのそれぞれは、負荷情報38a〜38cのそれぞれを生成する。
【0066】
また、図8の例では、VM31a〜33aのそれぞれは、負荷情報38a〜38cのそれぞれを、所定時間ごとに、管理サーバ40に送信する。
【0067】
管理サーバ40は、サーバ20、サーバ31〜35、VM31a〜35a,31b〜35bを管理するサーバである。管理サーバ40は、クエリの配置を制御する。
【0068】
図9は、データの流れに沿ってCEPシステムの構成を模式的に示した図である。サーバ20、VM31a〜35a,31b〜35bおよび管理サーバ40は、各クエリが処理対象とするデータ毎に当該クエリの配置先が登録されたルーティングテーブル50を記憶する。
【0069】
サーバ20は、外部ネットワーク98を介して様々な対象から多数のデータを受信する。サーバ20は、受信したデータを所定のデータ構成に整える前処理を行う。そして、サーバ20は、ルーティングテーブル50に基づき、受信したデータを処理対象とするクエリの配置先を特定する。続いて、サーバ20は、前処理が行われたデータを特定した配置先のVMへ送信する。なお、図3および図9の例では、サーバ20の台数が1台である場合を例示したが、サーバ20を複数台設けて、複数のサーバ20により受信したデータを各VMへ送信してもよい。
【0070】
VMは、それぞれエンジン51を動作させる。エンジン51は、複合イベント処理を実現するソフトウェアである。エンジン51は、受信したデータと、クエリの条件式とを突合させてイベントを検出し、検出したイベントの処理を実行する制御を行う。また、CEPシステム10では、複数のクエリにより一連の処理を実行させる。例えば、上位のクエリによる処理結果のデータを下位のクエリへ送信する。そして、下位のクエリでは、送信されたデータを、下位のクエリに設定された処理を実行する際に用いる。エンジン51は、複数のクエリにより一連の処理を実行する場合、クエリによる処理結果のデータを下位のクエリが配置されたVMへ送信する。また、エンジン51は、管理サーバ40からのクエリの移動の指示に応じて、他のVM上で動作するエンジン51との間でクエリを移動させる制御を行う。
【0071】
ここで、クエリの移動について説明する。クエリは、付随するデータを有する場合がある。例えば、クエリが処理対象とするデータの所定の期間の平均を求める処理を行う場合、平均を算出するために所定の期間より長い期間の間に受信したデータを保持する。また、クエリは、処理にテーブルなどの所定のデータを用いる場合もある。エンジン51は、クエリを移動させる場合、クエリおよびクエリに付随するデータを処理要素として移動させる。
【0072】
また、クエリの移動には、複数のケースが考えられる。図10Aは、クエリの移動の一例を示す図である。図10Aに示すように、クエリ毎に処理対象とするデータが異なる場合、クエリを移動させ、移動先で処理対象とするデータを処理させる。例えば、処理を分散させる場合、各クエリをそれぞれ異なるVMに移動させて、各VMによりデータを処理させる。一方、処理負荷が低い場合などには、クエリをより少ない台数のVM、例えば、1台のVMに移動させ、1台のVMによりデータを処理させる。
【0073】
一方、クエリは、処理対象とするデータが複数である場合がある。例えば、データとして証券コードおよび株価がVMに配信され、クエリが証券コード毎に株価の一定期間の移動平均を求める処理を行う場合がある。図10Bは、クエリの移動の他の一例を示す図である。図10Bの例では、図10Bの左側に示すように、クエリは、データ1〜nが処理対象である。この場合、処理対象のデータ1〜n毎に、クエリを移動させる。例えば、処理の分散を行う場合、クエリを複製して他のVMに移動させ、処理対象のデータ1〜nをそれぞれ異なるVMにより処理させる。一方、処理負荷が低い場合などには、クエリを1台のVMに配置させ、処理対象のデータ1〜nを1台のVMにより処理させる。
【0074】
ここで、本実施例では、複数のクエリのそれぞれを複数のグループに分け、グループ毎に移動する。また、ルーティングテーブル50は、グループ毎に格納先を管理する。図11は、クエリのグループ分けの一例を示す図である。例えば、本実施例では、処理対象とする各データに、データを識別するキーが所定ビットの整数データとして含まれ、それぞれのクエリに処理の条件ごとに異なるキーが設定されている。この場合、処理の条件ごとに設定されたキーを用いて、キーから値を算出する所定の関数、例えば、ハッシュ関数によりハッシュ値を算出して、ハッシュ値が同一となるクエリを同一のグループとしてグループ分けする。例えば、処理の条件に設定されたキーを用いて、ハッシュ関数により算出されたハッシュ値が同一となるクエリを同一のグループとして静的にグループを分ける。図11の例は、クエリをグループ分けした各グループを「V−Node」とする場合を示す。そして、本実施例では、V−Node毎に、クエリをVMに配置する。なお、本実施例では、複数のクエリのそれぞれが異なるグループに分けられることとする。
【0075】
ルーティングテーブル50には、V−Node毎に配置先が登録される。例えば、ルーティングテーブル50は、V−Nodeの識別子が登録される項目と、配置先のVMのIPアドレスが登録される項目とを有する。
【0076】
サーバ20および各VMのエンジン51は、キーに基づいてクエリの配置先を判別する。例えば、サーバ20は、受信したデータに含まれるキーを用いてハッシュ関数によりハッシュ値を算出する。そして、サーバ20は、ルーティングテーブル50からV−Nodeの識別子が登録される項目に、算出したハッシュ値が登録されたレコードを検索する。続いて、サーバ20は、検索の結果、レコードが得られた場合、得られたレコードの配置先のVMのIPアドレスが登録される項目に登録されたIPアドレスを取得する。そして、サーバ20は、取得したIPアドレスを用いて、VMと通信を行う。
【0077】
上述したように、各VMは、負荷情報を管理サーバ40へ送信する。そして、後述するように、管理サーバ40が、各VMから送信された負荷情報に基づき、クエリを移動させるための指示(移動指示)を送信する。なお、本実施例では、V−Node単位でクエリの移動が行われる。管理サーバ40は、移動先のVM31のIPアドレスおよび移動対象のV−Nodeの識別子を含む移動指示を移動元のVMに送信する。移動指示を受信したVMのエンジン51は、移動対象のV−Nodeに属するクエリや当該クエリに付随するデータなどの処理要素をシリアライズして移動先のVMへ送信する。
【0078】
移動先のVMのエンジン51は、送信されたデータをデシリアライズして復元し、復元されたクエリの駆動を開始する。また、エンジン51は、ルーティングテーブル50の移動したV−Nodeに属するクエリの格納先を自身が動作するVMのIPアドレスに更新する。そして、エンジン51は、他のVM、サーバ20および管理サーバ40に対して移動対象のV−Nodeの識別子および移動先のVMのIPアドレスを含むルーティングテーブル更新指示を通知する。なお、管理サーバ40は、移動元および移動先のVMのIPアドレス、並びに、移動された処理要素の識別子など移動に関する各情報を把握しているため、管理サーバ40が、ルーティングテーブル更新指示を送信することもできる。
【0079】
各VM、サーバ20および管理サーバ40は、ルーティングテーブル更新指示が通知された場合、次のような処理を行う。すなわち、各VM、サーバ20および管理サーバ40は、ルーティングテーブル50の通知された移動対象のV−Nodeに属するクエリの格納先を、通知されたルーティングテーブル更新指示に含まれる移動先のVMのIPアドレスに更新する。
【0080】
図12は、管理サーバの構成の一例を示す図である。図12に示すように、管理サーバ40は、入力部41と、出力部42と、通信部43と、記憶部44と、制御部45とを有する。
【0081】
入力部41は、各種情報を制御部45に入力する。例えば、入力部41は、ユーザからの各種指示を受け付けて、受け付けた指示を制御部45に入力する。入力部41のデバイスの一例としては、マウスやキーボードなどのユーザの操作を受け付けるデバイスなどが挙げられる。
【0082】
出力部42は、各種の情報を出力する。例えば、出力部42は、VMの稼働状態などを表示する。出力部42のデバイスの一例としては、液晶ディスプレイなどが挙げられる。
【0083】
通信部43は、各装置間の通信を行うためのインターフェースである。例えば、通信部43は、ネットワーク99に接続される。これにより、管理サーバ40と、サーバ20、各VMとが通信を行うことができる。例えば、通信部43は、ネットワーク99を介して、VMから通信回数情報37を受信した場合には、受信した通信回数情報37を制御部45に送信する。また、通信部43は、ネットワーク99を介して、VMから負荷情報38を受信した場合には、受信した負荷情報38を制御部45へ送信する。
【0084】
記憶部44は、各種情報を記憶する。例えば、記憶部44は、上述したルーティングテーブル50、通信回数情報37、負荷情報38、移動指示リスト46を記憶する。
【0085】
通信回数情報37は、VMから送信された情報であり、後述の取得部45bによりVMから取得され、記憶部44に格納される。負荷情報38は、VMから送信された情報であり、後述の取得部45bによりVMから取得され、記憶部44に格納される。
【0086】
移動指示リスト46には、移動対象の処理要素の識別子、移動元のVMのIPアドレス、移動先のVMのIPアドレスが後述の決定部45dにより登録される。図13は、移動指示リストのデータ構造の一例を示す図である。図13の例では、移動指示リスト46は、移動対象の処理要素の識別子が登録される「処理要素」の項目46a、移動元のVMのIPアドレスが登録される「移動元」の項目46b、移動先のVMのIPアドレスが登録される「移動先」の項目46cを有する。
【0087】
記憶部44は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部44は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
【0088】
制御部45は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図12に示すように、制御部45は、初期配置部45aと、取得部45bと、特定部45cと、決定部45dと、配置制御部45eとを有する。
【0089】
初期配置部45aは、クエリグラフに基づいて、既知の技術を用いて、複数のVMにクエリを配置する。また、初期配置部45aは、クエリグラフを各VMに送信する。また、初期配置部45aは、各VMに、各VMが実行する処理が設定されたクエリを通知する。また、初期配置部45aは、各VMに、処理の処理結果の送信先のVMのIPアドレスを送信する。
【0090】
取得部45bは、各種情報を取得する。例えば、取得部45bは、複数のVMにおいて処理が実行された複数のクエリについて、クエリ間の通信回数を示す通信回数情報37を取得する。
【0091】
具体例を挙げて説明する。取得部45bは、通信部43を介して、VMから送信された通信回数情報37を受信することで、通信回数情報37を取得する。通信回数情報37を取得した場合には、取得部45bは、取得した通信回数情報37を記憶部44に格納する。また、取得部45bは、通信部43を介して、VMから送信された負荷情報38を受信することで、負荷情報38を取得する。負荷情報38を取得した場合には、取得部45bは、取得した負荷情報38を記憶部44に格納する。また、取得部45bは、記憶部44に記憶された通信回数情報37、負荷情報38を取得する。
【0092】
特定部45cは、各種情報を特定する。例えば、特定部45cは、取得部45bにより取得された通信回数情報が示す通信回数に基づいて、クエリの組を特定する。
【0093】
具体例を挙げて説明する。まず、特定部45cは、取得部45bにより取得された負荷情報38を用いて、VMごとに、処理要素ごとの負荷の和を算出し、各VMの負荷を算出する。続いて、特定部45cは、算出した各VMの負荷を用いて、全VMの負荷の平均値Aveを算出する。その後、特定部45cは、負荷が閾値α以上のVMがあるか否かを判定する。
【0094】
図14は、実施例3に係る管理サーバが実行する処理の一例を説明するための図である。図14の例は、5つのVM31a〜35aのそれぞれの負荷を示す。横軸は、VMを示し、縦軸は、VMの負荷を示す。また、VMの中の「High」は、負荷が第一の閾値を超えた高負荷である処理要素を示す。また、VMの中の「Middle」は、負荷が第一の閾値以下で、かつ、第一の閾値より小さい第二の閾値を超えた中負荷である処理要素を示す。また、VMの中の「Low」は、負荷が第二の閾値以下である小負荷である処理要素を示す。図14の例では、閾値αは、上限の負荷の警戒値である。また、図14の例では、閾値βは、閾値αよりも小さく、下限の負荷の警戒値である。図14の例では、VM31aの負荷が閾値αを超えているため、特定部45cは、負荷が閾値α以上のVMがあると判定する。
【0095】
負荷が閾値α以上のVMがある場合には、特定部45cは、負荷が閾値α以上の全てのVMを移動元のVMの候補とする。例えば、図14の例では、特定部45cは、負荷が閾値α以上のVM31aを移動元のVMの候補とする。
【0096】
そして、特定部45cは、負荷が平均値Ave未満の全てのVMを移動先のVMの候補とする。例えば、図14の例では、負荷が平均値Ave未満のVM35aを移動先のVMの候補とする。
【0097】
そして、特定部45cは、下記の処理で、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したか否かを判定する。検証していない場合には、特定部45cは、下記の処理で、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたVMに移動することが移動指示リスト46に登録済みであるか否かを判定する。
【0098】
登録されていない場合には、特定部45cは、下記の処理で、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがない場合には、特定部45cは、移動先のVMの候補の全VMを未選択とする。そして、特定部45cは、以降の処理を行う。一方、未選択のVMがある場合には、特定部45cは、移動元のVMの候補の中から、未選択のVMを1つ選択する。
【0099】
そして、特定部45cは、下記の処理で、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがない場合には、特定部45cは、移動先のVMの候補の全VMを未選択とする。そして、特定部45cは、上述した、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したか否かの判定を再び行う。そして、特定部45cは、以降の処理を行う。一方、未選択のVMがある場合には、特定部45cは、移動先のVMの候補の中から、未選択のVMを1つ選択する。
【0100】
続いて、特定部45cは、下記の処理で、クエリの組が特定されたか否かを判定する。クエリの組が特定されていない場合には、特定部45cは、取得部45bにより取得された通信回数情報37を用いて、通信回数が最大のクエリの組を特定する。例えば、図7Dの例に示す通信回数情報37を用いた場合には、特定部45cは、通信回数が10回であるクエリQ1とクエリQ3との組を選択する。
【0101】
そして、特定部45cは、特定した組の数は複数であるか否かを判定する。複数である場合には、予め管理サーバ40に与えられたクエリグラフを参照し、特定した組ごとに、クエリ間の距離を算出する。例えば、図5の例に示すクエリグラフ70において、特定部45cがクエリQ1とクエリQ2との組、および、クエリQ1とクエリQ3との組の2つの組を特定した場合について説明する。この場合、特定部45cは、クエリグラフ70上で、クエリQ1とクエリQ2との距離、および、クエリQ1とクエリQ3との距離を算出する。なお、図5の例では、クエリグラフ70上で、クエリQ1とクエリQ2との距離のほうが、クエリQ1とクエリQ3との距離よりも小さい。すなわち、クエリQ1とクエリQ2との距離のほうが、クエリQ1とクエリQ3との距離よりも近い。
【0102】
続いて、特定部45cは、算出した距離が最も近いクエリの組の数が複数であるか否かを判定する。図5の例では、特定部45cは、算出した距離が最も近いクエリQ1とクエリQ2との組の数は、1つなので、算出した距離が最も近いクエリの組の数が複数ではないと判定する。
【0103】
算出した距離が最も近いクエリの組の数が複数である場合には、特定部45cは、算出した距離が最も近いクエリの複数の組のうち、クエリを含む処理要素の負荷の合計が最も小さいクエリの組を特定する。また、算出した距離が最も近いクエリの組の数が複数でない場合には、特定部45cは、特定した複数の組の中から、距離が最も近いクエリの組を特定する。
【0104】
決定部45dは、各種情報を決定する。例えば、決定部45dは、特定部45cにより特定されたクエリの組を同一のVMに配置することを決定する。
【0105】
具体例を挙げて説明する。まず、決定部45dは、特定部45cにより特定されたクエリの組について、一方のクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のVMに配置されたクエリであるか否かを判定する。一方のクエリが、新たに選択された移動元のVMに配置されたクエリでないか、または、他方のクエリが、新たに選択された移動先のVMに配置されたクエリでない場合には、上述した、移動先のVMの候補のうち、未選択のVMがあるか否かの判定を行う。そして、以降の処理を行う。
【0106】
一方、あるクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他のクエリが、新たに選択された移動先のVMに配置されたクエリである場合には、決定部45dは、新たに選択された移動先のVMに、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素を移動させた場合の負荷Yを算出する。すなわち、決定部45dは、移動先のVMの負荷に、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素の負荷を加えた値を、負荷Yとして算出する。
【0107】
そして、決定部45dは、算出した負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きいか否かを判定する。算出した負荷Yの値が平均値Ave以上であるか、または、負荷Yの値が閾値β以下である場合には、上述した、移動先のVMの候補のうち、未選択のVMがあるか否かの判定を行う。そして、以降の処理を行う。一方、負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きい場合には、決定部45dは、次のような処理を行う。すなわち、決定部45dは、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素を、移動元のVMから、新たに選択された移動先のVMへ移動することを決定する。
【0108】
このように、本実施例に係る管理サーバ40は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。よって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ40によれば、通信回数の増加を抑制することができる。
【0109】
また、本実施例に係る管理サーバ40は、複数のクエリと呼ばれる処理要求文を連携してイベントを実行する処理要求文が1以上配置された複数の装置が実行した処理要求文間の通信回数を示す情報を取得する。そして、管理サーバ40は、通信回数に基づいて、処理要求文の組を特定する。続いて、管理サーバ40は、特定された処理要求文の組を同一の装置に配置するための装置を決定する。よって、この決定に基づき2つの処理要求文が同一のVMへ配置された場合には、2つの処理要求文が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ40によれば、通信回数の増加を抑制することができる。
【0110】
また、本実施例に係る管理サーバ40によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0111】
また、本実施例に係る管理サーバ40によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0112】
そして、決定部45dは、移動が決定された処理要素の識別子と、移動元のVMのIPアドレスと、移動先のVMのIPアドレスとを対応付けて、移動指示リスト46に登録することにより、移動指示リスト46を更新する。続いて、決定部45dは、移動が決定された処理要素の移動元のVMを、移動元のVMの候補から外すとともに、移動先のVMを、移動先のVMの候補から外す。
【0113】
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とする。その後、決定部45dは、上述した、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたVMに移動することが移動指示リスト46に登録済みであるか否かの判定を再び行い、そして、以降の処理を行う。
【0114】
また、特定部45cにより、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したと判定された場合には、決定部45dは、移動元のVMの候補の全VMを未選択とする。そして、決定部45dは、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがある場合には、移動元のVMの候補の中から、未選択のVMを1つ選択する。
【0115】
その後、決定部45dは、変数Nに「1」を設定する。そして、決定部45dは、新たに選択された移動元のVMの処理要素のうち、N番目に負荷が高い処理要素を選択する。N=1である場合、図14の例では、決定部45dは、VM31aの処理要素のうち、1番目に負荷が高い一番上の「High」の処理要素を選択する。
【0116】
続いて、決定部45dは、下記の処理で、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがない場合には、決定部45dは、上述した、移動元のVMの候補のうち未選択のVMがあるか否かの判定を再び行い、以降の処理を続ける。一方、未選択のVMがある場合には、決定部45dは、移動先のVMの候補の中から、未選択のVMを1つ選択する。
【0117】
その後、決定部45dは、新たに選択された移動先のVMに、新たに選択されたN番目に負荷が高い処理要素を移動させた場合の負荷Y´を算出する。すなわち、決定部45dは、移動先のVMの負荷に、選択されたN番目に負荷が高い処理要素の負荷を加えた値を、負荷Y´として算出する。例えば、N=1である場合、図14の例では、決定部45dは、VM35aの負荷に、VM31aの処理要素のうち一番上の「High」の処理要素の負荷を加えた値を、負荷Y´として算出する。
【0118】
そして、決定部45dは、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きいか否かを判定する。算出した負荷Y´の値が平均値Ave以上であるか、または、負荷Y´の値が閾値β以下である場合には、決定部45dは、変数Nの値を1つインクリメントする。その後、決定部45dは、変数Nの値が、新たに選択された移動元のVMの処理要素の数Kを超えたか否かを判定する。変数Nの値が、処理要素の数Kを超えていない場合には、決定部45dは、新たに選択された移動元のVMの処理要素のうち、N番目に負荷が高い処理要素を特定する。N=2である場合、図14の例では、決定部45dは、VM31aの処理要素のうち、2番目に負荷が高い一番下の「High」の処理要素を選択する。そして、決定部45dは、上述した、新たに選択された移動先のVMに、新たに選択されたN番目に負荷が高い処理要素を移動させた場合の負荷Yを算出する処理を再び行い、以降の処理を続ける。
【0119】
一方、変数Nの値が、処理要素の数Kを超えた場合には、決定部45dは、上述した、移動先のVMの候補のうち未選択のVMがあるか否かの判定を再び行い、以降の処理を続ける。
【0120】
また、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きい場合には、決定部45dは、次のような判定を行う。すなわち、決定部45dは、新たに選択されたN番目に負荷が高い処理要素を、新たに選択された移動元のVMから、新たに選択された移動先のVMへ移動することを決定する。
【0121】
このように、本実施例に係る管理サーバ40によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0122】
そして、決定部45dは、移動が決定された処理要素の識別子と、移動元のVMのIPアドレスと、移動先のVMのIPアドレスとを対応付けて、移動指示リスト46に登録することにより、移動指示リスト46を更新する。続いて、決定部45dは、移動が決定された処理要素の移動元のVMを、移動元のVMの候補から外すとともに、移動先のVMを、移動先のVMの候補から外す。
【0123】
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とする。その後、決定部45dは、上述した、移動元のVMの候補のうち未選択のVMがあるか否かの判定を再び行い、以降の処理を続ける。
【0124】
配置制御部45eは、処理要素の配置を制御する。例えば、配置制御部45eは、決定部45dによる処理要素の配置の決定結果に基づいて、特定部45cにより特定されたクエリの組が同一のVMに配置されるように制御する。
【0125】
具体例を挙げて説明する。配置制御部45eは、まず、記憶部44から移動指示リスト46を取得する。そして、配置制御部45eは、前回取得した内容と比較して、移動指示リスト46に、新たに追加された内容があるか否かを判定する。新たに追加された内容がある場合には、配置制御部45eは、新たに追加されたレコードの「移動元」の項目に登録されたIPアドレスを用いて、次のような処理を行う。すなわち、配置制御部45eは、移動元に、レコードの「処理要素」の項目に登録された識別子が示す処理要素を、レコードの「移動先」の項目に登録されたIPアドレスが示す移動先に移動させる指示(移動指示)を送信する。これにより、移動元のVMは、移動先のVMに移動対象の処理要素を送信して、処理要素を移動させる。例えば、新たに追加されたレコードに、「移動元」および「移動先」の各項目に、特定したクエリの組のそれぞれが配置されたVMのIPアドレスが登録されている場合には、配置制御部45eは、クエリの組を1つのVMに配置するように制御することができる。続いて、配置制御部45eは、VM、サーバ20および管理サーバ40に対して移動対象のV−Nodeの識別子および移動先のVMのIPアドレスを含むルーティングテーブル更新指示を送信する。
【0126】
制御部45は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。
【0127】
次に、本実施例に係る管理サーバ40が実行する各処理の流れを説明する。図15は、取得処理の手順を示すフローチャートである。この取得処理は、例えば、VMからのデータを受信したタイミングで実行される。
【0128】
図15に示すように、取得部45bは、受信したデータが、通信回数情報37であるか否かを判定する(S101)。通信回数情報37である場合(S101肯定)には、取得部45bは、受信した通信回数情報37を取得し、取得した通信回数情報37を記憶部44に格納し(S102)、処理を終了する。一方、通信回数情報37でない場合(S101否定)には、取得部45bは、負荷情報38であるか否かを判定する(S103)。負荷情報38である場合(S103肯定)には、取得部45bは、受信した負荷情報38を取得し、取得した負荷情報38を記憶部44に格納し(S104)、処理を終了する。また、負荷情報38でない場合(S103否定)にも、処理を終了する。
【0129】
図16〜18は、決定処理の手順を示すフローチャートである。この決定処理は、所定間隔ごとに実行される。
【0130】
図16〜18に示すように、取得部45bは、記憶部44から負荷情報38を取得する(S201)。特定部45cは、取得部45bにより取得された負荷情報38を用いて、VMごとに、処理要素ごとの負荷の和を算出し、各VMの負荷を算出する(S202)。続いて、特定部45cは、算出した各VMの負荷を用いて、全VMの負荷の平均値Aveを算出する(S203)。その後、特定部45cは、負荷が閾値α以上のVMがあるか否かを判定する(S204)。
【0131】
負荷が閾値α以上のVMがない場合(S204否定)には、処理を終了する。一方、負荷が閾値α以上のVMがある場合(S204肯定)には、特定部45cは、負荷が閾値α以上の全てのVMを移動元のVMの候補とする(S205)。
【0132】
そして、特定部45cは、負荷が平均値Ave未満の全てのVMを移動先のVMの候補とする(S206)。続いて、特定部45cは、下記の処理で、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したか否かを判定する(S207)。検証していない場合(S207否定)には、特定部45cは、下記のS225の処理で、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたVMに移動することが移動指示リスト46に登録済みであるか否かを判定する(S208)。
【0133】
登録されている場合(S208肯定)には、S229へ進む。登録されていない場合(S208否定)には、特定部45cは、下記のS210の処理において、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する(S209)。未選択のVMがない場合(S209否定)には、S212へ進む。一方、未選択のVMがある場合(S209肯定)には、特定部45cは、移動元のVMの候補の中から、未選択のVMを1つ選択する(S210)。
【0134】
そして、特定部45cは、下記のS212の処理において、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する(S211)。未選択のVMがない場合(S211否定)には、特定部45cは、移動先のVMの候補の全VMを未選択とする(S212)。そして、S207へ戻る。一方、未選択のVMがある場合(S211肯定)には、特定部45cは、移動元のVMの候補の中から、未選択のVMを1つ選択する(S213)。
【0135】
続いて、特定部45cは、下記のS216、S220、S221のいずれかの処理で、クエリの組が特定されたか否かを判定する(S214)。クエリの組が特定された場合(S214肯定)には、S222へ進む。一方、クエリの組が特定されていない場合(S214否定)には、取得部45bは、記憶部44から通信回数情報37を取得する(S215)。そして、特定部45cは、取得部45bにより取得された通信回数情報37を用いて、通信回数が最大のクエリの組を特定する(S216)。
【0136】
続いて、特定部45cは、特定した組の数は複数であるか否かを判定する(S217)。複数でない場合(S217否定)には、S222へ進む。一方、複数である場合(S217肯定)には、特定部45cは、予め管理サーバ40に与えられたクエリグラフを参照し、特定した組ごとに、クエリ間の距離を算出する(S218)。
【0137】
続いて、特定部45cは、算出した距離が最も近いクエリの組の数が複数であるか否かを判定する(S219)。
【0138】
算出した距離が最も近いクエリの組の数が複数である場合(S219肯定)には、特定部45cは、算出した距離が最も近いクエリの複数の組のうち、クエリを含む処理要素の負荷の合計が最も小さいクエリの組を特定し(S221)、S222へ進む。また、算出した距離が最も近いクエリの組の数が複数でない場合(S219否定)には、特定部45cは、特定した複数の組の中から、距離が最も近いクエリの組を特定し(S220)、S222へ進む。
【0139】
決定部45dは、特定部45cにより特定されたクエリの組について、一方のクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のVMに配置されたクエリであるか否かを判定する(S222)。一方のクエリが、新たに選択された移動元のVMに配置されたクエリでないか、または、他方のクエリが、新たに選択された移動先のVMに配置されたクエリでない場合(S222否定)には、S211に戻る。
【0140】
また、一方のクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のVMに配置されたクエリである場合(S222肯定)には、決定部45dは、次のような処理を行う。すなわち、決定部45dは、新たに選択された移動先のVMに、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素を移動させた場合の負荷Yを算出する(S223)。
【0141】
そして、決定部45dは、算出した負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きいか否かを判定する(S224)。算出した負荷Yの値が平均値Ave以上であるか、または、負荷Yの値が閾値β以下である場合(S224否定)には、S211に戻る。一方、負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きい場合(S224肯定)には、決定部45dは、次のような処理を行う。すなわち、決定部45dは、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素を、移動元のVMから、新たに選択された移動先のVMへ移動することを決定し、移動指示リスト46を更新する(S225)。続いて、決定部45dは、移動が決定された処理要素の移動元のVMを、移動元のVMの候補から外すとともに、移動先のVMを、移動先のVMの候補から外す(S226)。
【0142】
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とし(S227)、S208へ戻る。
【0143】
また、特定部45cにより、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したと判定された場合(S207肯定)には、決定部45dは、次のような処理を行う。すなわち、決定部45dは、移動元のVMの候補の全VMを未選択とする(S228)。そして、決定部45dは、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する(S229)。未選択のVMがない場合(S229否定)には、処理を終了する。一方、未選択のVMがある場合(S229肯定)には、移動元のVMの候補の中から、未選択のVMを1つ選択する(S230)。
【0144】
その後、決定部45dは、変数Nに「1」を設定する(S231)。そして、決定部45dは、新たに選択された移動元のVMの処理要素のうち、N番目に負荷が高い処理要素を選択する(S232)。
【0145】
続いて、決定部45dは、下記のS234の処理で、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する(S233)。未選択のVMがない場合(S233否定)には、S229へ戻る。一方、未選択のVMがある場合(S233肯定)には、決定部45dは、移動先のVMの候補の中から、未選択のVMを1つ選択する(S234)。
【0146】
その後、決定部45dは、新たに選択された移動先のVMに、新たに選択されたN番目に負荷が高い処理要素を移動させた場合の負荷Y´を算出する(S235)。
【0147】
そして、決定部45dは、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きいか否かを判定する(S236)。算出した負荷Y´の値が平均値Ave以上であるか、または、負荷Y´の値が閾値β以下である場合(S236否定)には、決定部45dは、変数Nの値を1つインクリメントする(S237)。その後、決定部45dは、変数Nの値が、新たに選択された移動元のVMの処理要素の数Kを超えたか否かを判定する(S238)。変数Nの値が、処理要素の数Kを超えていない場合(S238否定)には、決定部45dは、新たに選択された移動元のVMの処理要素のうち、N番目に負荷が高い処理要素を特定し(S239)、S235へ戻る。
【0148】
一方、変数Nの値が、処理要素の数Kを超えた場合(S238肯定)には、S233へ戻る。
【0149】
また、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きい場合(S236肯定)には、決定部45dは、次のような判定を行う。すなわち、決定部45dは、新たに選択されたN番目に負荷が高い処理要素を、新たに選択された移動元のVMから、新たに選択された移動先のVMへ移動することを決定し、移動指示リスト46を更新する(S240)。続いて、決定部45dは、移動が決定された処理要素の移動元のVMを、移動元のVMの候補から外すとともに、移動先のVMを、移動先のVMの候補から外す(S241)。
【0150】
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とし(S242)、S229へ戻る。
【0151】
図19は、配置制御処理の手順を示すフローチャートである。この配置制御処理は、所定間隔ごとに実行される。
【0152】
図19に示すように、配置制御部45eは、記憶部44から移動指示リスト46を取得する(S301)。そして、配置制御部45eは、前回取得した内容と比較して、移動指示リスト46に、新たに追加された内容があるか否かを判定する(S302)。新たに追加された内容がある場合(S302肯定)には、配置制御部45eは、新たに追加されたレコードの「移動元」の項目に登録されたIPアドレスを用いて、次のような処理を行う。すなわち、配置制御部45eは、移動元に、レコードの「処理要素」の項目に登録された識別子が示す処理要素を、レコードの「移動先」の項目に登録されたIPアドレスが示す移動先に移動させる指示(移動指示)を送信する(S303)。続いて、配置制御部45eは、VM、サーバ20および管理サーバ40に対して移動対象のV−Nodeの識別子および移動先のVMのIPアドレスを含むルーティングテーブル更新指示を送信し(S304)、処理を終了する。また、新たに追加された内容がない場合(S302否定)にも、処理を終了する。
【0153】
上述してきたように、本実施例に係る管理サーバ40は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ40によれば、通信回数の増加を抑制することができる。
【0154】
また、本実施例に係る管理サーバ40によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0155】
また、本実施例に係る管理サーバ40によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【実施例4】
【0156】
実施例4について説明する。実施例4では、全VMの処理要素の負荷の平均値が閾値αを超えた場合には、クエリを配置させるVMの台数を増やす場合について説明する。
【0157】
図20は、実施例4に係る管理サーバの構成を示すブロック図である。図20に示すように、管理サーバ80の制御部45は、図12に示す実施例3に係る制御部45に比較して、特定部45c、決定部45dに代えて特定部81c、決定部81dを有する点が異なる。なお、以下では、上記の実施例3などと同様の機能を果たす各部については図12などと同様の符号を付し、その説明は省略する。
【0158】
図21は、実施例4に係る管理サーバが実行する処理の一例を説明するための図である。図21の例は、5つのVM31a〜35aのそれぞれの負荷を示す。横軸は、VMを示し、縦軸は、VMの負荷を示す。また、VMの中の「High」は、負荷が第一の閾値を超えた高負荷である処理要素を示す。また、VMの中の「Middle」は、負荷が第一の閾値以下で、かつ、第一の閾値より小さい第二の閾値を超えた中負荷である処理要素を示す。また、VMの中の「Low」は、負荷が第二の閾値以下である小負荷である処理要素を示す。図21の例では、閾値αは、上限の負荷の警戒値である。また、図21の例では、閾値βは、閾値αよりも小さく、下限の負荷の警戒値である。図21の例では、5つのVMの負荷の平均値Aveが閾値αを超えている。そこで、図21の例では、VMの台数を2台(VM31b、VM32b)増やして、増やした2台のVM31b,32bに、処理要素を移動させて、合計7台のVMの負荷の平均値Aveが、予め定められた値WCとなるように、管理サーバ80は制御する。
【0159】
特定部81cは、実施例3に係る特定部45cと比較して、下記の点が異なる。まず、特定部81cは、全VMの負荷の合計Tを算出する。また、特定部45cでは、負荷が閾値α以上のVMがあるか否かの判定を行っていたが、特定部81cは、この判定に代えて、平均値Aveが閾値α以上であるか否かの判定を行う。例えば、図21の例では、5台のVMの負荷の平均値Aveが閾値αを超えているので、特定部81cは、この場合には、平均値Aveが閾値α以上であると判定する。
【0160】
また、特定部81cは、平均値Aveが閾値α以上である場合には、算出した全VMの負荷の合計Tを、予め定められた値WCで除した値(T/WC)を算出する。なお、値(T/WC)は、平均のVMの負荷をWCとする場合のVMの台数を示す。そして、特定部81cは、負荷がWCの場合におけるVMの台数(T/WC)から、現在のVMの台数Sを減じた値ΔS(=(T/WC)−S)を算出して、増加させるVMの台数を算出する。
【0161】
また、特定部45cでは、負荷が平均値Ave未満の全てのVMを移動先のVMの候補とするが、特定部81cは、このような移動先のVMの候補の選出に代えて、ΔS分の台数の新規の全てのVMを移動先のVMの候補とする。例えば、図21の例では、特定部81cは、ΔS=2(7−5)台分の台数の新規の全てのVM31b,32bを移動先のVMの候補とする。
【0162】
決定部81dは、実施例3に係る決定部45dと比較して、下記の点が異なる。決定部45dでは、算出した負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きいか否かの判定を行うが、決定部81dは、この判定に代えて、次のような処理を行う。すなわち、決定部81dは、算出した負荷Yの値がWCより小さく、かつ、負荷Yの値が閾値βより大きいか否かを判定する。また、決定部45dでは、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きいか否かの判定を行うが、決定部81dは、この判定に代えて、次のような処理を行う。すなわち、決定部81dは、算出した負荷Y´の値がWCより小さく、かつ、負荷Y´の値が閾値βより大きいか否かを判定する。これにより、移動先のVMにおいて、処理要素が移動された場合の負荷を、WCより小さく、かつ、閾値βより大きくすることができる。また、VMの平均の負荷がWCとなるようなVMの台数を決定することができる。
【0163】
また、本実施例に係る管理サーバ80は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ80によれば、通信回数の増加を抑制することができる。
【0164】
また、本実施例に係る管理サーバ80によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0165】
また、本実施例に係る管理サーバ80によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0166】
次に、本実施例に係る管理サーバ80が実行する各処理の流れを説明する。取得処理、配置制御処理については、実施例3と同様であるので説明を省略し、実施例4に係る決定処理について説明する。図22〜24は、実施例4に係る決定処理の手順を示すフローチャートである。この決定処理は、所定間隔ごとに実行される。なお、実施例3と同様の処理については、同一の符号を付して説明する。
【0167】
図22〜24に示すように、特定部81cは、S202の次に、全VMの負荷の合計Tを算出する(S401)。また、特定部81cは、S203の次に、S204に代えて、平均値Aveが閾値α以上であるか否かを判定する(S402)。
【0168】
平均値Aveが閾値α以上でない場合(S402否定)には、処理を終了する。一方、平均値Aveが閾値α以上である場合(S402肯定)には、特定部81cは、算出した全VMの負荷の合計Tを、予め定められた値WCで除した値(T/WC)を算出する(S403)。そして、特定部81cは、負荷がWCの場合におけるVMの台数(T/WC)から、現在のVMの台数Sを減じた値ΔS(=(T/WC)−S)を算出して、増加させるVMの台数を算出する(S404)。
【0169】
また、特定部81cは、S205の次に、S206に代えて、ΔS分の台数の新規の全てのVMを移動先のVMの候補とする(S405)。
【0170】
また、決定部81dは、S224に代えて、算出した負荷Yの値がWCより小さく、かつ、負荷Yの値が閾値βより大きいか否かを判定する(S406)。また、決定部81dは、S236に代えて、算出した負荷Y´の値がWCより小さく、かつ、負荷Y´の値が閾値βより大きいか否かを判定する(S407)。
【0171】
上述してきたように、本実施例に係る管理サーバ80は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ80によれば、通信回数の増加を抑制することができる。
【0172】
また、本実施例に係る管理サーバ80によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0173】
また、本実施例に係る管理サーバ80によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0174】
また、本実施例に係る管理サーバ80によれば、移動先のVMにおいて、処理要素が移動された場合の負荷を、WCより小さく、かつ、閾値βより大きくすることができる。
【0175】
また、本実施例に係る管理サーバ80によれば、VMの平均の負荷がWCとなるようなVMの台数を決定することができる。
【実施例5】
【0176】
実施例5について説明する。実施例5では、全VMの処理要素の負荷の平均値が閾値βより小さい場合には、クエリを配置させるVMの台数を減らす場合について説明する。
【0177】
図25は、実施例5に係る管理サーバの構成を示すブロック図である。図25に示すように、管理サーバ82の制御部45は、図20に示す実施例4に係る制御部45に比較して、特定部81c、決定部81dに代えて特定部83c、決定部83dを有する点が異なる。なお、以下では、上記の各実施例と同様の機能を果たす各部については同様の符号を付し、その説明を省略する。
【0178】
図26は、実施例5に係る管理サーバが実行する処理の一例を説明するための図である。図26の例は、5つのVM31a〜35aのそれぞれの負荷を示す。横軸は、VMを示し、縦軸は、VMの負荷を示す。また、VMの中の「High」は、負荷が第一の閾値を超えた高負荷である処理要素を示す。また、VMの中の「Middle」は、負荷が第一の閾値以下で、かつ、第一の閾値より小さい第二の閾値を超えた中負荷である処理要素を示す。また、VMの中の「Low」は、負荷が第二の閾値以下である小負荷である処理要素を示す。図26の例では、閾値αは、上限の負荷の警戒値である。また、図26の例では、閾値βは、閾値αよりも小さく、下限の負荷の警戒値である。図26の例では、5つのVMの負荷の平均値Aveが閾値βよりも小さい。そこで、図26の例では、まず、クエリを配置させるVMの台数を2台(VM34a、VM35a)減らす。そして、残ったVMのうち負荷がWC未満の全てのVM(VM32a、VM33a)に、減らした2台のVM34a,35aの処理要素を移動させて、合計3台のVMの負荷の平均値Aveが、予め定められた値WCとなるように、管理サーバ82は制御する。
【0179】
特定部83cは、実施例4に係る特定部81cと比較して、下記の点が異なる。まず、特定部81cでは、平均値Aveが閾値α以上であるか否かの判定を行われていたが、特定部83cは、平均値Aveが閾値βより小さいか否かを判定する。例えば、図26の例では、5台のVMの負荷の平均値Aveが閾値βより小さいので、特定部83cは、この場合には、平均値Aveが閾値βより小さいと判定する。
【0180】
また、特定部81cでは、ΔS(=(T/WC)−S)を算出して、増加させるVMの台数を算出するが、特定部83cは、ΔSの算出に代えて、減らすVMの台数ΔS´(=S−(T/WC))を算出する。
【0181】
また、特定部81cでは、負荷が閾値α以上の全てのVMを移動元のVMの候補とするが、特定部83cは、全てのVMのうち、負荷が低い方からΔS´の値が示す台数分のVMを移動元のVMの候補とする。例えば、図26の例では、特定部83cは、ΔS´=2(5−3)台分の台数の負荷が低いVM34a,35aを移動元のVMの候補とする。
【0182】
また、特定部81cでは、ΔSの値が示す台数分の台数の新規の全てのVMを移動先の候補とするが、特定部83cは、減らす対象でないVM、すなわち、残りのVMのうち、負荷がWC未満の全てのVMを移動先のVMの候補とする。例えば、図26の例では、特定部83cは、残りのVM31a〜33aのうち、負荷がWC未満の全てのVM32a、VM33aを移動元のVMの候補とする。これにより、VMの平均の負荷がWCとなるようなVMの台数を決定することができる。また、移動先のVMにおいて、処理要素が移動された場合の負荷を、WCより小さく、かつ、閾値βより大きくすることができる。
【0183】
また、本実施例に係る管理サーバ82は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ82によれば、通信回数の増加を抑制することができる。
【0184】
また、本実施例に係る管理サーバ82によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0185】
また、本実施例に係る管理サーバ82によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0186】
次に、本実施例に係る管理サーバ82が実行する各処理の流れを説明する。取得処理、配置制御処理については、実施例4と同様であるので説明を省略し、実施例5に係る決定処理について説明する。図27〜29は、実施例5に係る決定処理の手順を示すフローチャートである。この決定処理は、所定間隔ごとに実行される。なお、実施例3や実施例4と同様の処理については、同一の符号を付して説明する。
【0187】
図27〜29に示すように、特定部83cは、S203の次に、S402に代えて、平均値Aveが閾値βより小さいか否かを判定する(S501)。
【0188】
また、特定部83cは、S403の次に、S404に代えて、現在のVMの台数Sから、負荷がWCの場合におけるVMの台数(T/WC)を減じた値ΔS´(=S−(T/WC))を算出して、増加させるVMの台数を算出する(S502)。そして、特定部83cは、S205に代えて、全てのVMのうち、負荷が低い方からΔS´の値が示す台数分のVMを移動元のVMの候補とする(S503)。続いて、特定部83cは、S405に代えて、残りのVMのうち、負荷がWC未満の全てのVMを移動先のVMの候補とする(S504)。
【0189】
上述してきたように、本実施例に係る管理サーバ82は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ82によれば、通信回数の増加を抑制することができる。
【0190】
また、本実施例に係る管理サーバ82によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
【0191】
また、本実施例に係る管理サーバ82によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
【0192】
また、本実施例に係る管理サーバ82によれば、移動先のVMにおいて、処理要素が移動された場合の負荷を、WCより小さく、かつ、閾値βより大きくすることができる。
【0193】
また、本実施例に係る管理サーバ82によれば、VMの平均の負荷がWCとなるようなVMの台数を決定することができる。
【0194】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【0195】
まず、上述した各実施例の変形例について説明する。例えば、CEPシステム内においてクエリを配置することが可能な複数の装置のうち、特定の装置のみ実行可能なクエリがある。そこで、この場合に、このクエリを含む処理要素を、他の装置に配置しないように管理サーバが制御する変形例について説明する。上述した各実施例の変形例における管理サーバは、特定の装置に配置された該当クエリの移動が不可であることを示す第一の不可情報を記憶部に格納する。そして、変形例における特定部や決定部などは、移動元の装置の候補が選出された後に、記憶部に第一の不可情報があるか否かを判定し、第一の不可情報がある場合には、第一の不可情報を参照する。続いて、変形例における特定部や決定部などは、第一の不可情報に該当する特定の装置が、移動元の装置の候補として選出された場合には、特定の装置を移動元の装置の候補から外す。なお、変形例における特定部や決定部は、移動元の装置の候補が選出される前に、第一の不可情報を参照し、第一の不可情報が示す特定の装置を、移動元の装置の候補に選出しないようにすることもできる。
【0196】
図30は、変形例に係る第一の除外処理の手順を示すフローチャートである。第一の除外処理は、例えば、移動元のVMの候補が選出された後に、決定処理の一部の処理として実行される。図30に示すように、変形例における特定部や決定部などは、記憶部を検索し、記憶部に第一の不可情報があるか否かを判定する(S601)。第一の不可情報がない場合(S601否定)には、決定処理を進める。一方、第一の不可情報がある場合(S601肯定)には、変形例における特定部や決定部などは、記憶部から第一の不可情報を取得し、取得した第一の不可情報に基づいて、移動元の装置の候補の中に、第一の不可情報が示す特定の装置があるか否かを判定する(S602)。
【0197】
移動元の装置の候補の中に、第一の不可情報が示す特定の装置がある場合(S602肯定)には、変形例における特定部や決定部などは、特定の装置を移動元の装置の候補から外し(S603)、決定処理を進める。また、移動元の装置の候補の中に、第一の不可情報が示す特定の装置がない場合(S602否定)にも、決定処理を進める。
【0198】
上述したように、変形例は、CEPシステム内においてクエリを配置することが可能な複数の装置のうち、特定の装置のみでしか実行できないクエリについては、クエリが配置された装置を移動元の装置の候補から外す。したがって、変形例によれば、移動元の装置の候補の台数が減るため、処理要素を移動させる際の処理コストが抑制される。また、変形例によれば、特定の装置のみでしか実行できないクエリを他の装置に移動させてしまう事象が発生することを抑制することができる。
【0199】
また、CEPシステム内において、複数のクエリのうち、特定のクエリしか実行できない装置がある。そこで、この場合に、この装置に、他の装置の処理要素を移動させないように管理サーバが制御する変形例について説明する。上述した各実施例の変形例における管理サーバは、特定のクエリしか実行できない装置に、他の装置からのクエリの移動が不可であることを示す第二の不可情報を記憶部に格納する。そして、変形例における特定部や決定部などは、移動先の装置の候補が選出された後に、記憶部に第二の不可情報があるか否かを判定し、第二の不可情報がある場合には、第二の不可情報を参照する。続いて、変形例における特定部や決定部などは、第二の不可情報に該当する装置が、移動先の装置の候補として選出された場合には、この装置を移動先の装置の候補から外す。なお、変形例における特定部や決定部は、移動先の装置の候補が選出される前に、第二の不可情報を参照し、第二の不可情報が示す装置を、移動先の装置の候補に選出しないようにすることもできる。
【0200】
図31は、変形例に係る第二の除外処理の手順を示すフローチャートである。第二の除外処理は、例えば、移動先のVMの候補が選出された後に、決定処理の一部の処理として実行される。図31に示すように、変形例における特定部や決定部などは、記憶部を検索し、記憶部に第二の不可情報があるか否かを判定する(S701)。第二の不可情報がない場合(S701否定)には、決定処理を進める。一方、第二の不可情報がある場合(S701肯定)には、変形例における特定部や決定部などは、記憶部から第二の不可情報を取得し、取得した第二の不可情報に基づいて、移動先の装置の候補の中に、第二の不可情報が示す装置があるか否かを判定する(S702)。
【0201】
移動先の装置の候補の中に、第二の不可情報が示す装置がある場合(S702肯定)には、変形例における特定部や決定部などは、この装置を移動先の装置の候補から外し(S703)、決定処理を進める。また、移動先の装置の候補の中に、第二の不可情報が示す装置がない場合(S702否定)にも、決定処理を進める。
【0202】
上述したように、変形例は、CEPシステム内において、複数のクエリのうち、特定のクエリしか実行できない装置については、移動先の装置の候補から外す。したがって、変形例によれば、移動先の装置の候補の台数が減るため、処理要素を移動させる際の処理コストが抑制される。また、変形例によれば、特定のクエリしか実行できない装置に、他の装置から他のクエリを移動させてしまう事象が発生することを抑制することができる。
【0203】
また、上記の各実施例では、VMが、クエリ間の通信回数を算出し、算出した通信回数を含む通信回数情報37を管理サーバに送信する場合について例示した。しかしながら、開示の装置は、これに限定されない。そこで、VMが、クエリの実行順序を示す順序情報を管理サーバに送信し、順序情報を受信した管理サーバがクエリ間の通信回数を算出し、算出した通信回数に基づいて、クエリの組を特定する変形例について説明する。
【0204】
図32は、変形例に係る管理サーバの構成の一例を示す図である。図32の例は、実施例5の変形例を示す。図32に示すように、管理サーバ86の制御部45は、算出部87を有する。変形例では、VMから送信された順序情報を取得部45bが取得し、取得した順序情報を記憶部44に格納する。そして、算出部87は、所定のタイミング、例えば、決定処理において、記憶部44に記憶された通信回数情報37が取得部45bにより取得される前に、記憶部44から順序情報を取得する。続いて、算出部87は、取得した順序情報が示すクエリの実行順序から、クエリの通信回数を算出する。その後、算出部87は、算出したクエリの通信回数分の値を該当項目に登録した通信回数情報37を記憶部44に格納する。
【0205】
図33は、変形例に係る算出処理の手順を示すフローチャートである。算出処理は、例えば、決定処理の一部の処理として、取得部により通信回数情報37が取得される前に実行される。図33に示すように、算出部87は、記憶部44から順序情報を取得する(S801)。続いて、算出部87は、取得した順序情報が示すクエリの実行順序から、クエリの通信回数を算出する(S802)。その後、算出部87は、算出したクエリの通信回数分の値を該当項目に登録した通信回数情報37を記憶部44に格納する(S803)。
【0206】
上述したように、変形例では、VMは、クエリの通信回数を算出することなく、クエリの実行順序を管理サーバに送信する。そして、変形例では、クエリの実行順序からクエリの通信回数を算出し、算出した通信回数を用いて、クエリの組を特定する。したがって、変形例によれば、VMの処理コストを抑制することができる。なお、上記では、実施例5の変形例について説明したが、実施例3および実施例4などについても、実施例5の変形例と同様の技術を取り入れることができる。
【0207】
また、上記の各実施例では、VMにクエリを配置した場合について説明したが、開示の装置は、物理サーバにクエリを配置して同様の処理を行うことができる。
【0208】
また、実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、本実施例において説明した各処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。
【0209】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。
【0210】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更できる。
【0211】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【0212】
[配置プログラム]
また、上記の実施例で説明した配置装置および管理サーバの各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、図34を用いて、上記の各実施例で説明した配置装置または管理サーバと同様の機能を有する配置プログラムを実行するコンピュータの一例を説明する。図34は、配置プログラムを実行するコンピュータを示す図である。
【0213】
図34に示すように、コンピュータ300は、CPU(Central Processing Unit)310、ROM(Read Only Memory)320、HDD(Hard Disk Drive)330、RAM(Random Access Memory)340を有する。これら310〜340の各符号が示す各機器は、バス350を介して接続される。
【0214】
ROM320には、OSなどの基本プログラムが記憶されている。また、HDD330には、上記の各実施例で示す初期配置部と、取得部と、算出部と、特定部と、決定部と、配置制御部と同様の機能を発揮する配置プログラムが予め記憶される。なお、配置プログラムについては、適宜分離しても良い。また、HDD330には、ルーティングテーブル、通信回数情報、負荷情報、移動指示リストが設けられる。これらルーティングテーブル、通信回数情報、負荷情報、移動指示リスト、順序情報は、上述したルーティングテーブル50、通信回数情報37、負荷情報38、移動指示リスト46、順序情報に対応する。
【0215】
そして、CPU310が、配置プログラムをHDD330から読み出して実行する。
【0216】
そして、CPU310は、ルーティングテーブル、通信回数情報、負荷情報、移動指示リストを読み出してRAM340に格納する。さらに、CPU310は、RAM340に格納されたルーティングテーブル、通信回数情報、負荷情報、移動指示リストを用いて、配置プログラムを実行する。なお、RAM340に格納される各データは、常に全てのデータがRAM330に格納されなくともよい。処理に用いられるデータがRAM340に格納されれば良い。
【0217】
なお、上記した配置プログラムについては、必ずしも最初からHDD330に記憶させておく必要はない。
【0218】
例えば、コンピュータ300に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」にプログラムを記憶させておく。そして、コンピュータ300がこれらからプログラムを読み出して実行するようにしてもよい。
【0219】
さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータ300に接続される「他のコンピュータ(またはサーバ)」などにプログラムを記憶させておく。そして、コンピュータ300がこれらからプログラムを読み出して実行するようにしてもよい。
【符号の説明】
【0220】
1 配置装置
1a 取得部
1b 特定部
1c 決定部
2 配置装置
2a 取得部
2b 算出部
2c 特定部
2d 決定部
【特許請求の範囲】
【請求項1】
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリ間の通信回数を示す情報を取得する取得部と、
前記取得部により取得された情報が示す通信回数に基づいて、クエリの組を特定する特定部と、
前記特定部により特定されたクエリの組を同一の装置に配置することを決定する決定部と、
を有することを特徴とする配置装置。
【請求項2】
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリが実行された順序を示す情報を取得する取得部と、
前記取得部により取得された情報に基づいて、クエリ間の通信回数を算出する算出部と、
前記算出部により算出された通信回数に基づいて、クエリの組を特定する特定部と、
前記特定部により特定されたクエリの組を同一の装置に配置することを決定する決定部と、
を有することを特徴とする配置装置。
【請求項3】
前記特定部は、前記通信回数が最も多いクエリの組を特定する
ことを特徴とする請求項1または2に記載の配置装置。
【請求項4】
前記決定部は、前記通信回数が同一となるクエリの組の数が複数である場合には、前記通信回数が同一となるクエリの組について、負荷が最も小さいクエリの組、または、前記複数のクエリの接続関係を示すクエリグラフ上におけるクエリ間の距離が最も小さいクエリの組を特定する
ことを特徴とする請求項3に記載の配置装置。
【請求項5】
前記決定部による決定結果に基づいて、前記特定部により特定されたクエリの組が同一の装置に配置されるように制御する配置制御部
をさらに有することを特徴とする請求項1〜4のいずれか1つに記載の配置装置。
【請求項6】
前記配置制御部は、前記特定部により特定されたクエリの組が、負荷が第一の閾値を超えた装置から、負荷が第二の閾値未満の装置に配置されるように制御する
ことを特徴とする請求項5に記載の配置装置。
【請求項7】
前記配置制御部は、前記複数の装置の負荷が第一の閾値を超えている場合には、前記特定部により特定されたクエリの組が、前記複数の装置以外の他の装置に配置されるように制御する
ことを特徴とする請求項5に記載の配置装置。
【請求項8】
前記配置制御部は、前記複数の装置の負荷が第二の閾値未満である場合には、前記特定部により特定されたクエリの組、および、前記複数の装置のうち負荷が第三の閾値を超えた装置に配置されたクエリが、前記複数の装置のうち、前記複数の装置の台数よりも少ない台数の装置に配置されるように制御する
ことを特徴とする請求項5に記載の配置装置。
【請求項9】
前記配置制御部は、前記複数のクエリのうち、前記特定部により特定されたクエリの組が示すいずれかのクエリが配置された装置が該クエリのみを実行する装置である場合には、当該装置を該クエリ以外のクエリの配置先の装置としないように制御する
ことを特徴とする請求項5に記載の配置装置。
【請求項10】
前記配置制御部は、前記特定部により特定されたクエリの組が示すいずれかのクエリが、前記複数の装置のうち当該クエリが配置された装置のみで実行可能である場合には、当該装置以外の他の装置へ当該クエリを配置しないように制御する
ことを特徴とする請求項5に記載の配置装置。
【請求項11】
前記取得部は、前記装置によりクエリの実行に伴って記録または集計された前記情報を取得する
ことを特徴とする請求項1〜10のいずれか1つに記載の配置装置。
【請求項12】
コンピュータに、
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリ間の通信回数を示す情報を取得し、
取得された情報が示す通信回数に基づいて、クエリの組を特定し、
特定されたクエリの組を同一の装置に配置することを決定する
各処理を実行させることを特徴とする配置プログラム。
【請求項13】
コンピュータに、
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリが実行された順序を示す情報を取得し、
取得された情報に基づいて、クエリ間の通信回数を算出し、
算出された通信回数に基づいて、クエリの組を特定し、
特定されたクエリの組を同一の装置に配置することを決定する
各処理を実行させることを特徴とする配置プログラム。
【請求項14】
コンピュータが実行する配置方法であって、
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリ間の通信回数を示す情報を取得し、
取得された情報が示す通信回数に基づいて、クエリの組を特定し、
特定されたクエリの組を同一の装置に配置することを決定する
各処理を実行することを特徴とする配置方法。
【請求項15】
コンピュータが実行する配置方法であって、
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリが実行された順序を示す情報を取得し、
取得された情報に基づいて、クエリ間の通信回数を算出し、
算出された通信回数に基づいて、クエリの組を特定し、
特定されたクエリの組を同一の装置に配置することを決定する
各処理を実行することを特徴とする配置方法。
【請求項16】
複数の処理要求文を連携してイベントを実行する該処理要求文が1以上配置された複数の装置が実行した処理要求文間の通信回数を示す情報を取得する取得部と、
前記通信回数に基づいて、処理要求文の組を特定する特定部と、
特定された前記処理要求文の組を同一の装置に配置するための装置を決定する決定部と、
を有することを特徴とする配置装置。
【請求項1】
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリ間の通信回数を示す情報を取得する取得部と、
前記取得部により取得された情報が示す通信回数に基づいて、クエリの組を特定する特定部と、
前記特定部により特定されたクエリの組を同一の装置に配置することを決定する決定部と、
を有することを特徴とする配置装置。
【請求項2】
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリが実行された順序を示す情報を取得する取得部と、
前記取得部により取得された情報に基づいて、クエリ間の通信回数を算出する算出部と、
前記算出部により算出された通信回数に基づいて、クエリの組を特定する特定部と、
前記特定部により特定されたクエリの組を同一の装置に配置することを決定する決定部と、
を有することを特徴とする配置装置。
【請求項3】
前記特定部は、前記通信回数が最も多いクエリの組を特定する
ことを特徴とする請求項1または2に記載の配置装置。
【請求項4】
前記決定部は、前記通信回数が同一となるクエリの組の数が複数である場合には、前記通信回数が同一となるクエリの組について、負荷が最も小さいクエリの組、または、前記複数のクエリの接続関係を示すクエリグラフ上におけるクエリ間の距離が最も小さいクエリの組を特定する
ことを特徴とする請求項3に記載の配置装置。
【請求項5】
前記決定部による決定結果に基づいて、前記特定部により特定されたクエリの組が同一の装置に配置されるように制御する配置制御部
をさらに有することを特徴とする請求項1〜4のいずれか1つに記載の配置装置。
【請求項6】
前記配置制御部は、前記特定部により特定されたクエリの組が、負荷が第一の閾値を超えた装置から、負荷が第二の閾値未満の装置に配置されるように制御する
ことを特徴とする請求項5に記載の配置装置。
【請求項7】
前記配置制御部は、前記複数の装置の負荷が第一の閾値を超えている場合には、前記特定部により特定されたクエリの組が、前記複数の装置以外の他の装置に配置されるように制御する
ことを特徴とする請求項5に記載の配置装置。
【請求項8】
前記配置制御部は、前記複数の装置の負荷が第二の閾値未満である場合には、前記特定部により特定されたクエリの組、および、前記複数の装置のうち負荷が第三の閾値を超えた装置に配置されたクエリが、前記複数の装置のうち、前記複数の装置の台数よりも少ない台数の装置に配置されるように制御する
ことを特徴とする請求項5に記載の配置装置。
【請求項9】
前記配置制御部は、前記複数のクエリのうち、前記特定部により特定されたクエリの組が示すいずれかのクエリが配置された装置が該クエリのみを実行する装置である場合には、当該装置を該クエリ以外のクエリの配置先の装置としないように制御する
ことを特徴とする請求項5に記載の配置装置。
【請求項10】
前記配置制御部は、前記特定部により特定されたクエリの組が示すいずれかのクエリが、前記複数の装置のうち当該クエリが配置された装置のみで実行可能である場合には、当該装置以外の他の装置へ当該クエリを配置しないように制御する
ことを特徴とする請求項5に記載の配置装置。
【請求項11】
前記取得部は、前記装置によりクエリの実行に伴って記録または集計された前記情報を取得する
ことを特徴とする請求項1〜10のいずれか1つに記載の配置装置。
【請求項12】
コンピュータに、
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリ間の通信回数を示す情報を取得し、
取得された情報が示す通信回数に基づいて、クエリの組を特定し、
特定されたクエリの組を同一の装置に配置することを決定する
各処理を実行させることを特徴とする配置プログラム。
【請求項13】
コンピュータに、
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリが実行された順序を示す情報を取得し、
取得された情報に基づいて、クエリ間の通信回数を算出し、
算出された通信回数に基づいて、クエリの組を特定し、
特定されたクエリの組を同一の装置に配置することを決定する
各処理を実行させることを特徴とする配置プログラム。
【請求項14】
コンピュータが実行する配置方法であって、
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリ間の通信回数を示す情報を取得し、
取得された情報が示す通信回数に基づいて、クエリの組を特定し、
特定されたクエリの組を同一の装置に配置することを決定する
各処理を実行することを特徴とする配置方法。
【請求項15】
コンピュータが実行する配置方法であって、
それぞれ設定された条件にデータが合致した場合に処理を実行するための複数のクエリが配置された複数の装置において実行された前記複数のクエリについて、クエリが実行された順序を示す情報を取得し、
取得された情報に基づいて、クエリ間の通信回数を算出し、
算出された通信回数に基づいて、クエリの組を特定し、
特定されたクエリの組を同一の装置に配置することを決定する
各処理を実行することを特徴とする配置方法。
【請求項16】
複数の処理要求文を連携してイベントを実行する該処理要求文が1以上配置された複数の装置が実行した処理要求文間の通信回数を示す情報を取得する取得部と、
前記通信回数に基づいて、処理要求文の組を特定する特定部と、
特定された前記処理要求文の組を同一の装置に配置するための装置を決定する決定部と、
を有することを特徴とする配置装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7A】
【図7B】
【図7C】
【図7D】
【図8】
【図9】
【図10A】
【図10B】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35A】
【図35B】
【図36A】
【図36B】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7A】
【図7B】
【図7C】
【図7D】
【図8】
【図9】
【図10A】
【図10B】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35A】
【図35B】
【図36A】
【図36B】
【公開番号】特開2013−114626(P2013−114626A)
【公開日】平成25年6月10日(2013.6.10)
【国際特許分類】
【出願番号】特願2011−263048(P2011−263048)
【出願日】平成23年11月30日(2011.11.30)
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成23年度、経済産業省、「次世代高信頼・省エネ型IT基盤技術開発・実証事業(大規模データストリーム処理基盤の研究開発)」委託研究、産業技術力強化法第19条の適用を受ける特許出願
【出願人】(000005223)富士通株式会社 (25,993)
【公開日】平成25年6月10日(2013.6.10)
【国際特許分類】
【出願日】平成23年11月30日(2011.11.30)
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成23年度、経済産業省、「次世代高信頼・省エネ型IT基盤技術開発・実証事業(大規模データストリーム処理基盤の研究開発)」委託研究、産業技術力強化法第19条の適用を受ける特許出願
【出願人】(000005223)富士通株式会社 (25,993)
[ Back to top ]