(57)【要約】【課題】大容量の処理が可能で、かつ、収束性のある負荷分散が実現できる負荷分散システムを提供する。【解決手段】負荷係数決定手段２６０は、ネットワーク構成情報２５０に基づいて、負荷係数２８５を決定する。負荷情報交換手段２８０は、自サーバの負荷と他サーバの負荷との比が融通しきい値２７０を超えると判断すると、状態フラグ３４０を「負荷融通状態」とし、自サーバの負荷及び他サーバの負荷と負荷係数２８５とに基づいて負荷目標値３３０を決定する。また、移管先サーバ名３３５に他のサーバのサーバ名を格納する。負荷融通手段２２０は、状態フラグ３４０が「負荷融通状態」であれば、自サーバの負荷が負荷目標値を超えるか否かを判断し、超えると判断すると、移管先サーバ名３３５のサーバをリダイレクト先とするリダイレクト応答を、クライアントに送信する。【選択図】図１
2008071156.tif 000002
【特許請求の範囲】
【請求項１】
複数のサーバを有するネットワークシステムのネットワーク構成を記憶するネットワーク構成情報を参照し、負荷係数を決定する負荷係数決定手段と、
他のサーバから負荷情報を取得し、自サーバの負荷、及び、他のサーバの負荷と、前記負荷係数とに基づいて、負荷目標値を設定する負荷情報交換手段と、
自サーバの負荷と前記負荷目標値とを比較し、自サーバの負荷が前記負荷目標値以下のとき、クライアントからの処理要求に対する処理を自サーバ内で実行させ、自サーバの負荷が前記負荷目標値を超えるとき、前記処理要求に対応する処理を、前記他のサーバで実行させる負荷融通手段とを備えることを特徴とする負荷分散システム。
【請求項２】
前記負荷情報交換手段は、前記自サーバの負荷から、該自サーバの負荷と他のサーバの負荷との差に前記負荷係数を乗じた値を引いた値を、前記負荷目標値として設定する、請求項１に記載の負荷分散システム。
【請求項３】
前記負荷情報交換手段は、前記自サーバの負荷と他のサーバの負荷との比が所定のしきい値を超えると判断すると、負荷融通を行うか否かを示す状態フラグを「負荷融通状態」に設定して前記負荷目標値の設定を行い、前記負荷融通手段は、前記状態フラグが「負荷融通状態」のとき、前記自サーバの負荷と前記負荷目標値との比較を行う、請求項１又は２に記載の負荷分散システム。
【請求項４】
前記負荷融通手段は、前記比較の結果、前記自サーバの負荷が前記負荷目標値以下であると、前記状態フラグを、負荷融通を行わない状態を示す「通常状態」に設定する、請求項３に記載の負荷分散システム。
【請求項５】
前記負荷情報交換手段は、前記状態フラグが「負荷融通状態」でないとき、前記他のサーバから負荷情報を取得する、請求項３又は４に記載の負荷分散システム。
【請求項６】
前記負荷情報交換手段は、前記状態フラグを「負荷融通状態」に設定すると、前記他のサーバを指し示す情報を移管先サーバ記憶部に格納し、前記負荷融通手段は、自サーバの負荷が前記負荷目標値を超えるとき、前記移管先サーバ記憶部を参照して、前記処理要求に対する処理を、該移管先サーバ記憶部に格納されたサーバで実行させる、請求項３〜５の何れか一に記載の負荷分散システム。
【請求項７】
前記負荷情報交換手段は、前記自サーバの負荷と他のサーバの負荷との比が所定のしきい値を超えると判断すると、前記他のサーバに負荷融通が可能か否かを問い合わせる負荷融通要求を送信し、該要求に対して許諾する旨の応答を受信すると、前記状態フラグを「負荷融通状態」に設定すると共に、当該他のサーバを示す情報を前記移管先サーバ記憶部に格納する、請求項６に記載の負荷分散システム。
【請求項８】
前記負荷情報交換手段は、他のサーバから、前記負荷融通要求を受信すると、自サーバの負荷情報を参照して許諾するか否かを決定し、許諾するときには許諾応答を、拒否するときには拒否応答を返信する、請求項７に記載の負荷分散システム。
【請求項９】
前記負荷融通手段は、自サーバの負荷が前記負荷目標値を超えるとき、前記処理要求に対して、他のサーバをリダイレクト先とするリダイレクト応答をクライアントに送信し、前記処理要求に対する処理を他のサーバで実行させる、請求項１〜８の何れか一に記載の負荷分散システム。
【請求項１０】
前記負荷融通手段は、自サーバの負荷が前記負荷目標値以下であるとき、ディスパッチ手段により前記処理要求に対応するアプリケーションを起動し、該アプリケーションの処理結果を、前記クライアントに対する応答として送信する、請求項１〜９の何れか一に記載の負荷分散システム。
【請求項１１】
前記負荷係数決定手段は、前記ネットワーク構成情報に基づいて、行及び列を各サーバに対応させ、サーバ間で接続間関係にあるサーバに対応する要素を−１、接続関係にないサーバに対応する要素を０、対角要素をその行に対応するサーバに接続されたサーバの数とする接続行列Ａを作成し、該作成した接続行列Ａに対して、ｌを変数とし、Ｅを単位行列としてＧ＝（−ｌＡ＋Ｅ）の固有値ｋ（ｌ）を求め、全ての固有値ｋ（ｌ）が−１より大きく１以下となる０＜ｌ＜１のうちのｌの最大値を求め、該ｌの最大値を、負荷係数として決定する、請求項１〜１０の何れか一に記載の負荷分散システム。
【請求項１２】
複数のサーバを有するネットワークシステムで、サーバの負荷を分散させる方法であって、
前記サーバが、前記ネットワークシステムのネットワーク構成を記憶するネットワーク構成情報を参照し、負荷係数を決定する負荷係数決定ステップと、
前記サーバが、他のサーバとの間で負荷情報を交換し、自サーバの負荷、及び、他のサーバの負荷と、前記負荷係数とに基づいて、負荷目標値を設定する負荷目標値設定ステップと、
前記サーバが、自サーバの負荷と前記負荷目標値とを比較し、クライアントからの処理要求に対する処理を、自サーバで実行するか、又は、前記他のサーバに実行させるかを決定する処理サーバ決定ステップとを有し、
前記サーバが、前記処理サーバ決定ステップで、自サーバで実行すると決定すると、前記処理を自サーバ内で実行し、他のサーバに実行させると決定すると、前記処理を、前記他のサーバで実行させることを特徴とする負荷分散方法。
【請求項１３】
前記処理サーバ決定ステップでは、前記サーバは、自サーバの負荷と前記負荷目標値とを比較し、自サーバの負荷が前記負荷目標値以下であれば、前記処理を自サーバ内で実行すると決定し、自サーバの負荷が前記目標値を超えるときには、前記他のサーバに実行させると決定する、請求項１２に記載の負荷分散方法。
【請求項１４】
前記負荷目標値設定ステップでは、前記サーバは、前記自サーバの負荷から、該自サーバの負荷と他のサーバの負荷との差に前記負荷係数を乗じた値を引いた値を、前記負荷目標値として設定する、請求項１２又は１３に記載の負荷分散方法。
【請求項１５】
前記負荷目標値設定ステップでは、前記サーバは、前記自サーバの負荷と他のサーバの負荷との比が所定のしきい値を超えると判断すると、負荷融通を行うか否かを示す状態フラグを「負荷融通状態」に設定して、前記負荷目標値の設定を行い、
前記サーバは、前記処理要求を受け付けると、前記状態フラグを参照し、該状態フラグが「負荷融通状態」であれば、前記処理サーバ決定ステップを実行する、請求項１２〜１４の何れか一に記載の負荷分散方法。
【請求項１６】
前記処理サーバ決定ステップでは、前記サーバは、前記処理要求に対する処理を自サーバで実行すると決定すると、前記状態フラグを、負荷融通を行わない状態を示す「通常状態」に設定する、請求項１５に記載の負荷分散方法。
【請求項１７】
前記負荷目標値設定ステップでは、前記サーバは、前記状態フラグを「負荷融通状態」に設定すると、前記他のサーバを指し示す情報を移管先サーバ記憶部に格納する、請求項１５又は１６に記載の負荷分散方法。
【請求項１８】
前記サーバは、前記処理要求に対する処理を他のサーバに実行させると決定すると、前記移管先サーバ記憶部を参照して、該移管先サーバ記憶部に格納されたサーバに、前記処理を実行させる、請求項１７に記載の負荷分散方法。
【請求項１９】
前記負荷目標値設定ステップでは、前記サーバは、前記自サーバの負荷と他のサーバの負荷との比が所定のしきい値を超えると判断すると、前記他のサーバに負荷融通が可能か否かを問い合わせる負荷融通要求を送信し、該要求に対して許諾する旨の応答を受信すると、前記状態フラグを「負荷融通状態」に設定し、当該他のサーバを示す情報を前記移管先サーバ記憶部に格納して、前記負荷目標値を設定する、請求項１７又は１８に記載の負荷分散方法。
【請求項２０】
前記サーバは、他のサーバから、前記負荷融通要求を受信すると、自サーバの負荷情報を参照して許諾するか否かを決定し、許諾するときには許諾応答を、拒否するときには拒否応答を返信する、請求項１９に記載の負荷分散方法。
【請求項２１】
前記サーバは、前記処理サーバ決定ステップで、他のサーバに実行させると決定すると、前記処理要求に対して、他のサーバをリダイレクト先とするリダイレクト応答をクライアントに送信し、前記処理要求に対する処理を他のサーバで実行させる、請求項１２〜２０の何れか一に記載の負荷分散方法。
【請求項２２】
前記サーバは、前記処理サーバ決定ステップで、自サーバで実行すると決定すると、ディスパッチ手段により前記処理要求に対応するアプリケーションを起動し、該アプリケーションの処理結果を、前記クライアントに対する応答として送信する、請求項１２〜２０の何れか一に記載の負荷分散方法。
【請求項２３】
前記負荷係数決定ステップでは、前記サーバは、前記ネットワーク構成情報に基づいて、行及び列を各サーバに対応させ、サーバ間で接続間関係にあるサーバに対応する要素を−１、接続関係にないサーバに対応する要素を０、対角要素をその行に対応するサーバに接続されたサーバの数とする接続行列Ａを作成し、該作成した接続行列Ａに対して、ｌを変数とし、Ｅを単位行列としてＧ＝（−ｌＡ＋Ｅ）の固有値ｋ（ｌ）を求め、全ての固有値ｋ（ｌ）が−１より大きく１以下となる０＜ｌ＜１のうちのｌの最大値を求め、該ｌの最大値を、負荷係数として決定する、請求項１２〜２２の何れか一に記載の負荷分散方法。
【請求項２４】
複数のサーバを有するネットワークシステムで、サーバの負荷を分散させる処理を前記サーバに実行させるプログラムあって、前記サーバに、
前記ネットワークシステムのネットワーク構成を記憶するネットワーク構成情報を参照し、負荷係数を決定する負荷係数決定ステップと、
他のサーバとの間で負荷情報を交換し、自サーバの負荷、及び、他のサーバの負荷と、前記負荷係数とに基づいて、負荷目標値を設定する負荷目標値設定ステップと、
自サーバの負荷と前記負荷目標値とを比較し、クライアントからの処理要求に対する処理を、自サーバで実行するか、又は、前記他のサーバに実行させるかを決定する処理サーバ決定ステップとを実行させ、
前記処理サーバ決定ステップで、自サーバで実行すると決定すると、前記処理を自サーバ内で実行し、他のサーバに実行させると決定すると、前記処理を、前記他のサーバで実行させることを特徴とするプログラム。
【請求項２５】
前記処理サーバ決定ステップでは、自サーバの負荷と前記負荷目標値とを比較し、自サーバの負荷が前記負荷目標値以下であれば、前記処理を自サーバ内で実行すると決定し、自サーバの負荷が前記目標値を超えるときには、前記他のサーバに実行させると決定する、請求項２４に記載のプログラム。
【請求項２６】
前記負荷目標値設定ステップでは、前記自サーバの負荷から、該自サーバの負荷と他のサーバの負荷との差に前記負荷係数を乗じた値を引いた値を、前記負荷目標値として設定する、請求項２４又は２５に記載のプログラム。
【請求項２７】
前記負荷目標値設定ステップでは、前記自サーバの負荷と他のサーバの負荷との比が所定のしきい値を超えると判断すると、負荷融通を行うか否かを示す状態フラグを「負荷融通状態」に設定して、前記負荷目標値の設定を行い、
前記サーバに、前記処理要求を受け付けると、前記状態フラグを参照し、該状態フラグが「負荷融通状態」であれば、前記処理サーバ決定ステップを実行する処理を実行させる、請求項２４〜２６の何れか一に記載のプログラム。
【請求項２８】
前記処理サーバ決定ステップでは、前記処理要求に対する処理を自サーバで実行すると決定すると、前記状態フラグを、負荷融通を行わない状態を示す「通常状態」に設定する、請求項２７に記載のプログラム。
【請求項２９】
前記負荷目標値設定ステップでは、前記サーバは、前記状態フラグを「負荷融通状態」に設定すると、前記他のサーバを指し示す情報を移管先サーバ記憶部に格納する、請求項２７又は２８に記載のプログラム。
【請求項３０】
前記サーバに、前記処理要求に対する処理を他のサーバに実行させると決定したときに、前記移管先サーバ記憶部を参照して、該移管先サーバ記憶部に格納されたサーバに、前記処理を実行させる処理を実行させる、請求項２９に記載のプログラム。
【請求項３１】
前記負荷目標値設定ステップでは、前記自サーバの負荷と他のサーバの負荷との比が所定のしきい値を超えると判断すると、前記他のサーバに負荷融通が可能か否かを問い合わせる負荷融通要求を送信し、該要求に対して許諾する旨の応答を受信すると、前記状態フラグを「負荷融通状態」に設定し、当該他のサーバを示す情報を前記移管先サーバ記憶部に格納して、前記負荷目標値を設定する、請求項２９又は３０に記載のプログラム。
【請求項３２】
前記サーバに、他のサーバから、前記負荷融通要求を受信したときに、自サーバの負荷情報を参照して許諾するか否かを決定し、許諾するときには許諾応答を、拒否するときには拒否応答を返信する処理を実行させる、請求項３１に記載のプログラム。
【請求項３３】
前記サーバに、前記処理サーバ決定ステップで、他のサーバに実行させると決定したときに、前記処理要求に対して、他のサーバをリダイレクト先とするリダイレクト応答をクライアントに送信し、前記処理要求に対する処理を他のサーバで実行させる処理を実行させる、請求項２４〜３２の何れか一に記載のプログラム。
【請求項３４】
前記サーバに、前記処理サーバ決定ステップで、自サーバで実行すると決定したときに、ディスパッチ手段により前記処理要求に対応するアプリケーションを起動し、該アプリケーションの処理結果を、前記クライアントに対する応答として送信する処理を実行させる、請求項２４〜３２の何れか一に記載のプログラム。
【請求項３５】
前記負荷係数決定ステップでは、前記ネットワーク構成情報に基づいて、行及び列を各サーバに対応させ、サーバ間で接続間関係にあるサーバに対応する要素を−１、接続関係にないサーバに対応する要素を０、対角要素をその行に対応するサーバに接続されたサーバの数とする接続行列Ａを作成し、該作成した接続行列Ａに対して、ｌを変数とし、Ｅを単位行列としてＧ＝（−ｌＡ＋Ｅ）の固有値ｋ（ｌ）を求め、全ての固有値ｋ（ｌ）が−１より大きく１以下となる０＜ｌ＜１のうちのｌの最大値を求め、該ｌの最大値を、負荷係数として決定する、請求項２４〜３４の何れか一に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、負荷分散システム、方法、及び、プログラムに関し、更に詳しくは、複数のサーバを有するネットワークシステムにおいて、サーバ負荷を分散させる負荷分散システム、方法、及び、プログラムに関する。
【背景技術】
【０００２】
クライアント−サーバ型のシステムにおいて、クライアントからの処理要求を分散させ、サーバ負荷の分散を図る負荷分散システムがある。従来の負荷分散システムの一例が、非特許文献１に記載されている。図１３に、従来の負荷分散システムの構成を示す。この従来の負荷分散システム５００は、複数のサーバで構成されるサーバ群５０１、負荷分散手段（ロードバランサ）５１０、及び、複数のクライアント端末で構成されるクライアント群５２０を有する。
【０００３】
クライアント群５２０内のクライアント端末（５２０−ａ〜５２０−ｃ）は、サーバへの処理要求を発行する。ロードバランサ５１０は、ネットワーク５３０を介して、クライアント群５２０からの処理要求を受け取り、受け取った処理要求を、サーバ群５０１内のサーバ（５０１−ａ〜５０１−ｆ）の何れかに振り分ける。ロードバランサ５１０は、処理要求を振り分ける際には、例えば、サーバ群５０１内のサーバからランダムにサーバを１つ選択する。クライアントからの処理要求を受信したサーバは、処理要求に従った処理を実行する。特許文献１では、このような構成により、ロードバランサ５１０を用いて、特定のサーバに対して処理が集中しないように制御し、サーバ群５０１内で、サーバの負荷を分散させている。
【０００４】
負荷分散システムの他の例としては、非特許文献２に記載されたものがある。図１４は、非特許文献２に記載された負荷分散システム（ＤＮＳラウンドロビン）の構成を示す。この負荷分散システム６００では、ＤＮＳの仕組みを用いて、サーバの負荷分散を図る。クライアント群６２０内のクライアント端末（６２０−ａ〜６２０−ｃ）は、サーバからのサービスを受けるために、ローカルＤＮＳサーバ６７０に、サーバのＦＱＤＮ（Fully Qualified Domain Name）に対応するＩＰアドレスを質問する。ローカルＤＮＳサーバ６７０は、ＦＱＤＮとＩＰアドレスとの対応関係のエントリを有している（キャッシュしている）か否かを判断し、キャッシュしていなければ、上位のＤＮＳサーバであるＤＮＳロードバランサ６５０に問い合わせを行う。
【０００５】
ＤＮＳロードバランサ６５０は、各サーバ（６０１−ａ、６０１−ｂ）の負荷を定期的に測定している。ＤＮＳロードバランサ６５０は、ローカルＤＮＳサーバ６７０からＩＰアドレスの問い合わせを受けると、負荷が軽いサーバのＩＰアドレスを返答する。ローカルＤＮＳサーバ６７０は、ＤＮＳロードバランサ６５０からＩＰアドレスの返答を受信すると、その応答をキャッシュして内部に保持すると共に、ＩＰアドレスの質問を行ったクライアント端末に、ＩＰアドレスを回答する。ローカルＤＮＳサーバ６７０は、ＦＱＤＮとＩＰアドレスとの対応関係をキャッシュしている場合には、ＤＮＳロードバランサ６５０への問い合わせを行わずに、クライアント端末にＩＰアドレスを回答する。
【０００６】
例えば、クライアント端末６２０−ａは、サーバからのサービスを受けるために、ローカルＤＮＳサーバ６７０に、ＦＱＤＮに対するＩＰアドレスの質問を行う。ローカルＤＮＳサーバ６７０は、ＦＱＤＮとＩＰアドレスとの対応関係をキャッシュしていなければ、上位のＤＮＳロードバランサ６５０に問い合わせを行う。ＤＮＳロードバランサ６５０は、サーバ６０１−ａの負荷が、サーバ６０１−ｂの負荷よりも軽いときには、サーバ６０１−ａのＩＰアドレスを返答する。ローカルＤＮＳサーバ６７０は、回答結果をキャッシュすると共に、クライアント端末６２０−ａに、サーバ６０１−ａのＩＰアドレスを回答する。このようにすることで、クライアント端末６２０−ａは、負荷の軽いサーバ６０１−ａから、サービスを受けることができる。
【０００７】
負荷分散システムの他の例としては、特許文献１に記載されたものもある。図１５は、特許文献１に記載された負荷分散（非集中型負荷分散）システムの構成を示している。負荷分散システム７００は、複数のサーバ７０１を備え、各サーバ７０１が、処理要求検索部７０７と、位置情報解析部７０９と、処理要求転送部７１０とを備える。処理要求検索部７０７は、クライアント端末７０２内のクライアントアプリケーション７０３からの要求に該当するオブジェクトを検索する。その際、処理要求検索部７０７は、自装置（自サーバ）の負荷を参照して、自サーバでの処理が可能か否かを判断する。処理要求検索部７０７は、サーバ負荷が重く、処理が不可能であると判断すると、オブジェクト位置情報管理テーブルを参照して、同じ処理が実行可能なオブジェクトが存在する他のサーバを検索する。
【０００８】
処理要求転送部７１０は、実際に処理を行うサーバを検索するために、処理要求検索部７０７が検索した他のサーバに対して、処理の依頼を行う。この依頼を受けた他のサーバは、処理要求検索部７０７により、そのサーバでの処理が可能か否かを判断し、その結果を、依頼元のサーバに返す。処理要求転送部７１０は、他のサーバでの処理が可能であれば、クライアントアプリケーション７０３に、転送先として、他のサーバを紹介する。処理可能でない場合には、処理可能なサーバの検索を続行する。
【０００９】
更に、負荷分散システムの他の例としては、特許文献２に記載されたものもある。図１６は、特許文献２に記載された負荷分散システムの構成を示している。この負荷分散システム８００は、ネットワークサービスサーバ負荷調整装置８０３を有する。ネットワークサービスサーバ負荷調整装置８０３は、分配率調整部８０７、分配中継部８０４、及び、変換テーブルｖｉｐを有する。分配中継部８０４は、クライアント群８０１からアクセス要求を受けると、受信パケットのヘッダ部にハッシュをかけ、ハッシュ値を基に変換テーブルｖｉｐを検索し、検索したサーバに、受信パケットを転送する。
【００１０】
変換テーブルｖｉｐは、サーバ群８０５の数よりも多い、複数のスロットルから構成されている。ネットワークサービスサーバ負荷調整装置８０３は、サーバ群８０５内の各サーバの応答時間を測定し、応答時間が短いサーバは負荷が軽いサーバと推定して、多くのスロットルを割り当てる。負荷分散システム８００では、多くのスロットルを割り当てたサーバに、多くの受信パケットが転送されることになり、負荷が分散される。この場合、負荷が重いサーバから負荷が軽いサーバにスロットルを割り当てていくことで、割り当てられたサーバの負荷が重くなり、そのスロットルを再割当てするという「振動」が発生する危険性がある。そこで、特許文献２では、割当てスロットル数を徐々に小さくすることで、割当てを収束させている。
【００１１】
【特許文献１】特開２００３−２５６３９０号公報
【特許文献２】特開平１１−０９６１２８号公報
【非特許文献１】トニー  ブルーク著「サーバ負荷分散技術」オライリー・ジャパン、２００１年１２月、ｐｐ．２７−３４
【非特許文献２】トニー  ブルーク著「サーバ負荷分散技術」オライリー・ジャパン、２００１年１２月、ｐｐ．４−８  ＃ＤＮＳラウンドロビン
【発明の開示】
【発明が解決しようとする課題】
【００１２】
従来技術の第１の問題点は、大容量を処理するのに限界があるという点である。その理由は、一部の装置がボトルネックとなり、その装置の性能限界が全体の性能限界になるためである。例えば、非特許文献１に記載されている従来の負荷分散システム５００（図１３）では、クライアントからの全ての要求がロードバランサ５１０を通過することになり、ロードバランサ５１０の性能がシステムの性能限界となる。また、非特許文献２に記載される従来の負荷分散システム６００（図１４）では、ローカルＤＮＳサーバ６７０がシステムの性能限界となり、特許文献２に記載される従来の負荷分散システム８００（図１６）では、ネットワークサービスサーバ負荷調整装置８０３の性能がシステムの性能限界となる。
【００１３】
第２の問題点は、負荷の分散の伝達が遅いという点である。例えば、非特許文献２に記載される従来の負荷分散システム６００（図１４）では、負荷分散情報を一部のＤＮＳサーバで管理し、それがキャッシュされることでローカルＤＮＳサーバ６７０に伝播するが、キャッシュの伝播には時間を要するため、サーバの負荷の変動に、迅速に対応することができない。
【００１４】
第３の問題点は、負荷分散時アルゴリズムが収束しない可能性がある点である。例えば、特許文献１に記載されている従来の負荷分散システム７００（図１５）では、複数の負荷が高いサーバの中に、負荷が低いサーバが存在すると、周りの負荷が高いサーバが、負荷の低いサーバにクライアントの要求を転送することで、負荷が低かったサーバは、複数のサーバから譲り受けた負荷のために、かえって負荷が高くなる。そうすると、そのサーバが、また、他のサーバへとクライアントの要求を転送する。この繰り返しで、クライアントからの要求が転送され続けられ、処理が完了しない。また、転送作業自体にも処理コストがかかるため、本来の処理作業ではなく、転送処理によって負荷が押し上げられるという問題も生じる。
【００１５】
第４の問題点は、特許文献２の負荷分散システム８００（図１６）では、負荷の振動を考慮した負荷分散を行っているが、その場合でも、必ずしもサーバ間の負荷が平準化しないという点である。その理由は、負荷分散システム８００では、負荷の割当ての変更割合を徐々に減らしているが、変更割合を減らしていき、０に近づいたときに、それは複数のサーバに対等に割当てている状態である保証がないためである。
【００１６】
本発明は、上記従来技術の問題点を解消し、ボトルネックなしに大容量の処理ができる負荷分散システム、方法、及び、プログラムを提供することを目的とする。
【００１７】
本発明の他の目的は、負荷情報の遅延なしに負荷分散できる負荷分散システム、方法、及び、プログラムを提供することである。
【００１８】
本発明の他の目的は、収束の保証された負荷分散システム、方法、及び、プログラムを提供することである。
【００１９】
本発明の他の目的は、負荷分散が収束された時点において、サーバ間の負荷が平準化されていることを保証する負荷分散システム、方法、及び、プログラムを提供することである。
【課題を解決するための手段】
【００２０】
上記従来技術の問題点を解消するために、本発明の負荷分散システムは、複数のサーバを有するネットワークシステムのネットワーク構成を記憶するネットワーク構成情報を参照し、負荷係数を決定する負荷係数決定手段と、他のサーバから負荷情報を取得し、自サーバの負荷、及び、他のサーバの負荷と、前記負荷係数とに基づいて、負荷目標値を設定する負荷情報交換手段と、自サーバの負荷と前記負荷目標値とを比較し、自サーバの負荷が前記負荷目標値以下のとき、クライアントからの処理要求に対する処理を自サーバ内で実行させ、自サーバの負荷が前記負荷目標値を超えるとき、前記処理要求に対応する処理を、前記他のサーバで実行させる負荷融通手段とを備えることを特徴とする。
【００２１】
本発明の負荷分散方法は、複数のサーバを有するネットワークシステムで、サーバの負荷を分散させる方法であって、前記サーバが、前記ネットワークシステムのネットワーク構成を記憶するネットワーク構成情報を参照し、負荷係数を決定する負荷係数決定ステップと、前記サーバが、他のサーバとの間で負荷情報を交換し、自サーバの負荷、及び、他のサーバの負荷と、前記負荷係数とに基づいて、負荷目標値を設定する負荷目標値設定ステップと、前記サーバが、自サーバの負荷と前記負荷目標値とを比較し、クライアントからの処理要求に対する処理を、自サーバで実行するか、又は、前記他のサーバに実行させるかを決定する処理サーバ決定ステップとを有し、前記サーバが、前記処理サーバ決定ステップで、自サーバで実行すると決定すると、前記処理を自サーバ内で実行し、他のサーバに実行させると決定すると、前記処理を、前記他のサーバで実行させることを特徴とする。
【００２２】
本発明のプログラムは、複数のサーバを有するネットワークシステムで、サーバの負荷を分散させる処理を前記サーバに実行させるプログラムあって、前記サーバに、前記ネットワークシステムのネットワーク構成を記憶するネットワーク構成情報を参照し、負荷係数を決定する負荷係数決定ステップと、他のサーバとの間で負荷情報を交換し、自サーバの負荷、及び、他のサーバの負荷と、前記負荷係数とに基づいて、負荷目標値を設定する負荷目標値設定ステップと、自サーバの負荷と前記負荷目標値とを比較し、クライアントからの処理要求に対する処理を、自サーバで実行するか、又は、前記他のサーバに実行させるかを決定する処理サーバ決定ステップとを実行させ、前記処理サーバ決定ステップで、自サーバで実行すると決定すると、前記処理を自サーバ内で実行し、他のサーバに実行させると決定すると、前記処理を、前記他のサーバで実行させることを特徴とする。
【００２３】
本発明の負荷分散システム、方法、及び、プログラムでは、ネットワーク構成に基づいて負荷移管量を決定するための負荷係数を決定し、決定した負荷係数と、自サーバ及び他サーバの負荷とに基づいて、負荷目標値を決定する。自サーバの負荷が、負荷目標値よりも高ければ、クライアントからの処理要求に対する処理を他のサーバで実行させてその他のサーバに負荷を移管し、負荷目標値以下であれば、自サーバ内で処理を実行する。本発明では、負荷係数を、ネットワーク構成に基づいて決定し、その負荷係数を用いて、負荷移管を繰り返していったときに各サーバの負荷が同程度の負荷に収束するように負荷目標値を設定することで、負荷が収束し、かつ、サーバ間の負荷を平準化した負荷分散を実現できる。また、その際、処理要求が特定の装置に集中することがないため、ボトルネックなしに大容量の処理が実現できる。
【００２４】
本発明の負荷分散システムでは、前記負荷情報交換手段は、前記自サーバの負荷から、該自サーバの負荷と他のサーバの負荷との差に前記負荷係数を乗じた値を引いた値を、前記負荷目標値として設定する構成を採用できる。負荷目標値は、具体的にはこのような計算により設定すればよい。
【００２５】
本発明の負荷分散システムでは、前記負荷情報交換手段は、前記自サーバの負荷と他のサーバの負荷との比が所定のしきい値を超えると判断すると、負荷融通を行うか否かを示す状態フラグを「負荷融通状態」に設定して前記負荷目標値の設定を行い、前記負荷融通手段は、前記状態フラグが「負荷融通状態」のとき、前記自サーバの負荷と前記負荷目標値との比較を行う構成を採用できる。この場合、負荷情報交換手段は、自サーバの負荷が他サーバの負荷よりも高く、かつ、その比率が所定のしきい値を超えるときに、負荷目標値の設定を行い、状態フラグを「負荷融通状態」に設定して、サーバ状態をサーバ間で負荷を融通する状態に移行させる。負荷融通手段は、クライアントからの処理要求を受けた際に、状態フラグが「負荷融通状態」であるときには、自サーバの負荷と負荷目標値との比較を行い、そのクライアントからの処理要求に対応する処理を、自サーバで行うか、又は、他サーバで行うかを決定する。このような処理により、負荷分散を実現できる。
【００２６】
本発明の負荷分散システムでは、前記負荷融通手段は、前記比較の結果、前記自サーバの負荷が前記負荷目標値以下であると、前記状態フラグを、負荷融通を行わない状態を示す「通常状態」に設定する構成を採用できる。負荷融通手段が自サーバの負荷と負荷目標値との比較を行った結果、自サーバの負荷が負荷目標値以下であれば、クライアントからの処理要求に対する処理は自サーバで行うと決定するので、負荷融通は行われない。そのような場合には、状態フラグを「通常状態」に設定して、「負荷融通状態」を解除すればよい。
【００２７】
本発明の負荷分散システムでは、前記負荷情報交換手段は、前記状態フラグが「負荷融通状態」でないとき、前記他のサーバから負荷情報を取得する構成を採用できる。サーバ状態が「負荷融通状態」でないときには、負荷情報交換手段によって、定期的に他サーバから負荷情報を取得し、取得した他サーバの負荷と自サーバの負荷とを比較する。比較の結果、負荷の比がしきい値を超えるときには、自サーバの負荷及び他サーバの負荷と、負荷係数とに基づいて負荷目標値を設定する。このようにすることで、負荷情報の遅延なしに他サーバの負荷を取得することができ、その他サーバの負荷に基づいて負荷目標値を設定することができる。
【００２８】
本発明の負荷分散システムでは、前記負荷情報交換手段は、前記状態フラグを「負荷融通状態」に設定すると、前記他のサーバを指し示す情報を移管先サーバ記憶部に格納し、前記負荷融通手段は、自サーバの負荷が前記負荷目標値を超えるとき、前記移管先サーバ記憶部を参照して、前記処理要求に対する処理を、該移管先サーバ記憶部に格納されたサーバで実行させる構成を採用できる。
【００２９】
本発明の負荷分散システムでは、前記負荷情報交換手段は、前記自サーバの負荷と他のサーバの負荷との比が所定のしきい値を超えると判断すると、前記他のサーバに負荷融通が可能か否かを問い合わせる負荷融通要求を送信し、該要求に対して許諾する旨の応答を受信すると、前記状態フラグを「負荷融通状態」に設定すると共に、当該他のサーバを示す情報を前記移管先サーバ記憶部に格納する構成を採用できる。また、前記負荷情報交換手段は、他のサーバから、前記負荷融通要求を受信すると、自サーバの負荷情報を参照して許諾するか否かを決定し、許諾するときには許諾応答を、拒否するときには拒否応答を返信する構成を採用できる。負荷の移管先のサーバは、負荷移管を行うサーバよりも負荷は低いが、例えばその後負荷上昇が見込まれる場合など、負荷を受け入れることが不適当な場合もある。そこで、事前に負荷融通要求を送信して、他のサーバに対して負荷の受入れが可能か否かの問い合わせを行う。負荷融通要求を受信した他のサーバは、負荷情報などに基づいて、負荷融通要求を許諾するか否かを決定する。負荷融通要求の発行元のサーバは、負荷融通要求に対して許諾する旨の応答が得られると、許諾応答を送信した他のサーバは、負荷移管先サーバとして記憶する。このようにすることで、相手先の状況に合わせた負荷分散が可能となる。
【００３０】
本発明の負荷分散システムでは、前記負荷融通手段は、自サーバの負荷が前記負荷目標値を超えるとき、前記処理要求に対して、他のサーバをリダイレクト先とするリダイレクト応答をクライアントに送信し、前記処理要求に対する処理を他のサーバで実行させる構成を採用できる。この場合、クライアントは、リダイレクト応答を受け取った後に、リダイレクト先のサーバに処理要求を送信することで、そのリダイレクトサーバから処理応答を得ることができる。
【００３１】
本発明の負荷分散システムでは、前記負荷融通手段は、自サーバの負荷が前記負荷目標値以下であるとき、ディスパッチ手段により前記処理要求に対応するアプリケーションを起動し、該アプリケーションの処理結果を、前記クライアントに対する応答として送信する構成を採用できる。
【００３２】
本発明の負荷分散システムでは、前記負荷係数決定手段は、前記ネットワーク構成情報に基づいて、行及び列を各サーバに対応させ、サーバ間で接続間関係にあるサーバに対応する要素を−１、接続関係にないサーバに対応する要素を０、対角要素をその行に対応するサーバに接続されたサーバの数とする接続行列Ａを作成し、該作成した接続行列Ａに対して、ｌを変数とし、Ｅを単位行列としてＧ＝（−ｌＡ＋Ｅ）の固有値ｋ（ｌ）を求め、全ての固有値ｋ（ｌ）が−１より大きく１以下となる０＜ｌ＜１のうちのｌの最大値を求め、該ｌの最大値を、負荷係数として決定する構成を採用できる。接続行列Ａをこのように作成し、Ｇ＝（−ｌＡ＋Ｅ）に対して、行列Ｇの全ての固有値が−１より大きく、かつ、１より小さくなるｌを選ぶことで、負荷融通を繰り返していった際に、各サーバの負荷を収束させることができる。また、行列Ｇの固有値のうちの１つは「１」であることがわかっており、その固有ベクトルは
【数１】
2008071156.tif 000003
であることから、各サーバの負荷を平準化することができることがわかる。
【００３３】
本発明の負荷分散方法及びプログラムは、前記処理サーバ決定ステップでは、自サーバの負荷と前記負荷目標値とを比較し、自サーバの負荷が前記負荷目標値以下であれば、前記処理を自サーバ内で実行すると決定し、自サーバの負荷が前記目標値を超えるときには、前記他のサーバに実行させると決定する構成を採用できる。
【００３４】
本発明の負荷分散方法及びプログラムは、前記負荷目標値設定ステップでは、前記自サーバの負荷から、該自サーバの負荷と他のサーバの負荷との差に前記負荷係数を乗じた値を引いた値を、前記負荷目標値として設定する構成を採用できる。
【００３５】
本発明の負荷分散方法及びプログラムは、前記負荷目標値設定ステップでは、前記自サーバの負荷と他のサーバの負荷との比が所定のしきい値を超えると判断すると、負荷融通を行うか否かを示す状態フラグを「負荷融通状態」に設定して、前記負荷目標値の設定を行い、前記処理要求を受け付けると、前記状態フラグを参照し、該状態フラグが「負荷融通状態」であれば、前記処理サーバ決定ステップを実行する構成を採用できる。
【００３６】
本発明の負荷分散方法及びプログラムは、前記処理サーバ決定ステップでは、前記処理要求に対する処理を自サーバで実行すると決定すると、前記状態フラグを、負荷融通を行わない状態を示す「通常状態」に設定する構成を採用できる。
【００３７】
本発明の負荷分散方法及びプログラムは、前記負荷目標値設定ステップでは、前記状態フラグを「負荷融通状態」に設定すると、前記他のサーバを指し示す情報を移管先サーバ記憶部に格納する構成を採用できる。
【００３８】
本発明の負荷分散方法及びプログラムでは、前記サーバが前記処理要求に対する処理を他のサーバに実行させると決定すると、前記移管先サーバ記憶部を参照して、該移管先サーバ記憶部に格納されたサーバに、前記処理を実行させる構成を採用できる。
【００３９】
本発明の負荷分散方法及びプログラムは、前記負荷目標値設定ステップでは、前記自サーバの負荷と他のサーバの負荷との比が所定のしきい値を超えると判断すると、前記他のサーバに負荷融通が可能か否かを問い合わせる負荷融通要求を送信し、該要求に対して許諾する旨の応答を受信すると、前記状態フラグを「負荷融通状態」に設定し、当該他のサーバを示す情報を前記移管先サーバ記憶部に格納して、前記負荷目標値を設定する構成を採用できる。
【００４０】
本発明の負荷分散方法及びプログラムでは、前記サーバが他のサーバから、前記負荷融通要求を受信すると、自サーバの負荷情報を参照して許諾するか否かを決定し、許諾するときには許諾応答を、拒否するときには拒否応答を返信する構成を採用できる。
【００４１】
本発明の負荷分散方法及びプログラムでは、前記処理サーバ決定ステップで、他のサーバに実行させると決定すると、前記処理要求に対して、他のサーバをリダイレクト先とするリダイレクト応答をクライアントに送信し、前記処理要求に対する処理を他のサーバで実行させる構成を採用できる。
【００４２】
本発明の負荷分散方法及びプログラムでは、前記処理サーバ決定ステップで、自サーバで実行すると決定すると、ディスパッチ手段により前記処理要求に対応するアプリケーションを起動し、該アプリケーションの処理結果を、前記クライアントに対する応答として送信する構成を採用できる。
【００４３】
本発明の負荷分散方法及びプログラムは、前記負荷係数決定ステップでは、前記サーバは、前記ネットワーク構成情報に基づいて、行及び列を各サーバに対応させ、サーバ間で接続間関係にあるサーバに対応する要素を−１、接続関係にないサーバに対応する要素を０、対角要素をその行に対応するサーバに接続されたサーバの数とする接続行列Ａを作成し、該作成した接続行列Ａに対して、ｌを変数とし、Ｅを単位行列としてＧ＝（−ｌＡ＋Ｅ）の固有値ｋ（ｌ）を求め、全ての固有値ｋ（ｌ）が−１より大きく１以下となる０＜ｌ＜１のうちのｌの最大値を求め、該ｌの最大値を、負荷係数として決定する構成を採用できる。
【発明の効果】
【００４４】
本発明の負荷分散システム、方法、及び、プログラムでは、ネットワーク構成に基づいて負荷移管量を決定するための負荷係数を決定し、決定した負荷係数と、自サーバ及び他サーバの負荷とに基づいて、負荷目標値を決定する。自サーバの負荷が、負荷目標値よりも高ければ、クライアントからの処理要求に対する処理を他のサーバで実行させ、負荷目標値以下であれば、自サーバ内で処理を実行する。本発明では、負荷係数を、ネットワーク構成に基づいて決定し、その負荷係数を用いて、負荷移管を繰り返していったときに各サーバの負荷が同程度の負荷に収束するように負荷目標値を設定することで、負荷が収束し、かつ、サーバ間の負荷を平準化した負荷分散を実現できる。また、その際、処理要求が特定の装置に集中することがないため、ボトルネックとなる装置が存在せず、大容量の処理が実現できる。
【発明を実施するための最良の形態】
【００４５】
以下、図面を参照し、本発明の実施の形態を詳細に説明する。図１は、本発明の第１実施形態の負荷分散システムの構成を示している。負荷分散システム１００は、ネットワーク３１０を介して相互に接続された複数のサーバ２００を有する。サーバ２００は、プログラム制御により動作する中央処理装置（ＣＰＵ）２４０、トランスポートスタック２３０、負荷融通手段２２０、ディスパッチ手段２１０、アプリケーション群３００、負荷計測手段２９０、負荷情報交換手段２８０、及び、負荷係数決定手段２６０を有する。また、負荷目標値３３０、移管先サーバ名３３５、状態フラグ３４０、融通しきい値２７０、負荷係数２８５、及び、ネットワーク構成情報２５０を記憶するレジスタ等の記憶手段を有する。
【００４６】
サーバ２００は、図示しないクライアントからの処理要求を受け付け、要求に応じたサービスを実施し、クライアントに処理応答を送信する。トランスポートスタック２３０は、ネットワーク３１０に接続されており、クライアントや他サーバからの各種要求を受け付けて応答する。負荷計測手段２９０は、中央処理装置２４０やトランスポートスタック２３０の状況を観測し、サーバ２００の負荷を計測する。状態フラグ３４０は、装置状態を管理するためのフラグを格納する。状態フラグ３４０に格納されるフラグには、サーバ間で負荷移管（負荷融通）を行う状態を示す「負荷融通状態」と、負荷の移管を行わない状態を示す「通常状態」とがある。
【００４７】
負荷情報交換手段２８０は、状態フラグ３４０が「通常状態」であれば、定期的にネットワーク３１０を通じて他のサーバと通信し、負荷計測手段２９０が得た負荷情報を交換する。状態フラグ３４０が「負荷融通状態」であれば、負荷情報の交換は行わない。負荷情報交換手段２８０は、例えば周期的にタイムアウトを発生するタイマ３２０がタイムアウトを発生するタイミングで負荷情報の交換を行う。負荷情報交換手段２８０は、他のサーバの負荷を取得すると、自サーバの負荷と他サーバとの負荷の比を計算し、その値が、負荷移管を開始する際の判断基準となる融通しきい値２７０よりも大きいか否かを判断する。負荷情報交換手段２８０は、負荷の比が融通しきい値２７０よりも大きいと判断すると、他のサーバに負荷融通要求を送信する。負荷情報交換手段２８０は、負荷融通要求に対して許諾する旨の応答を受け取ると、負荷の移管先を示す移管先サーバ名３３５に他のサーバを指し示す情報を格納し、状態フラグ３４０を「負荷融通状態」にセットする。
【００４８】
負荷係数決定手段２６０は、サーバ間の接続状況に関する情報を含むネットワーク構成情報２５０を参照して、負荷係数２８５を決定する。負荷係数２８５は、自サーバの負荷と、他のサーバの負荷とを照らし合わせて、前者の負荷が高い場合に、負荷の差のどれくらいを他のサーバに移管するかを定めるための比例係数である。負荷情報交換手段２８０は、「負荷融通状態」への移行に際して、自サーバの負荷、自サーバの負荷と他サーバの負荷との差、及び、負荷係数２８５に基づいて、負荷目標値３３０を設定する。具体的には、自サーバの負荷から、自サーバの負荷と他のサーバの負荷との差に負荷係数２８５を乗じた値を減算した値を、負荷目標値３３０として設定する。負荷目標値３３０は、「負荷融通状態」におけるサーバ負荷の目標値を示す。
【００４９】
トランスポートスタック２３０は、クライアントから要求を受信すると、受信した要求を負荷融通手段２２０に渡す。負荷融通手段２２０は、状態フラグ３４０を参照して「通常状態」であるか、或いは、「負荷融通状態」であるかを判断する。負荷融通手段２２０は、「通常状態」であれば、負荷の移管は行わずに自サーバ内で処理を実行すると決定し、ディスパッチ手段２１０に、クライアントからの要求を渡す。状態フラグ３４０が「負荷融通状態」であれば、負荷計測手段２９０が計測したサーバ負荷が負荷目標値３３０を超えるか否かを判断する。超える場合には、負荷の移管を行うと決定し、移管先サーバ名３３５で示されるサーバへのリダイレクト応答を、クライアントに返す。負荷目標値３３０を超えない場合には、自サーバ内で処理を実行すると決定し、クライアントからの要求をディスパッチ手段２１０へ渡す。
【００５０】
ディスパッチ手段２１０は、負荷融通手段２２０から、クライアントからの処理要求を受け取ると、その処理要求が必要とするサービスを提供するアプリケーションを、アプリケーション群３００の中から選択し起動する。アプリケーション群３００は、ディスパッチ手段２１０から受け取ったクライアントの要求に基づいてサービスを実行し、その結果を、クライアントに対する応答としてディスパッチ手段２１０に返す。
【００５１】
図２は、負荷分散システム１００の全体的な処理の流れを示しててる。サーバ２００は、通信パケットの受信や、タイマ３２０からのトリガーなどのイベント発生を待つ（ステップＺ１１０）。イベントが発生すると、発生したイベントに従って、適切な処理にディスパッチする（ステップＺ１２０）。周期的にタイマ３２０が起動したときには、負荷情報交換処理を実行する（ステップＺ１３０）。他のサーバから負荷情報交換要求を受信したときには、負荷情報提供処理を実行する（ステップＺ１４０）。他のサーバから負荷融通要求を受信した場合には、負荷融通要求処理を実行する（ステップＺ１５０）。クライアントからの要求を受信した場合には、クライアント要求処理を実行する（ステップＺ１６０）。
【００５２】
図３は、ステップＺ１３０の負荷情報交換処理の詳細な手順を示している。負荷情報交換手段２８０は、タイマ起動により、周期的に、近傍の他のサーバとの間で負荷情報交換処理を行う。この負荷情報交換は、サーバ２００の近傍に、そのサーバ２００に接続する他のサーバが複数あるときには、そのそれぞれとの間で周期的に行う。具体的には、近傍にサーバＡとサーバＢとの２台が存在する場合には、タイマ３２０により、サーバＡとの間で負荷情報の交換を行うべきタイミング、及び、サーバＢとの間で情報交換を行うべきタイミングの双方でタイムアウトを発生させ、サーバＡとの間で周期的に負荷情報交換を行うと共に、サーバＢとの間でも周期的に負荷情報交換を行う。
【００５３】
負荷情報交換処理では、負荷情報交換手段２８０は、状態フラグ３４０を参照し、状態フラグ３４０が「通常状態」であるか、「負荷融通状態」であるかを判断する（ステップＡ２１０）。「負荷融通状態」であれば、そのまま処理を完了する。状態フラグ３４０が「通常状態」であれば、負荷情報交換手段２８０は、負荷情報交換の対象となる近傍の他のサーバとネットワーク３１０を介して通信し、負荷情報要求を送信して、当該他のサーバから、負荷情報を取得する（ステップＡ２２０）。
【００５４】
負荷情報交換手段２８０は、負荷情報を取得すると、取得した他のサーバの負荷情報、及び、自身の負荷情報に基づいて、負荷の比が、融通しきい値２７０を超えるか否かを判断する（ステップＡ２３０）。より詳細には、サーバ２００（Ｓ）の負荷をＳ．ｌ、他のサーバ（Ｓ’）の負荷をＳ’．ｌとし、融通しきい値２７０の値をＤとして、Ｓ．ｌ／Ｓ’．ｌ＞Ｄが成立するか否かを判断する。成立しない場合には、そのまま処理を完了する。成立する場合には、負荷情報交換手段２８０は、他のサーバに対して、負荷融通を要求する（ステップＡ２４０）。負荷情報交換手段２８０は、他のサーバから、負荷融通要求に対する応答を受信すると（ステップＡ２５０）、負荷融通の許諾が得られたか否かを判断する（ステップＳ２６０）。他のサーバから許諾が得られなかったときには、そのまま処理を完了する。
【００５５】
負荷情報交換手段２８０は、他のサーバから許諾が得られると、状態フラグ３４０を「負荷融通状態」にセットし、負荷融通状態に移行する（ステップＡ２７０）。その際、負荷情報交換手段２８０は、他のサーバのサーバ名を、移管先サーバ名３３５に格納する。また、負荷計測手段２９０によって計測された自サーバの負荷と、他のサーバの負荷と、負荷係数２８５とに基づいて、負荷目標値３３０を決定する。より詳細には、ｋｌを負荷係数２８５に格納された係数値として、Ｓ．ｌ−ｋｌ×（Ｓ．ｌ−Ｓ’．ｌ）を負荷目標値に設定する。
【００５６】
図４は、図２のステップＺ１４０の負荷情報提供処理の詳細手順を示している。図３のステップＡ２２０で送信された負荷情報要求は、他のサーバ２００の負荷情報交換手段２８０により受信される。負荷情報交換手段２８０は、負荷情報要求を受信すると（ステップＢ１１０）、負荷計測手段２９０により、自サーバの負荷を計測する（ステップＢ１２０）。負荷情報交換手段２８０は、負荷計測手段２９０が計測した負荷情報を、負荷情報要求の発行元のサーバに対して送信する（ステップＢ１３０）。
【００５７】
図５は、図２のステップＺ１５０の負荷融通要求処理の詳細手順を示している。サーバ２００は、図３のステップＡ２４０で他のサーバから送信された負荷融通要求を受信する（ステップＣ１１０）。負荷情報交換手段２８０は、サーバ状態に基づいて、負荷受入れを受諾するか否かを判断する（ステップＣ１２０）。この受入れ判断では、サーバ負荷計測手段２９０が計測したサーバ負荷を参照し、例えば、サーバ負荷が軽い場合（所定のしきい値よりも低い場合）には、負荷受入れを受諾すると判断する。ただし、その場合でも、サーバ状態を考慮して、クライアントが利用するアプリケーションがまだインストールされておらず、インストール時間を考慮すると負荷融通要求の受入れが得策でないときには、拒絶する。負荷情報交換手段２８０は、受入れ可能と判断すると、許諾応答を、要求発行元のサーバに返信し（ステップＣ１３０）、受入れ不可と判断すると、拒絶応答を、要求発行元のサーバに返信する（ステップＣ１４０）。
【００５８】
図６は、図２のステップＺ１６０のクライアント要求処理の詳細手順を示している。トランスポートスタック２３０は、クライアントからの処理要求を受信する（ステップＤ１１０）。トランスポートスタック２３０が受信したクライアントからの処理要求は、負荷融通手段２２０に渡される。負荷融通手段２２０は、状態フラグ３４０を参照し、状態フラグ３４０が「通常状態」であるか「負荷融通状態」であるかを調べる（ステップＤ１２０）。
【００５９】
負荷融通手段２２０は、状態フラグ３４０が「通常状態」であると判断すると、負荷の移管は行わないと決定し、クライアントからの要求をディスパッチ手段２１０に渡す。ディスパッチ手段２１０は、受け取ったクライアントからの要求に基づいて、アプリケーション群３００から適切なサーバ群を選択し、アプリケーションを起動する（ステップＤ１６０）。起動したアプリケーションは、処理要求に応じた適切な処理を実行し、ディスパッチ手段２１０に応答（処理結果）を返す（ステップＤ１７０）。アプリケーションが作成した応答は、ディスパッチ手段２１０、負荷融通手段２２０、及び、トランスポートスタック２３０を介して、クライアントに返信される（ステップＤ１８０）。
【００６０】
負荷融通手段２２０は、ステップＤ１２０で、状態フラグ３４０が「負荷融通状態」であると判断すると、負荷計測手段２９０により、サーバ２００の負荷を計測する（ステップＤ１３０）。負荷融通手段２２０は、計測されたサーバ２００の負荷と、負荷目標値３３０とを比較し、サーバ２００の負荷が、負荷目標値３３０以上であるか否かを判断する（ステップＤ１４０）。負荷融通手段２２０は、サーバ負荷が負荷目標値３３０以上でないと判断すると、負荷の移管は行わないと決定し、状態フラグ３４０や負荷目標値３３０、移管先サーバ名３３５をリセットする（ステップＤ１５５）。その後、ステップＤ１６０へ進み、クライアントからの要求をディスパッチ手段２１０に渡し、ディスパッチ手段２１０によりアプリケーションを起動して、要求に対する応答をクライアントに返信する。
【００６１】
ステップＤ１４０での比較の結果、サーバ２００の負荷が、負荷目標値３３０以上である場合には、負荷の移管を行うと決定する。この場合、負荷融通手段２２０は、移管先サーバ名３３５を参照し、移管先サーバ名３３５が示すサーバをリダイレクト先とするリダイレクト応答を作成する（ステップＤ１５０）。負荷融通手段２２０が作成したリダイレクト応答は、トランスポートスタック２３０を介して、クライアントに返信される。
【００６２】
図７は、クライアントの動作手順を示している。クライアントは、ＨＴＴＰ等のリダイレクトで定義されるように、図７に示す手順で動作する。すなわち、クライアントは、あらかじめ決められたサーバ２００に処理要求を発行する（ステップＥ１１０）。この処理要求を受け取ったサーバ２００は、図６に示す手順に従って、処理結果、又は、リダイレクト応答を返信する。クライアントは、サーバ２００からの応答を受信し（ステップＥ１２０）、受信した応答の種類を判別する（ステップＥ１３０）。サーバ２００から受け取った応答が、処理結果であれば、処理結果を受信して（ステップＥ１４０）、処理を終了する。応答がリダイレクト応答であれば、クライアントは、指定されたリダイレクト先にサクセスサーバを変更し（ステップＥ１５０）、ステップＥ１１０に戻って、リダイレクト先にサーバに処理要求を送信する。
【００６３】
次に、負荷係数２８５の決定について詳細について説明する。図８に、手順を示す。負荷係数２８５は、負荷目標値の決定に用いられ、他のサーバにどの程度の負荷を移管するかを決定するために用いられる。負荷係数決定手段２６０は、所定のタイミングで、例えばシステムの立ち上げ時に、ネットワーク構成情報２５０を読み込む（ステップＦ１１０）。負荷係数決定手段２６０は、読み込んだネットワーク構成情報２５０を参照して、ネットワーク構成（サーバ間の接続状態）を表す接続行列を作成する（ステップＦ１２０）。
【００６４】
接続行列Ａは、次のように定義する。
【数２】
2008071156.tif 000004
上記接続行列Ａにおいて、Ｎ（ｉ）は、サーバｉと接続されているサーバの集合である。すなわち、システムを構成するｎ台のサーバうちのｉ番目のサーバとｊ番目のサーバとが接続関係にある場合には、（ｉ，ｊ）成分及び（ｊ，ｉ）成分を「−１」にし、対角成分（ｉ，ｉ）をｉ番目に接続されたサーバに接続されたサーバの数とする。接続行列Ａでは、任意の要素αi,jについて、
【数３】
2008071156.tif 000005
が成立する。
【００６５】
負荷係数決定手段２６０は、上記接続行列Ａに対して、Ｇ＝（−ｌＡ＋Ｅ）（Ｅは単位行列）の固有値を求める。一般に、ｎ×ｎの正方行列では、固有値はｎ個ある。固有値をｋ（ｌ）とすると、全ての固有値ｋ（ｌ）が−１よりも大きく、かつ、１以下になるような０＜ｌ＜１の範囲のｌの値を求め、そのうちの最大値を求める（ステップＦ１３０）。このようにして求めた０＜ｌ＜１の範囲のｌの最大値を、負荷移管係数として、負荷係数２８５に格納する（ステップＦ１４０）。
【００６６】
本実施形態の効果について説明する。本実施形態では、クライアントからの要求の全てが、特定の装置を通らずに、それぞれのサーバに送信される。このため、ボトルネックとなる装置が存在せず、大容量の負荷にも対応することが可能である。また、本実施形態では、サーバ同士は、周期的に、負荷情報交換手段２８０によって負荷情報を交換し、負荷目標値３３０を設定する。このため、サーバの負荷情報は、その周期よりも古い情報となることがない。従って、本実施形態では、キャッシュにより古いサーバ情報が残るＤＮＳラウンドロビンに比して、最新の負荷情報による負荷分散が可能である。
【００６７】
更に、本実施形態では、接続行列Ａに対して、Ｇ（−ｌＡ＋Ｅ）の固有値が−１より大きく、１以下になるように、負荷係数２８５を求め、この負荷係数２８５を用いて負荷目標値３３０を決定する。このようにすることで、他のサーバとの間で負荷移管を繰り返した際に、サーバ負荷が平準化された負荷分散を実現できる。以下、サーバ負荷の平準化について、詳細に説明する。
【００６８】
ｔ回目の負荷移管によるサーバｉの負荷を、ｘi,tで表す。各サーバでのｔ回目の負荷交換プロトコルの結果の負荷を、
【数４】
2008071156.tif 000006
とおく。ｔ＋１回目の負荷移管によるサーバｉの負荷は、ｔ回目の負荷移管によるサーバｉの負荷ｘi,tを用いて、
【数５】
2008071156.tif 000007
と表すことができる。ｌは、負荷係数２８５の値である。これを変形すると、ｔ＋１回目の負荷と、ｔ回目の負荷との差は、
【数６】
2008071156.tif 000008
と表すことができる。接続行列を用いると、各サーバにおけるｔ＋１回目の負荷と、ｔ回目の負荷との差は、
【数７】
2008071156.tif 000009
と表すことができる。すなわち、
【数８】
2008071156.tif 000010
である。
【００６９】
一般に、Ｇ＝（−ｌＡ＋Ｅ）の固有値が−１よりも大きく、かつ、１以下であれば、
【数９】
2008071156.tif 000011
は収束するので、負荷係数決定手段２６０が、固有値がこの範囲に収まるようにｌを設定すれば、
【数１０】
2008071156.tif 000012
は収束する。また、このとき、全ての固有値が０以上、かつ、１以下であれば、負荷は単調に収束する。固有値については、
【数１１】
2008071156.tif 000013
のため、固有値のうち、ひとつは１であることがわかっており、その固有ベクトルは、
【数１２】
2008071156.tif 000014
である。初期負荷ベクトルｘ０を固有ベクトルの一次結合に分解し、ｔを無限大に近付けたとき負荷ベクトルｘｔのリミットを考えると、１以外の固有値は−１よりも大きく、かつ、１よりも小さいので０に収束し、最終的に、固有ベクトルの一次結合のうちの
【数１３】
2008071156.tif 000015
の成分のみが残る。従って、負荷移管を繰り返すことで、負荷は平準化する。
【００７０】
以下、具体例を用いて説明する。図９は、実施例１の負荷分散システムの構成を示している。本実施例では、サーバ２００として、サーバＡ２００−ａ、サーバＢ２００−ｂ、及び、サーバＣ２００−ｃの３台のサーバを考える。また、サーバＡ２００−ａとサーバＢ２００−ｂ、及び、サーバＢ２００−ｂとサーバＣ２００−ｃとが相互認識し、定期的に負荷情報の交換を行っているもとする。この構成では、負荷係数決定手段２６０が、図８のステップＦ１１０で、ネットワーク構成情報２５０（図１）を読み込んで作成する接続行列Ａは、下記のようになる。
【数１４】
2008071156.tif 000016
上記接続行列Ａでは、１行目及び１列目がサーバＡ２００−ａに対応し、２行目及び２列目がサーバＢ２００−ｂに対応している。また、３行目及び３列目は、サーバＣ２００−ｃに対応している。
【００７１】
負荷係数決定手段２６０は、ステップＦ１３０で、作成した接続行列Ａを用いて、
【数１５】
2008071156.tif 000017
の固有値を求める。その結果、ｋ０＝１−３ｌ、ｋ１＝−ｌ＋１、ｋ２＝１となる。単調に収束させるために、全ての固有値を０以上でかつ１以下にするには、０≦ｌ≦（１／３）かつ０≦ｌ≦１なので、これらを満たすｌの最大値は１／３である。負荷係数決定手段２６０は、図８のステップＦ１４０で、「１／３」を負荷係数２８５に格納する。
【００７２】
次に、サーバＡ２００−ａには、クライアント４００−ａ、４００−ｂがアクセスし、サーバＢ２００−ｂには、クライアント４００−ｃ、４００−ｄがアクセスしているものとする。また、サーバＣ２００−ｃには、クライアント４００−ｅ、４００−ｆがアクセスしているものとする。当初、各クライアントは、１０アクセス／秒でアクセスしていたとする。あるときに、サーバＢ２００−ｂにアクセスするクライアント４００−ｃのアクセス頻度が３０アクセス／秒に増えたとする。そうすると、サーバＢ２００−ｂの負荷は、２０アクセス／秒から４０アクセス／秒に増えることになる。
【００７３】
サーバＡ２００−ａ及びサーバＢ２００−ｂは、負荷情報交換手段２８０により、定期的に、互いの負荷情報を交換している（図２のステップＺ１３０）。サーバＢ２００−ｂは、サーバＡ２００−ａから負荷情報を取得することで、サーバＡ２００−ａの負荷が２０アクセス／秒であることを知る（図３のステップＡ２２０）。融通しきい値２７０をＤ＝１．５とすると、サーバＢ２００−ｂの負荷と、サーバＡ２００−ａの負荷の比は、（４０／２０）＞１．５となるので、ステップＡ２３０からステップＡ２４０に移行し、サーバＢ２００−ｂは、サーバＡ２００−ａに対して、負荷融通を依頼する。
【００７４】
サーバＡ２００−ａは、図５のステップＣ１１０で、負荷融通要求を受信すると、ステップＣ１２０で、負荷が受入れ可能であるか否かをチェックする。負荷移管による問題がない場合、サーバＡ２００−ａは、ステップＣ１３０で、負荷融通要求に対して、許諾応答をする。サーバＢ２００−ｂは、図３のステップＡ２５０で、サーバＡ２００−ａから許諾応答を受け取ると、負荷情報交換手段２８０により、状態フラグ３４０を「負荷融通状態」に設定し、移管先サーバ名３３５をサーバＡに設定する。また、ステップＡ２７０で、負荷目標値３３０を、４０−（１／３）×（４０−２０）＝３３に設定する。
【００７５】
サーバＢ２００−ｂは、図６のステップＤ１１０で、クライアントからの要求処理を受けると、ステップＤ１２０で、状態フラグ３４０を調べる。状態フラグ３４０が「負荷融通状態」であるので、ステップＤ１３０へ移行して、負荷計測手段２９０により、サーバＢ２００−ｂの負荷を計測する。その結果、例えば、負荷が４０アクセス／秒であることがわかる。負荷融通手段２２０は、負荷（４０アクセス／秒）と、負荷目標値３３０（３３アクセス／秒）とを比較する。負荷が目標値よりも大きいので、ステップＤ１４０からステップＤ１５０へ移行して、サーバＢ２００−ｂは、負荷融通手段２２０により、移管先サーバ名３３５で示すサーバＡ２００−ａへのリダイレクト応答を作成し、トランスポートスタック２３０を通じて、クライアントに、リダイレクト応答を返す。
【００７６】
クライアントは、図７のステップＥ１２０で、サーバＢ２００−ｂからリダイレクト応答を受信する。リダイレクト応答を受けとったクライアントは、ステップＥ１５０で、指令されたリダイレクト先であるサーバＡ２００−ａにアクセス先を変更し、ステップＥ１１０に戻って、サーバＡ２００−ａに処理要求を送信する。このようにして、サーバＢ２００−ｂに対するクライアントからの処理要求を、負荷が目標値に下がるまで、サーバＡ２００−ａにリダイレクトすることで、負荷分散を実現する。
【００７７】
次に、別の具体例を用いて説明する。図１０は、実施例２の負荷分散システムの構成を示している。本実施例では、サーバ２００として、サーバＡ２００−ａ、サーバＢ２００−ｂ、サーバＣ２００−ｃ、及び、サーバＤ２００−ｄの４つのサーバを考える。これらは、互いに相互認識し、定期的に負荷情報の交換を行っている。この構成では、図８のステップＦ１１０で、負荷係数決定手段２６０が、ネットワーク構成情報２５０（図１）を読み込んで作成する接続行列Ａは、下記のようになる。
【数１６】
2008071156.tif 000018
【００７８】
負荷係数決定手段２６０が、ｌ＝０．４と設定すると、行列Ｇ＝（−ｌＡ＋Ｅ）の１を除く固有値のうちで、絶対値が最大となる固有値は−０．８４となり、この値は、−１より大きく１以下である。従って、負荷は収束する。図１１に、各サーバの負荷の変化の様子を示す。この例では、融通しきい値Ｄは１．２とした。同図では、縦軸はサーバの負荷を表し、横軸は時間を表している。同図を参照すると、４台のサーバのうちの１台に負荷をかけた場合に、他の３台のサーバとの間で負荷を融通することで、最終的に、サーバ間で負荷が平準化できることがわかる。比較例として、同じ条件で、ｌ＝０．８としたときのサーバ負荷の変化の様子を図１２に示す。この場合には、固有値のうちで絶対値が最大となるものは−２．７となるので、負荷移管を繰り返しても、同図に示すように各サーバの負荷は変動し、平準化されない。
【００７９】
なお、融通しきい値２７０について、他サーバへの負荷の移管は、負荷の比が融通しきい値を超えるときに行われるため、融通しきい値は、最終的には、平準化された負荷のサーバ間でのばらつきを示すことになる。この値を１とすると、負荷移管が頻発してかえって効率が落ちるため、融通しきい値は、１．１〜１．５程度の値とすることが好ましい。
【００８０】
以上、本発明をその好適な実施形態に基づいて説明したが、本発明の負荷分散システム、方法、及び、プログラムは、上記実施形態にのみ限定されるものではなく、上記実施形態の構成から種々の修正及び変更を施したものも、本発明の範囲に含まれる。
【産業上の利用可能性】
【００８１】
本発明は、クライアントからの大量の負荷を処理するロードバランサといった用途に適用できる。また、センサーやＲＦＩＤからの大量の負荷を処理するロードバランサといった用途にも適用可能である。
【図面の簡単な説明】
【００８２】
【図１】本発明の第１実施形態の負荷分散システムの構成を示すブロック図。
【図２】負荷分散システムの全体的な処理の流れを示すフローチャート。
【図３】負荷情報交換処理の詳細な手順を示すフローチャート。
【図４】負荷情報提供処理の詳細な手順を示すフローチャート。
【図５】負荷融通要求処理の詳細な手順を示すフローチャート。
【図６】クライアント要求処理の詳細手順を示すフローチャート。
【図７】クライアントの動作手順を示すフローチャート。
【図８】負荷係数の決定の手順を示すフローチャート。
【図９】実施例１の負荷分散システムの構成を示すブロック図。
【図１０】実施例２の負荷分散システムの構成を示すブロック図。
【図１１】実施例２における各サーバの負荷の変化の様子を示すグラフ。
【図１２】比較例における各サーバの負荷の変化の様子を示すグラフ。
【図１３】従来の負荷分散システムの構成を示すブロック図。
【図１４】従来の負荷分散システム（ＤＮＳラウンドロビン）の構成を示すブロック図。
【図１５】従来の負荷分散（非集中型負荷分散）システムの構成を示すブロック図。
【図１６】従来の負荷分散システムの構成を示すブロック図。
【符号の説明】
【００８３】
１００：負荷分散システム
２００：サーバ
２１０：ディスパッチ手段
２２０：負荷融通手段
２３０：トランスポートスタック
２４０：ＣＰＵ
２５０：ネットワーク構成情報
２６０：負荷係数決定手段
２７０：融通しきい値
２８０：負荷情報交換手段
２８５：負荷係数
２９０：負荷計測手段
３００：アプリケーション群
３１０：ネットワーク
３２０：タイマ
３３０：負荷目標値
３３５：移管先サーバ名
３４０：状態フラグ
４００：クライアント
【図１】
2008071156.tif 000019
【図２】
2008071156.tif 000020
【図３】
2008071156.tif 000021
【図４】
2008071156.tif 000022
【図５】
2008071156.tif 000023
【図６】
2008071156.tif 000024
【図７】
2008071156.tif 000025
【図８】
2008071156.tif 000026
【図９】
2008071156.tif 000027
【図１０】
2008071156.tif 000028
【図１１】
2008071156.tif 000029
【図１２】
2008071156.tif 000030
【図１３】
2008071156.tif 000031
【図１４】
2008071156.tif 000032
【図１５】
2008071156.tif 000033
【図１６】
2008071156.tif 000034