(57)【要約】負荷の移動を行なわない状態での第１のノードのレスポンス性を示す評価値Ｄｓ、負荷を移動したと仮定した状態での第１及び第２のノードを接続する経路のレスポンス性を示す評価値Ｄｎ、負荷を第１のノードから受け取ったと仮定した状態での第２のノードのレスポンス性を示す評価値Ｄｒを求め、Ｄｓと和Ｄｒ＋Ｄｎの大小の比較結果に応じて移動の要否を判定する。図２
2014024612.tif 000002
【特許請求の範囲】
【請求項１】
それぞれのノードが少なくとも一本の経路を介して他のノードに接続された複数のノードからなり、第１のノードＮ１と、第１のノードＮ１と経路Ｐを介して接続された第２のノードＮ２とを少なくとも含み、
第１のノードＮ１が現に担っている負荷量であって、第２のノードＮ２に移すべきか否かの検討の対象となる負荷量λｘを定める手段、
第１のノードが現に保持する負荷要素の中から、負荷量λｘに相当する負荷を第１のノードＮ１に生じさせる負荷要素を選択する手段、
前記選択した負荷要素に起因して発生する負荷を含む負荷全体を担うときの第１のノードＮ１のレスポンス性を評価する評価値Ｄ１、経路Ｐが現に担っている負荷に加えて、前記選択した負荷要素の搬送に起因して発生する負荷が経路Ｐに生じたと仮定したときの経路Ｐのレスポンス性を評価する評価値Ｄｎ、第２のノードが現に担っている負荷に加えて、前記選択した負荷要素に起因して発生する負荷を担うことにより第２のノードＮ２に生じる負荷を第２のノードＮ２が担うと仮定したときの第２のノードＮ２のレスポンス性を評価する評価値Ｄ２をそれぞれ求める手段、及び、
Ｄ１と和Ｄ２＋Ｄｎの大小の比較結果に応じて、前記移動負荷要素を移動するか否かを判定する手段
を備えることを特徴とするコンピュータネットワークシステム。
【請求項２】
前記負荷要素はデータオブジェクトｄであり、前記負荷要素に起因して発生する負荷は、前記データオブジェクトｄをそのノードが保持することに起因してそのノードが担う負荷であることを特徴とする請求項１に記載のコンピュータネットワークシステム。
【請求項３】
第１のノードＮ１、第２のノードＮ２、経路Ｐのそれぞれに対して、その性能に応じた関数であって、そのノード或いは経路が現に担う或いは搬送する負荷量λを少なくとも変数とする凸関数である、評価関数ｆ１、ｆ２、ｆｎを予め定め、
評価値Ｄ１を評価関数ｆ１に基づいて定め、評価値Ｄ２を評価関数ｆ２に基づいて定め、評価値Ｄｎを評価関数ｆｎに基づいて定める
ことを特徴とする請求項２に記載のコンピュータネットワークシステム。
【請求項４】
評価値Ｄ１を評価関数ｆ１の微分に基づいて定め、
評価値Ｄ２を評価関数ｆ２の微分に基づいて定め、
評価値Ｄｎを評価関数ｆｎの微分に基づいて定める
ことを特徴とする請求項３に記載のコンピュータネットワークシステム。
【請求項５】
Ｋを予め定められた比例定数とするとき、λｘ＝Ｋ（ｄｆｓ／λｓ−ｄｆｒ／λｒ）から負荷量λｘを求めることを特徴とする請求項３及び４のいずれかに記載のコンピュータネットワークシステム。
【請求項６】
前記第１のノードＮ１、前記第２のノードＮ２、前記経路Ｐの単位時間当たりの処理能力に応じて定められる係数をそれぞれ順にμｍａｘ，１、μｍａｘ，２、μｍａｘ，ｎとするとき、前記評価値Ｄ１、Ｄ２、Ｄｎと前記評価関数ｆ１、ｆ２、ｆｎの間に以下の数１の関係があることを特徴とする請求項３乃至５のいずれかに記載のコンピュータネットワークシステム。
2014024612.tif 000015
【請求項７】
関数ｇｄを、データオブジェクトｄに関するｍ種類（ｍは自然数）の観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄを変数とする予め定められた関数とするとき、データオブジェクトｄを保持するノードに、データオブジェクトｄに起因して発生する負荷λｄを、関数ｇｄに基づいて求める手段を備えることを特徴とする請求項６に記載のコンピュータネットワークシステム。
【請求項８】
観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄのいずれかがデータオブジェクトｄへのアクセス頻度であることを特徴とする請求項７に記載のコンピュータネットワークシステム。
【請求項９】
観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄのいずれかがデータオブジェクトｄのレプリカ数であることを特徴とする請求項７及び８のいずれかに記載のコンピュータネットワークシステム。
【請求項１０】
前記負荷要素は処理であり、前記負荷要素に起因して発生する負荷は、その処理をそのノードが実行することに起因してそのノードが担う負荷であることを特徴とする請求項１に記載のコンピュータネットワークシステム。
【請求項１１】
それぞれのノードが少なくとも一本の経路を介して他のノードに接続された複数のノードからなり、第１のノードＮ１と、第１のノードＮ１と経路Ｐを介して接続された第２のノードＮ２とを少なくとも含むコンピュータネットワークシステムの前記複数のノードのいずれかとして動作するコンピュータであって、
第１のノードＮ１が現に担っている負荷量であって、第２のノードＮ２に移すべきか否かの検討の対象となる負荷量λｘを定める手段、
第１のノードが現に保持する負荷要素の中から、負荷量λｘに相当する負荷を第１のノードＮ１に生じさせる負荷要素を選択する手段、
前記選択した負荷要素に起因して発生する負荷を含む負荷全体を担うときの第１のノードＮ１のレスポンス性を評価する評価値Ｄ１、経路Ｐが現に担っている負荷に加えて、前記選択した負荷要素に起因して発生する負荷が経路Ｐに生じたと仮定したときの経路Ｐのレスポンス性を評価する評価値Ｄｎ、第２のノードが現に担っている負荷に加えて、前記選択した負荷要素に起因して発生する負荷を担うことにより第２のノードＮ２に生じる負荷を第２のノードＮ２が担うと仮定したときの第２のノードＮ２のレスポンス性を評価する評価値Ｄ２をそれぞれ求める手段、及び、
Ｄ１と和Ｄ２＋Ｄｎの大小の比較結果に応じて、前記移動負荷要素を移動するか否かを判定する手段
を備えることを特徴とするコンピュータ。
【請求項１２】
前記負荷要素はデータオブジェクトｄであり、前記負荷要素に起因して発生する負荷は、前記データオブジェクトｄをそのノードが保持することに起因してそのノードが担う負荷であることを特徴とする請求項１１に記載のコンピュータ。
【請求項１３】
第１のノードＮ１、第２のノードＮ２、経路Ｐのそれぞれに対して、その性能に応じた関数であって、そのノード或いは経路が現に担う或いは搬送する負荷量λを少なくとも変数とする凸関数である、評価関数ｆ１、ｆ２、ｆｎを予め定め、
評価値Ｄ１を評価関数ｆ１に基づいて定め、評価値Ｄ２を評価関数ｆ２に基づいて定め、評価値Ｄｎを評価関数ｆｎに基づいて定める
ことを特徴とする請求項１２に記載のコンピュータ。
【請求項１４】
評価値Ｄ１を評価関数ｆ１の微分に基づいて定め、
評価値Ｄ２を評価関数ｆ２の微分に基づいて定め、
評価値Ｄｎを評価関数ｆｎの微分に基づいて定める
ことを特徴とする請求項１３に記載のコンピュータ。
【請求項１５】
Ｋを予め定められた比例定数とするとき、λｘ＝Ｋ（ｄｆｓ／λｓ−ｄｆｒ／λｒ）から負荷量λｘを求めることを特徴とする請求項１３及び１４のいずれかに記載のコンピュータ。
【請求項１６】
前記第１のノードＮ１、前記第２のノードＮ２、前記経路Ｐの単位時間当たりの処理能力に応じて定められる係数をそれぞれ順にμｍａｘ，１、μｍａｘ，２、μｍａｘ，ｎとするとき、前記評価値Ｄ１、Ｄ２、Ｄｎと前記評価関数ｆ１、ｆ２、ｆｎの間に以下の数２の関係があることを特徴とする請求項１３乃至１５のいずれかに記載のコンピュータ。
2014024612.tif 000016
【請求項１７】
関数ｇｄを、データオブジェクトｄに関するｍ種類（ｍは自然数）の観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄを変数とする予め定められた関数とするとき、データオブジェクトｄを保持するノードに、データオブジェクトｄに起因して発生する負荷λｄを、関数ｇｄに基づいて求める手段を備えることを特徴とする請求項１６に記載のコンピュータ。
【請求項１８】
観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄのいずれかがデータオブジェクトｄへのアクセス頻度であることを特徴とする請求項１７に記載のコンピュータ。
【請求項１９】
観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄのいずれかがデータオブジェクトｄのレプリカ数であることを特徴とする請求項１７及び１８のいずれかに記載のコンピュータ。
【請求項２０】
前記負荷要素は処理であり、前記負荷要素に起因して発生する負荷は、その処理をそのノードが実行することに起因してそのノードが担う負荷であることを特徴とする請求項１１に記載のコンピュータ。
【請求項２１】
それぞれのノードが少なくとも一本の経路を介して他のノードに接続された複数のノードからなり、第１のノードＮ１と、第１のノードＮ１と経路Ｐを介して接続された第２のノードＮ２とを少なくとも含むコンピュータネットワークシステムの前記複数のノードのいずれかとして動作するコンピュータを、
第１のノードＮ１が現に担っている負荷量であって、第２のノードＮ２に移すべきか否かの検討の対象となる負荷量λｘを定める手段、
第１のノードが現に保持する負荷要素の中から、負荷量λｘに相当する負荷を第１のノードＮ１に生じさせる負荷要素を選択する手段、
前記選択した負荷要素に起因して発生する負荷を含む負荷全体を担うときの第１のノードＮ１のレスポンス性を評価する評価値Ｄ１、経路Ｐが現に担っている負荷に加えて、前記選択した負荷要素の搬送に起因して発生する負荷が経路Ｐに生じたと仮定したときの経路Ｐのレスポンス性を評価する評価値Ｄｎ、第２のノードが現に担っている負荷に加えて、前記選択した負荷要素に起因して発生する負荷を担うことにより第２のノードＮ２に生じる負荷を第２のノードＮ２が担うと仮定したときの第２のノードＮ２のレスポンス性を評価する評価値Ｄ２をそれぞれ求める手段、及び、
Ｄ１と和Ｄ２＋Ｄｎの大小の比較結果に応じて、前記移動負荷要素を移動するか否かを判定する手段
として機能させるためのプログラム。
【請求項２２】
前記負荷要素はデータオブジェクトｄであり、前記負荷要素に起因して発生する負荷は、前記データオブジェクトｄをそのノードが保持することに起因してそのノードが担う負荷であることを特徴とする請求項２１に記載のプログラム。
【請求項２３】
第１のノードＮ１、第２のノードＮ２、経路Ｐのそれぞれに対して、その性能に応じた関数であって、そのノード或いは経路が現に担う或いは搬送する負荷量λを少なくとも変数とする凸関数である、評価関数ｆ１、ｆ２、ｆｎを予め定め、
評価値Ｄ１を評価関数ｆ１に基づいて定め、評価値Ｄ２を評価関数ｆ２に基づいて定め、評価値Ｄｎを評価関数ｆｎに基づいて定める
ことを特徴とする請求項２２に記載のプログラム。
【請求項２４】
評価値Ｄ１を評価関数ｆ１の微分に基づいて定め、
評価値Ｄ２を評価関数ｆ２の微分に基づいて定め、
評価値Ｄｎを評価関数ｆｎの微分に基づいて定める
ことを特徴とする請求項２３に記載のプログラム。
【請求項２５】
Ｋを予め定められた比例定数とするとき、λｘ＝Ｋ（ｄｆｓ／λｓ−ｄｆｒ／λｒ）から負荷量λｘを求めることを特徴とする請求項２３及び２４のいずれかに記載のプログラム。
【請求項２６】
前記第１のノードＮ１、前記第２のノードＮ２、前記経路Ｐの単位時間当たりの処理能力に応じて定められる係数をそれぞれ順にμｍａｘ，１、μｍａｘ，２、μｍａｘ，ｎとするとき、前記評価値Ｄ１、Ｄ２、Ｄｎと前記評価関数ｆ１、ｆ２、ｆｎの間に以下の数３の関係があることを特徴とする請求項２３及び２４のいずれかに記載のプログラム。
2014024612.tif 000017
【請求項２７】
関数ｇｄを、データオブジェクトｄに関するｍ種類（ｍは自然数）の観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄを変数とする予め定められた関数とするとき、データオブジェクトｄを保持するノードに、データオブジェクトｄに起因して発生する負荷λｄを、関数ｇｄに基づいて求める手段を備えることを特徴とする請求項２６に記載のプログラム。
【請求項２８】
観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄのいずれかがデータオブジェクトｄへのアクセス頻度であることを特徴とする請求項２７に記載のプログラム。
【請求項２９】
観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄのいずれかがデータオブジェクトｄのレプリカ数であることを特徴とする請求項２７及び２８のいずれかに記載のプログラム。
【請求項３０】
前記負荷要素は処理であり、前記負荷要素に起因して発生する負荷は、その処理をそのノードが実行することに起因してそのノードが担う負荷であることを特徴とする請求項２１に記載のプログラム。
【請求項３１】
それぞれのノードが少なくとも一本の経路を介して他のノードに接続された複数のノードからなり、第１のノードＮ１と、第１のノードＮ１と経路Ｐを介して接続された第２のノードＮ２とを少なくとも含むコンピュータネットワークシステムのノード間での負荷の移動の要否を判定する方法であって、
第１のノードＮ１が現に担っている負荷量であって、第２のノードＮ２に移すべきか否かの検討の対象となる負荷量λｘを定める段階、
第１のノードが現に保持する負荷要素の中から、負荷量λｘに相当する負荷を第１のノードＮ１に生じさせる負荷要素を選択する段階、
前記選択した負荷要素に起因して発生する負荷を含む負荷全体を担うときの第１のノードＮ１のレスポンス性を評価する評価値Ｄ１、経路Ｐが現に担っている負荷に加えて、前記選択した負荷要素の搬送に起因して発生する負荷が経路Ｐに生じたと仮定したときの経路Ｐのレスポンス性を評価する評価値Ｄｎ、第２のノードが現に担っている負荷に加えて、前記選択した負荷要素に起因して発生する負荷を担うことにより第２のノードＮ２に生じる負荷を第２のノードＮ２が担うと仮定したときの第２のノードＮ２のレスポンス性を評価する評価値Ｄ２をそれぞれ求める段階、及び、
Ｄ１と和Ｄ２＋Ｄｎの大小の比較結果に応じて、前記移動負荷要素を移動するか否かを判定する段階
を含むことを特徴とする方法。
【請求項３２】
前記負荷要素はデータオブジェクトｄであり、前記負荷要素に起因して発生する負荷は、前記データオブジェクトｄをそのノードが保持することに起因してそのノードが担う負荷であることを特徴とする請求項３１に記載の方法。
【請求項３３】
第１のノードＮ１、第２のノードＮ２、経路Ｐのそれぞれに対して、その性能に応じた関数であって、そのノード或いは経路が現に担う或いは搬送する負荷量λを少なくとも変数とする凸関数である、評価関数ｆ１、ｆ２、ｆｎを予め定め、
評価値Ｄ１を評価関数ｆ１に基づいて定め、評価値Ｄ２を評価関数ｆ２に基づいて定め、評価値Ｄｎを評価関数ｆｎに基づいて定める
ことを特徴とする請求項３２に記載の方法。
【請求項３４】
評価値Ｄ１を評価関数ｆ１の微分に基づいて定め、
評価値Ｄ２を評価関数ｆ２の微分に基づいて定め、
評価値Ｄｎを評価関数ｆｎの微分に基づいて定める
ことを特徴とする請求項３３に記載の方法。
【請求項３５】
Ｋを予め定められた比例定数とするとき、λｘ＝Ｋ（ｄｆｓ／λｓ−ｄｆｒ／λｒ）から負荷量λｘを求めることを特徴とする請求項３３及び３４のいずれかに記載の方法。
【請求項３６】
前記第１のノードＮ１、前記第２のノードＮ２、前記経路Ｐの単位時間当たりの処理能力に応じて定められる係数をそれぞれ順にμｍａｘ，１、μｍａｘ，２、μｍａｘ，ｎとするとき、前記評価値Ｄ１、Ｄ２、Ｄｎと前記評価関数ｆ１、ｆ２、ｆｎの間に以下の数４の関係があることを特徴とする請求項３３乃至３５のいずれかに記載の方法。
2014024612.tif 000018
【請求項３７】
関数ｇｄを、データオブジェクトｄに関するｍ種類（ｍは自然数）の観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄを変数とする予め定められた関数とするとき、データオブジェクトｄを保持するノードに、データオブジェクトｄに起因して発生する負荷λｄを、関数ｇｄに基づいて求めることを特徴とする請求項３６に記載の方法。
【請求項３８】
観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄのいずれかがデータオブジェクトｄへのアクセス頻度であることを特徴とする請求項３７に記載の方法。
【請求項３９】
観測量Ｋ１ｄ、Ｋ２ｄ、…Ｋｍｄのいずれかがデータオブジェクトｄのレプリカ数であることを特徴とする請求項３７及び３８のいずれかに記載の方法。
【請求項４０】
前記負荷要素は処理であり、前記負荷要素に起因して発生する負荷は、その処理をそのノードが実行することに起因してそのノードが担う負荷であることを特徴とする請求項３１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のコンピュータをネットワークを介して接続してなるコンピュータネットワークシステムに関し、特に、この種のネットワークシステムにおける負荷の分散に関する。
【背景技術】
【０００２】
ネットワークを介して互いに接続した複数のコンピュータを統合し、ひとつのコンピュータシステムとしてサービスを提供するコンピュータネットワークシステムが現在利用されている。一般に、この種のネットワークシステムにおいて、ノードとなる各コンピュータに対して割り当てた負荷に大きなばらつきがあると、システム全体でのレスポンス性能が低下する。このため、この種のシステムには、ノード間で負荷を分散して負荷の均衡化を図る技術が適用されていることが多い。
ノード間の負荷を分散する際、従来のコンピュータネットワークシステムでは、負荷の大きいノードを検出し、そのノードの負荷の一部を他のノードに分配することがよく行なわれる。
例えば、各ノードがデータサーバーであるようなコンピュータネットワークシステムでは、各ノードに蓄積されているデータ量に大きなばらつきがあるとき、蓄積するデータ量が大きいサーバーから小さいサーバーへと一部データを移動することにより、蓄積データ量の均衡化を図るものがある。この場合はデータ量が負荷に相当する。
別の例では、各ノードが計算資源を提供する計算サーバーであるようなコンピュータネットワークシステムにおいて、各ノードに対して割り当てられている計算量に大きなばらつきがあるとき、割り当てた計算量が大きいサーバーから小さいサーバーへと割当を変更することにより、割当計算量の均衡化を図るものがある。この場合は割り当てた計算が負荷に相当する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
このように、従来のシステムでは、負荷を移動することによってノード間での負荷の均衡化を図り、結果としてシステム全体のレスポンス性能の維持を図っていた。しかしながら、このような手法では、負荷を均衡化した結果、かえってレスポンス性能が悪化する場合がある。
例えば、蓄積データ量を均衡化するために、データサーバー間で大量のデータを移動する場合、データの移動に長時間を要し、その間、データ移動を担うネットワーク経路の帯域を圧迫するので、システム全体のレスポンス性能に悪影響を及ぼしてしまうことがある。
本発明はこのような状況に鑑みてなされたものであり、本発明が解決しようとする課題は、それぞれがノードとなる複数のコンピュータを互いに接続してなるコンピュータネットワークシステムにおいて、負荷の分散処理に起因するレスポンス性能の低下を回避することである。
【課題を解決するための手段】
【０００４】
上述の課題を解決するため、本発明は、その一態様として、
それぞれのノードが少なくとも一本の経路を介して他のノードに接続された複数のノードからなり、第１のノードＮ１と、第１のノードＮ１と経路Ｐを介して接続された第２のノードＮ２とを少なくとも含み、
第１のノードＮ１が現に担っている負荷量であって、第２のノードＮ２に移すべきか否かの検討の対象となる負荷量λｘを定める手段、
第１のノードが現に保持する負荷要素の中から、負荷量λｘに相当する負荷を第１のノードＮ１に生じさせる負荷要素を選択する手段、
前記選択した負荷要素に起因して発生する負荷を含む負荷全体を担うときの第１のノードＮ１のレスポンス性を評価する評価値Ｄ１、経路Ｐが現に担っている負荷に加えて、前記選択した負荷要素の搬送に起因して発生する負荷が経路Ｐに生じたと仮定したときの経路Ｐのレスポンス性を評価する評価値Ｄｎ、第２のノードが現に担っている負荷に加えて、前記選択した負荷要素に起因して発生する負荷を担うことにより第２のノードＮ２に生じる負荷を第２のノードＮ２が担うと仮定したときの第２のノードＮ２のレスポンス性を評価する評価値Ｄ２をそれぞれ求める手段、及び、
Ｄ１と和Ｄ２＋Ｄｎの大小の比較結果に応じて、前記移動負荷要素を移動するか否かを判定する手段
を備えることを特徴とするコンピュータネットワークシステムを提供する。
また、本発明は、他の一態様として、
それぞれのノードが少なくとも一本の経路を介して他のノードに接続された複数のノードからなり、第１のノードＮ１と、第１のノードＮ１と経路Ｐを介して接続された第２のノードＮ２とを少なくとも含むコンピュータネットワークシステムの前記複数のノードのいずれかとして動作するコンピュータであって、
第１のノードＮ１が現に担っている負荷量であって、第２のノードＮ２に移すべきか否かの検討の対象となる負荷量λｘを定める手段、
第１のノードが現に保持する負荷要素の中から、負荷量λｘに相当する負荷を第１のノードＮ１に生じさせる負荷要素を選択する手段、
前記選択した負荷要素に起因して発生する負荷を含む負荷全体を担うときの第１のノードＮ１のレスポンス性を評価する評価値Ｄ１、経路Ｐが現に担っている負荷に加えて、前記選択した負荷要素に起因して発生する負荷が経路Ｐに生じたと仮定したときの経路Ｐのレスポンス性を評価する評価値Ｄｎ、第２のノードが現に担っている負荷に加えて、前記選択した負荷要素に起因して発生する負荷を担うことにより第２のノードＮ２に生じる負荷を第２のノードＮ２が担うと仮定したときの第２のノードＮ２のレスポンス性を評価する評価値Ｄ２をそれぞれ求める手段、及び、
Ｄ１と和Ｄ２＋Ｄｎの大小の比較結果に応じて、前記移動負荷要素を移動するか否かを判定する手段
を備えることを特徴とするコンピュータを提供する。
また、本発明は、他の一態様として、
それぞれのノードが少なくとも一本の経路を介して他のノードに接続された複数のノードからなり、第１のノードＮ１と、第１のノードＮ１と経路Ｐを介して接続された第２のノードＮ２とを少なくとも含むコンピュータネットワークシステムの前記複数のノードのいずれかとして動作するコンピュータを、
第１のノードＮ１が現に担っている負荷量であって、第２のノードＮ２に移すべきか否かの検討の対象となる負荷量λｘを定める手段、
第１のノードが現に保持する負荷要素の中から、負荷量λｘに相当する負荷を第１のノードＮ１に生じさせる負荷要素を選択する手段、
前記選択した負荷要素に起因して発生する負荷を含む負荷全体を担うときの第１のノードＮ１のレスポンス性を評価する評価値Ｄ１、経路Ｐが現に担っている負荷に加えて、前記選択した負荷要素の搬送に起因して発生する負荷が経路Ｐに生じたと仮定したときの経路Ｐのレスポンス性を評価する評価値Ｄｎ、第２のノードが現に担っている負荷に加えて、前記選択した負荷要素に起因して発生する負荷を担うことにより第２のノードＮ２に生じる負荷を第２のノードＮ２が担うと仮定したときの第２のノードＮ２のレスポンス性を評価する評価値Ｄ２をそれぞれ求める手段、及び、
Ｄ１と和Ｄ２＋Ｄｎの大小の比較結果に応じて、前記移動負荷要素を移動するか否かを判定する手段
として機能させるためのプログラムを提供する。
また、本発明は、他の一態様として、
それぞれのノードが少なくとも一本の経路を介して他のノードに接続された複数のノードからなり、第１のノードＮ１と、第１のノードＮ１と経路Ｐを介して接続された第２のノードＮ２とを少なくとも含むコンピュータネットワークシステムのノード間での負荷の移動の要否を判定する方法であって、
第１のノードＮ１が現に担っている負荷量であって、第２のノードＮ２に移すべきか否かの検討の対象となる負荷量λｘを定める段階、
第１のノードが現に保持する負荷要素の中から、負荷量λｘに相当する負荷を第１のノードＮ１に生じさせる負荷要素を選択する段階、
前記選択した負荷要素に起因して発生する負荷を含む負荷全体を担うときの第１のノードＮ１のレスポンス性を評価する評価値Ｄ１、経路Ｐが現に担っている負荷に加えて、前記選択した負荷要素の搬送に起因して発生する負荷が経路Ｐに生じたと仮定したときの経路Ｐのレスポンス性を評価する評価値Ｄｎ、第２のノードが現に担っている負荷に加えて、前記選択した負荷要素に起因して発生する負荷を担うことにより第２のノードＮ２に生じる負荷を第２のノードＮ２が担うと仮定したときの第２のノードＮ２のレスポンス性を評価する評価値Ｄ２をそれぞれ求める段階、及び、
Ｄ１と和Ｄ２＋Ｄｎの大小の比較結果に応じて、前記移動負荷要素を移動するか否かを判定する段階
を含むことを特徴とする方法を提供する。
【発明の効果】
【０００５】
本発明によれば、第１及び第２のノードのレスポンス性だけではなく、両ノードの間を接続する経路のレスポンス性を考慮して、移動負荷要素を実際に移動すべきか否かを判定する。このため、本発明によれば、システム全体のレスポンスを改善することを目的として、負荷要素が集中しているノードからそれほどではないノードに負荷要素を移動したにも関わらず、ネットワークのレスポンス性が悪化することにより、システム全体のレスポンスがかえって悪化するような事態を回避することができる。
【図面の簡単な説明】
【０００６】
図１は本発明の一実施の形態であるコンピュータネットワークシステムについて説明するための図である。
図２は本発明のコンピュータネットワークシステムを構成するノードが、負荷要素を移動するか否かを判定する方法を説明するためのフローチャートである。
図３は一般的なコンピュータネットワークシステムについて説明するための図である。
図４は図２の判定を行なう状態制御部を図３のコンピュータネットワークシステムに追加した図である。
図５は要素１、即ちストレージ装置であるデータサーバー１の評価関数ｆｉと、要素２、即ち他のストレージ装置であるデータサーバー２の評価関数ｆｊを説明するための図である。
図６は評価関数ｆｉ及びｆｊについて更に説明するための図である。
図７は３つのノードからなるコンピュータネットワークシステムについて説明するための図である。
図８は評価関数、負荷分散制御の結果、評価関数の傾きを示すグラフである。
図９は評価関数、負荷分散制御の結果、評価関数の傾きを示すグラフである。
図１０は評価関数を示すグラフである。
図１１は本発明の実施例１の動作を説明するためのフローチャートである。
図１２は本願発明を適用しない場合の待ち行列の時間変化を示すグラフである。
図１３は本願発明を適用した場合の待ち行列の時間変化の一例を示すグラフである。
図１４は本願発明を適用した場合の待ち行列の時間変化の一例を示すグラフである。
図１５は本発明を適用したノードに５０秒後に格納されていたデータ数を示す表である。
【発明を実施するための形態】
【０００７】
本発明の一実施の形態であるコンピュータネットワークシステム１について説明する。図１を参照すると、コンピュータネットワークシステム１は、複数のコンピュータＮ１、Ｎ２、…、Ｎｍ（ｍは自然数）からなるネットワークである。コンピュータＮ１とコンピュータＮ２の間を接続する経路をＰ１，２と呼ぶものとする。
次に、図２を参照してコンピュータネットワークシステム１の動作について説明する。いまコンピュータＮ１に負荷が集中しているものとする。
（ステップＳ１）コンピュータＮ１から他コンピュータに分配すべき負荷の量と、その負荷の移動先となる受け手側コンピュータを決定する。ここでは、コンピュータＮ１から他コンピュータに分配すべき負荷量をλとし、受け手側コンピュータの候補をコンピュータＮ２とする。負荷量λ及び受け手側コンピュータの決定は、コンピュータネットワークシステム１が自律分散制御系であり、個々のコンピュータが自律的に自身を制御する場合はコンピュータＮ１自身が行なう。また、コンピュータネットワークシステム１が集中制御系であり、システム１の全体を制御する集中制御コンピュータがコンピュータＮ１を制御する場合は集中制御コンピュータが行なう。
（ステップＳ２）コンピュータＮ１は分配すべき負荷λに応じて一乃至複数の適当な負荷要素を選択する。負荷要素とは負荷の原因となる要素であり、例えばそのコンピュータが管理しているデータ、そのコンピュータの記憶装置に格納しているデータや、そのコンピュータに対して割り当てられている処理である。負荷要素毎の負荷量を同じとする場合、選択した負荷要素による負荷量の合計が、負荷λと同じかなるべく近くなるように負荷要素を選択する。
各負荷要素により生じる負荷の大きさが等しいとみなせる場合、コンピュータＮ１が管理する負荷要素の中から、負荷量の合計が負荷λに一致するかなるべく近くなるように、ランダムに負荷要素を選択することが考えられる。
また、各負荷要素により生じる負荷の大きさが異なる場合、負荷要素毎の負荷の大きさを考慮して負荷要素を選択する。負荷要素毎の負荷量についてはステップＳ１に先立って算出しておくことが好ましい。例えば、コンピュータが管理するデータを負荷要素とする場合、コンピュータＮ１は、自身が管理するデータそれぞれに対するアクセスを監視し、各データへのアクセス頻度を記録しておき、アクセス頻度に応じてデータ毎にそのデータの負荷を評価して、データの負荷の合計が負荷λと一致するかなるべく近くなるようなデータの組み合わせを選択する。
一般的に負荷が均質でない場合、全体としての負荷ではなく、個別の負荷を測定する必要があり、サーバーやＣＰＵの負荷をＣＰＵ占有率などの直接的な値で測定するのが難しくなる。個々のデータの負荷は、データへのアクセス頻度を用いて、サーバー、ＣＰＵの負荷へ以下のように変換する。
データサーバーｉにおけるデータｊの負荷λｉｊは、データｊに関する観測量をＫ１ｊとすると、次の式１により求められる。
2014024612.tif 000003
関数ｇｊは測定等により予め定めておく。観測量の例としては、データｊへのアクセス頻度、データｊのレプリカ数などがある。
負荷λｉｊを求める際に用いる観察量は一種類だけとは限らず、複数用いてもよい。例えば、データｊへのアクセス頻度をＫ１ｊと表し、データｊのレプリカ数をＫ２ｊと表すものとする。一般に、あるデータのレプリカ数と、それらレプリカのひとつに対するアクセス頻度とは反比例する。このことを踏まえて、観測量Ｋ１ｊ、Ｋ２ｊに基づいて負荷λｉｊを求めるとすると、関数ｇを次の式２のように表すことができる。
2014024612.tif 000004
複数の観測量に基づいて求める考えを更に進めると、データｊに関するｍ種類（ｍは自然数）の観察量に基づいて負荷λｉｊを求める場合に一般化することができる。すなわち、データサーバーｉにおけるデータｊによる負荷λｉｊを、データｊに関するｍ種類の観測量Ｋ１ｊ、Ｋ２ｊ、・・・、Ｋｍｊに基づいて次の式３で表すことができる。
2014024612.tif 000005
式３に基づいて、データサーバーｉに格納されている全データがデータサーバーｉに与える負荷λｉは、次の式４のように表すことができる。
2014024612.tif 000006
個々のデータで変換関数ｇｊが代わらない場合は、全データで共通の変換関数を使用しても構わない。
このようにして、データサーバーのデータ毎の負荷を割り出した後、移動するデータの候補を決定する。この決定には次の式５や式６を用いることができる。データサーバーｉの負荷がλｉのときデータサーバーｉの評価関数ｆｉの微分をｄｆｉ／ｄλｉと表し、同時刻におけるデータサーバーｋの負荷がλｋのときデータサーバーｋの評価関数ｆｋの微分をｄｆｋ／ｄλｋと表すものとする。このとき、データサーバーｉとデータサーバーｋの交換すべき負荷量ｄλｉ／ｄｔは次の式５または式６により求めることができる。Ｋ１は負荷変更のゲインに相当する係数である。λｎｏｍ，ｉはデータサーバｉの規格化係数を表す。システム内に性能が異なるデータサーバーが混在している場合、システム全体で規格化した評価関数を定め更に、データサーバー毎にその性能や規模に応じた規格化係数を定めて、各データサーバーの評価関数を、その規格化係数を規格化した評価関数に乗算したものとして表すと都合が良い場合が多いため、ここでは規格化係数を導入している。
2014024612.tif 000007
ここでは式５を用いた決定について説明する。式５により、データサーバーｉとデータサーバーｋの交換すべき負荷量ｄλｉ／ｄｔがわかる。そこで、その負荷量ｄλｉ／ｄｔが分かった後、負荷を送り出すほうのデータサーバーの中から、その負荷量ｄλｉ／ｄｔにマッチした負荷λｉｊを持つデータを選択する。選択されるデータは一つでも良いし、複数でも良い。複数の場合、選ばれたデータの負荷λｉｊの和が移動する負荷量となる。式５で算出された負荷量にできるだけ近い負荷量になるように、移動データ候補を選ぶ。ネットワークが性能に影響を与えない場合は、選ばれたデータ候補を単純に送り出せばよい。これにより、最適な負荷分散が実現される。
上述の方法では、負荷を個別に評価し、式５の特性に符合した形で制御することで、データ種類によって負荷が異なり、負荷が均質ではなくなり、それとともに、負荷の切り出しを連続的に行えなくなる場合にも対処可能となった。
（ステップＳ３）コンピュータＮ１は、負荷の移動を行なわない場合のコンピュータＮ１のレスポンス性を示す評価値Ｄｓと、負荷の移動を行なった場合に予想される、コンピュータＮ２及び経路Ｐ１，２それぞれのレスポンス性を示す評価値Ｄｒ、Ｄｎを求める。
Ｄｓ、Ｄｒ、Ｄｎは、コンピュータＮ１、コンピュータＮ２及び経路Ｐ１，２それぞれの性能に応じて定められる指標μによって一意に定められる関数であり、コンピュータＮ１、コンピュータＮ２及び経路Ｐ１，２に対する負荷量λを入力とし、負荷λに対するコンピュータＮ１、コンピュータＮ２及び経路Ｐ１，２のレスポンス性を示す値を出力とする。
今、コンピュータＮ１はデータｄを保持しており、このデータｄの移動の要否を検討しているものとする。このとき、評価値Ｄｓ、評価値Ｄｒ、評価値Ｄｎは次のようなものである。
評価値Ｄｓは、コンピュータＮ１の現時点におけるレスポンス性を示す値である。
評価値Ｄｒは、他の条件を現状のままに、コンピュータＮ２がデータｄを現に保持していると仮定したときのコンピュータＮ２のレスポンス性を示す値である。コンピュータＮ２は何がしかの負荷を現に担っている。コンピュータＮ２がデータｄを保持すると仮定すると、その保持に起因する追加の負荷をコンピュータＮ２は担うことになる。従ってコンピュータＮ２がデータｄを保持すると仮定すると、コンピュータＮ２のレスポンスに影響がある。現に担っている負荷に加えて、データｄの保持に起因する追加の負荷を担うことと仮定したときのコンピュータＮ２のレスポンス性を示す値が評価値Ｄｒである。尚、コンピュータＮ２が現に担う負荷がゼロの場合も同様である。
評価値Ｄｎは、他の条件を現状のままに、コンピュータＮ１とコンピュータＮ２の間のネットワークが現にデータｄを伝送していると仮定したときのネットワークのレスポンス性を示す値である。コンピュータＮ１とコンピュータＮ２の間をつなぐ経路Ｐは現に搬送中のデータに起因する負荷を担っている。ここで経路Ｐが搬送中のデータは、必ずしもコンピュータＮ１とコンピュータＮ２のいずれかを送信元、送信先とするものではなく、コンピュータＮ１、Ｎ２以外のコンピュータを送信元／送信先とするものも含む。こうした現に搬送中のデータに加えて、経路Ｐがデータｄを搬送すると仮定すると、データｄの搬送に起因する追加の負荷を経路Ｐは担うことになる。従って、経路Ｐがデータｄを搬送すると仮定すると、経路Ｐのレスポンスに影響がある。現に搬送中のデータに加えて、経路Ｐがデータｄを搬送すると仮定したときの経路Ｐのレスポンス性を示す値が評価値Ｄｎである。尚、経路Ｐが現に何のデータも搬送していない場合も同様である。
（ステップＳ４）コンピュータＮ１は、Ｄｓと、ＤｒとＤｎの和Ｄｒ＋Ｄｎとの大小を比較する。上述のように、評価値Ｄｓ、Ｄｒ、Ｄｎはいずれも、コンピュータ乃至経路がデータｄを現に担っている、或いは、現に担っていると仮定したときの値である。本ステップでは、コンピュータＮ１、Ｎ２及びその間の経路Ｐ１，２に、同一のデータｄが同時刻に存在すると仮定して比較を行なうことになる。現実にはこのような状態はありえないが、本願発明者らは、コンピュータＮ１からコンピュータＮ２へのデータｄの移動が十分に短い時間内に完了する場合、このような近似的な比較であっても効果的な制御が可能であることを見出した。この知見は本発明の基礎となっている。
（ステップＳ５）コンピュータＮ１は、比較結果に応じて選択した負荷要素をコンピュータＮ２に移動するか否かを判定する。
【実施例１】
【０００８】
コンピュータネットワークシステム１が自律分散制御系であり、コンピュータＮ１、Ｎ２、…、Ｎｍがそれぞれデータサーバーであり、負荷要素をデータとする実施例について説明する。本実施例では、コンピュータネットワークシステム１は複数のデータサーバーをネットワークで接続したデータセンターであり、データサーバー群におけるデータ配置の負荷分散について本発明を適用したものである。
データセンターのデータ配置の負荷分散とは、あるデータサーバーにアクセス頻度の高いデータが多く偏ってしまい、特定のデータサーバーが落ちてしまう事を避けるために実施するものである。特定のデータサーバーに集中したアクセス頻度の高いデータを、他の空いているデータサーバーに移動し、負荷を分散させるというものである。
これまでに検討されている、最も簡単な負荷分散制御としては、すべてのデータサーバーを中央制御ユニットがモニタし、負荷の高いデータサーバーのデータを負荷の低いデータサーバーへ移動させるというものが挙げられるだろう。
しかしながら、データサーバーの数が多くなれば、中央制御ユニットが制御しきれなくなるため、昨今の大規模化したシステムではうまく機能しなくなってきている。大規模なシステムでは、個々のデータサーバーが自律分散的に動作するのが望まれる。
自律分散的に行うものとしては、データの特性を統計的にモニタし、例えば、ある時間にあるデータに負荷が集中するなどの特性を見極め、その特性を基に予めシナリオを作成し、負荷を分散させるなどの制御が行われている。これは予測シナリオを用いて制御するので、シナリオベースの制御と言うことができる。
このような制御の場合、シナリオの想定内では自律分散的に動作させられるが、シナリオの想定外の事象が起きた場合、途端に破綻することとなる。したがって、自律分散的に動作しつつも、外部環境の変化に適応できるデータの配置負荷分散制御が望まれている。
（１）負荷量λと受け手側コンピュータの決定
ここでは性能の異なるサーバーが混在する場合を想定する。性能の異なるサーバーが複数（Ｎ個）存在し、それがネットワークを形成し、各サーバーにランダムにやってくる処理（負荷）をサーバー全体で負荷分散し、効率的な処理を実行するという問題を考える。効率的な処理とは、系全体でレスポンスを最小化するとか、エネルギー効率を最大化するという意味である。このような負荷分散の問題は、効率の悪いサーバーの起動、停止も含むので、これは「起動停止問題」となる。この問題の概略図を図３に示す。
我々はこの問題を検討した結果、以下の方法を考案した。解くべき問題は、２つの問題が混在している構造になっている。ひとつは、起動停止の決定であり、もうひとつは負荷の配置である。本明細書では、制御対象を機能ブロック、要素、リソース、ノードと表現するが、どれも同じである。
起動停止とは、リソース群があった場合、どのリソースを使い、どのリソースを使わないかを決定する、または管理する問題である。また、負荷の配置は、リソースが与えられたとして、系全体に与えられた仕事をどのように割り振れば、ある指標の元に最適化できるかという問題である。これらの問題は従来、個々に、確率論的なアプローチで解くことを試みられていることが多いが、単純な確率論では、変幻自在に変わっていく環境の中で、状況に応じてロバスト、リアルタイムに即応することが難しい。
今回は、これら２つの問題を一体のものとし、状況に応じてロバスト、リアルタイムに即応できる手法を考案した。その際、それぞれの問題を、確率論ではなく、決定論的または関係論的な方法で解く方法を考案した。「起動停止問題」をリアルタイムに解き、要素を制御するブロックは状態制御部と称し、図４に示すように各要素に付属される。図４では、状態制御部は要素の外側に記されているが、要素の内側に設置されていても良い。今回は完璧な最適化として、起動停止と負荷の配置を一体として解いたが、起動停止だけを決定するなど個別に使用することも当然可能である。
まず、我々は図５のような各要素と関係する評価関数ｆを導入する。評価関数ｆは、データサーバーのようなノード、データサーバー間のネットワークに対し、その性能に応じて予め定められる関数であり、ある時刻におけるデータサーバー、データサーバー間ネットワークの状態を示すパラメータλを変数とする関数である。関数ｆはいわば制御の指針として定められる関数であり、必ずしも測定可能な値、或いは、測定値から算出可能な値である必要はないが、そうであってもよい。関数ｆの横軸は各要素の状態に関するパラメータであり、今回の例ではサーバーの負荷量などに相当する。縦軸は、何らかの効率または利潤に関わる指標である。この何らかの効率に関わる指標の例は実施例のところで詳説するので、ここでは、一般的な効率として捉えていただきたい。この効率に関わる評価関数を凸関数で表す。凸関数を使用するのも本ステップで行なう制御手法のポイントである。なぜなら、多くのシステムは何らかの効率やシステムの安定性などを図５に示すような凸関数で表されるからである。図５のような上に凸な関数を凹関数と呼び、下に凸な関数を凸関数と呼ぶこともあるが、ここでは、関数の性質上で区別する表現を採用し、凹関数も凸関数と表現することにする。
評価関数が凸関数である要素を連携させて、全体で最適化（各要素の評価関数の値の総和が最大となる状態）する問題は、「凸計画問題」として知られており、各要素の動作レベルにおける評価関数の微分値が等しい状況で最適化が達成されることが数学的に明らかにされている。今回はこの原理を応用した。今回、評価関数として凸関数を使った理由がここにある。
この原理を勘案し、各要素の状態変化（今回のサーバのケースでは負荷分散）を上述の式５の方程式に従い制御する。ここで、Ｋ１は状態変更のゲインに相当する係数である。この制御をかけることで、各要素は評価関数の微分値ｄｆｉ／ｄλｉを等しくするように状態を変更しようとする。これは「凸計画問題」のところで説明したように、全体利潤を最大化するポイントに各要素の状態（負荷量）を制御するのと等価である。つまり、式５の制御により、評価関数の縦軸で設定された効率が系全体として最大化される。ｋは要素ｉに隣接する要素の番号を意味する。隣接要素が複数個有る場合は、順次、式５の制御を繰り返せばよい。
式５には、効率最大化以外に大きなポイントがある。それは、式５は要素ｉと要素ｋに対して、絶対値は同じで反対の符号の状態変化を要求することである。これは、ある要素とそれに隣接する要素のある時刻における状態変化の総和が０になることを意味する。このように制御することで、系全体でローカルに起こる負荷要求に対して、負荷の授受をローカルな自律分散的処理で行っているにも関わらず、系全体に要求されるトータルの負荷要求を過不足無く満足させられる。「起動停止問題」は系全体（この場合、サーバネットワーク全体）で満たさなくてはいけない総要求（総需要）がある。これを満たす事を需給平衡化とも言うが、ひとつの拘束条件となる。これが満たされないまま、効率や利潤が最大化されても意味がない。一般的には、全体の総要求を計算し、それをもとに各要素の担当分を分配したりするが、このような従来方法では、全体の総要求をまとめるために、系全体を統括する要素が必要になる。本制御手法は、負荷の授受を均衡させることで、全体の総要求をまとめなくても、ローカルな自律分散処理で総要求を満たすことができる。これは大規模なネットワークになり、系全体を統括する要素が設定し辛くなった場合に、特に有効になる。
また、本ステップの制御手法は上述の式６を用いても行うことができる。ここで、λｎｏｍ，ｉは要素ｉの規格化係数で、要素がヘテロな場合、全体で規格化した係数を乗算しておいた方が良い場合が多く、式６に導入している。λｎｏｍ，ｉは要素の能力や規模に相当する量である。式６の場合、式５の場合と異なり、要素間で負荷の授受が自動的に均衡しない。したがって、ある要素とそれに隣接する要素のある時刻における状態変化の総和が０になるような工夫を加える必要がある。
最も単純なものは、以下のようなものである。例えば、要素ｉが隣接要素に負荷を与えたい場合（式６がマイナスの値を持つ場合）、隣接要素のうち、負荷を受け取りたい要素（式６がプラスの値を持つ要素）を選び出し、それらの総数で式６から導出される値を割り算し、算出された分割された負荷を、負荷を受け取りたい要素それぞれに分配する。
その他の手法としては、分配するときに、隣接要素の負荷の状態を見て、負荷を受け取りやすい要素に重みをかけて（式６がプラスの値が大きい要素ほど多く）分配するなどが考えられる。隣接要素がどの程度負荷を受け取りやすいかは、今回の制御の原理と同様に、評価関数の微分値を比べればわかる。
上記までの説明の手法で、負荷の配置の問題は総需要を満たしながらリアルタイムに解くことができる。では、どの要素を起こして、どの要素を止めるかという起動停止はどのように決定していくのであろうか。以下に説明する。
まず、要素自身と、その要素に隣接するノードの評価関数間にある指標を定義する。それを説明するための図６に示す。負荷が０のときに、効率または利潤（縦軸）が負の値を取っている意味は、起動によりコストが発生することを意味している。サーバーなどのＩＴ系だとやや想像しにくいが、例えば、発電所の場合、縦軸を利潤と考えれば、運転（起動）しているにも関わらず、需要がなければ、運転コストが回収（需要家から集める金額）を上回り、利潤がマイナスになる。評価関数の値が０になったところが、運転コストと回収が均衡した点であり、評価関数の値がプラスになるということは利益が発生している事を意味する。実施例のところで示すが、データセンターのレスポンスを最適化するようなときは、縦軸がレスポンス関連量となり、負荷０のところでも評価関数は正の値を持つ。負荷０において、評価関数は正負どちらもとる可能性があるのだが、負の値をとる方を考えておけば、正の値をとる場合はその一部として解くことができる。したがって、ここでは、負荷０において、評価関数が負の値をとるケースで説明する。
ここで、ノードｉ（自身）のゼロクロス点をλ０，ｉ、隣接ノードｊの評価関数における、ノードｉのゼロクロス点と同じ傾きの点をｚｉｊ、隣接ノードｊの現在の負荷をλｊとする。したがって、ｚｉｊは次の式７で書くことができる。
2014024612.tif 000008
そして、ここで次の式８で示す指標を定義する。
2014024612.tif 000009
この指標は、現在の隣接ノードの負荷（総和）が、自身のゼロクロス点よりどれだけ大きいかを意味している。もしノードｉが停止しているとして、ノードｉを起動すべき条件は、起動することでノードｉがゼロクロス点以上の負荷を担当する状況にあるかどうかである。そうすれば利潤はマイナス（評価関数値が負）にならないため、ノードｉを起動することで不利はない。指標Ｓｉはそれを数値化したものである。隣接ノードがノードｉのゼロクロス点における評価関数微分値と等価なｚｉｊよりどれだけ負荷を担当しているかを示すのが右辺第１項であり、それをゼロクロス点λ０，ｉで引くことで（右辺第２項）、自身のゼロクロス点以上の負荷が周りに存在しているかを示す指標となっている。Ｓｉが０より大きければ、ノードｉを起動したときにいずれ隣接ノードが担当している負荷はノードｉが担当することになり、かつノードｉの担当負荷はゼロクロス点以上となる。逆に、Ｓｉが０より小さければ、ノードｉが隣接ノードの担当負荷を新たに担っても、ゼロクロス点以下となり、ノードｉの起動により利潤をマイナスにしてしまう。指標Ｓｉはこのようなものであり、Ｓｉの正負を見ることでノードｉを起動すべきか停止すべきかがわかる。Ｓｉが負のときとは、その時点でノードｉの負荷は評価関数が負の値をとる領域にあるということで、起動しているノードは評価関数が０以下になった時点で停止すると考えても良い。
起動しているノードを停止する場合にはもうひとつ考慮しなければならないことがある。ノードの性能が同じ場合の起動停止に関する場合である。先ほども述べたが、起動コストがかかる場合、どれかひとつのノードだけ起動し、残りは停止したほうが良いことが良く起こる。しかしながら、性能が同じ場合、どちらを止めればいいのか今のままでは判断できない。そこで、我々は次のようなアルゴリズムを導入した。
「評価関数値が０以下で、かつ隣接ノードを含め最も値が低い場合、停止。
値の比較は起動しているノード間で行う。
最小値が複数ある場合でも停止」
これにより、全結合なら、すべてのノードの性能が等しくても、最終的に１ノードだけ残ることになる。ネットワークの結合が疎の場合（要素と要素が全結合しておらず、まばらに結合している状態）、このアルゴリズムでもいくつかセグメント（停止したノードに取り囲まれた孤立した起動ノード群）が残ってしまう可能性はあるが、そのような場合は、ロードバランサを介して、実質的な隣接ノード（停止したノードを越えて存在する起動ノード群）を探し、上記アルゴリズムを実施するなどの方法で対処するなどが考えられる。
以上のように、式５で制御しながら、式８の指標のモニタと、上記停止用のアルゴリズムで起動停止を決定すれば、リアルタイムに「起動停止問題」を解くことができる。これは従来のように予めスケジューリングして「起動停止問題」を解いていたのに比べ画期的なことである。なぜなら、想定外の外乱や需給変化があってもリアルタイムに即応できるからである。
また、このシステムは、自律分散的に独立に動くので、どこかが故障したりしても、故障した要素からの信号が途絶えた分だけ、他の要素が自律的にリカバーするという動作を行う。また、突然要素を増やしたり、減らしたりしても、徐々に自律的に適正な動作に向かうことができる。つまり、外乱に対して、非常にロバストであり、また、要素の増減を自由にできるスケーラビリティを有している。
従来のシステムは、故障に対して無力であったり、様々なエラー用のシーケンスを用意したりしなければならなかった。また、勝手に要素（リソース）を増やしたり減らしたりすればシステム全体の安定性が保たれるか保証はなく、そのたびにプログラム、処理を見直さなければならなかった。本ステップの手法ではこれらの問題を自律分散適応的な制御ですべて解決することができるのである。
以下に、この制御手法の動作の詳細を説明する。簡単のため、今回は３つのノードが相互に繋がった３角形の構造のネットワーク状態に対してこの制御手法を適応した。ネットワークの構造を図７に示す。
まず、この３つのノードに図８に示すそれぞれ異なる評価関数を設定した。その後、総需要を時刻０から１０まで０．２、時刻１０から２０まで１．０、時刻２０以降にまた０．２と変化させた場合のノードの起動停止、負荷の分担を、本制御手法で実施した。その様子も図８に示す。総需要が０．２のときは最も利潤効率の良いノード１だけ起動し、総需要が１．０に増えると、性能の順にノード２、ノード３を起動し、負荷の分担を設定していることがわかる。そして、再度総需要が０．２になると、ノード２、３を停止して、ノード１のみ起動した状態に戻ることがわかる。本制御手法は数学的に起動停止問題を最適に解く仕組みとなっているので、これはリアルタイム（動的に）起動停止問題を解きながら、外乱（需要の急変）に適応しできたことを意味する。これは非常に大きな成果である。
また、３つのノードが同じ性能を持っている場合の例も図９に示す。ノードの性能が同じなので、評価関数のグラフはすべて重なっており、ひとつに見える。この場合も、総需要を時刻０から１０まで０．２、時刻１０から２０まで１．０、時刻２０以降にまた０．２と変化させた。すべてのノードの性能が同じなので、わかりにくいが、総需要が０．２のときは、ノード３のみ起動しており、総需要が１．０のときは３つのノードで均等に負荷を分担している様子がわかる。このように本制御手法は、起動コストがあり、ノードの性能が同じ場合でも有効に最適化を行える。
本ステップでの制御手法は、評価関数の微分を各要素で等しくするという制御を行っているが、ある関数の微分を各要素で等しくするというのが本質ではない。凸関数の微分を各要素で等しくするというのが本質である。
上記のような制御は、負荷自体が均質で任意に切り出せる場合、負荷がアナログ量であるなどの場合などには、式５あるいは式６の制御式によって導出される単位時間当たりの負荷変動量を各ノードが実現すれば良い。このとき、隣接ノードの評価関数の微分値を用いていることですでに周りの状況を勘案しているので、単純に式５あるいは式６の制御を自身に課せばよく、制御の段階で隣接ノードの状況を考える必要がない。負荷自体が均質で任意に切り出せる場合の例としては、サーバーを複数用意して処理を分散させる場合や複数のＣＰＵを用意して処理を分散させる場合が挙げられる。アナログ量である場合の例としては、発電機ネットワークがお互いの出力パワを配分する場合が挙げられる。
しかしながら、上記制御手法を、例えば、データセンターのデータ配置分散に応用しようとすると問題が発生する。データの配置問題の場合、負荷の移動はデータ単位となるので、データ種類によって負荷が異なり負荷が均質ではなくなる。それとともに、負荷の切り出しを連続的に行えなくなるので、式５あるいは式６で計算された量と同じ負荷を移動することが必ずしもできない。また、データの移動の場合、ネットワークを通じてあるノードから別のノードにデータを移動し、負荷分散を達成するわけだが、データはネットワークへの負荷が大きく、ネットワークの状態を無視するわけにはいかない。
（２）移動する負荷要素の選択
本実施例では、データｊへのアクセス頻度Ｋ１ｊとレプリカ数Ｋ２ｊとして、データサーバーｉにおけるデータｊの負荷λｉｊを次の式９で表した。
2014024612.tif 000010
（３）コンピュータＮ１、Ｎ２の評価関数
データサーバーのデータ配置負荷分散で一般的に評価されるのはレスポンス性能である。分散配置されたデータサーバーの系全体でレスポンス性能が最小になることが望まれる。サーバーなどの処理を行う機械のレスポンス性能を最小にする評価関数を今回は導出した。その説明を以下で行う。
待ち行列理論から、単位時間当たり平均λｉのポアソン分布で負荷が到着し、単位時間当たり平均μｍａｘのポアソン分布で負荷を処理できるとすると（Ｍ／Ｍ／１の待ち行列）、系全体のレスポンスが最小となる条件は次の式１０で表される。
2014024612.tif 000011
式１０の左辺は負荷量λｉの１次関数であり、λｉで積分すれば、λｉの２次関数が得られる。２次関数は凸関数であることが知られているから、式１０の左辺を積分した関数を各ノード（サーバーなど）の評価関数と考えるならば、式１０の意味は凸関数である評価関数の微分値が各ノード（サーバーなど）で等しくなるときレスポンスが最小になることを意味している。これはとりもなおさず、式５、式６の制御と同じである。つまり、式１０の左辺をλｉで積分した関数を各ノードの評価関数として設定し、本願発明の自律分散制御を行えば、定常状態では、系全体のレスポンスを最小にすることができるのである。μｍａｘはサーバーの処理能力に関するパラメータであり、この値により、サーバーの能力を記述できる。したがって、すべて同じ性能のサーバー群である必要はなく、様々な性能のサーバーが混在している系でも良い。式１０の左辺をλｉで積分した場合、定数の自由度だけ解が不定になるので、今回は原点（０，０）を通る関数を各データサーバーの評価関数に設定した。評価関数は、μｍａｘで一意に決まり、ピーク値がμｍａｘ１．５でピーク位置が（μｍａｘ，μｍａｘ１．５／２）の２次関数となる。図１０に設定した評価関数を示す。
（４）経路Ｐ１，２の評価関数
今回、ネットワークにも評価関数を設定した。ネットワーク（個々の回線またはリンク）も実はサーバーと同じ処理を実行する機械と考えることができる。単位時間ごとにやってくるパケットという負荷を処理していくと考えれば、サーバーと全く同じ観点で評価関数を設定できる。ネットワークの単位時間当たりの処理能力をμｍａｘ，ｎとすると、サーバーのときに使ったμｍａｘをμｍａｘ，ｎで置き換えた評価関数をネットワークに設定すれば良い。以下では簡単のため、ネットワークの処理能力もμｍａｘで統一して記載する。あるネットワークｉにかかる負荷をλｉ，ｎとすると、今回のデータ移動のケースでは、あるデータｊのデータ長さＬｊをとして次の式１１で表される。
2014024612.tif 000012
今回は、測定により次の式１２を使用した。
2014024612.tif 000013
（５）評価値Ｄｓ、Ｄｒ、Ｄｎの算出
これで、データサーバー、ネットワークともに評価関数が設定されたわけだが、データを移動するかどうかを判断するための評価量Ｄｓ、Ｄｒ、Ｄｎを設定しなければならない。今回は、データサーバー、ネットワークに設定した評価関数がレスポンスに関連した量を縦軸にしたものであるので、レスポンス量そのものを評価量Ｄｓ、Ｄｒ、Ｄｎに設定することとした。
待ち行列理論を用いれば、レスポンス量と今回の評価関数の関係は簡単に導出できるので、データ送り側のデータサーバーの番号をｉ、データ受け側のデータサーバーの番号ｊ、データを移動させるネットワークの番号をｋとして、以下の式１３−１５のように設定した。それぞれの式の右辺は評価関数をレスポンスに変換する式である。ここで、λｉはデータサーバーｉ全体の負荷、λｊはデータサーバーｊの全体の負荷、λｋはデータサーバーｉとデータサーバーｊの間のネットワークの負荷を表す。
2014024612.tif 000014
データ移動の最終決定は、式１３、式１４、式１５で計算した評価量で、Ｄｓと和Ｄｒ＋Ｄｎの大小を比較し、Ｄｒ＋Ｄｎ＜Ｄｓならばデータの移動を行う。
図１１を参照して、各ノードが実行する負荷の移動の要否判定について説明する。ノードは、そのノードに隣接する他のノードから必要な情報を取得（ステップＳ２０１）し、取得した情報に基づいて、負荷変化量を求め、その負荷変化量に相当する負荷を送信すべき隣接ノードを選択する（ステップＳ２０２）。
次に、ノードは、自ノードが保持している負荷（ノードがデータサーバーならばそのデータサーバーが保持しているデータオブジェクト）の中から、求めた負荷変化量に相当する負荷を選択する（ステップＳ２０３）。
次に、ノードは、評価量Ｄｓ、Ｄｒ、Ｄｎを求める。評価量Ｄｓは、ステップＳ２０３にて選択した負荷から自ノードが受ける影響の大きさを評価した値である。評価量Ｄｒは、ステップＳ２０３にて選択した負荷を、ステップＳ２０２にて選択した隣接ノードが保持したときに、その隣接ノードがその負荷から受ける影響の大きさを評価した値である。評価量Ｄｎは、ステップＳ２０３にて選択した負荷を、ステップＳ２０２にて選択した隣接ノードと自ノードとの間のネットワークを介して送出したときに、そのネットワークがその負荷から受ける影響の大きさを評価した値である。
更に、Ｄｒ＋Ｄｎ＜Ｄｓが成り立つか判定する（ステップＳ２０４）。判定が成り立つ場合、そのノードはその隣接ノード宛にその負荷を送出（ステップＳ２０５）し、更に、そのノードを起動したままにしておくか、それとも停止するかを決定（ステップＳ２０６）し、ステップＳ２０１に戻る。判定が成り立たない場合はその負荷の移動を中止（ステップＳ２０７）、ステップＳ２０１に戻る。
評価量Ｄｓ、Ｄｒ、Ｄｎを算出するとき、どの内部状態（負荷）の評価関数微分値を使用するかは、いくつかのバリエーションがある。最も簡単なのは、現在の内部状態に対する評価関数微分値を用いる方法である。その他には、現在の内部状態に、データを転送することにより新たに発生する負荷分をプラスした内部状態に対する評価関数微分値を使用したりすればより正確である。また、データを受け取ったことにより新たに発生する負荷分をプラスした内部状態に対する評価関数微分値を使用しても良い。今回は、現在の内部状態に対する評価関数微分値を用いた。
（６）実施例１の効果
本実施例では、待ち行列の時間変化をモニタすることで、本願発明の効果を調べた。待ち行列とは、ある時刻にサーバーに溜まっている処理要求数で、これが多いということは処理が遅れており、系全体のレスポンスが低いことを意味する。今回の場合、待ち行列数とアクセス数は同じである。データサーバーを３０台（データサーバーの処理能力は３種類で各１０台ずつ）用意し、データ数はほぼ１ｋＢのデータ（たまに１０ｋＢ程度のデータも混じる）が系全体で２００ランダムに配置される。３種類のデータサーバーは単位時間当たり、１２０、９０、６０の処理を行う設定とした。各データには単位時間当たり平均６のポアソン分布に従うアクセスが実施される。このアクセスが負荷、つまり処理である。
まず、本願発明を適用しない場合の待ち行列の時間変化を図１２に示す。ノード番号１、２、３の結果を示している。これらの処理能力はそれぞれ１２０、９０、６０である。処理能力の比較的低いノード３の待ち行列が溜まりがちであることがわかる。残りのノード（データサーバー）の結果も、処理能力ごとにほぼ同じであった。系全体のレスポンスは０．０８９ｓｅｃであった。
次に、本発明を適用したコンピュータネットワークシステムにおいて、ネットワークの帯域が１００ｋｂｐｓの場合の結果を図１３に示す。データの容量が１ｋＢであるので、データ配置の負荷分散が実施されるはずである。結果を見ると、待ち行列が溜まりやすかったノード３の待ち行列が減っていることがわかる。系全体のレスポンスは０．０２１ｓｅｃと大幅に改善しており、本願発明の有効性が示された。
さらに、本発明を適用したコンピュータネットワークシステムにおいて、ネットワークの帯域が１Ｍｂｐｓの場合の結果を図１４に示す。待ち行列が溜まりやすかったノード３の待ち行列がほとんどなく、代わりにむしろノード１の待ち行列が少し増えている。ノード１は能力が比較的高いので、能力の高いノードにデータを集めていることが伺える。系全体のレスポンスは０．０１４ｓｅｃとさらに改善しており、本願発明の有効性が示された。
５０秒後に、上記のノードに格納されていたデータ数を図１５に示すが、ネットワークのレスポンスが良くなるほど、性能の高いノードにデータを配置していることがわかる。式１０から今回の条件で導かれる最適なデータ配置個数を計算すると、図１５の１Ｍｂｐｓの場合と同じになった。つまり、本願発明によりデータの最適配置が実現されたと言うことができる。
【実施例２】
【０００９】
実施例１では、データサーバーのデータは配置負荷分散制御を示したが、データではなく、処理の負荷分散制御にも本願発明は使用できる。本実施例では、本願発明を用いた処理の負荷分散を説明する。本実施例では、実施例１と同じ構成を用いた。データサーバーを、データ移動を伴わない処理をするサーバーとし、ポアソン分布的に各サーバーに降りかかる処理を、本願発明を用いて分散させる。その際、実施例１のように、処理とデータの関係を式９のように表す必要はなく、現在抱えている処理数が負荷量だと思えばよい。そして、各処理は均質であるとした。したがって、この実施例の場合、式５または式６にて決定した負荷の移動量と同等の負荷を移動すると決定できる。移動量を決定した後は、実施例１と同様、Ｄｒ＋Ｄｎ＜Ｄｓを評価し、負荷を移動するかどうか決定する。以上より、処理の負荷分散の場合、負荷を個別に評価しないで実施例１を実施することと同じになることがわかる。
実施例１と同じ設定で、サーバーを３０台（データサーバーの処理能力は３種類で各１０台ずつ）用意した。３種類のサーバーは単位時間当たり、１２０、９０、６０の処理を行う設定とした。各サーバーには単位時間当たり平均６０のポアソン分布に従う処理が到着するものとする。実施した結果、本願発明を使用すると、使用しない場合に比べ１０倍程度のレスポンス性能が得られた。以上より、本願発明が、サーバーの負荷分散にも有効であることがわかった。
実施例２では、例えば転送を待っている処理の待ち数がネットワークの負荷と関連する。評価関数はネットワークの転送能力（μｍａｘ）に基づいて実施例１と同様に求めることができる。その際、ネットワーク転送を待っている処理の待ち数に負荷を関連付ける。より正確には、μｍａｘ−（負荷の到着数／待ち数）がそのノードの負荷になる。待ち数を直接負荷と考えるのはある種の近似である。
以上、本発明を実施の形態及び実施例に則して説明したが、本発明はこれに限定されるものではない。
この出願は、２０１２年８月６日に出願された日本出願特願第２０１２−１７３５２０号を基礎とする優先権を主張し、その開示のすべてをここに取り込むものである。
【図１】
2014024612.tif 000019
【図２】
2014024612.tif 000020
【図３】
2014024612.tif 000021
【図４】
2014024612.tif 000022
【図５】
2014024612.tif 000023
【図７】
2014024612.tif 000024
【図１０】
2014024612.tif 000025
【図１１】
2014024612.tif 000026
【図１２】
2014024612.tif 000027
【図１３】
2014024612.tif 000028
【図１４】
2014024612.tif 000029
【図１５】
2014024612.tif 000030
【図６】
2014024612.tif 000031
【図８】
2014024612.tif 000032
【図９】
2014024612.tif 000033
【国際調査報告】
2014024612.tif 000034
2014024612.tif 000035
2014024612.tif 000036