(57)【特許請求の範囲】
【請求項１】
コンピュータに、
プロセッサリソースおよび前記プロセッサリソース以外の他のリソースが割り当てられた複数の仮想実行単位それぞれに対して、前記プロセッサリソースに関する第１使用量および前記他のリソースに関する第２使用量を示すリソース情報と、前記複数の仮想実行単位の前記コンピュータ以外から提供されるサービスの利用状況を示すサービス情報とを取得し、
前記リソース情報および前記サービス情報に関する所定の条件に基づいて、前記複数の仮想実行単位より停止可能な仮想実行単位を特定する、
処理を実行させる仮想化管理プログラムであって、
前記所定の条件は、前記第１使用量の変化量および前記第２使用量の変化量が閾値以下であり、かつ、前記サービスを利用しない時間が第１の時間以上継続している第１の状態の仮想実行単位、または、前記第２使用量の変化量が前記閾値以下であり、前記サービスの利用が前記サービスに対するポーリングである時間が第２の時間以上継続しており、かつ、前記ポーリングを当該仮想実行単位以外の他の仮想実行単位も行っている第２の状態の仮想実行単位を示す、
仮想化管理プログラム。
【請求項２】
前記第１の時間と前記第２の時間とは異なる、
請求項１記載の仮想化管理プログラム。
【請求項３】
前記サービス情報は複数のサービスの利用状況を示し、
前記第２の時間は、前記ポーリングの対象のサービスに応じて異なる、
請求項１記載の仮想化管理プログラム。
【請求項４】
プロセッサリソースおよび前記プロセッサリソース以外の他のリソースが割り当てられた複数の仮想実行単位それぞれに対して、前記プロセッサリソースに関する第１使用量および前記他のリソースに関する第２使用量を示すリソース情報と、前記複数の仮想実行単位を実行するコンピュータ以外から提供されるサービスの利用状況を示すサービス情報とを記憶する記憶部と、
前記リソース情報および前記サービス情報に関する所定の条件に基づいて、前記複数の仮想実行単位より停止可能な仮想実行単位を特定する制御部とを有し、
前記所定の条件は、前記第１使用量の変化量および前記第２使用量の変化量が閾値以下であり、かつ、前記サービスを利用しない時間が第１の時間以上継続している第１の状態の仮想実行単位、または、前記第２使用量の変化量が前記閾値以下であり、前記サービスの利用が前記サービスに対するポーリングである時間が第２の時間以上継続しており、かつ、前記ポーリングを当該仮想実行単位以外の他の仮想実行単位も行っている第２の状態の仮想実行単位を示す、
仮想化管理装置。
【請求項５】
コンピュータが実行する仮想化管理方法において、
プロセッサリソースおよび前記プロセッサリソース以外の他のリソースが割り当てられた複数の仮想実行単位それぞれに対して、前記プロセッサリソースに関する第１使用量および前記他のリソースに関する第２使用量を示すリソース情報と、前記複数の仮想実行単位の前記コンピュータ以外から提供されるサービスの利用状況を示すサービス情報とを取得し、
前記リソース情報および前記サービス情報に関する所定の条件に基づいて、前記複数の仮想実行単位より停止可能な仮想実行単位を特定する、
仮想化管理方法であって、
前記所定の条件は、前記第１使用量の変化量および前記第２使用量の変化量が閾値以下であり、かつ、前記サービスを利用しない時間が第１の時間以上継続している第１の状態の仮想実行単位、または、前記第２使用量の変化量が前記閾値以下であり、前記サービスの利用が前記サービスに対するポーリングである時間が第２の時間以上継続しており、かつ、前記ポーリングを当該仮想実行単位以外の他の仮想実行単位も行っている第２の状態の仮想実行単位を示す、
仮想化管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は仮想化管理プログラム、仮想化管理装置および仮想化管理方法に関する。
【背景技術】
【０００２】
現在、コンピュータ仮想化技術を用いて、同じ物理マシン上に複数の仮想マシンや複数のコンテナなどの複数の仮想実行単位を稼働させることがある。複数の仮想実行単位それぞれに対してプロセッサ能力やメモリ領域などのリソースを割り当てることができ、各仮想実行単位が使用できるリソースは割り当てられた範囲に限定される。ある仮想実行単位上では、他の仮想実行単位から影響を受けずに（他の仮想実行単位とは独立に）アプリケーションソフトウェアを実行することができる。複数の仮想実行単位に同じ種類のアプリケーションソフトウェアを実行させ、これら複数の仮想実行単位を用いて当該アプリケーションソフトウェアの処理を分散化することもできる。【０００３】
このとき、同じ種類のアプリケーションソフトウェアを実行する仮想実行単位の数を動的に変更することがある。アプリケーションソフトウェアの負荷が高いとき（例えば、単位時間当たりのリクエスト数が多いとき）は仮想実行単位を増やし、負荷が低いとき（例えば、単位時間当たりのリクエスト数が少ないとき）は仮想実行単位を減らすことが考えられる。これにより、負荷が低いときはリソースを節約し、負荷が高いときのみ所要のリソースを使用することが可能となる。同じ種類のアプリケーションソフトウェアを実行する仮想実行単位の数を「スケール」、仮想実行単位を増やすことを「スケールアウト」、仮想実行単位を減らすことを「スケールイン」と言うことがある。【０００４】
例えば、複数の仮想サーバを含むクラスタシステムを管理するサーバ管理装置が提案されている。提案のサーバ管理装置は、仮想サーバ群のプロセッサ使用率、メモリ使用率、待ちキュー数、データベースコネクション数、ガーベッジコレクションの発生頻度およびクライアントとの間のセッション数を収集する。サーバ管理装置は、上記の６個の指標値の全てが閾値以下である場合、仮想サーバ群をスケールイン可能と判定する。スケールイン可能である場合、サーバ管理装置は、稼働中の仮想サーバ数が最も少ない物理サーバを検索し、該当する物理サーバ上の何れかの仮想サーバを停止させる。【０００５】
また、例えば、仮想サーバの現在の負荷がスケールイン閾値を下回ったとき、過去の負荷変動の履歴から今後の負荷変動を予測し、今後も負荷が継続的にスケールイン閾値を下回ると予測される場合にスケールインを実行するサーバ管理装置が提案されている。また、例えば、仮想マシンのトラフィック種別毎の通信量を収集し、通信量に基づいて仮想マシンの増加台数または減少台数を決定する運用管理装置が提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−９０５９４号公報
【特許文献２】特開２０１１−１１８５２５号公報
【特許文献３】特開２０１５−１４９５７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
スケールインを行う場合、複数の仮想実行単位のうちの何れの仮想実行単位を停止させるかが問題となる。未完了の処理のステート（処理途中のデータ）を有している仮想実行単位を強制停止させてしまうと、当該ステートが失われてしまう。よって、未完了の処理のステートを有していない仮想実行単位を選択することが好ましい。【０００８】
停止させる仮想実行単位を選択する１つの方法としては、仮想実行単位毎にプロセッサ使用率、メモリ使用量、ディスク使用量などの変化を監視し、ほとんど変化がない仮想実行単位を選択する方法が考えられる。しかし、アプリケーションソフトウェアによっては、プロセッサ使用率などに変化がなくても、仮想実行単位が未完了の処理のステートを有している場合がある。逆に、プロセッサ使用率などが間欠的に変化していても、仮想実行単位が未完了の処理のステートを有していない場合もある。【０００９】
１つの側面では、本発明は、停止させる仮想実行単位を適切に選択できる仮想化管理プログラム、仮想化管理装置および仮想化管理方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、以下の処理をコンピュータに実行させる仮想化管理プログラムが提供される。プロセッサリソースおよびプロセッサリソース以外の他のリソースが割り当てられた複数の仮想実行単位それぞれに対して、プロセッサリソースに関する第１使用量および他のリソースに関する第２使用量を示すリソース情報と、複数の仮想実行単位のコンピュータ以外から提供されるサービスの利用状況を示すサービス情報とを取得する。リソース情報およびサービス情報に関する所定の条件に基づいて、複数の仮想実行単位より停止可能な仮想実行単位を特定する。所定の条件は、第１使用量の変化量および第２使用量の変化量が閾値以下であり、かつ、サービスを利用しない時間が第１の時間以上継続している第１の状態の仮想実行単位、または、第２使用量の変化量が閾値以下であり、サービスの利用がサービスに対するポーリングである時間が第２の時間以上継続しており、かつ、ポーリングを当該仮想実行単位以外の他の仮想実行単位も行っている第２の状態の仮想実行単位を示す。【００１１】
また、１つの態様では、記憶部と制御部とを有する仮想化管理装置が提供される。また、１つの態様では、コンピュータが実行する仮想化管理方法が提供される。
【発明の効果】
【００１２】
１つの側面では、停止させる仮想実行単位を適切に選択できる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の仮想化管理装置の例を示す図である。
【図２】第２の実施の形態の情報処理システムの例を示す図である。
【図３】スケール制御サーバのハードウェア例を示すブロック図である。
【図４】コンテナの例を示すブロック図である。
【図５】コンテナのスケールアウトとスケールインの例を示す図である。
【図６】アプリケーション設定テーブルの例を示す図である。
【図７】アプリケーションインスタンステーブルの例を示す図である。
【図８】コンテナリソーステーブルの例を示す図である。
【図９】振り分けテーブルと通信ログテーブルの例を示す図である。
【図１０】サービスログテーブルの例を示す図である。
【図１１】サーバ間の通信例を示すシーケンス図である。
【図１２】サーバ間の通信例を示すシーケンス図（続き）である。
【図１３】スケール制御サーバの機能例を示すブロック図である。
【図１４】スケールイン判定の手順例を示すフローチャートである。
【図１５】スケールイン判定の手順例を示すフローチャート（続き）である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の仮想化管理装置の例を示す図である。
【００１５】
第１の実施の形態の仮想化管理装置１０は、仮想実行単位２１，２２を含む複数の仮想実行単位を管理する。仮想実行単位２１，２２は、物理的なコンピュータ（物理マシン）上においてアプリケーションソフトウェアを実行する仮想的な処理主体である。仮想実行単位２１，２２は、同じ物理マシンまたは異なる物理マシンに配置されている。
【００１６】
仮想実行単位２１，２２は、ホスト型仮想化やハイパーバイザ型仮想化における仮想マシンであってもよいし、コンテナ型仮想化におけるコンテナでもよい。
ホスト型仮想化では、物理マシン上でホストＯＳ（Operating System）が実行され、ホストＯＳ上で複数の仮想マシンが動作する。各仮想マシンではゲストＯＳが実行され、ゲストＯＳ上でミドルウェアやアプリケーションソフトウェアが実行される。ハイパーバイザ型仮想化では、物理マシン上でハイパーバイザが実行され、ハイパーバイザ上で複数の仮想マシンが動作する。ホスト型仮想化と同様、各仮想マシンではゲストＯＳが実行され、ゲストＯＳ上でミドルウェアやアプリケーションソフトウェアが実行される。コンテナ型仮想化では、物理マシン上でホストＯＳが実行され、ホストＯＳ上で複数のコンテナが動作する。コンテナは、仮想マシンより軽量な仮想実行単位である。各コンテナでは、ゲストＯＳは実行されず、ホストＯＳが管理するリソースの一部を用いてミドルウェアやアプリケーションソフトウェアが実行される。
【００１７】
仮想実行単位２１，２２はそれぞれ、割り当てられているリソースの範囲内でアプリケーションソフトウェアを実行することができる。仮想実行単位２１には、プロセッサリソース２１ａおよび他のリソース２１ｂが割り当てられている。仮想実行単位２２には、プロセッサリソース２２ａおよび他のリソース２２ｂが割り当てられている。プロセッサリソース２１ａ，２２ａは、ＣＰＵ（Central Processing Unit）リソースなどプロセッサの演算能力である。他のリソース２１ｂ，２２ｂは、プロセッサリソース２１ａ，２２ａ以外のリソースであり、例えば、ＲＡＭ（Random Access Memory）などの主記憶装置の記憶領域や、ＨＤＤ（Hard Disk Drive）などの補助記憶装置の記憶領域である。
【００１８】
仮想実行単位２１，２２は、サービス２３を利用することがある。サービス２３は、例えば、仮想実行単位２１，２２の外部から提供される。サービス２３は、仮想実行単位２１，２２を実行するコンピュータ以外の装置から提供されてもよく、仮想化管理装置１０以外の装置から提供されてもよい。サービス２３は、例えば、外部の記憶装置を用いたサービスであり、データベースサービスやキューサービスが含まれてもよい。サービス２３の利用形態の例として、データベースの参照、データベースの更新、仮想実行単位２１，２２が共有するキューのポーリング、キューからの読み出し、キューへの書き込みなどが挙げられる。キューのポーリングでは、キューにデータが到着しているか否かを定期的に確認する。
【００１９】
第１の実施の形態では、複数の仮想実行単位は同じ種類のアプリケーションソフトウェアを実行する。これら複数の仮想実行単位を用いて、アプリケーションソフトウェアの処理が分散化されている。仮想化管理装置１０は、複数の仮想実行単位のリソース使用状況に応じて、仮想実行単位の数を動的に変更する。スケールアウトでは、仮想化管理装置１０は、新たな仮想実行単位を追加して仮想実行単位の数を増やす。スケールインでは、仮想化管理装置１０は、一部の仮想実行単位を停止して仮想実行単位の数を減らす。
【００２０】
仮想化管理装置１０は、記憶部１１および制御部１２を有する。記憶部１１は、ＲＡＭなどの揮発性の半導体メモリでもよいし、ＨＤＤやフラッシュメモリなどの不揮発性の記憶装置でもよい。制御部１２は、ＣＰＵやＤＳＰ（Digital Signal Processor）などのプロセッサでもよい。また、制御部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭなどのメモリ（記憶部１１でもよい）に記憶されたプログラムを実行する。プロセッサが実行するプログラムには、以下に説明する処理を記載した仮想化管理プログラムが含まれる。複数のプロセッサの集合を、「マルチプロセッサ」または単に「プロセッサ」と呼ぶこともある。
【００２１】
記憶部１１は、複数の仮想実行単位それぞれについてリソース情報１３およびサービス情報１４を記憶する。リソース情報１３およびサービス情報１４は、仮想化管理装置１０がネットワーク経由で収集したものであってもよい。
【００２２】
リソース情報１３は、プロセッサリソースの使用量（第１使用量）および他のリソースの使用量（第２使用量）を示す。例えば、仮想実行単位２１について、リソース情報１３は、仮想実行単位２１に割り当てられたプロセッサリソース２１ａのうち使用されている量（例えば、プロセッサ使用率）を示す。また、リソース情報１３は、仮想実行単位２１に割り当てられた他のリソース２１ｂのうち使用されている量（例えば、メモリ使用量やディスク使用量）を示す。サービス情報１４は、サービス２３の利用状況を示す。例えば、仮想実行単位２１について、サービス情報１４は、仮想実行単位２１がサービス２３に対して要求した時刻やサービスの種類を示す。
【００２３】
制御部１２は、記憶部１１に記憶されたリソース情報１３およびサービス情報１４に関する所定の条件に基づいて、複数の仮想実行単位より停止可能な仮想実行単位を特定する。スケールインを行う場合、制御部１２は、特定した仮想実行単位を停止させる。ここで、所定の条件は、第１の状態１５または第２の状態１６の仮想実行単位を示す。
【００２４】
第１の状態１５は、第１使用量の変化量および第２使用量の変化量が閾値以下であり、かつ、サービス２３を利用しない時間が第１の時間以上継続している状態である。第１使用量の変化量および第２使用量の変化量は、例えば、直近の５秒間における最大値と最小値の差である。第１使用量の変化量の閾値は、例えば、割り当てられたプロセッサリソースの５％程度である。第２使用量の変化量の閾値は、例えば、割り当てられた他のリソースの５％程度である。第１の時間は、例えば、５分程度である。
【００２５】
仮想実行単位２１が第１の状態１５にある場合、仮想実行単位２１は、アプリケ−ションソフトウェアの処理を実行しておらず、サービス２３からの応答待ちも発生していないと推定される。この場合、仮想実行単位２１は、未完了の処理のステート（処理途中のデータ）を有しておらず、停止してもステートが失われないと考えられる。
【００２６】
第２の状態１６は、第２使用量の変化量が閾値以下であり、サービス２３の利用がサービス２３に対するポーリングである時間が第２の時間以上継続しており、かつ、ポーリングを当該仮想実行単位以外の他の仮想実行単位も行っている状態である。第２の状態１６では、第１使用量の変化量が閾値を超えていてもよい。第２使用量の変化量は、例えば、直近の５秒間における最大値と最小値の差である。第２使用量の変化量の閾値は、例えば、割り当てられた他のリソースの５％程度である。第２の時間は、例えば、１０分程度である。この間、ポーリング以外にサービス２３が利用されていないことが好ましい。
【００２７】
仮想実行単位２２が第２の状態１６にある場合、仮想実行単位２２は、プロセッサリソース２２ａを使用していても、その使用は専らポーリングによって生じていると推定される。この場合、仮想実行単位２２は、未完了の処理のステート（処理途中のデータ）を有しておらず、停止してもステートが失われないと考えられる。また、他の仮想実行単位もポーリングを行っているため、仮想実行単位２２がポーリングを停止しても、サービス２３に到着したデータが処理されずに残ってしまう可能性は低い。
【００２８】
第１の実施の形態の仮想化管理装置１０によれば、複数の仮想実行単位についてリソース情報１３とサービス情報１４が取得され、リソース情報１３とサービス情報１４に関する所定の条件に基づいて、複数の仮想実行単位より停止可能な仮想実行単位が特定される。第１の状態１５または第２の状態１６にある仮想実行単位が、停止可能と判定され得る。これにより、未完了の処理のステートを有している仮想実行単位を強制停止させてしまうリスクを低減でき、停止させる仮想実行単位を適切に選択することができる。
【００２９】
プロセッサリソースや他のリソースの使用量の変化が小さい仮想実行単位であっても、サービス２３の応答待ちによって未完了の処理のステートを有していることがある。これに対し、仮想化管理装置１０は、第１の状態１５にある仮想実行単位を特定することで、サービス２３の応答待ち中の仮想実行単位を強制停止してしまうリスクを低減できる。また、プロセッサリソースの使用量の変化が小さくない仮想実行単位であっても、専らポーリングを行っているため未完了の処理のステートを有していないことがある。これに対し、仮想化管理装置１０は、第２の状態１６にある仮想実行単位を特定することで、専らポーリングを行う仮想処理単位を停止させることが可能となる。
【００３０】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムの例を示す図である。
第２の実施の形態の情報処理システムは、クライアント４１、管理者端末４２、ロードバランサ４３、ストレージサーバ４４、アプリケーション管理サーバ４５、コンテナ管理サーバ４６、スケール制御サーバ１００およびコンテナサーバ２００，２００ａを有する。クライアント４１および管理者端末４２は、広域ネットワークであるネットワーク３１に接続されている。ロードバランサ４３、ストレージサーバ４４、アプリケーション管理サーバ４５、コンテナ管理サーバ４６、スケール制御サーバ１００およびコンテナサーバ２００，２００ａは、ローカルネットワークであるネットワーク３２に接続されている。
【００３１】
コンテナサーバ２００，２００ａは、複数のコンテナを配置することができるサーバコンピュータである。第２の実施の形態では、コンピュータ仮想化技術としてコンテナ型仮想化を用いる。コンテナは、仮想マシンよりも軽量な仮想実行単位である。各コンテナに対して、コンテナサーバ２００，２００ａが有するハードウェアリソースの一部が割り当てられる。ハードウェアリソースには、ＣＰＵリソース（ＣＰＵ処理時間）、ＲＡＭリソース（ＲＡＭ記憶領域）およびディスクリソース（ＨＤＤ記憶領域）が含まれる。
【００３２】
各コンテナは、割り当てられたハードウェアリソースを用いて、他のコンテナとは独立にミドルウェアやアプリケーションソフトウェアを実行する。ただし、各コンテナは、仮想マシンと異なりゲストＯＳを実行しなくてよい。同じコンテナサーバ上に異なるユーザのコンテナを混在させて配置することもできる。また、２以上のコンテナに同じアプリケーションソフトウェアを実行させて処理を分散化することもできる。
【００３３】
スケール制御サーバ１００は、コンテナサーバ２００，２００ａに配置されたコンテナのスケールを制御するサーバコンピュータである。すなわち、スケール制御サーバ１００は、同じアプリケーションソフトウェアを実行するコンテナの数を、現在のコンテナの負荷に応じて動的に変更する。負荷が高いと判断される場合、スケール制御サーバ１００は、コンテナの数を増やす「スケールアウト」を行うと決定する。負荷が低いと判断される場合、スケール制御サーバ１００は、コンテナの数を減らす「スケールイン」を行うと決定する。スケールインを行う際、スケール制御サーバ１００は、コンテナサーバ２００，２００ａに配置されたコンテナの中から停止するコンテナを選択する。
【００３４】
クライアント４１は、コンテナで実行されているアプリケーションソフトウェアに対するリクエストを送信し、リクエストに対応するレスポンスを受信するクライアントコンピュータである。アプリケーションソフトウェアがＷｅｂサーバアプリケーションである場合、例えば、クライアント４１は、ＷｅｂブラウザなどのＷｅｂクライアントを用いてＨＴＴＰ（Hypertext Transfer Protocol）メッセージを送受信する。同じアプリケーションソフトウェアを実行するコンテナが複数存在するため、クライアント４１は、ネットワーク３１，３２を介してロードバランサ４３にリクエストを送信する。クライアント４１は、ロードバランサ４３からレスポンスを受信する。
【００３５】
管理者端末４２は、アプリケーションソフトウェアの管理者が使用するクライアントコンピュータである。管理者端末４２は、ネットワーク３１，３２を介してアプリケーション管理サーバ４５にアクセスし、コンテナサーバ２００，２００ａへのコンテナの配置をアプリケーション管理サーバ４５に依頼する。なお、図２では管理者端末４２が広域ネットワークであるネットワーク３１に接続されているとしたが、管理者端末４２がローカルネットワークであるネットワーク３２に接続されていてもよい。
【００３６】
ロードバランサ４３は、ネットワーク３１からコンテナサーバ２００，２００ａへのリクエストと、コンテナサーバ２００，２００ａからネットワーク３１へのレスポンスを中継するサーバコンピュータである。ただし、ロードバランサ４３は、「ルータ」、「ゲートウェイ」、「リバースプロキシサーバ」などと呼ばれる装置であってもよい。ロードバランサ４３は、コンテナ数が２以上のアプリケーションソフトウェア宛てのリクエストを受信すると、２以上のコンテナのうちの何れか１つを選択し、選択したコンテナにリクエストを転送する。コンテナの選択方法としては、ラウンドロビンなどの所定のアルゴリズムを使用する。ラウンドロビンでは、１番目のコンテナ、２番目のコンテナ、３番目のコンテナ、…１番目のコンテナと、２以上のコンテナが巡回的に選択される。
【００３７】
また、ロードバランサ４３は、各コンテナのアプリケーションソフトウェアが正常に稼働しているか監視する。ロードバランサ４３は、定期的に（例えば、３０秒周期で）各コンテナに生存確認メッセージを送信し、生存確認メッセージに対する応答メッセージを待つ。ロードバランサ４３は、応答メッセージがあったコンテナではアプリケーションソフトウェアが正常に稼働していると判定する。一方、ロードバランサ４３は、所定回数（例えば、２回）連続して応答メッセージがないコンテナでは、アプリケーションソフトウェアがハングアップなどにより正常に稼働していないと判定する。アプリケーションソフトウェアが正常に稼働していないコンテナを検出した場合、ロードバランサ４３は、以降は当該コンテナにリクエストを転送しないようにする。
【００３８】
ストレージサーバ４４は、不揮発性の記憶装置を用いてデータを保存し、データに関する各種のサービスを提供するサーバコンピュータである。ストレージサーバ４４は、ミドルウェアのプログラムおよびアプリケーションソフトウェアのプログラムを含むコンテナイメージを記憶する。１つのコンテナイメージから、同じアプリケーションソフトウェアを実行する２以上のコンテナを起動することができる。
【００３９】
また、ストレージサーバ４４は、データベースサービスを提供する。コンテナサーバ２００，２００ａに配置されたコンテナは、ストレージサーバ４４に対し、データベースの参照や更新を要求することができる。また、ストレージサーバ４４は、キューサービスを提供する。コンテナサーバ２００，２００ａに配置された２以上のコンテナは、同一のキューを共有できる。各コンテナは、ストレージサーバ４４に対し、キューにデータが到着しているか確認するポーリングを要求することができる。また、各コンテナは、ストレージサーバ４４に対し、キューの読み出しや書き込みを要求することができる。
【００４０】
アプリケーション管理サーバ４５は、管理者端末４２から指定された設定に基づいてコンテナイメージを生成し、生成したコンテナイメージをストレージサーバ４４に保存する。また、アプリケーション管理サーバ４５は、管理者端末４２からの指示に応じて、コンテナイメージを用いたコンテナの起動をコンテナ管理サーバ４６に指示する。また、アプリケーション管理サーバ４５は、スケール制御サーバ１００がスケールアウトまたはスケールインを決定すると、その旨の通知をスケール制御サーバ１００から受信する。すると、アプリケーション管理サーバ４５は、スケール制御サーバ１００からの通知に応じて、コンテナの追加または削除をコンテナ管理サーバ４６に指示する。
【００４１】
コンテナ管理サーバ４６は、コンテナを管理するサーバコンピュータである。コンテナ管理サーバ４６は、コンテナサーバ２００，２００ａから、各コンテナの負荷に関する情報を収集する。また、コンテナ管理サーバ４６は、アプリケーション管理サーバ４５からの指示に応じて、ストレージサーバ４４に記憶されたコンテナイメージを用いてコンテナサーバ２００，２００ａにコンテナを起動させる。コンテナを追加した場合、コンテナ管理サーバ４６は、当該コンテナにリクエストが振り分けられるようにロードバランサ４３を設定する。また、コンテナ管理サーバ４６は、アプリケーション管理サーバ４５からの指示に応じて、コンテナサーバ２００，２００ａにコンテナを停止させる。
【００４２】
図３は、スケール制御サーバのハードウェア例を示すブロック図である。
スケール制御サーバ１００は、プロセッサ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。スケール制御サーバ１００の上記ユニットは、バス１０８に接続されている。なお、スケール制御サーバ１００は、第１の実施の形態の仮想化管理装置１０に対応する。ＣＰＵ１０１は、第１の実施の形態の制御部１２に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。
【００４３】
クライアント４１、管理者端末４２、ロードバランサ４３、ストレージサーバ４４、アプリケーション管理サーバ４５、コンテナ管理サーバ４６およびコンテナサーバ２００，２００ａも、スケール制御サーバ１００と同様のハードウェアを用いて実装できる。
【００４４】
プロセッサ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。プロセッサ１０１は、例えば、ＣＰＵである。プロセッサ１０１は、ＨＤＤ１０３に記憶されたプログラムおよびデータの少なくとも一部をＲＡＭ１０２にロードし、ロードされたプログラムを実行する。なお、プロセッサ１０１が複数のプロセッサコアを備えてもよいし、スケール制御サーバ１００が複数のプロセッサを備えてもよい。以下で説明する処理を、複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。
【００４５】
ＲＡＭ１０２は、プロセッサ１０１が実行するプログラムや演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、スケール制御サーバ１００は、ＲＡＭ以外の種類のメモリを備えてもよいし、複数個のメモリを備えてもよい。
【００４６】
ＨＤＤ１０３は、ＯＳやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには、仮想化管理プログラムが含まれる。なお、スケール制御サーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよいし、複数の不揮発性の記憶装置を備えてもよい。
【００４７】
画像信号処理部１０４は、プロセッサ１０１からの命令に従って、スケール制御サーバ１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど、任意の種類のディスプレイを用いることができる。
【００４８】
入力信号処理部１０５は、スケール制御サーバ１００に接続された入力デバイス１１２から入力信号を取得し、プロセッサ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、スケール制御サーバ１００に、複数の種類の入力デバイスが接続されていてもよい。
【００４９】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００５０】
媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータを、ＲＡＭ１０２やＨＤＤ１０３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、プロセッサ１０１によって実行される。なお、記録媒体１１３は、可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体１１３やＨＤＤ１０３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００５１】
通信インタフェース１０７は、ネットワーク３２に接続され、ネットワーク３２を介して他のコンピュータと通信を行うインタフェースである。通信インタフェース１０７は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
【００５２】
図４は、コンテナの例を示すブロック図である。
コンテナサーバ２００は、オペレーティングシステム２０１およびコンテナ制御部２０２を有する。また、一例として、コンテナサーバ２００は、コンテナ２１０，２２０を有する。オペレーティングシステム２０１、コンテナ制御部２０２およびコンテナ２１０，２２０は、ＣＰＵが実行するプログラムモジュールを用いて実装できる。コンテナサーバ２００ａも、コンテナサーバ２００と同様の機能を有する。
【００５３】
オペレーティングシステム２０１は、コンテナサーバ２００が有するハードウェアリソースを管理するホストＯＳである。コンテナ制御部２０２は、オペレーティングシステム２０１上で動作するミドルウェアである。コンテナ制御部２０２は、オペレーティングシステム２０１が管理するハードウェアリソースの一部をコンテナ２１０，２２０に割り当てることで、コンテナ制御部２０２上にコンテナ２１０，２２０を形成する。
【００５４】
コンテナ２１０は、ミドルウェア２１１およびアプリケーションインスタンス２１２を有する。コンテナ２２０は、ミドルウェア２２１およびアプリケーションインスタンス２２２を有する。ミドルウェア２１１，２２１は、クライアント４１とのメッセージ送受信機能などの基本的なサーバ機能を提供する。アプリケーションインスタンス２１２，２２２は、ミドルウェア２１１，２２１上で動作するユーザ定義のアプリケーションソフトウェアを起動したもの（プロセスやスレッドなど）である。
【００５５】
アプリケーションインスタンス２１２とアプリケーションインスタンス２２２とは、同じアプリケーションプログラムから起動することができ、クライアント４１からのリクエストに応じて同種の処理を実行する。コンテナ２１０，２２０は、ホストＯＳであるオペレーティングシステム２０１のハードウェアリソースを利用するため、ゲストＯＳを実行しなくてよい。コンテナ２１０，２２０は、同じコンテナイメージから起動できる。
【００５６】
ここで、コンテナ制御部２０２は、コンテナ２１０の処理とコンテナ２２０の処理とを分離し、両者が干渉しないように制御する。例えば、コンテナ制御部２０２は、コンテナ２１０，２２０に異なるプロセスＩＤ名前空間を付与する。これにより、オペレーティングシステム２０１が管理するプロセスのうちコンテナ２１０のプロセスとコンテナ２２０のプロセスとが区別される。また、コンテナ制御部２０２は、コンテナ２１０，２２０に異なるネットワーク名前空間を付与する。これにより、オペレーティングシステム２０１が転送する通信のうちコンテナ２１０の通信とコンテナ２２０の通信とが区別される。
【００５７】
また、コンテナ制御部２０２は、コンテナ２１０，２２０に異なるユーザＩＤ名前空間を付与する。これにより、コンテナ２１０とコンテナ２２０が同じユーザＩＤを使用しても、オペレーティングシステム２０１において両者が区別される。また、コンテナ制御部２０２は、コンテナ２１０，２２０に異なるマウント名前空間を付与する。これにより、オペレーティングシステム２０１が管理するファイルシステムの一部分が、コンテナ２１０のファイルシステムおよびコンテナ２２０のファイルシステムとして区別される。
【００５８】
また、コンテナ制御部２０２は、オペレーティングシステム２０１が管理するプロセスのうち、コンテナ２１０のプロセスの集合（プロセスグループ）およびコンテナ２２０のプロセスグループを特定する。コンテナ制御部２０２は、プロセスグループ毎にハードウェアリソースの使用を一定範囲に制限する。これにより、コンテナ制御部２０２は、コンテナ２１０，２２０にハードウェアリソースを割り当てることができる。
【００５９】
また、コンテナ制御部２０２は、オペレーティングシステム２０１およびコンテナ２１０，２２０の間でパケットを転送する仮想ブリッジ機能を提供する。コンテナ２１０とコンテナ２２０とは、仮想ブリッジを介して通信する。コンテナ２１０，２２０がコンテナサーバ２００の外部と通信する場合、コンテナ２１０，２２０は、仮想ブリッジを介してオペレーティングシステム２０１にパケットを出力し、オペレーティングシステム２０１から仮想ブリッジを介してパケットを取得する。
【００６０】
以上のコンテナ制御部２０２がコンテナ２１０の処理とコンテナ２２０の処理とを分離し、両者が干渉しないようにする制御は、ＯＳの機能を利用して実現することも可能である。
【００６１】
図５は、コンテナのスケールアウトとスケールインの例を示す図である。
あるアプリケーションソフトウェアを実行するコンテナとして、コンテナ２１０，２２０，２３０の３つが起動しているとする。すると、ロードバランサ４３は、クライアント４１から受信する複数のリクエストをコンテナ２１０，２２０，２３０に割り振る。例えば、ロードバランサ４３は、ラウンドロビンにより、複数のリクエストをコンテナ２１０，２２０，２３０に均等に転送する。ロードバランサ４３は、コンテナ２１０，２２０，２３０からレスポンスを受信し、レスポンスをクライアント４１に転送する。
【００６２】
コンテナ２１０，２２０，２３０の負荷が高くなると、スケールアウトによりコンテナ２４０が追加される。すると、ロードバランサ４３は、クライアント４１から受信する複数のリクエストをコンテナ２１０，２２０，２３０，２４０に割り振る。例えば、ロードバランサ４３は、ラウンドロビンにより、複数のリクエストをコンテナ２１０，２２０，２３０，２４０に均等に転送する。ロードバランサ４３は、コンテナ２１０，２２０，２３０，２４０からレスポンスを受信し、レスポンスをクライアント４１に転送する。
【００６３】
一方、コンテナ２１０，２２０，２３０の負荷が低くなると、スケールインによりコンテナ２３０が削除される。すると、ロードバランサ４３は、クライアント４１から受信する複数のリクエストをコンテナ２１０，２２０に割り振る。例えば、ロードバランサ４３は、ラウンドロビンにより、複数のリクエストをコンテナ２１０，２２０に均等に転送する。ロードバランサ４３は、コンテナ２１０，２２０からレスポンスを受信し、レスポンスをクライアント４１に転送する。上記ではコンテナ２３０を削除しているが、スケールインを行う場合には複数のコンテナの中から削除するコンテナを選択することになる。削除するコンテナは、後述するような方法でスケール制御サーバ１００が選択する。
【００６４】
次に、ロードバランサ４３、ストレージサーバ４４、アプリケーション管理サーバ４５、コンテナ管理サーバ４６およびスケール制御サーバ１００が有するデータを説明する。
図６は、アプリケーション設定テーブルの例を示す図である。
【００６５】
アプリケーション設定テーブル１２１は、アプリケーション管理サーバ４５が有する。アプリケーション設定テーブル１２１は、アプリケーションＩＤ、最低インスタンス数、メモリ容量、ディスク容量、ＣＰＵ閾値、メモリ閾値、監視時間１、監視時間２および監視時間３の項目を有する。アプリケーション設定テーブル１２１の１つのレコードは、１つのアプリケーションソフトウェアに対応する。少なくとも一部の項目の値は、コンテナイメージを生成するにあたって管理者端末４２から指定される。
【００６６】
アプリケーションＩＤの項目には、アプリケーションソフトウェアの識別子が登録される。同じアプリケーションソフトウェアが複数のコンテナで実行され得るため、同じアプリケーションＩＤをもつ複数のアプリケーションインスタンスが存在し得る。アプリケーションＩＤは、アプリケーション管理サーバ４５が付与してもよいし、管理者端末４２が指定してもよい。最低インスタンス数の項目には、アプリケーションインスタンス数の下限が登録される。スケールインによっても、アプリケーションインスタンスは最低インスタンス数未満には減少しない。最低インスタンス数は、管理者端末４２から指定される。
【００６７】
メモリ容量の項目には、管理者端末４２が希望するコンテナ１つ当たりのＲＡＭリソース量（ＲＡＭ記憶領域のサイズ）が登録される。ディスク容量の項目には、管理者端末４２が希望するコンテナ１つ当たりのディスクリソース量（ＨＤＤ記憶領域のサイズ）が登録される。コンテナサーバ２００，２００ａが十分なハードウェアリソースを有している場合、このメモリ容量およびディスク容量が各コンテナに割り当てられる。ただし、コンテナサーバ２００，２００ａのハードウェアリソースが不足している場合、この値未満のメモリ容量およびディスク容量が各コンテナに割り当てられることもある。メモリ容量およびディスク容量は、管理者端末４２から指定される。
【００６８】
ＣＰＵ閾値の項目には、スケールアウトを行うか否か判断する基準となるＣＰＵリソースの閾値が登録される。少なくとも１つのコンテナにおいて現在のＣＰＵ使用率がＣＰＵ閾値を超えた場合、スケールアウトが決定される。メモリ閾値の項目には、スケールアウトを行うか否か判断する基準となるＲＡＭリソースの閾値が登録される。少なくとも１つのコンテナにおいて現在のＲＡＭ使用量がメモリ閾値を超えた場合、スケールアウトが決定される。ＣＰＵ閾値およびメモリ閾値は、管理者端末４２から指定される。
【００６９】
監視時間１、監視時間２および監視時間３の項目には、スケールインの際に停止させるコンテナを選択するために用いられる時間閾値が登録される。監視時間１は、あるコンテナをロードバランサ４３がリクエストの振り分け対象から除外してからの経過時間の閾値である。監視時間２は、あるコンテナがストレージサーバ４４のサービスを全く利用していない時間の閾値である。監視時間３は、あるコンテナがストレージサーバ４４に対するポーリング以外のサービスを利用していない時間の閾値である。
【００７０】
監視時間１、監視時間２および監視時間３は、アプリケーション管理サーバ４５が付与してもよいし、管理者端末４２が指定してもよい。例えば、監視時間１のデフォルト値を３０分、監視時間２のデフォルト値を５分、監視時間３のデフォルト値を１０分とする。監視時間１、監視時間２および監視時間３の使用方法の詳細は後述する。
【００７１】
図７は、アプリケーションインスタンステーブルの例を示す図である。
アプリケーションインスタンステーブル１２２は、スケール制御サーバ１００が有する。アプリケーションインスタンステーブル１２２は、アプリケーションＩＤおよびインスタンスＩＤの項目を有する。アプリケーションインスタンステーブル１２２の１つのレコードは、１つのアプリケーションソフトウェアに対応する。
【００７２】
アプリケーションＩＤの項目には、アプリケーション設定テーブル１２１と同様のアプリケーションＩＤが登録される。インスタンスＩＤの項目には、アプリケーションインスタンスの識別子が列挙される。コンテナを追加する毎に、追加されるコンテナに対してアプリケーション管理サーバ４５がインスタンスＩＤを付与する。
【００７３】
図８は、コンテナリソーステーブルの例を示す図である。
コンテナリソーステーブル１２３は、コンテナ管理サーバ４６が有する。コンテナリソーステーブル１２３は、インスタンスＩＤ、時刻、ＣＰＵ使用率、メモリ使用量およびディスク使用量の項目を有する。
【００７４】
インスタンスＩＤの項目には、アプリケーションインスタンステーブル１２２と同様のインスタンスＩＤが登録される。時刻の項目には、ＣＰＵ使用率、メモリ使用量およびディスク使用量が測定された時刻が登録される。コンテナリソーステーブル１２３には、少なくとも直近５秒間のＣＰＵ使用率、メモリ使用量およびディスク使用量が登録される。
【００７５】
ＣＰＵ使用率の項目には、各コンテナの各時刻に測定されたＣＰＵ使用率が登録される。メモリ使用量の項目には、各コンテナの各時刻に測定されたＲＡＭ使用量が登録される。ディスク使用量の項目には、各コンテナの各時刻に測定されたＨＤＤ使用量が登録される。コンテナ管理サーバ４６は、定期的にコンテナサーバ２００，２００ａから、各コンテナのＣＰＵ使用率、メモリ使用量およびディスク使用量を収集する。
【００７６】
図９は、振り分けテーブルと通信ログテーブルの例を示す図である。
振り分けテーブル１２４は、ロードバランサ４３が有する。振り分けテーブル１２４は、アドレス、インスタンスＩＤ、停止フラグおよび停止時刻の項目を有する。
【００７７】
アドレスの項目には、クライアント４１が送信するリクエストの宛先となるアプリケーションソフトウェアのアドレスが登録される。アドレスはリクエストに含まれている。１つのアドレスは１つのアプリケーションソフトウェアに対応する。アドレスは、例えば、ＩＰ（Internet Protocol）アドレスまたはＵＲＬ（Uniform Resource Locator）である。インスタンスＩＤの項目には、アプリケーションインスタンステーブル１２２およびコンテナリソーステーブル１２３と同様のインスタンスＩＤが登録される。
【００７８】
停止フラグの項目には、リクエストの振り分け対象から除外されているか否かを示すフラグが登録される。停止フラグ＝Ｆａｌｓｅは、振り分け対象から除外されていないことを示す。停止フラグ＝Ｔｒｕｅは、振り分け対象から除外されていることを示す。前述のように、生存確認メッセージに対する応答がないコンテナは、ハングアップなどにより異常停止している可能性があるためリクエストの振り分け対象から除外される。停止時刻の項目には、停止フラグがＦａｌｓｅからＴｒｕｅに書き換えられた時刻、すなわち、リクエストの振り分け対象から除外された時刻が登録される。
【００７９】
通信ログテーブル１２５は、ロードバランサ４３が有する。通信ログテーブル１２５は、アドレス、インスタンスＩＤ、通信方向および転送時刻の項目を有する。通信ログテーブル１２５の１つのレコードは、ロードバランサ４３の１回の転送処理に対応する。
【００８０】
アドレスの項目には、転送先または送信元のアプリケーションソフトウェアのアドレスが登録される。インスタンスＩＤの項目には、転送先または送信元のコンテナ（すなわち、アプリケーションインスタンス）のインスタンスＩＤが登録される。通信方向の項目には、ロードバランサ４３が転送したメッセージの種類が登録される。通信方向は、クライアント４１からコンテナサーバ２００，２００ａへのリクエストと、コンテナサーバ２００，２００ａからクライアント４１へのレスポンスとを区別する。転送時刻の項目には、ロードバランサ４３がリクエストまたはレスポンスを転送した時刻が登録される。
【００８１】
図１０は、サービスログテーブルの例を示す図である。
サービスログテーブル１２６は、ストレージサーバ４４が有する。サービスログテーブル１２６は、アプリケーションＩＤ、インスタンスＩＤ、要求種別および要求時刻の項目を有する。サービスログテーブル１２６の１つのレコードは、コンテナサーバ２００，２００ａからストレージサーバ４４への１回の要求に対応する。
【００８２】
アプリケーションＩＤの項目には、要求元のアプリケーションソフトウェアのアプリケーションＩＤが登録される。インスタンスＩＤの項目には、要求元のコンテナ（すなわち、アプリケーションインスタンス）のインスタンスＩＤが登録される。要求種別の項目には、ストレージサーバ４４が受け付けたサービス要求の種別が登録される。要求時刻の項目には、ストレージサーバ４４が要求を受け付けた時刻が登録される。
【００８３】
ここで、サービス要求の種別には、データベース参照、データベース更新、キューポーリング、キュー読み出しおよびキュー書き込みが含まれる。データベース参照の要求に対して、ストレージサーバ４４は、指定された検索条件に該当するデータをデータベースから検索し、検索されたデータベースを返信する。データベース更新の要求に対して、ストレージサーバ４４は、指定されたデータをデータベースに書き込み、書き込みの成否を返信する。キューポーリングの要求に対して、ストレージサーバ４４は、指定されたキューにデータが格納されているか確認し、データの有無を返信する。キュー読み出しの要求に対して、ストレージサーバ４４は、指定されたキューからデータを読み出し、読み出したデータを返信する。キュー書き込みの要求に対して、ストレージサーバ４４は、指定されたデータを指定されたキューに書き込み、書き込みの成否を返信する。
【００８４】
サービス要求の種別によっては、ストレージサーバ４４が要求を受け付けてから応答するまで長時間を要することがある。ストレージサーバ４４に要求を送信したコンテナは、ストレージサーバ４４からの応答を待つことになる。その間、当該コンテナはＣＰＵリソース、ＲＡＭリソースおよびＨＤＤリソースをほとんど追加的に消費しないことがある。また、キューポーリングは、同じコンテナによって定期的に行われることがある。また、複数のコンテナが同じキューを共有することがあり、それら複数のコンテナが同じキューに対して定期的にキューポーリングを行うことがある。
【００８５】
次に、ロードバランサ４３、ストレージサーバ４４、アプリケーション管理サーバ４５、コンテナ管理サーバ４６、スケール制御サーバ１００およびコンテナサーバ２００，２００ａの間の通信の流れについて説明する。以下では、複数のコンテナサーバのうちコンテナサーバ２００にコンテナが配置されるものと仮定する。
【００８６】
図１１は、サーバ間の通信例を示すシーケンス図である。
アプリケーション管理サーバ４５は、管理者端末４２からアプリケーションソフトウェアの起動の要求を受け付ける。この要求には、最低インスタンス数、メモリ容量、ディスク容量、ＣＰＵ閾値およびメモリ閾値が含まれる。この要求には、監視時間１、監視時間２および監視時間３が含まれてもよい。監視時間１、監視時間２および監視時間３が含まれていない場合、アプリケーション管理サーバ４５は、そのデフォルト値を設定する。
【００８７】
アプリケーション管理サーバ４５は、アプリケーションソフトウェアにアプリケーションＩＤを付与する。また、アプリケーション管理サーバ４５は、初回に起動するコンテナの数を決定し、起動する各コンテナ（すなわち、各アプリケーションインスタンス）にインスタンスＩＤを付与する。初回に起動するコンテナの数は、例えば、最低インスタンス数とする。アプリケーション管理サーバ４５は、アプリケーション設定テーブル１２１にレコードを追加する。また、アプリケーション管理サーバ４５は、アプリケーションプログラムを含むコンテナイメージを生成し、コンテナイメージをストレージサーバ４４に保存する（Ｓ１０）。アプリケーションプログラムは、管理者端末４２から指定される。
【００８８】
アプリケーション管理サーバ４５は、コンテナ管理サーバ４６にコンテナ起動を指示する。このとき、アプリケーション管理サーバ４５は、アプリケーションＩＤおよび起動するコンテナのインスタンスＩＤを指定する（Ｓ１１）。コンテナ管理サーバ４６は、指定されたアプリケーションＩＤに対応するコンテナイメージをストレージサーバ４４から取得する（Ｓ１２）。コンテナ管理サーバ４６は、コンテナサーバ２００にコンテナを起動させる。このとき、コンテナ管理サーバ４６は、コンテナイメージをコンテナ管理サーバ４６に送信し、アプリケーションＩＤとインスタンスＩＤを指定する。コンテナサーバ２００のコンテナ制御部２０２は、指定された数のコンテナを起動する（Ｓ１３）。
【００８９】
コンテナ管理サーバ４６は、アプリケーションソフトウェアのアドレスと起動されたコンテナのインスタンスＩＤとを指定して、ロードバランサ４３にアプリケーションインスタンスの登録を指示する。ロードバランサ４３は、振り分けテーブル１２４にアドレスとインスタンスＩＤを登録する（Ｓ１４）。これにより、ロードバランサ４３は、起動されたコンテナに対してリクエストを振り分け始める。
【００９０】
コンテナ管理サーバ４６は、スケール制御サーバ１００にコンテナを起動したことを通知する。このとき、コンテナ管理サーバ４６は、アプリケーションＩＤとインスタンスＩＤを指定する。スケール制御サーバ１００は、アプリケーションインスタンステーブル１２２にアプリケーションＩＤとインスタンスＩＤを登録する（Ｓ１５）。
【００９１】
ロードバランサ４３は、クライアント４１からリクエストを受信する。すると、ロードバランサ４３は、振り分けテーブル１２４を参照して転送先のコンテナを選択し、選択したコンテナにリクエストを転送する（Ｓ１６）。また、ロードバランサ４３は、通信ログテーブル１２５に転送のログを記録する。
【００９２】
コンテナサーバ２００上のコンテナのアプリケーションインスタンスは、リクエストを受信すると、リクエストに応じた処理を実行する。このとき、アプリケーションインスタンスは、ストレージサーバ４４が提供するサービスを利用することがある（Ｓ１７）。アプリケーションインスタンスは、処理結果を含むレスポンスをロードバランサ４３に送信する（Ｓ１８）。ロードバランサ４３は、レスポンスをクライアント４１に転送する。また、ロードバランサ４３は、通信ログテーブル１２５に転送のログを記録する。
【００９３】
スケール制御サーバ１００は、定期的にアプリケーション管理サーバ４５から、アプリケーション設定テーブル１２１に登録された設定情報を取得する（Ｓ１９）。コンテナサーバ２００のコンテナ制御部２０２は、各コンテナのＣＰＵ使用率、メモリ使用量およびディスク使用量を測定する。コンテナ管理サーバ４６は、定期的にコンテナサーバ２００から、各コンテナのＣＰＵ使用率、メモリ使用量およびディスク使用量を示すリソース情報を取得し、コンテナリソーステーブル１２３に登録する（Ｓ２０）。スケール制御サーバ１００は、定期的にコンテナ管理サーバ４６から、コンテナリソーステーブル１２３に登録されたリソース情報を取得する（Ｓ２１）。
【００９４】
スケール制御サーバ１００は、定期的にロードバランサ４３から、振り分けテーブル１２４に登録された振り分け情報を取得する。また、スケール制御サーバ１００は、定期的にロードバランサ４３から、通信ログテーブル１２５に登録された通信ログを取得する（Ｓ２２）。また、スケール制御サーバ１００は、定期的にストレージサーバ４４から、サービスログテーブル１２６に登録されたサービスログを取得する（Ｓ２３）。
【００９５】
図１２は、サーバ間の通信例を示すシーケンス図（続き）である。
スケール制御サーバ１００は、ステップＳ１９，Ｓ２１〜Ｓ２３で収集した情報に基づいて、各アプリケーションソフトウェアのスケールアウトの要否を判定する。スケール制御サーバ１００は、少なくとも１つのコンテナのＣＰＵ使用率がＣＰＵ閾値を超えているか、少なくとも１つのコンテナのメモリ使用量がメモリ閾値を超えているアプリケーションソフトウェアを、スケールアウトすべきと判定する。また、スケール制御サーバ１００は、ステップＳ１９，Ｓ２１〜Ｓ２３で収集した情報に基づいて、各アプリケーションソフトウェアのスケールインの要否を判定する。スケールインの場合、スケール制御サーバ１００は、停止するコンテナを選択する。スケールインの判定方法は後述する。
【００９６】
スケールアウトを決定した場合、スケール制御サーバ１００は、スケールアウトをアプリケーション管理サーバ４５に通知する（Ｓ２４）。このとき、スケール制御サーバ１００は、スケールアウトするアプリケーションソフトウェアのアプリケーションＩＤを指定する。アプリケーション管理サーバ４５は、追加するコンテナにインスタンスＩＤを付与する。アプリケーション管理サーバ４５は、コンテナ追加をコンテナ管理サーバ４６に指示する（Ｓ２５）。このとき、アプリケーション管理サーバ４５は、アプリケーションＩＤおよび追加するコンテナのインスタンスＩＤを指定する。
【００９７】
コンテナ管理サーバ４６は、指定されたアプリケーションＩＤに対応するコンテナイメージをストレージサーバ４４から取得する（Ｓ２６）。コンテナ管理サーバ４６は、コンテナサーバ２００にコンテナを起動させる（Ｓ２７）。このとき、コンテナ管理サーバ４６は、コンテナイメージをコンテナ管理サーバ４６に送信し、アプリケーションＩＤとインスタンスＩＤを指定する。コンテナ管理サーバ４６は、アプリケーションソフトウェアのアドレスと追加されたコンテナのインスタンスＩＤとを指定して、ロードバランサ４３にアプリケーションインスタンスの登録を指示する（Ｓ２８）。これにより、ロードバランサ４３は、追加されたコンテナに対してリクエストを振り分け始める。
【００９８】
コンテナ管理サーバ４６は、スケール制御サーバ１００にコンテナを起動したことを通知する。このとき、コンテナ管理サーバ４６は、アプリケーションＩＤとインスタンスＩＤを指定する。スケール制御サーバ１００は、アプリケーションＩＤと対応付けてインスタンスＩＤをアプリケーションインスタンステーブル１２２に追加する（Ｓ２９）。
【００９９】
一方、スケールインを決定した場合、スケール制御サーバ１００は、スケールインをアプリケーション管理サーバ４５に通知する（Ｓ３０）。このとき、スケール制御サーバ１００は、スケールアウトするアプリケーションソフトウェアのアプリケーションＩＤと停止させるコンテナのインスタンスＩＤを指定する。アプリケーション管理サーバ４５は、コンテナ削除をコンテナ管理サーバ４６に指示する（Ｓ３１）。このとき、アプリケーション管理サーバ４５は、アプリケーションＩＤおよびインスタンスＩＤを指定する。
【０１００】
コンテナ管理サーバ４６は、アプリケーションソフトウェアのアドレスと停止するコンテナのインスタンスＩＤとを指定して、ロードバランサ４３にアプリケーションインスタンスの抹消を指示する（Ｓ３２）。ロードバランサ４３は、指定されたインスタンスＩＤを振り分けテーブル１２４から削除する。これにより、ロードバランサ４３は、停止するコンテナに対してリクエストを振り分けないようにする。コンテナ管理サーバ４６は、アプリケーションＩＤとインスタンスＩＤを指定し、コンテナサーバ２００にコンテナを停止させる（Ｓ３３）。コンテナサーバ２００のコンテナ制御部２０２は、指定されたコンテナのアプリケーションインスタンスを強制停止させ、当該コンテナに割り当てられていたハードウェアリソースを解放する。
【０１０１】
次に、スケール制御サーバの処理について説明する。
図１３は、スケール制御サーバの機能例を示すブロック図である。
スケール制御サーバ１００は、インスタンス情報記憶部１３１、設定情報記憶部１３２、リソース情報記憶部１３３、振り分け情報記憶部１３４、通信ログ記憶部１３５およびサービスログ記憶部１３６を有する。また、スケール制御サーバ１００は、情報収集部１４１、インスタンス情報管理部１４２、スケール判定部１４３およびスケール変更通知部１４４を有する。インスタンス情報記憶部１３１、設定情報記憶部１３２、リソース情報記憶部１３３、振り分け情報記憶部１３４、通信ログ記憶部１３５およびサービスログ記憶部１３６は、例えば、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域を用いて実装される。情報収集部１４１、インスタンス情報管理部１４２、スケール判定部１４３およびスケール変更通知部１４４は、例えば、ＣＰＵ１０１が実行するプログラムモジュールを用いて実装される。
【０１０２】
インスタンス情報記憶部１３１は、アプリケーションインスタンステーブル１２２、すなわち、インスタンス情報を記憶する。設定情報記憶部１３２は、アプリケーション設定テーブル１２１と同様のテーブル、すなわち、収集された設定情報を記憶する。リソース情報記憶部１３３は、コンテナリソーステーブル１２３と同様のテーブル、すなわち、収集されたリソース情報を記憶する。振り分け情報記憶部１３４は、振り分けテーブル１２４と同様のテーブル、すなわち、収集された振り分け情報を記憶する。通信ログ記憶部１３５は、通信ログテーブル１２５と同様のテーブル、すなわち、収集された通信ログを記憶する。サービスログ記憶部１３６は、サービスログテーブル１２６と同様のテーブル、すなわち、収集されたサービスログを記憶する。
【０１０３】
情報収集部１４１は、ロードバランサ４３、ストレージサーバ４４、アプリケーション管理サーバ４５およびコンテナ管理サーバ４６から、定期的に各種の情報を収集する。情報収集部１４１は、アプリケーション管理サーバ４５から設定情報を取得し、取得した設定情報を設定情報記憶部１３２に保存する。情報収集部１４１は、コンテナ管理サーバ４６からリソース情報を取得し、取得したリソース情報をリソース情報記憶部１３３に保存する。情報収集部１４１は、ロードバランサ４３から振り分け情報および通信ログを取得し、取得した振り分け情報を振り分け情報記憶部１３４に保存し、取得した通信ログを通信ログ記憶部１３５に保存する。情報収集部１４１は、ストレージサーバ４４からサービスログを取得し、取得したサービスログをサービスログ記憶部１３６に保存する。
【０１０４】
インスタンス情報管理部１４２は、インスタンス情報記憶部１３１に記憶されたアプリケーションインスタンステーブル１２２を管理する。インスタンス情報管理部１４２は、コンテナ管理サーバ４６からコンテナの起動が通知されたとき、指定されたアプリケーションＩＤやインスタンスＩＤをアプリケーションインスタンステーブル１２２に登録する。また、インスタンス情報管理部１４２は、スケール判定部１４３がスケールイン対象のコンテナを選択したとき、選択されたコンテナのインスタンスＩＤをアプリケーションインスタンステーブル１２２から削除する。
【０１０５】
スケール判定部１４３は、定期的に各アプリケーションソフトウェアのスケールアウトの要否およびスケールインの要否を判定する。スケールインの場合、スケール判定部１４３は、コンテナサーバ２００，２００ａに配置されたコンテナの中から停止するコンテナを選択する。スケール判定部１４３は、インスタンス情報記憶部１３１、設定情報記憶部１３２、リソース情報記憶部１３３、振り分け情報記憶部１３４、通信ログ記憶部１３５およびサービスログ記憶部１３６に記憶された情報を参照する。
【０１０６】
スケール変更通知部１４４は、スケール変更をアプリケーション管理サーバ４５に通知する。スケール判定部１４３がスケールアウトを決定した場合、対象のアプリケーションソフトウェアのアプリケーションＩＤをアプリケーション管理サーバ４５に通知する。また、スケール変更通知部１４４は、スケール判定部１４３がスケールインを決定したとき、対象のアプリケーションソフトウェアのアプリケーションＩＤおよび停止するコンテナのインスタンスＩＤをアプリケーション管理サーバ４５に通知する。
【０１０７】
次に、スケールインの判定について説明する。
図１４は、スケールイン判定の手順例を示すフローチャートである。
（Ｓ４０）スケール判定部１４３は、アプリケーションソフトウェアを１つ選択する。
【０１０８】
（Ｓ４１）スケール判定部１４３は、アプリケーションインスタンステーブル１２２を参照して、ステップＳ４０で選択したアプリケーションソフトウェアに対応するアプリケーションインスタンスの数（すなわち、コンテナの数）を算出する。
【０１０９】
（Ｓ４２）スケール判定部１４３は、ステップＳ４１で算出したインスタンス数が、設定情報に含まれる最低インスタンス数より大きいか判断する。インスタンス数が最低インスタンス数より大きい場合、ステップＳ４３に処理が進む。インスタンス数が最低インスタンス数以下である場合、ステップＳ４０で選択したアプリケーションソフトウェアはスケールイン不要と判定され、ステップＳ６０に処理が進む。
【０１１０】
（Ｓ４３）スケール判定部１４３は、振り分け情報を参照して、ステップＳ４０で選択したアプリケーションソフトウェアに対応するアプリケーションインスタンスの中に、振り分け対象から外れているものがあるか判断する。振り分け対象外のアプリケーションインスタンスがある場合はステップＳ４４に処理が進み、振り分け対象外のアプリケーションインスタンスがない場合はステップＳ４７に処理が進む。
【０１１１】
（Ｓ４４）スケール判定部１４３は、振り分け情報から振り分け対象外のアプリケーションインスタンスの停止時刻を抽出し、停止時刻から現在までの経過時間を算出する。
（Ｓ４５）スケール判定部１４３は、ステップＳ４４で算出した経過時間が、設定情報に含まれる監視時間１を超えているか判断する。監視時間１は、例えば、３０分程度である。経過時間が監視時間１を超えている場合はステップＳ４６に処理が進み、経過時間が監視時間１以下である場合はステップＳ４７に処理が進む。
【０１１２】
（Ｓ４６）スケール判定部１４３は、ステップＳ４０で選択したアプリケーションソフトウェアについてスケールインを行うことを決定する。また、スケール判定部１４３は、停止対象のアプリケーションインスタンスとして、ステップＳ４３，Ｓ４５に該当するアプリケーションインスタンスを選択する。ステップＳ４３，Ｓ４５に該当するアプリケーションインスタンスが２以上ある場合、スケール判定部１４３は、その全てを停止対象として選択してよい。そして、ステップＳ６０に処理が進む。
【０１１３】
（Ｓ４７）スケール判定部１４３は、通信ログから、振り分け対象になっているアプリケーションインスタンスのうち、リクエストを受信しているが現時点でレスポンスをまだ返信していない未応答のアプリケーションインスタンスを検索する。
【０１１４】
（Ｓ４８）スケール判定部１４３は、振り分け対象になっているアプリケーションインスタンスの全てが、未応答のアプリケーションインスタンスであるか判断する。全てのアプリケーションインスタンスが未応答である場合、ステップＳ４０で選択したアプリケーションソフトウェアはスケールイン不可と判定され、ステップＳ６０に処理が進む。未応答でないアプリケーションインスタンスがある場合、ステップＳ４９に処理が進む。
【０１１５】
（Ｓ４９）スケール判定部１４３は、振り分け対象になっているアプリケーションインスタンスのうち未応答のものを、停止対象の候補から除外する。
図１５は、スケールイン判定の手順例を示すフローチャート（続き）である。
【０１１６】
（Ｓ５０）スケール判定部１４３は、候補のアプリケーションインスタンスそれぞれについて、リソース情報を参照してＣＰＵ使用率、メモリ使用量およびディスク使用量の変化を算出する。例えば、スケール判定部１４３は、直近５秒間のＣＰＵ使用率から、その最大値と最小値の差をＣＰＵ使用率の変化量として算出する。また、スケール判定部１４３は、直近５秒間のメモリ使用量から、その最大値と最小値の差をメモリ使用量の変化量として算出する。また、スケール判定部１４３は、直近５秒間のディスク使用量から、その最大値と最小値の差をディスク使用量の変化量として算出する。
【０１１７】
（Ｓ５１）スケール判定部１４３は、候補のアプリケーションインスタンスの中に、メモリ使用量の変化が十分に小さくかつディスク使用量の変化が十分に小さいアプリケーションインスタンスがあるか判断する。メモリ使用量の変化が十分に小さいとは、例えば、その変化量が閾値（例えば、割り当てられたＲＡＭリソースの５％程度）より小さいことである。ディスク使用量の変化が十分に小さいとは、例えば、その変化量が閾値（例えば、割り当てられたＨＤＤリソースの５％程度）より小さいことである。該当するアプリケーションインスタンスがある場合、ステップＳ５２に処理が進む。該当するアプリケーションインスタンスがない場合、ステップＳ４０で選択したアプリケーションソフトウェアはスケールイン不可と判定され、ステップＳ６０に処理が進む。
【０１１８】
（Ｓ５２）スケール判定部１４３は、ステップＳ５１に該当するアプリケーションインスタンスの中に、ＣＰＵ使用率の変化が十分に小さいアプリケーションインスタンスがあるか判断する。ＣＰＵ使用率の変化が十分に小さいとは、例えば、その変化量が閾値（例えば、割り当てられたＣＰＵリソースの５％程度）より小さいことである。該当するアプリケーションインスタンスがある場合はステップＳ５３に処理が進み、該当するアプリケーションインスタンスがない場合はステップＳ５６に処理が進む。
【０１１９】
（Ｓ５３）スケール判定部１４３は、サービスログから、ステップＳ５１，Ｓ５２に該当するアプリケーションインスタンスからのサービス要求であって、直近の「監視時間２」のものを検索する。監視時間２は設定情報に含まれており、例えば、５分程度である。
【０１２０】
（Ｓ５４）スケール判定部１４３は、ステップＳ５３で１以上のサービス要求が検索されたか、すなわち、ステップＳ５１，Ｓ５２に該当するアプリケーションインスタンスがサービスを最近利用しているか判断する。サービスの利用がある場合、ステップＳ４０で選択したアプリケーションソフトウェアはスケールイン不可と判定され、ステップＳ６０に処理が進む。サービスの利用がない場合、ステップＳ５５に処理が進む。
【０１２１】
（Ｓ５５）スケール判定部１４３は、ステップＳ４０で選択したアプリケーションソフトウェアについてスケールインを行うことを決定する。また、スケール判定部１４３は、停止対象のアプリケーションインスタンスとして、ステップＳ５１，Ｓ５２に該当し、かつ、サービスの利用がないアプリケーションインスタンスを選択する。該当するアプリケーションインスタンスが２以上ある場合、スケール判定部１４３は、そのうちの１つまたは所定数を停止対象として選択する。１回のスケールインで減少させるアプリケーションインスタンス数の上限は、予め固定しておいてもよいし、アプリケーションソフトウェア毎に設定情報に登録しておいてもよい。そして、ステップＳ６０に処理が進む。
【０１２２】
（Ｓ５６）スケール判定部１４３は、サービスログから、ステップＳ５１に該当するアプリケーションインスタンスからのサービス要求であって、直近の「監視時間３」のものを検索する。監視時間３は設定情報に含まれており、例えば、１０分程度である。
【０１２３】
（Ｓ５７）スケール判定部１４３は、ステップＳ５１に該当するアプリケーションインスタンスがサービスを最近利用していないか、または、サービス利用がキューポーリングのみであるか判断する。キューポーリング以外のサービス利用がある場合、ステップＳ４０で選択したアプリケーションソフトウェアはスケールイン不可と判定され、ステップＳ６０に処理が進む。サービス利用が全く無いかまたはキューポーリングのみである場合、ステップＳ５８に処理が進む。なお、定期的なデータベース参照を、キューポーリングと同等の処理であると判定するようにしてもよい。
【０１２４】
（Ｓ５８）スケール判定部１４３は、サービスログから、ステップＳ５１，Ｓ５７に該当する停止対象の候補以外のアプリケーションインスタンスからのキューポーリングであって、直近の「監視時間３」のものを検索する。スケール判定部１４３は、キューポーリングを行う他のアプリケーションインスタンスが存在するか判断する。他のアプリケーションインスタンスが存在する場合、ステップＳ５９に処理が進む。他のアプリケーションインスタンスが存在しない場合、ステップＳ４０で選択したアプリケーションソフトウェアはスケールイン不可と判定され、ステップＳ６０に処理が進む。
【０１２５】
（Ｓ５９）スケール判定部１４３は、ステップＳ４０で選択したアプリケーションソフトウェアについてスケールインを行うことを決定する。また、スケール判定部１４３は、停止対象のアプリケーションインスタンスとして、ステップＳ５１，Ｓ５７，Ｓ５８に該当するアプリケーションインスタンスを選択する。該当するアプリケーションインスタンスが２以上ある場合、スケール判定部１４３は、そのうちの１つまたは所定数を停止対象として選択する。そして、ステップＳ６０に処理が進む。
【０１２６】
（Ｓ６０）スケール判定部１４３は、ステップＳ４０において全てのアプリケーションソフトウェアを選択したか判断する。全て選択した場合はスケールイン判定が終了し、未選択のものがある場合はステップＳ４０に処理が進む。
【０１２７】
なお、ステップＳ５４のサービス利用の有無を判定する期間（監視時間２）は、ステップＳ５７のサービス利用の有無を判定する期間（監視時間３）よりも短いことが好ましい。ＣＰＵ使用率とメモリ使用量とディスク使用量の全てが５秒以上変化していないアプリケーションインスタンスは、リクエストを全く受信していないかまたはストレージサーバ４４からの応答を待っている状態であると推測される。長時間にわたって応答待ち状態になる可能性は低いため、監視時間２は比較的短い時間でよい。
【０１２８】
一方、ＣＰＵ使用率は変化しているがメモリ使用量とディスク使用量が５秒以上変化していないアプリケーションインスタンスは、キューポーリングのみ行っている状態であると推測される。キューには外部からデータが到着する可能性があるため、処理の安全性の観点から監視時間３をやや長い時間に設定することが好ましい。また、キューポーリングのみ行っているアプリケーションインスタンスは、同様にキューポーリングを行っている他のアプリケーションインスタンスが存在する場合のみ停止可能と判断される。これにより、キューに到着したデータが処理されず残ってしまうリスクを低減できる。
【０１２９】
また、ステップＳ５７のサービス利用の有無を判定する期間（監視時間３）は、サービスの種類に応じて変更するようにしてもよい。例えば、参照系のサービスについては監視時間３を比較的短く設定し、更新系のサービスについては監視時間３を比較的長く設定することが考えられる。これは、参照系のサービスを利用するアプリケーションインスタンスが突然停止しても、データの完全性が損なわれるリスクは小さいためである。一方、更新系のサービスを利用するアプリケーションインスタンスが処理中に突然停止すると、データの完全性が損なわれてしまうリスクがあるためである。
【０１３０】
第２の実施の形態の情報処理システムによれば、同じアプリケーションソフトウェアを実行する複数のコンテナそれぞれについて、スケールインの際に停止可能か判定される。ＣＰＵ使用率とメモリ使用量とディスク使用量が５秒以上ほぼ変化しておらず、かつ、ストレージサーバ４４のサービスを５分以上利用していないコンテナは、停止可能と判定される。また、メモリ使用量とディスク使用量が５秒以上ほぼ変化しておらず、かつ、キューポーリング以外のサービスを５分以上利用していないコンテナは、停止可能と判定される。それ以外のコンテナについては、停止不可と判定される。
【０１３１】
これにより、未完了の処理のステートを有しているコンテナを停止させてしまうリスクを低減できる。また、未完了の処理のステートを有していないコンテナを迅速に停止させることができる。よって、停止させるコンテナを適切に選択することができる。
【０１３２】
停止させるコンテナを選択する方法としては、ＣＰＵ使用率とメモリ使用量とディスク使用量の何れも変化していないコンテナを選択する方法も考えられる。しかし、この方法では、外部サービスからの応答を待っているコンテナを誤って停止させてしまうリスクがある。また、この方法では、未完了の処理のステートを有していないものの、定期的にキューポーリングを行っているためにＣＰＵ使用率が変化しているコンテナを停止できない可能性がある。これに対し、第２の実施の形態によれば、各コンテナが未完了の処理のステートを有しているか否か精度よく推定することができる。
【０１３３】
上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１３４】
１０  仮想化管理装置
１１  記憶部
１２  制御部
１３  リソース情報
１４  サービス情報
１５  第１の状態
１６  第２の状態
２１，２２  仮想実行単位
２１ａ，２２ａ  プロセッサリソース
２１ｂ，２２ｂ  他のリソース
２３  サービス
【図１】
0006631710.tif 000002
【図２】
0006631710.tif 000003
【図３】
0006631710.tif 000004
【図４】
0006631710.tif 000005
【図５】
0006631710.tif 000006
【図６】
0006631710.tif 000007
【図７】
0006631710.tif 000008
【図８】
0006631710.tif 000009
【図９】
0006631710.tif 000010
【図１０】
0006631710.tif 000011
【図１１】
0006631710.tif 000012
【図１２】
0006631710.tif 000013
【図１３】
0006631710.tif 000014
【図１４】
0006631710.tif 000015
【図１５】
0006631710.tif 000016