(57)【要約】  サーバ装置のオートスケールの際に発生する遅延を抑制する。  コンピュータまたはコンピュータと同じシステムに属する他のコンピュータがサーバソフトウェアを実行することで実現される複数のサーバが接続され、それぞれの接続が、負荷値の受け渡しに関する従属関係を構成している。コンピュータは、そのコンピュータで実現される第１のサーバ（１０）に従属する１以上の第２のサーバ（１０ａ）から、１以上の第２のサーバ（１０ａ）以下に従属する１以上のサーバ群（１０ａ，１０ｂ）の負荷値を受信する。コンピュータは、第１のサーバ（１０）の負荷値と、１以上の第２のサーバ（１０ａ）それぞれから受信した負荷値に基づいて、システムを増強させるか否かを判定する。
2015145753.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
前記コンピュータまたは前記コンピュータと同じシステムに属する他のコンピュータが、サーバソフトウェアを実行することで実現される複数のサーバが接続され、それぞれの接続が、負荷値の受け渡しに関する従属関係を構成しており、前記コンピュータで実現される第１のサーバに従属する１以上の第２のサーバから、前記１以上の第２のサーバ以下に従属する１以上のサーバ群の負荷値を受信し、
前記第１のサーバの負荷値と、前記１以上の第２のサーバから受信した負荷値に基づいて、前記システムを増強させるか否かを判定する、
処理を実行させることを特徴とするプログラム。
【請求項２】
前記コンピュータに、さらに、
前記システムを増強させると判定した場合、前記第１のサーバに従属するサーバの追加要求を出力する、
ことを特徴とする請求項１記載のプログラム。
【請求項３】
前記判定では、前記第１のサーバおよび前記１以上のサーバ群に属するサーバの負荷値の平均値が閾値以上の場合、前記システムを増強させると判定する、ことを特徴とする請求項１または２のいずれかに記載のプログラム。
【請求項４】
前記判定では、さらに、
前記第１のサーバおよび前記１以上のサーバ群に属するサーバの負荷値の平均値が閾値未満の場合、前記システムを縮小させると判定する、
ことを特徴とする請求項１乃至３のいずれかに記載のプログラム。
【請求項５】
前記コンピュータに、さらに、
前記システムを縮小させると判定した場合、前記第１のサーバの停止要求を出力する、
処理を実行させることを特徴とする請求項４記載のプログラム。
【請求項６】
前記判定では、さらに、
前記第１のサーバおよび前記１以上のサーバ群に属するサーバの負荷値の平均値の変化量が閾値以上の場合、前記システムを増強させると判定する、ことを特徴とする請求項１乃至５のいずれかに記載のプログラム。
【請求項７】
前記判定では、さらに、
前記第１のサーバおよび前記１以上のサーバ群に属するサーバの負荷値の平均値の変化量が閾値未満の場合、前記システムを縮小させると判定する、
ことを特徴とする請求項１乃至６のいずれかに記載のプログラム。
【請求項８】
前記第１のサーバは、前記コンピュータによって構築された仮想マシンによって実現されており、前記受信と、前記判定とを、該仮想マシンに実行させる、
ことを特徴とする請求項１乃至７のいずれかに記載のプログラム。
【請求項９】
前記コンピュータによって複数の仮想マシンが構築され、各仮想マシン上でサーバが実現されている場合、各仮想マシンに対し、該仮想マシン上で実現されているサーバを前記第１のサーバとして、前記受信と、前記判定とを実行させる、
ことを特徴とする請求項８記載のプログラム。
【請求項１０】
前記複数のサーバは、負荷の受け渡し関係が木構造となるように接続されていることを特徴とする請求項１乃至９のいずれかに記載のプログラム。
【請求項１１】
コンピュータに、
前記コンピュータまたは前記コンピュータと同じシステムに属する他のコンピュータが、サーバソフトウェアを実行することで実現される複数のサーバが接続され、それぞれの接続が、負荷値の受け渡しに関する従属関係を構成しており、前記コンピュータで実現される第１のサーバに従属する１以上の第２のサーバから、前記１以上の第２のサーバ以下に従属する１以上のサーバ群の負荷値を受信し、
前記第１のサーバの負荷値と、１以上の第２のサーバそれぞれから受信した負荷値に基づいて、前記システムを増強させるか否かを判定する、
処理を実行させることを特徴とする管理方法。
【請求項１２】
コンピュータまたは前記コンピュータと同じシステムに属する他のコンピュータが、サーバソフトウェアを実行することで実現される複数のサーバが接続され、それぞれの接続が、負荷値の受け渡しに関する従属関係を構成しており、前記コンピュータで実現される第１のサーバに従属する１以上の第２のサーバから、前記１以上の第２のサーバ以下に従属する１以上のサーバ群の負荷値を受信する受信部と、
前記第１のサーバの負荷値と、１以上の第２のサーバそれぞれから受信した負荷値に基づいて、前記システムを増強させるか否かを判定する判定部と、
を有することを特徴とするコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、負荷を管理するプログラム、管理方法およびコンピュータに関する。
【背景技術】
【０００２】
複数のサーバ装置を有するシステムでは、クライアント装置などからの要求に応じた複数の処理を、複数のサーバ装置で並列に実行させることができる。これにより、処理効率が向上する。システム内のサーバ装置の台数は、例えば、そのシステムの負荷に応じて決定される。運用中にシステムの負荷が増大した場合、例えば、システム内のサーバ装置の数を増やすことができる。これにより、サーバ装置１つあたりの負荷が減少し、処理効率の低下が抑止される。以下、システム内のサーバ装置の数を増やすことを、スケールアウトと呼ぶ。【０００３】
スケールアウトする場合、新たなサーバ装置を起動し、そのサーバ装置にも要求を振り分けるようにする。このようなスケールアウトは、例えば、管理者による手動操作によって行われる。また、管理者の操作なしに、システムにおいて自動でスケールアウトを行うこともできる。スケールアウトを自動で行う機能は、オートスケールと呼ばれる。【０００４】
スケールアウトを実施する場合、事前に、システム増強の要否判定が行われる。例えば、管理サーバによってシステムの負荷を監視する。そして管理サーバは、サーバ装置１台あたりの負荷が所定値を超えたことを検出すると、スケールアウトなどによるシステムの増強を要すると判定する。【０００５】
なお、オートスケール以外にも、システムの負荷増大に対処するための、様々な技術が考えられている。
例えば、複数の異なるハードウェアおよびソフトウェア（すなわち、プラットフォーム）の異なる組合せを持つ複数の異なる装置を使用するネットワークの最適化システムが提案されている。このシステムは、このようなネットワークの性能を正確に評価し、調節し、最適化する。【０００６】
また、ノードのクラスタに対する非集中型のアプリケーション・リソース割振りの方法が提案されている。この方法では、実行されているアプリケーションの集合を含むローカル・ノードが、ノード・サブセットからアプリケーションのリソース利用データを受信し、そのリソース利用データに基づいて、ローカル・ノードで実行するアプリケーションの集合を修正する。【０００７】
また、システムの負荷が増大した場合にリアルタイム性を維持しながら負荷分散する技術が提案されている。この技術では、複数のサーバを含む計算機システムにおいて、サーバの負荷が所定の上限値を超えた場合、そのサーバで実行される中のサービスの一部を実行させる転送先サーバを選択する。そして計算機システムは、負荷が上限値を超えたサーバに割り当てられたサービスから一以上のサービスを選択し、転送先サーバに選択されたサービスを割り当てる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特表２００５−５０５８５９号公報
【特許文献２】特開２００７−２０７２２５号公報
【特許文献３】特開２０１０−１３４５１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ここで、複数のサーバ装置を有するシステムでは、負荷が変動してからシステム増強の必要性の判定に時間がかかることがある。例えば、大量のトランザクションを複数のサーバ装置が処理する場合、サーバ装置が大量に必要となる。そのため、大量のサーバ装置の処理による負荷の監視や分析に時間がかかる。負荷の監視や分析に時間がかかれば、例えば、オートスケールによりスケールアウトが実行されるまでに過大な遅延が発生する。すると、システムによるトランザクションの実行が遅れ、場合によっては、システムの障害の原因にもなり得る。【００１０】
一側面では、本発明は、システム増強の要否判定を迅速に行うことができるプログラム、管理方法およびコンピュータを提供することを目的とする。
【課題を解決するための手段】
【００１１】
一側面では、コンピュータに処理を実行させるプログラムが提供される。コンピュータは、このプログラムを実行することで、そのコンピュータまたはそのコンピュータと同じシステムに属する他のコンピュータがサーバソフトウェアを実行することで実現される複数のサーバが接続され、それぞれの接続が、負荷値の受け渡しに関する従属関係を構成している。コンピュータは、そのコンピュータで実現される第１のサーバに従属する１以上の第２のサーバから、１以上の第２のサーバ以下に従属する１以上のサーバ群の負荷値を受信する。そしてコンピュータは第１のサーバの負荷値と、１以上の第２のサーバそれぞれから受信した負荷値に基づいて、システムの増強の要否を判定する。
【発明の効果】
【００１２】
一側面では、システム増強の要否判定を迅速に行うことができる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の情報処理システムを示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】実行サーバ装置のハードウェア例を示すブロック図である。
【図４】仮想サーバ間の性能測定値の受け渡し関係を定義する木構造の一例を示すブロック図である。
【図５】端末装置からの要求を振り分ける接続関係の一例を示すブロック図である。
【図６】実行サーバ装置と管理サーバの機能例を示すブロック図である。
【図７】閾値情報テーブルの設定例を示す図である。
【図８】負荷分析値テーブルの例を示す図である。
【図９】トランザクションの変化量の例について示すブロック図である。
【図１０】サーバ数管理テーブルの例を示す図である。
【図１１】仮想サーバ数の取得例を示すブロック図である。
【図１２】階層管理テーブルの例を示す図である。
【図１３】階層管理テーブルの設定例を示す図である。
【図１４】仮想サーバによるオートスケールの手順例を示すフローチャートである。
【図１５】トランザクション数を取得する手順例を示すフローチャートである。
【図１６】トランザクション数を分析する手順例を示すフローチャートである。
【図１７】オートスケールを実行する手順例を示すフローチャートである。
【図１８】スケールアウトの手順例を示すフローチャートである。
【図１９】スケールアウトにおける装置間の応答例を示す図である。
【図２０】スケールアウト例を示す第１のブロック図である。
【図２１】スケールアウト例を示す第２のブロック図である。
【図２２】スケールアウト例を示す第３のブロック図である。
【図２３】第１のスケールインの手順例を示すフローチャートである。
【図２４】第１のスケールインにおける装置間の応答例を示す図である。
【図２５】第１のスケールイン例を示すブロック図である。
【図２６】第２のスケールインの手順例を示すフローチャートである。
【図２７】第２のスケールインにおける装置間の応答例を示す図である。
【図２８】第２のスケールイン例を示すブロック図である。
【図２９】第３のスケールインの手順例を示すフローチャートである。
【図３０】第３のスケールインにおける装置間の応答例を示す図である。
【図３１】第３のスケールイン例を示すブロック図である。
【図３２】閾値情報テーブルの変化例を示す図である。
【図３３】負荷分析値テーブルの変化例を示す図である。
【図３４】第２の実施の形態の効果を示す第１のブロック図である。
【図３５】第２の実施の形態の効果を示す第２のブロック図である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理システムを示す図である。第１の実施の形態の情報処理システムは、サーバ１０，１０ａ，１０ｂ，１０ｃを有する。サーバ１０，１０ａ，１０ｂ，１０ｃは仮想マシンでもよい。サーバ１０，１０ａ，１０ｂ，１０ｃは、複数の処理を並行して実施する。サーバ１０，１０ａ，１０ｂ，１０ｃは、負荷値の受け渡し関係が木構造で定義されている。サーバ１０，１０ａ，１０ｂ，１０ｃは、それぞれ、木構造において１つ下に接続された１以上のサーバ１０ａから、木構造においてそのサーバ１０ａ以下に接続されたサーバ群（サーバ１０ａ，１０ｂ）の負荷値を受信する。そして、サーバ１０，１０ａ，１０ｂ，１０ｃは、それぞれ、受信した負荷値に基づいて、オートスケールを行うか否かの判定を自律的に実行する。オートスケールは、システムの負荷に応じてスケールアウト・スケールインを自動的に行う機能である。スケールアウトは、システムを構成するサーバの数を増やすことである。スケールアウトは、例えばシステムの処理能力を向上させるために実行される。スケールインは、システムを構成するサーバの数を減らすことである。スケールインは、例えばシステム全体のリソースの効率的に使用するために実行される。オートスケールを行うか否かの判定のために、サーバ１０，１０ａ，１０ｂ，１０ｃは、自己のサーバの負荷値を計測する機能を有する。負荷値とは、例えば、サーバが実行する所定時間あたりのトランザクション数やＣＰＵ（Central Processing Unit）使用率など自己のサーバにかかる負荷を示す値である。
【００１５】
サーバ１０は、受信部１１および判定部１２を有する。受信部１１および判定部１２は、例えば、ＣＰＵやＤＳＰ（Digital Signal Processor）などのプロセッサや、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などのその他の電子回路を用いて実現される。プロセッサは、例えば、メモリに記憶されたプログラムを実行する。プロセッサは、プログラムの命令を実行するための演算器やレジスタの他に、データ処理のための専用の回路を含んでいてもよい。サーバ１０と同様に、サーバ１０ａ，１０ｂ，１０ｃも、受信部１１ａ，１１ｂ，１１ｃと判定部１２ａ，１２ｂ，１２ｃを有している。
【００１６】
受信部１１は、木構造におけるサーバ１０の１つ下の各サーバから、合計負荷値と、総サーバ数とを受信する。合計負荷値とは、木構造における自己のサーバ以下の構造に存在するサーバの負荷値の合計である。総サーバ数とは、木構造における自己のサーバ以下の構造に存在するサーバの数である。
【００１７】
判定部１２は、自己のサーバ１０が複数の処理を実行したときの負荷値、受信した合計負荷値および総サーバ数に基づいて、システムの増強の有無を判定する。例えば、まず、判定部１２は、自己のサーバ１０が複数の処理を実行したときの負荷値と、受信した合計負荷値の和とに基づき、木構造におけるサーバ１０以下のサーバにおける合計負荷値を算出する。次に、判定部１２は、受信した総サーバ数に１を加算し、木構造におけるサーバ１０以下の総サーバ数を算出する。次に、判定部１２は、「算出した合計負荷値÷サーバ１０以下の総サーバ数」により、木構造におけるサーバ１０以下のサーバの負荷値の平均値（以下、平均負荷値）を算出する。そして、判定部１２は、算出した平均負荷値が閾値以上と判定した場合、システムを増強すると判定する。システムの増強は、例えばスケールアウトによって実現される。閾値は、例えば、ＲＡＭ（Random Access Memory）などの揮発性メモリ、あるいは、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置に記憶されている。また、判定部１２は、算出した平均負荷値が別の閾値未満と判定した場合、システムを縮小すると判定してもよい。システムの縮小は、例えばスケールインによって実現される。
【００１８】
ここで、サーバ１０，１０ａ，１０ｂにより木構造で構成されたシステムに、サーバ１０ｃをスケールアウトする場合について説明する。システムを増強すると判定する閾値は１００とする。木構造においてサーバ１０の下にサーバ１０ａが存在し、サーバ１０ａの下にサーバ１０ｂが存在する。サーバ１０の負荷値は１６０であり、サーバ１０ａの負荷値は６５であり、サーバ１０ｂの負荷値は７５である。
【００１９】
まず、サーバ１０ｂは、木構造における下のサーバがないため、サーバ１０ｂ以下のサーバの合計負荷値およびサーバの平均負荷値は共に７５となり、総サーバ数は１となる。サーバ１０ｂは、木構造における１つ上のサーバ１０ａにサーバ１０ｂの合計負荷値＝７５および総数＝１を送信する。
【００２０】
次に、サーバ１０ａは、サーバ１０ｂから合計負荷値＝７５および総数＝１を受信する。サーバ１０ａの負荷値は６５のため、サーバ１０ａ以下のサーバの合計負荷値は１４０となる。また、サーバ１０ｂから総数＝１を受信しているため、サーバ１０ａ以下の総サーバ数は１＋１＝２となる。すると、サーバの平均負荷値は１４０÷２＝７０となる。サーバ１０ａは、１つ上の階層であるサーバ１０に合計負荷値＝１４０および総数＝２を送信する。
【００２１】
そして、サーバ１０は、サーバ１０ａから合計負荷値＝１４０および総数＝２を受信する。サーバ１０の負荷値は１６０のため、木構造におけるサーバ１０以下のサーバの合計負荷値は３００となる。また、サーバ１０ａから総数＝２を受信しているため、サーバ１０において、木構造におけるサーバ１０以下の総サーバ数は２＋１＝３となる。すると、平均負荷値は３００÷３＝１００となる。木構造におけるサーバ１０以下のサーバの平均負荷値が閾値（１００）以上のため、サーバ１０は、木構造におけるサーバ１０の下にサーバ１０ｃを追加する追加要求を出力する。追加要求は、例えばオートスケールを実行する管理サーバで受信され、管理サーバによってシステムにサーバ１０ｃが追加される。これにより、サーバ１０の負荷値が軽減される。
【００２２】
第１の実施の形態によれば、木構造により負荷値の受け渡し関係が定義された各サーバが、木構造において自己の１つ下の各サーバから、各サーバ以下の構造に含まれるサーバの合計負荷値および総数を受信する。そして各サーバが自律的に、木構造における自己以下のサーバにおける平均負荷に応じて、システムを増強するか否かを判定する。これにより、複数の処理を実行する各サーバの負荷値を集計し、システムの増強の有無を判定するためのサーバを用いる方法に比べ、システムを増強するか否かの判断のために個々のサーバが収集する情報量が少なくなる。よって、大量のサーバを用いたとしても、各サーバの負荷値の集計に負荷がかからず、オートスケールの際に発生する遅延を抑制できる。
【００２３】
また、木構造により構成された各サーバが、受信した合計負荷値と自己のサーバの負荷値とに基づいて、システムを増強するか否かを判定する。これにより、各サーバの負荷に偏りがあり、例えば局所的に負荷が集中している場合も、サーバを増強するか否かの適切な判定が可能となり、各サーバの負荷を平準化できる。
【００２４】
なお、各サーバが、システムを増強するか否かを判定する際、自己のサーバにおける平均負荷値に加え、平均負荷値の変化量または平均負荷値の変化量における変化量に基づいて判定してもよい。
【００２５】
また、各サーバが平均負荷値を算出する際、１つ下の階層のサーバから総サーバ数を受信する代わりに、木構造における自己のサーバのノードの深さまたは高さにより総サーバ数を概算してもよい。
【００２６】
また、サーバ１０，１０ａ，１０ｂ，１０ｃは仮想マシンでなくてもよい。この場合、スケールアウトは、例えば、予め複数のサーバを予備のサーバとして用意し、予備のサーバをシステムの構成に加えることで実現できる。スケールインは、例えば、システムを構成するサーバのいずれかをシステムの構成から予備のサーバにすることで実現できる。
【００２７】
［第２の実施の形態］
次に、仮想化されたサーバを用いたオートスケールの実施例について説明する。仮想化とは、コンピュータの物理リソースを抽象化することである。例えば、サーバを仮想化すると、１台のサーバ装置を複数のサーバ装置に見せかけることができる。以下、仮想化されたサーバ装置を、仮想サーバと呼ぶ。仮想化において、仮想サーバのスケールアウトは、システムの構成に仮想サーバを増やすことである。仮想サーバのスケールインは、システムの構成から仮想サーバを減らすことである。
【００２８】
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、端末装置２１、負荷分散装置２２、データベースサーバ装置２３、実行サーバ装置１００、および仮想化管理サーバ装置２００を有する。端末装置２１は、ネットワーク３０を介して負荷分散装置２２と接続されている。負荷分散装置２２、データベースサーバ装置２３、実行サーバ装置１００、および仮想化管理サーバ装置２００は、ネットワーク３１を介して相互に接続されている。
【００２９】
端末装置２１は、システムの利用者等が使用するクライアントコンピュータである。端末装置２１は、ネットワーク３０および負荷分散装置２２を介して、実行サーバ装置１００に複数のトランザクションの実行を要求する。
【００３０】
負荷分散装置２２は、端末装置２１に要求された複数のトランザクションを複数のサーバ装置に振り分けるサーバコンピュータである。負荷分散装置２２は、端末装置２１から要求された複数のトランザクションを、実行サーバ装置１００が用いる複数の仮想サーバに処理を振り分ける。
【００３１】
データベースサーバ装置２３は、ＨＤＤなどの不揮発性の記憶装置にデータを記憶して管理するサーバコンピュータである。データベースサーバ装置２３は、実行サーバ装置１００が複数のトランザクションを実行するために参照するデータや、トランザクション実行時に生成されるデータを記憶する。
【００３２】
実行サーバ装置１００は、複数の仮想サーバを並列して動作させることができるサーバコンピュータである。実行サーバ装置１００は、２台以上存在してもよい。その場合、複数の仮想サーバは、複数の実行サーバ装置に分散して配置されていてもよい。複数の仮想サーバを用いて、端末装置２１から要求された複数のトランザクションを実行する。また、実行サーバ装置１００は、トランザクションによる負荷に応じて、仮想化管理サーバ装置２００に仮想サーバのスケールアウトまたはスケールインを要求する。
【００３３】
仮想化管理サーバ装置２００は、仮想サーバをスケールアウトまたはスケールインする機能を有するサーバコンピュータである。仮想化管理サーバ装置２００は、実行サーバ装置１００の要求に応じて、実行サーバ装置１００が用いる仮想サーバをスケールアウトまたはスケールインする。
【００３４】
なお、データベースサーバ装置２３、および仮想化管理サーバ装置２００は、仮想化された仮想マシンでもよい。
図３は、実行サーバ装置のハードウェア例を示すブロック図である。実行サーバ装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、ディスクドライブ１０６および通信インタフェース１０７を有する。上記の各ユニットは、実行サーバ装置１００が備えるバス１０８に接続されている。
【００３５】
ＣＰＵ１０１は、プログラムの命令を実行する演算器を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されているプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、実行サーバ装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列実行してもよい。
【００３６】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムや計算に用いられるデータを一時的に記憶する揮発性メモリである。なお、実行サーバ装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数の揮発性メモリを備えてもよい。
【００３７】
ＨＤＤ１０３は、ＯＳ（Operating System）やファームウェアやアプリケーションソフトウェアなどのソフトウェアのプログラムおよびデータを記憶する不揮発性の記憶装置である。なお、実行サーバ装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００３８】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、実行サーバ装置１００に接続されたディスプレイ４１に画像を出力する。ディスプレイ４１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００３９】
入力信号処理部１０５は、実行サーバ装置１００に接続された入力デバイス４２から入力信号を取得し、ＣＰＵ１０１に通知する。入力デバイス４２としては、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００４０】
ディスクドライブ１０６は、記録媒体４３に記録されたプログラムやデータを読み取る駆動装置である。記録媒体４３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。ディスクドライブ１０６は、ＣＰＵ１０１からの命令に従って、記録媒体４３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４１】
通信インタフェース１０７は、ネットワーク３１を介して他のコンピュータ（例えば、負荷分散装置２２や仮想化管理サーバ装置２００）と通信を行うインタフェースである。通信インタフェース１０７は、有線網に接続する有線インタフェースでもよいし、無線網に接続する無線インタフェースでもよい。
【００４２】
ただし、実行サーバ装置１００は、ディスクドライブ１０６を備えていなくてもよく、専ら他のコンピュータからアクセスされる場合には、画像信号処理部１０４や入力信号処理部１０５を備えていなくてもよい。データベースサーバ装置２３、および仮想化管理サーバ装置２００も、実行サーバ装置１００と同様のハードウェアを用いて実現できる。また、端末装置２１は、通信インタフェース１０７がネットワーク３１の代わりにネットワーク３０を介して他のコンピュータ（例えば、負荷分散装置２２）と通信を行うことを除き、実行サーバ装置１００と同様のハードウェアを用いて実現できる。また、負荷分散装置２２は、通信インタフェース１０７がネットワーク３１に加えてネットワーク３０を介して他のコンピュータ（例えば、端末装置２１）と通信を行うことを除き、実行サーバ装置１００と同様のハードウェアを用いて実現できる。
【００４３】
図４は、仮想サーバ間の性能測定値の受け渡し関係を定義する木構造の一例を示すブロック図である。仮想サーバ＃１，＃１−１，＃１−２，＃１−１−１，＃１−１−２は、実行サーバ装置１００に用いられる仮想マシンである。仮想サーバ＃１，＃１−１，＃１−２，＃１−１−１，＃１−１−２は、負荷分散装置２２に振り分けられた複数のトランザクションを並行して実行する。各仮想サーバは、システムのオートスケールを行うか否かを自律的に判断する。
【００４４】
仮想サーバ＃１，＃１−１，＃１−２，＃１−１−１，＃１−１−２は、木構造により構成されている。木構造は、階層構造を有している。第２の実施の形態では、木構造における最上位の仮想サーバ＃１から順に、下の階層に仮想サーバが追加されていく。例えば、図４の木構造では、仮想サーバ＃１において、１つ上の階層の仮想サーバ（以下、親の仮想サーバと表現する）は存在せず、１つ下の階層の仮想サーバ（以下、子の仮想サーバと表現する）として仮想サーバ＃１−１，＃１−２が存在する。また、仮想サーバ＃１−１において、親の仮想サーバとして仮想サーバ＃１が存在し、子の仮想サーバとして仮想サーバ＃１−１−１，＃１−１−２が存在する。また、仮想サーバ＃１−２において、親の仮想サーバとして仮想サーバ＃１が存在し、子の仮想サーバは存在しない。また、仮想サーバ＃１−１−１，＃１−１−２において、親の仮想サーバとして仮想サーバ＃１−１が存在し、子の仮想サーバは存在しない。ここで、木構造の最上位の仮想サーバ＃１が属する階層が第１世代である。第１世代の階層の仮想サーバ＃１の直下の仮想サーバ＃１−１，＃１−２が属する階層が第２世代である。第２の階層の仮想サーバ＃１−１の直下の仮想サーバ＃１−１−１，＃１−１−２が属する階層が第３世代である。
【００４５】
なお、以下の説明において、特定の仮想サーバについて、自己の階層以下の階層における仮想サーバといった場合、特定の仮想サーバ、およびその特定の仮想サーバから木構造を下位に辿ることで到達できる仮想サーバを指すものとする。
【００４６】
仮想サーバ＃１，＃１−１，＃１−２，＃１−１−１，＃１−１−２は、子の各仮想サーバから性能測定値を受信する。次に、仮想サーバ＃１，＃１−１，＃１−２，＃１−１−１，＃１−１−２は、子の仮想サーバ毎に受信した性能測定値および自己の仮想サーバの性能測定値を集計・分析する。仮想サーバ＃１，＃１−１，＃１−２，＃１−１−１，＃１−１−２は、分析後の性能測定値に基づいて、スケールイン・スケールアウトの有無を判定する。
【００４７】
例えば、仮想サーバ＃１−１は、子の仮想サーバ＃１−１−１，＃１−１−２から性能測定値を受信し、受信した性能測定値と自己の性能測定値を集計・分析する。次に、集計・分析した性能測定値を親の仮想サーバ＃１に送信する。そして、仮想サーバ＃１−１は、分析した性能測定値に基づきスケールイン・スケールアウトの有無を判定する。また、仮想サーバ＃１は、子の仮想サーバ＃１−１，＃１−２から性能測定値を受信し、受信した性能測定値と自己の性能測定値を集計・分析する。そして、仮想サーバ＃１は、分析した性能測定値に基づきスケールイン・スケールアウトの有無を判定する。
【００４８】
このように、木構造で構成されている各仮想サーバは、自己の階層以下の階層における仮想サーバについて収集・分析した性能測定値に基づき、スケールイン・スケールアウトの有無を判定することで、自律的にオートスケールを管理する。すなわち複数の仮想サーバそれぞれが実行する性能測定値の集計・分析は、対象となる仮想サーバ集合が互いに入れ子構造となっている。例えば仮想サーバ＃１は、５台の仮想サーバ＃１，＃１−１，＃１−２，＃１−１−１，＃１−１−２についての性能測定値の集計・分析を行う。一方、仮想サーバ＃１−１は、３台の仮想＃１−１，＃１−１−１，＃１−１−２についての性能測定値の集計・分析を行う。仮想サーバ＃１−１が性能測定値の集計・分析の対象としている仮想サーバは、いずれも仮想サーバ＃１における性能測定値の集計・分析の対象となっている。性能測定値の集計・分析の対象となる仮想サーバ集合が入れ子構造となっていることで、局所的な負荷の変動を迅速に検出し、オートスケールの要否を判断できる。
【００４９】
なお、図４に示したのは、仮想サーバ間の性能測定値の受け渡し関係を定義する木構造である。端末装置からの要求は、図４に示した木構造とは別の関係に基づいて振り分けられる。
【００５０】
図５は、端末装置からの要求を振り分ける接続関係の一例を示すブロック図である。負荷分散装置２２は、端末装置２１から要求された複数のトランザクションを各仮想サーバに分散して振り分ける。仮想サーバ（例えば、仮想サーバ＃１−１−２）がスケールアウトされた場合、負荷分散装置２２のトランザクションを分散する対象となる仮想サーバが増える。
【００５１】
このように、負荷分散装置２２は、仮想サーバの木構造を意識せずに、端末装置２１から要求された複数のトランザクションを各仮想サーバに振り分ける。
図６は、実行サーバ装置と管理サーバの機能例を示すブロック図である。実行サーバ装置１００は、ハイパーバイザ１１０および仮想サーバ＃１を有する。ハイパーバイザ１１０は、仮想サーバ＃１の仮想化を実現するため、仮想サーバ＃１上のＯＳを制御するプログラムである。ハイパーバイザ１１０は、仮想サーバ＃１へ実行サーバ装置１００のリソース（例えば、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３など）を効率的に配分する。
【００５２】
仮想サーバ＃１は、管理情報記憶部１２０、負荷計測部１３０、負荷分析部１４０、オートスケール判定部１５０およびオートスケール実行部１６０を有する。
管理情報記憶部１２０は、仮想サーバ＃１がオートスケールを実現するために管理する情報を記憶する。管理情報記憶部１２０は、閾値情報テーブル１２１、負荷分析値テーブル１２２、サーバ数管理テーブル１２３および階層管理テーブル１２４を有する。閾値情報テーブル１２１は、平均トランザクション数の閾値等、仮想サーバ＃１がスケールアウトまたはスケールインを判断するために用いる閾値の情報を格納する。閾値情報テーブル１２１に記憶されている情報は、例えば、システムの管理者により設定されたものでもよい。負荷分析値テーブル１２２は、仮想サーバ＃１の階層以下の階層における各仮想サーバのトランザクション数を所定時間毎に集計・分析した値（平均トランザクション数など）を格納する。サーバ数管理テーブル１２３は、親、子および自己の仮想サーバの数を格納する。サーバ数管理テーブル１２３は、トランザクション数を分析するために用いられる。階層管理テーブル１２４は、仮想サーバ＃１が親または子の仮想サーバを把握するための情報を格納する。
【００５３】
負荷計測部１３０は、仮想サーバ＃１のトランザクション数を計測する。トランザクション数とは、仮想サーバが所定時間内に実行したトランザクション数である。また、負荷計測部１３０は、階層管理テーブル１２４を参照し、仮想サーバ＃１の子の仮想サーバを検索する。次に、負荷計測部１３０は、検索した各子の仮想サーバから所定時間毎に総トランザクション数や総仮想サーバ数を受信する。総トランザクション数とは、自己の階層以下の階層における各仮想サーバが所定時間内に実行したトランザクション数の合計である。総仮想サーバ数とは、自己の階層以下の階層における仮想サーバの総数である。
【００５４】
負荷分析部１４０は、負荷計測部１３０が計測した仮想サーバ＃１のトランザクション数や、負荷計測部１３０が受信した子の各仮想サーバの総トランザクション数を基に仮想サーバ＃１の総トランザクション数を算出し、負荷分析値テーブル１２２に格納する。また、負荷計測部１３０が受信した各仮想サーバの総仮想サーバ数の合計を算出し、サーバ数管理テーブル１２３に格納する。次に、負荷分析部１４０は、算出した総トランザクション数および総仮想サーバ数を親の仮想サーバに送信する。そして、負荷分析部１４０は、算出した仮想サーバ＃１における総トランザクション数およびサーバ数管理テーブル１２３に格納された情報を分析し、平均トランザクション数など分析により得た情報を負荷分析値テーブル１２２に格納する。平均トランザクション数とは、自己の階層以下の階層における各仮想サーバが所定時間内に実行したトランザクション数の平均値である。
【００５５】
オートスケール判定部１５０は、負荷分析値テーブル１２２に格納された負荷分析部１４０による分析値と、閾値情報テーブル１２１に格納された閾値とを比較し、仮想サーバのスケールアウトおよびスケールインの有無を判定する。
【００５６】
オートスケール実行部１６０は、オートスケール判定部１５０による判定結果に基づいて、スケールアウトまたはスケールインの実行を仮想化管理サーバ装置２００に要求する。オートスケール実行部１６０は、スケールアウトまたはスケールインに伴い、階層管理テーブル１２４に格納された情報を更新する。
【００５７】
仮想化管理サーバ装置２００は、スケールアウト実行部２１０およびスケールイン実行部２２０を有する。
スケールアウト実行部２１０は、仮想サーバ＃１からスケールアウトを要求されたとき、仮想サーバをスケールアウトする。次に、スケールアウト実行部２１０は、スケールアウトが完了した旨を仮想サーバ＃１に応答する。
【００５８】
スケールイン実行部２２０は、仮想サーバ＃１からスケールインを要求されたとき、仮想サーバ＃１をスケールインする。次に、スケールイン実行部２２０は、スケールインが完了した旨を仮想サーバ＃１に応答する。
【００５９】
図７は、閾値情報テーブルの設定例を示す図である。閾値情報テーブル１２１は、平均トラン数（上限）、平均トラン数（下限）、平均トラン変化量（上限）および平均トラン変化量（下限）の項目を有する。平均トラン数（上限）の項目には、平均トランザクション数の上限値が設定される。仮想サーバの平均トランザクション数が平均トラン数（上限）以上となったとき、仮想サーバは、仮想化管理サーバ装置２００にスケールアウトを要求する。平均トラン数（下限）の項目には、平均トランザクション数の下限値が設定される。仮想サーバの平均トランザクション数が平均トラン数（下限）未満となったとき、仮想サーバは、仮想化管理サーバ装置２００にスケールインを要求する。平均トラン変化量（上限）の項目には、平均トランザクション変化量の上限値が設定される。仮想サーバの平均トランザクション変化量が平均トラン変化量（上限）以上となったとき、仮想サーバは、仮想化管理サーバ装置２００にスケールアウトを要求する。平均トラン変化量（下限）の項目には、平均トランザクション変化量の下限値が設定される。仮想サーバの平均トランザクション変化量が平均トラン変化量（下限）未満となったとき、仮想サーバは、仮想化管理サーバ装置２００にスケールインを要求する。
【００６０】
図８は、負荷分析値テーブルの例を示す図である。負荷分析値テーブル１２２は、日時、平均トラン数および平均トラン変化量の項目を有する。日時の項目には、平均トランザクション数などを算出した日時が設定される。平均トラン数の項目には、所定時間あたりの仮想サーバの平均トランザクション数が設定される。平均トラン変化量の項目には、所定時間あたりの仮想サーバの平均トランザクション数の変化量が設定される。具体的には、平均トランザクション数の変化量は、算出された平均トラン数と前回算出された平均トラン数との差分により算出される。
【００６１】
図９は、トランザクションの変化量の例について示すブロック図である。仮想サーバ＃１は仮想サーバ＃１−１の親の仮想サーバであり、仮想サーバ＃１−１は仮想サーバ＃１−１−１の親の仮想サーバである。仮想サーバ＃１，＃１−１，＃１−１−１が有する閾値情報テーブルには、閾値情報テーブル１２１ａの内容、すなわち、平均トラン数（上限）＝９９、平均トラン数（下限）＝９、平均トラン変化量（上限）＝９および平均トラン変化量（下限）＝−９が設定されている。
【００６２】
負荷分析値テーブル１２２は仮想サーバ＃１が有するテーブルであり、負荷分析値テーブル１２２ａは仮想サーバ＃１−１が有するテーブルであり、負荷分析値テーブル１２２ｂは仮想サーバ＃１−１−１が有するテーブルである。負荷分析値テーブル１２２，１２２ａ，１２２ｂにおける日時の項目について、日付の記載を省略する。各負荷分析値テーブルの更新は、対応する仮想サーバにより１０秒毎に行われる。
【００６３】
ここで、端末装置２１（図２参照）による負荷分散装置２２を介したトランザクションの要求が、急激に増加したときについて説明する。仮想サーバ＃１において、平均トラン数が閾値（平均トラン数（上限））以上となるのは、日時＝００：０１：１０以降である。一方、平均トラン変化量が閾値（平均トラン変化量（上限））以上となるのは日時＝００：００：５０以降であり、平均トラン数が閾値以上となる前である。また、仮想サーバ＃１−１において、平均トラン数が閾値（平均トラン数（上限））以上となるのは、日時＝００：０１：１０以降である。一方、平均トラン変化量が閾値（平均トラン変化量（上限））以上となるのは日時＝００：００：５０以降であり、平均トラン数が閾値以上となる前である。さらに、仮想サーバ＃１−１−１において、平均トラン数が閾値（平均トラン数（上限））以上となるのは、日時＝００：０１：１０以降である。一方、平均トラン変化量が閾値（平均トラン変化量（上限））以上となるのは日時＝００：００：３０以降であり、平均トラン数が閾値以上となる前である。仮想サーバ＃１−１−１の平均トラン数が閾値以上となる日時が、他の仮想サーバと比べ早い。
【００６４】
図８〜図９が示すように、平均トランザクション数の変化量を所定時間毎に分析することで、平均トランザクション数の増加の予兆を検知できる。これにより、端末装置２１から要求されるトランザクション数が急激に変化した場合にも、スケールアウトまたはスケールインの有無を迅速に判断できる。
【００６５】
図１０は、サーバ数管理テーブルの例を示す図である。サーバ数管理テーブル１２３は、親、自分、子の項目を有する。親の項目には、仮想サーバ＃１の１つ上の階層の仮想サーバの数が設定される。自分の項目には、仮想サーバ＃１の階層の仮想サーバの数（すなわち、１）が設定される。子の項目には、仮想サーバ＃１の１つ下の階層以下の仮想サーバの数が設定される。
【００６６】
図１１は、仮想サーバ数の取得例を示すブロック図である。子の仮想サーバは、サーバ数管理テーブルを参照し、子および自分の仮想サーバ数を仮想サーバに送信する。仮想サーバは、子の仮想サーバにおける子および自分の仮想サーバ数を子の各仮想サーバから受信する。次に、仮想サーバは、子の各仮想サーバから受信した各仮想サーバ数を合計する。そして、仮想サーバは、合計した仮想サーバ数をサーバ数管理テーブルの子の仮想サーバに格納する。そして、仮想サーバは、格納した子の仮想サーバ数および自分の仮想サーバ数を親の仮想サーバに送信する。
【００６７】
例えば、図１１では、仮想サーバ＃１の子の仮想サーバに、仮想サーバ＃１−１，＃１−２が存在する。仮想サーバ＃１−１の子の仮想サーバに、仮想サーバ＃１−１−１，＃１−１−２が存在する。仮想サーバ＃１はサーバ数管理テーブル１２３を有し、仮想サーバ＃１−１はサーバ数管理テーブル１２３ａを有し、仮想サーバ＃１−２はサーバ数管理テーブル１２３ｂを有し、仮想サーバ＃１−１−１はサーバ数管理テーブル１２３ｃを有し、仮想サーバ＃１−１−２はサーバ数管理テーブル１２３ｄを有する。
【００６８】
仮想サーバ＃１−２，＃１−１−１，＃１−１−２には、親の仮想サーバが存在し、子の仮想サーバが存在しない。そのため、サーバ数管理テーブル１２３ｂ，１２３ｃ，１２３ｄにおいて、親＝１，自分＝１および子＝０が設定される。
【００６９】
また、仮想サーバ＃１−１は、子の仮想サーバ＃１−１−１から子＝０および自分＝１を受信し、子の仮想サーバ＃１−１−２から子＝０および自分＝１を受信する。そのため、サーバ数管理テーブル１２３ａにおいて、子＝０＋１＋０＋１＝２が設定される。また、仮想サーバ＃１は親の仮想サーバが存在するため、サーバ数管理テーブル１２３ａにおいて、親＝１および自分＝１が設定される。
【００７０】
さらに、仮想サーバ＃１は、子の仮想サーバ＃１−１から子＝２および自分＝１を受信し、子の仮想サーバ＃１−２から子＝０および自分＝１を受信する。そのため、サーバ数管理テーブル１２３において、子＝２＋１＋０＋１＝４が設定される。また、仮想サーバ＃１は親の仮想サーバが存在しないため、サーバ数管理テーブル１２３において、親＝０および自分＝１が設定される。
【００７１】
図１０〜図１１で示すように、各仮想サーバは、サーバ数管理テーブルのデータを親や子の仮想サーバと受け渡しすることで、自己の総仮想サーバ数を管理する。
図１２は、階層管理テーブルの例を示す図である。階層管理テーブル１２４は、階層およびホスト名の項目を有する。階層の項目には、自己の仮想サーバとの階層の関係を示す情報が設定される。階層＝「親」の場合、自己の仮想サーバの１つ上の階層であることを示す。階層＝「子」の場合、自己の仮想サーバの１つ下の階層であることを示す。階層＝「自分」の場合、自己の仮想サーバであることを示す。ホスト名の項目には、階層の項目に対応する仮想サーバのホスト名が設定される。例えば、仮想サーバ＃１が子の仮想サーバのホスト名＝＃１−１である仮想サーバを子の仮想サーバとして登録したとき、登録した情報は階層＝「子」かつホスト名＝＃１−１となる。以下、仮想サーバのホスト名は、仮想サーバの符号であるものとする。
【００７２】
なお、仮想サーバが存在しない階層の場合、ホスト名の項目には、例えば、Ｎｕｌｌが設定される。以下、ホスト名がＮｕｌｌであるレコードの記載を省略する。また、仮想サーバが存在しない階層の場合、ホスト名の項目を空欄にしてもよい。また、ホスト名の項目には、ホスト名の代わりにＩＰ（Internet Protocol）アドレスが設定されてもよい。
【００７３】
図１３は、階層管理テーブルの設定例を示す図である。仮想サーバ＃１の子の仮想サーバに、仮想サーバ＃１−１，＃１−２が存在する。仮想サーバ＃１−１の子の仮想サーバに、仮想サーバ＃１−１−１，＃１−１−２が存在する。仮想サーバ＃１−１−１の子の仮想サーバに、仮想サーバ＃１−１−１−１，＃１−１−１−２が存在する。
【００７４】
この場合、仮想サーバ＃１が有する階層管理テーブル１２４ａは、階層＝「自分」でホスト名＝＃１であるレコード、階層＝「子」でホスト名＝＃１−１であるレコードおよび階層＝「子」でホスト名＝＃１−２であるレコードが格納される。また、仮想サーバ＃１−１が有する階層管理テーブル１２４ｂは、階層＝「親」でホスト名＝＃１であるレコード、階層＝「自分」でホスト名＝＃１−１であるレコード、階層＝「子」でホスト名＝＃１−１−１であるレコードおよび階層＝「子」でホスト名＝＃１−１−２であるレコードが格納される。また、仮想サーバ＃１−１−１が有する階層管理テーブル１２４ｃは、階層＝「親」でホスト名＝＃１−１であるレコード、階層＝「自分」でホスト名＝＃１−１−１であるレコード、階層＝「子」でホスト名＝＃１−１−１−１であるレコードおよび階層＝「子」でホスト名＝＃１−１−１−２であるレコードが格納される。さらに、仮想サーバ＃１−１−１−１が有する階層管理テーブル１２４ｄは、階層＝「親」でホスト名＝＃１−１−１であるレコードおよび階層＝「自分」でホスト名＝＃１−１−１−１であるレコードが格納される。
【００７５】
図１２〜図１３で示すように、各仮想サーバが、「自分」、「親」および「子」の仮想サーバのホスト名を管理する。これにより、木構造による仮想サーバの構成を実現する。
図１４は、仮想サーバによるオートスケールの手順例を示すフローチャートである。
【００７６】
（ステップＳ１１）負荷計測部１３０は、階層管理テーブル１２４から、階層＝「自分」または「子」の仮想サーバを１つ選択する。
（ステップＳ１２）負荷計測部１３０は、選択した仮想サーバについて、総トランザクション数など性能測定値を取得する。処理の詳細は後述する（図１３参照）。
【００７７】
（ステップＳ１３）負荷計測部１３０は、階層＝「自分」または「子」である仮想サーバについて、未選択の仮想サーバが存在するか判定する。未選択の仮想サーバが存在する場合、処理をステップＳ１１へ進める。未選択の仮想サーバが存在しない場合、処理をステップＳ１４へ進める。
【００７８】
（ステップＳ１４）負荷分析部１４０は、ステップＳ１２で取得したトランザクション数、または、ステップＳ１２で受信したトランザクション総数を集計・分析する。処理の詳細は後述する（図１５参照）。
【００７９】
（ステップＳ１５）オートスケール判定部１５０は、閾値情報テーブル１２１から閾値を取得する。
（ステップＳ１６）オートスケール判定部１５０は、スケールアウトまたはスケールインの有無を判定する。そして、オートスケール実行部１６０は、判定に応じてスケールアウトまたはスケールインを実行する。処理の詳細は後述する（図１６参照）。
【００８０】
（ステップＳ１７）負荷計測部１３０は、停止リクエストを受信したか判定する。停止リクエストを受信した場合、処理を終了する。停止リクエストを受信していない場合、処理をステップＳ１１へ進める。
【００８１】
図１５は、トランザクション数を取得する手順例を示すフローチャートである。図１５のフローチャートが示す処理は、ステップＳ１２において実行される。
（ステップＳ１２１）負荷計測部１３０は、所定時間を確認する。所定時間は、仮想サーバ＃１がトランザクション数などの性能測定値を計測または分析する時間間隔である。所定時間は、例えば、本システムの管理者などにより設定された設定値を使用する。また、所定時間には、管理者が設定する前に予め初期値が設定されていてもよいし、管理者が設定を省略した場合に省略値が設定されるようにしてもよい。設定された所定時間は、例えば、仮想サーバ＃１の有する記憶領域に記憶される。
【００８２】
（ステップＳ１２２）負荷計測部１３０は、ステップＳ１１で子の仮想サーバを選択したか判定する。子の仮想サーバを選択した場合、処理をステップＳ１２３へ進める。子の仮想サーバを選択しなかった場合、処理をステップＳ１２５へ進める。
【００８３】
（ステップＳ１２３）負荷計測部１３０は、選択した子の仮想サーバから子の仮想サーバの総トランザクション数を受信する。総トランザクション数とは、ステップＳ１２１で取得した所定時間前から現在までに、自己の階層以下の階層における各仮想サーバが実行したトランザクション数の合計である。
【００８４】
（ステップＳ１２４）負荷計測部１３０は、選択した子の仮想サーバから子の仮想サーバ以下の仮想サーバの総仮想サーバ数を受信する。子の仮想サーバ自身の数は１である。総仮想サーバ数とは、自己の階層以下の階層における仮想サーバの総数である。
【００８５】
（ステップＳ１２５）負荷計測部１３０は、選択した自己の仮想サーバのトランザクション数を取得する。トランザクション数とは、ステップＳ１２１で取得した所定時間前から現在までに仮想サーバが実行したトランザクション数である。
【００８６】
（ステップＳ１２６）負荷計測部１３０は、ステップＳ１２１で取得した所定時間が経過したか判定する。所定時間が経過した場合、処理をステップＳ１２２へ進める。所定時間が経過していない場合、処理をステップＳ１２６へ進める。
【００８７】
図１６は、トランザクション数を分析する手順例を示すフローチャートである。図１６のフローチャートが示す処理は、ステップＳ１４において実行される。
（ステップＳ１４１）負荷分析部１４０は、ステップＳ１２１と同様の所定時間を確認する。
【００８８】
（ステップＳ１４２）負荷分析部１４０は、現在日時を確認する。
（ステップＳ１４３）負荷分析部１４０は、ステップＳ１２で取得した子の仮想サーバ自身の数および子の仮想サーバの総仮想サーバ数を集計する。負荷分析部１４０は、集計した総仮想サーバ数で、サーバ数管理テーブル１２３における子の仮想サーバ数を更新する。
【００８９】
（ステップＳ１４４）負荷分析部１４０は、ステップＳ１２で取得したトランザクション数を集計し、自己の仮想サーバの総トランザクション数を算出する。
（ステップＳ１４５）負荷分析部１４０は、集計したトランザクション数および仮想サーバ数に基づき、自己の仮想サーバの平均トランザクション数を算出する。具体的には、トランザクション数の集計値÷（サーバ数管理テーブル１２３における子の仮想サーバ数＋１（自己の仮想サーバの数））により算出する。
【００９０】
（ステップＳ１４６）負荷分析部１４０は、負荷分析値テーブル１２２に、前回算出した平均トランザクション数の算出値があるか判定する。前回算出した平均トランザクション数の算出値がある場合、処理をステップＳ１４７へ進める。前回算出した平均トランザクション数の算出値がない場合、処理をステップＳ１４８へ進める。
【００９１】
（ステップＳ１４７）負荷分析部１４０は、算出した平均トランザクション数−前回算出した平均トランザクション数により、平均トランザクション変化量を算出する。
（ステップＳ１４８）負荷分析部１４０は、トランザクション変化量に０を設定する。
【００９２】
（ステップＳ１４９）負荷分析部１４０は、日時＝ステップＳ１４２で確認した現在日時、平均トラン数＝算出した平均トランザクション数および平均トラン変化量＝平均トランザクション変化量を設定した情報を、負荷分析値テーブル１２２に登録する。
【００９３】
（ステップＳ１５０）負荷分析部１４０は、算出した総トランザクション数、子の仮想サーバ数および自己の仮想サーバ数を親の仮想サーバに送信する。子の仮想サーバ数および自己の仮想サーバ数は、サーバ数管理テーブル１２３を参照する。
【００９４】
（ステップＳ１５１）負荷分析部１４０は、ステップＳ１４１で取得した所定時間が経過したか判定する。所定時間が経過した場合、処理をステップＳ１４２へ進める。所定時間が経過していない場合、処理をステップＳ１５１へ進める。
【００９５】
図１５〜図１６で示すように、仮想サーバは、所定時間毎に自己の仮想サーバ以下の階層のトランザクション数を集計・分析する。この際、自己の仮想サーバは、子の仮想サーバの集計または分析の処理とは、非同期でトランザクション数を集計・分析する。これにより、子の仮想サーバの集計・分析と同期するための時間を節約できるため、より迅速なオートスケールを実現できる。
【００９６】
図１７は、オートスケールを実行する手順例を示すフローチャートである。図１７のフローチャートが示す処理は、ステップＳ１６において実行される。
（ステップＳ１６１）オートスケール判定部１５０は、ステップＳ１４９で登録された平均トラン数が閾値以上であるか確認する。閾値は、閾値情報テーブル１２１の平均トラン数（上限）を参照する。平均トラン数が閾値以上の場合、処理をステップＳ１６２へ進める。平均トラン数が閾値未満の場合、処理をステップＳ１６３へ進める。
【００９７】
（ステップＳ１６２）オートスケール実行部１６０は、スケールアウトを実行する。処理の詳細は後述する（図１８参照）。
（ステップＳ１６３）オートスケール判定部１５０は、ステップＳ１４９で登録された平均トラン変化量が閾値以上であるか確認する。閾値は、閾値情報テーブル１２１の平均トラン変化量（上限）を参照する。平均トラン変化量が閾値以上の場合、処理をステップＳ１６４へ進める。平均トラン数が閾値未満の場合、処理をステップＳ１６５へ進める。
【００９８】
（ステップＳ１６４）オートスケール実行部１６０は、スケールアウトを実行する。処理の詳細は後述する（図１８参照）。
（ステップＳ１６５）オートスケール判定部１５０は、ステップＳ１４９で登録された平均トラン数が閾値以下であるか確認する。閾値は、閾値情報テーブル１２１の平均トラン数（下限）を参照する。平均トラン数が閾値未満の場合、処理をステップＳ１６６へ進める。平均トラン数が閾値以上の場合、処理をステップＳ１７２へ進める。
【００９９】
（ステップＳ１６６）オートスケール判定部１５０は、階層管理テーブル１２４を参照し、親の仮想サーバがあり、かつ、子の仮想サーバがないか判定する。具体的には、階層管理テーブル１２４に階層＝「親」のレコードがあれば親の仮想サーバがあると判定し、階層＝「子」のレコードがあれば子の仮想サーバがあると判定する（以下、同様）。親の仮想サーバがあり、かつ、子の仮想サーバがない場合、処理をステップＳ１６７へ進める。親の仮想サーバがない、または、子の仮想サーバがある場合、処理をステップＳ１６８へ進める。
【０１００】
（ステップＳ１６７）オートスケール実行部１６０は、親の仮想サーバがあり、子の仮想サーバがない場合のスケールインを実行する。処理の詳細は後述する（図２３参照）。
（ステップＳ１６８）オートスケール判定部１５０は、階層管理テーブル１２４を参照し、親の仮想サーバがなく、かつ、子の仮想サーバがあるか判定する。親の仮想サーバがなく、かつ、子の仮想サーバがある場合、処理をステップＳ１６９へ進める。親の仮想サーバがある、または、子の仮想サーバがない場合、処理をステップＳ１７０へ進める。
【０１０１】
（ステップＳ１６９）オートスケール実行部１６０は、親の仮想サーバがなく、子の仮想サーバがある場合のスケールインを実行する。処理の詳細は後述する（図２６参照）。
（ステップＳ１７０）オートスケール判定部１５０は、階層管理テーブル１２４を参照し、親の仮想サーバがあり、かつ、子の仮想サーバがあるか判定する。親の仮想サーバがあり、かつ、子の仮想サーバがある場合、処理をステップＳ１７１へ進める。親の仮想サーバがない、または、子の仮想サーバがない場合、処理をステップＳ１７２へ進める。
【０１０２】
（ステップＳ１７１）オートスケール実行部１６０は、親の仮想サーバがあり、子の仮想サーバがある場合のスケールインを実行する。処理の詳細は後述する（図２９参照）。
（ステップＳ１７２）オートスケール判定部１５０は、負荷分析値テーブル１２２の平均トラン変化量が閾値以下であるか確認する。閾値は、閾値情報テーブル１２１の平均トラン変化量（下限）を参照する。平均トラン変化量が閾値未満の場合、処理をステップＳ１７３へ進める。平均トラン変化量が閾値以上の場合、処理を終了する。
【０１０３】
（ステップＳ１７３）オートスケール判定部１５０は、階層管理テーブル１２４を参照し、親の仮想サーバがあり、かつ、子の仮想サーバがないか判定する。親の仮想サーバがあり、かつ、子の仮想サーバがない場合、処理をステップＳ１７４へ進める。親の仮想サーバがない、または、子の仮想サーバがある場合、処理をステップＳ１７５へ進める。
【０１０４】
（ステップＳ１７４）オートスケール実行部１６０は、親の仮想サーバがあり、子の仮想サーバがない場合のスケールインを実行する。処理の詳細は後述する（図２３参照）。
（ステップＳ１７５）オートスケール判定部１５０は、階層管理テーブル１２４を参照し、親の仮想サーバがなく、かつ、子の仮想サーバがあるか判定する。親の仮想サーバがなく、かつ、子の仮想サーバがある場合、処理をステップＳ１７６へ進める。親の仮想サーバがある、または、子の仮想サーバがない場合、処理をステップＳ１７７へ進める。
【０１０５】
（ステップＳ１７６）オートスケール実行部１６０は、親の仮想サーバがなく、子の仮想サーバがある場合のスケールインを実行する。処理の詳細は後述する（図２６参照）。
（ステップＳ１７７）オートスケール判定部１５０は、階層管理テーブル１２４を参照し、親の仮想サーバがあり、かつ、子の仮想サーバがあるか判定する。親の仮想サーバがあり、かつ、子の仮想サーバがある場合、処理をステップＳ１７８へ進める。親の仮想サーバがない、または、子の仮想サーバがない場合、処理を終了する。
【０１０６】
（ステップＳ１７８）オートスケール実行部１６０は、親の仮想サーバがあり、子の仮想サーバがある場合のスケールインを実行する。処理の詳細は後述する（図２９参照）。
次に、スケールアウトの処理について説明する。図１８は、スケールアウトの手順例を示すフローチャートである。図１８のフローチャートが示す処理は、ステップＳ１６２，Ｓ１６４において実行される。
【０１０７】
（ステップＳ１８１）オートスケール実行部１６０は、仮想化管理サーバ装置２００に、仮想サーバのスケールアウトを要求する。
（ステップＳ１８２）スケールアウト実行部２１０は、仮想サーバ＃１の要求を受信し、スケールアウトを実施する。そして、スケールアウト実行部２１０は、仮想サーバ＃１にスケールアウトした仮想サーバのホスト名（または、ＩＰアドレス）を応答する。
【０１０８】
（ステップＳ１８３）オートスケール実行部１６０は、仮想化管理サーバ装置２００から応答により、スケールアウトされた仮想サーバのホスト名を確認する。
（ステップＳ１８４）オートスケール実行部１６０は、階層＝「子」かつホスト名＝確認したホスト名のレコードを階層管理テーブル１２４に登録する。
【０１０９】
（ステップＳ１８５）オートスケール実行部１６０は、自己の仮想サーバのホスト名を検索する。具体的には、オートスケール実行部１６０は、階層管理テーブル１２４から階層＝「自分」であるホスト名を検索する。
【０１１０】
（ステップＳ１８６）オートスケール実行部１６０は、スケールアウトされた仮想サーバに、階層管理テーブルへの登録を要求する。具体的には、スケールアウト実行部２１０は、階層管理テーブルに、階層＝「自分」かつホスト名＝ステップＳ１８３で確認したホスト名のレコード、および階層＝「親」かつホスト名＝ステップＳ１８５で検索したホスト名のレコードを登録するよう要求する。
【０１１１】
（ステップＳ１８７）スケールアウトされた仮想サーバは、階層＝「自分」かつホスト名＝ステップＳ１８３で確認したホスト名のレコード、および階層＝「親」かつホスト名＝ステップＳ１８５で検索したホスト名のレコードを、スケールアウトされた仮想サーバの階層管理テーブルに登録し、登録の結果を仮想サーバ＃１に応答する。
【０１１２】
（ステップＳ１８８）オートスケール実行部１６０は、スケールアウトされた仮想サーバから応答された登録の結果が正常終了であるか判定する。正常終了である場合、処理をステップＳ１８９へ進める。正常終了でない場合、処理をステップＳ１８６へ進める。
【０１１３】
（ステップＳ１８９）オートスケール実行部１６０は、負荷分散装置２２に、スケールアウトされた仮想サーバの使用開始を要求し、負荷分散装置２２から要求に対する応答を受信する。
【０１１４】
図１９は、スケールアウトにおける装置間の応答例を示す図である。図１９では、仮想サーバ＃１−１が、スケールアウトを要求する場合について説明する。
まず、仮想サーバ＃１−１は、仮想化管理サーバ装置２００に仮想サーバのスケールアウトを要求する（ステップＳ１８１）。仮想化管理サーバ装置２００は、仮想サーバ＃１−１から要求を受信し、仮想サーバ＃１−１−１のスケールアウトを実施する。（ステップＳ１８２）。仮想サーバ＃１−１は、スケールアウトされた仮想サーバ＃１−１−１のホスト名＝＃１−１−１含む応答を仮想化管理サーバ装置２００から受信する（ステップＳ１８３）。
【０１１５】
仮想サーバ＃１−１は、階層＝「子」かつ受信したホスト名＝＃１−１−１のレコードを階層管理テーブル１２４ｅに登録する（ステップＳ１８４）。その結果、レコード登録前の階層管理テーブル１２４ｅは、レコード登録後の階層管理テーブル１２４ｆとなる。
【０１１６】
仮想サーバ＃１−１は、階層管理テーブル１２４ｆから階層＝「自分」であるホスト名＝＃１−１を検索する。仮想サーバ＃１−１は、階層＝「親」かつ検索したホスト名＝＃１−１のレコードと、階層＝「自分」かつ受信したホスト名＝＃１−１−１のレコードとを階層管理テーブル１２４ｇに登録するよう仮想サーバ＃１−１−１に要求する（ステップＳ１８６）。仮想サーバ＃１−１−１は、仮想サーバ＃１−１から要求を受信し、階層＝「親」かつホスト名＝＃１−１のレコードと、階層＝「自分」かつホスト名＝＃１−１−１のレコードとを階層管理テーブル１２４ｇに登録する（ステップＳ１８７）。その結果、レコード登録前の階層管理テーブル１２４ｇは、レコード登録後の階層管理テーブル１２４ｈとなる。仮想サーバ＃１−１−１は、登録の結果を仮想サーバ＃１−１に応答する（ステップＳ１８８）。
【０１１７】
仮想サーバ＃１−１は、負荷分散装置２２に仮想サーバ＃１−１−１の使用開始を要求し、負荷分散装置２２から応答を受信する（ステップＳ１８９）。
図２０は、スケールアウト例を示す第１のブロック図である。図２０において、仮想サーバ＃１のみが存在する。仮想サーバ＃１がスケールアウトを要求したとき、スケールアウトされた仮想サーバ＃１−１は、仮想サーバ＃１の子の仮想サーバとして構成される。
【０１１８】
図２１は、スケールアウト例を示す第２のブロック図である。図２１において、仮想サーバ＃１と、仮想サーバ＃１の子の仮想サーバ＃１−１が存在する。仮想サーバ＃１−１はスケールアウトを要求したとき、スケールアウトされた仮想サーバ＃１−１−１は、仮想サーバ＃１−１の子の仮想サーバとして構成される。
【０１１９】
図２２は、スケールアウト例を示す第３のブロック図である。図２２において、仮想サーバ＃１と、仮想サーバ＃１の子の仮想サーバ＃１−１が存在する。仮想サーバ＃１がスケールアウトを要求したとき、スケールアウトされた仮想サーバ＃１−２は、仮想サーバ＃１の子の仮想サーバとして構成される。
【０１２０】
図１８〜２２が示すように、仮想サーバは、スケールアウトを要求するとき、自己の階層管理テーブルに、スケールアウトされた仮想サーバのレコードを登録することで、スケールアウトされた仮想サーバを自己の子の仮想サーバとして構成する。
【０１２１】
次に、親の仮想サーバが存在し、子の仮想サーバが存在しない場合におけるスケールインについて説明する。図２３は、第１のスケールインの手順例を示すフローチャートである。図２３のフローチャートが示す処理は、ステップＳ１６７，Ｓ１７４において実行される。
【０１２２】
（ステップＳ１９１）オートスケール実行部１６０は、負荷分散装置２２に、自己の仮想サーバの使用停止を要求し、要求に対する応答を負荷分散装置２２から受信する。
（ステップＳ１９２）オートスケール実行部１６０は、実行中のトランザクションの実行が全て完了後、トランザクションを実行するプロセスを停止する。
【０１２３】
（ステップＳ１９３）オートスケール実行部１６０は、自己の仮想サーバのホスト名を検索する。具体的には、オートスケール実行部１６０は、階層管理テーブル１２４から階層＝「自分」であるホスト名を検索する。
【０１２４】
（ステップＳ１９４）オートスケール実行部１６０は、親の仮想サーバのホスト名を検索する。具体的には、オートスケール実行部１６０は、階層管理テーブル１２４から階層＝「親」であるホスト名を検索する。
【０１２５】
（ステップＳ１９５）オートスケール実行部１６０は、検索した親の仮想サーバに、階層管理テーブルから階層＝「子」かつホスト名＝ステップＳ１９３で検索したホスト名であるレコードを削除するよう要求する。
【０１２６】
（ステップＳ１９６）要求を受信した親の仮想サーバは、階層管理テーブルから階層＝「子」かつホスト名＝ステップＳ１９３で検索したホスト名であるレコードを削除する。そして、要求を受信した親の仮想サーバは、レコードの削除の結果を仮想サーバ＃１に応答する。
【０１２７】
（ステップＳ１９７）オートスケール実行部１６０は、親の仮想サーバから応答を受信する。そして、オートスケール実行部１６０は、応答された結果が正常終了であるか判定する。正常終了である場合、処理をステップＳ１９８へ進める。正常終了でない場合、処理をステップＳ１９５へ進める。
【０１２８】
（ステップＳ１９８）オートスケール実行部１６０は、仮想化管理サーバ装置２００に自己の仮想サーバ＃１のスケールインを要求する。
（ステップＳ１９９）スケールイン実行部２２０は、仮想サーバ＃１から要求を受信し、仮想サーバ＃１をスケールインする。そして、スケールイン実行部２２０は、スケールインを実施した旨を仮想サーバ＃１に応答する。
【０１２９】
（ステップＳ２００）オートスケール実行部１６０は、仮想化管理サーバ装置２００によるスケールインを実施した旨の応答を検索した親の仮想サーバに送信する。
図２４は、第１のスケールインにおける装置間の応答例を示す図である。図２４では、仮想サーバ＃１−１−１が、スケールインを要求する場合について説明する。図２４において、仮想サーバ＃１−１と、仮想サーバ＃１−１の子の仮想サーバ＃１−１−１が存在する。仮想サーバ＃１−１−１には、子の仮想サーバが存在しない。
【０１３０】
まず、仮想サーバ＃１−１−１は、負荷分散装置２２に仮想サーバ＃１−１−１の使用停止を要求し、負荷分散装置２２から応答を受信する（ステップＳ１９１）。
仮想サーバ＃１−１−１は、階層管理テーブル１２４ｋから階層＝「自分」または「親」であるホスト名を検索する。仮想サーバ＃１−１−１は、検索された階層＝「自分」であるホスト名＝＃１−１−１を、階層管理テーブル１２４ｉから削除するよう仮想サーバ＃１−１に要求する（ステップＳ１９５）。仮想サーバ＃１−１は、階層＝子かつホスト名＝＃１−１−１のレコードを、階層管理テーブル１２４ｉから削除する（ステップＳ１９６）。その結果、レコードの削除前の階層管理テーブル１２４ｉは、レコードの削除後の階層管理テーブル１２４ｊとなる。仮想サーバ＃１−１は、削除の結果を仮想サーバ＃１−１−１に応答する。仮想サーバ＃１−１−１は、仮想サーバ＃１−１から応答を受信する。（ステップＳ１９７）。
【０１３１】
仮想サーバ＃１−１−１は、仮想化管理サーバ装置２００に仮想サーバ＃１−１−１のスケールインを要求する（ステップＳ１９８）。仮想化管理サーバ装置２００は、仮想サーバ＃１−１−１から要求を受信し、仮想サーバ＃１−１−１をスケールインする。そして、仮想化管理サーバ装置２００は、仮想サーバ＃１−１−１にスケールインした旨を応答する（ステップＳ１９９）。仮想サーバ＃１−１−１は、仮想化管理サーバ装置２００によるスケールインを実施した旨の応答を親の仮想サーバ＃１−１に送信する（ステップＳ２００）。
【０１３２】
図２５は、第１のスケールイン例を示すブロック図である。仮想サーバ＃１の子の仮想サーバには、仮想サーバ＃１−１，＃１−２が存在する。仮想サーバ＃１−１の子の仮想サーバには、仮想サーバ＃１−１−１，＃１−１−２が存在する。この場合において、仮想サーバ＃１−１−１をスケールインしたとき、仮想サーバ＃１−１は、仮想サーバ＃１−１の階層管理テーブル１２４ｉからホスト名＝＃１−１−１であるレコードを削除する。その結果、レコードの削除前の階層管理テーブル１２４ｉは、レコードの削除後の階層管理テーブル１２４ｊとなる。このとき、仮想サーバの構造は、仮想サーバ＃１の子の仮想サーバに、仮想サーバ＃１−１，＃１−２が存在する。仮想サーバ＃１−１の子の仮想サーバに、仮想サーバ＃１−１−２が存在する状態となる。
【０１３３】
このように、親の仮想サーバが存在し、子の仮想サーバが存在しない仮想サーバは、木構造の葉ノードに該当する。葉ノードにあたる仮想サーバがスケールインを要求するとき、親の仮想サーバの階層管理テーブルからスケールインされた仮想サーバのレコードを削除する。これにより、葉ノードにあたる仮想サーバを木構造から削除しても、スケールアウト後の各仮想サーバは木構造を保持できる。
【０１３４】
次に、親の仮想サーバが存在せず、子の仮想サーバが存在する場合におけるスケールインについて説明する。図２６は、第２のスケールインの手順例を示すフローチャートである。図２６のフローチャートが示す処理は、ステップＳ１６９，Ｓ１７６において実行される。
【０１３５】
（ステップＳ２０１）オートスケール実行部１６０は、負荷分散装置２２に、自己の仮想サーバの使用停止を要求し、負荷分散装置２２から要求に対する応答を受信する。
（ステップＳ２０２）オートスケール実行部１６０は、実行中のトランザクションの実行が全て完了後、トランザクションを実行するプロセスを停止する。
【０１３６】
（ステップＳ２０３）オートスケール実行部１６０は、自己の仮想サーバのホスト名を検索する。具体的には、オートスケール実行部１６０は、階層管理テーブル１２４から階層＝「自分」であるホスト名を検索する。
【０１３７】
（ステップＳ２０４）オートスケール実行部１６０は、子の仮想サーバのホスト名を検索する。具体的には、オートスケール実行部１６０は、階層管理テーブル１２４から階層＝「子」である１または２以上のホスト名を検索する。
【０１３８】
（ステップＳ２０５）オートスケール実行部１６０は、検索された子の仮想サーバが２以上か判定する。子の仮想サーバが２以上の場合、処理をステップＳ２０９へ進める。子の仮想サーバが２未満の場合、処理をステップＳ２０６へ進める。
【０１３９】
（ステップＳ２０６）オートスケール実行部１６０は、検索した親の仮想サーバに、階層＝「子」かつホスト名＝ステップＳ１９３で検索したホスト名であるレコードを階層管理テーブルから削除するよう要求する。
【０１４０】
（ステップＳ２０７）要求を受信した親の仮想サーバは、階層管理テーブルから階層＝「子」かつホスト名＝ステップＳ１９３で検索したホスト名であるレコードを削除する。そして、要求を受信した親の仮想サーバは、レコードの削除の結果を仮想サーバ＃１に応答する。
【０１４１】
（ステップＳ２０８）オートスケール実行部１６０は、応答された結果が正常終了であるか判定する。正常終了である場合、処理をステップＳ２１７へ進める。正常終了でない場合、処理をステップＳ２０６へ進める。
【０１４２】
（ステップＳ２０９）オートスケール実行部１６０は、検索された子の仮想サーバを１つ選択する。
（ステップＳ２１０）オートスケール実行部１６０は、選択した子の仮想サーバに、階層＝「親」かつホスト名＝ステップＳ２０３で検索されたホスト名であるレコードを階層管理テーブルから削除するよう要求する。
【０１４３】
（ステップＳ２１１）オートスケール実行部１６０は、選択した子の仮想サーバに、階層＝「子」かつホスト名＝ステップＳ２０４で検索されたホスト名（選択した子の仮想サーバを除く）である複数のレコードを階層管理テーブルに登録するよう要求する。
【０１４４】
（ステップＳ２１２）要求を受信した子の仮想サーバは、階層＝「親」かつホスト名＝ステップＳ２０３で検索されたホスト名であるレコードを階層管理テーブルから削除する。また、要求を受信した子の仮想サーバは、階層＝「子」かつホスト名＝ステップＳ２０４で検索されたホスト名（選択した子の仮想サーバを除く）である複数のレコードを登録する。そして、要求を受信した子の仮想サーバは、レコードの削除および登録の結果を仮想サーバ＃１に応答する。
【０１４５】
（ステップＳ２１３）オートスケール実行部１６０は、子の仮想サーバから応答を受信する。そして、オートスケール実行部１６０は、応答された結果が正常終了であるか判定する。正常終了である場合、処理をステップＳ２１４へ進める。正常終了でない場合、処理をステップＳ２０９へ進める。
【０１４６】
（ステップＳ２１４）オートスケール実行部１６０は、選択していない複数の子の仮想サーバに、階層管理テーブルにおいて、階層＝「親」であるレコードのホスト名をステップＳ２０９で選択されたホスト名に更新するよう要求する。
【０１４７】
（ステップＳ２１５）要求を受信した子の各仮想サーバは、階層管理テーブルにおいて、階層＝「親」である複数のレコードをホスト名＝ステップＳ２０９で選択されたホスト名に更新する。そして、要求を受信した子の各仮想サーバは、更新の結果を仮想サーバ＃１に応答する。
【０１４８】
（ステップＳ２１６）オートスケール実行部１６０は、応答された更新の結果が正常終了であるか判定する。正常終了である場合、処理をステップＳ２１７へ進める。正常終了でない場合、処理をステップＳ２１４へ進める。
【０１４９】
（ステップＳ２１７）オートスケール実行部１６０は、仮想化管理サーバ装置２００に自己の仮想サーバ＃１のスケールインを要求する。
（ステップＳ２１８）スケールイン実行部２２０は、仮想サーバ＃１から要求を受信し、仮想サーバ＃１をスケールインする。そして、スケールイン実行部２２０は、スケールインを実施した旨を仮想サーバ＃１に応答する。
【０１５０】
（ステップＳ２１９）オートスケール実行部１６０は、仮想化管理サーバ装置２００によるスケールインを実施した旨の応答を親の仮想サーバに送信する。
図２７は、第２のスケールインにおける装置間の応答例を示す図である。図２７では、仮想サーバ＃１が、スケールインを要求する場合について説明する。図２７において、仮想サーバ＃１、仮想サーバ＃１の子の仮想サーバ＃１−１，＃１−２が存在する。仮想サーバ＃１には、親の仮想サーバが存在しない。
【０１５１】
まず、仮想サーバ＃１は、負荷分散装置２２に仮想サーバ＃１の使用停止を要求し、負荷分散装置２２から応答を受信する（ステップＳ２０１）。
仮想サーバ＃１は、階層管理テーブル１２４ｌから階層＝「自分」であるホスト名＝＃１を検索する。また、仮想サーバ＃１は、階層管理テーブル１２４ｌから階層＝「子」であるホスト名＝＃１−１，＃１−２を検索する。そして、検索された階層＝「子」のホスト名からホスト名＝＃１−１を選択する。
【０１５２】
仮想サーバ＃１は、選択された仮想サーバ＃１−１に、検索された自己のホスト名＝＃１である階層＝「親」のレコードを、階層管理テーブル１２４ｍから削除するよう要求する（ステップＳ２１０）。また、仮想サーバ＃１は、選択した子の仮想サーバに、選択した子のホスト名（＃１−１）を除いた階層が子であるホスト名＝＃１−２かつ階層＝「子」のレコードを、階層管理テーブル１２４ｍに登録するよう要求する（ステップＳ２１１）。
【０１５３】
削除および登録を要求された仮想サーバ＃１−１は、階層＝「親」かつホスト名＝＃１のレコードを、階層管理テーブル１２４ｍから削除し、階層＝「子」かつホスト名＝＃１−２のレコードを、階層管理テーブル１２４ｍに登録する（ステップＳ２１２）。その結果、レコードの削除および登録前の階層管理テーブル１２４ｍは、レコードの削除および登録後の階層管理テーブル１２４ｎとなる。仮想サーバ＃１−１は、レコードの削除および登録の結果を仮想サーバ＃１に応答する（ステップＳ２１３）。
【０１５４】
仮想サーバ＃１は、選択されなかった仮想サーバ＃１−２に、階層管理テーブル１２４ｏにおいて、階層＝「親」のレコードのホスト名を、選択されたホスト名＝＃１−１に更新するよう要求する（ステップＳ２１４）。
【０１５５】
仮想サーバ＃１−２は、階層管理テーブル１２４ｏにおいて、階層＝「親」かつホスト名＝＃１のレコードをホスト名＝＃１−１に更新する（ステップＳ２１５）。その結果、レコード更新前の階層管理テーブル１２４ｏは、レコード更新後の階層管理テーブル１２４ｐとなる。仮想サーバ＃１−２は、更新の結果を仮想サーバ＃１に応答する（ステップＳ２１６）。
【０１５６】
仮想サーバ＃１は、仮想化管理サーバ装置２００に自己の仮想サーバ＃１のスケールインを要求する（ステップＳ２１７）。仮想化管理サーバ装置２００は、仮想サーバ＃１から要求を受信し、仮想サーバ＃１をスケールインする。そして、仮想化管理サーバ装置２００は、仮想サーバ＃１にスケールインした旨を応答する（ステップＳ２１８）。仮想サーバ＃１は、仮想化管理サーバ装置２００によるスケールインを実施した旨の応答を子の仮想サーバ＃１−１，＃１−２に送信する（ステップＳ２１９）。
【０１５７】
図２８は、第２のスケールイン例を示すブロック図である。仮想サーバ＃１の子の仮想サーバに、仮想サーバ＃１−１，＃１−２が存在する。この場合において、仮想サーバ＃１をスケールインしたとき、仮想サーバ＃１−１は、階層管理テーブル１２４ｍから階層＝「親」であるレコードを削除し、階層管理テーブル１２４ｍに階層＝「子」かつホスト名＝＃１−２のレコードを登録する。その結果、レコードの削除および登録前の階層管理テーブル１２４ｍは、レコードの削除および登録後の階層管理テーブル１２４ｎとなる。また、仮想サーバ＃１−２は、階層管理テーブル１２４ｏから階層＝「親」であるレコードについて、ホスト名を選択したホスト名＝＃１−１に更新する。その結果、レコード更新前の階層管理テーブル１２４ｏは、レコード更新後の階層管理テーブル１２４ｐとなる。
【０１５８】
このように、親の仮想サーバが存在せず、子の仮想サーバが複数存在する仮想サーバは、木構造の根ノードに該当する。このような根ノードにあたる仮想サーバをスケールインするとき、まず、複数の子の仮想サーバの１つの仮想サーバは、根ノードとなるよう階層管理テーブルから階層＝「親」のレコードを削除し、階層＝「子」のレコードを登録する。また、残りの子の仮想サーバは根ノードにあたる仮想サーバが親となるように、子の各仮想サーバの階層管理テーブルについて、階層＝「親」のレコードを更新する。これにより、スケールインされた仮想サーバの子の仮想サーバのうち１つを根ノードとし、残りの子の仮想サーバを根ノードの子の仮想サーバとする木構造を生成され、スケールアウト後の各仮想サーバは木構造を保持できる。
【０１５９】
次に、親の仮想サーバが存在し、子の仮想サーバが存在する場合におけるスケールインについて説明する。図２９は、第３のスケールインの手順例を示すフローチャートである。図２９のフローチャートが示す処理は、ステップＳ１７１，Ｓ１７８において実行される。
【０１６０】
（ステップＳ２２１）オートスケール実行部１６０は、負荷分散装置２２に、自己の仮想サーバの使用停止を要求し、負荷分散装置２２から要求に対する応答を受信する。
（ステップＳ２２２）オートスケール実行部１６０は、実行中のトランザクションの実行が全て完了することを待った上で、仮想サーバ＃１におけるトランザクションを実行するプロセスを停止する。
【０１６１】
（ステップＳ２２３）オートスケール実行部１６０は、自己の仮想サーバのホスト名を検索する。具体的には、オートスケール実行部１６０は、階層管理テーブル１２４から階層＝「自分」であるホスト名を検索する。
【０１６２】
（ステップＳ２２４）オートスケール実行部１６０は、親の仮想サーバのホスト名を検索する。具体的には、オートスケール実行部１６０は、階層管理テーブル１２４から階層＝「親」であるホスト名を検索する。
【０１６３】
（ステップＳ２２５）オートスケール実行部１６０は、１または２以上の子の仮想サーバのホスト名を検索する。具体的には、オートスケール実行部１６０は、階層管理テーブル１２４から階層＝「子」である１または２以上のホスト名を検索する。
【０１６４】
（ステップＳ２２６）オートスケール実行部１６０は、検索した親の仮想サーバに、階層＝「子」かつホスト名＝ステップＳ２２３で検索したホスト名であるレコードを階層管理テーブルへ登録するよう要求する。また、オートスケール実行部１６０は、検索した親の仮想サーバに、階層＝「子」かつホスト名＝ステップＳ２２５で検索したホスト名であるレコードを階層管理テーブルへ登録するよう要求する。
【０１６５】
（ステップＳ２２７）要求を受信した親の仮想サーバは、階層管理テーブルから階層＝「子」かつホスト名＝ステップＳ２２３で検索したホスト名であるレコードを削除する。また、要求を受信した親の仮想サーバは、階層管理テーブルから階層＝「子」かつホスト名＝ステップＳ２２５で検索したホスト名である１または２以上のレコードを登録する。そして、要求を受信した親の仮想サーバは、レコードの削除および登録の結果を仮想サーバ＃１に応答する。
【０１６６】
（ステップＳ２２８）オートスケール実行部１６０は、親の仮想サーバから応答を受信する。そして、オートスケール実行部１６０は、応答された結果が正常終了であるか判定する。正常終了である場合、処理をステップＳ２２９へ進める。正常終了でない場合、処理をステップＳ２２６へ進める。
【０１６７】
（ステップＳ２２９）オートスケール実行部１６０は、子の各仮想サーバに、階層管理テーブルにおいて、階層＝「親」かつホスト名＝ステップＳ２２３で検索されたホスト名であるレコードについて、ホスト名＝ステップＳ２２４で検索されたホスト名に更新するよう要求する。
【０１６８】
（ステップＳ２３０）要求を受信した子の仮想サーバは、レコードを階層管理テーブルについて、階層＝「親」かつホスト名＝ステップＳ２２３で検索されたホスト名であるレコードを、ホスト名＝ステップＳ２２４で検索されたホスト名に更新する。そして、要求を受信した子の仮想サーバは、レコードの更新の結果を仮想サーバ＃１に応答する。
【０１６９】
（ステップＳ２３１）オートスケール実行部１６０は、子の仮想サーバから応答を受信する。そして、オートスケール実行部１６０は、応答された結果が正常終了であるか判定する。正常終了である場合、処理をステップＳ２３２へ進める。正常終了でない場合、処理をステップＳ２２９へ進める。
【０１７０】
（ステップＳ２３２）オートスケール実行部１６０は、仮想化管理サーバ装置２００に自己の仮想サーバ＃１のスケールインを要求する。
（ステップＳ２３３）スケールイン実行部２２０は、仮想サーバ＃１から要求を受信し、仮想サーバ＃１をスケールインする。そして、スケールイン実行部２２０は、スケールインを実施した旨を仮想サーバ＃１に応答する。
【０１７１】
（ステップＳ２３４）オートスケール実行部１６０は、仮想化管理サーバ装置２００によるスケールインを実施した旨の応答を親の仮想サーバに送信する。
図３０は、第３のスケールインにおける装置間の応答例を示す図である。図３０では、仮想サーバ＃１−１が、スケールインを要求する場合について説明する。図３０において、仮想サーバ＃１、仮想サーバ＃１の子の仮想サーバ＃１−１、および仮想サーバ＃１−１の子の仮想サーバ＃１−１−１が存在する。
【０１７２】
まず、仮想サーバ＃１−１は、負荷分散装置２２に自己の仮想サーバ＃１−１の使用停止を要求し、負荷分散装置２２から応答を受信する（ステップＳ２２１）。
仮想サーバ＃１−１は、階層管理テーブル１２４ｑから階層＝「自分」であるホスト名＝＃１−１を検索する。また、仮想サーバ＃１−１は、階層管理テーブル１２４ｑから階層＝「親」であるホスト名＝＃１を検索する。また、仮想サーバ＃１−１は、階層管理テーブル１２４ｑから階層＝「子」であるホスト名＝＃１−１−１を検索する。
【０１７３】
仮想サーバ＃１−１は、検索した親の仮想サーバに、階層＝「子」かつスケールインされる仮想サーバのホスト名＝＃１−１のレコードを階層管理テーブルから削除し、階層＝「子」かつ検索された子の仮想サーバのホスト名＝＃１−１−１のレコードを階層管理テーブルへ登録するよう要求する。（ステップＳ２２６）。
【０１７４】
要求を受信した仮想サーバ＃１は、階層＝「子」かつホスト名＝＃１−１であるレコードを階層管理テーブル１２４ｒから削除し、階層＝「子」かつ検索した子の仮想サーバのホスト名＝＃１−１−１であるレコードを階層管理テーブル１２４ｒへ登録する（ステップＳ２２７）。その結果、レコードの削除および登録前の階層管理テーブル１２４ｒは、レコードの削除および登録後の階層管理テーブル１２４ｓとなる。仮想サーバ＃１は、レコードの削除および登録の結果を仮想サーバ＃１−１に応答する（ステップＳ２２８）。
【０１７５】
仮想サーバ＃１−１は、検索した子の仮想サーバ＃１−１−１に、階層管理テーブル１２４ｔにおいて、階層＝「親」のレコードのホスト名を、検索された親の仮想サーバのホスト名＝＃１に更新するよう要求する（ステップＳ２２９）。
【０１７６】
仮想サーバ＃１−１−１は、階層管理テーブル１２４ｔにおいて、階層＝「親」かつホスト名＝＃１−１のレコードをホスト名＝＃１に更新する（ステップＳ２３０）。その結果、レコード更新前の階層管理テーブル１２４ｔは、レコード更新後の階層管理テーブル１２４ｕとなる。仮想サーバ＃１−１−１は、更新の結果を仮想サーバ＃１に応答する（ステップＳ２３１）。
【０１７７】
仮想サーバ＃１は、仮想化管理サーバ装置２００に仮想サーバ＃１−１のスケールインを要求する（ステップＳ２３２）。仮想化管理サーバ装置２００は、仮想サーバ＃１−１から要求を受信し、仮想サーバ＃１−１をスケールインする。そして、仮想化管理サーバ装置２００は、仮想サーバ＃１にスケールインした旨を応答する（ステップＳ２３３）。仮想サーバ＃１−１は、仮想化管理サーバ装置２００によるスケールインを実施した旨の応答を親の仮想サーバ＃１および子の仮想サーバ＃１−１−１に送信する（ステップＳ２３４）。
【０１７８】
図３１は、第３のスケールイン例を示すブロック図である。仮想サーバ＃１の子の仮想サーバに、仮想サーバ＃１−１が存在する。仮想サーバ＃１−１の子の仮想サーバに、仮想サーバ＃１−１−１が存在する。この場合において、仮想サーバ＃１−１をスケールインしたとき、仮想サーバ＃１は、階層管理テーブル１２４ｒから階層＝「子」であるレコードを削除し、階層管理テーブル１２４ｒに階層＝「子」かつスケールインされる仮想サーバの子のホスト名＝＃１−１−１のレコードを登録する。その結果、レコードの削除および登録前の階層管理テーブル１２４ｒは、レコードの削除および登録後の階層管理テーブル１２４ｓとなる。また、仮想サーバ＃１−１−１は、階層管理テーブル１２４ｔから階層＝「親」であるレコードのホスト名を、スケールインされる仮想サーバの親のホスト名＝＃１に更新する。その結果、レコード更新前の階層管理テーブル１２４ｔは、レコード更新後の階層管理テーブル１２４ｕとなる。
【０１７９】
このように、親の仮想サーバが存在し、子の仮想サーバが存在する仮想サーバは、木構造の根ノードおよび葉ノードのいずれにも該当しない。このような仮想サーバをスケールインするとき、スケールインされる仮想サーバの親の仮想サーバが、スケールインされる仮想サーバの子の仮想サーバの親となるように、階層管理テーブルを更新する。これにより、スケールインされた仮想サーバにおいて、親の仮想サーバが、子の仮想サーバ１つ上の階層となることで、スケールアウト後の各仮想サーバは木構造を保持できる。
【０１８０】
次に、第２の実施の形態の変化例について説明する。第２の実施の形態の変化例では、スケールアウトまたはスケールインの有無を、平均トランザクション数、平均トランザクション変化量に加え、平均トランザクション変化量における変化量に基づいて判断する。
【０１８１】
図３２は、閾値情報テーブルの変化例を示す図である。閾値情報テーブル１２５は、閾値情報テーブル１２１の変化例である。閾値情報テーブル１２５は、トラン数（上限）、トラン数（下限）、トラン変化量（上限）、トラン変化量（下限）、トラン変化量の変化量（上限）およびトラン変化量の変化量（下限）の項目を有する。トラン数（上限）、トラン数（下限）、トラン変化量（上限）およびトラン変化量（下限）の項目については、閾値情報テーブル１２１と同様であるため、説明を省略する。トラン変化量の変化量（上限）の項目には、平均トランザクション変化量における変化量の上限値が設定される。仮想サーバの平均トランザクション変化量の変化量がトラン変化量（上限）以上となったとき、仮想サーバは、仮想化管理サーバ装置２００にスケールアウトを要求する。トラン変化量の変化量（下限）の項目には、平均トランザクション変化量における変化量の下限値が設定される。仮想サーバの平均トランザクション変化量の変化量がトラン変化量（下限）未満となったとき、仮想サーバは、仮想化管理サーバ装置２００にスケールインを要求する。
【０１８２】
図３３は、負荷分析値テーブルの変化例を示す図である。負荷分析値テーブル１２６は、日時、平均トラン数、平均トラン変化量および平均トラン変化量の変化量の項目を有する。日時、平均トラン数および平均トラン変化量の項目については、負荷分析値テーブル１２２と同様であるため説明を省略する。平均トラン変化量の変化量の項目には、所定時間あたりの仮想サーバの平均トランザクション変化量における変化量が設定される。具体的には、平均トランザクション変化量の変化量は、算出した平均トラン変化量と前回算出した平均トラン変化量との差分により算出される。
【０１８３】
図３２〜図３３で示したように、第２の実施の形態の変化例では、スケールアウト等の有無が、第２の実施の形態で判断される平均トランザクション数、平均トランザクション変化量に加え、平均トランザクション変化量における変化量についても判断される。これにより、より急激なトランザクション数の変化の予兆を検知することができる。よって、より急激にトランザクション数が変化した場合でも、スケールアウト等の有無を迅速に判断できる。
【０１８４】
第２の実施の形態によれば、複数のトランザクションを並行して実施する仮想サーバにおいて、仮想サーバを木構造で構成し、自己の階層の１つ下の階層における各仮想サーバから各仮想サーバの階層以下におけるサーバの平均トランザクション数などの性能測定値を受信する。これにより、トランザクションを実行する仮想サーバと別のサーバを用いて、複数の処理を実行する各仮想サーバの性能測定値を集計する方法に比べ、性能測定値の収集するための通信量を各サーバに分散できる。よって、大量の仮想サーバを用いた場合においても、滞ることなく性能測定値の集計が可能となり、迅速にスケールアウト等の有無を判断できる。
【０１８５】
また、性能測定値として平均トランザクション変化量や、平均トランザクション変化量の変化量に基づいて、スケールアウト等などの有無を判断する。これにより、トランザクションの急激な変化を予測することができる。よって、端末装置２１から要求されるトランザクションが急激に変化した場合も、迅速にスケールアウト等の有無を判断できる。
【０１８６】
また、木構造で構成された各仮想サーバが自己の階層以下の各仮想サーバの平均トランザクション数を監視し、スケールアウト等の有無を判断する。これにより、１台のサーバが、全ての仮想サーバの平均トランザクション数を監視する方法と比べ、各仮想サーバの性能測定値を平準化できる。
【０１８７】
図３４は、第２の実施の形態の効果を示す第１のブロック図である。図３４は、第２の実施の形態を利用しない場合の、オートスケールを管理する方法について説明する。仮想サーバ＃１，＃１−１，＃１−２，＃１−３，＃１−４は、実行サーバ装置に用いられる仮想マシンである。仮想サーバ＃１，＃１−１，＃１−２，＃１−３，＃１−４は、端末装置から要求されたトランザクションを並行して実行する。仮想サーバ＃１は、仮想サーバ＃１−１，＃１−２，＃１−３，＃１−４と接続されている。仮想サーバ＃１は、仮想サーバ＃１−１，＃１−２，＃１−３，＃１−４からトランザクション数を受信する。そして、仮想サーバ＃１は、受信したトランザクション数と自己のトランザクション数を基に、全仮想サーバの平均トランザクション数を算出する。
【０１８８】
ここで、仮想サーバ＃１のトランザクション数＝２０、仮想サーバ＃１−１のトランザクション数＝６０、仮想サーバ＃１−２のトランザクション数＝２０、仮想サーバ＃１−４のトランザクション数＝２０、仮想サーバ＃１−４のトランザクション数＝１００である。また、スケールアウトを実行するための平均トランザクション数の閾値は１００とする。
【０１８９】
この場合、仮想サーバ＃１が算出する平均トランザクション数は４４となり、全体としては、閾値以上ではない。しかし、仮想サーバ＃１−４は、閾値以上である１００のトランザクションを実行しており、各仮想サーバについて、トランザクション数に偏りがある。
【０１９０】
また、仮想サーバ＃１は、全体の仮想サーバ数−１の仮想サーバからトランザクション数を受信する。例えば、図３４において、仮想サーバ＃１は、４の仮想サーバからトランザクション数を受信する。仮想サーバの数が１０００に増えれば、仮想サーバ＃１の配下の仮想サーバは９９９となり、トランザクション数を計測するための通信量が増大する。これにより、迅速なオートスケールに支障をきたす場合がある。
【０１９１】
このように、１つの仮想サーバが、他の仮想サーバからトランザクション数を受信する場合、受信する仮想サーバへの通信の負担が増し、迅速なオートスケールが実現できなくなる恐れがある。また、１つの仮想サーバが全体の平均トランザクション数を計測すると、各仮想サーバのトランザクション数の偏りを検知することが困難である。
【０１９２】
図３５は、第２の実施の形態の効果を示す第２のブロック図である。図３５は、第２の実施の形態を利用しない場合の、オートスケールを管理する方法について説明する。仮想サーバ＃１，＃１−１，＃１−２，＃１−１−１，＃１−１−２は、実行サーバ装置１００に用いられる仮想マシンである。仮想サーバ＃１，＃１−１，＃１−２，＃１−１−１，＃１−１−２は、端末装置２１から要求されたトランザクションを並行して実行する。図３５において、仮想サーバ＃１，＃１−１，＃１−２，＃１−１−１，＃１−１−２は、次の木構造により構成されている。仮想サーバ＃１において、親の仮想サーバは存在せず、子の仮想サーバには仮想サーバ＃１−１，＃１−２が存在する。また、仮想サーバ＃１−１において、親の仮想サーバには仮想サーバ＃１が存在し、子の仮想サーバには仮想サーバ＃１−１−１，＃１−１−２が存在する。また、仮想サーバ＃１−２において、親の仮想サーバには仮想サーバ＃１が存在し、子の仮想サーバは存在しない。また、仮想サーバ＃１−１−１，＃１−１−２において、親の仮想サーバには仮想サーバ＃１−１が存在し、子の仮想サーバは存在しない。
【０１９３】
ここで、仮想サーバ＃１のトランザクション数＝２０、仮想サーバ＃１−１のトランザクション数＝６０、仮想サーバ＃１−２のトランザクション数＝２０、仮想サーバ＃１−１−１のトランザクション数＝２０、仮想サーバ＃１−１−２のトランザクション数＝１００とする。また、スケールアウトを実行するための平均トランザクション数の閾値は１００とする。
【０１９４】
この場合、仮想サーバ＃１−１−１には子の仮想サーバが存在しないため、仮想サーバ＃１−１−１の総仮想サーバ数＝１、総トランザクション数＝２０および平均トランザクション数＝２０となる。また、仮想サーバ＃１−１−２は、総仮想サーバ数＝１、総トランザクション数＝１００および平均トランザクション数＝１００となる。
【０１９５】
また、仮想サーバ＃１−１は、子の仮想サーバ＃１−１−１，＃１−１−２が存在する。そのため、仮想サーバ＃１−１の総仮想サーバ数＝１＋１＋１＝３、総トランザクション数の合計＝２０＋１００＋６０＝１８０、そして、平均トランザクション数＝１８０÷３＝６０となる。また、仮想サーバ＃１−２は、子の仮想サーバが存在しないため、総仮想サーバ数＝１、総トランザクション数＝２０および平均トランザクション数＝２０となる。また、仮想サーバ＃１は、子の仮想サーバ＃１−１，＃１−２が存在する。そのため、総仮想サーバ数＝３＋１＋１＝５、総トランザクション数＝１８０＋２０＋２０＝２２０となる。そして、平均トランザクション数＝２２０÷５＝４４となる。
【０１９６】
このため、仮想サーバ＃１が測定したトランザクション数＝４４で閾値未満だが、仮想サーバ＃１−１−２の平均トランザクション数＝１００のため、閾値以上であり、スケールアウトを要求する判断が可能となる。
【０１９７】
また、図３５において、仮想サーバが木構造で構成されているため、各仮想サーバがトランザクション数を受信する仮想サーバの数は、多くても２つである。また、全体の仮想サーバが１０００になっても、ツリー構造のため、各仮想サーバがトランザクション数を受信する仮想サーバの数は変わらず、通信量が分散される。
【０１９８】
このように、各仮想サーバを木構造で構成することで、トランザクション数を測定するための通信の負荷を各仮想サーバに分散することができる。また、各仮想サーバが自己の階層以下の階層の平均トランザクション数を測定し、スケールアウトおよびスケールインの有無を判定することで、各仮想サーバが実行するトランザクション数を平準化できる。
【０１９９】
なお、前述のように、第１の実施の形態の情報処理は、サーバ１０，１０ａ，１０ｂ，１０ｃにプログラムを実行させることで実現でき、第２の実施の形態の情報処理は、実行サーバ装置１００にプログラムを実行させることで実現できる。このようなプログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体４３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。
【０２００】
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体が提供される。また、プログラムを他のコンピュータの記憶装置に格納しておき、ネットワーク３１経由でプログラムを配布することもできる。コンピュータは、例えば、可搬記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、記憶装置（例えば、ＨＤＤ１０３）に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよく、他のコンピュータからネットワーク３１を介して受信したプログラムを直接実行してもよい。また、上記の情報処理の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤ（Programmable Logic Device）等の電子回路で実現することも可能である。
【０２０１】
上記については単に本発明の原理を示すものである。さらに、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０２０２】
１０，１０ａ，１０ｂ，１０ｃ  サーバ
１１，１１ａ，１１ｂ，１１ｃ  受信部
１２，１２ａ，１２ｂ，１２ｃ  判定部
【図１】
2015145753.tif 000003
【図２】
2015145753.tif 000004
【図３】
2015145753.tif 000005
【図４】
2015145753.tif 000006
【図５】
2015145753.tif 000007
【図６】
2015145753.tif 000008
【図７】
2015145753.tif 000009
【図８】
2015145753.tif 000010
【図９】
2015145753.tif 000011
【図１０】
2015145753.tif 000012
【図１１】
2015145753.tif 000013
【図１２】
2015145753.tif 000014
【図１３】
2015145753.tif 000015
【図１４】
2015145753.tif 000016
【図１５】
2015145753.tif 000017
【図１６】
2015145753.tif 000018
【図１７】
2015145753.tif 000019
【図１８】
2015145753.tif 000020
【図１９】
2015145753.tif 000021
【図２０】
2015145753.tif 000022
【図２１】
2015145753.tif 000023
【図２２】
2015145753.tif 000024
【図２３】
2015145753.tif 000025
【図２４】
2015145753.tif 000026
【図２５】
2015145753.tif 000027
【図２６】
2015145753.tif 000028
【図２７】
2015145753.tif 000029
【図２８】
2015145753.tif 000030
【図２９】
2015145753.tif 000031
【図３０】
2015145753.tif 000032
【図３１】
2015145753.tif 000033
【図３２】
2015145753.tif 000034
【図３３】
2015145753.tif 000035
【図３４】
2015145753.tif 000036
【図３５】
2015145753.tif 000037
【国際調査報告】
2015145753.tif 000038
2015145753.tif 000039