(57)【要約】【課題】分散ネットワークコントローラを用いるシステムでの輻輳解消を効率化する。【解決手段】経路決定装置は、複数の転送装置、複数の処理装置、制御装置を含む通信システム中の装置であり、取得部、判定部、送信部を備える。取得部は、制御装置が、複数の処理装置から選択された対象処理装置に処理対象のパケットを含む制御メッセージの処理を要求する場合に、制御メッセージの処理にかかる時間である処理時間を取得する。判定部は、処理時間が第１の閾値を越えると、処理時間が第１の閾値よりも大きい第２の閾値を超えているかにより、制御装置と対象処理装置の間の通信に使用される転送装置と、対象処理装置のいずれで輻輳が発生したかを判定する。送信部は、輻輳が発生した装置で制御メッセージが処理されないように決定した転送経路の設定を要求する要求メッセージを送信する。【選択図】図２
2015228538.tif 000002
【特許請求の範囲】
【請求項１】
複数の転送装置、複数の処理装置、制御装置を含む通信システム中の経路決定装置であって、
前記制御装置が前記複数の処理装置から選択された対象処理装置に処理対象のパケットを含む制御メッセージの処理を要求する場合に、前記制御メッセージの処理にかかる時間である処理時間を取得する取得部と、
前記処理時間が第１の閾値を越えると、前記処理時間が前記第１の閾値よりも大きい第２の閾値を超えているかにより、前記制御装置と前記対象処理装置の間の通信に使用される転送装置と、前記対象処理装置のいずれで輻輳が発生したかを判定する判定部と、
前記輻輳が発生した装置で前記制御メッセージが処理されないように決定した転送経路の設定を要求する要求メッセージを送信する送信部
を備えることを特徴とする経路決定装置。
【請求項２】
前記転送経路を計算する計算部と、
前記転送経路の設定の際に使用される要求メッセージを生成する生成部をさらに備え、
前記判定部は、前記処理時間が前記第２の閾値より長い場合、前記対象処理装置での輻輳により処理が遅延していると判定し、
前記計算部は、前記複数の処理装置のうちで前記対象処理装置とは異なる他の処理装置を選択することにより、前記転送経路を求め、
前記生成部は、前記制御装置から受信した制御メッセージを前記対象処理装置に転送する転送装置に、前記制御装置から受信した制御メッセージを前記他の処理装置に転送することを要求するための要求メッセージを生成する
ことを特徴とする請求項１に記載の経路決定装置。
【請求項３】
前記判定部は、
前記制御装置が前記対象処理装置に処理を要求する制御メッセージのフローである第１のフローについて得られた第１の処理時間が前記第１の閾値より長く、前記第２の閾値以下の場合、前記制御装置から受信した制御メッセージを前記対象処理装置に転送する転送装置を判定対象とし、
前記判定対象を介して前記複数の処理装置のいずれかに制御メッセージが転送される第２のフローを特定し、
前記取得部は、前記第２のフローに属する制御メッセージについての処理時間である第２の処理時間の長さを取得し、
前記判定部は、前記第２の処理時間が前記第１の閾値より長く、前記第２の閾値以下の場合、前記第１のフローを前記対象処理装置に転送している転送装置での輻輳により処理が遅延したと判定する
ことを特徴とする請求項１または２に記載の経路決定装置。
【請求項４】
前記判定部は、前記第２の処理時間が前記第１の閾値以下の場合、前記第１のフロー中の制御メッセージを前記対象処理装置から前記制御装置に転送する他の転送装置を経由する第３のフローを特定し、
前記取得部は、前記第３のフローに属する制御メッセージについての処理時間である第３の処理時間の長さを取得し、
前記判定部は、前記第３の処理時間が前記第１の閾値より長く、前記第２の閾値以下の場合、前記他の転送装置での輻輳により処理が遅延したと判定する
ことを特徴とする請求項３に記載の経路決定装置。
【請求項５】
複数の転送装置、複数の処理装置、経路決定装置、制御装置を含む通信システムでの転送経路の決定方法であって、
前記制御装置が前記複数の処理装置から選択された対象処理装置に処理対象のパケットを含む制御メッセージの処理を要求する場合に、前記制御メッセージの処理にかかる時間である処理時間を取得し、
前記処理時間が第１の閾値を越えると、前記処理時間が前記第１の閾値よりも大きい第２の閾値を超えているかにより、前記制御装置と前記対象処理装置の間の通信に使用される転送装置と、前記対象処理装置のいずれで輻輳が発生したかを判定し、
前記輻輳が発生した装置で処理対象の制御メッセージが処理されないように転送経路を決定する
処理を前記経路決定装置が行うことを特徴とする転送経路の決定方法。
【請求項６】
前記処理時間が前記第２の閾値より長い場合、前記対象処理装置での輻輳により処理が遅延していると判定し、
前記複数の処理装置のうちで前記対象処理装置とは異なる他の処理装置を選択することにより、前記転送経路を求め、
前記制御装置から受信した制御メッセージを前記対象処理装置に転送する転送装置に、前記制御装置から受信した制御メッセージを、前記他の処理装置に転送することを要求する
処理を前記経路決定装置が行うことを特徴とする請求項５に記載の転送経路の決定方法。
【請求項７】
前記制御装置が前記対象処理装置に処理を要求する制御メッセージのフローである第１のフローについて得られた第１の処理時間が前記第１の閾値より長く、前記第２の閾値以下の場合、前記制御装置から受信した制御メッセージを前記対象処理装置に転送する転送装置を判定対象とし、
前記判定対象を介して前記複数の処理装置のいずれかに制御メッセージが転送される第２のフローを特定し、
前記第２のフローに属する制御メッセージについての処理時間である第２の処理時間の長さを取得し、
前記第２の処理時間が前記第１の閾値より長く、前記第２の閾値以下の場合、前記第１のフローを前記対象処理装置に転送している転送装置での輻輳により処理が遅延したと判定する
処理を前記経路決定装置が行うことを特徴とする請求項５または６に記載の転送経路の決定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の装置を含むネットワーク中でのパケットの転送方法に関する。
【背景技術】
【０００２】
近年、ソフトウェアを用いた仮想的なネットワークの構築に用いられる技術であるSoftware Defined Networking（ＳＤＮ）が注目されてきている。ＳＤＮでは、コントローラと呼ばれる装置がネットワーク中のデータを転送する装置（ノード）を制御する。例えば、ネットワーク中のスイッチなどのノードは、コントローラから取得した転送ルールを使用して、受信したパケットの転送処理を行う。転送ルールを使用しても処理できない未定義パケットを受信した場合、ノードは受信したパケットの情報をコントローラに通知することにより、コントローラからそのパケットの処理方法を特定するための情報を取得する。このように、コントローラがネットワーク中での転送処理を一括して制御するため、コントローラでの処理がボトルネックとなることがある。そこで、ネットワーク中に複数のコントローラを含めつつ、複数のコントローラを論理的には１つのコントローラとして処理するコントローラシステムが提案されている（例えば、非特許文献１、２など）。
【０００３】
図１にコントローラシステムの例を示す。広域ネットワーク３に含まれている個々のノード６（６ａ〜６ｉ）は、コントローラシステム１から取得した転送ルールに従って、パケットの転送処理を行う。広域ネットワーク３は、適宜、Local Area Network（ＬＡＮ）４ａ、４ｂなどの任意の数のＬＡＮに接続される。コントローラシステム１には、コントローラクラスタ８、メッセージングシステム５、アプリケーションクラスタ１５が含まれている。制御装置（２ａ〜２ｄ）は、ノード６から受信した未定義パケットをコントローラシステム１中で用いる制御メッセージに含め、メッセージングシステム５中のいずれかの装置にメッセージ転送する。図１の例では、メッセージングシステム５は転送装置１０（１０ａ〜１０ｃ）を含む。個々の転送装置１０は、制御装置２から受信したメッセージをアプリケーションクラスタ１５中の処理装置２０（２０ａ〜２０ｄ）に転送する。処理装置２０は、制御メッセージを処理し、処理結果を転送装置１０および制御装置２に送信し、制御装置は処理内容に応じて、ノード６を制御する。なお、図１では、図を見やすくするために、コントローラクラスタ２をメッセージングシステム５に接続しているが、各制御装置（２ａ〜２ｄ）はメッセージングシステム５中の任意の転送装置１０にアクセスできるものとする。同様に、各転送装置１０は、アプリケーションクラスタ１５中の任意の処理装置２０にアクセスできるものとする。例えば、ノード６ａが未定義パケットを制御装置２ａに送信したとする。すると、制御装置２ａは受信した未定義パケットを内部処理用の制御メッセージに含め、転送装置１０ａを介して、制御メッセージの処理を処理装置２０ｂに要求し、処理装置２０ｂは、転送装置１０ｂを介して処理結果を制御装置２ａに送信する。制御装置２ａは、取得した処理結果に基づきノード６ａを制御し、ノード６ａは制御内容に基づきパケットの転送処理を行う。
【０００４】
なお、図１に示すコントローラシステム１は一例であり、コントローラシステム１中に含まれる制御装置、転送装置、処理装置の数は、実装に応じて任意に変更され得る。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】清水翔、山田亜紀子、宗宮利夫、“SDNにおける分散型ネットワークコントローラの検討および性能評価ツールの開発”、電子情報通信学会  総合大会、社団法人電子情報通信学会、BS-2-4、p.S130-131、2013年3月
【非特許文献２】清水翔、山田亜紀子、宗宮利夫、“分散SDNコントローラにおけるメッセージ処理拡張手法に関する検討”、信学技報、社団法人電子情報通信学会、vol. 113、no. 472、NS2013-212、pp. 207-212、2014年4月
【発明の概要】
【発明が解決しようとする課題】
【０００６】
分散ネットワークコントローラを用いるコントローラシステムでは、分散ネットワークコントローラに含まれている処理装置や転送装置で輻輳が起こった場合に、メッセージの転送経路やメッセージを処理する処理装置を変更することになる。しかし、輻輳が発生している箇所を特定する方法がないため、効率的に輻輳を解消できない。
【０００７】
本発明は、分散ネットワークコントローラを用いるシステムでの輻輳の解消を効率化することを目的とする。
【課題を解決するための手段】
【０００８】
ある実施形態にかかる経路決定装置は、複数の転送装置、複数の処理装置、制御装置を含む通信システム中の装置であり、取得部、判定部、送信部を備える。取得部は、制御装置が、前記複数の処理装置から選択された対象処理装置に処理対象のパケットを含む制御メッセージの処理を要求する場合に、前記制御メッセージの処理にかかる時間である処理時間を取得する。判定部は、前記処理時間が第１の閾値を越えると、前記処理時間が前記第１の閾値よりも大きい第２の閾値を超えているかにより、前記制御装置と前記対象処理装置の間の通信に使用される転送装置と、前記対象処理装置のいずれで輻輳が発生したかを判定する。送信部は、前記輻輳が発生した装置で前記制御メッセージが処理されないように決定した転送経路の設定を要求する要求メッセージを送信する。
【発明の効果】
【０００９】
分散ネットワークコントローラを用いるシステムでの輻輳の解消が効率化される。
【図面の簡単な説明】
【００１０】
【図１】コントローラシステムの例を示す図である。
【図２】輻輳の発生箇所を決定するための処理の例を説明する図である。
【図３】ネットワークの例を示す図である。
【図４】制御装置の構成の例を示す図である。
【図５】調整装置の構成の例を示す図である。
【図６】ハードウェア構成の例を示す図である。
【図７】制御メッセージの処理の具体例を説明する図である。
【図８】転送経路テーブルの例を示す図である。
【図９】各装置が保持する転送先の情報の例を示す図である。
【図１０】処理時間の分布の例を説明する図である。
【図１１】閾値情報テーブルの例を示す図である。
【図１２】判定部が保持する情報の例を示すテーブルである。
【図１３】処理装置で輻輳が発生したときの経路情報の変更例を示す図である。
【図１４】処理装置で輻輳が発生したときの転送経路の変更例を示す図である。
【図１５】判定部が保持する情報の例を示すテーブルである。
【図１６】転送装置で輻輳が発生したときの経路情報の変更例を示す図である。
【図１７】転送装置で輻輳が発生したときの転送経路の変更例を示す図である。
【図１８】調整装置で行われる処理の例を説明するフローチャートである。
【図１９】障害判定処理の例を説明するフローチャートである。
【図２０】処理装置での輻輳の発生を判定する方法の例を説明するフローチャートである。
【図２１】転送装置での輻輳の発生を判定する方法の例を説明するフローチャートである。
【図２２】輻輳の解除処理の例を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
図２は、輻輳の発生箇所を決定するための処理の例を説明する図である。以下の説明では、制御装置３０がノード６から未定義パケット等を含む問い合わせパケットを受信し、内部処理用の制御メッセージに未定義パケット等を含めるものとする。さらに、コントローラシステム１には、制御メッセージなどの転送経路を決定するための調整装置５０（図３などを参照）が含まれているものとする。制御装置３０は、ノード６から受信した制御メッセージの処理を処理装置２０に要求してから、制御メッセージの処理結果を取得するまでの時間を計測する。ここで、制御装置３０が制御メッセージの処理を要求してから処理結果を取得するまでの時間の長さは、コントローラシステム１中での制御メッセージの処理にかかる時間であるといえる。そこで、以下の記載では、制御装置３０が制御メッセージの処理を要求してから処理結果を取得するまでの時間の長さのことを「処理時間」と記載することがある。制御装置３０は、処理時間を調整装置５０に通知する。
【００１２】
図２のケースＣ１〜Ｃ３では、図を見やすくするために、あるノード６から問い合わせパケットを受信した制御装置３０ａが、問い合わせパケットを含んだ制御メッセージの処理を処理装置２０ａに要求する場合に、制御メッセージが転送される経路と制御メッセージの処理結果が転送される経路を示している。ケースＣ１に示すように、制御装置３０ａは、転送装置１０ａを介して、処理装置２０ａに制御メッセージの処理を要求する。また、処理装置２０ａは、制御メッセージの処理結果を、転送装置１０ｂを介して制御装置３０ａに送信する。転送装置１０ａ、１０ｂ、処理装置２０ａのいずれでも輻輳が発生していない場合、制御装置３０ａは、処理装置２０ａに制御メッセージの処理を要求してから範囲Ｒ１に示す時間の範囲内で処理結果を取得できる。
【００１３】
一方、ケースＣ２に示すように、転送装置１０ａで輻輳が発生すると、ケースＣ１に比べて転送装置１０ａでの転送処理に時間がかかるため、処理時間が長くなる。ケースＣ２では、転送装置１０ａで輻輳が発生した場合の例を示しているが、転送装置１０ｂで輻輳が発生した場合も、同様に、ケースＣ１の場合よりも、処理時間が長くなる。転送装置１０ａまたは転送装置１０ｂで輻輳が発生しているが処理装置２０ａでは輻輳が発生していない場合に、制御装置３０ａが制御メッセージの処理を処理装置２０ａに要求してから処理結果を取得するまでの時間の分布の例を範囲Ｒ２に示す。
【００１４】
次に、ケースＣ３に示すように、処理装置２０ａで輻輳が発生した場合について述べる。処理装置２０ａで輻輳が発生した場合に起こる遅延は、転送装置１０ａや転送装置１０ｂなどの転送装置で輻輳が発生した場合の遅延に比べて長い。このため、処理装置２０ａで輻輳が発生すると、処理時間は、ケースＣ１やケースＣ２の場合よりも長くなる。図２の例では、処理装置２０ａで輻輳が発生した場合、制御装置３０ａが処理装置２０ａに制御メッセージの処理を要求してから処理結果を受け取るまでの時間の分布は、範囲Ｒ３に示すとおりであるとする。
【００１５】
調整装置５０は、閾値Ｄ＿ｍｑと閾値Ｄ＿ａｐｐを保持している。ここで、閾値Ｄ＿ｍｑは、転送装置１０ａ、転送装置１０ｂ、処理装置２０ａのいずれでも輻輳が発生していない場合の処理時間の最大値以上に設定される。閾値Ｄ＿ａｐｐは、転送装置１０ａか転送装置１０ｂで輻輳が発生しているときの処理時間の最大値以上の値であり、かつ、処理装置２０ａで輻輳が発生しているときの処理時間の最小値未満の値である。調整装置５０は、コントローラシステム１中の装置の接続トポロジー情報を保持しており、さらに、各制御装置３０が受信した制御メッセージの転送経路や処理結果の転送経路も保持している。
【００１６】
調整装置５０は、制御装置３０ａから通知された処理時間を用いて、制御装置３０ａが受信した制御メッセージが転送される装置のうちのいずれで輻輳が発生しているかを判定する。すなわち、処理時間が閾値Ｄ＿ｍｑを超えると、調整装置５０は、制御メッセージが転送される装置のいずれかに輻輳が発生したと判定する。さらに、調整装置５０は、処理時間が閾値Ｄ＿ａｐｐを超えているかにより、転送装置１０（１０ａ、１０ｂ）と処理装置２０のいずれで輻輳が発生したかを判定する。処理時間が閾値Ｄ＿ａｐｐ以下の場合、調整装置５０は、転送装置１０ａか転送装置１０ｂのいずれかで輻輳が発生している可能性が高いと判定する。一方、処理時間が閾値Ｄ＿ａｐｐを超えている場合、調整装置５０は、処理装置２０で輻輳が発生している可能性が高いと判定する。調整装置５０は、輻輳が発生している可能性が高いと判定された装置を含まないように、制御装置３０ａが受信した制御メッセージの転送経路と、処理結果の転送経路を決定する。例えば、ケースＣ２に示すように、転送装置１０ａで輻輳が発生している可能性が高いと判定すると、調整装置５０は、制御装置３０ａが転送装置１０ｃを介して処理装置２０ａと通信するための転送経路を計算する。一方、ケースＣ３に示すように、処理装置２０ａで輻輳が発生している可能性が高いと判定すると、調整装置５０は、制御装置３０ａが処理装置２０ａの代わりに処理装置２０ｂに制御メッセージの処理を要求するように、転送経路や処理結果の転送経路を求める。調整装置５０は、求めた経路を用いて通信が行われるように、コントローラシステム１中の装置に対して、適宜、設定処理を行う。
【００１７】
このように、調整装置５０が、制御メッセージについての処理時間を用いて、輻輳の発生箇所を予測し、輻輳が発生した箇所を用いない転送経路を設定すると、効率的に輻輳が解消され、コントローラシステム１を安定的に運用することができる。
【００１８】
なお、図２を参照しながら実施形態では、制御装置３０で計測された処理時間が１回遅延した時点で輻輳の発生を特定する場合の例を説明したが、検出精度を高めるために複数回の遅延が検出されたときに、輻輳が発生していると判定するように変形されても良い。また、調整装置５０は、処理時間が閾値Ｄ＿ｍｑ以上のときに輻輳が発生したと判定しても良い。同様に、調整装置５０は、処理時間が閾値Ｄ＿ａｐｐ以上のときに処理装置２０で輻輳が発生したと判定しても良い。
【００１９】
＜装置構成＞
図３は、ネットワークの例を示す図である。図３のネットワーク中で、ノード６（６ａ〜６ｋ）以外の装置はコントローラシステム１に含まれている。図３の例では、コントローラシステム１は、調整システム（Coordination System）２５、アプリケーションクラスタ１５（１５ａ、１５ｂ）、メッセージングシステム５、コントローラクラスタ７を含む。ここで、アプリケーションクラスタ１５ａとアプリケーションクラスタ１５ｂは異なる種類のアプリケーションを用いた処理を行うものとする。例えば、アプリケーションクラスタ１５ａでは、ネットワークの状況のモニタリングに関する処理が行われ、アプリケーションクラスタ１５ｂでは経路計算が行われるものとする。さらに、メッセージングシステム５、コントローラクラスタ７、調整システム２５、アプリケーション処理クラスタ１５中の各装置は、適宜、通信できるように接続されているものとする。
【００２０】
図３の例では、コントローラクラスタ７は、制御装置３０（３０ａ〜３０ｆ）を含んでいる。メッセージングシステム５は、転送装置１０（１０ａ〜１０ｃ）を備え、調整システム２５は調整装置５０（５０ａ〜５０ｃ）を備える。さらに、アプリケーションクラスタ１５ａは処理装置２０ａと処理装置２０ｂを有し、アプリケーションクラスタ１５ｂは、処理装置２０ｃ〜２０ｆを含むものとする。制御装置３０、転送装置１０、調整装置５０、処理装置２０は、物理マシンと仮想マシンのいずれによって実現されても良いものとする。また、コントローラシステム１を形成するために使用される仮想マシンと物理マシンのいずれも、１つ以上の制御装置３０や処理装置２０などを実現できるものとする。図３の例では、１つの物理マシンが制御装置３０ａを実現しているのに対し、制御装置３０ｃと制御装置３０ｄは制御装置３０ａを実現している物理マシンとは異なる物理マシンで実現されている。一方、制御装置３０ｂは１つの仮想マシンで実現され、制御装置３０ｅと制御装置３０ｆとが１つの仮想マシンで実現されている。また、調整装置５０ａ〜５０ｃ、転送装置１０ａ〜１０ｃは、いずれも、１つの物理マシンで実現されている。なお、図３は、一例であり、コントローラシステム１中に含まれる転送装置１０、処理装置２０、制御装置３０、調整装置５０の数は任意に変更されうる。また、１つの物理マシンは、実装に応じて、転送装置１０、処理装置２０、制御装置３０、調整装置５０の１つ以上を実現することもできるものとする。
【００２１】
ノード６ａ〜６ｋは、いずれも、制御装置３０ａ〜３０ｆのうちのいずれか１つ以上と通信するものとする。また、ノード６ａ〜６ｋは、いずれも、通信中の制御装置３０のうちの１つの制御装置３０をマスターの制御装置３０とし、通信中の他の制御装置３０をスレーブに設定する。各ノード６は、マスターに設定されている制御装置３０に対して、問い合わせパケットを送信し、マスターの制御装置３０からＯｐｅｎｆｌｏｗプロトコルを用いて制御される。図３では、図を見やすくするために、各ノード６と、そのスレーブの制御装置３０との間の経路は図示していない。
【００２２】
図４は、制御装置３０の構成の例を示す図である。制御装置３０は、送信部３１、受信部３２、制御部３５、記憶部４０、ノード制御部３３を備える。制御部３５は、計測部３６、通知処理部３７、転送処理部３８を有する。記憶部４０は要求先テーブル４１を記憶しており、バッファ４２としても動作する。
【００２３】
送信部３１は、コントローラシステム１中の他の装置に対して、制御部３５から入力されたメッセージを送信する。受信部３２は、コントローラシステム１中の他の装置からメッセージを受信する。受信部３２は、受信メッセージを、適宜、バッファ４２に格納する。転送処理部３８は、ノード６から受信した問い合わせパケットを、パケットの種類に応じて決められた転送先の処理装置２０に送信するための処理を行う。このとき、転送処理部３８は、要求先テーブル４１を参照する。要求先テーブル４１の例と転送処理部３８の処理の具体例については後述する。転送処理部３８は、制御メッセージを処理装置２０に転送するタイミングを計測部３６に通知する。また、計測部３６は、制御メッセージの処理結果を制御装置３０が受信するタイミングをモニタすることにより、各制御メッセージについての処理時間を計測する。通知処理部３７は、定期的に、処理時間を通知するための通知メッセージを生成し、送信部３１を介して、調整装置５０に通知する。なお、通知処理部３７は、制御装置３０が処理時間を通知する調整装置５０の識別子を保持しているものとする。ノード制御部３３は、ノード６からの問い合わせパケットの受信、および処理装置２０から送信された情報に基づき、各ノードの制御を、Ｏｐｅｎｆｌｏｗプロトコル等を用いて行う。
【００２４】
図５は、調整装置５０の構成の例を示す。調整装置５０は、送信部５１、受信部５２、制御部６０、記憶部７０を備える。制御部６０は、取得部６１、判定部６２、経路計算部６３、生成部６４を有する。さらに、記憶部７０は、転送経路テーブル７１、トポロジー情報７２、閾値情報テーブル７３を有する。
【００２５】
送信部５１は、コントローラシステム１中の他の装置に制御メッセージを送信する。受信部５２は、コントローラシステム１中の他の装置から制御メッセージを受信する。例えば、受信部５２は制御装置３０から制御メッセージを受信すると、制御メッセージを取得部６１に出力する。
【００２６】
取得部６１は、制御メッセージを用いて、各制御装置３０において計測された処理時間を取得する。判定部６２は、処理時間を閾値Ｄ＿ｍｑと比較することにより、制御メッセージの処理が正常に行われているかを判定する。また、処理時間が閾値Ｄ＿ｍｑを超えると、判定部６２は、処理時間を閾値Ｄ＿ａｐｐと比較した結果を用いて、輻輳が発生している可能性のある箇所を判定する。なお、これらの閾値は、閾値情報テーブル７３に記録されている。閾値情報テーブル７３の例については後述する。
【００２７】
経路計算部６３は、判定部６２で行われた判定結果を用いて、輻輳の発生していない経路を用いて制御メッセージの転送や処理結果の転送を行うための経路計算を行う。このとき、経路計算部６３は、適宜、転送経路テーブル７１やトポロジー情報７２を用いることができる。転送経路テーブル７１は、現在使用されている転送経路を表わす情報を格納し、トポロジー情報７２は制御ネットワークなどのトポロジーを表わす情報などを格納している。転送経路テーブル７１の例は後述する。生成部６４は、経路計算部６３で得られた経路計算の結果を制御装置３０などに通知するための制御メッセージを生成する。
【００２８】
図６は、制御装置３０および調整装置５０のハードウェア構成の例を示す。なお、転送装置１０や処理装置２０のハードウェア構成も、図６に示すとおりである。制御装置３０および調整装置５０のいずれも、プロセッサ１０１、メモリ１０２、バス１０３、ネットワーク接続装置１０４を備える。バス１０３は、プロセッサ１０１、メモリ１０２、ネットワーク接続装置１０４を、相互にデータの送受信が可能になるように接続する。ネットワーク接続装置１０４は、ネットワーク１０５との通信を行う。
【００２９】
制御装置３０では、プロセッサ１０１は、制御部３５として動作し、メモリ１０２は、記憶部４０として動作する。ネットワーク接続装置１０４は、送信部３１と受信部３２を実現する。ノード制御部３３は、プロセッサ１０１とネットワーク接続装置１０４により実現される。調整装置５０では、プロセッサ１０１は、制御部６０を実現する。メモリ１０２は、記憶部７０として動作する。ネットワーク接続装置１０４は、送信部５１と受信部５２を実現する。
【００３０】
＜実施形態＞
図７は、制御メッセージの処理の具体例を説明する図である。図７は、図３に示すネットワークのうち、フローＡ〜Ｄに関する制御メッセージを処理する装置を詳しく表わしたものである。以下の説明では、フローは、ノード装置間を流れるデータフローではなく、コントローラシステム１の制御を行うための制御メッセージのフローであり、ノードと制御装置間の問い合わせパケットも含んでいる。以下の例では、フローＡ、Ｂは、ノード６ａから制御装置３０ａに未定義パケット等の処理を問合わせるための制御メッセージのフローであるものとする。一方、フローＣ、Ｄは、ノード６ｂから制御装置３０ａに未定義パケット等の処理を問合わせるための制御メッセージのフローであるものとする。なお、以下の説明では、フローＡ、Ｄは音声パケットの処理内容を問合わせるための制御メッセージのフローであり、フローＢ、Ｃは映像パケットの処理内容を問合わせるための制御メッセージのフローである場合を例とする。なお、未定義パケット等の処理内容の問合せのための制御メッセージとして、ＯｐｅｎｆｌｏｗのＰａｃｋｅｔ−ｉｎメッセージを含む任意のメッセージが使用され得る。
【００３１】
図７の例では、制御装置３０ａ、転送装置１０ａ、転送装置１０ｂ、処理装置２０ｄ、処理装置２０ｅにより、フローＡ〜Ｄが処理されるものとする。なお、以下の説明では、調整装置５０ｂが、制御装置３０ａから処理が要求される制御メッセージの転送経路を調整する場合を例として説明する。図７中の点線は、調整装置５０ｂと各装置の間での通信に用いられる制御ネットワークの一部を示す。また、以下の説明では、転送が行われる方向を明確にするために、処理装置２０に制御メッセージを転送する方向を「上り方向」、制御メッセージに対する処理結果を制御装置３０に転送する方向を「下り方向」と記載することがある。各転送装置１０において、上り方向の転送処理に使用されるキューは、転送先の処理装置２０および処理に使用されるアプリケーションの組み合わせと一意に対応付けられている。同様に、下り方向の転送処理に使用されるキューは、処理結果の転送先の制御装置３０と一意に対応付けられているものとする。
【００３２】
図８は、転送経路テーブル７１の例を示す図である。図８は、調整装置５０ｂが、図７に示す転送経路をフローＡ〜Ｄに対して設定する場合に、調整装置５０ｂが保持している転送経路テーブル７１の例である。なお、転送経路テーブル７１は経路計算部６３により生成される。
【００３３】
図７、図８の例では、調整装置５０ｂは、フローＡとフローＤが転送装置１０ａのメッセージキューＱ１１を介して処理装置２０ｄに転送されるように転送経路を設定している。また、調整装置５０ｂは、フローＢとフローＣが転送装置１０ａのメッセージキューＱ１２を介して処理装置２０ｅに転送されるように転送経路を設定している。さらに、処理装置２０ｄでのフローＡについての処理結果と、処理装置２０ｅでのフローＢについての処理結果は、転送装置１０ｂのメッセージキューＱ２１を介して制御装置３０ａに転送される。また、処理装置２０ｄでのフローＤについての処理結果と、処理装置２０ｅでのフローＣについての処理結果は、転送装置１０ｂのメッセージキューＱ２２を介して制御装置３０ａに転送される。
【００３４】
図９は、各装置が保持する転送先の情報の例を示す図である。図７に示すようにフローが処理される場合、調整装置５０ｂの生成部６４は、予め、制御装置３０ａに対して、要求先テーブル４１−１の内容の設定を行うための要求メッセージを送信している。同様に、転送装置１０ａにはテーブルＴ１、転送装置１０ｂにはテーブルＴ２、処理装置２０ｄにはテーブルＴ３、処理装置２０ｅにはテーブルＴ４の内容を示す要求メッセージが、予め、調整装置５０ｂから送信されているものとする。
【００３５】
以下、各装置が保持する転送先の情報が図９に示す場合に行われる処理の例を、各フローの処理と処理時間の計測、調整装置５０が保持する情報、処理装置２０で発生した輻輳の検出と回避、転送装置１０で発生した輻輳の検出と回避に分けて説明する。
【００３６】
（１）各フローの処理と処理時間の計測
ノード６ａ、６ｂは、音声パケットや映像パケットに対する処理内容を問合わせるパケットを、制御装置３０ａに送信する。このため、図７に示すように、ノード６ａからフローＡとフローＢ、ノード６ｂからフローＣとフローＤが制御装置３０ａに送信される。以下、フローＡに含まれる制御メッセージがノード６ａから制御装置３０ａに送信された場合を例として各フローの処理の例を説明する。
【００３７】
図７のＡＲ１に示すように、制御装置３０ａはノード６ａから未定義パケット等の問い合わせパケットを受信する。ノード制御部３３は、受信した問い合わせパケットを内部制御用の制御メッセージに含めて、バッファ４２ａに格納する。転送処理部３８は、バッファ４２ａから制御メッセージを読み出し、読み出した制御メッセージがいずれのフローに属するかを判定する。例えば、転送処理部３８は、制御メッセージがＰａｃｋｅｔ−ｉｎメッセージである場合、処理内容の問い合わせの種類を判定する。Ｐａｃｋｅｔ−ｉｎメッセージには、処理内容の問い合わせ対象となっているパケットの少なくともヘッダなどの一部が含まれているので、転送処理部３８はパケットの問い合わせの種類を判定できる。従って、転送処理部３８は、制御メッセージに含まれる問い合わせパケットと問合わせの種類の組み合わせから、どの処理装置に送信すれば良いかを判定し、それに対応するフローＡ〜Ｄのいずれを使用したら良いかを判定する。次に、転送処理部３８は、要求先テーブル４１を参照することにより、転送先の転送装置１０を特定する。
【００３８】
図９の要求先テーブル４１−１に示すように、要求先テーブル４１には、フローの識別子に対応付けて、アプリケーション種別、転送先の転送装置１０の識別情報、上り方向のメッセージキューの識別情報が記録されている。アプリケーション種別は、対応付けられたフローに含まれる制御メッセージを処理するアプリケーションの種類を表わす情報である。以下の例では、制御装置３０ａは図９の要求先テーブル４１−１を保持しており、フローＡまたはフローＤに含まれる制御メッセージは、アプリケーションＡＰ１（処理装置２０ｄ）で処理されるものとする。同様に、フローＢまたはフローＣに含まれる制御メッセージは、アプリケーションＡＰ２（処理装置２０ｅ）で処理される。さらに、要求先テーブル４１−１により、フローＡまたはフローＤに含まれている制御メッセージの転送先は、転送装置１０ａのキューＱ１１に指定されている。同様に、フローＢまたはフローＣからに含まれている制御メッセージの転送先は、転送装置１０ａのキューＱ１２に指定されている。
【００３９】
転送処理部３８は、フローの種類を特定すると、要求先テーブル４１−１を参照して転送先を特定する。ここで、転送処理部３８は、バッファ４２ａから読み出した制御メッセージがフローＡに含まれていると判定したとする。すると、転送処理部３８は、要求先テーブル４１−１を用いて、フローＡに含まれる制御メッセージの転送先を、転送装置１０ａのキューＱ１１に決定し、転送先が転送装置１０ａであることを示す情報と共に、読み出した制御メッセージを、送信部３１に出力する。このとき、転送処理部３８は、入力された制御メッセージを一意に特定するための識別情報（メッセージ識別情報）を付しても良い。さらに、転送処理部３８は、計測部３６に制御メッセージとその制御メッセージが含まれているフローの識別情報を出力することにより、制御メッセージの送信を計測部３６に通知する。
【００４０】
計測部３６は、制御メッセージが入力されると、メッセージ識別情報を制御メッセージから抽出する。ここで、メッセージ識別情報は、制御メッセージを一意に特定可能な任意の情報である。例えば、計測部３６は、制御メッセージのヘッダに含まれているシーケンス番号やメッセージＩＤなどをメッセージ識別情報として使用することができる。計測部３６は、取得したメッセージ識別情報と、制御メッセージを含むフローの識別情報に対応付けて、その制御メッセージが転送装置１０に転送されることが通知された時刻からの経過時間の計測を開始する。
【００４１】
図７のＡＲ２に示すように、送信部３１は、入力された制御メッセージを、指定された転送先である転送装置１０ａに送信する。転送装置１０ａは、制御装置３０ａから受信した制御メッセージに含まれている格納先の情報を取得する。ここでは、転送装置１０ａが受信した制御メッセージには、格納先がキューＱ１１であることを示す情報が含まれている。そこで、転送装置１０ａは、受信した制御メッセージをキューＱ１１に格納する。
【００４２】
図９のテーブルＴ１は、転送装置１０ａが上り方向の制御メッセージの保持に使用するキューごとに、転送元の制御装置、アプリケーション種別、転送先の処理装置を対応付けている。転送元の制御装置の欄には、そのキューを格納先に指定している制御メッセージの転送元となっている制御装置３０の情報が格納される。アプリケーション種別は、そのキューに格納される制御メッセージの処理に使用されるアプリケーションの種類を示す。転送先の処理装置は、そのキューに格納された制御メッセージの転送先である。例えば、転送装置１０ａ中のキューＱ１１は、処理装置２０ｄでのアプリケーションＡＰ１を用いた処理に対応付けられており、転送元は制御装置３０ａに設定されている。すなわち、転送装置１０ａは、キューＱ１１を、アプリケーションＡＰ１で処理される制御メッセージを制御装置３０ａから処理装置２０ｄに中継するために使用している。同様に、転送装置１０ａは、キューＱ１２を、アプリケーションＡＰ２で処理される制御メッセージを制御装置３０ａから処理装置２０ｅに中継するために使用している。転送装置１０ａは、テーブルＴ１の情報を用いて、キューＱ１１に格納されている制御メッセージを処理装置２０ｄに転送する。
【００４３】
図７のＡＲ３に示すように処理装置２０ｄにフローＡの制御メッセージが送信されてくるため、処理装置２０ｄは、制御メッセージを受信する。ここで、処理装置２０ｄは、転送装置１０ａのキューＱ１１に格納されていた制御メッセージをアプリケーションＡＰ１で処理するように設定されているものとする。制御装置２０ｄが受信した制御メッセージには、制御メッセージがキューＱ１１に格納されていたことを示す情報が含まれているので、制御メッセージはアプリケーションＡＰ１で処理される。なお、処理装置２０ｄは、制御メッセージを処理する際に、処理対象の制御メッセージがいずれのフローに含まれているかも判定するものとする。処理装置２０ｄにおいても、制御メッセージが属するフローの判定方法は、制御装置３０ａでの判定方法と同様である。
【００４４】
図９のテーブルＴ３に、処理装置２０ｄが保持する転送情報の例を示す。テーブルＴ３には、フローごとに、制御メッセージの処理結果の転送経路が記録されている。各エントリは、通知先の制御装置、処理結果の転送先となる転送装置、下り方向のメッセージキューの情報を含む。なお、下り方向のメッセージキューは、処理結果の通知先となっている制御装置３０に処理結果を通知するために使用されるメッセージキューの識別子である。例えば、フローＤに含まれる制御メッセージを処理した場合、処理装置２０ｄは、制御装置３０ａに結果を通知するために、転送装置１０ｂのキューＱ２２を転送先に指定する。一方、フローＡに含まれる制御メッセージを処理した場合、処理装置２０ｄは、制御装置３０ａに結果を通知するために、転送装置１０ｂのキューＱ２１を転送先に指定する。ここでは、処理装置２０ｄは、フローＡに含まれている制御メッセージを処理したので、処理装置２０ｄは、処理結果を示す制御メッセージに、転送先での格納に使用されるキューがＱ２１であることを示す情報を付して、転送装置１０ｂに送信する。なお、処理結果を示す制御メッセージには、処理対象となった制御メッセージを識別する制御メッセージ識別情報や、処理対象となった制御メッセージが属するフローの識別情報が含まれているものとする。
【００４５】
図７のＡＲ４に示すように、転送装置１０ｂは処理装置２０ｄから処理結果を含む制御メッセージを受信する。転送装置１０ｂは、受信した制御メッセージに含まれている格納先の情報を取得する。ここでは、転送装置１０ｂが受信した制御メッセージには、格納先がキューＱ２１であることを示す情報が含まれているので、転送装置１０ｂは、受信した制御メッセージをキューＱ２１に格納する。
【００４６】
図９のテーブルＴ２は、転送装置１０ｂが下り方向の制御メッセージの保持に使用するキューごとに、転送元の処理装置２０と転送先の制御装置３０を対応付けている。転送元の処理装置２０の欄には、そのキューを格納先に指定している制御メッセージの転送元となっている処理装置２０の情報が格納される。転送先の制御装置３０は、そのキューに格納された制御メッセージの転送先である。例えば、転送装置１０ｂ中のキューＱ２１は、処理装置２０ｄか処理装置２０ｅから入力された制御装置３０ａ宛の制御メッセージを格納する。同様に、転送装置１０ｂは、キューＱ２２を、処理装置２０ｄか処理装置２０ｅから入力された制御装置３０ａ宛の制御メッセージの格納に使用する。従って、テーブルＴ２の例では、転送装置１０ｂは、キューＱ２１とキューＱ２２のいずれに格納した制御メッセージも制御装置３０ａに転送する。
【００４７】
図７のＡＲ５に示すように、制御装置３０ａは転送装置１０ｂから処理結果を含む制御メッセージを受信する。制御装置３０ａの受信部３２は、受信した制御メッセージを転送処理部３８に出力する。転送処理部３８は、処理結果を含む制御メッセージから、処理対象となった制御メッセージのフローを特定する情報を抽出し、抽出した情報に基づいて制御装置は、送信元のノード６の制御を行う。例えば、制御装置３０ａはフローＡの問い合わせパケットをノード６ａから取得しているので、転送処理部３８は、フローＡについての処理結果の制御メッセージを受信すると、制御装置は処理結果に応じてノード６ａをＯｐｅｎｆｌｏｗプロトコルを用いて制御する（図７のＡＲ６）。
【００４８】
転送処理部３８は、処理結果を取得すると共に、処理結果を含む制御メッセージの受信時刻を計測部３６に通知する。このとき、転送処理部３８は、受信制御メッセージに含まれている制御メッセージ識別情報に対応付けて処理結果の取得を計測部３６に通知する。計測部３６は、転送処理部３８から入力された制御メッセージ識別情報に対応付けて記憶している送信時刻と、その制御メッセージ識別情報に対応付けられた受信時刻の差を求め、得られた値を、制御メッセージ識別情報で識別される制御メッセージの処理時間とする。計測部３６は、得られた処理時間と処理時間を求めた制御メッセージが含まれているフローの種類の組み合わせを、通知処理部３７に出力する。例えば、フローＡの制御メッセージＰａ１に対する処理時間がＴ１かかったとすると、計測部３６は、フローＡの制御メッセージの処理時間がＴ１であることを通知処理部３７に通知する。通知処理部３７は、予め、通信先の調整装置５０ｂの識別子を保持しており、フローごとの処理時間を調整装置５０ｂに送信する。
【００４９】
以上の説明では、フローＡの制御メッセージを例として、制御メッセージの処理、処理時間の取得、処理時間の調整装置５０ｂへの通知を説明したが、他のフローについても同様に処理が行われる。処理装置２０ｅで制御メッセージが処理される場合も同様である。
【００５０】
テーブルＴ４（図９）は、処理装置２０ｅに設定されている転送情報を示す。テーフルＴ４に含まれている情報要素もテーブルＴ３の情報要素と同様である。このため、処理装置２０ｅは、フローＢに含まれる制御メッセージを処理した場合、制御装置３０ａに結果を通知するために、転送装置１０ｂのキューＱ２１を転送先に指定する。さらに、処理装置２０ｅは、フローＣに含まれる制御メッセージを処理した場合、制御装置３０ａに結果を通知するために、転送装置１０ｂのキューＱ２２を転送先に指定する。
【００５１】
なお、図９に示すテーブルの例は一例であり、実装に応じて変更されうる。例えば、１台の転送装置１０が上り方向の制御メッセージの転送処理と下り方向の制御メッセージの転送処理の両方に使用される場合、転送装置１０は、上り方向の転送に用いられる情報と下り方向の転送に用いられる情報を保持している。なお、この場合も、上り方向の転送に使用される情報はテーブルＴ１と同様の情報とすることができ、下り方向の転送に使用される情報はテーブルＴ２と同様の情報とすることができる。
【００５２】
（２）調整装置５０が保持する情報
輻輳の検出と輻輳の回避を行うための処理の例を説明する前に、調整装置５０が輻輳の検出に使用する情報について説明する。
【００５３】
図１０は、処理時間の分布の例を説明する図である。図１０では、経験的に得られた処理時間ごとの報告頻度を、コントローラシステム１中で輻輳が発生していない場合、転送装置１０で輻輳が発生している場合、処理装置２０で輻輳が発生している場合に分けて表わしている。以下の説明では、ｔ１＜ｔ２＜ｔ３の順に時間が長くなるものとする。図１０中のＡは、コントローラシステム１中に輻輳が発生していない場合に得られる処理時間の分布の例である。図１０のＢは、制御メッセージの処理を要求する制御装置３０と処理装置２０との間の通信を中継している転送装置１０のいずれか１つ以上で輻輳が発生した場合に得られる処理時間の分布の例である。図１０のＣは、制御メッセージの処理が要求された処理装置２０において輻輳が発生しているときに得られる処理時間の分布の例である。コントローラシステム１中に輻輳が発生していない場合の処理時間の最頻値は、Ａで示されているように、ｔ１である。一方、転送装置１０で輻輳が発生すると、Ｂに示すように、処理時間の最頻値はｔ２になり、輻輳が発生していない場合（Ａ）に比べて、処理時間は長くなる。しかし、転送装置１０での輻輳による遅延量は、処理装置２０での輻輳による遅延よりも短いことが多い。そのため、転送装置１０での輻輳が発生している場合の処理時間の最頻値ｔ１は、処理装置２０で輻輳が発生している場合（Ｃ）の処理時間の最頻値ｔ２よりも短くなっている。
【００５４】
図１０に示す処理時間の分布に基づいて、閾値Ｄ＿ｍｑ（メッセージキュー輻輳判定閾値）と、閾値Ｄ＿ａｐｐ（アプリケーション輻輳判定閾値）が決定される。ここで、閾値Ｄ＿ｍｑは、通信の中継に使用されている転送装置１０中のメッセージキューでの輻輳が発生しているかを判定するための閾値である。閾値Ｄ＿ａｐｐは、制御メッセージの処理が要求された処理装置２０での輻輳が発生しているかを判定するための閾値である。例えば、閾値Ｄ＿ｍｑは、輻輳が発生していない場合の処理時間の最頻値ｔ１より大きく、転送装置１０で輻輳が発生した場合の処理時間の最頻値ｔ２以下の値に設定される。また、閾値Ｄ＿ａｐｐは、転送装置１０で輻輳が発生した場合の処理時間の最頻値ｔ２より大きく、処理装置２０で輻輳が発生した場合の処理時間の最頻値ｔ３以下の値に設定される。
【００５５】
図１１は、閾値情報テーブル７３の例を示す。閾値情報テーブル７３では、各フローの識別子に対応付けて、そのフローでの輻輳の判定に使用する閾値と、輻輳状態であるという判定を解除するための閾値が記録されている。閾値情報テーブル７３は判定部６２での判定処理に使用される。判定部６２は、制御装置３０から通知された処理時間をフローごとに、閾値Ｄ＿ｍｑや閾値Ｄ＿ａｐｐと比較する。処理時間が閾値Ｄ＿ｍｑを越えると、判定部６２は、そのフローが経由する転送装置１０のメッセージキューで輻輳が発生している可能性があると判定する。一方、処理時間が閾値Ｄ＿ａｐｐを越えると、判定部６２は、そのフローを処理する処理装置２０で輻輳が発生している可能性があると判定する。
【００５６】
輻輳状態の判定を解除するためには、メッセージキュー輻輳解除閾値と、アプリケーション輻輳解除閾値が使用される。転送装置１０での輻輳が発生している可能性があると判定されたフローについて、処理時間がメッセージキュー輻輳解除閾値を下回ると、判定部６２は、輻輳が回避されたと判定する。また、処理装置２０での輻輳が発生している可能性があると判定されたフローについて、処理時間がアプリケーション輻輳解除閾値を下回ると、判定部６２は、輻輳が回避されたと判定する。
【００５７】
（３）処理装置２０で発生した輻輳の検出と回避
次に、調整装置５０ｂが処理装置２０で発生した輻輳の検出と輻輳の回避を行うための処理の例を説明する。なお、ここでは、図２を参照しながら説明したように、アプリケーション輻輳解除閾値を越えたフローが１つ以上ある場合に、輻輳の箇所の特定が行われる場合を例として説明する。
【００５８】
図７や図９を参照しながら説明した処理により、制御装置３０ａが調整装置５０ｂに各フロー中の制御メッセージについての処理時間を通知したとする。調整装置５０の受信部５２は、処理時間を通知する制御メッセージ（通知メッセージ）を取得部６１に出力する。取得部６１は、通知メッセージからフローの識別子と処理時間を取得し、判定部６２に通知する。
【００５９】
図１２は、判定部６２が保持する情報の例を示すテーブルである。判定部６２は、取得部６１から通知された処理時間をフローごとに閾値情報テーブル７３中の閾値と比較することにより、輻輳が発生しているかの判定を行っている。図１２に示すテーブルは、各フローの処理時間について、閾値情報テーブル７３（図１１）を用いて判定処理を行った結果の例である。図１２の例では、制御メッセージの処理時間は、フローＡでは２２０ｍ秒、フローＢとフローＣではいずれも２０ｎ秒、フローＤでは２３０ｍ秒である。ここで、図１１に示すように、フローＡとフローＤでは、いずれもアプリケーション輻輳判定閾値は２００ｍ秒であるため、判定部６２は、フローＡとフローＤについては、制御メッセージを処理する処理装置２０での輻輳が発生していると判定する。一方、フローＢとフローＣについては、処理時間が２０ｎ秒であるのに対し、アプリケーション輻輳判定閾値が３００ｍ秒、メッセージキュー輻輳判定閾値が１５０ｎ秒であるため、判定部６２は、輻輳が発生していないと判定する。
【００６０】
図１２に示すテーブルでは、判定結果は０〜２のいずれかの値で表わされている。以下の説明では、判定結果＝０は輻輳が発生していないと判定されたことを示し、判定結果＝１はメッセージキューで輻輳が発生していると判定されたことを示すものとする。さらに、処理装置２０でのアプリケーションを用いた処理での輻輳が発生している場合、判定結果＝２に設定される。
【００６１】
処理装置２０で輻輳が発生している可能性のあるフローが１つ以上ある場合、判定部６２は、判定結果（図１２）と転送経路テーブル７１−１（図８）を用いて、輻輳が発生した箇所を特定する。図１２に示す判定結果のテーブルには、フローＡにおいて、処理装置２０での輻輳が発生していることが記録されている。そこで、判定部６２は、転送経路テーブル７１−１から、フローＡの制御メッセージを処理する処理装置が処理装置２０ｄであることを特定し、処理装置２０ｄで輻輳が発生していると判定する。判定部６２は、フローＤについても同様の処理を行うことにより、フローＤに含まれる制御メッセージの処理時間からも、処理装置２０ｄで輻輳が発生していると判定する。判定部６２は、輻輳が発生した箇所を特定すると、特定した結果を経路計算部６３に出力する。
【００６２】
経路計算部６３は、輻輳が発生していると判定されたフローについて、判定部６２から輻輳の発生が通知されていない装置を用いた転送経路と処理装置を計算する。このとき、経路計算部６３は、判定部６２から輻輳の発生が通知された装置を、トポロジー情報７２に記録されている情報から除いて得られた情報を用いて、処理装置の決定と経路計算を行う。なお、処理装置２０の決定と経路計算は、任意の方法を用いて行われ得る。
【００６３】
図１３は、処理装置２０ｄで輻輳が発生したときの経路情報の変更例を示す。図１３は、経路計算部６３の処理により、フローＡとフローＤのいずれも、処理装置２０ｄの代わりに処理装置２０ｃで処理されるように決定された場合の経路情報の例を示している。また、経路計算部６３は、フローＡとフローＤのいずれについても、メッセージキューを変更しない経路を算出したものとする。すると、経路計算部６３は、得られた経路を用いて、転送経路テーブル７１−１（図８）を、図１３の転送経路テーブル７１−２に示すように更新する。
【００６４】
生成部６４は、転送経路テーブル７１が更新されると、転送経路を変更する装置に対して、転送経路の更新を要求するための要求メッセージを生成する。すなわち、フローの処理を開始させる処理装置２０に対して、生成部６４は、処理結果の送信先となる制御装置３０と、処理結果のメッセージの出力先の転送装置１０およびメッセージキューを特定する情報を通知する。また、制御メッセージの処理を開始する処理装置２０と制御装置３０の間を接続する転送装置１０に対しても、転送先または転送元の処理装置２０の情報の変更を要求する。
【００６５】
図１３に示す例では生成部６４は、処理装置２０ｃにフローＡとフローＤの処理の開始を要求すると共に、転送装置１０ａには、メッセージキューＱ１１に格納した制御メッセージを処理装置２０ｃに転送することを要求する。さらに、転送装置１０ｂには、処理装置２０ｃおよび処理装置２０ｅと制御装置３０ａとの間の通信の中継を行うことも要求する。そこで、生成部６４は、処理装置２０ｃ宛の要求メッセージのペイロード中に、転送経路の追加を要求することを示す情報と共に、テーブルＴ３（図９）に示す情報を含める。生成部６４は、転送装置１０ａ宛ての要求メッセージのペイロードには、転送先の変更の要求と共に、図１３のテーブルＴ５に示す情報を含める。さらに、生成部６４は、転送装置１０ｂ宛ての要求メッセージのペイロードには、転送先の変更の要求と共に、図１３のテーブルＴ６に示す情報を含める。生成部６４は、生成した要求メッセージを、送信部５１を介して、各要求メッセージの宛先に送信する。
【００６６】
処理装置２０ｃは、要求メッセージを受信すると、フローＡとフローＤの制御メッセージをアプリケーションＡＰ１によって処理することが要求されたと認識する。処理装置２０ｃは、要求メッセージに含まれている転送情報を記憶するので、フローＡとフローＤに関しては、処理装置２０ｃは図９のテーブルＴ３に示す情報を保持する。転送装置１０ａは、要求メッセージを受信すると、転送処理に使用する情報を、テーブルＴ１（図９）からテーブルＴ５（図１３）に更新する。このため、転送装置１０ａは、要求メッセージの受信以降、キューＱ１１に格納したメッセージを処理装置２０ｃに転送する。さらに、転送装置１０ｂも、要求メッセージの受信により、転送処理に使用する情報を、テーブルＴ２（図９）からテーブルＴ６（図１３）に更新する。このため、要求メッセージの受信以降、処理装置２０ｃと処理装置２０ｅから受信したメッセージを制御装置３０ａに転送する。
【００６７】
図１４は、処理装置２０ｄで輻輳が発生したときの転送経路の変更例を示す図である。図１４は、図１３に示すように経路情報が変更されたときに使用される転送経路を示している。このため、図１４では、フローＡとフローＤが転送装置１０ａのメッセージキューＱ１１を介して処理装置２０ｃに転送されている。一方、フローＢとフローＣの転送経路は図７に示した経路から変更されていないので、フローＢとフローＣは、転送装置１０ａのメッセージキューＱ１２を介して処理装置２０ｅに転送される。処理装置２０ｃでのフローＡについての処理結果と、処理装置２０ｅでのフローＢについての処理結果は、転送装置１０ｂのメッセージキューＱ２１を介して制御装置３０ａに転送される。また、処理装置２０ｃでのフローＤについての処理結果と、処理装置２０ｅでのフローＣについての処理結果は、転送装置１０ｂのメッセージキューＱ２２を介して制御装置３０ａに転送される。
【００６８】
このように、調整装置５０は、処理時間と転送経路テーブル７１を用いて、輻輳が発生している処理装置２０を特定できる。また、調整装置５０は、処理装置２０ｄを輻輳箇所として特定すると、輻輳箇所である処理装置２０ｄを避けた転送経路を設定することができる。図１４に示す転送経路を用いた運用が開始された後も、制御装置３０ａでは、フローＡ〜Ｄの各フローについて、制御メッセージの処理時間が計測される。制御装置３０ａの通知処理部３７は、転送経路の変更後も、得られた処理時間の値をフローの識別子に対応付けて調整装置５０に通知する。
【００６９】
通知メッセージは、同様に処理されるので、調整装置５０中の判定部６２による判定処理が再度行われる。判定部６２は、フローＡとフローＤについては、図１２に示すように、判定結果＝２と判定されたことがあるので、輻輳が解消しているかを、アプリケーション輻輳解除閾値を用いて判定する。ここで、フローＡとフローＤのいずれについても処理時間として５０ｎ秒であることが、制御装置３０ａから調整装置５０ｂに通知されたとする。すると、判定部６２は、閾値情報テーブル７３（図１１）を用いて、フローＡとフローＤのいずれも、処理時間がアプリケーション輻輳解除閾値を下回っていることから、輻輳状態が回避されたと判定する。従って、フローＡとフローＤについても、判定部６２は、判定結果を０に変更する。
【００７０】
（４）転送装置１０で発生した輻輳の検出と回避
次に、調整装置５０ｂが転送装置１０で発生した輻輳の検出と輻輳の回避を行うための処理の例を説明する。なお、以下の説明では、輻輳が検出されるまでは、転送経路テーブル７１−１（図８）や図９に示す情報に従って、図７に示す経路で通信処理が行われていたものとする。また、輻輳の発生の有無や、輻輳の発生箇所に関係なく、制御装置３０ａは、処理装置２０で輻輳が発生した場合についての説明で述べた方法と同様の手順により、各フローについての処理時間を調整装置５０ｂに通知する。また、取得部６１や判定部６２の処理も、処理装置２０で輻輳が発生した場合についての説明で述べた処理と同様である。
【００７１】
図１５は、判定部６２が保持する情報の例を示すテーブルである。図１５の例では、制御メッセージの処理時間は、フローＡでは１１０ｎ秒、フローＢとフローＣではいずれも２０ｎ秒、フローＤでは１３０ｎ秒である。ここで、図１１に示すように、フローＡではメッセージキュー輻輳判定閾値は１００ｎ秒であるため、判定部６２は、フローＡについては、経路中の転送装置１０のいずれかのキューでの輻輳が発生していると判定する。フローＢとフローＣについては、処理時間が２０ｎ秒であるのに対し、メッセージキュー輻輳判定閾値が１５０ｎ秒であるため、判定部６２は、輻輳が発生していないと判定する。一方、フローＤでは、処理時間が１３０ｎ秒であるのに対し、メッセージキュー輻輳判定閾値が１００ｎ秒であるため、判定部６２は、フローＤが経由する転送装置１０中のいずれかのキューでも、輻輳が発生していると判定する。このため、判定結果は、図１５に示すように、フローＡとフローＤでは１、フローＢとフローＣでは０となる。
【００７２】
判定部６２は、１つのフローについて、そのフローが経由するいずれかのキューで輻輳が発生していると判定した場合、輻輳が起こっているキューを特定するために、輻輳が発生しているフローと同じキューを経由するフローを検索する。例えば、フローＡについて輻輳の原因となっているキューを特定する場合の処理の例を説明する。判定部６２は、転送経路テーブル７１−１（図８）を参照して、フローＡとフローＢがキューＱ２１を経由していることを特定する。そこで、判定部６２は、キューＱ２１を、輻輳が起こっているかの判定対象とし、キューＱ２１での輻輳が発生しているかを判定する。キューＱ２１で輻輳が発生している場合は、フローＡとフローＢの両方の処理時間が長くなることが予想される。そこで、判定部６２は、フローＢで輻輳が発生しているかを判定する。ここでは、図１５に示すように、フローＢでは輻輳が発生していない。そこで、判定部６２は、キューＱ２１では輻輳が発生していないと判定する。
【００７３】
次に、判定部６２は、転送経路テーブル７１−１を用いて、フローＡがキューＱ２１以外に使用しているキューを特定し、そのキューを経由するフローを求める。転送経路テーブル７１−１に示すように、フローＡとフローＤは、いずれも、キューＱ１１を経由している。そこで、判定部６２は、キューＱ１１で輻輳が発生しているかを判定するために、フローＤでも処理時間がメッセージキュー輻輳判定閾値を越えているかを判定する。フローＤでは、フローＡと同様に、メッセージキューの輻輳による処理の遅延が発生しているので、判定部６２は、キューＱ１１で輻輳が発生していると判定する。
【００７４】
すなわち、判定部６２は、転送装置１０で輻輳が発生している可能性のあるフローが複数ある場合、輻輳が発生した箇所の特定を試みる。このとき、判定部６２は、転送装置１０での輻輳が発生したと判定された複数のフローで共通して使用しているキューが１箇所特定できると、特定したキューが輻輳の原因となっていると判定する。一方、転送装置１０での輻輳が発生したと判定された複数のフローで共通して使用されているキューが複数である場合、判定部６２は、輻輳の原因となるキューが特定できなかったと判定する。また、転送装置１０での輻輳が発生したと判定された複数のフローで共通して使用されているキューが無い場合も、判定部６２は、輻輳の原因をとなるキューを特定できなかったと判定する。
【００７５】
判定部６２は、輻輳が発生した箇所を特定できた場合、特定した結果を経路計算部６３に出力する。輻輳が発生している箇所が判定部６２から通知されると、経路計算部６３は、通知されたキューを経由しない転送経路を計算する。
【００７６】
図１６は、転送装置１０で輻輳が発生したときの経路情報の変更例を示す図である。図１６は、経路計算部６３の処理により、フローＡとフローＤのいずれも、転送装置１０ａの代わりに転送装置１０ｃで処理されるように決定された場合の経路情報の例を示している。また、経路計算部６３は、フローＡとフローＤのいずれについても、制御メッセージを処理する処理装置２０を変更しない経路を算出したものとする。すると、経路計算部６３は、得られた経路を用いて、転送経路テーブル７１−１（図８）を、図１６の転送経路テーブル７１−３に示すように更新する。
【００７７】
転送経路テーブル７１−１が転送経路テーブル７１−３に更新された場合も、生成部６４は、転送経路を変更する装置に対して、転送経路の更新を要求するための要求メッセージを生成する。すなわち、生成部６４は、制御装置３０ａに対して、フローＡとフローＤの転送先を転送装置１０ｃのキューＱ３１に変更させるための要求メッセージを生成する。さらに、生成部６４は、フローＡとフローＤの転送処理を開始させる転送装置１０ｃに宛てた要求メッセージにより、キューＱ３１を用いて制御装置３０ａと処理装置２０ｄとの通信を中継することを要求する。このとき、生成部６４は、転送先の処理装置２０ｄでの処理にアプリケーションＡＰ１が使用されることも、転送装置１０ｃ宛の要求メッセージに含める。
【００７８】
制御装置３０ａの転送処理部３８は、要求メッセージを受信すると、フローＡとフローＤの制御メッセージの転送先を転送装置１０ｃのキューＱ３１に変更することが要求されたと認識する。そこで、転送処理部３８は、要求先テーブル４１−１（図９）を要求先テーブル４１−２（図１６）に示すように更新する。転送装置１０ｃは、要求メッセージを受信すると、転送処理に使用する情報に、テーブルＴ７（図１６）に示す情報を追加する。
【００７９】
図１７は、転送装置１０で輻輳が発生したときの転送経路の変更例を示す図である。図１７は、図１６に示すように経路情報が変更されたときに使用される転送経路を示している。このため、図１７では、フローＡとフローＤが転送装置１０ｃのメッセージキューＱ３１を介して処理装置２０ｄに転送されている。一方、フローＢとフローＣの転送経路は図７に示した経路から変更されていないので、転送装置１０ａのメッセージキューＱ１２を介して処理装置２０ｅに転送される。フローＡ〜Ｄのいずれについても、処理結果の転送経路は図７から変更されていない。このため、処理装置２０ｄでのフローＡについての処理結果と、処理装置２０ｅでのフローＢについての処理結果は、転送装置１０ｂのメッセージキューＱ２１を介して制御装置３０ａに転送される。また、処理装置２０ｄでのフローＤについての処理結果と、処理装置２０ｅでのフローＣについての処理結果は、転送装置１０ｂのメッセージキューＱ２２を介して制御装置３０ａに転送される。
【００８０】
このように、調整装置５０は、転送装置１０中のメッセージキューを輻輳箇所として特定でき、さらに、輻輳が発生しているキューを避けた転送経路を設定することができる。図１７に示す転送経路を用いた運用が開始された後も、処理装置２０での輻輳が検出されたときと同様に、制御装置３０ａは、各フローについての制御メッセージの処理時間の計測と、処理時間の通知を行う。このため、フローＡとフローＤについての処理時間がメッセージキュー輻輳解除閾値を下回ると、輻輳状態である旨の設定が解除される。
【００８１】
以下、図１８〜図２１を参照しながら、調整装置５０が輻輳の検出に加えて障害の検出も行う場合の処理の例を説明する。障害が検出された場合も、判定部６２は経路計算部６３に障害の発生箇所を通知し、経路計算部６３は、障害の発生箇所を含まない転送経路を計算するものとする。また、生成部６４は、障害の発生箇所を含まない転送経路を通知するために、適宜、要求メッセージを生成するものとする。なお、図１８〜図２１では、検出精度を高めるために同じ箇所での複数回の遅延が検出されたときに、障害や輻輳が発生していると判定する場合の処理の例を説明する。また、以下の説明では、処理時間のばらつきによって過剰に経路変更が行われることを防ぐために、輻輳の発生の判定の際には、フローごとの処理時間の平均値を用いている。
【００８２】
図１８は、調整装置で行われる処理の例を説明するフローチャートである。なお、図１８は一例であり、実装に応じて処理は変更されうる。例えば、ステップＳ３での平均値の計算方法は、実装に応じて変更されても良い。
【００８３】
調整装置５０の判定部６２は、制御装置３０から通知された処理時間（Ｙ）を取得部６１から取得すると、障害判定閾値（Ｄ＿ｆａｕｌｔ）と比較する（ステップＳ１）。通知された処理時間Ｙが閾値Ｄ＿ｆａｕｌｔ以上の場合、判定部６２は障害判定処理を行う（ステップＳ１でＹｅｓ、ステップＳ２）。ここで、閾値Ｄ＿ｆａｕｌｔは、処理時間としての異常値と判定される程度に大きな値であり、転送装置１０か処理装置２０で障害が発生した可能性があるほど長い時間に設定される。なお、判定部６２は、制御装置３０から処理時間の取得に失敗したことが通知された場合、処理時間が閾値Ｄ＿ｆａｕｌｔを越えているとみなすものとする。
【００８４】
一方、処理時間Ｙが閾値Ｄ＿ｆａｕｌｔ未満の場合、判定部６２は、処理時間の平均値Ｄｔを計算する（ステップＳ１でＮｏ、ステップＳ３）。図１８の例では、判定部６２は、指数移動平均（Exponential Moving Average）により、次式から、平均値Ｄｔを求めている。
Ｄｔ＝α×Ｙ＋（１−α）×Ｄｔ―１
ここで、αは平滑化計数であり、０＜α＜１を満たす。Ｙは制御装置３０から通知された処理時間の値であり、Ｄｔ―１は前回の算出で得られた平均値である。
【００８５】
判定部６２は、平均値Ｄｔが閾値Ｄ＿ａｐｐ以上であるかを判定する（ステップＳ４）。平均値Ｄｔが閾値Ｄ＿ａｐｐ以上である場合、判定部６２は、アプリケーション輻輳判定処理を行う（ステップＳ４でＹｅｓ、ステップＳ５）。平均値Ｄｔが閾値Ｄ＿ａｐｐ未満である場合、判定部６２は、平均値Ｄｔが閾値Ｄ＿ｍｑ以上であるかを判定する（ステップＳ４でＮｏ、ステップＳ６）。判定部６２は、平均値Ｄｔが閾値Ｄ＿ｍｑ以上である場合、メッセージキュー輻輳判定処理を行う（ステップＳ６でＹｅｓ、ステップＳ７）。一方、平均値Ｄｔが閾値Ｄ＿ｍｑ未満である場合、判定部６２は、ステップＳ１に戻る。また、ステップＳ２、Ｓ５、Ｓ７に示す判定処理の後も、判定部６２は、新たに処理時間が通知されると、ステップＳ１以降の処理を繰り返す。
【００８６】
図１９は、障害判定処理の例を説明するフローチャートである。図１９は、図１８のステップＳ２で行われる処理を詳しく示している。判定部６２は、処理時間が閾値Ｄ＿ｆａｕｌｔを越えているフローを処理している処理装置２０とキューを特定する（ステップＳ１１）。このとき、判定部６２は、適宜、転送経路テーブル７１を用いるものとする。判定部６２は、特定した対象の総数Ｎを記憶する（ステップＳ１２）。次に、判定部６２は、変数ｎを１に設定する（ステップＳ１３）。なお、変数ｎは、障害の発生箇所であるかを判定した対象の数を計数するために使用される。
【００８７】
判定部６２は、ｎ番目の対象を通過する複数のフローで処理時間が閾値Ｄ＿ｆａｕｌｔを越えたかを判定する（ステップＳ１４）。ｎ番目の対象を通過する複数のフローにおいて、処理時間が閾値Ｄ＿ｆａｕｌｔを越えている場合、判定部６２は、ｎ番目の対象を障害箇所の候補に設定する（ステップＳ１４でＹｅｓ、ステップＳ１５）。その後、判定部６２は、変数ｎを１つインクリメントして、変数ｎが定数Ｎを超えたかを判定する（ステップＳ１６、Ｓ１７）。判定部６２は、変数ｎが定数Ｎ以下の場合、ステップＳ１４以降の処理を繰り返す（ステップＳ１７でＮｏ）。
【００８８】
変数ｎが定数Ｎを超えた場合、判定部６２は、障害箇所の候補があるかを判定する（ステップＳ１７でＹｅｓ、ステップＳ１８）。障害箇所の候補がある場合、障害箇所の候補が複数あるかを判定する（ステップＳ１８でＹｅｓ、ステップＳ１９）。障害箇所の候補が１箇所である場合、判定部６２は、障害箇所の候補を障害箇所として決定し、経路計算部６３、生成部６４とともに障害復旧のための処理を行う（ステップＳ１９でＮｏ、ステップＳ２０）。
【００８９】
一方、障害箇所の候補が無い場合、判定部６２は、障害箇所の特定に失敗したと判定する（ステップＳ１８でＮｏ、ステップＳ２１）。すると、経路計算部６３は、処理時間が閾値Ｄ＿ｆａｕｌｔを越えているフローについて、経路上の処理装置２０とキューを変更し、管理者に通知する（ステップＳ２２）。また、障害箇所の候補が複数ある場合も、判定部６２は、障害箇所の特定に失敗したと判定する（ステップＳ１９でＹｅｓ、ステップＳ２１）。このため、ステップＳ２２の処理が行われる。
【００９０】
図２０は、処理装置での輻輳の発生を判定する方法の例を説明するフローチャートである。図２０は、図１８のステップＳ５で行われる処理を詳しく示している。判定部６２は、処理対象のフローが輻輳していると判定された結果、判定処理に使用しないように設定されたフローであるかを判定する（ステップＳ３１）。このとき、判定部６２は、適宜、図１２などに示すようなテーブルの判定結果を用いることができる。処理対象のフローが輻輳しているため処理対象から除外されたフローである場合、判定部６２は処理を終了する（ステップＳ３１でＹｅｓ）。
【００９１】
処理対象のフローが輻輳していると判定されたフローではない場合、判定部６２はそのフローを処理している処理装置２０を特定する（ステップＳ３１でＮｏ、ステップＳ３２）。このとき、判定部６２は、適宜、転送経路テーブル７１を用いるものとする。次に、判定部６２は、処理対象としているフロー以外に、処理時間の平均値が閾値Ｄ＿ａｐｐを越えたフローがあるかを判定する（ステップＳ３３）。処理対象としているフロー以外に、処理時間の平均値が閾値Ｄ＿ａｐｐを越えたフローがある場合、ステップＳ３２において特定した処理装置２０で処理される複数のフローで輻輳が発生しているかを判定する（ステップＳ３３でＹｅｓ、ステップＳ３４）。特定した処理装置２０で処理される複数のフローで輻輳が発生している場合、判定部６２は、特定した処理装置２０を輻輳箇所に決定し、輻輳を解消するための処理を行う（ステップＳ３４でＹｅｓ、ステップＳ３５）。判定部６２は、輻輳箇所に決定した処理装置２０で処理されるフローを、輻輳判定に使用するフローから除外して、ステップＳ１に戻る（ステップＳ３６）。
【００９２】
一方、ステップＳ３３において、処理時間の平均が閾値Ｄ＿ａｐｐを超えたフローが１つだけであると判定されると、判定部６２は、輻輳箇所の特定に失敗したと判定する（ステップＳ３３でＮｏ、ステップＳ３７）。判定部６２は、処理時間の平均が閾値Ｄ＿ａｐｐを超えたフローの情報を、管理者に通知するための処理を行う（ステップＳ３８）。さらに、ステップＳ３４において、特定した処理装置で処理される複数のフローで輻輳が発生していないと判定された場合（ステップＳ３４でＮｏ）も、ステップＳ３７、Ｓ３８の処理が行われる。なお、フローの情報を管理者に通知するための処理には、例えば、管理者が使用している端末に、通知しようとするフローの識別子と、そのフローの処理時間の平均がアプリケーション輻輳判定閾値を超えていることを示す情報を送信することが含まれる。管理者が使用している端末は、調整装置５０からの通知の内容を、管理者が認識できるような任意の形態で出力する。
【００９３】
図２１は、転送装置での輻輳の発生を判定する方法の例を説明するフローチャートである。図２１は、図１８のステップＳ７で行われる処理を詳しく示している。判定部６２は、処理対象のフローが輻輳していると判定された結果、判定処理に使用しないように設定されたフローであるかを判定する（ステップＳ４１）。このとき、判定部６２は、適宜、図１５などに示すようなテーブルの判定結果を用いることができる。処理対象のフローが輻輳しているため処理対象から除外されたフローである場合、判定部６２は処理を終了する（ステップＳ４１でＹｅｓ）。
【００９４】
処理対象のフローが輻輳していると判定されたフローではない場合、判定部６２はそのフローが通過するキューを特定する（ステップＳ４１でＮｏ、ステップＳ４２）。このとき、判定部６２は、適宜、転送経路テーブル７１を用いるものとする。判定部６２は、特定したキューの総数Ｍを記憶する（ステップＳ４３）。次に、判定部６２は、変数ｍを１に設定する（ステップＳ４４）。なお、変数ｍは、輻輳の発生箇所であるかを判定したキューの数を計数するために使用される。
【００９５】
判定部６２は、特定したキューのうちのｍ番目のキューを通過する複数のフローが輻輳しているかを判定する（ステップＳ４５）。なお、ステップＳ４５において、判定部６２は、各フローについての処理時間の平均が閾値Ｄ＿ｍｑを越えると、輻輳が発生していると判定するものとする。ｍ番目のキューを通過する複数のフローにおいて輻輳が発生している場合、判定部６２は、ｍ番目の対象を輻輳箇所の候補に設定する（ステップＳ４５でＹｅｓ、ステップＳ４６）。その後、判定部６２は、変数ｍを１つインクリメントして、変数ｍが定数Ｍを超えたかを判定する（ステップＳ４７、Ｓ４８）。判定部６２は、変数ｍが定数Ｍ以下の場合、ステップＳ４５以降の処理を繰り返す（ステップＳ４８でＮｏ）。
【００９６】
変数ｍが定数Ｍを超えた場合、判定部６２は、輻輳箇所の候補があるかを判定する（ステップＳ４８でＹｅｓ、ステップＳ４９）。輻輳箇所の候補がある場合、輻輳箇所の候補が複数あるかを判定する（ステップＳ４９でＹｅｓ、ステップＳ５０）。輻輳箇所の候補が１箇所である場合、判定部６２は、輻輳箇所の候補を輻輳箇所として決定し、輻輳を解消するための処理を行う（ステップＳ５０でＮｏ、ステップＳ５１）。判定部６２は、輻輳箇所に決定したキューを通過するフローを、輻輳判定に使用するフローから除外して、ステップＳ１に戻る（ステップＳ５２）。
【００９７】
一方、輻輳箇所の候補が無い場合、判定部６２は、輻輳箇所の特定に失敗したと判定する（ステップＳ４９でＮｏ、ステップＳ５３）。判定部６２は、処理時間の平均が閾値Ｄ＿ｍｑを超えたフローの情報を、管理者に通知するための処理を行う（ステップＳ５４）。さらに、ステップＳ５０において、輻輳箇所の候補のキューが複数あると判定された場合（ステップＳ５０でＹｅｓ）も、ステップＳ５３、Ｓ５４の処理が行われる。
【００９８】
図２２は、輻輳の解除処理の例を説明するフローチャートである。判定部６２は、処理対象のフローが輻輳していると判定されているかを判定する（ステップＳ６１）。処理対象のフローが輻輳していると判定されているフローでない場合、判定部６２は、処理対象としているフローに対する処理を終了して、他のフローについての処理を開始する。一方、処理対象のフローが輻輳していると判定されているフローである場合、判定部６２は、そのフローについての処理時間の平均値Ｄｔが、メッセージキュー輻輳解除閾値（Ｄ＿ｍｑ＿ｒｅｌｅａｓｅ）を下回っているかを判定する（ステップＳ６２）。処理時間の平均値Ｄｔが、メッセージキュー輻輳解除閾値を下回っている場合、処理対象のフローについて、メッセージキュー輻輳状態であるという設定を解除する（ステップＳ６２でＹｅｓ、ステップＳ６３）。判定部６２は、処理時間の平均値Ｄｔが、メッセージキュー輻輳解除閾値以上である場合、処理時間の平均値Ｄｔがアプリケーション輻輳解除閾値（Ｄ＿ａｐｐ＿ｒｅｌｅａｓｅ）を下回っているかを判定する（ステップＳ６２でＮｏ、ステップＳ６４）。処理時間の平均値Ｄｔが、アプリケーション輻輳解除閾値を下回っている場合、処理対象のフローについて、アプリケーション輻輳状態であるという設定を解除する（ステップＳ６４でＹｅｓ、ステップＳ６５）。処理時間の平均値Ｄｔが、アプリケーション輻輳解除閾値以上である場合、判定部６２は、処理対象としているフローに対する処理を終了して、他のフローについての処理を開始する（ステップＳ６４でＮｏ）。
【００９９】
以上説明したように、調整装置５０が、制御メッセージについての処理時間を用いて、輻輳の発生箇所を特定し、輻輳が発生した箇所を用いない転送経路を設定する。さらに、調整装置５０は、転送経路の変更を要求する装置に要求メッセージを送信することにより、設定した転送経路が使用されるようにする。このため、コントローラシステム１で輻輳が発生しても、効率的に輻輳が解消され、コントローラシステム１が安定的に運用される。
【０１００】
さらに、実施形態にかかる方法を用いても、転送装置１０や処理装置２０での処理は、実施形態にかかる方法を導入しない場合と同じである。このため、実施形態にかかる方法は、転送装置１０や処理装置２０を実現する装置やソフトウェアに対しての変更を行わずに、システムに導入することができる。
【０１０１】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【０１０２】
処理時間を調整装置５０に通知するときに、通知処理部３７は、通知を行う周期ごとに、各フローについての処理時間の平均値を求めて、フローの識別子と処理時間の平均値を調整装置５０ｂに通知しても良い。この場合、処理時間の通知の周期が処理時間の揺らぎを平滑化できる程度の長さであれば、取得部６１は、制御装置３０から通知された処理時間から平均値を求めなくてもよい。
【０１０３】
以上の説明では、輻輳箇所を経由しているフローの全てについて経路の変更を行う場合を例として説明したが、調整装置５０は、輻輳したフローのうちの一部の経路を変更し、他の経路を変更せずに所定の時間、待機しても良い。一部の経路を変更したことによって輻輳が回避された場合、調整装置５０はこれ以上の経路変更を行わなくても良い。
【０１０４】
また、以上の説明で示した要求先テーブル４１、転送経路テーブル７１、閾値情報テーブル７３などのテーブルは一例であり、実装に応じて、各テーブルに含まれる情報要素は変更され得る。
【０１０５】
なお、以上の説明では、理解しやすくするために、同じ制御装置３０を経由したフロー間で処理時間を比較する場合を例として説明したが、異なる制御装置３０が計測した処理時間を用いて、輻輳箇所が特定されても良い。例えば、制御装置３０ａが計測したフローＡと、制御装置３０ｂが計測したフローＥとで、処理装置２０またはキューが共通している場合、調整装置５０は、フローＡの処理時間と、フローＥの処理時間を用いて、輻輳箇所の特定を行う。
【０１０６】
さらに、処理装置、転送装置、制御装置は、クラウドシステムの仮想マシンに配備しても良いし、個々を物理サーバに配備し、物理サーバ間を制御用のネットワークで接続する実施形態でも良い。
【符号の説明】
【０１０７】
１  コントローラシステム
２  制御装置
３  広域ネットワーク
４  ＬＡＮ
５  メッセージングシステム
６  ノード
７、８  コントローラクラスタ
１０  転送装置
１５  アプリケーション処理クラスタ
２０  処理装置
２５  調整システム
３０  制御装置
３１、５１  送信部
３２、５２  受信部
３５、６０  制御部
３６  計測部
３７  通知処理部
３８  転送処理部
４０、７０  記憶部
４１  要求先テーブル
４２  バッファ
５０  調整装置
６１  取得部
６２  判定部
６３  経路計算部
６４  生成部
７１  転送経路テーブル
７２  トポロジー情報
７３  閾値情報テーブル
１０１  プロセッサ
１０２  メモリ
１０３  バス
１０４  ネットワーク接続装置
１０５  ネットワーク
【図２】
2015228538.tif 000003
【図３】
2015228538.tif 000004
【図４】
2015228538.tif 000005
【図５】
2015228538.tif 000006
【図６】
2015228538.tif 000007
【図７】
2015228538.tif 000008
【図８】
2015228538.tif 000009
【図９】
2015228538.tif 000010
【図１０】
2015228538.tif 000011
【図１１】
2015228538.tif 000012
【図１２】
2015228538.tif 000013
【図１３】
2015228538.tif 000014
【図１４】
2015228538.tif 000015
【図１５】
2015228538.tif 000016
【図１６】
2015228538.tif 000017
【図１７】
2015228538.tif 000018
【図１８】
2015228538.tif 000019
【図１９】
2015228538.tif 000020
【図２０】
2015228538.tif 000021
【図２１】
2015228538.tif 000022
【図２２】
2015228538.tif 000023
【図１】
2015228538.tif 000024