(57)【特許請求の範囲】
【請求項１】
第１階層から第Ｎ階層（Ｎは２以上の整数）まで有する分散システムに適用されるアプリケーションを構成する複数のソフトウェアコンポーネントの配置を決定する管理装置であって、
前記分散システムにおいて、前記ソフトウェアコンポーネントは前記第１階層に配置され、前記ソフトウェアコンポーネント同士の通信は、経由する階層が下位層であるほど時間がかかり、
前記管理装置は、
通信する前記ソフトウェアコンポーネントのペアごとの通信頻度データを記憶する記憶部と、
前記記憶部の通信頻度データを参照し、
通信する前記ソフトウェアコンポーネントのすべてのペアについて、
通信頻度の高いペアから順に、ペアを同じ第１階層グループに所属させるか、または、所定の第１制約条件によりペアを同じ前記第１階層グループに所属させられない場合には、ペアの通信頻度を、それぞれが所属する第１階層グループ間の通信頻度として加算することで、第１階層グルーピングを完了し、
次に、
通信する前記第１階層グループのすべてのペアについて、
通信頻度の高いペアから順に、ペアを同じ第２階層グループに所属させるか、または、所定の第２制約条件によりペアを同じ前記第２階層グループに所属させられない場合には、ペアの通信頻度を、それぞれが所属する第２階層グループ間の通信頻度として加算することで、第２階層グルーピングを完了し、
さらに、
同様のグルーピング処理を前記第Ｎ階層まで繰り返し実施し、前記ソフトウェアコンポーネントを階層的にグルーピングする処理部と、
を備えることを特徴とする管理装置。
【請求項２】
前記所定の第１制約条件は、前記第１階層グループに所属させることができる前記ソフトウェアコンポーネントの数の上限値であり、
前記所定の第２制約条件は、前記第２階層グループに所属させることができる前記第１階層グループの数の上限値である
ことを特徴とする請求項１に記載の管理装置。
【請求項３】
前記通信頻度データは、前記分散システムへ前記ソフトウェアコンポーネントを配置する前に予測した前記ソフトウェアコンポーネント同士の通信頻度のデータであり、
前記処理部は、当該通信頻度データに基づき、前記ソフトウェアコンポーネントを階層的にグルーピングし、前記分散システムに対する前記ソフトウェアコンポーネントの初期配置を実行する
ことを特徴とする請求項１または請求項２に記載の管理装置。
【請求項４】
前記通信頻度データは、前記分散システムにおける前記ソフトウェアコンポーネント間の実際の通信頻度を集計したデータであり、
前記処理部は、当該通信頻度データに基づき、前記ソフトウェアコンポーネントを階層的にグルーピングし、前記分散システムに対する前記ソフトウェアコンポーネントの再配置を実行する
ことを特徴とする請求項１または請求項２に記載の管理装置。
【請求項５】
第１階層から第Ｎ階層（Ｎは２以上の整数）まで有する分散システムに適用されるアプリケーションを構成する複数のソフトウェアコンポーネントの配置を決定する管理装置によるソフトウェアコンポーネントグルーピング方法であって、
前記分散システムにおいて、前記ソフトウェアコンポーネントは前記第１階層に配置され、前記ソフトウェアコンポーネント同士の通信は、経由する階層が下位層であるほど時間がかかり、
前記管理装置は、
通信する前記ソフトウェアコンポーネントのペアごとの通信頻度データを記憶する記憶部と、処理部と、を備えており、
前記処理部は、
前記記憶部の通信頻度データを参照し、
通信する前記ソフトウェアコンポーネントのすべてのペアについて、
通信頻度の高いペアから順に、ペアを同じ第１階層グループに所属させるか、または、所定の第１制約条件によりペアを同じ前記第１階層グループに所属させられない場合には、ペアの通信頻度を、それぞれが所属する第１階層グループ間の通信頻度として加算することで、第１階層グルーピングを完了し、
次に、
通信する前記第１階層グループのすべてのペアについて、
通信頻度の高いペアから順に、ペアを同じ第２階層グループに所属させるか、または、所定の第２制約条件によりペアを同じ前記第２階層グループに所属させられない場合には、ペアの通信頻度を、それぞれが所属する第２階層グループ間の通信頻度として加算することで、第２階層グルーピングを完了し、
さらに、
同様のグルーピング処理を前記第Ｎ階層まで繰り返し実施し、前記ソフトウェアコンポーネントを階層的にグルーピングする
ことを特徴とするソフトウェアコンポーネントグルーピング方法。
【請求項６】
前記所定の第１制約条件は、前記第１階層グループに所属させることができる前記ソフトウェアコンポーネントの数の上限値であり、
前記所定の第２制約条件は、前記第２階層グループに所属させることができる前記第１階層グループの数の上限値である
ことを特徴とする請求項５に記載のソフトウェアコンポーネントグルーピング方法。
【請求項７】
前記通信頻度データは、前記分散システムへ前記ソフトウェアコンポーネントを配置する前に予測した前記ソフトウェアコンポーネント同士の通信頻度のデータであり、
前記処理部は、当該通信頻度データに基づき、前記ソフトウェアコンポーネントを階層的にグルーピングし、前記分散システムに対する前記ソフトウェアコンポーネントの初期配置を実行する
ことを特徴とする請求項５または請求項６に記載のソフトウェアコンポーネントグルーピング方法。
【請求項８】
前記通信頻度データは、前記分散システムにおける前記ソフトウェアコンポーネント間の実際の通信頻度を集計したデータであり、
前記処理部は、当該通信頻度データに基づき、前記ソフトウェアコンポーネントを階層的にグルーピングし、前記分散システムに対する前記ソフトウェアコンポーネントの再配置を実行する
ことを特徴とする請求項５または請求項６に記載のソフトウェアコンポーネントグルーピング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散システムに適用されるアプリケーションを構成する複数のソフトウェアコンポーネントの適切な配置を決定する技術に関する。
【背景技術】
【０００２】
近年、階層化された分散システムにアプリケーションを適用することが増えている。例えば、図１０に示すように、対象とする分散システムは、下位層から順に、データセンタ、同スイッチ配下のラック、物理サーバ、仮想サーバの４つの階層からなる。
【０００３】
データセンタは、複数設けられている。
１つのデータセンタに、複数のラックが対応して設けられている。
１つのラックに、複数の物理サーバが対応して設けられている。
１つの物理サーバに、複数の仮想サーバが対応して設けられている。
１つの仮想サーバに、複数のプロセスが対応して設けられている。
そして、プロセスに、ソフトウェアコンポーネントが１対１対応で配置（ロード）される。
【０００４】
アプリケーションは、複数のソフトウェアコンポーネントから構成される。ここで、ソフトウェアコンポーネントとは、何らかの機能を提供するソフトウェアのひとまとまりを指す。
【０００５】
図１０に示す分散システムでは、任意のソフトウェアコンポーネント間で通信が発生する。そして、ソフトウェアコンポーネント同士の通信は、経由する階層が下位層であるほど時間がかかる。つまり、このような階層化された分散システムでは、通信経路が下位層に及ぶほど通信遅延が増大してしまうため、通信頻度の高いソフトウェアコンポーネント間の通信経路が下位層に及んでしまうと、通信遅延の影響が顕著に表れてしまう。
【０００６】
したがって、ソフトウェアコンポーネントの配置が処理時間（通信時間）を大きく左右するので、通信遅延を低減するには、ソフトウェアコンポーネント間の通信が、なるべく上位層で行われるようにすることが必要である。
【０００７】
また、これに関連して、非特許文献１では、物理サーバに対して仮想マシンを割り当てるアルゴリズムについて開示されている。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Gaston Keller, Michael Tighe, Hanan Lutfiyya and Michael Bauer, "An Analysis of First Fit Heuristics for the Virtual Machine Relocation Problem", 6th International DMTF workshop on Systems and Virtualization Management (SVM 2012) / CNSM 2012, p.406-413
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、各階層の装置（仮想サーバ、物理サーバなど）にはそれぞれの容量があり、また、ソフトウェアコンポーネントの数が多いと、通信を行うソフトウェアコンポーネントのペアの組み合わせが多くなるので、通信遅延を低減するためにソフトウェアコンポーネントの適切な配置を決定するのは難しい。この点、上記した非特許文献１の技術によっても解決することができない。
【００１０】
そこで、本発明は、複数階層を有する分散システムに適用されるアプリケーションを構成する複数のソフトウェアコンポーネントの適切な配置を決定するために、ソフトウェアコンポーネントを適切にグルーピングすることを課題とする。
【課題を解決するための手段】
【００１１】
前記課題を解決するために、本発明は、第１階層から第Ｎ階層（Ｎは２以上の整数）まで有する分散システムに適用されるアプリケーションを構成する複数のソフトウェアコンポーネントの配置を決定する管理装置であって、前記分散システムにおいて、前記ソフトウェアコンポーネントは前記第１階層に配置され、前記ソフトウェアコンポーネント同士の通信は、経由する階層が下位層であるほど時間がかかり、前記管理装置は、通信する前記ソフトウェアコンポーネントのペアごとの通信頻度データを記憶する記憶部と、前記記憶部の通信頻度データを参照し、通信する前記ソフトウェアコンポーネントのすべてのペアについて、通信頻度の高いペアから順に、ペアを同じ第１階層グループに所属させるか、または、所定の第１制約条件によりペアを同じ前記第１階層グループに所属させられない場合には、ペアの通信頻度を、それぞれが所属する第１階層グループ間の通信頻度として加算することで、第１階層グルーピングを完了し、次に、通信する前記第１階層グループのすべてのペアについて、通信頻度の高いペアから順に、ペアを同じ第２階層グループに所属させるか、または、所定の第２制約条件によりペアを同じ前記第２階層グループに所属させられない場合には、ペアの通信頻度を、それぞれが所属する第２階層グループ間の通信頻度として加算することで、第２階層グルーピングを完了し、さらに、同様のグルーピング処理を前記第Ｎ階層まで繰り返し実施し、前記ソフトウェアコンポーネントを階層的にグルーピングする処理部と、を備えることを特徴とする。
【００１２】
これによれば、アプリケーションを構成する複数のソフトウェアコンポーネントについて、通信頻度が高いペアほど上位層でグルーピングすることができる、つまり、ソフトウェアコンポーネントを適切にグルーピングすることができる。
【００１３】
また、本発明は、前記所定の第１制約条件が、前記第１階層グループに所属させることができる前記ソフトウェアコンポーネントの数の上限値であり、前記所定の第２制約条件が、前記第２階層グループに所属させることができる前記第１階層グループの数の上限値であることが好ましい。
【００１４】
これによれば、第１階層グループに対応する装置（例えば仮想サーバ）、第２階層グループに対応する装置（例えば物理サーバ）の容量に基づいて、それぞれ、所定の第１制約条件、所定の第２制約条件を設定することができるので、分散システムの仕様に基づいたソフトウェアコンポーネントのグルーピングを実行することができる。
【００１５】
また、本発明は、前記通信頻度データが、前記分散システムへ前記ソフトウェアコンポーネントを配置する前に予測した前記ソフトウェアコンポーネント同士の通信頻度のデータであり、前記処理部が、当該通信頻度データに基づき、前記ソフトウェアコンポーネントを階層的にグルーピングし、前記分散システムに対する前記ソフトウェアコンポーネントの初期配置を実行することが好ましい。
【００１６】
これによれば、分散システムへソフトウェアコンポーネントを配置する前に予測したソフトウェアコンポーネント同士の通信頻度のデータに基づき、ソフトウェアコンポーネントを階層的にグルーピングし、分散システムに対するソフトウェアコンポーネントの初期配置を実行することができる。
【００１７】
また、本発明は、前記通信頻度データが、前記分散システムにおける前記ソフトウェアコンポーネント間の実際の通信頻度を集計したデータであり、前記処理部が、当該通信頻度データに基づき、前記ソフトウェアコンポーネントを階層的にグルーピングし、前記分散システムに対する前記ソフトウェアコンポーネントの再配置を実行することが好ましい。
【００１８】
これによれば、分散システムにおけるソフトウェアコンポーネント間の実際の通信頻度を集計した通信頻度データに基づき、ソフトウェアコンポーネントを階層的にグルーピングし、分散システムに対するソフトウェアコンポーネントの再配置を実行することができる。
【発明の効果】
【００１９】
本発明によれば、複数階層を有する分散システムに適用されるアプリケーションを構成する複数のソフトウェアコンポーネントの適切な配置を決定するために、ソフトウェアコンポーネントを適切にグルーピングすることができる。
【図面の簡単な説明】
【００２０】
【図１】本実施形態の分散システムと管理装置の全体構成図である。
【図２】ソフトウェアコンポーネントのグルーピング処理のステップ１の説明図である。
【図３】ソフトウェアコンポーネントのグルーピング処理のステップ２の説明図である。
【図４】ステップ２における判定アルゴリズムのケース１の場合の説明図である。
【図５】ステップ２における判定アルゴリズムのケース２の場合の説明図である。
【図６】ステップ２における判定アルゴリズムのケース３の場合の説明図である。
【図７】ステップ２における判定アルゴリズムのケース４の場合の説明図である。
【図８】ソフトウェアコンポーネントのグルーピング処理のステップ３の説明図である。
【図９】ソフトウェアコンポーネントのグルーピング処理のステップ４の説明図である。
【図１０】従来技術の分散システムにおける通信遅延の説明図である。
【発明を実施するための形態】
【００２１】
以下、本発明に係る分散システム１および管理装置２の実施形態について、図面を参照して説明する。
【００２２】
図１に示すように、分散システム１は、複数のソフトウェアコンポーネントから構成されるアプリケーションを適用する対象のシステムであり、下位層から順に、データセンタ１１、同スイッチ配下のラック１２、物理サーバ１３、仮想サーバ１４の４つの階層からなる。
【００２３】
データセンタ１１は、複数設けられている。
１つのデータセンタ１１に、複数のラック１２が対応して設けられている。
１つのラック１２に、複数の物理サーバ１３が対応して設けられている。
１つの物理サーバ１３に、複数の仮想サーバ１４が対応して設けられている。
１つの仮想サーバ１４に、複数のプロセス１５が対応して設けられている。
プロセス１５に、ソフトウェアコンポーネント３（以下、符号無しで「ソフトウェアコンポーネント」と称する。）が１対１対応で配置される。
【００２４】
分散システム１において、プロセス１５に対応して配置されたソフトウェアコンポーネント同士の通信は、経由する階層が下位層であるほど時間がかかる。例えば、仮想サーバ１４を経由するよりも物理サーバ１３を経由するほうが、時間がかかる。また、物理サーバ１３を経由するよりもラック１２を経由するほうが、時間がかかる。さらに、ラック１２を経由するよりもデータセンタ１１を経由するほうが、時間がかかる。
【００２５】
管理装置２は、分散システム１に適用されるアプリケーションを構成する複数のソフトウェアコンポーネントの配置を決定するコンピュータ装置であり、処理部２１、記憶部２２、入力部２３、出力部２４、通信部２５を備えて構成される。
【００２６】
処理部２１は、記憶部２２に記憶された各データに基づいて、分散システム１に適用されるアプリケーションを構成する複数のソフトウェアコンポーネントの配置を決定する。具体的には、初期配置を決定して実行し、また、再配置を決定し実行する。処理部２１は、例えばＣＰＵ（Central Processing Unit）によって実現される。
【００２７】
記憶部２２は、通信頻度データ、グルーピングデータ、ソフトウェアコンポーネント配置データなどを記憶し、例えば、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ＨＤＤ（Hard Disk Drive）などによって実現される。
【００２８】
通信頻度データは、ソフトウェアコンポーネントのペアごとの通信頻度のデータであり、例えば、分散システム１へソフトウェアコンポーネントを配置する前に予測したソフトウェアコンポーネント同士の通信頻度のデータである。
その場合、処理部２１は、当該通信頻度データに基づき、ソフトウェアコンポーネントを階層的にグルーピングし、分散システム１に対するソフトウェアコンポーネントの初期配置を実行する（詳細は後記）。
【００２９】
また、通信頻度データは、分散システム１におけるソフトウェアコンポーネント間の実際の通信頻度を集計したデータであってもよい。
その場合、処理部２１は、当該通信頻度データに基づき、ソフトウェアコンポーネントを階層的にグルーピングし、分散システム１に対するソフトウェアコンポーネントの再配置を実行する（詳細は後記）。
【００３０】
グルーピングデータは、処理部２１が記憶部２２の通信頻度データに基づいてソフトウェアコンポーネント間の通信がなるべく上位層で行われるようにソフトウェアコンポーネントのグルーピングを行った結果のデータである。
【００３１】
ソフトウェアコンポーネント配置データは、処理部２１が記憶部２２のグルーピングデータに基づいて分散システム１に対するソフトウェアコンポーネントの配置を行った結果のデータである。
【００３２】
入力部２３は、管理装置２のユーザが情報を入力するための入力インタフェースであり、例えばキーボード、マウス、タッチパネルなどによって実現される。
出力部２４は、情報を出力するための出力インタフェースであり、例えば、液晶画面表示装置により実現される。
通信部２５は、分散システム１などの外部装置との通信を行うための通信インタフェースである。
【００３３】
次に、本実施形態における処理の概要を説明する。なお、説明を簡潔にするために、処理主体が管理装置２の処理部２１であることや、その処理部２１が記憶部２２の各データを用いることなどの記載は、適宜省略する。
【００３４】
また、第１階層グループとは、通信頻度が高いソフトウェアコンポーネント（各図では単に「コンポーネント」と記載している場合もある。）をグルーピングしたグループである。そして、１つの第１階層グループは、１つの仮想サーバ１４に対応する。
【００３５】
また、第２階層グループとは、通信頻度が中程度のソフトウェアコンポーネントをグルーピングしたグループである。つまり、通信頻度が中程度のソフトウェアコンポーネントのペアは、第１階層グループとしてはグルーピングされていないが、第２階層グループとしてグルーピングされることになる。そして、１つの第２階層グループは、１つの物理サーバ１３に対応する。
【００３６】
また、第３階層グループとは、通信頻度が低いソフトウェアコンポーネントをグルーピングしたグループである。つまり、通信頻度が低いソフトウェアコンポーネントのペアは、第１階層グループ、第２階層グループとしてはグルーピングされていないが、第３階層グループとしてグルーピングされることになる。そして、１つの第３階層グループは、１つのラック１２に対応する。
【００３７】
なお、図１には図示していないが、図８、図９に図示しているように、第４階層グループとは、通信頻度がさらに低いソフトウェアコンポーネントをグルーピングしたグループである。つまり、通信頻度がさらに低いソフトウェアコンポーネントのペアは、第１階層グループ、第２階層グループ、第３階層グループとしてはグルーピングされていないが、第４階層グループとしてグルーピングされることになる。そして、１つの第４階層グループは、１つのデータセンタ１１に対応する。
【００３８】
本実施形態では、通信頻度が高いソフトウェアコンポーネントのペアがなるべく上位層で通信できるよう、ソフトウェアコンポーネント間の通信頻度に基づいてソフトウェアコンポーネントを階層的にグルーピングする（図１の符号Ａ）。
そして、そのグルーピング結果に基づいて、分散システム１にソフトウェアコンポーネントを配置する（符号Ｂ）。
【００３９】
より具体的には、本実施形態によるグルーピング処理は、次のステップ１〜４により実現できる。なお、ここでは、ソフトウェアコンポーネントの初期配置ではなく再配置の場合を例にとって説明する。
【００４０】
＜ステップ１＞
アプリケーションを構成するすべてのソフトウェアコンポーネント間の通信回数（通信頻度）を一定期間計測する。
＜ステップ２＞
ソフトウェアコンポーネント間の通信頻度（記憶部２２の通信頻度データ）に基づき、ソフトウェアコンポーネントの第１階層でのグルーピングを実施する。
【００４１】
＜ステップ３＞
グルーピングを階層的に繰り返し実施する。
＜ステップ４＞
階層的にグルーピングしたソフトウェアコンポーネントを、階層化された分散システム１へ対応付けて配置する。
【００４２】
以下、各ステップについて詳述する。
＜ステップ１＞
ステップ１では、前記したように、アプリケーションを構成するすべてのソフトウェアコンポーネント間の通信回数を一定期間計測する。
具体的には、図２に示すように、アプリケーションを構成するソフトウェアコンポーネントの集合Ｓに含まれるソフトウェアコンポーネントｓｎ，ｓｍ間の通信回数をｃ（ｓｎ，ｓｍ）として、本ステップによりｃの集合Ｃ＝｛ｃ（ｓｎ，ｓｍ）｜ｓｎ＜ｓｍ∧ｓｎ∈Ｓ∧ｓｍ∈Ｓ｝を得る。例えば、ｓ１，ｓ２の間の通信回数が１８回であることは、ｃ（ｓ１，ｓ２）＝１８と表すことができる。
【００４３】
＜ステップ２＞
ステップ２では、まず、通信するソフトウェアコンポーネントのすべてのペアについて、通信頻度の高いペアから順に、ペアを同じ第１階層グループに所属させるか、または、所定の第１制約条件によりペアを同じ第１階層グループに所属させられない場合には、ペアの通信頻度を、それぞれが所属する第１階層グループ間の通信頻度として加算することで、第１階層グルーピングを完了する。
【００４４】
その後、通信する第１階層グループのすべてのペアについて、通信頻度の高いペアから順に、ペアを同じ第２階層グループに所属させるか、または、所定の第２制約条件によりペアを同じ第２階層グループに所属させられない場合には、ペアの通信頻度を、それぞれが所属する第２階層グループ間の通信頻度として加算することで、第２階層グルーピングを完了する。
その後、さらに、同様のグルーピング処理を第Ｎ階層（Ｎは２以上の整数）まで繰り返し実施する。
【００４５】
このステップ２を実現するための具体的なステップ２−１〜２−５について、図３を参照して説明する。
ステップ２−１では、集合Ｃの要素ｃ（ｓｎ，ｓｍ）を降順にソートする。
次に、ステップ２−２では、先頭の要素ｃ（ｓｎ，ｓｍ）を取得する。つまり、通信回数の多いペアからグルーピング処理を実施する。
次に、ステップ２−３では、判定アルゴリズムに基づいてグルーピング条件判定を行う。この判定アルゴリズムについては、図４〜図７を用いて後記する。
【００４６】
次に、ステップ２−４では、適切なグループｇへソフトウェアコンポーネントｓｎ，ｓｍを追加する。この際、符号２−４−１に示すように、一例として、ｃ（ｓ３，ｓ９）を処理する場合、例えば、既にｓ３が属していたグループｇ３へｓ９を挿入することが考えられる。その場合、そのペアの通信回数ｃ（ｓｎ，ｓｍ）は保存される。
【００４７】
また、符号２−４−２に示すように、ペア（ｓｎとｓｍ）が別グループに分かれる場合、グループ間の通信回数ｃｇ（ｇｏ，ｇｐ）に、そのペアの通信回数ｃ（ｓｎ，ｓｍ）を加算（カウント）する。
【００４８】
次に、ステップ２−５（不図示）では、ステップ２−２〜２−４を繰り返し実施する。つまり、集合Ｃのすべての要素に対してステップ２−２〜２−４を実施する。
このようにして、ステップ２を実現することができる。
【００４９】
次に、ステップ２−３で用いる判定アルゴリズムにおける４つの場合分けであるケース１〜ケース４について、図４〜図７を参照して説明する。
なお、ケース１〜ケース４とは、次の通りである。
【００５０】
ケース１：ｓｎ，ｓｍのいずれも既存のグループに属さない場合
ケース２：ｓｎ，ｓｍのどちらか一方だけ既存のグループに属する場合
ケース３：ｓｎ，ｓｍのそれぞれが既存の別々のグループに属する場合
ケース４：ｓｎ，ｓｍの両方が既存の同じグループに属する場合
【００５１】
（ケース１）
まず、ケース１について、図４を参照して説明する。
ｓｎ，ｓｍのいずれも既存のグループに属さない場合、新しくグループを作成する。例えば、図４（ａ）に示すように、判定対象のソフトウェアコンポーネントペアがｓ３，ｓ９で、いずれも既存のグループｇ１，ｇ２に属さない場合、図４（ｂ）に示すように、新しくグループｇ３を作成し、そのグループｇ３にｓ３，ｓ９を入れる。その場合、そのペアの通信回数（ｃ（ｓ３，ｓ９）＝７５）は保存される。
【００５２】
（ケース２）
次に、ケース２について、図５を参照して説明する。ここで、所定の第１制約条件として、第１階層グループに所属させることができるソフトウェアコンポーネントの数の上限値（ｍａｘ（｜ｇ｜））が決まっているものとする。この上限値（ｍａｘ（｜ｇ｜））は、仮想サーバ１４の容量等に基づいて予め決定しておく。
【００５３】
ｓｎ，ｓｍのどちらか一方だけ既存のグループに属する場合、ｓｎが既存のグループｇｏに属すると仮定する。そのとき、グループｇｏの要素数が上限値に達していないとすると（ｍａｘ（｜ｇ｜）＞｜ｇｏ｜）、ｇｏにｓｍを挿入する。例えば、図５（ａ）に示すように、判定対象のソフトウェアコンポーネントのペアであるｓ５，ｓ６のうち、ｓ５だけが既存のグループｇ２に属するとき、グループｇ２の要素数が上限値に達していないとすると（ｍａｘ（｜ｇ｜）＞５）、図５（ｂ）に示すように、ｇ２にｓ６を挿入する。その場合、そのペアの通信回数（ｃ（ｓ５，ｓ６）＝６６）は保存される。
【００５４】
また、グループｇｏの要素数が既に上限値に達しているとすると（ｍａｘ（｜ｇ｜）＝｜ｇｏ｜）、新たなグループｇｐを作成し、グループｇｐにｓｍを挿入する。さらに、グループ間の通信回数ｃｇ（ｇｏ，ｇｐ）に、そのペアの通信回数ｃ（ｓｎ，ｓｍ）を加算する。例えば、図５（ａ）の例で、ｓ５が属する既存のグループｇ２の要素数が既に上限値に達しているとすると（ｍａｘ（｜ｇ｜）＝５）、新たなグループｇ３を作成し、そのグループｇ３にｓ６を挿入する。さらに、グループ間の通信回数ｃｇ（ｇ２，ｇ３）に、そのペアの通信回数（ｃ（ｓ５，ｓ６）＝６６）を加算する。
なお、既存のグループに属するのがｓｎではなくｓｍの場合も同様である。
【００５５】
（ケース３）
次に、ケース３について、図６を参照して説明する。ｓｎ，ｓｍのそれぞれが既存の別々のグループに属する場合、例えば、ｓｎ，ｓｍのそれぞれが既存の別々のグループｇｏ，ｇｐに属すると仮定する。そのとき、グループｇｏとｇｐの要素数の合計が上限値を超えないとすると（ｍａｘ（｜ｇ｜）≧｜ｇｏ｜＋｜ｇｐ｜）、ｇｏとｇｐをマージ（統合）する。例えば、図６（ａ）に示すように、判定対象のソフトウェアコンポーネントのペアであるｓ１，ｓ５のそれぞれが既存の別々のグループｇ１，ｇ２に属するとき、グループｇ１とｇ２の要素数の合計が上限値を超えないとすると（ｍａｘ（｜ｇ｜）≧６（＝３＋３））、図６（ｂ）に示すように、ｇ１とｇ２をマージする。その場合、そのペアの通信回数（ｃ（ｓ１，ｓ５）＝６０）は保存される。
【００５６】
一方、グループｇｏとｇｐの要素数の合計が上限値を超えるとすると（ｍａｘ（｜ｇ｜）＜｜ｇｏ｜＋｜ｇｐ｜）、グループ間の通信回数ｃｇ（ｇｏ，ｇｐ）に、そのペアの通信回数ｃ（ｓｎ，ｓｍ）を加算する。例えば、図６（ａ）の例で、グループｇ１とｇ２の要素数の合計が上限値を超えるとすると（ｍａｘ（｜ｇ｜）＜６（＝３＋３））、グループ間の通信回数ｃｇ（ｇ１，ｇ２）に、そのペアの通信回数（ｃ（ｓ１，ｓ５）＝６０）を加算する。
【００５７】
（ケース４）
次に、ケース４について、図７を参照して説明する。
ｓｎ，ｓｍの両方が既存の同じグループに属する場合、グルーピングはそのままで、通信回数ｃ（ｓｎ，ｓｍ）の情報を追加する。例えば、図７（ａ）に示すように、判定対象のソフトウェアコンポーネントのペアｓ１，ｓ２の両方が既存のグループｇ１に属する場合、図７（ｂ）に示すように、グルーピングはそのままで、通信回数（ｃ（ｓ１，ｓ２）＝７０）の情報を追加する。
【００５８】
＜ステップ３＞
次に、ステップ３では、ステップ２と同様のグルーピングを階層的に繰り返し実施する。つまり、ステップ２ですでに第１階層グループとしてのグルーピングが完了しているので、まず、第１階層グループ単位でグルーピングを行って第２階層グループを作成し、その第２階層グループ単位でグルーピングを行って第３階層グループを作成し、という処理を最終の第Ｎ階層グループを作成するまで行う。
【００５９】
このステップ３に関し、第１階層グループのグルーピング結果に基づいて次のグルーピングを行う具体的な手順であるステップ３−１〜３−５について、図８を参照して説明する。なお、ステップ２で用いていた所定の第１制約条件の代わりに、ステップ３では第２階層グループに所属させることができる第１階層グループの数の上限値である所定の第２制約条件を用いる。この所定の第２制約条件としての上限値は、例えば、一つの物理サーバ１３上に搭載可能な仮想サーバ１４の数などである。
【００６０】
ステップ３−１では、集合Ｃｇの要素ｃｇ（ｇｎ，ｇｍ）を降順にソートする。
次に、ステップ３−２では、先頭の要素ｃｇ（ｇｎ，ｇｍ）を取得する。つまり、通信回数の多いペアからグルーピング処理を実施する。
次に、ステップ３−３では、判定アルゴリズムに基づいてグルーピング条件判定を行う。この判定アルゴリズムについては、ステップ２における判定アルゴリズムと同様であるので、説明を省略する。
【００６１】
次に、ステップ３−４では、適切なグループ（第２階層グループ）へｇｎ，ｇｍを追加する。この際、ステップ２−４と同様、ペア（ｇｎ，ｇｍ）が別グループに分かれる場合、そのグループ間の通信回数に、そのペアの通信回数ｃｇ（ｇｏ，ｇｐ）を加算する。
【００６２】
次に、ステップ３−５（不図示）では、ステップ３−２〜３−４を繰り返し実施する。つまり、集合Ｃｇのすべての要素に対してステップ３−２〜３−４を実施する。
【００６３】
このようなステップ３を、最終階層グループを作成するまで行う。最終階層グループが第４階層グループである場合、階層的なグルーピングが完了した状態は、図８（ｂ）に示す通りである。このグルーピングの結果のデータは、記憶部２２のグルーピングデータとして記憶される。
【００６４】
＜ステップ４＞
ステップ４では、図９に示すように、ソフトウェアコンポーネントのグループ階層を分散システム１の階層と対応付け、ソフトウェアコンポーネントを分散システム１へ配置する。つまり、同じ第１階層グループ内のソフトウェアコンポーネントは、同じ仮想サーバ１４内に配置される。また、同じ第２階層グループ内の第１階層グループは、同じ物理サーバ１３内に配置される。また、同じ第３階層グループ内の第２階層グループは、同じラック１２内に配置される。また、同じ第４階層グループ内の第３階層グループは、同じデータセンタ１１内に配置される。このソフトウェアコンポーネントの配置のデータは、記憶部２２のソフトウェアコンポーネント配置データとして記憶される。
【００６５】
このように、本実施形態の管理装置２によれば、ソフトウェアコンポーネント同士の通信がなるべく上位層を通るようにソフトウェアコンポーネントの配置を適切に決定することで、下位層の通信を減らし、分散システム１における通信遅延を低減することができる。
【００６６】
また、第１階層グループに対応する仮想サーバ１４、第２階層グループに対応する物理サーバ１３の容量に基づいて、それぞれ、所定の第１制約条件、所定の第２制約条件を設定することができるので、分散システム１の仕様に基づいたソフトウェアコンポーネントのグルーピングを実行することができる。
【００６７】
また、合理的で簡潔なアルゴリズムなので、ソフトウェアコンポーネント間の通信の組み合わせが増大して通信関係が複雑になった場合でも、ソフトウェアコンポーネントの適切な配置を容易に決定できる。
【００６８】
なお、上記した実施形態では、分散システム１におけるソフトウェアコンポーネント間の実際の通信頻度を集計した通信頻度データに基づき、ソフトウェアコンポーネントを階層的にグルーピングし、分散システム１に対するソフトウェアコンポーネントの再配置を実行するものとした。しかし、それ以外に、分散システム１へソフトウェアコンポーネントを配置する前に予測したソフトウェアコンポーネント同士の通信頻度のデータに基づき、ソフトウェアコンポーネントを階層的にグルーピングし、分散システム１に対するソフトウェアコンポーネントの初期配置を実行するようにしてもよい。つまり、本実施形態の方式によれば、分散システム１に対するソフトウェアコンポーネントの初期配置を決定し、その後、運用状況に追従してソフトウェアコンポーネントの再配置を行うことができる。
【００６９】
以上で本実施形態の説明を終えるが、本発明の態様はこれらに限定されるものではない。
例えば、本実施形態では分散システム１が４つの階層を有する場合について説明したが、これに限定されず、２つの階層、３つの階層、または、５つ以上の階層を有する場合にも適用できる。
【００７０】
また、ソフトウェアコンポーネントとプロセスとの対応は、１対１対応に限定されず、１対Ｎ対応（Ｎは２以上の整数）、Ｎ対１対応（Ｎは２以上の整数）であってもよい。
また、所定の第１制約条件、所定の第２制約条件は、サーバ容量の制限に基づく数値に限定されず、所定の理由により同じグループにグルーピングできないソフトウェアコンポーネントに関する情報などでもよい。
【００７１】
また、ソフトウェアコンポーネントのグルーピング処理を実行するのは、分散システム１の外部にある管理装置２に限定されず、例えば、分散システム１内のデータセンタ１１内のコンピュータ装置など、他の装置であってもよい。
その他、具体的な構成について、本発明の主旨を逸脱しない範囲で適宜変更が可能である。
【符号の説明】
【００７２】
１      分散システム
２      管理装置
３      ソフトウェアコンポーネント
１１    データセンタ
１２    ラック
１３    物理サーバ
１４    仮想サーバ
１５    プロセス
２１    処理部
２２    記憶部
２３    入力部
２４    出力部
２５    通信部
【図１】
0006278908.tif 000002
【図２】
0006278908.tif 000003
【図３】
0006278908.tif 000004
【図４】
0006278908.tif 000005
【図５】
0006278908.tif 000006
【図６】
0006278908.tif 000007
【図７】
0006278908.tif 000008
【図８】
0006278908.tif 000009
【図９】
0006278908.tif 000010
【図１０】
0006278908.tif 000011