(57)【要約】【課題】データ転送に使用するのに適切な通信経路を判断できるようにする。【解決手段】通信経路管理装置１０は、入力データ２に対する実行順が決められた複数の処理それぞれの、ネットワーク１内の複数のサーバ１ａ〜１ｄそれぞれでの実行実績１１ａを記憶する。通信経路管理装置１０は、実行順において連続する２つの処理からなる処理対ごとに、処理対における実行順が前の第１処理と実行順が後の第２処理との、複数のサーバそれぞれでの実行実績に基づいて、ネットワークにおける複数のサーバ１ａ〜１ｄ間の通信経路上で隣接するサーバ間を接続する複数の隣接サーバ間通信経路の一部を、第１処理から第２処理へのデータ転送に使用するデータ転送用経路に決定する。そして通信経路管理装置１０は、データ転送用経路の両端のサーバに、第１処理の実行結果のデータ転送用経路によるデータ転送を指示する。【選択図】図１
2018207285.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
入力データに対する実行順が決められた複数の処理それぞれの、ネットワーク内の複数のサーバそれぞれでの実行実績を記憶し、
前記実行順において連続する２つの処理からなる処理対ごとに、前記処理対における前記実行順が前の第１処理と前記実行順が後の第２処理との、前記複数のサーバそれぞれでの前記実行実績に基づいて、前記ネットワークにおける前記複数のサーバ間の通信経路上で隣接するサーバ間を接続する複数の隣接サーバ間通信経路のうちの一部を、前記第１処理から前記第２処理へのデータ転送に使用するデータ転送用経路に決定し、
前記処理対ごとに決定された前記データ転送用経路の両端のサーバに、前記第１処理の実行結果の前記データ転送用経路によるデータ転送を指示する、
処理を実行させる通信経路管理プログラム。
【請求項２】
前記データ転送用経路の決定では、前記第１処理または前記第２処理についての前記実行実績に対する統計的手法により、前記複数のサーバのうちの一部をデータ送信先サーバに決定し、前記データ送信先サーバ間の隣接サーバ間通信経路を、前記データ転送用経路に決定する、
請求項１記載の通信経路管理プログラム。
【請求項３】
前記コンピュータは、さらに、前記ネットワークにおける前記複数のサーバ間の通信経路上で隣接するサーバ間の通信の遅延時間を示す遅延時間情報を記憶し、
前記実行実績には、前記複数のサーバそれぞれの前記第１処理の実行頻度が示されており、
前記データ転送用経路の決定では、前記複数のサーバそれぞれの前記第１処理の前記実行頻度に基づいて、前記複数のサーバのうち、前記第１処理の実行頻度が最も高いサーバを起点サーバとして特定し、前記遅延時間情報に基づいて、前記起点サーバから他のサーバそれぞれへの通信経路のうち、通信の遅延時間が最短となる最短経路を決定し、前記最短経路上の隣接サーバ間通信経路を、前記データ転送用経路に決定する、
請求項１記載の通信経路管理プログラム。
【請求項４】
前記コンピュータに、さらに、
前記データ転送用経路を経由する前記最短経路を、前記データ転送用経路から、前記起点サーバから遠い方へ辿ることで到達可能なサーバのいずれか１台で、前記第２処理を実行した実績があるか否かを判断する、
処理を実行させ、
前記指示では、前記第２処理を実行した実績があると判断された前記データ転送用経路の両端のサーバに対しては、双方向通信の通信接続の確立を指示し、前記第２処理を実行した実績がないと判断された前記データ転送用経路の両端のサーバに対しては、前記起点サーバから遠い方から近い方への単方向通信の通信接続の確立を指示する、
請求項３記載の通信経路管理プログラム。
【請求項５】
前記コンピュータに、さらに、
前記複数の処理それぞれの実行する実行サーバを指定するサーバ指定情報を受信すると、前記サーバ指定情報で指定された前記実行サーバに対して、対応する処理の実行を指示し、
前記実行サーバにおける、前記対応する処理の前記実行実績を更新する、
処理を実行させる請求項１ないし４のいずれかに記載の通信経路管理プログラム。
【請求項６】
コンピュータが、
入力データに対する実行順が決められた複数の処理それぞれの、ネットワーク内の複数のサーバそれぞれでの実行実績を記憶し、
前記実行順において連続する２つの処理からなる処理対ごとに、前記処理対における前記実行順が前の第１処理と前記実行順が後の第２処理との、前記複数のサーバそれぞれでの前記実行実績に基づいて、前記ネットワークにおける前記複数のサーバ間の通信経路上で隣接するサーバ間を接続する複数の隣接サーバ間通信経路のうちの一部を、前記第１処理から前記第２処理へのデータ転送に使用するデータ転送用経路に決定し、
前記処理対ごとに決定された前記データ転送用経路の両端のサーバに、前記第１処理の実行結果の前記データ転送用経路によるデータ転送を指示する、
通信経路管理方法。
【請求項７】
入力データに対する実行順が決められた複数の処理それぞれの、ネットワーク内の複数のサーバそれぞれでの実行実績を記憶する記憶部と、
前記実行順において連続する２つの処理からなる処理対ごとに、前記処理対における前記実行順が前の第１処理と前記実行順が後の第２処理との、前記複数のサーバそれぞれでの前記実行実績に基づいて、前記ネットワークにおける前記複数のサーバ間の通信経路上で隣接するサーバ間を接続する複数の隣接サーバ間通信経路のうちの一部を、前記第１処理から前記第２処理へのデータ転送に使用するデータ転送用経路に決定し、前記処理対ごとに決定された前記データ転送用経路の両端のサーバに、前記第１処理の実行結果の前記データ転送用経路によるデータ転送を指示する処理部と、
を有する通信経路管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信経路管理プログラム、通信経路管理方法、および通信経路管理装置に関する。
【背景技術】
【０００２】
ＩｏＴ（Internet of Things）と呼ばれるように、今日では様々な機器をネットワークに接続することができる。ネットワークに接続された多数の機器から大量のデータを収集し、収集したデータをコンピュータで処理すれば、様々な知見を得ることができる。
【０００３】
大量のデータを処理するコンピュータシステムの１つに、分散システムがある。分散システムは、収集したデータに対して、複数のサーバを用いて、予め決められた順序で複数の処理を実行する。なお、分散システム内のサーバには、各処理を実行するためのアプリケーションソフトウェア（以下、分散アプリと呼ぶ）が導入されている。分散システムは、分散アプリを異なるサーバ上で実行することで処理負荷を分散させ、膨大な量のデータの処理を可能としている。
【０００４】
分散システムに関する技術としては、例えばクラウド内でのアプリケーション・コンポーネントの効率的で柔軟な配置を可能にする方法がある。また分散アプリケーションを構成する複数のソフトウェア部品について、各ソフトウェア部品の連携動作が適正に行われるように最適化された配置先ノードの選択支援を行う技術も考えられている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１５−５１５０３７号公報
【特許文献２】特開２００９−２８２６５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
分散システムでは、システム全体の効率化やシステムのメンテナンスなどのため、分散アプリを実行するサーバを変更することがある。分散アプリを実行するサーバの変更の際には、新たに分散アプリを実行するサーバへのデータの引き継ぎや、そのサーバへ処理対象のデータを転送するための新たな通信接続などの処理が行われる。通信接続は、処理順が前の処理を実行するサーバから、処理順が後の処理を実行するサーバまでの通信経路上の隣接するサーバ間を接続する各隣接サーバ間通信経路で、個別に実行される。そのため、分散アプリを実行するサーバの変更にはある程度の時間がかかり、その間、処理が遅延してしまう。
【０００７】
そこで、サーバ間のすべての隣接サーバ間通信経路について予め通信接続を行っておき、各分散アプリに処理させるデータを、通信接続したすべての隣接サーバ間通信経路を介して、すべてのサーバに常に転送しておくことが考えられる。これにより、分散アプリを実行するサーバの変更を迅速に行うことができる。
【０００８】
しかし、分散システムにおいて、隣接するサーバ間のすべての隣接サーバ間通信経路の通信接続を行っておき、すべてのサーバに対してすべてのデータを転送すると、転送されるデータ量が増大し、ネットワークの負荷が過大となってしまう。ネットワークの負荷の低減のためには、データの転送を行う隣接サーバ間通信経路を一部の隣接サーバ間通信経路に限定することが有効であるが、従来は、どの隣接サーバ間通信経路でデータ転送を行うのが適切なのかについて判断する有効な手段がない。
【０００９】
１つの側面では、本発明は、データ転送に使用するのに適切な隣接サーバ間通信経路を判断できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
１つの案では、コンピュータに、以下の処理を実行させる通信経路管理プログラムが提供される。コンピュータは、通信経路管理プログラムに基づいて、入力データに対する実行順が決められた複数の処理それぞれの、ネットワーク内の複数のサーバそれぞれでの実行実績を記憶する。さらにコンピュータは、実行順において連続する２つの処理からなる処理対ごとに、処理対における実行順が前の第１処理と実行順が後の第２処理との、複数のサーバそれぞれでの実行実績に基づいて、ネットワークにおける複数のサーバ間の通信経路上で隣接するサーバ間を接続する複数の隣接サーバ間通信経路のうちの一部を、第１処理から第２処理へのデータ転送に使用するデータ転送用経路に決定する。そしてコンピュータは、処理対ごとに決定されたデータ転送用経路の両端のサーバに、第１処理の実行結果のデータ転送用経路によるデータ転送を指示する。
【発明の効果】
【００１１】
１態様によれば、データ転送に使用するのに適切な隣接サーバ間通信経路を判断できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係る通信経路管理装置の構成例を示す図である。
【図２】第２の実施の形態の分散システムの一例を示す図である。
【図３】第２の実施の形態に用いるセンタサーバのハードウェアの一例を示す図である。
【図４】サービスの分散処理の一例を示す図である。
【図５】各装置の機能の一例を示すブロック図である。
【図６】センタサーバの記憶部に格納されている情報の一例を示す図である。
【図７】サーバの記憶部に格納されている情報の一例を示す図である。
【図８】分散アプリの実行順序と配備先との指定状況を示す図である。
【図９】分散アプリ配備先サーバの特定例を示す図である。
【図１０】隣接サーバ間通信経路の決定例を示す図である。
【図１１】転送先制御情報の一例を示す図である。
【図１２】コントローラによる通信経路決定処理の手順の一例を示すフローチャートである。
【図１３】サーバによる通信接続処理の手順の一例を示すフローチャートである。
【図１４】分散アプリの配備制御の一例を示す図である。
【図１５】分散アプリ配備処理の手順の一例を示すフローチャートである。
【図１６】通信経路更新処理の手順の一例を示すフローチャートである。
【図１７】分散アプリ配備先変更準備処理の手順の一例を示すフローチャートである。
【図１８】分散アプリ起動・停止処理の手順の一例を示すフローチャートである。
【図１９】センサデータを送信する端末装置による接続先問い合わせの一例を示す図である。
【図２０】出力データの配信を受ける端末装置による接続先問い合わせの一例を示す図である。
【図２１】接続先問い合わせ処理の手順の一例を示すシーケンス図である。
【図２２】分散処理の一例を示す図である。
【図２３】分散システム内で転送される転送データの一例を示す図である。
【図２４】分散アプリ実行およびデータ転送処理の手順の一例を示すフローチャートである。
【図２５】転送遅延時間の測定結果の収集例を示す図である。
【図２６】起点のサーバからのデータ転送の遅延時間に応じた通信経路の接続の第１の例を示す図である。
【図２７】起点のサーバからのデータ転送の遅延時間に応じた通信経路の接続の第２の例を示す図である。
【図２８】第３の実施の形態における各装置の機能の一例を示す図である。
【図２９】第３の実施の形態におけるセンタサーバの記憶部に格納されている情報の一例を示す図である。
【図３０】サーバにおける通信状況監視処理の手順の一例を示すフローチャートである。
【図３１】第３の実施の形態におけるサーバ間遅延時間情報更新処理の手順の一例を示すフローチャートである。
【図３２】第３の実施の形態における通信経路決定処理の手順の一例を示すフローチャートである。
【図３３】第３の実施の形態における転送先制御情報の一例を示す図である。
【図３４】第３の実施の形態における分散アプリ配備処理の手順の一例を示すフローチャートである。
【図３５】データの転送方向を一方向に限定した通信経路接続の第１の例を示す図である。
【図３６】データの転送方向を一方向に限定した通信経路接続の第２の例を示す図である。
【図３７】第４の実施の形態における各装置の機能の一例を示す図である。
【図３８】第４の実施の形態におけるセンタサーバの記憶部に格納されている情報の一例を示す図である。
【図３９】第４の実施の形態における通信経路決定処理の手順の一例を示すフローチャートである。
【図４０】第４の実施の形態における転送先制御情報の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
まず第１の実施の形態について説明する。
【００１４】
図１は、第１の実施の形態に係る通信経路管理装置の構成例を示す図である。通信経路管理装置１０は、記憶部１１と処理部１２とを有する。記憶部１１は、例えば通信経路管理装置１０が有するメモリまたはストレージ装置である。処理部１２は、例えば通信経路管理装置１０が有するプロセッサである。
【００１５】
記憶部１１は、入力データ２に対する実行順が決められた複数の処理それぞれの、ネットワーク内の複数のサーバ１ａ〜１ｄそれぞれでの実行実績１１ａを記憶する。複数の処理は、例えば対応するソフトウェアを用いて実行される。図１の例では、最初に実行する処理はソフトウェア「Ａｐｐ１」を用いて実行され、２番目に実行する処理はソフトウェア「Ａｐｐ２」を用いて実行され、最後に実行する処理はソフトウェア「Ａｐｐ３」を用いて実行される。
【００１６】
処理部１２は、実行順において連続する２つの処理からなる処理対を特定する。次に処理部１２は、処理対ごとに、以下の処理を行う。
処理部１２は、処理対における実行順が前の第１処理と実行順が後の第２処理との、複数のサーバ１ａ〜１ｄそれぞれでの実行実績１１ａを確認する。次に処理部１２は、実行実績１１ａに基づいて、ネットワーク１における複数のサーバ１ａ〜１ｄ間の通信経路上で隣接するサーバ間を接続する複数の隣接サーバ間通信経路のうちの一部を、第１処理から第２処理へのデータ転送に使用するデータ転送用経路６，７に決定する。
【００１７】
例えば処理部１２は、第１処理または第２処理についての実行実績に対する統計的手法により、複数のサーバ１ａ〜１ｄのうちの一部をデータ送信先サーバに決定する。そして処理部１２は、データ送信先サーバ間の隣接サーバ間通信経路を、データ転送用経路６，７に決定する。データ送信先サーバは、例えば、第１処理または第２処理を少なくとも１回実行した実績があるサーバである。
【００１８】
図１の例では、ソフトウェア「Ａｐｐ１」を用いて実行される処理は、サーバ名「ＳｅｒｖｅｒＡ」のサーバ１ａ、サーバ名「ＳｅｒｖｅｒＢ」のサーバ１ｂで実行実績がある。ソフトウェア「Ａｐｐ２」を用いて実行される処理は、サーバ名「ＳｅｒｖｅｒＢ」のサーバ１ｂ、サーバ名「ＳｅｒｖｅｒＣ」のサーバ１ｃで実行実績がある。ソフトウェア「Ａｐｐ３」を用いて実行される処理は、サーバ名「ＳｅｒｖｅｒＣ」のサーバ１ｃ、サーバ名「ＳｅｒｖｅｒＤ」のサーバ１ｄで実行実績がある。
【００１９】
ソフトウェア「Ａｐｐ１」、「Ａｐｐ２」を用いて実行される処理の処理対の場合、いずれかの処理の実行実績があるのは、サーバ名「ＳｅｒｖｅｒＡ」、「ＳｅｒｖｅｒＢ」、「ＳｅｒｖｅｒＣ」のサーバ１ａ〜１ｃのサーバ群である。そこで処理部１２は、サーバ１ａ〜１ｃにおける隣接するサーバ間を接続する隣接サーバ間通信経路を、ソフトウェア「Ａｐｐ１」を用いて実行される処理から「Ａｐｐ２」を用いて実行される処理へのデータ転送用経路６に決定する。
【００２０】
またソフトウェア「Ａｐｐ２」、「Ａｐｐ３」を用いて実行される処理の処理対の場合、いずれかの処理の実行実績があるのは、サーバ名「ＳｅｒｖｅｒＢ」、「ＳｅｒｖｅｒＣ」、「ＳｅｒｖｅｒＤ」のサーバ１ｂ〜１ｄのサーバ群である。そこで処理部１２は、サーバ１ｂ〜１ｄにおける隣接するサーバ間を接続する隣接サーバ間通信経路を、ソフトウェア「Ａｐｐ２」を用いて実行される処理から「Ａｐｐ３」を用いて実行される処理へのデータ転送用経路７に決定する。
【００２１】
そして処理部１２は、処理対ごとに決定されたデータ転送用経路６，７の両端のサーバに、第１処理の実行結果のデータ転送用経路によるデータ転送を指示する。これにより、各サーバ１ａ〜１ｄにおける各処理の実行実績に基づいて、処理を実行するサーバの変更があったときに使用される可能性の高い適切な隣接サーバ間通信経路に限定して、データ転送が行われる。
【００２２】
例えば、ソフトウェア「Ａｐｐ１」を用いた最初の処理がサーバ１ａで実行されており、ソフトウェア「Ａｐｐ２」を用いた２番目の処理がサーバ１ｃで実行されており、ソフトウェア「Ａｐｐ３」を用いた３番目の処理がサーバ１ｄで実行されているものとする。この場合、端末装置８から送信された入力データ２は、サーバ１ａで受信される。サーバ１ａは、入力データ２に対してソフトウェア「Ａｐｐ１」を用いた処理を実行し、隣接する２台のサーバ１ｂ，１ｃそれぞれに、処理結果を含む転送データ３ａ，３ｂを送信する。２番目の処理を実行していないサーバ１ｂは、転送データ３ｂを受信すると、転送データ３ｂと同じ内容の転送データ３ｃを、サーバ１ｃに送信する。なお、サーバ１ｂとサーバ１ｄとを接続する隣接サーバ間通信経路は、ソフトウェア「Ａｐｐ１」、「Ａｐｐ２」を用いて実行される処理の処理対に対応するデータ転送用経路ではない。そのため、サーバ１ｂからサーバ１ｄへは、転送データ３ｂと同じ内容の転送データの送信は行われない。
【００２３】
２番目の処理を実行しているサーバ１ｃは、転送データ３ｂまたは転送データ３ｃを受信すると、受信したデータに対して、ソフトウェア「Ａｐｐ２」を用いた処理を実行する。そしてサーバ１ｃは、隣接する２台のサーバ１ｂ，１ｄそれぞれに、処理結果を含む転送データ４ａ，４ｂを送信する。３番目の処理を実行していないサーバ１ｂは、転送データ４ａを受信すると、転送データ４ａと同じ内容の転送データ４ｃを、サーバ１ｄに送信する。なお、サーバ１ｂとサーバ１ａとを接続する隣接サーバ間通信経路は、ソフトウェア「Ａｐｐ２」、「Ａｐｐ３」を用いて実行される処理の処理対に対応するデータ転送用経路ではない。そのため、サーバ１ｂからサーバ１ａへは、転送データ４ａと同じ内容の転送データの送信は行われない。
【００２４】
３番目の処理を実行しているサーバ１ｄは、転送データ４ｂまたは転送データ４ｃを受信すると、受信したデータに対して、ソフトウェア「Ａｐｐ３」を用いた処理を実行する。そしてサーバ１ｄは、例えば、予め出力データ５の配信先として指定されている端末装置９へ、処理結果を含む出力データ５を送信する。
【００２５】
このように、ソフトウェア「Ａｐｐ１」を用いた最初の処理の結果を含む転送データは、最初の処理もしくは２番目の処理の実行実績があるサーバへの隣接サーバ間通信経路のみを経由して転送される。同様に、ソフトウェア「Ａｐｐ２」を用いた２番目の処理の結果を含む転送データは、２番目の処理もしくは３番目の処理の実行実績があるサーバへの隣接サーバ間通信経路のみを経由して転送される。転送データの転送先を限定したことで、ネットワーク１内を転送するデータ量を削減することができる。しかも、各ソフトウェアを用いた処理の実行実績があるサーバへは、実行実績がある処理の対象となるデータが常に送られている。そのため、処理を実行するサーバが変更されても、過去に実行実績があるサーバ内での変更であれば、新たな隣接サーバ間通信経路での通信接続処理や、直前のデータの受け渡しなどの処理が不要となる。その結果、処理を実行するサーバの変更を迅速に行うことができ、当該システムで提供しているサービスの提供の遅延を抑止できる。
【００２６】
なお、処理部１２は、サーバ間の通信の遅延時間に基づいて、効率のよい隣接サーバ間通信経路を介して中継データを転送するように、データ転送用経路を決定することもできる。例えば処理部１２は、複数のサーバ１ａ〜１ｄのうち、第１処理の実行頻度が最も高いサーバを起点サーバとして特定する。そして処理部１２は、起点サーバから他のサーバそれぞれへの通信経路のうち、通信の遅延時間が最短となる最短経路を決定し、最短経路上の隣接サーバ間通信経路を、データ転送用経路に決定する。これにより、転送データの転送に要する時間を短縮でき、処理の効率化が図れる。
【００２７】
また処理部１２は、隣接するサーバ間の隣接サーバ間通信経路ごとに、データ通信のための通信接続を確立する通信方向を限定することもできる。例えば処理部１２は、データ転送用経路を経由する最短経路を、データ転送用経路から、起点サーバから遠い方へ辿ることで到達可能なサーバのいずれか１台で、第２処理を実行した実績があるか否かを判断する。そして処理部１２は、第２処理を実行した実績があると判断されたデータ転送用経路の両端のサーバに対しては、双方向通信の通信接続の確立を指示する。また処理部１２は、第２処理を実行した実績がないと判断されたデータ転送用経路の両端のサーバに対しては、起点サーバから遠い方から近い方への単方向通信の通信接続の確立を指示する。これにより、無駄な通信接続の確立を抑止でき、ネットワーク１上のデータ転送量を削減することができる。
【００２８】
さらに処理部１２は、各サーバ１ａ〜１ｄへの処理の実行指示を行うとともに、実行指示に伴い、実行実績１１ａを更新することができる。例えば処理部１２は、複数の処理それぞれの実行する実行サーバを指定するサーバ指定情報を受信すると、サーバ指定情報で指定された実行サーバに対して、対応する処理の実行を指示する。さらに処理部１２は、実行サーバにおける、対応する処理の実行実績１１ａを更新する。これにより実行実績１１ａを最新の状態に維持することができ、データ転送用経路６，７の決定の精度を高めることができる。
【００２９】
〔第２の実施の形態〕
次に第２の実施の形態について説明する。なお第２の実施の形態では、分散アプリのプログラムは、分散システムに含まれるすべてのサーバにインストール済みであるものとする。そして各サーバは、センタサーバからの指示により、分散アプリを起動し、入力されたデータに対する分散アプリによる処理を実行可能な状態にする。入力されたデータに対する分散アプリによる処理を実行可能な状態になったサーバは、見かけ上は、分散アプリが新たに配備（プログラムのインストールと実行）された状況と変わらない。そこで以下の説明では、サーバに分散アプリを実行させ、入力されたデータに対する分散アプリによる処理を実行可能な状態にすることを、サーバに分散アプリを配備すると呼ぶことがある。
【００３０】
図２は、第２の実施の形態の分散システムの一例を示す図である。分散システムでは、ネットワーク２０に、複数のサーバ２１０，２２０，・・・、複数の端末装置３１０，３２０，・・・、センタサーバ１００、および管理装置３０が接続されている。
【００３１】
複数のサーバ２１０，２２０，・・・は、分散アプリを実行するコンピュータである。センタサーバ１００は、複数のサーバ２１０，２２０，・・・への分散アプリの配備や、複数のサーバ２１０，２２０，・・・間の通信接続を管理するコンピュータである。なおセンタサーバ１００に分散アプリを実行させることもできる。端末装置３１０，３２０，・・・は、処理対象のデータの送信、または処理結果の受信を行うコンピュータである。端末装置３１０，３２０，・・・は、例えば無線通信網を介してネットワーク２０に接続されている。管理装置３０は、分散アプリの配備先の指定や分散アプリの実行順の指定を行うコンピュータである。
【００３２】
図３は、第２の実施の形態に用いるセンタサーバのハードウェアの一例を示す図である。センタサーバ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００３３】
メモリ１０２は、センタサーバ１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００３４】
バス１０９に接続されている周辺機器としては、ストレージ装置１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００３５】
ストレージ装置１０３は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置１０３は、コンピュータの補助記憶装置として使用される。ストレージ装置１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置１０３としては、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を使用することができる。
【００３６】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３７】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３８】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００３９】
機器接続インタフェース１０７は、センタサーバ１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００４０】
ネットワークインタフェース１０８は、ネットワーク２０に接続されている。ネットワークインタフェース１０８は、ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００４１】
センタサーバ１００は、以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、サーバ２１０，２２０，・・・、端末装置３１０，３２０，・・・、および管理装置３０も、センタサーバ１００と同様のハードウェアにより実現することができる。また第１の実施の形態に示した通信経路管理装置１０も、図３に示したセンタサーバ１００と同様のハードウェアにより実現することができる。
【００４２】
センタサーバ１００とサーバ２１０，２２０，・・・とは、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。センタサーバ１００またはサーバ２１０，２２０，・・・に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、センタサーバ１００またはサーバ２１０，２２０，・・・に実行させるプログラムをストレージ装置１０３に格納しておくことができる。プロセッサ１０１は、ストレージ装置１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またセンタサーバ１００またはサーバ２１０，２２０，・・・に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ストレージ装置１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４３】
このような分散システムにおいて、例えば、いずれかの端末装置から収集したセンサデータに対する分散処理が実行される。そして、処理結果の配信先として予め登録されている端末装置に、処理結果が送信される。
【００４４】
図４は、サービスの分散処理の一例を示す図である。分散処理されるサービスは、複数の分散アプリによって実行される。分散アプリは、サービスの一連の処理を定義した分散アプリフローにおける、１処理の手順が記述されたソフトウェアである。分散アプリは、自身のアプリＩＤのみを持ち、自身が実行されるサーバ、次に実行するアプリＩＤ／サーバに関する情報を持たない。また分散アプリは、１台のサーバに１つ以上配備される可能性がある。
【００４５】
図４の例では、分散システム内に７台のサーバ２１０，２２０，２３０，２４０，２５０，２６０，２７０が設けられている。サーバ２１０のサーバ名は「ＳｅｒｖｅｒＡ」である。サーバ２２０のサーバ名は「ＳｅｒｖｅｒＢ」である。サーバ２３０のサーバ名は「ＳｅｒｖｅｒＣ」である。サーバ２４０のサーバ名は「ＳｅｒｖｅｒＤ」である。サーバ２５０のサーバ名は「ＳｅｒｖｅｒＥ」である。サーバ２６０のサーバ名は「ＳｅｒｖｅｒＦ」である。サーバ２７０のサーバ名は「ＳｅｒｖｅｒＧ」である。
【００４６】
第２の実施の形態では、収集したセンサデータ４１に対して、分散アプリ「Ａｐｐ１」、分散アプリ「Ａｐｐ２」、分散アプリ「Ａｐｐ３」の順で、各分散アプリに基づく処理を実行することで、サービスが提供される。図４の例では、分散アプリ「Ａｐｐ１」は、サーバ２１０に配備されている。分散アプリ「Ａｐｐ２」は、サーバ２４０に配備されている。分散アプリ「Ａｐｐ３」は、サーバ２５０に配備されている。
【００４７】
この場合、例えば端末装置３１０が検知したセンサデータ４１が、端末装置３１０からサーバ２１０に送信される。サーバ２１０は、分散アプリ「Ａｐｐ１」を用いてセンサデータ４１に対する処理を実行し、処理結果を転送データ４２としてサーバ２４０に送信する。サーバ２４０は、分散アプリ「Ａｐｐ２」を用いて転送データ４２に対する処理を実行し、処理結果を転送データ４３としてサーバ２５０に送信する。サーバ２５０は、分散アプリ「Ａｐｐ３」を用いて転送データ４３に対する処理を実行し、処理結果を出力データ４４として、配信先として予め指定されている端末装置３２０に送信する。
【００４８】
このような分散システムの運用中に、分散アプリの配備先となるサーバが変更されることがある。例えば分散アプリを配備しているサーバの処理負荷が過大になっている場合や、サーバのスケールアウトを行い新たなサーバが追加されたときなどに、分散アプリの配備先のサーバの変更が行われる。またサーバのメンテナンスのために、そのサーバに配備している分散アプリを、別のサーバに移動させることもある。
【００４９】
特定の分散アプリの配備先のサーバが変更されたとき、その分散アプリが新たに配備されたサーバと、他の分散アプリが配備されているサーバとの通信接続が行われていなければ、通信接続処理を行うことになる。通信接続処理とは、サーバ間でコネクションおよびセッションを確立する処理である。分散アプリの配備先のサーバを変更する際に通信接続処理が介在すると、通信接続処理の間、データ転送遅延が発生する。そこで、分散アプリが現在配備されているサーバ間の通信経路に加え、それ以外の通信経路（予備経路）についても予め通信接続を行っておくことが考えられる。
【００５０】
例えば、すべての隣接するサーバ間で通信接続を行っておけば、分散アプリがどのサーバに移動することになっても、分散アプリの移動の際に通信接続処理を実行せずに済む。ただし分散システムでは、処理順が前の分散アプリの実行結果である転送データは、処理順が次の分散アプリが配備されているサーバだけでなく、通信可能なすべてのサーバに送信される。転送データを受信したサーバのうち、実行順が次の分散アプリが配備されているサーバのみが、受信した転送データに対して、配備されている分散アプリによる処理を実行する。このように、分散システムでは、分散アプリが配備されていないサーバに対しても、通信接続が行われているかぎりデータが流れ続ける。そのため、すべての隣接するサーバ間の通信接続を行っておくと、予備経路上のサーバおよびネットワークに無駄なトラフィックが生じる。このようなトラフィックの増大は、システム全体として処理効率の低下要因となる。
【００５１】
そこで第２の実施の形態では、センタサーバ１００が、分散アプリが配備される可能性がほとんどないサーバに対しては、事前の通信接続を行わないように制御する。具体的には、センタサーバ１００が有するコントローラが、通信接続するサーバを、過去の分散アプリ配備傾向に基づいて決定する。
【００５２】
以下、適切な予備経路を設定して分散処理を実行するための、各装置が有する機能について説明する。
図５は、各装置の機能の一例を示すブロック図である。管理装置３０は、プランナ３１を有している。プランナ３１は、分散システムの動作状況に応じて、分散アプリの適切な配備先のサーバを決定する。例えばプランナ３１は、各サーバに送信されるトラフィック量が最小化するように、各分散アプリの配備先のサーバを決定する。またプランナ３１は、サービスの処理遅延または転送遅延を最小にするように、各分散アプリの配備先のサーバを決定する。サーバの配備先の決定は、例えばいずれかのサーバのＣＰＵ負荷が閾値を超えたこと、またはいずれかの通信経路のトラフィック量が閾値を超えたことをトリガとして実行される。プランナ３１は、分散アプリの配備先を決定すると、分散アプリ実行順序情報１１１と分散アプリ配備先サーバ情報１１２とを、センタサーバ１００に送信する。
【００５３】
センタサーバ１００は、記憶部１１０、タイマ１２０、およびコントローラ１３０を有している。
記憶部１１０は、分散システムの制御に利用する情報を記憶する。記憶部１１０には、例えば分散アプリ実行順序情報１１１、分散アプリ配備先サーバ情報１１２、サーバ情報、通信経路情報１１４、接続先情報１１５、出力データ配信先情報１１６、および分散アプリ配備先履歴１１７が格納される。分散アプリ実行順序情報１１１は、分散アプリの実行順序を示す情報である。分散アプリ配備先サーバ情報１１２は、各分散アプリの配備先のサーバを示す情報である。サーバ情報は、分散システム内で稼働しているサーバを示す情報である。通信経路情報１１４は、分散アプリ間の転送データの通信に使用する通信経路を示す情報である。接続先情報１１５は、端末装置からの接続先となるサーバを示す情報である。出力データ配信先情報１１６は、複数の分散アプリによる一連の処理の結果である出力データの配信先となる端末装置を示す情報である。分散アプリ配備先履歴１１７は、サーバごとに、過去に分散アプリの配備先となった回数を示す情報である。
【００５４】
タイマ１２０は、予め設定された通信経路決定処理の実行開始時刻になると、コントローラ１３０に対して通信経路の決定処理の開始を指示する。
コントローラ１３０は、分散アプリのサーバへの配備や、分散アプリ間の転送データを通信するための通信経路の設定を制御する。例えばコントローラ１３０は、プランナ３１から分散アプリ実行順序情報１１１と分散アプリ配備先サーバ情報１１２とを受信する。そしてコントローラ１３０は、分散アプリ配備先サーバ情報１１２に基づいて、分散アプリの配備先となるサーバに対して、その分散アプリの実行を指示する。例えばコントローラ１３０は、分散アプリのアプリＩＤを含む実行アプリ制御情報を、その分散アプリの配備先のサーバに送信する。
【００５５】
またコントローラ１３０は、受信した分散アプリ実行順序情報１１１に示される分散アプリの実行順序を、分散アプリの配備先となるサーバに通知する。なお各サーバに通知される実行順序は、そのサーバに配備された分散アプリに関連する部分についての情報である。例えばコントローラ１３０は、分散アプリの配備先のサーバに、そのサーバが実行する分散アプリのアプリＩＤと、その分散アプリの次に処理を実行する分散アプリのアプリＩＤとを含む制御情報を送信する。さらにコントローラ１３０は、分散アプリ配備先履歴１１７に基づいて、接続する隣接サーバ間通信経路を決定する。そしてコントローラ１３０は、決定した隣接サーバ間通信経路の接続を、その隣接サーバ間通信経路の両端のサーバに転送先制御情報を送信することによって指示する。またコントローラ１３０は、タイマ１２０から通信経路の決定処理の開始の指示を受け取った場合、接続する隣接サーバ間通信経路を決定する。そしてコントローラ１３０は、その隣接サーバ間通信経路の両端のサーバに転送先制御情報を送信することによって、決定した隣接サーバ間通信経路の接続を指示する。
【００５６】
サーバ２１０は、記憶部２１１、制御情報受信部２１２、メッセージ転送部２１３、およびアプリ実行部２１４を有する。
記憶部２１１は、分散処理に用いる情報を記憶する。例えば記憶部２１１は、実行対象分散アプリＩＤ２１１ａと分散アプリ実行順序情報２１１ｂとを記憶する。実行対象分散アプリＩＤ２１１ａは、サーバ２１０が実行する分散アプリの識別子（アプリＩＤ）である。分散アプリ実行順序情報２１１ｂは、サーバ２１０が実行する分散アプリの次に実行する分散アプリの識別子（アプリＩＤ）である。
【００５７】
制御情報受信部２１２は、センタサーバ１００が送信した制御情報を受信する。制御情報受信部２１２は、受信した制御情報を、メッセージ転送部２１３に転送する。
メッセージ転送部２１３は、制御情報に基づいて、分散アプリごとの隣接サーバ間通信経路の両端のサーバに転送先制御情報を送信することによって、隣接サーバ間通信経路として指定された接続先のサーバ内のメッセージ転送部との間でセッションを確立する。メッセージ転送部間のデータ送信側・受信側双方が同一の分散アプリＩＤを指定してセッションを確立した時点で、そのセッションによるメッセージ転送が可能となる。
【００５８】
メッセージ転送部２１３は、端末装置からセンサデータを受信すると、そのセンサデータをアプリ実行部２１４に転送する。メッセージ転送部２１３は、他のサーバから転送データを受信すると、その転送データに付与されている次に実行する分散アプリが、サーバ２１０に配備されている分散アプリであれば、転送データをアプリ実行部２１４に転送する。メッセージ転送部２１３は、アプリ実行部２１４から分散アプリの処理結果を受信すると、次に実行する分散アプリに対応付けて接続された隣接サーバ間通信経路に対して、処理結果を含む転送データを送信する。
【００５９】
アプリ実行部２１４は、サーバ２１０への配備が決定された分散アプリを実行する。アプリ実行部２１４は、実行している分散アプリで処理するデータを受信すると、そのデータを入力として分散アプリを実行する。そしてアプリ実行部２１４は、分散アプリに基づく処理結果に、次に処理を実行する分散アプリのアプリＩＤを付与した転送データを、メッセージ転送部２１３に送信する。サーバ２１０に配備された分散アプリが、分散アプリフローにおいて最後に実行する分散アプリの場合、アプリ実行部２１４は、分散アプリに基づく処理結果を出力データとして、メッセージ転送部２１３に送信する。
【００６０】
なお、図５にはサーバ２１０の機能を示しているが、他のサーバ２２０，・・・もサーバ２１０と同様の機能を有している。
端末装置３１０は、接続先問い合わせ部３１１とデータ送受信部３１２とを有する。接続先問い合わせ部３１１は、センタサーバ１００に対して、操作要求を含む接続先問い合わせを送信する。操作要求には、データ登録の要求、データ購読開始または停止の要求がある。データ登録の操作要求を含む接続先問い合わせをした場合、センタサーバ１００から、センサデータの送信先のサーバの識別子が応答される。接続先問い合わせ部３１１は、センタサーバ１００から通知されたセンサデータの送信先のサーバの識別子をデータ送受信部３１２に送信する。
【００６１】
データ送受信部３１２は、端末装置３１０が有する機器で検知したセンサデータを、接続先として通知されたサーバに送信する。またデータ購読開始の操作要求を送信済みの場合、データ送受信部３１２は、最後の処理を実行するための分散アプリが配備されたサーバから送信された出力データを受信する。
【００６２】
なお、図５に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
次に、各装置の記憶部に格納されている情報について、具体的に説明する。
【００６３】
図６は、センタサーバの記憶部に格納されている情報の一例を示す図である。分散アプリ実行順序情報１１１には、分散アプリのアプリＩＤ（Ａｐｐ．ＩＤ）に対応付けて、分散アプリフローにおいてその分散アプリの次に実行する分散アプリのアプリＩＤ（次実行Ａｐｐ．ＩＤ）が設定されている。次実行Ａｐｐ．ＩＤが設定されていない分散アプリ（図６における「Ａｐｐ３」）は、分散アプリフローにおいて最後に実行する分散アプリである。分散アプリ実行順序情報１１１に示されている「Ａｐｐ．ＩＤ」と「次実行Ａｐｐ．ＩＤ」との組に基づいて、分散アプリの実行順序が把握できる。図６の例では、「Ａｐｐ１」、「Ａｐｐ２」、「Ａｐｐ３」の順で分散アプリを実行することが示されている。
【００６４】
分散アプリ配備先サーバ情報１１２には、分散アプリのアプリＩＤ（Ａｐｐ．ＩＤ）に対応付けて、その分散アプリの配備先のサーバのサーバ名が設定されている。
サーバ情報１１３には、分散システムに含まれる各サーバのサーバ名に対応付けて、そのサーバに接続するための情報（例えばＩＰアドレス）が設定されている。
【００６５】
通信経路情報１１４には、分散アプリのアプリＩＤ（Ａｐｐ．ＩＤ）に対応付けて、その分散アプリ宛の転送データを通信するための隣接サーバ間通信経路の接続対象となる１以上のサーバのサーバ名が設定されている。
【００６６】
接続先情報１１５には、分散アプリフローにおいて最初と最後の分散アプリのアプリＩＤ（Ａｐｐ．ＩＤ）に対応付けて、その分散アプリで実行する操作と、その操作を要求する端末装置の接続先のサーバのサーバ名とが設定されている。接続先のサーバとは、対応する分散アプリが配備されているサーバである。例えば、データ登録（Ｐｕｂｌｉｓｈ）の操作要求に対しては、分散アプリフローの先頭の分散アプリ（図６の例では「Ａｐｐ１」）が配備されているサーバ（ＳｅｒｖｅｒＡ）が、接続先として指定される。またデータ購読開始または停止（Ｓｕｂｓｃｒｉｂｅ／ｕｎ−Ｓｕｂｓｃｒｉｂｅ）の操作要求に対しては、分散アプリフローの最後の分散アプリ（図６の例では「Ａｐｐ３」）が配備されているサーバ（ＳｅｒｖｅｒＥ）が、接続先として指定される。
【００６７】
出力データ配信先情報１１６には、分散アプリフローにおいて最後の分散アプリのアプリＩＤ（Ａｐｐ．ＩＤ）に対応付けて、出力データと配信先とが設定されている。配信先は、端末装置の装置名（図６の例では「ｄｓｔ」）によって指定されている。
【００６８】
分散アプリ配備先履歴１１７には、サーバごとの、各分散アプリの配備回数が示されている。分散アプリ配備先履歴１１７は、分散アプリの新規配備または再配備が行われた際に、配備された分散アプリと配備先のサーバとの組に対応する数値に１が加算される。
【００６９】
図７は、サーバの記憶部に格納されている情報の一例を示す図である。図７には、サーバ２１０の記憶部２１１の例が示されている。実行対象分散アプリＩＤ２１１ａは、サーバ２１０への配備が決定され、サーバ２１０による実行対象となっている分散アプリのアプリＩＤである。分散アプリ実行順序情報２１１ｂには、分散アプリフローのうちの、サーバ２１０に配備された分散アプリに関連する部分における、分散アプリの実行順が示されている。
【００７０】
以上のような分散システムにおいてサービスを開始するとき、管理装置３０内のプランナ３１において、分散アプリの実行順序や、分散アプリの配備先が指定される。
図８は、分散アプリの実行順序と配備先との指定状況を示す図である。管理装置３０内のプランナ３１は、分散アプリ実行順序情報５１と分散アプリ配備先サーバ情報５２とをセンタサーバ１００に送信する。分散アプリ実行順序情報５１の内容は、図６に示した分散アプリ実行順序情報１１１と同様である。分散アプリ配備先サーバ情報５２の内容は、図６に示した分散アプリ配備先サーバ情報１１２と同様である。
【００７１】
センタサーバ１００では、コントローラ１３０が、分散アプリ実行順序情報５１と分散アプリ配備先サーバ情報５２とを受信する。コントローラ１３０は、受信した分散アプリ実行順序情報５１と分散アプリ配備先サーバ情報５２とを、記憶部１１０に格納する。
【００７２】
またコントローラ１３０は、分散アプリの配備先のサーバへ、分散アプリ実行順序情報５１を送信する。この際、コントローラ１３０は、分散アプリ実行順序情報５１から、サーバに配備する分散アプリに関係する部分を抽出し、抽出した部分の情報のみをそのサーバに送信してもよい。
【００７３】
次にコントローラ１３０は、分散アプリ配備先履歴１１７に基づいて、サーバ間の通信接続を行う隣接サーバ間通信経路を決定する。例えばコントローラ１３０は、過去に分散アプリを配備したことがあるサーバを、その分散アプリの配備候補サーバとして特定する。そしてコントローラ１３０は、分散アプリごとの配備候補サーバのリストに基づいて、通信接続する隣接サーバ間通信経路を決定する。
【００７４】
図９は、分散アプリ配備先サーバの特定例を示す図である。分散アプリ配備先履歴１１７には、分散アプリ「Ａｐｐ１」、分散アプリ「Ａｐｐ２」、分散アプリ「Ａｐｐ３」それぞれが、過去にどのサーバに配備されたことがあるかが示されている。
【００７５】
例えば分散アプリ「Ａｐｐ１」は、過去に「ＳｅｒｖｅｒＡ」、「ＳｅｒｖｅｒＢ」、「ＳｅｒｖｅｒＣ」、「ＳｅｒｖｅｒＤ」それぞれに、１回以上配備されていることが示されているものとする。その場合、コントローラ１３０は、「ＳｅｒｖｅｒＡ」、「ＳｅｒｖｅｒＢ」、「ＳｅｒｖｅｒＣ」、「ＳｅｒｖｅｒＤ」を、分散アプリ「Ａｐｐ１」の配備先候補サーバとして特定する。同様に、分散アプリ「Ａｐｐ２」は、過去に「ＳｅｒｖｅｒＣ」、「ＳｅｒｖｅｒＤ」、「ＳｅｒｖｅｒＥ」それぞれに、１回以上配備されていることが示されているものとする。その場合、コントローラ１３０は、「ＳｅｒｖｅｒＣ」、「ＳｅｒｖｅｒＤ」、「ＳｅｒｖｅｒＥ」を、分散アプリ「Ａｐｐ２」の配備先候補サーバとして特定する。分散アプリ「Ａｐｐ３」は、過去に「ＳｅｒｖｅｒＥ」、「ＳｅｒｖｅｒＦ」、「ＳｅｒｖｅｒＧ」それぞれに、１回以上配備されていることが示されているものとする。その場合、コントローラ１３０は、「ＳｅｒｖｅｒＥ」、「ＳｅｒｖｅｒＦ」、「ＳｅｒｖｅｒＧ」を、分散アプリ「Ａｐｐ３」の配備先候補サーバとして特定する。
【００７６】
なお、コントローラ１３０は、過去に分散アプリが配備されたことのあるサーバのうち、配備回数が多い方からＮ個（Ｎは１以上の整数）のサーバを、その分散アプリの配備先候補サーバに決定してもよい。また、コントローラ１３０は、過去に分散アプリが配備されたことのあるサーバのうち、信頼係数を満たすサーバ群（一定の確率で配備される場所を選択する）を、その分散アプリの配備先候補サーバに決定してもよい。さらにコントローラ１３０は、過去に分散アプリが配備されたサーバと、そのサーバの近傍のサーバ（例えば隣接するサーバ）とをクラスタリングし、クラスタリングされたサーバ群を、その分散アプリの配備先候補サーバとして特定してもよい。この場合、過去に分散アプリが配備されていないサーバについても、その分散アプリの配備先候補サーバに含まれる。
【００７７】
このように過去の分散アプリの配備履歴を様々な統計的な手法で解析することで、分散アプリが配備される可能性が高い配備先候補サーバを決定することができる。なお、分散アプリの配備先候補サーバとして、上記以外の統計的手法（例えば機械学習の手法）を用いて決定してもよい。
【００７８】
コントローラ１３０は、分散アプリごとの配備先候補サーバを示す分散アプリ配備先候補情報５３を生成する。コントローラ１３０は、生成した分散アプリ配備先候補情報５３を、一時的にメモリ１０２に格納する。そしてコントローラ１３０は、分散アプリ実行順序情報１１１と分散アプリ配備先候補情報５３とに基づいて、通信接続する隣接サーバ間通信経路を決定する。
【００７９】
図１０は、隣接サーバ間通信経路の決定例を示す図である。例えばコントローラ１３０は、分散アプリの実行順序において連続する分散アプリの対（連続アプリ対）を生成する。図１０の例では、分散アプリ「Ａｐｐ１」と分散アプリ「Ａｐｐ２」との連続アプリ対、および分散アプリ「Ａｐｐ２」と分散アプリ「Ａｐｐ３」との連続アプリ対が生成される。コントローラ１３０は、生成された連続アプリ対ごとに、連続アプリ対に属する２つの分散アプリのうち、実行順番が前の分散アプリから実行順番が後の分散アプリへの転送データの転送のために接続する隣接サーバ間通信経路を決定する。
【００８０】
例えばコントローラ１３０は、連続アプリ対ごとに、その連続アプリ対に属する分散アプリの配備先候補を統合し、分散アプリ出力データ転送先情報５４を生成する。分散アプリ出力データ転送先情報５４は、連続アプリ対に対応付けて、分散アプリの出力データを転送するサーバの集合が設定されている。
【００８１】
コントローラ１３０は、連続アプリ対ごとに、分散アプリ出力データ転送先情報５４に出力データ転送サーバとして設定されているすべてのサーバを、連続アプリ対の送信先の分散アプリ用の通信経路接続サーバに決定する。そしてコントローラ１３０は、連続アプリ対ごとの通信経路接続サーバを設定した通信経路情報１１４を生成する。図１０に示した通信経路情報１１４では、連続アプリ対のうちの送信先の分散アプリのアプリＩＤに対応付けて、その連続アプリ対の通信経路接続サーバが設定されている。
【００８２】
コントローラ１３０は、通信経路情報１１４に基づいて、各サーバに送信する転送先制御情報を生成する。コントローラ１３０が各サーバに対して転送先制御情報を送信すると、各サーバにおいて、転送先制御情報に示されるサーバとの通信接続処理が実行される。
【００８３】
図１１は、転送先制御情報の一例を示す図である。図１１の例では、サーバ２１０，２４０，２５０それぞれに送信する転送先制御情報５５ａ〜５５ｃを示している。図１１には示していないが、サーバ２１０，２４０，２５０以外のサーバに対しても転送先制御情報が送信される。
【００８４】
転送先制御情報５５ａ〜５５ｃには、送信または受信の指定（送受信）と転送データの送信先の分散アプリのアプリＩＤ（Ａｐｐ．ＩＤ）との組に対応付けて、接続先となる１以上のサーバ（接続先サーバ）が設定されている。転送先制御情報５５ａ〜５５ｃを受信したサーバ２１０，２４０，２５０の制御情報受信部２１２，２４２，２５２は、転送先制御情報５５ａ〜５５ｃをメッセージ転送部２１３，２４３，２５３に転送する。メッセージ転送部２１３，２４３，２５３は、転送先制御情報５５ａ〜５５ｃで指定された接続先サーバとの通信接続を行う。第２の実施の形態では、メッセージ転送部２１３，２４３，２５３は、データ送信用の通信接続とデータ受信用の通信接続とを個別に行う。
【００８５】
次に図１２、図１３を参照して、サーバの初期接続を行う際に、各装置が実行する処理について、フローチャートを参照して詳細に説明する。サーバの初期接続は、例えば新たなサービスが追加され、そのサービスのための分散アプリ実行順序情報５１がプランナ３１からコントローラ１３０に送信されたときに実行される。コントローラ１３０は、分散アプリ実行順序情報５１を各サーバに配信後、通信経路決定処理を開始する。
【００８６】
図１２は、コントローラによる通信経路決定処理の手順の一例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。
［ステップＳ１０１］コントローラ１３０は、分散アプリ配備先履歴１１７を参照し、分散アプリごとに、配備候補サーバのリストを作成する。分散アプリの配備候補サーバは、例えばその分散アプリの配備実績があるサーバである。そしてコントローラ１３０は、各分散アプリの配備候補サーバを纏めて、分散アプリ配備先候補情報５３を作成する。
【００８７】
［ステップＳ１０２］コントローラ１３０は、ステップＳ１０３〜Ｓ１０４の処理を繰り返すことで、分散アプリフローの実行順序が連続している２つの分散アプリ（連続アプリ対）ごとにステップＳ１０３〜Ｓ１０４の処理を実行する。
【００８８】
［ステップＳ１０３］コントローラ１３０は、連続アプリ対に属する２つの分散アプリそれぞれの配備先候補を統合することで、出力データ転送サーバを決定する。
［ステップＳ１０４］コントローラ１３０は、出力データ転送サーバをフルメッシュ接続するサーバ（通信経路接続サーバ）のリストを作成する。コントローラ１３０は、作成した通信経路接続サーバのリストを、連続アプリ対における処理が後の分散サプリのアプリＩＤに対応付けて通信経路情報１１４に登録する。
【００８９】
［ステップＳ１０５］コントローラ１３０は、すべての連続アプリ対についてステップＳ１０３〜Ｓ１０４の処理が終了すると、処理をステップＳ１０６に進める。
［ステップＳ１０６］コントローラ１３０は、連続アプリ対ごとの通信経路接続サーバのリストを含む通信経路情報１１４に基づいて、サーバごとの転送先制御情報を作成する。例えばコントローラ１３０は、転送先制御情報の作成対象とするサーバを選択する。コントローラ１３０は、通信経路情報１１４に基づいて、選択したサーバを通信経路接続サーバに含む分散アプリを特定する。コントローラ１３０は、特定した分散アプリの通信経路接続サーバから選択したサーバに隣接するサーバを抽出し、抽出したサーバを、特定した分散アプリの送信および受信の接続先サーバとする。
【００９０】
［ステップＳ１０７］コントローラ１３０は、サーバごとに作成した転送先制御情報を、対応するサーバに送信する。
このようにして、転送先制御情報が各サーバに送信される。転送先制御情報を受信したサーバでは、接続先として指定されたサーバとの通信接続が行われる。
【００９１】
図１３は、サーバによる通信接続処理の手順の一例を示すフローチャートである。以下、サーバ２１０が実行する場合を想定して、図１３に示す処理をステップ番号に沿って説明する。
【００９２】
［ステップＳ１１１］制御情報受信部２１２は、センタサーバ１００が送信した転送先制御情報５５ａを受信する。
［ステップＳ１１２］制御情報受信部２１２は、受信した転送先制御情報５５ａに出力データ配信先サーバが含まれるか否かを判断する。制御情報受信部２１２は、出力データ配信先サーバが含まれる場合、処理をステップＳ１１３に進める。また制御情報受信部２１２は、出力データ配信先サーバが含まれない場合、処理をステップＳ１１４に進める。
【００９３】
［ステップＳ１１３］制御情報受信部２１２は、転送先制御情報５５ａに示されているアプリＩＤと出力データ配信先サーバとの組を、アプリＩＤで示される分散アプリの出力データの配信先としてメッセージ転送部２１３に登録する。
【００９４】
［ステップＳ１１４］制御情報受信部２１２とメッセージ転送部２１３は、接続先サーバごとにステップＳ１１５〜Ｓ１１６の処理を実行する。
［ステップＳ１１５］制御情報受信部２１２は、アプリＩＤ、接続先サーバのサーバ名、データ転送条件（送信または受信）を含む接続先情報を、メッセージ転送部２１３に送信する。
【００９５】
［ステップＳ１１６］メッセージ転送部２１３は、接続先サーバのサーバ名で指定されたサーバとの間で、データ転送条件に応じた、アプリＩＤで示された分散アプリとのデータの転送用の通信接続を行う。
【００９６】
［ステップＳ１１７］制御情報受信部２１２とメッセージ転送部２１３は、すべての接続先サーバについて、ステップＳ１１５〜Ｓ１１６の処理が終了したら、通信接続処理を終了する。
【００９７】
このようにして、初期段階の通信接続が完了する。その後、コントローラ１３０は、プランナ３１から送られた分散アプリ配備先サーバ情報５２に基づいて、分散アプリの配備制御を行う。
【００９８】
図１４は、分散アプリの配備制御の一例を示す図である。図１４の例では、分散アプリ「Ａｐｐ１」をサーバ２１０に配備し、分散アプリ「Ａｐｐ２」をサーバ２４０に配備し、分散アプリ「Ａｐｐ３」をサーバ２５０に配備するものとする。この場合、センタサーバ１００のコントローラ１３０は、３台のサーバ２１０，２４０，２５０それぞれに対して、実行アプリ制御情報５６ａ，５６ｂ，５６ｃを送信する。サーバ２１０に送信される実行アプリ制御情報５６ａには、分散アプリ「Ａｐｐ１」の配備の指示（操作「ＯＮ］）が含まれている。サーバ２４０に送信される実行アプリ制御情報５６ｂには、分散アプリ「Ａｐｐ２」の配備の指示（操作「ＯＮ］）が含まれている。サーバ２５０に送信される実行アプリ制御情報５６ｃには、分散アプリ「Ａｐｐ３」の配備の指示（操作「ＯＮ］）が含まれている。
【００９９】
またコントローラ１３０は、新たな分散アプリの配備に伴い、分散アプリ配備先履歴１１７を更新する。分散アプリ配備先履歴１１７が更新されると、分散アプリごとの通信経路接続サーバも変更される可能性がある。そこでコントローラ１３０は、分散アプリの配備に伴って通信経路接続サーバの再計算を行い、新たな転送先制御情報５７ａ〜５７ｃを各サーバ２１０，２４０，２５０に送信する。なお図示していないサーバにも、転送先制御情報が送信される。
【０１００】
さらにコントローラ１３０は、分散アプリフローにおいて最後に実行する分散アプリ「Ａｐｐ３」を配備するサーバ２５０に対して、出力データ配信先情報５８を送信する。出力データ配信先情報５８には、分散アプリ「Ａｐｐ３」の出力データを送信する端末装置が示されている。
【０１０１】
以下、図１５〜図１８を参照して、分散アプリ配備処理について詳細に説明する。
図１５は、分散アプリ配備処理の手順の一例を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。分散アプリ配備処理は、例えばプランナ３１から分散アプリ配備先サーバ情報を受信したときに実行される。
【０１０２】
［ステップＳ１２１］コントローラ１３０は、プランナ３１から分散アプリ配備先サーバ情報５２を受信し、その分散アプリ配備先サーバ情報５２を記憶部１１０に格納する。
［ステップＳ１２２］コントローラ１３０は、記憶部１１０に格納した分散アプリ配備先サーバ情報１１２に基づいて、分散アプリ配備先履歴１１７を更新する。例えばコントローラ１３０は、分散アプリ配備先サーバ情報１１２から、分散アプリのアプリＩＤと配備先サーバとの組を順番に選択する。そしてコントローラ１３０は、選択した組に対応する、分散アプリ配備先履歴１１７内の値に１を加算する。
【０１０３】
［ステップＳ１２３］コントローラ１３０は、分散アプリ配備先サーバ情報１１２から、配備先が変更された分散アプリを抽出する。
［ステップＳ１２４］コントローラ１３０は、ステップＳ１２３において、配備先が変更された分散アプリが少なくとも１つ抽出できたか否かを判断する。コントローラ１３０は、分散アプリが抽出できなかった場合、分散アプリ配備処理を終了する。またコントローラ１３０は、分散アプリを抽出できた場合、ステップＳ１２５とステップＳ１２６の処理を並列に実行する。
【０１０４】
［ステップＳ１２５］コントローラ１３０は、通信経路変更処理を行う。この処理の詳細は後述する（図１６参照）。
［ステップＳ１２６］コントローラ１３０は、分散アプリ配備先変更準備処理を行う。この処理の詳細は後述する（図１７参照）。
【０１０５】
［ステップＳ１２７］コントローラ１３０は、ステップＳ１２５の処理とステップＳ１２６の処理との両方が終了すると、ステップＳ１２５，Ｓ１２６で生成された制御情報を、各サーバに送信する。
【０１０６】
次に、通信経路更新処理について説明する。
図１６は、通信経路更新処理の手順の一例を示すフローチャートである。以下、図１６に示す処理をステップ番号に沿って説明する。
【０１０７】
［ステップＳ１３１］コントローラ１３０は、ステップＳ１３２〜Ｓ１３５の処理を繰り返すことで、配備先サーバが変更された分散アプリごとにステップＳ１３２〜Ｓ１３５の処理を実行する。
【０１０８】
［ステップＳ１３２］コントローラ１３０は、現在設定済みの通信経路情報１１４を参照する。
［ステップＳ１３３］コントローラ１３０は、処理対象の分散アプリの配備先が、すでに接続済みサーバか否かを判断する。例えばコントローラ１３０は、通信経路情報１１４において、処理対象の分散アプリのアプリＩＤに対応付けて設定されている通信経路接続サーバに、その分散アプリの変更後の配備先のサーバが含まれていれば、そのサーバはすでに接続済みであると判断する。コントローラ１３０は、接続済みのサーバへの配備であれば、処理をステップＳ１３６に進める。またコントローラ１３０は、未接続のサーバへの配備であれば、処理をステップＳ１３４に進める。
【０１０９】
［ステップＳ１３４］コントローラ１３０は、通信経路情報１１４における処理対象の分散アプリに対応する通信経路接続サーバに、処理対象の分散アプリの新たな配備先のサーバのサーバ名を追加する。
【０１１０】
［ステップＳ１３５］コントローラ１３０は、分散アプリ実行順序情報１１１に基づいて、分散アプリフロー上で処理対象の分散アプリの次に実行する次実行分散アプリを特定する。そしてコントローラ１３０は、通信経路情報１１４における実行分散アプリに対応する通信経路接続サーバに、処理対象の分散アプリの新たな配備先のサーバのサーバ名を追加する。
【０１１１】
［ステップＳ１３６］コントローラ１３０は、配備先のサーバが変更されたすべての分散アプリに対して、ステップＳ１３２〜Ｓ１３５の処理が終了したら、処理をステップＳ１３７に進める。
【０１１２】
［ステップＳ１３７］コントローラ１３０は、更新された通信経路情報１１４に基づいて、変更の影響を受けるサーバの転送先制御情報を作成する。例えば新たな配備先のサーバのサーバ名が追加された通信経路接続サーバに示されるサーバ群のうち、新たな配備先のサーバに隣接するサーバが、変更の影響を受けるサーバである。
【０１１３】
このようにして、配備先のサーバの変更に伴って通信接続を行うための転送先制御情報が生成される。
次に、分散アプリ配備先変更順準備処理について説明する。
【０１１４】
図１７は、分散アプリ配備先変更準備処理の手順の一例を示すフローチャートである。以下、図１７に示す処理をステップ番号に沿って説明する。
［ステップＳ１４１］コントローラ１３０は、サーバごとの起動・停止の実行アプリ制御情報を作成する。例えばコントローラ１３０は、新たに分散アプリが配備されるサーバに対しては、配備する分散アプリの操作「ＯＮ」を指示する実行アプリ制御情報を作成する。またコントローラ１３０は、配備先が変更される分散アプリの、変更前の配備先のサーバに対しては、配備されている分散アプリの操作「ＯＦＦ」を指示する実行アプリ制御情報を作成する。
【０１１５】
［ステップＳ１４２］コントローラ１３０は、分散アプリフローにおいて最初または最後に実行する分散アプリの配備先のサーバに変更があるか否かを判断する。コントローラ１３０は、配備先のサーバの変更がある場合、処理をステップＳ１４３に進める。またコントローラ１３０は、配備先の変更がない場合、分散アプリ配備先変更準備処理を終了する。
【０１１６】
［ステップＳ１４３］コントローラ１３０は、分散アプリ実行順序情報１１１と、分散アプリ配備先サーバ情報１１２とを参照し、最初と最後に実行される分散アプリの配備先のサーバを、接続先情報１１５に登録する。
【０１１７】
［ステップＳ１４４］コントローラ１３０は、最後に実行する分散アプリの配備先のサーバに変更があるか否かを判断する。コントローラ１３０は、配備先のサーバに変更がある場合、処理をステップＳ１４５に進める。またコントローラ１３０は、配備先のサーバに変更がない場合、分散アプリ配備先変更準備処理を終了する。
【０１１８】
［ステップＳ１４５］コントローラ１３０は、出力データ配信先情報１１６を、最後に実行する分散アプリの配備先のサーバに対して送信する制御情報に含める。
図１５〜図１７の処理の結果、図１４に示したような制御情報が、各サーバに送信される。転送先制御情報を受信したときのサーバの処理は、図１３に示した通りである。実行アプリ制御情報を受信したサーバは、分散アプリの起動または停止処理を行う。
【０１１９】
図１８は、分散アプリ起動・停止処理の手順の一例を示すフローチャートである。以下、サーバ２１０が処理を実行する場合を想定し、図１８に示す処理をステップ番号に沿って説明する。
【０１２０】
［ステップＳ１５１］制御情報受信部２１２は、実行アプリ制御情報を受信する。
［ステップＳ１５２］制御情報受信部２１２は、アプリ実行部２１４へ、実行アプリ制御情報に示されている分散アプリのアプリＩＤと、操作内容（起動（ＯＮ）または停止（ＯＦＦ））と、次に実行する分散アプリのアプリＩＤとを通知する。なお次に実行する分散アプリのアプリＩＤは、制御情報受信部２１２が分散アプリ実行順序情報２１１ｂを参照して特定する。
【０１２１】
［ステップＳ１５３］アプリ実行部２１４は、ステップＳ１５４〜Ｓ１５８の処理を繰り返すことで、制御対象の分散アプリごとにステップＳ１５４〜Ｓ１５８の処理を実行する。
【０１２２】
［ステップＳ１５４］アプリ実行部２１４は、操作内容が分散アプリの起動なのか停止なのかを判断する。アプリ実行部２１４は、操作内容が分散アプリの起動であれば、処理をステップＳ１５５に進める。またアプリ実行部２１４は、操作内容が分散アプリの停止であれば、処理をステップＳ１５７に進める。
【０１２３】
［ステップＳ１５５］アプリ実行部２１４は、通知されたアプリＩＤに対応する分散アプリを起動する。
［ステップＳ１５６］アプリ実行部２１４は、メッセージ転送部２１３に、起動した分散アプリのアプリＩＤを、その分散アプリへの入力データの取得対象のアプリＩＤとして登録する。その後、メッセージ転送部２１３は、他のサーバから受信した転送データに、登録されたアプリＩＤが付与されていれば、その転送データ内のデータをアプリ実行部２１４に送信する。
【０１２４】
［ステップＳ１５７］アプリ実行部２１４は、通知されたアプリＩＤに対応する分散アプリを停止する。
［ステップＳ１５８］アプリ実行部２１４は、メッセージ転送部２１３に登録されている停止した分散アプリのアプリＩＤを削除する。
【０１２５】
［ステップＳ１５９］アプリ実行部２１４は、制御対象のすべての分散アプリについて、ステップＳ１５４〜Ｓ１５８の処理が終了したら、分散アプリ起動・停止処理を終了する。
【０１２６】
このようして、分散アプリがいずれかのサーバに配備されると共に、分散アプリ間の転送データの送受信が可能となる。
次に、端末装置による接続先問い合わせ処理について説明する。
【０１２７】
図１９は、センサデータを送信する端末装置による接続先問い合わせの一例を示す図である。端末装置３１０（装置名「ｓｒｃ」）の接続先問い合わせ部３１１は、センサデータの送信先を問い合わせる接続先問い合わせ６１をセンタサーバ１００に送信する。なお端末装置３１０には、センタサーバ１００と通信するための情報（例えばＩＰ（Internet Protocol）アドレス）が予め設定されている。接続先問い合わせ６１には、操作要求６１ａが含まれる。操作要求６１ａには、分散アプリフローにおいて最初に実行する分散アプリのアプリＩＤと、操作「Ｐｕｂｌｉｓｈ」が含まれる。
【０１２８】
センタサーバ１００では、コントローラ１３０が接続先問い合わせ６１を受信する。接続先問い合わせ６１を受信したコントローラ１３０は、接続先情報１１５を参照し、データ送り先情報６２を生成する。データ送り先情報６２には、分散アプリフローにおいて最初に実行する分散アプリのアプリＩＤと操作「Ｐｕｂｌｉｓｈ」とに加え、接続先として、その分散アプリが配備されているサーバのサーバ名が含まれる。そしてコントローラ１３０は、データ送り先情報６２を端末装置３１０に送信する。
【０１２９】
端末装置３１０の接続先問い合わせ部３１１は、データ送り先情報６２を受信すると、データ送り先情報６２に接続先として設定されているサーバ名を、センサデータの送信先としてデータ送受信部３１２に設定する。その後、データ送受信部３１２は、センサデータを、接続先として設定されているサーバに対して送信する。
【０１３０】
図２０は、出力データの配信を受ける端末装置による接続先問い合わせの一例を示す図である。端末装置３２０（装置名「ｄｓｔ」）の接続先問い合わせ部３２１は、分散アプリフローにおける最後の分散アプリの出力データの配信を受けるための接続先問い合わせ６３をセンタサーバ１００に送信する。なお端末装置３２０には、センタサーバ１００と通信するための情報が予め設定されている。接続先問い合わせ６３には、操作要求６３ａが含まれる。操作要求６３ａには、分散アプリフローにおいて最後に実行する分散アプリのアプリＩＤと、操作「Ｓｕｂｓｃｒｉｂｅ」が含まれる。
【０１３１】
センタサーバ１００では、コントローラ１３０が接続先問い合わせ６３を受信する。接続先問い合わせ６３を受信したコントローラ１３０は、出力データ配信先情報１１６に、端末装置３２０の装置名「ｄｓｔ」を登録する。またコントローラ１３０は、接続先情報１１５を参照し、データ配信元情報６４を生成する。データ配信元情報６４には、分散アプリフローにおいて最後に実行する分散アプリのアプリＩＤと操作「Ｓｕｂｓｃｒｉｂｅ」とに加え、接続先として、その分散アプリが配備されているサーバのサーバ名が含まれる。そしてコントローラ１３０は、データ配信元情報６４を端末装置３２０に送信する。
【０１３２】
端末装置３２０の接続先問い合わせ部３２１は、データ配信元情報６４を受信すると、データ配信元情報６４に接続先として設定されているサーバ名を、出力データの送信元としてデータ送受信部３２２に設定する。その後、データ送受信部３２２は、出力データを、送信元として設定されているサーバから受信する。
【０１３３】
次に、接続先問い合わせ処理の手順について、シーケンス図を用いて詳細に説明する。
図２１は、接続先問い合わせ処理の手順の一例を示すシーケンス図である。図２１の例では、端末装置３１０が接続先問い合わせを行うものとする。以下、図２１に示す処理をステップ番号に沿って説明する。
【０１３４】
［ステップＳ１７１］端末装置３１０の接続先問い合わせ部３１１は、問い合わせ内容を示す操作要求を作成する。操作要求には、操作内容として「データ登録（Ｐｕｂｌｉｓｈ）」、「データ購読開始（Ｓｕｂｓｃｒｉｂｅ）」、「データ購読停止（ｕｎ−Ｓｕｂｓｃｒｉｂｅ）」のいずれかが設定される。
【０１３５】
［ステップＳ１７２］接続先問い合わせ部３１１は、操作要求を付与した接続先問い合わせを、センタサーバ１００に送信する。
［ステップＳ１７３］センタサーバ１００では、コントローラ１３０が接続先問い合わせを受信する。
【０１３６】
［ステップＳ１７４］コントローラ１３０は、操作が「データ購読開始（Ｓｕｂｓｃｒｉｂｅ）」または「データ購読停止（ｕｎ−Ｓｕｂｓｃｒｉｂｅ）」か否かを判定する。コントローラ１３０は、操作が「データ購読開始（Ｓｕｂｓｃｒｉｂｅ）」と「データ購読停止（ｕｎ−Ｓｕｂｓｃｒｉｂｅ）」とのいずれかであれば、処理をステップＳ１７５に進める。またコントローラ１３０は、操作が「データ登録（Ｐｕｂｌｉｓｈ）」であれば、処理をステップＳ１７６に進める。
【０１３７】
［ステップＳ１７５］コントローラ１３０は、操作が「データ購読開始（Ｓｕｂｓｃｒｉｂｅ）」であれば、端末装置３１０の装置名を、分散アプリフローの出力データ配信先情報に追加する。またコントローラ１３０は、操作が「データ購読停止（ｕｎ−Ｓｕｂｓｃｒｉｂｅ）」であれば、端末装置３１０の装置名を、分散アプリフローの出力データ配信先情報から削除する。
【０１３８】
［ステップＳ１７６］コントローラ１３０は、接続先問い合わせに応じた接続先を、端末装置３１０に送信する。例えばコントローラ１３０は、操作が「データ登録（Ｐｕｂｌｉｓｈ）」であれば、分散アプリフローにおいて最初に実行する分散アプリが配備されたサーバのサーバ名を、接続先として端末装置３１０に送信する。またコントローラ１３０は、操作が「データ購読開始（Ｓｕｂｓｃｒｉｂｅ）」と「データ購読停止（ｕｎ−Ｓｕｂｓｃｒｉｂｅ）」とのいずれかであれば、最後に実行する分散アプリが配備されたサーバのサーバ名を、接続先として端末装置３１０に送信する。
【０１３９】
［ステップＳ１７７］端末装置３１０の接続先問い合わせ部３１１は、センタサーバ１００から送信された接続先の情報を受信する。
［ステップＳ１７８］接続先問い合わせ部３１１は、接続先をデータ送受信部３１２に設定する。
【０１４０】
このようにして、端末装置３１０からの接続問い合わせに示される操作要求に応じた処理が実行される。
その後、データ登録の操作要求を送信した端末装置からセンサデータが分散システムに送信され、分散アプリフローに基づく処理の出力データが、データ購読開始の操作要求を送信した端末装置に配信される。
【０１４１】
図２２は、分散処理の一例を示す図である。端末装置３１０内のデータ送受信部３１２は、センサデータ７１を、分散アプリ「Ａｐｐ１」が配備されているサーバ２１０に送信する。センサデータ７１には、分散アプリ「Ａｐｐ１」のアプリＩＤが示されている。
【０１４２】
サーバ２１０では、メッセージ転送部２１３がセンサデータ７１を受信する。メッセージ転送部２１３は、センサデータ７１に含まれているアプリＩＤに基づいて、サーバ２１０に配備されている分散アプリ「Ａｐｐ１」で処理するデータであることを把握する。そしてメッセージ転送部２１３は、センサデータ７１に含まれるデータ７２をアプリ実行部２１４に送信する。アプリ実行部２１４は、分散アプリ「Ａｐｐ１」を用いてデータ７２を処理する。そしてアプリ実行部２１４は、分散アプリフローにおいて分散アプリ「Ａｐｐ１」の次に実行する分散アプリ「Ａｐｐ２」を指定して、処理結果として得られたデータをメッセージ転送部２１３に送信する。メッセージ転送部２１３は、分散アプリ「Ａｐｐ１」の出力データに分散アプリ「Ａｐｐ２」のアプリＩＤを付与した転送データ７３を、分散アプリ「Ａｐｐ２」に対応付けて接続されている隣接サーバ間通信経路上に送信する。
【０１４３】
転送データ７３が隣接サーバ間通信経路上を伝送され、サーバ２４０に到達すると、メッセージ転送部２４３がその転送データ７３を受信する。メッセージ転送部２４３は、転送データ７３に含まれているアプリＩＤに基づいて、サーバ２４０に配備されている分散アプリ「Ａｐｐ２」で処理するデータであることを把握する。そしてメッセージ転送部２４３は、転送データ７３に含まれるデータ７４をアプリ実行部２４４に送信する。アプリ実行部２４４は、分散アプリ「Ａｐｐ２」を用いてデータ７４を処理する。そしてアプリ実行部２４４は、分散アプリフローにおいて分散アプリ「Ａｐｐ２」の次に実行する分散アプリ「Ａｐｐ３」を指定して、処理結果として得られたデータをメッセージ転送部２４３に送信する。メッセージ転送部２４３は、分散アプリ「Ａｐｐ２」の出力データに分散アプリ「Ａｐｐ３」のアプリＩＤを付与した転送データ７５を、分散アプリ「Ａｐｐ３」に対応付けて接続されている隣接サーバ間通信経路上に送信する。
【０１４４】
転送データ７５が隣接サーバ間通信経路上を伝送され、サーバ２５０に到達すると、メッセージ転送部２５３がその転送データ７５を受信する。メッセージ転送部２４３は、転送データ７５に含まれているアプリＩＤに基づいて、サーバ２５０に配備されている分散アプリ「Ａｐｐ３」で処理するデータであることを把握する。そしてメッセージ転送部２５３は、転送データ７５に含まれるデータ７６をアプリ実行部２５４に送信する。アプリ実行部２５４は、分散アプリ「Ａｐｐ３」を用いてデータ７６を処理する。そしてアプリ実行部２５４は、分散アプリフローにおいて分散アプリ「Ａｐｐ３」が最後の分散アプリであるため、出力データの配信先の端末装置を指定して、処理結果として得られた出力データ７７をメッセージ転送部２５３に送信する。メッセージ転送部２５３は、分散アプリ「Ａｐｐ３」の出力データ７７を、配信先である端末装置３２０に送信する。端末装置３２０では、データ送受信部３２２が出力データを受信する。
【０１４５】
このような分散処理における分散システム内で転送される転送データ７３，７５は、付与されたアプリＩＤに対応付けて接続されたすべての隣接サーバ間通信経路を介して送信される。そのため分散アプリの配備先が変更された場合においても、変更先のサーバに対して、予め隣接サーバ間通信経路が接続されているとともに、処理するデータが事前に送られていることが期待できる。
【０１４６】
しかも第２の実施の形態では、分散アプリ配備先履歴１１７に基づいて、分散アプリの配備先となる可能性が高いサーバに対してのみ、その分散アプリに対応する隣接サーバ間通信経路を接続している。そのため、分散システム内に転送されるデータ量を抑制することができる。
【０１４７】
図２３は、分散システム内で転送される転送データの一例を示す図である。分散アプリ「Ａｐｐ１」が配備されたサーバ２１０において、分散アプリ「Ａｐｐ１」の出力データを含む転送データ７３ａ，７３ｂ，７３ｃが、通信接続されている各サーバ２２０，２３０，２４０に送信される。分散アプリ「Ａｐｐ２」が配備されていないサーバ２２０，２３０に送信された転送データ７３ａ，７３ｂは、分散アプリ「Ａｐｐ２」に対応する隣接サーバ間通信経路を用いて、別のサーバに転送される。例えばサーバ２３０は、受信した転送データ７３ｂをサーバ２２０，２４０，２５０には転送するが、サーバ２６０，２７０へは転送しない。
【０１４８】
分散アプリ「Ａｐｐ２」が配備されたサーバ２４０が転送データ７３ｃを受信すると、サーバ２４０において、転送データ７３ｃに含まれる分散アプリ「Ａｐｐ１」の出力データが、分散アプリ「Ａｐｐ２」を用いて処理される。その後、分散アプリ「Ａｐｐ２」の出力データを含む転送データ７５ａ，７５ｂが、通信接続されている各サーバ２３０，２６０に送信される。分散アプリ「Ａｐｐ３」が配備されていないサーバ２３０，２６０に送信された転送データ７５ａ，７５ｂは、分散アプリ「Ａｐｐ３」に対応する隣接サーバ間通信経路を用いて、別のサーバに転送される。例えばサーバ２３０は、受信した転送データ７３ｂをサーバ２５０，２６０，２７０には転送するが、サーバ２１０，２２０へは転送しない。
【０１４９】
分散アプリ「Ａｐｐ３」が配備されたサーバ２５０は、転送データ７５ａを受信すると、サーバ２５０において、転送データ７５ａに含まれる分散アプリ「Ａｐｐ３」の出力データが、分散アプリ「Ａｐｐ３」を用いて処理される。分散アプリ「Ａｐｐ３」による処理の出力データは、配信を希望している端末装置に送信される。
【０１５０】
このように、転送データの転送先に制限を設けたことで、分散システム内で通信されるデータ量を削減することができる。以下、図２４を参照して、センサデータまたは転送データを受信したサーバにおける分散アプリ実行およびデータ転送処理について詳細に説明する。
【０１５１】
図２４は、分散アプリ実行およびデータ転送処理の手順の一例を示すフローチャートである。以下、サーバ２１０が実行する場合を想定し、図２４に示す処理をステップ番号に沿って説明する。
【０１５２】
［ステップＳ１８１］メッセージ転送部２１３は、センサデータまたは転送データを受信する。
［ステップＳ１８２］メッセージ転送部２１３は、受信したセンサデータまたは転送データに付与されたアプリＩＤで示された分散アプリに対応付けて通信接続された隣接サーバ間通信経路に受信データを転送する。
【０１５３】
［ステップＳ１８３］メッセージ転送部２１３は、受信したセンサデータまたは転送データに示されているアプリＩＤの分散アプリを実行中か否かを判断する。例えばメッセージ転送部２１３は、実行対象分散アプリＩＤ２１１ａと、受信したセンサデータまたは転送データに示されているアプリＩＤとが一致した場合、該当する分散サプリを実施中であると判断する。メッセージ転送部２１３は、該当する分散アプリを実行中であれば、処理をステップＳ１８４に進める。またメッセージ転送部２１３は、該当する分散アプリを実行中でなければ、分散アプリ実行およびデータ転送処理を終了する。
【０１５４】
［ステップＳ１８４］メッセージ転送部２１３は、アプリ実行部２１４に受信したデータ（センサデータまたは転送データ）を転送する。
［ステップＳ１８５］アプリ実行部２１４は、分散アプリを用いて入力されたデータを処理する。例えばアプリ実行部２１４は、分散アプリを実行しているプロセスに入力されたデータを送信し、戻り値として処理結果を受信する。
【０１５５】
［ステップＳ１８６］アプリ実行部２１４は、処理を実行した分散アプリが、分散アプリフローにおいて最後に実行する分散アプリか否かを判断する。アプリ実行部２１４は、最後の分散アプリであれば、処理をステップＳ１８７に進める。またアプリ実行部２１４は、最後の分散アプリでなければ、処理をステップＳ１８８に進める。
【０１５６】
［ステップＳ１８７］アプリ実行部２１４は、配信先の端末装置を指定して、出力データをメッセージ転送部２１３に送信する。その後、処理がステップＳ１８９に進められる。
【０１５７】
［ステップＳ１８８］アプリ実行部２１４は、次に実行する分散アプリのアプリＩＤを出力データに付加し、転送データを作成する。
［ステップＳ１８９］メッセージ転送部２１３は、配信先の端末装置への出力データの送信、または次に実行する分散アプリが配備されたサーバへの転送データの送信を行う。
【０１５８】
図２４に示した処理が、センサデータまたは転送データを受信した各サーバで実行される。その結果、図２３に示したように、予め限定した範囲で通信接続した通信内で、転送データが送信される。これにより、分散システム内の通信データ量が削減される。
【０１５９】
〔第３の実施の形態〕
次に第３の実施の形態について説明する。第３の実施の形態は、過去の分散アプリの配備サーバの履歴とサーバ間の転送遅延情報とを用いて適切な隣接サーバ間通信経路を決定することで、分散システムにおけるトラフィック量を削減するものである。以下、第３の実施の形態について、第２の実施の形態と相違する部分を中心に説明する。なお、第３の実施の形態における、第２の実施の形態と同様の機能を有する要素には、第３の実施の形態と同じ符号を付し、その要素の説明を省略する。
【０１６０】
第３の実施の形態では、センタサーバが、第２の実施の形態と同様に、過去に各サーバに対して分散アプリが配備された履歴を作成する。それに加え、第３の実施の形態のセンタサーバは、各サーバから、他のサーバとの転送遅延時間の測定結果を収集する。
【０１６１】
図２５は、転送遅延時間の測定結果の収集例を示す図である。分散システム内の各サーバ２１０ａ，２２０ａ，２３０ａ，２４０ａ，２５０ａ，２６０ａ，２７０ａは、到達可能な他の隣接するサーバとの間のデータ転送の遅延時間を測定する。遅延時間は、例えば所定のサイズのデータを送信元から送信を開始してから、すべてのデータが送信先で受信完了するまでの時間である。また遅延時間として、送信先からの要求に応じて送信元がデータを送信する際の片道レイテンシを用いてもよい。また各サーバは、送信元から送信先へのデータ転送の帯域幅（単位時間当たりの送信データ量）を測定し、帯域幅から遅延時間を算出してもよい。
【０１６２】
例えばサーバ２１０ａは、サーバ２２０ａ，２３０ａ，２４０ａとの間の遅延時間を測定する。サーバ２１０ａは、各サーバとの間のデータ転送の遅延時間を含む転送遅延測定結果８１をセンタサーバ１００ａに送信する。他のサーバ２２０ａ，２３０ａ，２４０ａ，２５０ａ，２６０ａ，２７０ａも同様に、測定した遅延時間を含む転送遅延測定結果を、センタサーバ１００ａに送信する。
【０１６３】
センタサーバ１００ａは、収集した転送遅延測定結果に基づいて、サーバ間転送遅延情報１１８を生成する。サーバ間転送遅延情報１１８には、送信元のサーバ名と送信先のサーバ名との組に対応付けて、送信元のサーバから送信先のサーバにデータを転送する際の遅延時間が設定されている。
【０１６４】
またセンタサーバ１００ａは、分散アプリごとに、最も配備頻度（配備の回数）が高いサーバを起点として、起点のサーバから他のサーバそれぞれに対し、転送遅延が最も低くなる通信経路を決定する。そしてセンタサーバ１００ａは、決定した通信経路上の隣接サーバ間通信経路を、対応する分散アプリの出力データを転送するための隣接サーバ間通信経路とする。
【０１６５】
図２６は、起点のサーバからのデータ転送の遅延時間に応じた通信経路の接続の第１の例を示す図である。図２６は、分散アプリ「Ａｐｐ１」からの出力データを含む、分散アプリ「Ａｐｐ２」への転送データを転送するための隣接サーバ間通信経路の接続例が示されている。分散アプリ配備先履歴１１７において、分散アプリ「Ａｐｐ１」の配備頻度が最も高いのは、サーバ２１０ａ（サーバ名「ＳｅｒｖｅｒＡ」）であるものとする。
【０１６６】
この場合、センタサーバ１００ａは、サーバ２１０ａを起点サーバとし、サーバ２１０ａから他のサーバ２２０ａ，２３０ａ，２４０ａ，２５０ａ，２６０ａ，２７０ａそれぞれに対して、最もデータ転送の遅延時間が短い通信経路を決定する。例えばサーバ２１０ａからサーバ２４０ａへの通信経路としては、直接接続された経路、サーバ２３０ａを経由する経路、サーバ２３０ａおよびサーバ２６０ａを経由する経路などがある。
【０１６７】
センタサーバ１００ａは、サーバ間転送遅延情報１１８を参照し、各経路の合計の遅延時間を計算する。例えばサーバ２１０からサーバ２２０ａへ直接データ転送を行う経路であれば、送信元「ＳｅｒｖｅｒＡ」、送信先「ＳｅｒｖｅｒＤ」の組に対応する遅延時間が、その経路の遅延時間である。
【０１６８】
またサーバ２１０ａから、サーバ２３０ａを経由してサーバ２２０ａへデータ転送を行う経路であれば、複数の遅延時間が合計される。すなわち、送信元「ＳｅｒｖｅｒＡ」、送信先「ＳｅｒｖｅｒＣ」の組に対応する遅延時間と、送信元「ＳｅｒｖｅｒＣ」、送信先「ＳｅｒｖｅｒＤ」の組に対応する遅延時間との合計が、その経路の遅延時間となる。
【０１６９】
センタサーバ１００ａは、サーバ２１０ａから他のサーバ２２０ａ，２３０ａ，２４０ａ，２５０ａ，２６０ａ，２７０ａそれぞれに対する、最もデータ転送の遅延時間が短い通信経路を決定する。そしてセンタサーバ１００ａは、決定した通信経路上の隣接サーバ間通信経路を、転送データの送信に使用する隣接サーバ間通信経路に決定する。
【０１７０】
図２７は、起点のサーバからのデータ転送の遅延時間に応じた通信経路の接続の第２の例を示す図である。図２７は、分散アプリ「Ａｐｐ２」からの出力データを含む、分散アプリ「Ａｐｐ３」への転送データを転送するための隣接サーバ間通信経路の接続例が示されている。分散アプリ配備先履歴１１７において、分散アプリ「Ａｐｐ２」の配備頻度が最も高いのは、サーバ２４０ａ（サーバ名「ＳｅｒｖｅｒＤ」）であるものとする。
【０１７１】
この場合、センタサーバ１００ａは、サーバ２４０ａを起点サーバとし、サーバ２４０ａから他のサーバ２１０ａ，２２０ａ，２３０ａ，２５０ａ，２６０ａ，２７０ａそれぞれに対して、最もデータ転送の遅延時間が短い通信経路を決定する。そしてセンタサーバ１００ａは、最もデータ転送の遅延時間が短い通信経路上の隣接サーバ間通信経路を、該当するサーバへの転送データの送信に使用する隣接サーバ間通信経路に決定する。
【０１７２】
図２８は、第３の実施の形態における各装置の機能の一例を示す図である。第３の実施の形態のサーバ２１０ａは、図５に示した第２の実施の形態のサーバ２１０が有する機能に加え、通信状況監視部２１５を有している。通信状況監視部２１５は、サーバ２１０ａから他のサーバへのデータ転送の遅延時間を測定する。そして通信状況監視部２１５は、転送遅延測定結果８１（図２５参照）を、センタサーバ１００ａに送信する。他のサーバ２２０ａ，・・・も、サーバ２１０ａと同様の機能を有している。
【０１７３】
第３の実施の形態のセンタサーバ１００ａは、図５に示した第２の実施の形態のセンタサーバ１００が有する機能に加え、サーバ情報受信部１４０を有している。サーバ情報受信部１４０は、各サーバ２１０ａ，２２０ａ，・・・から転送遅延測定結果を収集する。サーバ情報受信部１４０は、収集した転送遅延測定結果を、コントローラ１３０ａに転送する。
【０１７４】
第３の実施の形態におけるコントローラ１３０ａは、サーバ情報受信部１４０から各サーバ２１０ａ，２２０ａ，・・・の転送遅延測定結果を取得すると、サーバ間転送遅延情報１１８を生成する。そしてコントローラ１３０ａは、生成したサーバ間転送遅延情報１１８を、記憶部１１０ａに格納する。
【０１７５】
図２９は、第３の実施の形態におけるセンタサーバの記憶部に格納されている情報の一例を示す図である。記憶部１１０ａに格納されている情報のうち、通信経路情報１１４ａとサーバ間転送遅延情報１１８以外の情報は、第２の実施の形態に示した同名の情報（図６参照）と同様の内容である。またサーバ間転送遅延情報１１８の内容は、図２５に示した通りである。第３の実施の形態における通信経路情報１１４ａは、分散アプリのアプリＩＤに対応付けて、接続対象の隣接サーバ間通信経路の両端のサーバのサーバ名の組が設定されている。
【０１７６】
次に、第３の実施の形態における第２の実施の形態と異なる処理について、フローチャートを参照して説明する。
図３０は、サーバにおける通信状況監視処理の手順の一例を示すフローチャートである。以下、サーバ２１０ａが実行する場合を想定して、図３０に示す処理についてステップ番号に沿って説明する。
【０１７７】
［ステップＳ２０１］通信状況監視部２１５は、終了の指示があるまでステップＳ２０２〜Ｓ２０４の処理を繰り返す。
［ステップＳ２０２］通信状況監視部２１５は、隣接するサーバとの通信の遅延時間を測定する。
【０１７８】
［ステップＳ２０３］通信状況監視部２１５は、転送遅延測定結果８１（図２５参照）を作成する。
［ステップＳ２０４］通信状況監視部２１５は、転送遅延測定結果８１を、センタサーバ１００ａに送信する。
【０１７９】
［ステップＳ２０５］通信状況監視部２１５は、終了の指示が入力された場合、通信状況監視処理を終了する。
このようにして、サーバ２１０ａにおいて遅延時間が測定される。他のサーバ２２０ａ，２３０ａ，２４０ａ，２５０ａ，２６０ａ，２７０ａでも同様に遅延時間が測定される。測定された遅延時間を含む転送遅延測定結果を受信するごとに、コントローラ１３０ａはサーバ間遅延時間情報更新処理を行う。
【０１８０】
図３１は、第３の実施の形態におけるサーバ間遅延時間情報更新処理の手順の一例を示すフローチャートである。以下、図３１に示す処理をステップ番号に沿って説明する。
［ステップＳ２１１］コントローラ１３０ａは、各サーバから、転送遅延測定結果を受信する。
【０１８１】
［ステップＳ２１２］コントローラ１３０ａは、サーバ間転送遅延情報１１８のうち、受信した転送遅延測定結果に対応する部分の遅延時間を更新する。
このようにして、サーバ間転送遅延情報１１８が更新され、最新の遅延時間が登録される。次に、第３の実施の形態における通信経路決定処理の手順について説明する。
【０１８２】
図３２は、第３の実施の形態における通信経路決定処理の手順の一例を示すフローチャートである。図３２に示す処理のうちステップＳ２２２，Ｓ２２５〜Ｓ２２７は、それぞれ図１２に示した第２の実施の形態における通信経路決定処理のステップＳ１０２，Ｓ１０５〜Ｓ１０７と同じである。以下、第２の実施の形態と異なるステップＳ２２１，Ｓ２２３，Ｓ２２４について説明する。
【０１８３】
［ステップＳ２２１］コントローラ１３０ａは、分散アプリごとに、配備候補サーバのリストを作成する。第３の実施の形態における分散アプリの配備候補サーバは、分散システム内のすべてのサーバである。そしてコントローラ１３０は、各分散アプリの配備候補サーバを纏めて、分散アプリ配備先候補情報を作成する。
【０１８４】
［ステップＳ２２３］コントローラ１３０ａは、分散アプリ配備先履歴１１７を参照し、処理対象の連続アプリ対（実行順が連続する２つの分散アプリ）のうちの実行順が先の分散アプリについて、その分散アプリの配備候補サーバの中から、配備回数が最も多いサーバを選択する。
【０１８５】
［ステップＳ２２４］コントローラ１３０ａは、選択したサーバから他のサーバそれぞれへの遅延時間が最短となる経路を求める。遅延時間が最短となる経路は、例えばダイクストラ法によって決定することができる。次にコントローラ１３０ａは、遅延時間が最短の経路に基づいて、処理対象の連続アプリ対に対応する通信経路情報を作成する。例えばコントローラ１３０ａは、他のサーバそれぞれへの遅延時間が最短となる経路上の、隣接するサーバの対（隣接サーバ対）を特定する。そしてコントローラ１３０ａは、特定した隣接サーバ対を、処理対象の連続アプリ対における実行順が後の分散アプリのアプリＩＤに対応付けて、通信経路情報１１４ａに設定する。
【０１８６】
このようにして、図２９に示したような通信経路情報１１４ａが作成される。そして通信経路情報に基づいて、各サーバに送信する転送先制御情報が作成され、対応するサーバに送信される。
【０１８７】
図３３は、第３の実施の形態における転送先制御情報の一例を示す図である。図３３には、図２６、図２７に示した隣接サーバ間通信経路の通信接続をサーバ２１０ａ，２４０ａ，２５０ａに実行させるための転送先制御情報５５ｄ，５５ｅ，５５ｆが示されている。なお、図３３に示していないサーバに対しても、対応する転送先制御情報が送信される。
【０１８８】
このような転送先制御情報を送信することで、図２６、図２７に示した隣接サーバ間通信経路の通信接続を各サーバに実行させることができる。
なお、第３の実施の形態では、第２の実施の形態と異なり、通信経路は１系統に限定されるものの、すべてのサーバに対して通信接続が行われる。そのため、分散アプリ配備処理によって分散アプリの配備先が変更されても、通信経路の変更処理を実行せずに済む。
【０１８９】
図３４は、第３の実施の形態における分散アプリ配備処理の手順の一例を示すフローチャートである。図３４に示す処理のうちステップＳ２３１〜Ｓ２３６は、それぞれ図１５に示した第２の実施の形態における分散アプリ配備処理のステップＳ１２１〜Ｓ１２４，Ｓ１２６，Ｓ１２７と同じである。異なるのは、第２の実施の形態において実行していた通信経路更新処理（ステップＳ１２５）が、第３の実施の形態では実行されない点である。
【０１９０】
このように、第３の実施の形態では、遅延時間が短い通信経路上の隣接サーバ間通信経路で通信接続を行うため、処理の効率化が図れる。
〔第４の実施の形態〕
次に第４の実施の形態について説明する。第４の実施の形態は、通信接続について、分散アプリの配備履歴に基づいて、通信方向ごとに接続するか否かを判断するものである。すなわち第２および第３の実施の形態では、通信接続を行うと決定した隣接サーバ間通信経路について、双方向の通信が可能なように接続している。しかし、過去の分散アプリの配備状況から、一方の通信については、有用性が低い場合がある。有用性が低い通信方向については通信接続を行わないようにすることで、無駄な転送データの送信を抑止し、ネットワーク上の通信データ量を削減することができる。以下、第４の実施の形態について、第３の実施の形態との相違する部分を中心に説明する。なお、第４の実施の形態における第３の実施の形態と同様の機能を有する要素には、第３の実施の形態と同じ符号を付し、その要素の説明を省略する。
【０１９１】
第４の実施の形態では、センタサーバが、第３の実施の形態と同様に、過去に各サーバに対して分散アプリが配備された履歴を作成すると共に、各サーバから、他のサーバとの転送遅延時間の測定結果を収集する。そして、センタサーバは、第３の実施の形態と同様に、分散アプリの配備頻度が最も高いサーバを起点サーバとし、起点サーバから他のサーバへの通信経路のうち、データ転送の遅延時間が最も短くなる通信経路を特定する。
【０１９２】
第４の実施の形態では、センタサーバが、データ転送の遅延時間が最も短くなる通信経路の上の各サーバに着目し、そのサーバから通信経路の末端まで辿ることで到達可能なサーバにおける、次に実行する分散アプリの配備の実績の有無を判断する。配備実績がない場合、センタサーバは、着目しているサーバより末端の経路はデータの転送方向を一方向に限定し、通信経路情報を作成する。
【０１９３】
図３５は、データの転送方向を一方向に限定した通信経路接続の第１の例を示す図である。図３５は、分散アプリ「Ａｐｐ１」からの出力データを含む、分散アプリ「Ａｐｐ２」への転送データを転送するための隣接サーバ間通信経路の接続例が示されている。図３５の例では、分散アプリ「Ａｐｐ１」の配備頻度が最も高いのはサーバ２１０ａであり、サーバ２１０ａが起点サーバとなる。また、サーバ２２０ａ，２６０ａ，２７０ａには、分散アプリ「Ａｐｐ２」の配備実績がないものとする。
【０１９４】
この場合、例えば起点サーバであるサーバ２１０ａとサーバ２２０ａとを接続する隣接サーバ間通信経路については、サーバ２２０ａに分散アプリ「Ａｐｐ２」の配備実績がないため、サーバ２２０ａからサーバ２１０ａへの通信方向の通信接続を行えば十分である。そのため、サーバ２１０ａとサーバ２２０ａとを接続する隣接サーバ間通信経路は、サーバ２２０ａからサーバ２１０ａへの一方向のみの通信接続が行われる。
【０１９５】
同様に、サーバ２６０ａに分散アプリ「Ａｐｐ２」の配備実績がないため、サーバ２４０ａとサーバ２６０ａとを接続する隣接サーバ間通信経路は、サーバ２６０ａからサーバ２４０ａへの一方向のみの通信接続が行われる。またサーバ２７０ａに分散アプリ「Ａｐｐ２」の配備実績がないため、サーバ２３０ａとサーバ２７０ａとを接続する隣接サーバ間通信経路は、サーバ２７０ａからサーバ２３０ａへの一方向のみの通信接続が行われる。
【０１９６】
図３６は、データの転送方向を一方向に限定した通信経路接続の第２の例を示す図である。図３６は、分散アプリ「Ａｐｐ２」からの出力データを含む、分散アプリ「Ａｐｐ３」への転送データを転送するための隣接サーバ間通信経路の接続例が示されている。図３６の例では、分散アプリ「Ａｐｐ２」の配備頻度が最も高いのはサーバ２４０ａであり、サーバ２４０ａが起点サーバとなる。また、サーバ２１０ａ，２２０ａ，２３０ａには、分散アプリ「Ａｐｐ３」の配備実績がないものとする。
【０１９７】
この場合、サーバ２２０ａに分散アプリ「Ａｐｐ３」の配備実績がないため、サーバ２１０ａとサーバ２３０ａとを接続する隣接サーバ間通信経路は、サーバ２３０ａからサーバ２１０ａへの一方向のみの通信接続が行われる。またサーバ２１０ａとサーバ２２０ａとの両方に分散アプリ「Ａｐｐ３」の配備実績がないため、サーバ２４０ａとサーバ２１０ａとを接続する隣接サーバ間通信経路は、サーバ２１０ａからサーバ２４０ａへの一方向のみの通信接続が行われる。
【０１９８】
図３７は、第４の実施の形態における各装置の機能の一例を示す図である。第４の実施の形態のセンタサーバ１００ｂの記憶部１１０ｂは、図２８に示した第３の実施の形態の通信経路情報１１４ａに代えて、方向指定通信経路情報１１４ｂを有している。
【０１９９】
図３８は、第４の実施の形態におけるセンタサーバの記憶部に格納されている情報の一例を示す図である。方向指定通信経路情報１１４ｂには、分散アプリのアプリＩＤに対応付けて、送信元となるサーバのサーバ名と送信先となるサーバのサーバ名との組が設定されている。図３８の例では、組になった２つのサーバ名のうち、左側のサーバ名が送信元のサーバを示しており、右側のサーバ名が送信先のサーバを示している。
【０２００】
次に、第４の実施の形態のコントローラ１３０ｂによる通信経路決定処理の手順について、詳細に説明する。
図３９は、第４の実施の形態における通信経路決定処理の手順の一例を示すフローチャートである。図３９に示す処理のうちステップＳ３０１〜Ｓ３０３，Ｓ３１１〜Ｓ３１３は、それぞれ図３２に示した第３の実施の形態における通信経路決定処理のステップＳ２２１〜Ｓ２２３，Ｓ２２５〜Ｓ２２７と同じである。以下、第３の実施の形態と異なるステップＳ３０４〜Ｓ３１０について説明する。
【０２０１】
［ステップＳ３０４］コントローラ１３０ｂは、ステップＳ３０３で選択したサーバから他のサーバそれぞれへの遅延時間が最短となる経路（最短経路）を求める。
［ステップＳ３０５］コントローラ１３０ｂは、ステップＳ３０６〜Ｓ３０９の処理を繰り返すことで、最短経路上で隣接する隣接サーバ対ごとにステップＳ３０６〜Ｓ３０９の処理を実行する。ここで、隣接サーバ対の２つのサーバのうち、最短経路上で起点サーバに近い方のサーバを親、起点サーバから遠い方のサーバを子とする。
【０２０２】
［ステップＳ３０６］コントローラ１３０ｂは、分散アプリ配備先履歴１１７を参照し、最短経路上で、隣接サーバ対の親のサーバより末端側（起点サーバから遠い側）のサーバについて、次に実行する分散アプリの配備実績の有無を確認する。
【０２０３】
［ステップＳ３０７］コントローラ１３０ｂは、最短経路上で、隣接サーバ対の親のサーバより末端側のサーバの少なくとも１つに、次に実行する分散アプリの配備実績があるか否かを判断する。コントローラ１３０ｂは、配備実績がある場合、処理をステップＳ３０８に進める。またコントローラ１３０ｂは、配備実績がない場合、処理をステップＳ３０９に進める。
【０２０４】
［ステップＳ３０８］コントローラ１３０ｂは、通信方向を双方向として、処理対象の隣接サーバ対を、処理対象の連続アプリ対における処理順が後の分散アプリのアプリＩＤに対応付けて、方向指定通信経路情報１１４ｂに登録する。例えばコントローラ１３０ｂは、隣接サーバ対の親のサーバのサーバ名を送信元、子のサーバのサーバ名を送信先とするデータを、方向指定通信経路情報１１４ｂに登録する。さらにコントローラ１３０ｂは、隣接サーバ対の子のサーバのサーバ名を送信元、親のサーバのサーバ名を送信先とする通信経路接続サーバを、方向指定通信経路情報１１４ｂに登録する。コントローラ１３０ｂは、その後、処理をステップＳ３１０に進める。
【０２０５】
［ステップＳ３０９］コントローラ１３０ｂは、通信方向を、親のサーバから子のサーバへの一方向として、処理対象の隣接サーバ対を、処理対象の連続アプリ対における処理順が後の分散アプリのアプリＩＤに対応付けて、方向指定通信経路情報１１４ｂに登録する。例えばコントローラ１３０ｂは、隣接サーバ対の親のサーバのサーバ名を送信元、子のサーバのサーバ名を送信先とするデータを、方向指定通信経路情報１１４ｂに登録する。
【０２０６】
［ステップＳ３１０］コントローラ１３０ｂは、最短経路上のすべての隣接サーバ対に対するステップＳ３０６〜Ｓ３０９の処理が終了したら、処理をステップＳ３１１に進める。
【０２０７】
このようにして、方向指定通信経路情報１１４ｂが生成され、方向指定通信経路情報１１４ｂに基づいて、各サーバに転送先制御情報が送信される。
図４０は、第４の実施の形態における転送先制御情報の一例を示す図である。図４０には、図３５、図３６に示した通信経路の通信接続をサーバ２１０ａ，２４０ａ，２５０ａに実行させるための転送先制御情報５５ｇ，５５ｈ，５５ｉが示されている。なお、図４０に示していないサーバに対しても、対応する転送先制御情報が送信される。
【０２０８】
このような転送先制御情報を送信することで、図３５、図３６に示した通信経路の通信接続を各サーバに実行させることができる。各サーバに送信方向を限定して通信接続をさせることで、転送データの転送量が削減され、分散システムの処理効率が向上する。
【０２０９】
〔その他の実施の形態〕
第２の実施の形態と第４の実施の形態とを組み合わせることができる。例えば第４の実施の形態に第２の実施の形態の処理を適用する場合、コントローラ１３０ｂは、図３９のステップＳ３０１に代えて、図１２のステップＳ１０１の処理を実行する。これにより、各分散アプリの配備候補サーバが、過去にその分散アプリの配備実績があるサーバに限定される。そしてステップＳ３０４では、配備候補サーバについてのみ、最短経路を求める。
【０２１０】
また第３の実施の形態と第４の実施の形態では、分散アプリの配備頻度が最も高いサーバを起点サーバとして最短経路を求めているが、他のサーバを起点サーバとしてもよい。例えば該当する分散アプリが現在配備されているサーバを起点サーバとしてもよい。
【０２１１】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０２１２】
１  ネットワーク
１ａ〜１ｄ  サーバ
２  入力データ
３ａ〜３ｃ，４ａ〜４ｃ  転送データ
５  出力データ
６，７  データ転送用経路
８，９  端末装置
１０  通信経路管理装置
１１  記憶部
１１ａ  実行実績
１２  処理部
【図１】
2018207285.tif 000003
【図２】
2018207285.tif 000004
【図３】
2018207285.tif 000005
【図４】
2018207285.tif 000006
【図５】
2018207285.tif 000007
【図６】
2018207285.tif 000008
【図７】
2018207285.tif 000009
【図８】
2018207285.tif 000010
【図９】
2018207285.tif 000011
【図１０】
2018207285.tif 000012
【図１１】
2018207285.tif 000013
【図１２】
2018207285.tif 000014
【図１３】
2018207285.tif 000015
【図１４】
2018207285.tif 000016
【図１５】
2018207285.tif 000017
【図１６】
2018207285.tif 000018
【図１７】
2018207285.tif 000019
【図１８】
2018207285.tif 000020
【図１９】
2018207285.tif 000021
【図２０】
2018207285.tif 000022
【図２１】
2018207285.tif 000023
【図２２】
2018207285.tif 000024
【図２３】
2018207285.tif 000025
【図２４】
2018207285.tif 000026
【図２５】
2018207285.tif 000027
【図２６】
2018207285.tif 000028
【図２７】
2018207285.tif 000029
【図２８】
2018207285.tif 000030
【図２９】
2018207285.tif 000031
【図３０】
2018207285.tif 000032
【図３１】
2018207285.tif 000033
【図３２】
2018207285.tif 000034
【図３３】
2018207285.tif 000035
【図３４】
2018207285.tif 000036
【図３５】
2018207285.tif 000037
【図３６】
2018207285.tif 000038
【図３７】
2018207285.tif 000039
【図３８】
2018207285.tif 000040
【図３９】
2018207285.tif 000041
【図４０】
2018207285.tif 000042