以下に、本願の開示する配置装置、配置プログラムおよび配置方法の各実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
実施例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台とする場合について例示したが、これらの台数は任意の値を採用することができる。
サーバ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に配置されたクエリに設定された条件に合致した場合に、クエリに設定された処理を実行する。
また、VMは、後述するように、管理サーバ40から、処理結果の送信先のVMのアドレス、例えば、IP(Internet Protocol)アドレスが通知される。また、VMには、後述するように、管理サーバ40から、クエリグラフが送信される。
また、VMは、他のVMからクエリの識別子を受信していない場合に、クエリに設定された処理を実行したときには、次のような情報を他のVMに送信する。すなわち、VMは、処理結果と、実行したクエリの識別子とを含むデータを、アドレスに対応するVMに送信する。ここで、以下の説明において、かかるデータを「イベントデータ」と表記する場合がある。
また、VMは、他のVMからクエリの識別子を受信した場合には、受信したクエリの識別子と実行したクエリの識別子とをクエリの実行順が認識可能な形式にして、処理結果とともにイベントデータに含め、イベントデータを送信する。例えば、VMは、通知されたアドレスを用いて、アドレスに対応するVMに、かかるイベントデータを送信する。このとき、VMは、他のVMからクエリの識別子を受信した場合に、次のような処理を行う。すなわち、VMは、クエリの実行順が認識可能なように、受信したクエリの識別子の次に、実行したクエリの識別子が並んだ情報、換言すれば、クエリが実行された順序が認識可能な情報をイベントデータに含めて、アドレスに対応するVMに送信する。
具体例を挙げて、実施例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であるか否かを判定することで、自身に配置されたクエリが、最後に実行される処理が設定されたクエリであるか否かを判定できる。
図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」と表記する場合がある。
図6の例では、VM31a,32a,33aのそれぞれは、まず、自身に配置されたクエリQ1,Q2,Q3のそれぞれが、クエリグラフ70が示す、最後に実行される処理が設定されたクエリQ3であるか否かを判定する。これにより、VM31a,32aは、自身に配置されたクエリQ1,Q2が、最後に実行される処理が設定されたクエリでないと判定する。またVM33aは、自身に配置されたクエリQ3が、最後に実行される処理が設定されたクエリであると判定する。このような判定をしたVM33aは、後述するように、イベントデータに含まれるクエリQ1,Q2,Q3の実行順序から、各クエリ間の通信回数を集計し、集計結果を含む通信回数情報を管理サーバ40に送信する。
図6の例では、VM31aは、VM32aに送信するイベントデータ36aの「ID(Identification)」の項目に、イベントデータを識別するための識別子を登録する。また、VM31aは、イベントデータ36aの「処理結果」の項目に、クエリQ1に設定された処理の処理結果を登録する。また、VM31aは、イベントデータ36aの「実行順序」の項目に、実行した処理が設定されたクエリQ1の識別子「Q1」を登録する。また、VM31aは、イベントデータ36aのその他の各種項目についても、各項目に対応する情報を登録する。このようにして、VM31aは、イベントデータ36aを生成する。そして、VM31aは、管理サーバ40から通知された、処理結果の送信先のVM32aのアドレスを用いて、VM32aに、生成したイベントデータ36aを送信する。
また、VM31aは、VM33aに送信するイベントデータ36bの「ID」の項目に、イベントデータを識別するための識別子を登録する。また、VM31aは、イベントデータ36bの「処理結果」の項目に、クエリQ1に設定された処理の処理結果を登録する。また、VM31aは、イベントデータ36bの「実行順序」の項目に、実行した処理が設定されたクエリQ1の識別子「Q1」を登録する。また、VM31aは、イベントデータ36bのその他の各種項目についても、各項目に対応する情報を登録する。このようにして、VM31aは、イベントデータ36bを生成する。そして、VM31aは、管理サーバ40から通知された、処理結果の送信先のVM33aのアドレスを用いて、VM33aに、生成したイベントデータ36bを送信する。
そして、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を送信する。
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つインクリメントする。
図7A〜図7Dは、通信回数情報のデータ構造の一例を示す図である。通信回数情報37には、クエリ間の通信回数が登録される。図7Aの例では、通信回数情報37は、クエリに設定された処理の実行順序が前後となる2つのクエリについて、先に実行された処理が設定されたクエリ(先クエリ)と、後に実行された処理が設定されたクエリ(後クエリ)とに対応する通信回数が登録される項目37aを有する。図7Aの例は、VM33aにより項目37aの値がインクリメントされる前の、いわゆる初期状態を示し、全ての項目37aの値は、「0」である。
通信回数情報37の項目37aの登録内容が、図7Aの例が示す場合に、上述したように、VM33aが、クエリQ1に設定された処理が実行された後に、クエリQ3に設定された処理が実行されたと判定したときには、VM33aは、次のような処理を行う。すなわち、VM33aは、図7Bの例に示すように、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値を1つインクリメントする。
また、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つインクリメントする。
通信回数情報37の項目37aの登録内容が、図7Aの例が示す場合に、上述したように、VM33aが、クエリQ1に設定された処理が実行された後に、クエリQ2に設定された処理が実行されたと判定したときには、VM33aは、次のような処理を行う。すなわち、VM33aは、図7Cの例に示すように、「先クエリ」の項目が「Q1」、「後クエリ」の項目が「Q2」に対応する項目37aに登録された値を1つインクリメントする。また、この場合に、上述したように、VM33aが、クエリQ2に設定された処理が実行された後に、クエリQ3に設定された処理が実行されたと判定したときには、VM33aは、次のような処理を行う。すなわち、VM33aは、図7Cの例に示すように、「先クエリ」の項目が「Q2」、「後クエリ」の項目が「Q3」に対応する項目37aに登録された値を1つインクリメントする。
また、図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」となる。
このようにして、自身に配置されたクエリQ3が、最後に実行される処理が設定されたクエリであると判定をしたVM33aは、イベントデータに含まれるクエリQ1,Q2などの実行順序から、各クエリ間の通信回数を集計する。そして、VM33aは、集計結果を含む通信回数情報37を生成する。続いて、VM33aは、所定時間間隔、例えば、1分毎に、生成した通信回数情報37を管理サーバ40に送信する。
また、VMは、所定時間ごと、例えば、1分ごとに、負荷を示す負荷情報を管理サーバ40へ送信する。なお、負荷情報は、例えば、クエリおよびクエリに付随するデータなどを含む処理要素ごとの負荷を示す情報である。
具体例を挙げて、実施例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を登録する。
また、図8の例では、VM32aは、管理サーバ40に送信する負荷情報38bの「装置」の項目に、VM32aの識別子「32a」を登録する。また、図8の例では、VM32aは、負荷情報38bの「クエリ」の項目に、VM32aに配置されたクエリQ2の識別子「Q2」を登録する。また、図8の例では、VM32aは、負荷情報38bの「処理要素」の項目に、クエリQ2およびクエリQ2に付随するデータを含む処理要素の識別子「V2」を登録する。また、図8の例では、VM32aは、負荷情報38bの「負荷値」の項目に、処理要素の負荷、例えば、単位時間の間(例えば、1秒間)に処理されたイベントの数nを登録する。
また、図8の例では、VM33aは、管理サーバ40に送信する負荷情報38cの「装置」の項目に、VM33aの識別子「33a」を登録する。また、図8の例では、VM33aは、負荷情報38cの「クエリ」の項目に、VM33aに配置されたクエリQ3の識別子「Q3」を登録する。また、図8の例では、VM33aは、負荷情報38cの「処理要素」の項目に、クエリQ3およびクエリQ3に付随するデータを含む処理要素の識別子「V3」を登録する。また、図8の例では、VM33aは、負荷情報38cの「負荷値」の項目に、処理要素の負荷、例えば、単位時間の間(例えば、1秒間)に処理されたイベントの数rを登録する。
このようにして、VM31a〜33aのそれぞれは、負荷情報38a〜38cのそれぞれを生成する。
また、図8の例では、VM31a〜33aのそれぞれは、負荷情報38a〜38cのそれぞれを、所定時間ごとに、管理サーバ40に送信する。
管理サーバ40は、サーバ20、サーバ31〜35、VM31a〜35a,31b〜35bを管理するサーバである。管理サーバ40は、クエリの配置を制御する。
図9は、データの流れに沿ってCEPシステムの構成を模式的に示した図である。サーバ20、VM31a〜35a,31b〜35bおよび管理サーバ40は、各クエリが処理対象とするデータ毎に当該クエリの配置先が登録されたルーティングテーブル50を記憶する。
サーバ20は、外部ネットワーク98を介して様々な対象から多数のデータを受信する。サーバ20は、受信したデータを所定のデータ構成に整える前処理を行う。そして、サーバ20は、ルーティングテーブル50に基づき、受信したデータを処理対象とするクエリの配置先を特定する。続いて、サーバ20は、前処理が行われたデータを特定した配置先のVMへ送信する。なお、図3および図9の例では、サーバ20の台数が1台である場合を例示したが、サーバ20を複数台設けて、複数のサーバ20により受信したデータを各VMへ送信してもよい。
VMは、それぞれエンジン51を動作させる。エンジン51は、複合イベント処理を実現するソフトウェアである。エンジン51は、受信したデータと、クエリの条件式とを突合させてイベントを検出し、検出したイベントの処理を実行する制御を行う。また、CEPシステム10では、複数のクエリにより一連の処理を実行させる。例えば、上位のクエリによる処理結果のデータを下位のクエリへ送信する。そして、下位のクエリでは、送信されたデータを、下位のクエリに設定された処理を実行する際に用いる。エンジン51は、複数のクエリにより一連の処理を実行する場合、クエリによる処理結果のデータを下位のクエリが配置されたVMへ送信する。また、エンジン51は、管理サーバ40からのクエリの移動の指示に応じて、他のVM上で動作するエンジン51との間でクエリを移動させる制御を行う。
ここで、クエリの移動について説明する。クエリは、付随するデータを有する場合がある。例えば、クエリが処理対象とするデータの所定の期間の平均を求める処理を行う場合、平均を算出するために所定の期間より長い期間の間に受信したデータを保持する。また、クエリは、処理にテーブルなどの所定のデータを用いる場合もある。エンジン51は、クエリを移動させる場合、クエリおよびクエリに付随するデータを処理要素として移動させる。
また、クエリの移動には、複数のケースが考えられる。図10Aは、クエリの移動の一例を示す図である。図10Aに示すように、クエリ毎に処理対象とするデータが異なる場合、クエリを移動させ、移動先で処理対象とするデータを処理させる。例えば、処理を分散させる場合、各クエリをそれぞれ異なるVMに移動させて、各VMによりデータを処理させる。一方、処理負荷が低い場合などには、クエリをより少ない台数のVM、例えば、1台のVMに移動させ、1台のVMによりデータを処理させる。
一方、クエリは、処理対象とするデータが複数である場合がある。例えば、データとして証券コードおよび株価がVMに配信され、クエリが証券コード毎に株価の一定期間の移動平均を求める処理を行う場合がある。図10Bは、クエリの移動の他の一例を示す図である。図10Bの例では、図10Bの左側に示すように、クエリは、データ1〜nが処理対象である。この場合、処理対象のデータ1〜n毎に、クエリを移動させる。例えば、処理の分散を行う場合、クエリを複製して他のVMに移動させ、処理対象のデータ1〜nをそれぞれ異なるVMにより処理させる。一方、処理負荷が低い場合などには、クエリを1台のVMに配置させ、処理対象のデータ1〜nを1台のVMにより処理させる。
ここで、本実施例では、複数のクエリのそれぞれを複数のグループに分け、グループ毎に移動する。また、ルーティングテーブル50は、グループ毎に格納先を管理する。図11は、クエリのグループ分けの一例を示す図である。例えば、本実施例では、処理対象とする各データに、データを識別するキーが所定ビットの整数データとして含まれ、それぞれのクエリに処理の条件ごとに異なるキーが設定されている。この場合、処理の条件ごとに設定されたキーを用いて、キーから値を算出する所定の関数、例えば、ハッシュ関数によりハッシュ値を算出して、ハッシュ値が同一となるクエリを同一のグループとしてグループ分けする。例えば、処理の条件に設定されたキーを用いて、ハッシュ関数により算出されたハッシュ値が同一となるクエリを同一のグループとして静的にグループを分ける。図11の例は、クエリをグループ分けした各グループを「V−Node」とする場合を示す。そして、本実施例では、V−Node毎に、クエリをVMに配置する。なお、本実施例では、複数のクエリのそれぞれが異なるグループに分けられることとする。
ルーティングテーブル50には、V−Node毎に配置先が登録される。例えば、ルーティングテーブル50は、V−Nodeの識別子が登録される項目と、配置先のVMのIPアドレスが登録される項目とを有する。
サーバ20および各VMのエンジン51は、キーに基づいてクエリの配置先を判別する。例えば、サーバ20は、受信したデータに含まれるキーを用いてハッシュ関数によりハッシュ値を算出する。そして、サーバ20は、ルーティングテーブル50からV−Nodeの識別子が登録される項目に、算出したハッシュ値が登録されたレコードを検索する。続いて、サーバ20は、検索の結果、レコードが得られた場合、得られたレコードの配置先のVMのIPアドレスが登録される項目に登録されたIPアドレスを取得する。そして、サーバ20は、取得したIPアドレスを用いて、VMと通信を行う。
上述したように、各VMは、負荷情報を管理サーバ40へ送信する。そして、後述するように、管理サーバ40が、各VMから送信された負荷情報に基づき、クエリを移動させるための指示(移動指示)を送信する。なお、本実施例では、V−Node単位でクエリの移動が行われる。管理サーバ40は、移動先のVM31のIPアドレスおよび移動対象のV−Nodeの識別子を含む移動指示を移動元のVMに送信する。移動指示を受信したVMのエンジン51は、移動対象のV−Nodeに属するクエリや当該クエリに付随するデータなどの処理要素をシリアライズして移動先のVMへ送信する。
移動先のVMのエンジン51は、送信されたデータをデシリアライズして復元し、復元されたクエリの駆動を開始する。また、エンジン51は、ルーティングテーブル50の移動したV−Nodeに属するクエリの格納先を自身が動作するVMのIPアドレスに更新する。そして、エンジン51は、他のVM、サーバ20および管理サーバ40に対して移動対象のV−Nodeの識別子および移動先のVMのIPアドレスを含むルーティングテーブル更新指示を通知する。なお、管理サーバ40は、移動元および移動先のVMのIPアドレス、並びに、移動された処理要素の識別子など移動に関する各情報を把握しているため、管理サーバ40が、ルーティングテーブル更新指示を送信することもできる。
各VM、サーバ20および管理サーバ40は、ルーティングテーブル更新指示が通知された場合、次のような処理を行う。すなわち、各VM、サーバ20および管理サーバ40は、ルーティングテーブル50の通知された移動対象のV−Nodeに属するクエリの格納先を、通知されたルーティングテーブル更新指示に含まれる移動先のVMのIPアドレスに更新する。
図12は、管理サーバの構成の一例を示す図である。図12に示すように、管理サーバ40は、入力部41と、出力部42と、通信部43と、記憶部44と、制御部45とを有する。
入力部41は、各種情報を制御部45に入力する。例えば、入力部41は、ユーザからの各種指示を受け付けて、受け付けた指示を制御部45に入力する。入力部41のデバイスの一例としては、マウスやキーボードなどのユーザの操作を受け付けるデバイスなどが挙げられる。
出力部42は、各種の情報を出力する。例えば、出力部42は、VMの稼働状態などを表示する。出力部42のデバイスの一例としては、液晶ディスプレイなどが挙げられる。
通信部43は、各装置間の通信を行うためのインターフェースである。例えば、通信部43は、ネットワーク99に接続される。これにより、管理サーバ40と、サーバ20、各VMとが通信を行うことができる。例えば、通信部43は、ネットワーク99を介して、VMから通信回数情報37を受信した場合には、受信した通信回数情報37を制御部45に送信する。また、通信部43は、ネットワーク99を介して、VMから負荷情報38を受信した場合には、受信した負荷情報38を制御部45へ送信する。
記憶部44は、各種情報を記憶する。例えば、記憶部44は、上述したルーティングテーブル50、通信回数情報37、負荷情報38、移動指示リスト46を記憶する。
通信回数情報37は、VMから送信された情報であり、後述の取得部45bによりVMから取得され、記憶部44に格納される。負荷情報38は、VMから送信された情報であり、後述の取得部45bによりVMから取得され、記憶部44に格納される。
移動指示リスト46には、移動対象の処理要素の識別子、移動元のVMのIPアドレス、移動先のVMのIPアドレスが後述の決定部45dにより登録される。図13は、移動指示リストのデータ構造の一例を示す図である。図13の例では、移動指示リスト46は、移動対象の処理要素の識別子が登録される「処理要素」の項目46a、移動元のVMのIPアドレスが登録される「移動元」の項目46b、移動先のVMのIPアドレスが登録される「移動先」の項目46cを有する。
記憶部44は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部44は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部45は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図12に示すように、制御部45は、初期配置部45aと、取得部45bと、特定部45cと、決定部45dと、配置制御部45eとを有する。
初期配置部45aは、クエリグラフに基づいて、既知の技術を用いて、複数のVMにクエリを配置する。また、初期配置部45aは、クエリグラフを各VMに送信する。また、初期配置部45aは、各VMに、各VMが実行する処理が設定されたクエリを通知する。また、初期配置部45aは、各VMに、処理の処理結果の送信先のVMのIPアドレスを送信する。
取得部45bは、各種情報を取得する。例えば、取得部45bは、複数のVMにおいて処理が実行された複数のクエリについて、クエリ間の通信回数を示す通信回数情報37を取得する。
具体例を挙げて説明する。取得部45bは、通信部43を介して、VMから送信された通信回数情報37を受信することで、通信回数情報37を取得する。通信回数情報37を取得した場合には、取得部45bは、取得した通信回数情報37を記憶部44に格納する。また、取得部45bは、通信部43を介して、VMから送信された負荷情報38を受信することで、負荷情報38を取得する。負荷情報38を取得した場合には、取得部45bは、取得した負荷情報38を記憶部44に格納する。また、取得部45bは、記憶部44に記憶された通信回数情報37、負荷情報38を取得する。
特定部45cは、各種情報を特定する。例えば、特定部45cは、取得部45bにより取得された通信回数情報が示す通信回数に基づいて、クエリの組を特定する。
具体例を挙げて説明する。まず、特定部45cは、取得部45bにより取得された負荷情報38を用いて、VMごとに、処理要素ごとの負荷の和を算出し、各VMの負荷を算出する。続いて、特定部45cは、算出した各VMの負荷を用いて、全VMの負荷の平均値Aveを算出する。その後、特定部45cは、負荷が閾値α以上のVMがあるか否かを判定する。
図14は、実施例3に係る管理サーバが実行する処理の一例を説明するための図である。図14の例は、5つのVM31a〜35aのそれぞれの負荷を示す。横軸は、VMを示し、縦軸は、VMの負荷を示す。また、VMの中の「High」は、負荷が第一の閾値を超えた高負荷である処理要素を示す。また、VMの中の「Middle」は、負荷が第一の閾値以下で、かつ、第一の閾値より小さい第二の閾値を超えた中負荷である処理要素を示す。また、VMの中の「Low」は、負荷が第二の閾値以下である小負荷である処理要素を示す。図14の例では、閾値αは、上限の負荷の警戒値である。また、図14の例では、閾値βは、閾値αよりも小さく、下限の負荷の警戒値である。図14の例では、VM31aの負荷が閾値αを超えているため、特定部45cは、負荷が閾値α以上のVMがあると判定する。
負荷が閾値α以上のVMがある場合には、特定部45cは、負荷が閾値α以上の全てのVMを移動元のVMの候補とする。例えば、図14の例では、特定部45cは、負荷が閾値α以上のVM31aを移動元のVMの候補とする。
そして、特定部45cは、負荷が平均値Ave未満の全てのVMを移動先のVMの候補とする。例えば、図14の例では、負荷が平均値Ave未満のVM35aを移動先のVMの候補とする。
そして、特定部45cは、下記の処理で、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したか否かを判定する。検証していない場合には、特定部45cは、下記の処理で、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたVMに移動することが移動指示リスト46に登録済みであるか否かを判定する。
登録されていない場合には、特定部45cは、下記の処理で、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがない場合には、特定部45cは、移動先のVMの候補の全VMを未選択とする。そして、特定部45cは、以降の処理を行う。一方、未選択のVMがある場合には、特定部45cは、移動元のVMの候補の中から、未選択のVMを1つ選択する。
そして、特定部45cは、下記の処理で、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがない場合には、特定部45cは、移動先のVMの候補の全VMを未選択とする。そして、特定部45cは、上述した、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したか否かの判定を再び行う。そして、特定部45cは、以降の処理を行う。一方、未選択のVMがある場合には、特定部45cは、移動先のVMの候補の中から、未選択のVMを1つ選択する。
続いて、特定部45cは、下記の処理で、クエリの組が特定されたか否かを判定する。クエリの組が特定されていない場合には、特定部45cは、取得部45bにより取得された通信回数情報37を用いて、通信回数が最大のクエリの組を特定する。例えば、図7Dの例に示す通信回数情報37を用いた場合には、特定部45cは、通信回数が10回であるクエリQ1とクエリQ3との組を選択する。
そして、特定部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との距離よりも近い。
続いて、特定部45cは、算出した距離が最も近いクエリの組の数が複数であるか否かを判定する。図5の例では、特定部45cは、算出した距離が最も近いクエリQ1とクエリQ2との組の数は、1つなので、算出した距離が最も近いクエリの組の数が複数ではないと判定する。
算出した距離が最も近いクエリの組の数が複数である場合には、特定部45cは、算出した距離が最も近いクエリの複数の組のうち、クエリを含む処理要素の負荷の合計が最も小さいクエリの組を特定する。また、算出した距離が最も近いクエリの組の数が複数でない場合には、特定部45cは、特定した複数の組の中から、距離が最も近いクエリの組を特定する。
決定部45dは、各種情報を決定する。例えば、決定部45dは、特定部45cにより特定されたクエリの組を同一のVMに配置することを決定する。
具体例を挙げて説明する。まず、決定部45dは、特定部45cにより特定されたクエリの組について、一方のクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のVMに配置されたクエリであるか否かを判定する。一方のクエリが、新たに選択された移動元のVMに配置されたクエリでないか、または、他方のクエリが、新たに選択された移動先のVMに配置されたクエリでない場合には、上述した、移動先のVMの候補のうち、未選択のVMがあるか否かの判定を行う。そして、以降の処理を行う。
一方、あるクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他のクエリが、新たに選択された移動先のVMに配置されたクエリである場合には、決定部45dは、新たに選択された移動先のVMに、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素を移動させた場合の負荷Yを算出する。すなわち、決定部45dは、移動先のVMの負荷に、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素の負荷を加えた値を、負荷Yとして算出する。
そして、決定部45dは、算出した負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きいか否かを判定する。算出した負荷Yの値が平均値Ave以上であるか、または、負荷Yの値が閾値β以下である場合には、上述した、移動先のVMの候補のうち、未選択のVMがあるか否かの判定を行う。そして、以降の処理を行う。一方、負荷Yの値が平均値Aveより小さく、かつ、負荷Yの値が閾値βより大きい場合には、決定部45dは、次のような処理を行う。すなわち、決定部45dは、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素を、移動元のVMから、新たに選択された移動先のVMへ移動することを決定する。
このように、本実施例に係る管理サーバ40は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。よって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ40によれば、通信回数の増加を抑制することができる。
また、本実施例に係る管理サーバ40は、複数のクエリと呼ばれる処理要求文を連携してイベントを実行する処理要求文が1以上配置された複数の装置が実行した処理要求文間の通信回数を示す情報を取得する。そして、管理サーバ40は、通信回数に基づいて、処理要求文の組を特定する。続いて、管理サーバ40は、特定された処理要求文の組を同一の装置に配置するための装置を決定する。よって、この決定に基づき2つの処理要求文が同一のVMへ配置された場合には、2つの処理要求文が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ40によれば、通信回数の増加を抑制することができる。
また、本実施例に係る管理サーバ40によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
また、本実施例に係る管理サーバ40によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
そして、決定部45dは、移動が決定された処理要素の識別子と、移動元のVMのIPアドレスと、移動先のVMのIPアドレスとを対応付けて、移動指示リスト46に登録することにより、移動指示リスト46を更新する。続いて、決定部45dは、移動が決定された処理要素の移動元のVMを、移動元のVMの候補から外すとともに、移動先のVMを、移動先のVMの候補から外す。
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とする。その後、決定部45dは、上述した、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたVMに移動することが移動指示リスト46に登録済みであるか否かの判定を再び行い、そして、以降の処理を行う。
また、特定部45cにより、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したと判定された場合には、決定部45dは、移動元のVMの候補の全VMを未選択とする。そして、決定部45dは、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがある場合には、移動元のVMの候補の中から、未選択のVMを1つ選択する。
その後、決定部45dは、変数Nに「1」を設定する。そして、決定部45dは、新たに選択された移動元のVMの処理要素のうち、N番目に負荷が高い処理要素を選択する。N=1である場合、図14の例では、決定部45dは、VM31aの処理要素のうち、1番目に負荷が高い一番上の「High」の処理要素を選択する。
続いて、決定部45dは、下記の処理で、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する。未選択のVMがない場合には、決定部45dは、上述した、移動元のVMの候補のうち未選択のVMがあるか否かの判定を再び行い、以降の処理を続ける。一方、未選択のVMがある場合には、決定部45dは、移動先のVMの候補の中から、未選択のVMを1つ選択する。
その後、決定部45dは、新たに選択された移動先のVMに、新たに選択されたN番目に負荷が高い処理要素を移動させた場合の負荷Y´を算出する。すなわち、決定部45dは、移動先のVMの負荷に、選択されたN番目に負荷が高い処理要素の負荷を加えた値を、負荷Y´として算出する。例えば、N=1である場合、図14の例では、決定部45dは、VM35aの負荷に、VM31aの処理要素のうち一番上の「High」の処理要素の負荷を加えた値を、負荷Y´として算出する。
そして、決定部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を算出する処理を再び行い、以降の処理を続ける。
一方、変数Nの値が、処理要素の数Kを超えた場合には、決定部45dは、上述した、移動先のVMの候補のうち未選択のVMがあるか否かの判定を再び行い、以降の処理を続ける。
また、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きい場合には、決定部45dは、次のような判定を行う。すなわち、決定部45dは、新たに選択されたN番目に負荷が高い処理要素を、新たに選択された移動元のVMから、新たに選択された移動先のVMへ移動することを決定する。
このように、本実施例に係る管理サーバ40によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
そして、決定部45dは、移動が決定された処理要素の識別子と、移動元のVMのIPアドレスと、移動先のVMのIPアドレスとを対応付けて、移動指示リスト46に登録することにより、移動指示リスト46を更新する。続いて、決定部45dは、移動が決定された処理要素の移動元のVMを、移動元のVMの候補から外すとともに、移動先のVMを、移動先のVMの候補から外す。
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とする。その後、決定部45dは、上述した、移動元のVMの候補のうち未選択のVMがあるか否かの判定を再び行い、以降の処理を続ける。
配置制御部45eは、処理要素の配置を制御する。例えば、配置制御部45eは、決定部45dによる処理要素の配置の決定結果に基づいて、特定部45cにより特定されたクエリの組が同一のVMに配置されるように制御する。
具体例を挙げて説明する。配置制御部45eは、まず、記憶部44から移動指示リスト46を取得する。そして、配置制御部45eは、前回取得した内容と比較して、移動指示リスト46に、新たに追加された内容があるか否かを判定する。新たに追加された内容がある場合には、配置制御部45eは、新たに追加されたレコードの「移動元」の項目に登録されたIPアドレスを用いて、次のような処理を行う。すなわち、配置制御部45eは、移動元に、レコードの「処理要素」の項目に登録された識別子が示す処理要素を、レコードの「移動先」の項目に登録されたIPアドレスが示す移動先に移動させる指示(移動指示)を送信する。これにより、移動元のVMは、移動先のVMに移動対象の処理要素を送信して、処理要素を移動させる。例えば、新たに追加されたレコードに、「移動元」および「移動先」の各項目に、特定したクエリの組のそれぞれが配置されたVMのIPアドレスが登録されている場合には、配置制御部45eは、クエリの組を1つのVMに配置するように制御することができる。続いて、配置制御部45eは、VM、サーバ20および管理サーバ40に対して移動対象のV−Nodeの識別子および移動先のVMのIPアドレスを含むルーティングテーブル更新指示を送信する。
制御部45は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。
次に、本実施例に係る管理サーバ40が実行する各処理の流れを説明する。図15は、取得処理の手順を示すフローチャートである。この取得処理は、例えば、VMからのデータを受信したタイミングで実行される。
図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否定)にも、処理を終了する。
図16〜18は、決定処理の手順を示すフローチャートである。この決定処理は、所定間隔ごとに実行される。
図16〜18に示すように、取得部45bは、記憶部44から負荷情報38を取得する(S201)。特定部45cは、取得部45bにより取得された負荷情報38を用いて、VMごとに、処理要素ごとの負荷の和を算出し、各VMの負荷を算出する(S202)。続いて、特定部45cは、算出した各VMの負荷を用いて、全VMの負荷の平均値Aveを算出する(S203)。その後、特定部45cは、負荷が閾値α以上のVMがあるか否かを判定する(S204)。
負荷が閾値α以上のVMがない場合(S204否定)には、処理を終了する。一方、負荷が閾値α以上のVMがある場合(S204肯定)には、特定部45cは、負荷が閾値α以上の全てのVMを移動元のVMの候補とする(S205)。
そして、特定部45cは、負荷が平均値Ave未満の全てのVMを移動先のVMの候補とする(S206)。続いて、特定部45cは、下記の処理で、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したか否かを判定する(S207)。検証していない場合(S207否定)には、特定部45cは、下記のS225の処理で、特定されたクエリの組の一方のクエリを、他方のクエリが配置されたVMに移動することが移動指示リスト46に登録済みであるか否かを判定する(S208)。
登録されている場合(S208肯定)には、S229へ進む。登録されていない場合(S208否定)には、特定部45cは、下記のS210の処理において、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する(S209)。未選択のVMがない場合(S209否定)には、S212へ進む。一方、未選択のVMがある場合(S209肯定)には、特定部45cは、移動元のVMの候補の中から、未選択のVMを1つ選択する(S210)。
そして、特定部45cは、下記のS212の処理において、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する(S211)。未選択のVMがない場合(S211否定)には、特定部45cは、移動先のVMの候補の全VMを未選択とする(S212)。そして、S207へ戻る。一方、未選択のVMがある場合(S211肯定)には、特定部45cは、移動元のVMの候補の中から、未選択のVMを1つ選択する(S213)。
続いて、特定部45cは、下記のS216、S220、S221のいずれかの処理で、クエリの組が特定されたか否かを判定する(S214)。クエリの組が特定された場合(S214肯定)には、S222へ進む。一方、クエリの組が特定されていない場合(S214否定)には、取得部45bは、記憶部44から通信回数情報37を取得する(S215)。そして、特定部45cは、取得部45bにより取得された通信回数情報37を用いて、通信回数が最大のクエリの組を特定する(S216)。
続いて、特定部45cは、特定した組の数は複数であるか否かを判定する(S217)。複数でない場合(S217否定)には、S222へ進む。一方、複数である場合(S217肯定)には、特定部45cは、予め管理サーバ40に与えられたクエリグラフを参照し、特定した組ごとに、クエリ間の距離を算出する(S218)。
続いて、特定部45cは、算出した距離が最も近いクエリの組の数が複数であるか否かを判定する(S219)。
算出した距離が最も近いクエリの組の数が複数である場合(S219肯定)には、特定部45cは、算出した距離が最も近いクエリの複数の組のうち、クエリを含む処理要素の負荷の合計が最も小さいクエリの組を特定し(S221)、S222へ進む。また、算出した距離が最も近いクエリの組の数が複数でない場合(S219否定)には、特定部45cは、特定した複数の組の中から、距離が最も近いクエリの組を特定し(S220)、S222へ進む。
決定部45dは、特定部45cにより特定されたクエリの組について、一方のクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のVMに配置されたクエリであるか否かを判定する(S222)。一方のクエリが、新たに選択された移動元のVMに配置されたクエリでないか、または、他方のクエリが、新たに選択された移動先のVMに配置されたクエリでない場合(S222否定)には、S211に戻る。
また、一方のクエリが、新たに選択された移動元のVMに配置されたクエリであり、かつ、他方のクエリが、新たに選択された移動先のVMに配置されたクエリである場合(S222肯定)には、決定部45dは、次のような処理を行う。すなわち、決定部45dは、新たに選択された移動先のVMに、特定したクエリの組のうち、新たに選択された移動元のVMに配置されたクエリを含む処理要素を移動させた場合の負荷Yを算出する(S223)。
そして、決定部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)。
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とし(S227)、S208へ戻る。
また、特定部45cにより、特定したクエリの組について、全ての移動元のVMおよび全ての移動先のVMの組み合わせにおいて、同一のVMに配置することが可能か検証したと判定された場合(S207肯定)には、決定部45dは、次のような処理を行う。すなわち、決定部45dは、移動元のVMの候補の全VMを未選択とする(S228)。そして、決定部45dは、移動元のVMの候補のうち、未選択のVMがあるか否かを判定する(S229)。未選択のVMがない場合(S229否定)には、処理を終了する。一方、未選択のVMがある場合(S229肯定)には、移動元のVMの候補の中から、未選択のVMを1つ選択する(S230)。
その後、決定部45dは、変数Nに「1」を設定する(S231)。そして、決定部45dは、新たに選択された移動元のVMの処理要素のうち、N番目に負荷が高い処理要素を選択する(S232)。
続いて、決定部45dは、下記のS234の処理で、移動先のVMの候補のうち、未選択のVMがあるか否かを判定する(S233)。未選択のVMがない場合(S233否定)には、S229へ戻る。一方、未選択のVMがある場合(S233肯定)には、決定部45dは、移動先のVMの候補の中から、未選択のVMを1つ選択する(S234)。
その後、決定部45dは、新たに選択された移動先のVMに、新たに選択されたN番目に負荷が高い処理要素を移動させた場合の負荷Y´を算出する(S235)。
そして、決定部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へ戻る。
一方、変数Nの値が、処理要素の数Kを超えた場合(S238肯定)には、S233へ戻る。
また、算出した負荷Y´の値が平均値Aveより小さく、かつ、負荷Y´の値が閾値βより大きい場合(S236肯定)には、決定部45dは、次のような判定を行う。すなわち、決定部45dは、新たに選択されたN番目に負荷が高い処理要素を、新たに選択された移動元のVMから、新たに選択された移動先のVMへ移動することを決定し、移動指示リスト46を更新する(S240)。続いて、決定部45dは、移動が決定された処理要素の移動元のVMを、移動元のVMの候補から外すとともに、移動先のVMを、移動先のVMの候補から外す(S241)。
続いて、決定部45dは、移動先のVMの候補、および、移動元のVMの候補の全VMを未選択とし(S242)、S229へ戻る。
図19は、配置制御処理の手順を示すフローチャートである。この配置制御処理は、所定間隔ごとに実行される。
図19に示すように、配置制御部45eは、記憶部44から移動指示リスト46を取得する(S301)。そして、配置制御部45eは、前回取得した内容と比較して、移動指示リスト46に、新たに追加された内容があるか否かを判定する(S302)。新たに追加された内容がある場合(S302肯定)には、配置制御部45eは、新たに追加されたレコードの「移動元」の項目に登録されたIPアドレスを用いて、次のような処理を行う。すなわち、配置制御部45eは、移動元に、レコードの「処理要素」の項目に登録された識別子が示す処理要素を、レコードの「移動先」の項目に登録されたIPアドレスが示す移動先に移動させる指示(移動指示)を送信する(S303)。続いて、配置制御部45eは、VM、サーバ20および管理サーバ40に対して移動対象のV−Nodeの識別子および移動先のVMのIPアドレスを含むルーティングテーブル更新指示を送信し(S304)、処理を終了する。また、新たに追加された内容がない場合(S302否定)にも、処理を終了する。
上述してきたように、本実施例に係る管理サーバ40は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ40によれば、通信回数の増加を抑制することができる。
また、本実施例に係る管理サーバ40によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
また、本実施例に係る管理サーバ40によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
実施例5について説明する。実施例5では、全VMの処理要素の負荷の平均値が閾値βより小さい場合には、クエリを配置させるVMの台数を減らす場合について説明する。
図25は、実施例5に係る管理サーバの構成を示すブロック図である。図25に示すように、管理サーバ82の制御部45は、図20に示す実施例4に係る制御部45に比較して、特定部81c、決定部81dに代えて特定部83c、決定部83dを有する点が異なる。なお、以下では、上記の各実施例と同様の機能を果たす各部については同様の符号を付し、その説明を省略する。
図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は制御する。
特定部83cは、実施例4に係る特定部81cと比較して、下記の点が異なる。まず、特定部81cでは、平均値Aveが閾値α以上であるか否かの判定を行われていたが、特定部83cは、平均値Aveが閾値βより小さいか否かを判定する。例えば、図26の例では、5台のVMの負荷の平均値Aveが閾値βより小さいので、特定部83cは、この場合には、平均値Aveが閾値βより小さいと判定する。
また、特定部81cでは、ΔS(=(T/WC)−S)を算出して、増加させるVMの台数を算出するが、特定部83cは、ΔSの算出に代えて、減らすVMの台数ΔS´(=S−(T/WC))を算出する。
また、特定部81cでは、負荷が閾値α以上の全てのVMを移動元のVMの候補とするが、特定部83cは、全てのVMのうち、負荷が低い方からΔS´の値が示す台数分のVMを移動元のVMの候補とする。例えば、図26の例では、特定部83cは、ΔS´=2(5−3)台分の台数の負荷が低いVM34a,35aを移動元のVMの候補とする。
また、特定部81cでは、ΔSの値が示す台数分の台数の新規の全てのVMを移動先の候補とするが、特定部83cは、減らす対象でないVM、すなわち、残りのVMのうち、負荷がWC未満の全てのVMを移動先のVMの候補とする。例えば、図26の例では、特定部83cは、残りのVM31a〜33aのうち、負荷がWC未満の全てのVM32a、VM33aを移動元のVMの候補とする。これにより、VMの平均の負荷がWCとなるようなVMの台数を決定することができる。また、移動先のVMにおいて、処理要素が移動された場合の負荷を、WCより小さく、かつ、閾値βより大きくすることができる。
また、本実施例に係る管理サーバ82は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ82によれば、通信回数の増加を抑制することができる。
また、本実施例に係る管理サーバ82によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
また、本実施例に係る管理サーバ82によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
次に、本実施例に係る管理サーバ82が実行する各処理の流れを説明する。取得処理、配置制御処理については、実施例4と同様であるので説明を省略し、実施例5に係る決定処理について説明する。図27〜29は、実施例5に係る決定処理の手順を示すフローチャートである。この決定処理は、所定間隔ごとに実行される。なお、実施例3や実施例4と同様の処理については、同一の符号を付して説明する。
図27〜29に示すように、特定部83cは、S203の次に、S402に代えて、平均値Aveが閾値βより小さいか否かを判定する(S501)。
また、特定部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)。
上述してきたように、本実施例に係る管理サーバ82は、特定した組の2つのクエリを含む2つの処理要素を同一のVMへ配置することを決定する。したがって、この決定に基づき2つの処理要素が同一のVMへ配置された場合には、2つの処理要素が同一のVMへ配置される前に2つのVM間で行われていた処理結果の通信が行われなくなる。したがって、本実施例に係る管理サーバ82によれば、通信回数の増加を抑制することができる。
また、本実施例に係る管理サーバ82によれば、優先的に、通信回数の多い処理要素を1つのVMに配置することを決定することができる。
また、本実施例に係る管理サーバ82によれば、処理要素を移動させた場合に、移動先のVMの負荷の値を平均値Aveより小さく、かつ、閾値βより大きくなるように、処理要素の配置を決定することができる。
また、本実施例に係る管理サーバ82によれば、移動先のVMにおいて、処理要素が移動された場合の負荷を、WCより小さく、かつ、閾値βより大きくすることができる。
また、本実施例に係る管理サーバ82によれば、VMの平均の負荷がWCとなるようなVMの台数を決定することができる。
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
まず、上述した各実施例の変形例について説明する。例えば、CEPシステム内においてクエリを配置することが可能な複数の装置のうち、特定の装置のみ実行可能なクエリがある。そこで、この場合に、このクエリを含む処理要素を、他の装置に配置しないように管理サーバが制御する変形例について説明する。上述した各実施例の変形例における管理サーバは、特定の装置に配置された該当クエリの移動が不可であることを示す第一の不可情報を記憶部に格納する。そして、変形例における特定部や決定部などは、移動元の装置の候補が選出された後に、記憶部に第一の不可情報があるか否かを判定し、第一の不可情報がある場合には、第一の不可情報を参照する。続いて、変形例における特定部や決定部などは、第一の不可情報に該当する特定の装置が、移動元の装置の候補として選出された場合には、特定の装置を移動元の装置の候補から外す。なお、変形例における特定部や決定部は、移動元の装置の候補が選出される前に、第一の不可情報を参照し、第一の不可情報が示す特定の装置を、移動元の装置の候補に選出しないようにすることもできる。
図30は、変形例に係る第一の除外処理の手順を示すフローチャートである。第一の除外処理は、例えば、移動元のVMの候補が選出された後に、決定処理の一部の処理として実行される。図30に示すように、変形例における特定部や決定部などは、記憶部を検索し、記憶部に第一の不可情報があるか否かを判定する(S601)。第一の不可情報がない場合(S601否定)には、決定処理を進める。一方、第一の不可情報がある場合(S601肯定)には、変形例における特定部や決定部などは、記憶部から第一の不可情報を取得し、取得した第一の不可情報に基づいて、移動元の装置の候補の中に、第一の不可情報が示す特定の装置があるか否かを判定する(S602)。
移動元の装置の候補の中に、第一の不可情報が示す特定の装置がある場合(S602肯定)には、変形例における特定部や決定部などは、特定の装置を移動元の装置の候補から外し(S603)、決定処理を進める。また、移動元の装置の候補の中に、第一の不可情報が示す特定の装置がない場合(S602否定)にも、決定処理を進める。
上述したように、変形例は、CEPシステム内においてクエリを配置することが可能な複数の装置のうち、特定の装置のみでしか実行できないクエリについては、クエリが配置された装置を移動元の装置の候補から外す。したがって、変形例によれば、移動元の装置の候補の台数が減るため、処理要素を移動させる際の処理コストが抑制される。また、変形例によれば、特定の装置のみでしか実行できないクエリを他の装置に移動させてしまう事象が発生することを抑制することができる。
また、CEPシステム内において、複数のクエリのうち、特定のクエリしか実行できない装置がある。そこで、この場合に、この装置に、他の装置の処理要素を移動させないように管理サーバが制御する変形例について説明する。上述した各実施例の変形例における管理サーバは、特定のクエリしか実行できない装置に、他の装置からのクエリの移動が不可であることを示す第二の不可情報を記憶部に格納する。そして、変形例における特定部や決定部などは、移動先の装置の候補が選出された後に、記憶部に第二の不可情報があるか否かを判定し、第二の不可情報がある場合には、第二の不可情報を参照する。続いて、変形例における特定部や決定部などは、第二の不可情報に該当する装置が、移動先の装置の候補として選出された場合には、この装置を移動先の装置の候補から外す。なお、変形例における特定部や決定部は、移動先の装置の候補が選出される前に、第二の不可情報を参照し、第二の不可情報が示す装置を、移動先の装置の候補に選出しないようにすることもできる。
図31は、変形例に係る第二の除外処理の手順を示すフローチャートである。第二の除外処理は、例えば、移動先のVMの候補が選出された後に、決定処理の一部の処理として実行される。図31に示すように、変形例における特定部や決定部などは、記憶部を検索し、記憶部に第二の不可情報があるか否かを判定する(S701)。第二の不可情報がない場合(S701否定)には、決定処理を進める。一方、第二の不可情報がある場合(S701肯定)には、変形例における特定部や決定部などは、記憶部から第二の不可情報を取得し、取得した第二の不可情報に基づいて、移動先の装置の候補の中に、第二の不可情報が示す装置があるか否かを判定する(S702)。
移動先の装置の候補の中に、第二の不可情報が示す装置がある場合(S702肯定)には、変形例における特定部や決定部などは、この装置を移動先の装置の候補から外し(S703)、決定処理を進める。また、移動先の装置の候補の中に、第二の不可情報が示す装置がない場合(S702否定)にも、決定処理を進める。
上述したように、変形例は、CEPシステム内において、複数のクエリのうち、特定のクエリしか実行できない装置については、移動先の装置の候補から外す。したがって、変形例によれば、移動先の装置の候補の台数が減るため、処理要素を移動させる際の処理コストが抑制される。また、変形例によれば、特定のクエリしか実行できない装置に、他の装置から他のクエリを移動させてしまう事象が発生することを抑制することができる。
また、上記の各実施例では、VMが、クエリ間の通信回数を算出し、算出した通信回数を含む通信回数情報37を管理サーバに送信する場合について例示した。しかしながら、開示の装置は、これに限定されない。そこで、VMが、クエリの実行順序を示す順序情報を管理サーバに送信し、順序情報を受信した管理サーバがクエリ間の通信回数を算出し、算出した通信回数に基づいて、クエリの組を特定する変形例について説明する。
図32は、変形例に係る管理サーバの構成の一例を示す図である。図32の例は、実施例5の変形例を示す。図32に示すように、管理サーバ86の制御部45は、算出部87を有する。変形例では、VMから送信された順序情報を取得部45bが取得し、取得した順序情報を記憶部44に格納する。そして、算出部87は、所定のタイミング、例えば、決定処理において、記憶部44に記憶された通信回数情報37が取得部45bにより取得される前に、記憶部44から順序情報を取得する。続いて、算出部87は、取得した順序情報が示すクエリの実行順序から、クエリの通信回数を算出する。その後、算出部87は、算出したクエリの通信回数分の値を該当項目に登録した通信回数情報37を記憶部44に格納する。
図33は、変形例に係る算出処理の手順を示すフローチャートである。算出処理は、例えば、決定処理の一部の処理として、取得部により通信回数情報37が取得される前に実行される。図33に示すように、算出部87は、記憶部44から順序情報を取得する(S801)。続いて、算出部87は、取得した順序情報が示すクエリの実行順序から、クエリの通信回数を算出する(S802)。その後、算出部87は、算出したクエリの通信回数分の値を該当項目に登録した通信回数情報37を記憶部44に格納する(S803)。
上述したように、変形例では、VMは、クエリの通信回数を算出することなく、クエリの実行順序を管理サーバに送信する。そして、変形例では、クエリの実行順序からクエリの通信回数を算出し、算出した通信回数を用いて、クエリの組を特定する。したがって、変形例によれば、VMの処理コストを抑制することができる。なお、上記では、実施例5の変形例について説明したが、実施例3および実施例4などについても、実施例5の変形例と同様の技術を取り入れることができる。
また、上記の各実施例では、VMにクエリを配置した場合について説明したが、開示の装置は、物理サーバにクエリを配置して同様の処理を行うことができる。
また、実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、本実施例において説明した各処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更できる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
[配置プログラム]
また、上記の実施例で説明した配置装置および管理サーバの各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、図34を用いて、上記の各実施例で説明した配置装置または管理サーバと同様の機能を有する配置プログラムを実行するコンピュータの一例を説明する。図34は、配置プログラムを実行するコンピュータを示す図である。
図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を介して接続される。
ROM320には、OSなどの基本プログラムが記憶されている。また、HDD330には、上記の各実施例で示す初期配置部と、取得部と、算出部と、特定部と、決定部と、配置制御部と同様の機能を発揮する配置プログラムが予め記憶される。なお、配置プログラムについては、適宜分離しても良い。また、HDD330には、ルーティングテーブル、通信回数情報、負荷情報、移動指示リストが設けられる。これらルーティングテーブル、通信回数情報、負荷情報、移動指示リスト、順序情報は、上述したルーティングテーブル50、通信回数情報37、負荷情報38、移動指示リスト46、順序情報に対応する。
そして、CPU310が、配置プログラムをHDD330から読み出して実行する。
そして、CPU310は、ルーティングテーブル、通信回数情報、負荷情報、移動指示リストを読み出してRAM340に格納する。さらに、CPU310は、RAM340に格納されたルーティングテーブル、通信回数情報、負荷情報、移動指示リストを用いて、配置プログラムを実行する。なお、RAM340に格納される各データは、常に全てのデータがRAM330に格納されなくともよい。処理に用いられるデータがRAM340に格納されれば良い。
なお、上記した配置プログラムについては、必ずしも最初からHDD330に記憶させておく必要はない。
例えば、コンピュータ300に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」にプログラムを記憶させておく。そして、コンピュータ300がこれらからプログラムを読み出して実行するようにしてもよい。
さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータ300に接続される「他のコンピュータ(またはサーバ)」などにプログラムを記憶させておく。そして、コンピュータ300がこれらからプログラムを読み出して実行するようにしてもよい。