以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
まず第1の実施の形態について説明する。
図1は、第1の実施の形態に係る通信経路管理装置の構成例を示す図である。通信経路管理装置10は、記憶部11と処理部12とを有する。記憶部11は、例えば通信経路管理装置10が有するメモリまたはストレージ装置である。処理部12は、例えば通信経路管理装置10が有するプロセッサである。
記憶部11は、入力データ2に対する実行順が決められた複数の処理それぞれの、ネットワーク内の複数のサーバ1a〜1dそれぞれでの実行実績11aを記憶する。複数の処理は、例えば対応するソフトウェアを用いて実行される。図1の例では、最初に実行する処理はソフトウェア「App1」を用いて実行され、2番目に実行する処理はソフトウェア「App2」を用いて実行され、最後に実行する処理はソフトウェア「App3」を用いて実行される。
処理部12は、実行順において連続する2つの処理からなる処理対を特定する。次に処理部12は、処理対ごとに、以下の処理を行う。
処理部12は、処理対における実行順が前の第1処理と実行順が後の第2処理との、複数のサーバ1a〜1dそれぞれでの実行実績11aを確認する。次に処理部12は、実行実績11aに基づいて、ネットワーク1における複数のサーバ1a〜1d間の通信経路上で隣接するサーバ間を接続する複数の隣接サーバ間通信経路のうちの一部を、第1処理から第2処理へのデータ転送に使用するデータ転送用経路6,7に決定する。
例えば処理部12は、第1処理または第2処理についての実行実績に対する統計的手法により、複数のサーバ1a〜1dのうちの一部をデータ送信先サーバに決定する。そして処理部12は、データ送信先サーバ間の隣接サーバ間通信経路を、データ転送用経路6,7に決定する。データ送信先サーバは、例えば、第1処理または第2処理を少なくとも1回実行した実績があるサーバである。
図1の例では、ソフトウェア「App1」を用いて実行される処理は、サーバ名「ServerA」のサーバ1a、サーバ名「ServerB」のサーバ1bで実行実績がある。ソフトウェア「App2」を用いて実行される処理は、サーバ名「ServerB」のサーバ1b、サーバ名「ServerC」のサーバ1cで実行実績がある。ソフトウェア「App3」を用いて実行される処理は、サーバ名「ServerC」のサーバ1c、サーバ名「ServerD」のサーバ1dで実行実績がある。
ソフトウェア「App1」、「App2」を用いて実行される処理の処理対の場合、いずれかの処理の実行実績があるのは、サーバ名「ServerA」、「ServerB」、「ServerC」のサーバ1a〜1cのサーバ群である。そこで処理部12は、サーバ1a〜1cにおける隣接するサーバ間を接続する隣接サーバ間通信経路を、ソフトウェア「App1」を用いて実行される処理から「App2」を用いて実行される処理へのデータ転送用経路6に決定する。
またソフトウェア「App2」、「App3」を用いて実行される処理の処理対の場合、いずれかの処理の実行実績があるのは、サーバ名「ServerB」、「ServerC」、「ServerD」のサーバ1b〜1dのサーバ群である。そこで処理部12は、サーバ1b〜1dにおける隣接するサーバ間を接続する隣接サーバ間通信経路を、ソフトウェア「App2」を用いて実行される処理から「App3」を用いて実行される処理へのデータ転送用経路7に決定する。
そして処理部12は、処理対ごとに決定されたデータ転送用経路6,7の両端のサーバに、第1処理の実行結果のデータ転送用経路によるデータ転送を指示する。これにより、各サーバ1a〜1dにおける各処理の実行実績に基づいて、処理を実行するサーバの変更があったときに使用される可能性の高い適切な隣接サーバ間通信経路に限定して、データ転送が行われる。
例えば、ソフトウェア「App1」を用いた最初の処理がサーバ1aで実行されており、ソフトウェア「App2」を用いた2番目の処理がサーバ1cで実行されており、ソフトウェア「App3」を用いた3番目の処理がサーバ1dで実行されているものとする。この場合、端末装置8から送信された入力データ2は、サーバ1aで受信される。サーバ1aは、入力データ2に対してソフトウェア「App1」を用いた処理を実行し、隣接する2台のサーバ1b,1cそれぞれに、処理結果を含む転送データ3a,3bを送信する。2番目の処理を実行していないサーバ1bは、転送データ3bを受信すると、転送データ3bと同じ内容の転送データ3cを、サーバ1cに送信する。なお、サーバ1bとサーバ1dとを接続する隣接サーバ間通信経路は、ソフトウェア「App1」、「App2」を用いて実行される処理の処理対に対応するデータ転送用経路ではない。そのため、サーバ1bからサーバ1dへは、転送データ3bと同じ内容の転送データの送信は行われない。
2番目の処理を実行しているサーバ1cは、転送データ3bまたは転送データ3cを受信すると、受信したデータに対して、ソフトウェア「App2」を用いた処理を実行する。そしてサーバ1cは、隣接する2台のサーバ1b,1dそれぞれに、処理結果を含む転送データ4a,4bを送信する。3番目の処理を実行していないサーバ1bは、転送データ4aを受信すると、転送データ4aと同じ内容の転送データ4cを、サーバ1dに送信する。なお、サーバ1bとサーバ1aとを接続する隣接サーバ間通信経路は、ソフトウェア「App2」、「App3」を用いて実行される処理の処理対に対応するデータ転送用経路ではない。そのため、サーバ1bからサーバ1aへは、転送データ4aと同じ内容の転送データの送信は行われない。
3番目の処理を実行しているサーバ1dは、転送データ4bまたは転送データ4cを受信すると、受信したデータに対して、ソフトウェア「App3」を用いた処理を実行する。そしてサーバ1dは、例えば、予め出力データ5の配信先として指定されている端末装置9へ、処理結果を含む出力データ5を送信する。
このように、ソフトウェア「App1」を用いた最初の処理の結果を含む転送データは、最初の処理もしくは2番目の処理の実行実績があるサーバへの隣接サーバ間通信経路のみを経由して転送される。同様に、ソフトウェア「App2」を用いた2番目の処理の結果を含む転送データは、2番目の処理もしくは3番目の処理の実行実績があるサーバへの隣接サーバ間通信経路のみを経由して転送される。転送データの転送先を限定したことで、ネットワーク1内を転送するデータ量を削減することができる。しかも、各ソフトウェアを用いた処理の実行実績があるサーバへは、実行実績がある処理の対象となるデータが常に送られている。そのため、処理を実行するサーバが変更されても、過去に実行実績があるサーバ内での変更であれば、新たな隣接サーバ間通信経路での通信接続処理や、直前のデータの受け渡しなどの処理が不要となる。その結果、処理を実行するサーバの変更を迅速に行うことができ、当該システムで提供しているサービスの提供の遅延を抑止できる。
なお、処理部12は、サーバ間の通信の遅延時間に基づいて、効率のよい隣接サーバ間通信経路を介して中継データを転送するように、データ転送用経路を決定することもできる。例えば処理部12は、複数のサーバ1a〜1dのうち、第1処理の実行頻度が最も高いサーバを起点サーバとして特定する。そして処理部12は、起点サーバから他のサーバそれぞれへの通信経路のうち、通信の遅延時間が最短となる最短経路を決定し、最短経路上の隣接サーバ間通信経路を、データ転送用経路に決定する。これにより、転送データの転送に要する時間を短縮でき、処理の効率化が図れる。
また処理部12は、隣接するサーバ間の隣接サーバ間通信経路ごとに、データ通信のための通信接続を確立する通信方向を限定することもできる。例えば処理部12は、データ転送用経路を経由する最短経路を、データ転送用経路から、起点サーバから遠い方へ辿ることで到達可能なサーバのいずれか1台で、第2処理を実行した実績があるか否かを判断する。そして処理部12は、第2処理を実行した実績があると判断されたデータ転送用経路の両端のサーバに対しては、双方向通信の通信接続の確立を指示する。また処理部12は、第2処理を実行した実績がないと判断されたデータ転送用経路の両端のサーバに対しては、起点サーバから遠い方から近い方への単方向通信の通信接続の確立を指示する。これにより、無駄な通信接続の確立を抑止でき、ネットワーク1上のデータ転送量を削減することができる。
さらに処理部12は、各サーバ1a〜1dへの処理の実行指示を行うとともに、実行指示に伴い、実行実績11aを更新することができる。例えば処理部12は、複数の処理それぞれの実行する実行サーバを指定するサーバ指定情報を受信すると、サーバ指定情報で指定された実行サーバに対して、対応する処理の実行を指示する。さらに処理部12は、実行サーバにおける、対応する処理の実行実績11aを更新する。これにより実行実績11aを最新の状態に維持することができ、データ転送用経路6,7の決定の精度を高めることができる。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。なお第2の実施の形態では、分散アプリのプログラムは、分散システムに含まれるすべてのサーバにインストール済みであるものとする。そして各サーバは、センタサーバからの指示により、分散アプリを起動し、入力されたデータに対する分散アプリによる処理を実行可能な状態にする。入力されたデータに対する分散アプリによる処理を実行可能な状態になったサーバは、見かけ上は、分散アプリが新たに配備(プログラムのインストールと実行)された状況と変わらない。そこで以下の説明では、サーバに分散アプリを実行させ、入力されたデータに対する分散アプリによる処理を実行可能な状態にすることを、サーバに分散アプリを配備すると呼ぶことがある。
図2は、第2の実施の形態の分散システムの一例を示す図である。分散システムでは、ネットワーク20に、複数のサーバ210,220,・・・、複数の端末装置310,320,・・・、センタサーバ100、および管理装置30が接続されている。
複数のサーバ210,220,・・・は、分散アプリを実行するコンピュータである。センタサーバ100は、複数のサーバ210,220,・・・への分散アプリの配備や、複数のサーバ210,220,・・・間の通信接続を管理するコンピュータである。なおセンタサーバ100に分散アプリを実行させることもできる。端末装置310,320,・・・は、処理対象のデータの送信、または処理結果の受信を行うコンピュータである。端末装置310,320,・・・は、例えば無線通信網を介してネットワーク20に接続されている。管理装置30は、分散アプリの配備先の指定や分散アプリの実行順の指定を行うコンピュータである。
図3は、第2の実施の形態に用いるセンタサーバのハードウェアの一例を示す図である。センタサーバ100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101がプログラムを実行することで実現する機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
メモリ102は、センタサーバ100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に必要な各種データが格納される。メモリ102としては、例えばRAM(Random Access Memory)などの揮発性の半導体記憶装置が使用される。
バス109に接続されている周辺機器としては、ストレージ装置103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
ストレージ装置103は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置103は、コンピュータの補助記憶装置として使用される。ストレージ装置103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置103としては、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)を使用することができる。
グラフィック処理装置104には、モニタ21が接続されている。グラフィック処理装置104は、プロセッサ101からの命令に従って、画像をモニタ21の画面に表示させる。モニタ21としては、CRT(Cathode Ray Tube)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード22とマウス23とが接続されている。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をプロセッサ101に送信する。なお、マウス23は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ装置106は、レーザ光などを利用して、光ディスク24に記録されたデータの読み取りを行う。光ディスク24は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク24には、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。
機器接続インタフェース107は、センタサーバ100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置25やメモリリーダライタ26を接続することができる。メモリ装置25は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ26は、メモリカード27へのデータの書き込み、またはメモリカード27からのデータの読み出しを行う装置である。メモリカード27は、カード型の記録媒体である。
ネットワークインタフェース108は、ネットワーク20に接続されている。ネットワークインタフェース108は、ネットワーク20を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
センタサーバ100は、以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。なお、サーバ210,220,・・・、端末装置310,320,・・・、および管理装置30も、センタサーバ100と同様のハードウェアにより実現することができる。また第1の実施の形態に示した通信経路管理装置10も、図3に示したセンタサーバ100と同様のハードウェアにより実現することができる。
センタサーバ100とサーバ210,220,・・・とは、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態の処理機能を実現する。センタサーバ100またはサーバ210,220,・・・に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、センタサーバ100またはサーバ210,220,・・・に実行させるプログラムをストレージ装置103に格納しておくことができる。プロセッサ101は、ストレージ装置103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。またセンタサーバ100またはサーバ210,220,・・・に実行させるプログラムを、光ディスク24、メモリ装置25、メモリカード27などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、ストレージ装置103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
このような分散システムにおいて、例えば、いずれかの端末装置から収集したセンサデータに対する分散処理が実行される。そして、処理結果の配信先として予め登録されている端末装置に、処理結果が送信される。
図4は、サービスの分散処理の一例を示す図である。分散処理されるサービスは、複数の分散アプリによって実行される。分散アプリは、サービスの一連の処理を定義した分散アプリフローにおける、1処理の手順が記述されたソフトウェアである。分散アプリは、自身のアプリIDのみを持ち、自身が実行されるサーバ、次に実行するアプリID/サーバに関する情報を持たない。また分散アプリは、1台のサーバに1つ以上配備される可能性がある。
図4の例では、分散システム内に7台のサーバ210,220,230,240,250,260,270が設けられている。サーバ210のサーバ名は「ServerA」である。サーバ220のサーバ名は「ServerB」である。サーバ230のサーバ名は「ServerC」である。サーバ240のサーバ名は「ServerD」である。サーバ250のサーバ名は「ServerE」である。サーバ260のサーバ名は「ServerF」である。サーバ270のサーバ名は「ServerG」である。
第2の実施の形態では、収集したセンサデータ41に対して、分散アプリ「App1」、分散アプリ「App2」、分散アプリ「App3」の順で、各分散アプリに基づく処理を実行することで、サービスが提供される。図4の例では、分散アプリ「App1」は、サーバ210に配備されている。分散アプリ「App2」は、サーバ240に配備されている。分散アプリ「App3」は、サーバ250に配備されている。
この場合、例えば端末装置310が検知したセンサデータ41が、端末装置310からサーバ210に送信される。サーバ210は、分散アプリ「App1」を用いてセンサデータ41に対する処理を実行し、処理結果を転送データ42としてサーバ240に送信する。サーバ240は、分散アプリ「App2」を用いて転送データ42に対する処理を実行し、処理結果を転送データ43としてサーバ250に送信する。サーバ250は、分散アプリ「App3」を用いて転送データ43に対する処理を実行し、処理結果を出力データ44として、配信先として予め指定されている端末装置320に送信する。
このような分散システムの運用中に、分散アプリの配備先となるサーバが変更されることがある。例えば分散アプリを配備しているサーバの処理負荷が過大になっている場合や、サーバのスケールアウトを行い新たなサーバが追加されたときなどに、分散アプリの配備先のサーバの変更が行われる。またサーバのメンテナンスのために、そのサーバに配備している分散アプリを、別のサーバに移動させることもある。
特定の分散アプリの配備先のサーバが変更されたとき、その分散アプリが新たに配備されたサーバと、他の分散アプリが配備されているサーバとの通信接続が行われていなければ、通信接続処理を行うことになる。通信接続処理とは、サーバ間でコネクションおよびセッションを確立する処理である。分散アプリの配備先のサーバを変更する際に通信接続処理が介在すると、通信接続処理の間、データ転送遅延が発生する。そこで、分散アプリが現在配備されているサーバ間の通信経路に加え、それ以外の通信経路(予備経路)についても予め通信接続を行っておくことが考えられる。
例えば、すべての隣接するサーバ間で通信接続を行っておけば、分散アプリがどのサーバに移動することになっても、分散アプリの移動の際に通信接続処理を実行せずに済む。ただし分散システムでは、処理順が前の分散アプリの実行結果である転送データは、処理順が次の分散アプリが配備されているサーバだけでなく、通信可能なすべてのサーバに送信される。転送データを受信したサーバのうち、実行順が次の分散アプリが配備されているサーバのみが、受信した転送データに対して、配備されている分散アプリによる処理を実行する。このように、分散システムでは、分散アプリが配備されていないサーバに対しても、通信接続が行われているかぎりデータが流れ続ける。そのため、すべての隣接するサーバ間の通信接続を行っておくと、予備経路上のサーバおよびネットワークに無駄なトラフィックが生じる。このようなトラフィックの増大は、システム全体として処理効率の低下要因となる。
そこで第2の実施の形態では、センタサーバ100が、分散アプリが配備される可能性がほとんどないサーバに対しては、事前の通信接続を行わないように制御する。具体的には、センタサーバ100が有するコントローラが、通信接続するサーバを、過去の分散アプリ配備傾向に基づいて決定する。
以下、適切な予備経路を設定して分散処理を実行するための、各装置が有する機能について説明する。
図5は、各装置の機能の一例を示すブロック図である。管理装置30は、プランナ31を有している。プランナ31は、分散システムの動作状況に応じて、分散アプリの適切な配備先のサーバを決定する。例えばプランナ31は、各サーバに送信されるトラフィック量が最小化するように、各分散アプリの配備先のサーバを決定する。またプランナ31は、サービスの処理遅延または転送遅延を最小にするように、各分散アプリの配備先のサーバを決定する。サーバの配備先の決定は、例えばいずれかのサーバのCPU負荷が閾値を超えたこと、またはいずれかの通信経路のトラフィック量が閾値を超えたことをトリガとして実行される。プランナ31は、分散アプリの配備先を決定すると、分散アプリ実行順序情報111と分散アプリ配備先サーバ情報112とを、センタサーバ100に送信する。
センタサーバ100は、記憶部110、タイマ120、およびコントローラ130を有している。
記憶部110は、分散システムの制御に利用する情報を記憶する。記憶部110には、例えば分散アプリ実行順序情報111、分散アプリ配備先サーバ情報112、サーバ情報、通信経路情報114、接続先情報115、出力データ配信先情報116、および分散アプリ配備先履歴117が格納される。分散アプリ実行順序情報111は、分散アプリの実行順序を示す情報である。分散アプリ配備先サーバ情報112は、各分散アプリの配備先のサーバを示す情報である。サーバ情報は、分散システム内で稼働しているサーバを示す情報である。通信経路情報114は、分散アプリ間の転送データの通信に使用する通信経路を示す情報である。接続先情報115は、端末装置からの接続先となるサーバを示す情報である。出力データ配信先情報116は、複数の分散アプリによる一連の処理の結果である出力データの配信先となる端末装置を示す情報である。分散アプリ配備先履歴117は、サーバごとに、過去に分散アプリの配備先となった回数を示す情報である。
タイマ120は、予め設定された通信経路決定処理の実行開始時刻になると、コントローラ130に対して通信経路の決定処理の開始を指示する。
コントローラ130は、分散アプリのサーバへの配備や、分散アプリ間の転送データを通信するための通信経路の設定を制御する。例えばコントローラ130は、プランナ31から分散アプリ実行順序情報111と分散アプリ配備先サーバ情報112とを受信する。そしてコントローラ130は、分散アプリ配備先サーバ情報112に基づいて、分散アプリの配備先となるサーバに対して、その分散アプリの実行を指示する。例えばコントローラ130は、分散アプリのアプリIDを含む実行アプリ制御情報を、その分散アプリの配備先のサーバに送信する。
またコントローラ130は、受信した分散アプリ実行順序情報111に示される分散アプリの実行順序を、分散アプリの配備先となるサーバに通知する。なお各サーバに通知される実行順序は、そのサーバに配備された分散アプリに関連する部分についての情報である。例えばコントローラ130は、分散アプリの配備先のサーバに、そのサーバが実行する分散アプリのアプリIDと、その分散アプリの次に処理を実行する分散アプリのアプリIDとを含む制御情報を送信する。さらにコントローラ130は、分散アプリ配備先履歴117に基づいて、接続する隣接サーバ間通信経路を決定する。そしてコントローラ130は、決定した隣接サーバ間通信経路の接続を、その隣接サーバ間通信経路の両端のサーバに転送先制御情報を送信することによって指示する。またコントローラ130は、タイマ120から通信経路の決定処理の開始の指示を受け取った場合、接続する隣接サーバ間通信経路を決定する。そしてコントローラ130は、その隣接サーバ間通信経路の両端のサーバに転送先制御情報を送信することによって、決定した隣接サーバ間通信経路の接続を指示する。
サーバ210は、記憶部211、制御情報受信部212、メッセージ転送部213、およびアプリ実行部214を有する。
記憶部211は、分散処理に用いる情報を記憶する。例えば記憶部211は、実行対象分散アプリID211aと分散アプリ実行順序情報211bとを記憶する。実行対象分散アプリID211aは、サーバ210が実行する分散アプリの識別子(アプリID)である。分散アプリ実行順序情報211bは、サーバ210が実行する分散アプリの次に実行する分散アプリの識別子(アプリID)である。
制御情報受信部212は、センタサーバ100が送信した制御情報を受信する。制御情報受信部212は、受信した制御情報を、メッセージ転送部213に転送する。
メッセージ転送部213は、制御情報に基づいて、分散アプリごとの隣接サーバ間通信経路の両端のサーバに転送先制御情報を送信することによって、隣接サーバ間通信経路として指定された接続先のサーバ内のメッセージ転送部との間でセッションを確立する。メッセージ転送部間のデータ送信側・受信側双方が同一の分散アプリIDを指定してセッションを確立した時点で、そのセッションによるメッセージ転送が可能となる。
メッセージ転送部213は、端末装置からセンサデータを受信すると、そのセンサデータをアプリ実行部214に転送する。メッセージ転送部213は、他のサーバから転送データを受信すると、その転送データに付与されている次に実行する分散アプリが、サーバ210に配備されている分散アプリであれば、転送データをアプリ実行部214に転送する。メッセージ転送部213は、アプリ実行部214から分散アプリの処理結果を受信すると、次に実行する分散アプリに対応付けて接続された隣接サーバ間通信経路に対して、処理結果を含む転送データを送信する。
アプリ実行部214は、サーバ210への配備が決定された分散アプリを実行する。アプリ実行部214は、実行している分散アプリで処理するデータを受信すると、そのデータを入力として分散アプリを実行する。そしてアプリ実行部214は、分散アプリに基づく処理結果に、次に処理を実行する分散アプリのアプリIDを付与した転送データを、メッセージ転送部213に送信する。サーバ210に配備された分散アプリが、分散アプリフローにおいて最後に実行する分散アプリの場合、アプリ実行部214は、分散アプリに基づく処理結果を出力データとして、メッセージ転送部213に送信する。
なお、図5にはサーバ210の機能を示しているが、他のサーバ220,・・・もサーバ210と同様の機能を有している。
端末装置310は、接続先問い合わせ部311とデータ送受信部312とを有する。接続先問い合わせ部311は、センタサーバ100に対して、操作要求を含む接続先問い合わせを送信する。操作要求には、データ登録の要求、データ購読開始または停止の要求がある。データ登録の操作要求を含む接続先問い合わせをした場合、センタサーバ100から、センサデータの送信先のサーバの識別子が応答される。接続先問い合わせ部311は、センタサーバ100から通知されたセンサデータの送信先のサーバの識別子をデータ送受信部312に送信する。
データ送受信部312は、端末装置310が有する機器で検知したセンサデータを、接続先として通知されたサーバに送信する。またデータ購読開始の操作要求を送信済みの場合、データ送受信部312は、最後の処理を実行するための分散アプリが配備されたサーバから送信された出力データを受信する。
なお、図5に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
次に、各装置の記憶部に格納されている情報について、具体的に説明する。
図6は、センタサーバの記憶部に格納されている情報の一例を示す図である。分散アプリ実行順序情報111には、分散アプリのアプリID(App.ID)に対応付けて、分散アプリフローにおいてその分散アプリの次に実行する分散アプリのアプリID(次実行App.ID)が設定されている。次実行App.IDが設定されていない分散アプリ(図6における「App3」)は、分散アプリフローにおいて最後に実行する分散アプリである。分散アプリ実行順序情報111に示されている「App.ID」と「次実行App.ID」との組に基づいて、分散アプリの実行順序が把握できる。図6の例では、「App1」、「App2」、「App3」の順で分散アプリを実行することが示されている。
分散アプリ配備先サーバ情報112には、分散アプリのアプリID(App.ID)に対応付けて、その分散アプリの配備先のサーバのサーバ名が設定されている。
サーバ情報113には、分散システムに含まれる各サーバのサーバ名に対応付けて、そのサーバに接続するための情報(例えばIPアドレス)が設定されている。
通信経路情報114には、分散アプリのアプリID(App.ID)に対応付けて、その分散アプリ宛の転送データを通信するための隣接サーバ間通信経路の接続対象となる1以上のサーバのサーバ名が設定されている。
接続先情報115には、分散アプリフローにおいて最初と最後の分散アプリのアプリID(App.ID)に対応付けて、その分散アプリで実行する操作と、その操作を要求する端末装置の接続先のサーバのサーバ名とが設定されている。接続先のサーバとは、対応する分散アプリが配備されているサーバである。例えば、データ登録(Publish)の操作要求に対しては、分散アプリフローの先頭の分散アプリ(図6の例では「App1」)が配備されているサーバ(ServerA)が、接続先として指定される。またデータ購読開始または停止(Subscribe/un−Subscribe)の操作要求に対しては、分散アプリフローの最後の分散アプリ(図6の例では「App3」)が配備されているサーバ(ServerE)が、接続先として指定される。
出力データ配信先情報116には、分散アプリフローにおいて最後の分散アプリのアプリID(App.ID)に対応付けて、出力データと配信先とが設定されている。配信先は、端末装置の装置名(図6の例では「dst」)によって指定されている。
分散アプリ配備先履歴117には、サーバごとの、各分散アプリの配備回数が示されている。分散アプリ配備先履歴117は、分散アプリの新規配備または再配備が行われた際に、配備された分散アプリと配備先のサーバとの組に対応する数値に1が加算される。
図7は、サーバの記憶部に格納されている情報の一例を示す図である。図7には、サーバ210の記憶部211の例が示されている。実行対象分散アプリID211aは、サーバ210への配備が決定され、サーバ210による実行対象となっている分散アプリのアプリIDである。分散アプリ実行順序情報211bには、分散アプリフローのうちの、サーバ210に配備された分散アプリに関連する部分における、分散アプリの実行順が示されている。
以上のような分散システムにおいてサービスを開始するとき、管理装置30内のプランナ31において、分散アプリの実行順序や、分散アプリの配備先が指定される。
図8は、分散アプリの実行順序と配備先との指定状況を示す図である。管理装置30内のプランナ31は、分散アプリ実行順序情報51と分散アプリ配備先サーバ情報52とをセンタサーバ100に送信する。分散アプリ実行順序情報51の内容は、図6に示した分散アプリ実行順序情報111と同様である。分散アプリ配備先サーバ情報52の内容は、図6に示した分散アプリ配備先サーバ情報112と同様である。
センタサーバ100では、コントローラ130が、分散アプリ実行順序情報51と分散アプリ配備先サーバ情報52とを受信する。コントローラ130は、受信した分散アプリ実行順序情報51と分散アプリ配備先サーバ情報52とを、記憶部110に格納する。
またコントローラ130は、分散アプリの配備先のサーバへ、分散アプリ実行順序情報51を送信する。この際、コントローラ130は、分散アプリ実行順序情報51から、サーバに配備する分散アプリに関係する部分を抽出し、抽出した部分の情報のみをそのサーバに送信してもよい。
次にコントローラ130は、分散アプリ配備先履歴117に基づいて、サーバ間の通信接続を行う隣接サーバ間通信経路を決定する。例えばコントローラ130は、過去に分散アプリを配備したことがあるサーバを、その分散アプリの配備候補サーバとして特定する。そしてコントローラ130は、分散アプリごとの配備候補サーバのリストに基づいて、通信接続する隣接サーバ間通信経路を決定する。
図9は、分散アプリ配備先サーバの特定例を示す図である。分散アプリ配備先履歴117には、分散アプリ「App1」、分散アプリ「App2」、分散アプリ「App3」それぞれが、過去にどのサーバに配備されたことがあるかが示されている。
例えば分散アプリ「App1」は、過去に「ServerA」、「ServerB」、「ServerC」、「ServerD」それぞれに、1回以上配備されていることが示されているものとする。その場合、コントローラ130は、「ServerA」、「ServerB」、「ServerC」、「ServerD」を、分散アプリ「App1」の配備先候補サーバとして特定する。同様に、分散アプリ「App2」は、過去に「ServerC」、「ServerD」、「ServerE」それぞれに、1回以上配備されていることが示されているものとする。その場合、コントローラ130は、「ServerC」、「ServerD」、「ServerE」を、分散アプリ「App2」の配備先候補サーバとして特定する。分散アプリ「App3」は、過去に「ServerE」、「ServerF」、「ServerG」それぞれに、1回以上配備されていることが示されているものとする。その場合、コントローラ130は、「ServerE」、「ServerF」、「ServerG」を、分散アプリ「App3」の配備先候補サーバとして特定する。
なお、コントローラ130は、過去に分散アプリが配備されたことのあるサーバのうち、配備回数が多い方からN個(Nは1以上の整数)のサーバを、その分散アプリの配備先候補サーバに決定してもよい。また、コントローラ130は、過去に分散アプリが配備されたことのあるサーバのうち、信頼係数を満たすサーバ群(一定の確率で配備される場所を選択する)を、その分散アプリの配備先候補サーバに決定してもよい。さらにコントローラ130は、過去に分散アプリが配備されたサーバと、そのサーバの近傍のサーバ(例えば隣接するサーバ)とをクラスタリングし、クラスタリングされたサーバ群を、その分散アプリの配備先候補サーバとして特定してもよい。この場合、過去に分散アプリが配備されていないサーバについても、その分散アプリの配備先候補サーバに含まれる。
このように過去の分散アプリの配備履歴を様々な統計的な手法で解析することで、分散アプリが配備される可能性が高い配備先候補サーバを決定することができる。なお、分散アプリの配備先候補サーバとして、上記以外の統計的手法(例えば機械学習の手法)を用いて決定してもよい。
コントローラ130は、分散アプリごとの配備先候補サーバを示す分散アプリ配備先候補情報53を生成する。コントローラ130は、生成した分散アプリ配備先候補情報53を、一時的にメモリ102に格納する。そしてコントローラ130は、分散アプリ実行順序情報111と分散アプリ配備先候補情報53とに基づいて、通信接続する隣接サーバ間通信経路を決定する。
図10は、隣接サーバ間通信経路の決定例を示す図である。例えばコントローラ130は、分散アプリの実行順序において連続する分散アプリの対(連続アプリ対)を生成する。図10の例では、分散アプリ「App1」と分散アプリ「App2」との連続アプリ対、および分散アプリ「App2」と分散アプリ「App3」との連続アプリ対が生成される。コントローラ130は、生成された連続アプリ対ごとに、連続アプリ対に属する2つの分散アプリのうち、実行順番が前の分散アプリから実行順番が後の分散アプリへの転送データの転送のために接続する隣接サーバ間通信経路を決定する。
例えばコントローラ130は、連続アプリ対ごとに、その連続アプリ対に属する分散アプリの配備先候補を統合し、分散アプリ出力データ転送先情報54を生成する。分散アプリ出力データ転送先情報54は、連続アプリ対に対応付けて、分散アプリの出力データを転送するサーバの集合が設定されている。
コントローラ130は、連続アプリ対ごとに、分散アプリ出力データ転送先情報54に出力データ転送サーバとして設定されているすべてのサーバを、連続アプリ対の送信先の分散アプリ用の通信経路接続サーバに決定する。そしてコントローラ130は、連続アプリ対ごとの通信経路接続サーバを設定した通信経路情報114を生成する。図10に示した通信経路情報114では、連続アプリ対のうちの送信先の分散アプリのアプリIDに対応付けて、その連続アプリ対の通信経路接続サーバが設定されている。
コントローラ130は、通信経路情報114に基づいて、各サーバに送信する転送先制御情報を生成する。コントローラ130が各サーバに対して転送先制御情報を送信すると、各サーバにおいて、転送先制御情報に示されるサーバとの通信接続処理が実行される。
図11は、転送先制御情報の一例を示す図である。図11の例では、サーバ210,240,250それぞれに送信する転送先制御情報55a〜55cを示している。図11には示していないが、サーバ210,240,250以外のサーバに対しても転送先制御情報が送信される。
転送先制御情報55a〜55cには、送信または受信の指定(送受信)と転送データの送信先の分散アプリのアプリID(App.ID)との組に対応付けて、接続先となる1以上のサーバ(接続先サーバ)が設定されている。転送先制御情報55a〜55cを受信したサーバ210,240,250の制御情報受信部212,242,252は、転送先制御情報55a〜55cをメッセージ転送部213,243,253に転送する。メッセージ転送部213,243,253は、転送先制御情報55a〜55cで指定された接続先サーバとの通信接続を行う。第2の実施の形態では、メッセージ転送部213,243,253は、データ送信用の通信接続とデータ受信用の通信接続とを個別に行う。
次に図12、図13を参照して、サーバの初期接続を行う際に、各装置が実行する処理について、フローチャートを参照して詳細に説明する。サーバの初期接続は、例えば新たなサービスが追加され、そのサービスのための分散アプリ実行順序情報51がプランナ31からコントローラ130に送信されたときに実行される。コントローラ130は、分散アプリ実行順序情報51を各サーバに配信後、通信経路決定処理を開始する。
図12は、コントローラによる通信経路決定処理の手順の一例を示すフローチャートである。以下、図12に示す処理をステップ番号に沿って説明する。
[ステップS101]コントローラ130は、分散アプリ配備先履歴117を参照し、分散アプリごとに、配備候補サーバのリストを作成する。分散アプリの配備候補サーバは、例えばその分散アプリの配備実績があるサーバである。そしてコントローラ130は、各分散アプリの配備候補サーバを纏めて、分散アプリ配備先候補情報53を作成する。
[ステップS102]コントローラ130は、ステップS103〜S104の処理を繰り返すことで、分散アプリフローの実行順序が連続している2つの分散アプリ(連続アプリ対)ごとにステップS103〜S104の処理を実行する。
[ステップS103]コントローラ130は、連続アプリ対に属する2つの分散アプリそれぞれの配備先候補を統合することで、出力データ転送サーバを決定する。
[ステップS104]コントローラ130は、出力データ転送サーバをフルメッシュ接続するサーバ(通信経路接続サーバ)のリストを作成する。コントローラ130は、作成した通信経路接続サーバのリストを、連続アプリ対における処理が後の分散サプリのアプリIDに対応付けて通信経路情報114に登録する。
[ステップS105]コントローラ130は、すべての連続アプリ対についてステップS103〜S104の処理が終了すると、処理をステップS106に進める。
[ステップS106]コントローラ130は、連続アプリ対ごとの通信経路接続サーバのリストを含む通信経路情報114に基づいて、サーバごとの転送先制御情報を作成する。例えばコントローラ130は、転送先制御情報の作成対象とするサーバを選択する。コントローラ130は、通信経路情報114に基づいて、選択したサーバを通信経路接続サーバに含む分散アプリを特定する。コントローラ130は、特定した分散アプリの通信経路接続サーバから選択したサーバに隣接するサーバを抽出し、抽出したサーバを、特定した分散アプリの送信および受信の接続先サーバとする。
[ステップS107]コントローラ130は、サーバごとに作成した転送先制御情報を、対応するサーバに送信する。
このようにして、転送先制御情報が各サーバに送信される。転送先制御情報を受信したサーバでは、接続先として指定されたサーバとの通信接続が行われる。
図13は、サーバによる通信接続処理の手順の一例を示すフローチャートである。以下、サーバ210が実行する場合を想定して、図13に示す処理をステップ番号に沿って説明する。
[ステップS111]制御情報受信部212は、センタサーバ100が送信した転送先制御情報55aを受信する。
[ステップS112]制御情報受信部212は、受信した転送先制御情報55aに出力データ配信先サーバが含まれるか否かを判断する。制御情報受信部212は、出力データ配信先サーバが含まれる場合、処理をステップS113に進める。また制御情報受信部212は、出力データ配信先サーバが含まれない場合、処理をステップS114に進める。
[ステップS113]制御情報受信部212は、転送先制御情報55aに示されているアプリIDと出力データ配信先サーバとの組を、アプリIDで示される分散アプリの出力データの配信先としてメッセージ転送部213に登録する。
[ステップS114]制御情報受信部212とメッセージ転送部213は、接続先サーバごとにステップS115〜S116の処理を実行する。
[ステップS115]制御情報受信部212は、アプリID、接続先サーバのサーバ名、データ転送条件(送信または受信)を含む接続先情報を、メッセージ転送部213に送信する。
[ステップS116]メッセージ転送部213は、接続先サーバのサーバ名で指定されたサーバとの間で、データ転送条件に応じた、アプリIDで示された分散アプリとのデータの転送用の通信接続を行う。
[ステップS117]制御情報受信部212とメッセージ転送部213は、すべての接続先サーバについて、ステップS115〜S116の処理が終了したら、通信接続処理を終了する。
このようにして、初期段階の通信接続が完了する。その後、コントローラ130は、プランナ31から送られた分散アプリ配備先サーバ情報52に基づいて、分散アプリの配備制御を行う。
図14は、分散アプリの配備制御の一例を示す図である。図14の例では、分散アプリ「App1」をサーバ210に配備し、分散アプリ「App2」をサーバ240に配備し、分散アプリ「App3」をサーバ250に配備するものとする。この場合、センタサーバ100のコントローラ130は、3台のサーバ210,240,250それぞれに対して、実行アプリ制御情報56a,56b,56cを送信する。サーバ210に送信される実行アプリ制御情報56aには、分散アプリ「App1」の配備の指示(操作「ON])が含まれている。サーバ240に送信される実行アプリ制御情報56bには、分散アプリ「App2」の配備の指示(操作「ON])が含まれている。サーバ250に送信される実行アプリ制御情報56cには、分散アプリ「App3」の配備の指示(操作「ON])が含まれている。
またコントローラ130は、新たな分散アプリの配備に伴い、分散アプリ配備先履歴117を更新する。分散アプリ配備先履歴117が更新されると、分散アプリごとの通信経路接続サーバも変更される可能性がある。そこでコントローラ130は、分散アプリの配備に伴って通信経路接続サーバの再計算を行い、新たな転送先制御情報57a〜57cを各サーバ210,240,250に送信する。なお図示していないサーバにも、転送先制御情報が送信される。
さらにコントローラ130は、分散アプリフローにおいて最後に実行する分散アプリ「App3」を配備するサーバ250に対して、出力データ配信先情報58を送信する。出力データ配信先情報58には、分散アプリ「App3」の出力データを送信する端末装置が示されている。
以下、図15〜図18を参照して、分散アプリ配備処理について詳細に説明する。
図15は、分散アプリ配備処理の手順の一例を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。分散アプリ配備処理は、例えばプランナ31から分散アプリ配備先サーバ情報を受信したときに実行される。
[ステップS121]コントローラ130は、プランナ31から分散アプリ配備先サーバ情報52を受信し、その分散アプリ配備先サーバ情報52を記憶部110に格納する。
[ステップS122]コントローラ130は、記憶部110に格納した分散アプリ配備先サーバ情報112に基づいて、分散アプリ配備先履歴117を更新する。例えばコントローラ130は、分散アプリ配備先サーバ情報112から、分散アプリのアプリIDと配備先サーバとの組を順番に選択する。そしてコントローラ130は、選択した組に対応する、分散アプリ配備先履歴117内の値に1を加算する。
[ステップS123]コントローラ130は、分散アプリ配備先サーバ情報112から、配備先が変更された分散アプリを抽出する。
[ステップS124]コントローラ130は、ステップS123において、配備先が変更された分散アプリが少なくとも1つ抽出できたか否かを判断する。コントローラ130は、分散アプリが抽出できなかった場合、分散アプリ配備処理を終了する。またコントローラ130は、分散アプリを抽出できた場合、ステップS125とステップS126の処理を並列に実行する。
[ステップS125]コントローラ130は、通信経路変更処理を行う。この処理の詳細は後述する(図16参照)。
[ステップS126]コントローラ130は、分散アプリ配備先変更準備処理を行う。この処理の詳細は後述する(図17参照)。
[ステップS127]コントローラ130は、ステップS125の処理とステップS126の処理との両方が終了すると、ステップS125,S126で生成された制御情報を、各サーバに送信する。
次に、通信経路更新処理について説明する。
図16は、通信経路更新処理の手順の一例を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。
[ステップS131]コントローラ130は、ステップS132〜S135の処理を繰り返すことで、配備先サーバが変更された分散アプリごとにステップS132〜S135の処理を実行する。
[ステップS132]コントローラ130は、現在設定済みの通信経路情報114を参照する。
[ステップS133]コントローラ130は、処理対象の分散アプリの配備先が、すでに接続済みサーバか否かを判断する。例えばコントローラ130は、通信経路情報114において、処理対象の分散アプリのアプリIDに対応付けて設定されている通信経路接続サーバに、その分散アプリの変更後の配備先のサーバが含まれていれば、そのサーバはすでに接続済みであると判断する。コントローラ130は、接続済みのサーバへの配備であれば、処理をステップS136に進める。またコントローラ130は、未接続のサーバへの配備であれば、処理をステップS134に進める。
[ステップS134]コントローラ130は、通信経路情報114における処理対象の分散アプリに対応する通信経路接続サーバに、処理対象の分散アプリの新たな配備先のサーバのサーバ名を追加する。
[ステップS135]コントローラ130は、分散アプリ実行順序情報111に基づいて、分散アプリフロー上で処理対象の分散アプリの次に実行する次実行分散アプリを特定する。そしてコントローラ130は、通信経路情報114における実行分散アプリに対応する通信経路接続サーバに、処理対象の分散アプリの新たな配備先のサーバのサーバ名を追加する。
[ステップS136]コントローラ130は、配備先のサーバが変更されたすべての分散アプリに対して、ステップS132〜S135の処理が終了したら、処理をステップS137に進める。
[ステップS137]コントローラ130は、更新された通信経路情報114に基づいて、変更の影響を受けるサーバの転送先制御情報を作成する。例えば新たな配備先のサーバのサーバ名が追加された通信経路接続サーバに示されるサーバ群のうち、新たな配備先のサーバに隣接するサーバが、変更の影響を受けるサーバである。
このようにして、配備先のサーバの変更に伴って通信接続を行うための転送先制御情報が生成される。
次に、分散アプリ配備先変更順準備処理について説明する。
図17は、分散アプリ配備先変更準備処理の手順の一例を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。
[ステップS141]コントローラ130は、サーバごとの起動・停止の実行アプリ制御情報を作成する。例えばコントローラ130は、新たに分散アプリが配備されるサーバに対しては、配備する分散アプリの操作「ON」を指示する実行アプリ制御情報を作成する。またコントローラ130は、配備先が変更される分散アプリの、変更前の配備先のサーバに対しては、配備されている分散アプリの操作「OFF」を指示する実行アプリ制御情報を作成する。
[ステップS142]コントローラ130は、分散アプリフローにおいて最初または最後に実行する分散アプリの配備先のサーバに変更があるか否かを判断する。コントローラ130は、配備先のサーバの変更がある場合、処理をステップS143に進める。またコントローラ130は、配備先の変更がない場合、分散アプリ配備先変更準備処理を終了する。
[ステップS143]コントローラ130は、分散アプリ実行順序情報111と、分散アプリ配備先サーバ情報112とを参照し、最初と最後に実行される分散アプリの配備先のサーバを、接続先情報115に登録する。
[ステップS144]コントローラ130は、最後に実行する分散アプリの配備先のサーバに変更があるか否かを判断する。コントローラ130は、配備先のサーバに変更がある場合、処理をステップS145に進める。またコントローラ130は、配備先のサーバに変更がない場合、分散アプリ配備先変更準備処理を終了する。
[ステップS145]コントローラ130は、出力データ配信先情報116を、最後に実行する分散アプリの配備先のサーバに対して送信する制御情報に含める。
図15〜図17の処理の結果、図14に示したような制御情報が、各サーバに送信される。転送先制御情報を受信したときのサーバの処理は、図13に示した通りである。実行アプリ制御情報を受信したサーバは、分散アプリの起動または停止処理を行う。
図18は、分散アプリ起動・停止処理の手順の一例を示すフローチャートである。以下、サーバ210が処理を実行する場合を想定し、図18に示す処理をステップ番号に沿って説明する。
[ステップS151]制御情報受信部212は、実行アプリ制御情報を受信する。
[ステップS152]制御情報受信部212は、アプリ実行部214へ、実行アプリ制御情報に示されている分散アプリのアプリIDと、操作内容(起動(ON)または停止(OFF))と、次に実行する分散アプリのアプリIDとを通知する。なお次に実行する分散アプリのアプリIDは、制御情報受信部212が分散アプリ実行順序情報211bを参照して特定する。
[ステップS153]アプリ実行部214は、ステップS154〜S158の処理を繰り返すことで、制御対象の分散アプリごとにステップS154〜S158の処理を実行する。
[ステップS154]アプリ実行部214は、操作内容が分散アプリの起動なのか停止なのかを判断する。アプリ実行部214は、操作内容が分散アプリの起動であれば、処理をステップS155に進める。またアプリ実行部214は、操作内容が分散アプリの停止であれば、処理をステップS157に進める。
[ステップS155]アプリ実行部214は、通知されたアプリIDに対応する分散アプリを起動する。
[ステップS156]アプリ実行部214は、メッセージ転送部213に、起動した分散アプリのアプリIDを、その分散アプリへの入力データの取得対象のアプリIDとして登録する。その後、メッセージ転送部213は、他のサーバから受信した転送データに、登録されたアプリIDが付与されていれば、その転送データ内のデータをアプリ実行部214に送信する。
[ステップS157]アプリ実行部214は、通知されたアプリIDに対応する分散アプリを停止する。
[ステップS158]アプリ実行部214は、メッセージ転送部213に登録されている停止した分散アプリのアプリIDを削除する。
[ステップS159]アプリ実行部214は、制御対象のすべての分散アプリについて、ステップS154〜S158の処理が終了したら、分散アプリ起動・停止処理を終了する。
このようして、分散アプリがいずれかのサーバに配備されると共に、分散アプリ間の転送データの送受信が可能となる。
次に、端末装置による接続先問い合わせ処理について説明する。
図19は、センサデータを送信する端末装置による接続先問い合わせの一例を示す図である。端末装置310(装置名「src」)の接続先問い合わせ部311は、センサデータの送信先を問い合わせる接続先問い合わせ61をセンタサーバ100に送信する。なお端末装置310には、センタサーバ100と通信するための情報(例えばIP(Internet Protocol)アドレス)が予め設定されている。接続先問い合わせ61には、操作要求61aが含まれる。操作要求61aには、分散アプリフローにおいて最初に実行する分散アプリのアプリIDと、操作「Publish」が含まれる。
センタサーバ100では、コントローラ130が接続先問い合わせ61を受信する。接続先問い合わせ61を受信したコントローラ130は、接続先情報115を参照し、データ送り先情報62を生成する。データ送り先情報62には、分散アプリフローにおいて最初に実行する分散アプリのアプリIDと操作「Publish」とに加え、接続先として、その分散アプリが配備されているサーバのサーバ名が含まれる。そしてコントローラ130は、データ送り先情報62を端末装置310に送信する。
端末装置310の接続先問い合わせ部311は、データ送り先情報62を受信すると、データ送り先情報62に接続先として設定されているサーバ名を、センサデータの送信先としてデータ送受信部312に設定する。その後、データ送受信部312は、センサデータを、接続先として設定されているサーバに対して送信する。
図20は、出力データの配信を受ける端末装置による接続先問い合わせの一例を示す図である。端末装置320(装置名「dst」)の接続先問い合わせ部321は、分散アプリフローにおける最後の分散アプリの出力データの配信を受けるための接続先問い合わせ63をセンタサーバ100に送信する。なお端末装置320には、センタサーバ100と通信するための情報が予め設定されている。接続先問い合わせ63には、操作要求63aが含まれる。操作要求63aには、分散アプリフローにおいて最後に実行する分散アプリのアプリIDと、操作「Subscribe」が含まれる。
センタサーバ100では、コントローラ130が接続先問い合わせ63を受信する。接続先問い合わせ63を受信したコントローラ130は、出力データ配信先情報116に、端末装置320の装置名「dst」を登録する。またコントローラ130は、接続先情報115を参照し、データ配信元情報64を生成する。データ配信元情報64には、分散アプリフローにおいて最後に実行する分散アプリのアプリIDと操作「Subscribe」とに加え、接続先として、その分散アプリが配備されているサーバのサーバ名が含まれる。そしてコントローラ130は、データ配信元情報64を端末装置320に送信する。
端末装置320の接続先問い合わせ部321は、データ配信元情報64を受信すると、データ配信元情報64に接続先として設定されているサーバ名を、出力データの送信元としてデータ送受信部322に設定する。その後、データ送受信部322は、出力データを、送信元として設定されているサーバから受信する。
次に、接続先問い合わせ処理の手順について、シーケンス図を用いて詳細に説明する。
図21は、接続先問い合わせ処理の手順の一例を示すシーケンス図である。図21の例では、端末装置310が接続先問い合わせを行うものとする。以下、図21に示す処理をステップ番号に沿って説明する。
[ステップS171]端末装置310の接続先問い合わせ部311は、問い合わせ内容を示す操作要求を作成する。操作要求には、操作内容として「データ登録(Publish)」、「データ購読開始(Subscribe)」、「データ購読停止(un−Subscribe)」のいずれかが設定される。
[ステップS172]接続先問い合わせ部311は、操作要求を付与した接続先問い合わせを、センタサーバ100に送信する。
[ステップS173]センタサーバ100では、コントローラ130が接続先問い合わせを受信する。
[ステップS174]コントローラ130は、操作が「データ購読開始(Subscribe)」または「データ購読停止(un−Subscribe)」か否かを判定する。コントローラ130は、操作が「データ購読開始(Subscribe)」と「データ購読停止(un−Subscribe)」とのいずれかであれば、処理をステップS175に進める。またコントローラ130は、操作が「データ登録(Publish)」であれば、処理をステップS176に進める。
[ステップS175]コントローラ130は、操作が「データ購読開始(Subscribe)」であれば、端末装置310の装置名を、分散アプリフローの出力データ配信先情報に追加する。またコントローラ130は、操作が「データ購読停止(un−Subscribe)」であれば、端末装置310の装置名を、分散アプリフローの出力データ配信先情報から削除する。
[ステップS176]コントローラ130は、接続先問い合わせに応じた接続先を、端末装置310に送信する。例えばコントローラ130は、操作が「データ登録(Publish)」であれば、分散アプリフローにおいて最初に実行する分散アプリが配備されたサーバのサーバ名を、接続先として端末装置310に送信する。またコントローラ130は、操作が「データ購読開始(Subscribe)」と「データ購読停止(un−Subscribe)」とのいずれかであれば、最後に実行する分散アプリが配備されたサーバのサーバ名を、接続先として端末装置310に送信する。
[ステップS177]端末装置310の接続先問い合わせ部311は、センタサーバ100から送信された接続先の情報を受信する。
[ステップS178]接続先問い合わせ部311は、接続先をデータ送受信部312に設定する。
このようにして、端末装置310からの接続問い合わせに示される操作要求に応じた処理が実行される。
その後、データ登録の操作要求を送信した端末装置からセンサデータが分散システムに送信され、分散アプリフローに基づく処理の出力データが、データ購読開始の操作要求を送信した端末装置に配信される。
図22は、分散処理の一例を示す図である。端末装置310内のデータ送受信部312は、センサデータ71を、分散アプリ「App1」が配備されているサーバ210に送信する。センサデータ71には、分散アプリ「App1」のアプリIDが示されている。
サーバ210では、メッセージ転送部213がセンサデータ71を受信する。メッセージ転送部213は、センサデータ71に含まれているアプリIDに基づいて、サーバ210に配備されている分散アプリ「App1」で処理するデータであることを把握する。そしてメッセージ転送部213は、センサデータ71に含まれるデータ72をアプリ実行部214に送信する。アプリ実行部214は、分散アプリ「App1」を用いてデータ72を処理する。そしてアプリ実行部214は、分散アプリフローにおいて分散アプリ「App1」の次に実行する分散アプリ「App2」を指定して、処理結果として得られたデータをメッセージ転送部213に送信する。メッセージ転送部213は、分散アプリ「App1」の出力データに分散アプリ「App2」のアプリIDを付与した転送データ73を、分散アプリ「App2」に対応付けて接続されている隣接サーバ間通信経路上に送信する。
転送データ73が隣接サーバ間通信経路上を伝送され、サーバ240に到達すると、メッセージ転送部243がその転送データ73を受信する。メッセージ転送部243は、転送データ73に含まれているアプリIDに基づいて、サーバ240に配備されている分散アプリ「App2」で処理するデータであることを把握する。そしてメッセージ転送部243は、転送データ73に含まれるデータ74をアプリ実行部244に送信する。アプリ実行部244は、分散アプリ「App2」を用いてデータ74を処理する。そしてアプリ実行部244は、分散アプリフローにおいて分散アプリ「App2」の次に実行する分散アプリ「App3」を指定して、処理結果として得られたデータをメッセージ転送部243に送信する。メッセージ転送部243は、分散アプリ「App2」の出力データに分散アプリ「App3」のアプリIDを付与した転送データ75を、分散アプリ「App3」に対応付けて接続されている隣接サーバ間通信経路上に送信する。
転送データ75が隣接サーバ間通信経路上を伝送され、サーバ250に到達すると、メッセージ転送部253がその転送データ75を受信する。メッセージ転送部243は、転送データ75に含まれているアプリIDに基づいて、サーバ250に配備されている分散アプリ「App3」で処理するデータであることを把握する。そしてメッセージ転送部253は、転送データ75に含まれるデータ76をアプリ実行部254に送信する。アプリ実行部254は、分散アプリ「App3」を用いてデータ76を処理する。そしてアプリ実行部254は、分散アプリフローにおいて分散アプリ「App3」が最後の分散アプリであるため、出力データの配信先の端末装置を指定して、処理結果として得られた出力データ77をメッセージ転送部253に送信する。メッセージ転送部253は、分散アプリ「App3」の出力データ77を、配信先である端末装置320に送信する。端末装置320では、データ送受信部322が出力データを受信する。
このような分散処理における分散システム内で転送される転送データ73,75は、付与されたアプリIDに対応付けて接続されたすべての隣接サーバ間通信経路を介して送信される。そのため分散アプリの配備先が変更された場合においても、変更先のサーバに対して、予め隣接サーバ間通信経路が接続されているとともに、処理するデータが事前に送られていることが期待できる。
しかも第2の実施の形態では、分散アプリ配備先履歴117に基づいて、分散アプリの配備先となる可能性が高いサーバに対してのみ、その分散アプリに対応する隣接サーバ間通信経路を接続している。そのため、分散システム内に転送されるデータ量を抑制することができる。
図23は、分散システム内で転送される転送データの一例を示す図である。分散アプリ「App1」が配備されたサーバ210において、分散アプリ「App1」の出力データを含む転送データ73a,73b,73cが、通信接続されている各サーバ220,230,240に送信される。分散アプリ「App2」が配備されていないサーバ220,230に送信された転送データ73a,73bは、分散アプリ「App2」に対応する隣接サーバ間通信経路を用いて、別のサーバに転送される。例えばサーバ230は、受信した転送データ73bをサーバ220,240,250には転送するが、サーバ260,270へは転送しない。
分散アプリ「App2」が配備されたサーバ240が転送データ73cを受信すると、サーバ240において、転送データ73cに含まれる分散アプリ「App1」の出力データが、分散アプリ「App2」を用いて処理される。その後、分散アプリ「App2」の出力データを含む転送データ75a,75bが、通信接続されている各サーバ230,260に送信される。分散アプリ「App3」が配備されていないサーバ230,260に送信された転送データ75a,75bは、分散アプリ「App3」に対応する隣接サーバ間通信経路を用いて、別のサーバに転送される。例えばサーバ230は、受信した転送データ73bをサーバ250,260,270には転送するが、サーバ210,220へは転送しない。
分散アプリ「App3」が配備されたサーバ250は、転送データ75aを受信すると、サーバ250において、転送データ75aに含まれる分散アプリ「App3」の出力データが、分散アプリ「App3」を用いて処理される。分散アプリ「App3」による処理の出力データは、配信を希望している端末装置に送信される。
このように、転送データの転送先に制限を設けたことで、分散システム内で通信されるデータ量を削減することができる。以下、図24を参照して、センサデータまたは転送データを受信したサーバにおける分散アプリ実行およびデータ転送処理について詳細に説明する。
図24は、分散アプリ実行およびデータ転送処理の手順の一例を示すフローチャートである。以下、サーバ210が実行する場合を想定し、図24に示す処理をステップ番号に沿って説明する。
[ステップS181]メッセージ転送部213は、センサデータまたは転送データを受信する。
[ステップS182]メッセージ転送部213は、受信したセンサデータまたは転送データに付与されたアプリIDで示された分散アプリに対応付けて通信接続された隣接サーバ間通信経路に受信データを転送する。
[ステップS183]メッセージ転送部213は、受信したセンサデータまたは転送データに示されているアプリIDの分散アプリを実行中か否かを判断する。例えばメッセージ転送部213は、実行対象分散アプリID211aと、受信したセンサデータまたは転送データに示されているアプリIDとが一致した場合、該当する分散サプリを実施中であると判断する。メッセージ転送部213は、該当する分散アプリを実行中であれば、処理をステップS184に進める。またメッセージ転送部213は、該当する分散アプリを実行中でなければ、分散アプリ実行およびデータ転送処理を終了する。
[ステップS184]メッセージ転送部213は、アプリ実行部214に受信したデータ(センサデータまたは転送データ)を転送する。
[ステップS185]アプリ実行部214は、分散アプリを用いて入力されたデータを処理する。例えばアプリ実行部214は、分散アプリを実行しているプロセスに入力されたデータを送信し、戻り値として処理結果を受信する。
[ステップS186]アプリ実行部214は、処理を実行した分散アプリが、分散アプリフローにおいて最後に実行する分散アプリか否かを判断する。アプリ実行部214は、最後の分散アプリであれば、処理をステップS187に進める。またアプリ実行部214は、最後の分散アプリでなければ、処理をステップS188に進める。
[ステップS187]アプリ実行部214は、配信先の端末装置を指定して、出力データをメッセージ転送部213に送信する。その後、処理がステップS189に進められる。
[ステップS188]アプリ実行部214は、次に実行する分散アプリのアプリIDを出力データに付加し、転送データを作成する。
[ステップS189]メッセージ転送部213は、配信先の端末装置への出力データの送信、または次に実行する分散アプリが配備されたサーバへの転送データの送信を行う。
図24に示した処理が、センサデータまたは転送データを受信した各サーバで実行される。その結果、図23に示したように、予め限定した範囲で通信接続した通信内で、転送データが送信される。これにより、分散システム内の通信データ量が削減される。
〔第3の実施の形態〕
次に第3の実施の形態について説明する。第3の実施の形態は、過去の分散アプリの配備サーバの履歴とサーバ間の転送遅延情報とを用いて適切な隣接サーバ間通信経路を決定することで、分散システムにおけるトラフィック量を削減するものである。以下、第3の実施の形態について、第2の実施の形態と相違する部分を中心に説明する。なお、第3の実施の形態における、第2の実施の形態と同様の機能を有する要素には、第3の実施の形態と同じ符号を付し、その要素の説明を省略する。
第3の実施の形態では、センタサーバが、第2の実施の形態と同様に、過去に各サーバに対して分散アプリが配備された履歴を作成する。それに加え、第3の実施の形態のセンタサーバは、各サーバから、他のサーバとの転送遅延時間の測定結果を収集する。
図25は、転送遅延時間の測定結果の収集例を示す図である。分散システム内の各サーバ210a,220a,230a,240a,250a,260a,270aは、到達可能な他の隣接するサーバとの間のデータ転送の遅延時間を測定する。遅延時間は、例えば所定のサイズのデータを送信元から送信を開始してから、すべてのデータが送信先で受信完了するまでの時間である。また遅延時間として、送信先からの要求に応じて送信元がデータを送信する際の片道レイテンシを用いてもよい。また各サーバは、送信元から送信先へのデータ転送の帯域幅(単位時間当たりの送信データ量)を測定し、帯域幅から遅延時間を算出してもよい。
例えばサーバ210aは、サーバ220a,230a,240aとの間の遅延時間を測定する。サーバ210aは、各サーバとの間のデータ転送の遅延時間を含む転送遅延測定結果81をセンタサーバ100aに送信する。他のサーバ220a,230a,240a,250a,260a,270aも同様に、測定した遅延時間を含む転送遅延測定結果を、センタサーバ100aに送信する。
センタサーバ100aは、収集した転送遅延測定結果に基づいて、サーバ間転送遅延情報118を生成する。サーバ間転送遅延情報118には、送信元のサーバ名と送信先のサーバ名との組に対応付けて、送信元のサーバから送信先のサーバにデータを転送する際の遅延時間が設定されている。
またセンタサーバ100aは、分散アプリごとに、最も配備頻度(配備の回数)が高いサーバを起点として、起点のサーバから他のサーバそれぞれに対し、転送遅延が最も低くなる通信経路を決定する。そしてセンタサーバ100aは、決定した通信経路上の隣接サーバ間通信経路を、対応する分散アプリの出力データを転送するための隣接サーバ間通信経路とする。
図26は、起点のサーバからのデータ転送の遅延時間に応じた通信経路の接続の第1の例を示す図である。図26は、分散アプリ「App1」からの出力データを含む、分散アプリ「App2」への転送データを転送するための隣接サーバ間通信経路の接続例が示されている。分散アプリ配備先履歴117において、分散アプリ「App1」の配備頻度が最も高いのは、サーバ210a(サーバ名「ServerA」)であるものとする。
この場合、センタサーバ100aは、サーバ210aを起点サーバとし、サーバ210aから他のサーバ220a,230a,240a,250a,260a,270aそれぞれに対して、最もデータ転送の遅延時間が短い通信経路を決定する。例えばサーバ210aからサーバ240aへの通信経路としては、直接接続された経路、サーバ230aを経由する経路、サーバ230aおよびサーバ260aを経由する経路などがある。
センタサーバ100aは、サーバ間転送遅延情報118を参照し、各経路の合計の遅延時間を計算する。例えばサーバ210からサーバ220aへ直接データ転送を行う経路であれば、送信元「ServerA」、送信先「ServerD」の組に対応する遅延時間が、その経路の遅延時間である。
またサーバ210aから、サーバ230aを経由してサーバ220aへデータ転送を行う経路であれば、複数の遅延時間が合計される。すなわち、送信元「ServerA」、送信先「ServerC」の組に対応する遅延時間と、送信元「ServerC」、送信先「ServerD」の組に対応する遅延時間との合計が、その経路の遅延時間となる。
センタサーバ100aは、サーバ210aから他のサーバ220a,230a,240a,250a,260a,270aそれぞれに対する、最もデータ転送の遅延時間が短い通信経路を決定する。そしてセンタサーバ100aは、決定した通信経路上の隣接サーバ間通信経路を、転送データの送信に使用する隣接サーバ間通信経路に決定する。
図27は、起点のサーバからのデータ転送の遅延時間に応じた通信経路の接続の第2の例を示す図である。図27は、分散アプリ「App2」からの出力データを含む、分散アプリ「App3」への転送データを転送するための隣接サーバ間通信経路の接続例が示されている。分散アプリ配備先履歴117において、分散アプリ「App2」の配備頻度が最も高いのは、サーバ240a(サーバ名「ServerD」)であるものとする。
この場合、センタサーバ100aは、サーバ240aを起点サーバとし、サーバ240aから他のサーバ210a,220a,230a,250a,260a,270aそれぞれに対して、最もデータ転送の遅延時間が短い通信経路を決定する。そしてセンタサーバ100aは、最もデータ転送の遅延時間が短い通信経路上の隣接サーバ間通信経路を、該当するサーバへの転送データの送信に使用する隣接サーバ間通信経路に決定する。
図28は、第3の実施の形態における各装置の機能の一例を示す図である。第3の実施の形態のサーバ210aは、図5に示した第2の実施の形態のサーバ210が有する機能に加え、通信状況監視部215を有している。通信状況監視部215は、サーバ210aから他のサーバへのデータ転送の遅延時間を測定する。そして通信状況監視部215は、転送遅延測定結果81(図25参照)を、センタサーバ100aに送信する。他のサーバ220a,・・・も、サーバ210aと同様の機能を有している。
第3の実施の形態のセンタサーバ100aは、図5に示した第2の実施の形態のセンタサーバ100が有する機能に加え、サーバ情報受信部140を有している。サーバ情報受信部140は、各サーバ210a,220a,・・・から転送遅延測定結果を収集する。サーバ情報受信部140は、収集した転送遅延測定結果を、コントローラ130aに転送する。
第3の実施の形態におけるコントローラ130aは、サーバ情報受信部140から各サーバ210a,220a,・・・の転送遅延測定結果を取得すると、サーバ間転送遅延情報118を生成する。そしてコントローラ130aは、生成したサーバ間転送遅延情報118を、記憶部110aに格納する。
図29は、第3の実施の形態におけるセンタサーバの記憶部に格納されている情報の一例を示す図である。記憶部110aに格納されている情報のうち、通信経路情報114aとサーバ間転送遅延情報118以外の情報は、第2の実施の形態に示した同名の情報(図6参照)と同様の内容である。またサーバ間転送遅延情報118の内容は、図25に示した通りである。第3の実施の形態における通信経路情報114aは、分散アプリのアプリIDに対応付けて、接続対象の隣接サーバ間通信経路の両端のサーバのサーバ名の組が設定されている。
次に、第3の実施の形態における第2の実施の形態と異なる処理について、フローチャートを参照して説明する。
図30は、サーバにおける通信状況監視処理の手順の一例を示すフローチャートである。以下、サーバ210aが実行する場合を想定して、図30に示す処理についてステップ番号に沿って説明する。
[ステップS201]通信状況監視部215は、終了の指示があるまでステップS202〜S204の処理を繰り返す。
[ステップS202]通信状況監視部215は、隣接するサーバとの通信の遅延時間を測定する。
[ステップS203]通信状況監視部215は、転送遅延測定結果81(図25参照)を作成する。
[ステップS204]通信状況監視部215は、転送遅延測定結果81を、センタサーバ100aに送信する。
[ステップS205]通信状況監視部215は、終了の指示が入力された場合、通信状況監視処理を終了する。
このようにして、サーバ210aにおいて遅延時間が測定される。他のサーバ220a,230a,240a,250a,260a,270aでも同様に遅延時間が測定される。測定された遅延時間を含む転送遅延測定結果を受信するごとに、コントローラ130aはサーバ間遅延時間情報更新処理を行う。
図31は、第3の実施の形態におけるサーバ間遅延時間情報更新処理の手順の一例を示すフローチャートである。以下、図31に示す処理をステップ番号に沿って説明する。
[ステップS211]コントローラ130aは、各サーバから、転送遅延測定結果を受信する。
[ステップS212]コントローラ130aは、サーバ間転送遅延情報118のうち、受信した転送遅延測定結果に対応する部分の遅延時間を更新する。
このようにして、サーバ間転送遅延情報118が更新され、最新の遅延時間が登録される。次に、第3の実施の形態における通信経路決定処理の手順について説明する。
図32は、第3の実施の形態における通信経路決定処理の手順の一例を示すフローチャートである。図32に示す処理のうちステップS222,S225〜S227は、それぞれ図12に示した第2の実施の形態における通信経路決定処理のステップS102,S105〜S107と同じである。以下、第2の実施の形態と異なるステップS221,S223,S224について説明する。
[ステップS221]コントローラ130aは、分散アプリごとに、配備候補サーバのリストを作成する。第3の実施の形態における分散アプリの配備候補サーバは、分散システム内のすべてのサーバである。そしてコントローラ130は、各分散アプリの配備候補サーバを纏めて、分散アプリ配備先候補情報を作成する。
[ステップS223]コントローラ130aは、分散アプリ配備先履歴117を参照し、処理対象の連続アプリ対(実行順が連続する2つの分散アプリ)のうちの実行順が先の分散アプリについて、その分散アプリの配備候補サーバの中から、配備回数が最も多いサーバを選択する。
[ステップS224]コントローラ130aは、選択したサーバから他のサーバそれぞれへの遅延時間が最短となる経路を求める。遅延時間が最短となる経路は、例えばダイクストラ法によって決定することができる。次にコントローラ130aは、遅延時間が最短の経路に基づいて、処理対象の連続アプリ対に対応する通信経路情報を作成する。例えばコントローラ130aは、他のサーバそれぞれへの遅延時間が最短となる経路上の、隣接するサーバの対(隣接サーバ対)を特定する。そしてコントローラ130aは、特定した隣接サーバ対を、処理対象の連続アプリ対における実行順が後の分散アプリのアプリIDに対応付けて、通信経路情報114aに設定する。
このようにして、図29に示したような通信経路情報114aが作成される。そして通信経路情報に基づいて、各サーバに送信する転送先制御情報が作成され、対応するサーバに送信される。
図33は、第3の実施の形態における転送先制御情報の一例を示す図である。図33には、図26、図27に示した隣接サーバ間通信経路の通信接続をサーバ210a,240a,250aに実行させるための転送先制御情報55d,55e,55fが示されている。なお、図33に示していないサーバに対しても、対応する転送先制御情報が送信される。
このような転送先制御情報を送信することで、図26、図27に示した隣接サーバ間通信経路の通信接続を各サーバに実行させることができる。
なお、第3の実施の形態では、第2の実施の形態と異なり、通信経路は1系統に限定されるものの、すべてのサーバに対して通信接続が行われる。そのため、分散アプリ配備処理によって分散アプリの配備先が変更されても、通信経路の変更処理を実行せずに済む。
図34は、第3の実施の形態における分散アプリ配備処理の手順の一例を示すフローチャートである。図34に示す処理のうちステップS231〜S236は、それぞれ図15に示した第2の実施の形態における分散アプリ配備処理のステップS121〜S124,S126,S127と同じである。異なるのは、第2の実施の形態において実行していた通信経路更新処理(ステップS125)が、第3の実施の形態では実行されない点である。
このように、第3の実施の形態では、遅延時間が短い通信経路上の隣接サーバ間通信経路で通信接続を行うため、処理の効率化が図れる。
〔第4の実施の形態〕
次に第4の実施の形態について説明する。第4の実施の形態は、通信接続について、分散アプリの配備履歴に基づいて、通信方向ごとに接続するか否かを判断するものである。すなわち第2および第3の実施の形態では、通信接続を行うと決定した隣接サーバ間通信経路について、双方向の通信が可能なように接続している。しかし、過去の分散アプリの配備状況から、一方の通信については、有用性が低い場合がある。有用性が低い通信方向については通信接続を行わないようにすることで、無駄な転送データの送信を抑止し、ネットワーク上の通信データ量を削減することができる。以下、第4の実施の形態について、第3の実施の形態との相違する部分を中心に説明する。なお、第4の実施の形態における第3の実施の形態と同様の機能を有する要素には、第3の実施の形態と同じ符号を付し、その要素の説明を省略する。
第4の実施の形態では、センタサーバが、第3の実施の形態と同様に、過去に各サーバに対して分散アプリが配備された履歴を作成すると共に、各サーバから、他のサーバとの転送遅延時間の測定結果を収集する。そして、センタサーバは、第3の実施の形態と同様に、分散アプリの配備頻度が最も高いサーバを起点サーバとし、起点サーバから他のサーバへの通信経路のうち、データ転送の遅延時間が最も短くなる通信経路を特定する。
第4の実施の形態では、センタサーバが、データ転送の遅延時間が最も短くなる通信経路の上の各サーバに着目し、そのサーバから通信経路の末端まで辿ることで到達可能なサーバにおける、次に実行する分散アプリの配備の実績の有無を判断する。配備実績がない場合、センタサーバは、着目しているサーバより末端の経路はデータの転送方向を一方向に限定し、通信経路情報を作成する。
図35は、データの転送方向を一方向に限定した通信経路接続の第1の例を示す図である。図35は、分散アプリ「App1」からの出力データを含む、分散アプリ「App2」への転送データを転送するための隣接サーバ間通信経路の接続例が示されている。図35の例では、分散アプリ「App1」の配備頻度が最も高いのはサーバ210aであり、サーバ210aが起点サーバとなる。また、サーバ220a,260a,270aには、分散アプリ「App2」の配備実績がないものとする。
この場合、例えば起点サーバであるサーバ210aとサーバ220aとを接続する隣接サーバ間通信経路については、サーバ220aに分散アプリ「App2」の配備実績がないため、サーバ220aからサーバ210aへの通信方向の通信接続を行えば十分である。そのため、サーバ210aとサーバ220aとを接続する隣接サーバ間通信経路は、サーバ220aからサーバ210aへの一方向のみの通信接続が行われる。
同様に、サーバ260aに分散アプリ「App2」の配備実績がないため、サーバ240aとサーバ260aとを接続する隣接サーバ間通信経路は、サーバ260aからサーバ240aへの一方向のみの通信接続が行われる。またサーバ270aに分散アプリ「App2」の配備実績がないため、サーバ230aとサーバ270aとを接続する隣接サーバ間通信経路は、サーバ270aからサーバ230aへの一方向のみの通信接続が行われる。
図36は、データの転送方向を一方向に限定した通信経路接続の第2の例を示す図である。図36は、分散アプリ「App2」からの出力データを含む、分散アプリ「App3」への転送データを転送するための隣接サーバ間通信経路の接続例が示されている。図36の例では、分散アプリ「App2」の配備頻度が最も高いのはサーバ240aであり、サーバ240aが起点サーバとなる。また、サーバ210a,220a,230aには、分散アプリ「App3」の配備実績がないものとする。
この場合、サーバ220aに分散アプリ「App3」の配備実績がないため、サーバ210aとサーバ230aとを接続する隣接サーバ間通信経路は、サーバ230aからサーバ210aへの一方向のみの通信接続が行われる。またサーバ210aとサーバ220aとの両方に分散アプリ「App3」の配備実績がないため、サーバ240aとサーバ210aとを接続する隣接サーバ間通信経路は、サーバ210aからサーバ240aへの一方向のみの通信接続が行われる。
図37は、第4の実施の形態における各装置の機能の一例を示す図である。第4の実施の形態のセンタサーバ100bの記憶部110bは、図28に示した第3の実施の形態の通信経路情報114aに代えて、方向指定通信経路情報114bを有している。
図38は、第4の実施の形態におけるセンタサーバの記憶部に格納されている情報の一例を示す図である。方向指定通信経路情報114bには、分散アプリのアプリIDに対応付けて、送信元となるサーバのサーバ名と送信先となるサーバのサーバ名との組が設定されている。図38の例では、組になった2つのサーバ名のうち、左側のサーバ名が送信元のサーバを示しており、右側のサーバ名が送信先のサーバを示している。
次に、第4の実施の形態のコントローラ130bによる通信経路決定処理の手順について、詳細に説明する。
図39は、第4の実施の形態における通信経路決定処理の手順の一例を示すフローチャートである。図39に示す処理のうちステップS301〜S303,S311〜S313は、それぞれ図32に示した第3の実施の形態における通信経路決定処理のステップS221〜S223,S225〜S227と同じである。以下、第3の実施の形態と異なるステップS304〜S310について説明する。
[ステップS304]コントローラ130bは、ステップS303で選択したサーバから他のサーバそれぞれへの遅延時間が最短となる経路(最短経路)を求める。
[ステップS305]コントローラ130bは、ステップS306〜S309の処理を繰り返すことで、最短経路上で隣接する隣接サーバ対ごとにステップS306〜S309の処理を実行する。ここで、隣接サーバ対の2つのサーバのうち、最短経路上で起点サーバに近い方のサーバを親、起点サーバから遠い方のサーバを子とする。
[ステップS306]コントローラ130bは、分散アプリ配備先履歴117を参照し、最短経路上で、隣接サーバ対の親のサーバより末端側(起点サーバから遠い側)のサーバについて、次に実行する分散アプリの配備実績の有無を確認する。
[ステップS307]コントローラ130bは、最短経路上で、隣接サーバ対の親のサーバより末端側のサーバの少なくとも1つに、次に実行する分散アプリの配備実績があるか否かを判断する。コントローラ130bは、配備実績がある場合、処理をステップS308に進める。またコントローラ130bは、配備実績がない場合、処理をステップS309に進める。
[ステップS308]コントローラ130bは、通信方向を双方向として、処理対象の隣接サーバ対を、処理対象の連続アプリ対における処理順が後の分散アプリのアプリIDに対応付けて、方向指定通信経路情報114bに登録する。例えばコントローラ130bは、隣接サーバ対の親のサーバのサーバ名を送信元、子のサーバのサーバ名を送信先とするデータを、方向指定通信経路情報114bに登録する。さらにコントローラ130bは、隣接サーバ対の子のサーバのサーバ名を送信元、親のサーバのサーバ名を送信先とする通信経路接続サーバを、方向指定通信経路情報114bに登録する。コントローラ130bは、その後、処理をステップS310に進める。
[ステップS309]コントローラ130bは、通信方向を、親のサーバから子のサーバへの一方向として、処理対象の隣接サーバ対を、処理対象の連続アプリ対における処理順が後の分散アプリのアプリIDに対応付けて、方向指定通信経路情報114bに登録する。例えばコントローラ130bは、隣接サーバ対の親のサーバのサーバ名を送信元、子のサーバのサーバ名を送信先とするデータを、方向指定通信経路情報114bに登録する。
[ステップS310]コントローラ130bは、最短経路上のすべての隣接サーバ対に対するステップS306〜S309の処理が終了したら、処理をステップS311に進める。
このようにして、方向指定通信経路情報114bが生成され、方向指定通信経路情報114bに基づいて、各サーバに転送先制御情報が送信される。
図40は、第4の実施の形態における転送先制御情報の一例を示す図である。図40には、図35、図36に示した通信経路の通信接続をサーバ210a,240a,250aに実行させるための転送先制御情報55g,55h,55iが示されている。なお、図40に示していないサーバに対しても、対応する転送先制御情報が送信される。
このような転送先制御情報を送信することで、図35、図36に示した通信経路の通信接続を各サーバに実行させることができる。各サーバに送信方向を限定して通信接続をさせることで、転送データの転送量が削減され、分散システムの処理効率が向上する。
〔その他の実施の形態〕
第2の実施の形態と第4の実施の形態とを組み合わせることができる。例えば第4の実施の形態に第2の実施の形態の処理を適用する場合、コントローラ130bは、図39のステップS301に代えて、図12のステップS101の処理を実行する。これにより、各分散アプリの配備候補サーバが、過去にその分散アプリの配備実績があるサーバに限定される。そしてステップS304では、配備候補サーバについてのみ、最短経路を求める。
また第3の実施の形態と第4の実施の形態では、分散アプリの配備頻度が最も高いサーバを起点サーバとして最短経路を求めているが、他のサーバを起点サーバとしてもよい。例えば該当する分散アプリが現在配備されているサーバを起点サーバとしてもよい。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。