【0008】
以下、図面に基づいて本発明に好適な実施形態を詳細に説明する。
まず、本発明の動作、構成をデータセンターのリソース負荷分散の例を使用して説明する。従来の技術では十分に解くことができない例として、性能の異なるサーバが混在する異機種混合型データセンターにおける負荷分散を取り上げることにする。性能の異なるサーバが複数(N個)存在し、ネットワークで結合されたデータセンターにおいて、レスポンス要求値を満たしながら、処理要求をサーバに適宜分散させる。このときデータセンター全体の消費電力もできるだけ下げる。このような問題を考えていくことにする。この問題の概略図を
図1に示す。
本発明者はこの問題を検討した結果、以下の結論に達した。
解くべき問題は、2つの問題が混在している構造になっている。ひとつは、起動停止問題であり、もうひとつは最適化問題である。
起動停止問題とは、リソース群(機能ブロック群)があった場合、どのリソースを使い、どのリソースを使わないかを決定する、または管理する問題である。また、最適化問題は、リソースが与えられたとして、系全体に与えられた仕事をどのように割り振れば、ある指標の元に最適化できるかという問題である。これらの問題は従来、個々に、確率論的なアプローチで解くことを試みられていることが多いが、単純な確率論では、変幻自在に変わっていく環境の中で、状況に応じてロバスト、リアルタイムに即応することが難しい。今回は、これら2つの問題を一体のものとし、状況に応じてロバスト、リアルタイムに即応できるアーキテクチャを考案した。その際、それぞれの問題を、確率論ではなく、決定論的または関係論的な方法で解く方法を考案した。本発明者が創出した機能ブロックのアーキテクチャおよびこれを束ねたシステムの概略図を
図2に示す。
図2に示したように、本願の機能ブロックは主に、起動停止問題解決制御部と、最適化問題解決制御部を有し、互いに関連する機能ブロック(他の機能ブロック)とでシステムを構成している。
次に、それぞれの部位の解決手段について詳説する。
まず、最適化問題の解法を説明する。
最適化問題を解くには、ふたつの要件を考えなければならない。ひとつは、需給平衡化であり、もうひとつは全体利潤最大化である。この両者が満たされて始めて最適化が達成されたと言うことができる。需給平衡化制御は拘束条件を充足させる制御でもあるので、拘束条件充足制御と呼んでも良い。
即ち、
図2に示すアーキテクチャにおいては、最適化問題解決制御部は、利潤最大化制御部と、拘束条件充足制御部を有することになる。
需給平衡化とは、システム全体に要求されるミッションあるいはタスクの総量を満たさなければならないという拘束条件である場合が多い。これが満たされないまま、効率や利潤が最大化されても意味がない。今回の場合、需要とは、動作レベルλ
i(iは機能ブロックの番号)の総和となり、以下の式(4)で表される。
需給平衡化を達成しようとした場合、各機能ブロック(リソース)の動作レベルは、拘束条件充足制御部が、以下の関係(5)を満たす方程式を用いて決定する。
なお(5)においてλ
kは、動作レベルλ
iの機能ブロックと関係を持つ他の機能ブロックの動作レベルである。
この方程式は、より具体的には、以下の式(6)で表される。
ここで、K
1は動作レベル変更のゲインに相当する係数である。またλ
nom,iは機能ブロックiの規格化係数(機能ブロックの規模に相当する量)で、必ずしも必要でないが、要素がヘテロな場合、全体で規格化した係数を乗算しておいた方が良い場合が多いので、式(6)に導入している。式(6)に従い、拘束条件充足制御部が機能ブロックの動作レベルを制御すると、システム全体として、拘束条件であるDemを満たすように動作する。
次に解くべきは、全体利潤最大化である。これは全体効率最大化と読み替えても構わない。全体利潤最大化を解くに当たっては、
図3のような各要素(機能ブロック)と関係する評価関数を導入する(
図2では評価関数は機能ブロックの記憶部に記憶されている)。この場合、横軸は各機能ブロックを制御するパラメータであり、今回の例では処理要求の量λなどに相当する。縦軸は、何らかの効率に関わる指標であり、具体例は後述する実施例で詳説する。
図3から明らかなように、評価関数は凸関数である。凸関数を使用するのも本願発明のポイントである。なぜなら、多くのシステムでは何らかの効率やシステムの安定性などを
図3に示すような凸関数で表すことが可能だからである。なお、
図3のような上に凸な関数を凹関数と呼び、下に凸な関数を凸関数と呼ぶこともあるが、ここでは、関数の性質上で区別する表現を採用し、凹関数も凸関数と表現することにする。
評価関数が凸関数である要素を連携させて、全体で最適化(各要素の評価関数の値の総和が最大となる状態)する問題は、「凸計画問題」として知られており、各要素の動作レベルにおける評価関数の微分値が等しい状況で最適化が達成されることが数学的に明らかにされている。今回はこの原理を応用した。今回、評価関数として凸関数を使った理由がここにある。
この原理を勘案し、全体利潤最大化を達成する方程式は、以下の関係(7)を満たす。
なお式(7)においてf
iは、機能ブロックi(i番目の機能ブロック)の評価関数、f
kは、機能ブロックiと関係を持つ他の機能ブロックkの評価関数である。
より具体的には、以下の式(8)で表される。
ここで、K
2は動作レベル変更のゲインに相当する係数である。利潤最大化制御部が式(8)を満たすように各機能ブロックの制御を行うことで、各機能ブロックは、動作レベルにおける評価関数の微分値が等しくなるように動作する。
最終的に最適化問題を解くには、上記の需給平衡化と全体利潤最大化を同時に解くことが必要なので、最適化問題解決制御部は、式(6)と式(8)を統合した以下の式(9)で各機能ブロックの動作レベルを制御する。
次に、起動停止問題の解法を説明する。
式(9)は要素を起動、停止する機能を実は内包している。右辺第2項は要素と要素が評価関数の傾きを経由して、抑制しあう効果を持っている。そして、実際に起こる現象としては、評価関数の傾きが大きなもの(効率の改善が大きいもの)が、評価関数の傾きの小さいもの(効率の改善が小さいもの)を抑制し、場合によっては停止させる。したがって、式(9)の右辺第2項が起動停止問題の停止問題を解く機能を内包していると言える。一方、停止している、あるいは停止させられた要素を起動させることができるのが、右辺第1項である。右辺第1項は需要が足りなければ正になり、各要素をより動作させる方向に動かす。これは結果的に停止している要素も起動する方向に動かすことを意味している。したがって、式(9)の右辺第1項が起動停止問題の起動問題を解く機能を内包している。
しかしながら、式(9)を単純に運用しただけでは、起動停止問題を解いた上で、最適化問題を解くことにはならない。(9)の段階では、式(9)が起動する機能と、停止する機能を内包しているに過ぎないからである。例えば、
図4A〜
図4Cに、起動停止問題解決制御部が単純に式(9)を解いた場合の機能ブロックの動作例を示す。3つの直列結合した機能ブロック(ここではサーバに相当)が、
図4Aに示した評価関数を有するときに、トータルで0.4の負荷を実現するには、各要素がどれだけの負荷(パワ)を担当しなくてはならないかを式(9)を用いて起動停止問題解決制御部が制御したものである。なお、負荷が0以下の場合は、0をとるようにリミッタをかけた。
図4Bが各要素の負荷の時刻変化であり、
図4Cは各要素の評価関数の微分値の時刻変化である。
図4(b)より、自動的に効率の悪い「Node3」(機能ブロック3)が停止していることがわかる。これより、一見、式(9)で起動停止問題が解けているかのように見えるが、
図4Cをみると、「Node1」と「Node2」の微分値が一致していないことがわかる。「Node3」は停止したので、「Node3」と微分値が一致する必要はないが、起動している「Node1」と「Node2」の微分値が一致しないということは、システムが最適化されていないことを意味する。つまり、起動停止はできたが、最適化はされていないのである。これは、式(9)を単純に運用しただけでは、停止した機能ブロックが、起動している機能ブロックを抑制してしまうためである。
また、例えば、需要が急に増えたとして、
図4で停止された「Node3」が起動するかというと、式(9)の右辺第2項による抑制次第では、右辺第1項の起動する機能が働いたとしても、起動できない可能性がある。例えば、式(9)の第1項の増分が第2項の抑制分より少なければ、「Node3」は停止したままになってしまう。
このように、起動停止問題解決制御部が式(9)を単純に解くだけでは、起動停止問題と最適化問題を両立して解くことはできない。
そこで、本発明では、起動停止問題解決制御部に、式(9)で制御される最適化問題解決制御部に対して、機能ブロックの起動、停止状態を管理し、式(9)の制御を調整する機能を持たせることにした。具体的には、起動停止問題解決制御部には以下の機能を持たせた。
まず、第1の機能は、停止した機能ブロック(自身の負荷分担の最小値に達した機能ブロック)または上限の負荷に到達した機能ブロックは、式(9)の右辺第2項を計算するときには存在しないものとして扱う機能である。また、第2の機能は、停止した機能ブロックまたは上限の負荷に到達した機能ブロックの負荷を計算する場合、式(9)の右辺第2項そのものが存在しないとして、右辺第1項だけを用いて計算する機能(即ち利潤最大化制御部を用いない機能)である。式(9)の右辺第1項、右辺第2項を機能ブロックの状態によって、独立に扱うところがポイントである。そこに起動停止問題解決制御部の存在意義がある。これによって、事実上動作レベルを変更できない停止した機能ブロックまたは上限の負荷に到達した機能ブロックを利潤最大化制御部の制御から切り離しつつ、起動停止問題(事実上停止した機能ブロックと同じである上限に達した機能ブロックを含む)を解き、必要とあれば、拘束条件充足制御部により、事実上停止した機能ブロックを動作する状態(起動状態)に持ち込むことができる。
上述した2つの機能を、より具体的に説明する。
停止した機能ブロックまたは上限の負荷に到達した機能ブロックは、式(9)の右辺第2項を計算するときには存在しない機能ブロックとして扱うというのは、例えば、起動している機能ブロックの負荷を計算しようとした場合、停止した機能ブロックまたは上限の負荷に到達した機能ブロックに関する式(9)の右辺第2項の分子を0にするということである。当然、起動している機能ブロック同士に関しては右辺第2項の分子は存在するので、起動している機能ブロックが負荷を計算しようとしている機能ブロックに繋がっている場合、右辺第2項は何らかの値を持つ可能性がある。一方、停止した機能ブロック、または上限に達した機能ブロックの負荷を計算しようとした場合、右辺第2項はないものとして扱う。つまり、右辺第2項を0として扱う。これにより、停止した機能ブロック、または上限に達した機能ブロックは、式(9)の右辺第1項のみが影響するようになり、需給に問題があれば、それらの機能ブロックを再度起動させることが可能となる。
以上のように、本願発明で提案するような起動停止問題解決制御部と、最適化問題解決制御部により、両問題を一体として解決する制御が完成する。
図5A〜
図5Cに、需要が0.4から0.8に変わる場合(時刻2において)の3つの「Node」(機能ブロック)の負荷分散の制御例を示す。図の表記は
図4A〜
図4Cと同じであるが、需要が0.4のときは、「Node3」を停止し、需要が0.8になったときは「Node3」を改めて起動する制御が実現されている。また、評価関数の傾きはどちらの需要でも最終的に同じ値に収束しており、最適化問題も解決されていることがわかる。
需給平衡化の説明のところで、システム全体に要求されるミッションあるいはタスクの総量を満たさなければならないという拘束条件である場合が多いと書いたが、そうでない場合も想定されないわけではない。そのような場合は、その拘束条件を満たすように上述した需給平衡化の項を変形して、制御すれば良い。そのような場合も、起動停止問題解決制御部により、機能ブロックの状況を管理するのは重要で、そうしないと、起動も停止も良好に行われない。
ここで、大きなポイントは、各機能ブロックの評価関数は設定しているが、機能ブロック全体としての評価関数は設定していないことである。全体の評価関数を設定しなくて良いのは非常に大きなメリットである。個々の機能ブロックの評価関数はいろいろ設定できるが、全体の評価関数となると、システムが複雑になればなるほど判然としないからである。また、今回のシステムは、各要素が自身の状態と自身と関係のある要素の状態の情報のみで動作できる可能性がある。需給平衡化で使う情報は、全体の情報とも考えられるが、電力システムのように、需給バランスの崩れを交流周波数の変動で知ることができるものの場合は、需給平衡化も完全に自律分散的に実施できる。つまり、需給平衡化にまつわる情報を自身から得ることができれば、全体としての情報を必要としない真の自律分散システムになれるのである。
このシステムは、基本的に自律分散的に独立に動くので、どこかが故障したりしても、故障した要素からの信号が途絶えた分だけ、他の要素が自律的にリカバーするという動作を行う。また、突然要素を増やしたり、減らしたりしても、徐々に自律的に適正な動作に向かうことができる。つまり、外乱に対して、非常にロバストであり、また、要素の増減を自由にできるスケーラビリティを有している。
従来のシステムは、故障に対して無力であったり、様々なエラー用のシーケンスを用意したりしなければならなかった。また、勝手に要素(リソース)を増やしたり減らしたりすればシステム全体の安定性が保たれるか保証はなく、そのたびにプログラム、処理を見直さなければならなかった。今回のシステムはこれらの問題を自律分散適応的な制御ですべて解決することができるのである。
【実施例】
【0009】
以下、本発明の実施例を、図面を参照しながら、さらに詳細に説明する。
(実施例1)
図1に示したデータセンターのリソース負荷分散に対して、本願発明を実施した。この場合、動作レベル(nは機能ブロックの番号)は各リソースに割り当てられたタスク量に相当する。
データセンターのリソース負荷分散を考えた場合、管理者がこだわる制約条件としては、レスポンス、スループット、エネルギーなどが挙げられる。まず、最初に、レスポンスとスループットが制約条件になっている場合の本願発明の実施例を示す。
レスポンスとスループットは切っても切れない関係にあるが、それぞれの定義を記述すると以下のようになる。レスポンスRは、処理にかかる時間そのものであり、スループットSは、単位時間に処理される仕事量である。したがって、要求される仕事量λに対して、単純には以下の式(10)が成立する。
S=λ・R …(10)
(S≦1)
しかしながら、実際のリソースの実効的なレスポンスReはこのようにはならない。これは、待ち行列理論による確率的な待ち時間を検討しなければならないのである。実効的なレスポンスはリソース単体の処理能力だけではなく、どれぐらいの仕事が到達し、どのくらい未処理の仕事が溜まっているかに依存するからである。待ち行列理論はそれを確率的な計算で明らかにしたものである。
待ち行列理論によれば、到達してから処理が終わるまでの時間Tmは以下の式(11)のように記述される。
Tm=1/(μ−λ) …(11)
ここで、μは単位時間当たりの処理率を表し、レスポンスRの逆数でもある。実効的なレスポンスReは、Tmの逆数と考えられるので、(10)の関係も使うと、以下の式(12)が成り立つ。
Re=μ−λ
=1/R−S/R
=(1−S)/R …(12)
このように、実効的なレスポンスReもスループットと緊密な関係がある。式(12)からわかるのは、実効的なレスポンスを上げたければ、スループットを下げればよいし、スループットを上げたければ、実効的なレスポンスを下げれば良い。つまり、お互いがトレードオフになっており、かつどちらかの極限値では、他方が無効状態(0になる)になるということであり、管理者は適当な按配で両者をバランスさせる必要がある。
では、本願発明を用いて、管理者はどのようにデータセンターの負荷分散を実現すればよいのだろうか。上述したように、実効的なレスポンスとスループットはトレードオフの関係にあるので、レスポンス重視にしたければ、各要素(リソース)に分散される仕事量を低めにすればよいし、スループットを重視したければそれを多めにすれば良い。したがって、各要素に設定する関数を例えば以下のような手法で設定していけばよい。
図6に評価関数の概略図を示す。今回の検討課題が負荷分散なので、横軸は仕事量とした。先にも述べたが、評価関数は凸関数が良いので、今回は上に凸な2次関数とした。λmaxはそのリソースの限界であり、λpeakは評価関数のピーク位置を表す。評価関数のピークを1として規格化しておくと、規格化評価関数は(0,0)、(λpeak,1)を通る2次関数として決定できる。各要素(リソース)には性能差があるので、その性能差に比例した係数α
iを規格化評価関数に掛けることで、個々の評価関数とする。λpeakはスループットSが1になり、実効的レスポンスReが0になる位置である。先にも述べたが、レスポンス重視にしたければ、各要素(リソース)に分散される仕事量を低めにすればよいし、スループットを重視したければそれを多めにすれば良い。したがって、レスポンス重視で仕事をシステムに実施してもらいたければ、λpeakの位置を小さめに設定すれば良く、スループット重視で仕事をして欲しければλpeakの位置を大きめすれば良い。システムは本願発明の方法を使って、起動停止問題、最適化問題を解きながら動作し、それぞれの要素のλpeakの位置をできるだけ目指す。したがって、λpeakの位置を小さめに設定していれば、それぞれの要素の負荷が比較的小さめに仕事が分散されることになり、全体としてはレスポンス重視の動作となる。また、λpeakの位置を大きめに設定していれば、それぞれの要素の負荷が比較的大きめに仕事が分散されることになり、全体としてはスループット重視の動作となる。無駄なリソースは適宜停止させるので、エネルギー的にも無駄のない制御となる。
この場合、評価関数の縦軸は実際の何らかの効率にはなっていない。むしろ管理者が動作させたい位置であり、評価関数の設定は、何らかの物理量、法則に支配されることはない。システムを動作させたい人間が、縦軸、横軸を任意に設定することができるのである。ある意味、人間がシステムに評価関数として指示を渡すと、後はシステムが自律的に協調して動作するのである。
今回、評価関数は(0,0)、(λpeak,1)を通る2次関数に係数α
iを掛けたものとしたが、凸関数であれば良いので、様々に設定して良い。極論すれば、手書きの評価関数を設定しても良い。
上述した評価関数を用いて、
図1に示すデータセンターの負荷分散の実験を行った。各サーバには、
図2で示した本願発明の機能ブロックが内蔵されており、各サーバは自身に設定された評価関数と自身に接続された他のサーバの状況を見ながら、起動停止問題解決と最適化問題解決を行う。今回の各サーバはすべて接続されており、需給平衡化に必要な全体要求(需要)と現時点でのシステム全体の仕事量の差をモニタすることを可能とした。各サーバをすべて接続するのが大変な場合は、需給の差をモニタし、各サーバに伝えることができる部位を入力のところに設定しても良い。
負荷分散を決定する係数K
1、K
2などを適宜設定した。また、サーバの総数は1000台とした。また、各サーバの性能は均一ではなく、性能が高いものほどα
iを大きく設定した。
図7Aおよび
図7Bに第1の実験結果を示す。グラフの横軸は時間、縦軸は、
図7Aではシステム全体の実効的なレスポンス、スループット、
図7Bでは起動しているサーバ(リソース)の数である。最初は、λpeakを小さめに設定し、レスポンス重視で動作させている。その後、図中のスループット重視と描かれた時刻にλpeakを大きめに設定しなおしている。すると、システムは自律的にレスポンス重視な方向に動作を変更していくことが確認された。起動しているサーバも適宜調整されており、本願発明が有効であることが確認できた。
図8Aおよび
図8Bに第2の実験結果を示す。グラフの横軸は時間、縦軸は、
図8Aではシステム全体の実効的なレスポンス、スループット、
図8Bでは起動しているサーバ(リソース)の数である。あるλpeakの設定で動作させている途中で、人為的に1割のサーバを止めた(図中矢印で示す「故障発生」と記載された部分)。すると、一時的にスループット、レスポンス能力が下がるが自律的に回復する様子がわかる。サーバの能力は均一ではなく、ヘテロな状態なので、自律的に回復した後に使用されているサーバの数は、人為的にサーバを止めた前後で変わっている。これは、まさしく自律的に起動停止問題を解いていることを意味している。故障に対するロバスト性に関しても、本願発明が有効であることが確認できた。
図9Aおよび
図9Bに第3の実験結果を示す。グラフの横軸は時間、縦軸は、
図9Aではシステム全体の実効的なレスポンス、スループット、
図9Bでは起動しているサーバ(リソース)の数である。あるλpeakの設定で動作させている途中で、人為的に100台のサーバを追加した(図中矢印で示す「サーバ追加」と記載された部分)。すると、スループット、レスポンス能力を変化させることなく、自律的に追加サーバを含めたサーバの起動停止を行い安定状態に落ち着く。これは、このシステムがスケーラブルであることを示しており、リソースの増減に対してプログラムの変更、処理の変更が全く必要ないことを意味している。これは、非常に有用な特性であり、本願発明が有効であることが確認できた。
(実施例2)
図1に示したデータセンターのリソース負荷分散に対して、実施例1同様に本願発明を実施した。実施例1では、レスポンスとスループットが制約条件になっている場合の本願発明の実施例であったが、ここでは、エネルギーが制約条件になっている場合の本願発明の実施例を説明する。エネルギーが制約になっているという意味は、できるだけ省電力でシステムを運用したいという意味である。
これも基本的には評価関数の設定の問題となる。
ここでは、筋肉の効率の式を参考にすれば、動作するもののエネルギー効率は、アイドリング時の消費電力H
def、仕事時消費電力W(λ)、仕事時追加消費電力(空冷ファンなど)Hによって、以下の式(13)で記述することができる。
一般的には、この効率はλmax以下のどこかでピークを迎える凸関数になるので、λmax以下は式(13)を評価関数として使用すれば良い。このエネルギー効率の式の場合、λmax以上の仕事量は定義できないので、今回は、人為的に描いた。
図10に使用した評価関数のイメージを示すが、λmaxより大きな仕事量における評価関数は、運用者が好みで設定してしまっても良い。例えば、レスポンス重視なら、早く仕事量を減らしたいので、急な斜面にしておけば良いし、スループット重視であれば、仕事量をいきなり減らさなくてもいいので、傾きが緩やかな曲線を描いてやれば良い。このように、評価関数は運用者が自在に作っていけるのである。注意点としては、自在に作れる分、評価関数により適正にされていくものが、客観的定量性をもって適正化されているかを言及できなくなる場合がある。例えば、今回の場合、λmax以下では定量的なエネルギー効率の関数であるが、λmax以上は運用者の快適度のような定性的な関数となる。どうしても客観的定量性が必要なときは、客観的な指標を使う、または客観的な指標に変換できるものを考えていく必要がある。しかしながら、これまでのシステムの運用は管理者の経験や、好みで運用されている場合も多く、定性的な意味の評価関数で運用できるというのは、管理者の好みで運用できることでもあるので、むしろ有益な特性であると言える。
上述した評価関数を用いて、実施例1と同様の構成でデータセンターの負荷分散の実験を行った。
図11Aおよび
図11Bに実験結果を示す。今回の例では、最初すべてのサーバ(1000台)を動作させておき、その後、エネルギー効率、動作するサーバの台数がどうなるかを見た。
図11Aおよび
図11Bからわかるように、最初はすべてのサーバが動作することにより、無駄なエネルギーを消費していたが、自律的に起動するサーバを選択、負荷を分散させることで、消費エネルギーを減らしていることが確認できる。つまり、本願発明が有効であることが確認できた。
(実施例3)
本実施例では、実施例1で説明したレスポンスまたはスループットを重視した制御と、実施例2で説明したエネルギー効率を重視した制御を状況依存的に切り替える手法を説明する。基本的には実施例1と同様のデータセンターの構成で実験を行ったが、1点異なるのが、状況依存的に評価関数を切り替える命令を出す評価関数切り替え部を設置しているところである。本実施例のシステム概略図を
図12に示す。この評価関数切り替え部は、各サーバ(リソース)が従う評価関数を、実施例1で用いたものと実施例2で用いたもののどちらかに切り替える命令を、各リソースに送信する。その命令を受けた各リソースは、命令にあった評価関数を設定し、起動停止問題、最適化問題を解く制御を実施する。評価関数切り替え部は、管理者の希望を受け取り、それに適した評価関数を選択、各リソースに命令を送信しても良いし、何らかの外部入力から状況を判断する判別器を設定し、その判別器を使って自動的に評価関数の選択を行っても良い。今回は、実施例1で用いた評価関数と実施例2で用いた評価関数の2種類の切り替えを行ったが、この切り替えは2種類にとどまる必要はなく、評価関数を設定すれば、所望の数の評価関数の切り替えを実施することができる。また、今回の例では、評価関数切り替え部を全体でひとつ置いたが、個々の機能ブロック(リソース)に設置するという方法も考えられる。
上述したシステムを用いて、実験を行った結果を
図13Aおよび
図13Bに示す。評価関数切り替え部がある以外は実施例1、2と同様の条件である。グラフの横軸は時間、縦軸は、
図13Aではシステム全体の実効的なレスポンス、エネルギー効率、
図13Bでは起動しているサーバ(リソース)の数である。最初は、レスポンス重視で動作させ、途中で(図中矢印の部分)、エネルギー効率重視に切り替えた。すると、最初はレスポンスが高い値で、エネルギー効率はそれほど高くないが、エネルギー効率重視にすると、レスポンスは悪くなるが、エネルギー効率は高くなっていく。つまり、評価関数切り替え部を通じた評価関数の切り替えがうまく行っていることが確認できた。また、この実施例より、管理者は複数の要件(レスポンス重視、エネルギー重視など)があった場合でも、プログラムの変更、処理の変更なしで、適宜システムの動作目標の変更を指示するだけで、システムの動作を変更できることがわかる。つまり、本願発明は、複数の要件が合った場合にも、有効に動作させることができ、本願発明が有効であることが確認できた。
(実施例4)
本実施例では、データセンターが複数あり、それらがネットワークで繋がっている場合のリソース負荷分散の例を説明する。個々のデータセンターは実施例1と同様の構成であるが、それらが
図14に示したように、ネットワークで結合されて複数存在するというモデルである。上述の実施例との違いは、リソースがデータセンター内に閉じていないので、ネットワークによる遅延が無視できなくなることである。したがって、レスポンス、スループットを考えるとき、処理要求を行うデータセンター(命令された処理をメインで実施しているデータセンター)からの距離(遅延)も勘案して機能ブロック(リソース)の負荷分散をやらなければならないことである。
今回の実施例では、レスポンス重視の制御を行う。つまり、実施例1で使用した評価関数をすべてのリソースに対して使用した。処理要求を行うデータセンターからの距離(遅延)をどのように勘案するかであるが、処理要求を行うデータセンターからの伝達遅延量Dlyとしたときに、
なる係数を、各データセンター内の要素(リソース)の性能係数α
iに加えて、規格化評価関数に乗算した。これにより、各リソースが、近くのデータセンターでは比較的高い性能、遠くのデータセンターでは比較的低い性能として認知され、遅延のあるネットワーク越しでも好適なリソースの負荷分散が実施される。
上述した複数のデータセンターがある場合において、実験を行った結果を
図15Aおよび
図15Bに示す。グラフの横軸は時間、縦軸は、
図15Aではシステム全体の実効的なレスポンス、
図15Bでは起動しているサーバ(リソース)の数である。今回は処理要求を行うデータセンターの近くに、処理能力が格段に高いリソースが多くあるケースでの実験とした。したがって、ネットワークによる遅延があったとしても、外のデータセンターのリソースを使用したほうが良いと想定されるケースである。図中の矢印の部分までは、単一のデータセンターで処理(を行っているのだが処理要求を行うデータセンターだけで処理を行っているという意味)、その後は、周りのデータセンターとネットワーク的に結合し、レスポンス、起動しているサーバ数を見たものである。起動しているサーバ数というのはネットワークで結合したすべてのデータセンターにおきる起動しているリソース数である。
図15Aおよび
図15Bから、ネットワークでデータセンター間を結合すると、格段に処理能力の高いリソースを求めて、自律的にリソースを起動停止し、レスポンス能力を維持したまま、ネットワーク越しの格段に処理能力の高いリソースを使用し、起動するリソースの数を自律的に減らしている様子がわかる。遅延のあるネットワークで結合された要素(リソース)においても、本願発明が有効であることが確認された。今後、クラウド間の連携が議論されてきた場合、本願発明を使用する意味は大きい。
(実施例5)
これまでの実施例では、レスポンス、スループット、エネルギーといった処理に関するリソースの負荷分散について記述してきたが、本願発明の適用例はそれだけに止まらない。ここでは、ストレージの負荷分散に使用した実施例を説明する。
この実施例で使用したシステムの概略図を
図16に示す。実施例1のリソースがストレージに変更されたイメージである。各ストレージには、
図2で示した本願発明の機能ブロックが内蔵されている。この場合も評価関数をどうするかが重要なポイントとなるが、
図17に示す評価関数を使用すれば良い。この場合、横軸のλ
Sはストレージ量(記録量)である。縦軸は、規格化されているが、この規格化評価関数にストレージの性能に比例した係数αs
iを乗算する。この場合の性能とは記録スピード、アクセス性、アーカイブ性(保存性)などを勘案して決定すればよい。このケースでは、記録スピードを出したいとき、アーカイブ性を出したいときなどの状況に合わせて、各要素の係数αs
iだけ変更するという制御も考えられる。その変更により、システムは要求に適したストレージにデータを移していく。このように評価関数の設定は非常に自由であることが、本願発明の大きな利点のひとつとなっている。
上述したストレージの負荷分散の例に関して、実験を行った結果を
図18Aおよび
図18Bに示す。グラフの横軸は時間、縦軸は、そのストレージに記録されているデータの量である。今回の例では、高速性のあるストレージのひとつと、アーカイブ性の高いストレージのひとつを取り出し、モニタした結果を示している。図中の矢印のところで、評価関数を高速性重視のものから、アーカイブ性を重視するものに変更している。図を見るとわかるとおり、矢印以降では、アーカイブ性の高いストレージの容量が増え、高速性の高いストレージの記録量が減っている。つまり、自律的に管理者の意図をシステムが実現しているのである。このほうに、本願発明は、何らかの機能ブロック(リソース)が関連して存在(ネットワークで結合)していれば様々な分野で同じように使用できる。この実施例ではそれが確認されたことになる。
(実施例6)
これまでの実施例では、情報分野の負荷分散制御の話であったが、本願発明の適用は情報分野に限らない。例えば、インフラ系のエネルギー、水などの制御にも問題なく使用できる。この実施例では、複数の太陽光エネルギーを接続した場合に、適正な電力が得られるか、本願発明を用いて実施した例を説明する。
本実施例の概略図を
図19に示す。丸印が太陽光エネルギー源である。エネルギーを消費するのが需要家であるが、需要家は太陽光エネルギーの供給源になる場合もあり、そのような需要家のところには丸印が描いてある。太陽光エネルギー発生源には、
図2で示した本願発明の機能ブロックが内蔵されており、各太陽光エネルギー発生源は自身に設定された評価関数と自身に接続された他の太陽光エネルギー発生源の状況を見ながら、起動停止問題解決と最適化問題解決を行う。今回、太陽光エネルギー発生源が自身の電力を調整する方法としては、パネルの角度を変える方法を採用した。今回の実施例は所謂スマートグリッドの雛形を用いた実験例である。実験の都合上、電力会社が供給する電力網を使用した実験はできなかったが、今回の実施例が有効であれば、電力会社の発電所と再生可能エネルギー(太陽エネルギー、風力エネルギーなど)のヘテロな(ハイブリッドな)電力網でも有効に働くのは間違いない。
上述した電力の負荷分散の例に関して、実験を行った結果を
図20Aおよび
図20Bに示す。グラフの横軸は時間、縦軸は、
図20Aでは、そのシステム全体としての電力量、
図20Bでは動作している太陽光エネルギー源(リソース数)である。図中の矢印に示す「故障発生」と記載されたところで、故意に幾つかの太陽光エネルギー源を遮断した。幾つかの太陽光エネルギー源を遮断したときに、電力量は一瞬低下するが、すぐに自律的に適正な電力量に戻る。今後、再生可能エネルギーが、既存の電力網にどんどん乗り入れてくると考えられる。再生可能エネルギーは、状況に非常に左右されるエネルギー源なので、電力供給をしたり、しなかったりは日常茶飯事で、かつ予想できない。このような状況では、本願発明が実施したように、システムが自律的に自己復元できる必要がある。本願発明が非常に有効に活用されることが予想される。また、この実施例から、本願発明が情報分野のみならずインフラ分野の制御にも有効であることが実証された。
(実施例7)
これまでの実施例は、評価関数を管理者が予め設定する、あるいは供給するという形をとっていた。つまり、やや固定化された評価関数であった。また、定量的に実際の効率などと完全に適合しているかどうか保証していないものもあった。ここでは、その評価関数を徐々に実際のものに定量的に近づけてしまう方法について説明する。エネルギー効率は実測できる量なので、エネルギー効率に関わる評価関数を徐々に実際に即して変更する方法について述べる。エネルギー効率に関する実施例なので、基本構成は実施例2と同じものを使用した。
今回の場合、各リソースに設定された評価関数を徐々に定量的に正確なものにするというものである。基本的には最初に設定された評価関数の値と現時点での実測値の差に係数を掛けてフィードバックしていくという方法である。これにより、徐々に、評価関数が定量的に正しくなっていく。
図21Aに示すように、各機能ブロック(リソース)にこのフィードバックプロセスを実行する評価関数修正制御部を設け、
図21BでS0〜S4と示す各プロセスを実行する。
上述したシステムで、エネルギー効率がどう推移するかを見たのが
図22である。評価関数修正部が各リソースに取り付けられている以外は、実施例2と同じ条件である。グラフの横軸は時間、縦軸はエネルギー効率であるが、時間とともにエネルギー効率が改善していることがわかる。評価関数のダイナミックな調整も可能であることがわかった。
(実施例8)
これまでの実施例では、停止した要素(ノード)がネットワークを完全に遮断してしまうケースに関して説明しなかった。このようなケースはあまり多くなく、また全ノードを管理している部分があれば問題ないので、必ずしも考える必要はないが、この実施例ではそのようなケースについて考えてみる。簡単のため、
図23Aに示す9個のノード(機能ブロック)が直線的に並んだ場合の負荷分散について考える。実施例としては
図1の特殊なネットワーク形状とも考えられる。評価関数としては、
図23Bに示すように、ノード番号を3で割り、余りが1のもの、2のもの、0のものは同じとした。トータルの需要を0.4として、単純に本願発明を適用すると
図24Aおよび
図24Bに示す結果となる。本来、ノード1、4、7が同じ負荷となり、その他のノードの負荷が0となるはずであるが、ノード1、4、7は同じ負荷となっていない(図示していないが、その他のノードの負荷は0になっていることは確認されている)。また、評価関数の微分値も同じとなっていない。つまり、うまく起動停止問題と最適化問題を解くことができていない。これは、ノード1、4、7を繋ぐ、間のノードが停止してしまったことで、式(9)の右辺第2項が働かなくなってしまったからである。
このような場合は、停止したノードとはいえ、隣接ノードのうち起動しているノードの評価関数の微分値を周辺のノードに伝えるように制御をかけると問題がなくなる。つまり、自身が停止しても、周辺の起動しているノードの評価関数の微分値を周辺に伝達する機能を起動停止問題解決ブロックに組み込むのである。
そのようにした場合の制御結果を
図25Aおよび
図25Bに示す。間のノードが停止しても、ノード1、4、7がしっかり相互作用し、起動停止問題、最適化問題を解いていることがわかる。このように、起動停止問題解決ブロックに自身と周辺ノードの状況を管理する機能をつけていくことで、様々な状況でも問題なく起動停止問題、最適化問題を解決することができる。
システムの都合により、クリティカルなパスが存在してしまい、そこが故障してしまうというケースにおいてもこのような手法を使うことで問題なく起動停止問題、最適化問題を解決することができるのである。