(57)【要約】【課題】仮想マシン群の状態のみに基づいて仮想マシン群のオートスケーリングを行う方式と比べて、仮想マシン上で稼働中のコンテナが強制終了されてしまう事態を生じにくくする。【解決手段】仮想マシン１０２は、起動時等に、仮想マシンオートスケーリング管理装置２０によるスケールインに対する保護状態が設定される。保護状態が設定されている間は、仮想マシン１０２は仮想マシンオートスケーリング管理装置２０により終了されることはないので、その上で稼働中のコンテナ１１０の強制終了も起こらない。仮想マシン１０２は保護制御部１２０を実行している。保護制御部１２０のコンテナ情報取得部１２２は、自機（すなわち当該保護制御部１２０を実行している仮想マシン１０２）上でコンテナ１１０が稼働中であるかどうかを調べる。自機上でコンテナ１１０が１つも稼働していない場合、マシン状態更新部１２６が、自機の保護状態を解除する。【選択図】図１
2018163389.tif 000002
【特許請求の範囲】
【請求項１】
１以上の仮想マシンと、
前記仮想マシン上で稼働するコンテナのオートスケール処理を行うコンテナスケール装置と、
仮想マシンのオートスケール処理を行う仮想マシンスケール装置であって、スケールインを行う場合に前記１以上の仮想マシンのうちスケールインに対する保護状態が解除されている仮想マシンを停止させる仮想マシンスケール装置と、
を含み、
前記仮想マシンは、
自機上で１以上のコンテナが稼働中である場合に、前記仮想マシンスケール装置によるスケールインに対して自機を保護状態とする制御を行う制御手段、
を含む、情報処理システム。
【請求項２】
自機上で１以上のコンテナが稼働中である場合に、仮想マシンスケール装置によるスケールインに対して自機を保護状態とする制御を行う制御手段、を含む仮想マシン。
【請求項３】
前記制御手段は、自機上で稼働中のコンテナがない場合に、仮想マシンスケール装置によるスケールインに対する自機の前記保護状態を解除する、請求項２に記載の仮想マシン。
【請求項４】
前記制御手段は、自機上で稼働中のコンテナがない状態の継続時間が閾値に達するまでは前記保護状態を解除しない、請求項３に記載の仮想マシン。
【請求項５】
前記仮想マシン上で稼働可能なコンテナには、保護対象のコンテナと保護対象でないコンテナとがあり、
前記制御手段は、保護対象でないコンテナが自機で稼働しているか否かは、自機を前記保護状態の解除の制御に反映させない、請求項２〜４のいずれか１項に記載の仮想マシン。
【請求項６】
前記制御手段は、自機上で稼働中のコンテナがない場合であっても、前記仮想マシンを含む稼働中の仮想マシンの数が必要な仮想マシンの数以上である場合には、前記保護状態を解除しない、請求項２〜５のいずれか１項に記載の仮想マシン。
【請求項７】
前記制御手段は、自機上で稼働中のコンテナがない場合、前記保護状態を解除する前に、新たに起動されるコンテナのホストマシンの候補から自機を除外する処理を実行する、請求項２〜６のいずれか１項に記載の仮想マシン。
【請求項８】
前記制御手段は、自機上でコンテナが起動していても、そのコンテナが所定のプログラムを実行していない場合には、そのコンテナは稼働中でないものとして取り扱う、請求項２〜７のいずれか１項に記載の仮想マシン。
【請求項９】
前記制御手段は、自機上でコンテナが起動していても、そのコンテナが実行する処理が所定段階まで進捗した以降は、そのコンテナは稼働中でないものとして取り扱う、請求項２〜８のいずれか１項に記載の仮想マシン。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム及び仮想マシンに関する。
【背景技術】
【０００２】
コンピュータの仮想化方式として広く用いられているハイパーバイザ型仮想化では、物理的なマシンのＯＳ（ホストＯＳ。ＯＳはオペレーティングシステムのこと）上に個々の仮想マシンを構成し、それら個々の仮想マシン上でそれぞれ独立したゲストＯＳ環境を実行する。
【０００３】
一方、近年普及が進んでいるコンテナ型仮想化では、ホストＯＳ上に、個々のユーザ向けのアプリケーション動作環境を個別に構築することで、ユーザ毎のリソースの分離を実現している。コンテナ型仮想化は、ユーザが個別にゲストＯＳを実行しなくてよい分だけ、ハイパーバイザ型仮想化よりも効率的である。
【０００４】
ハイパーバイザ型仮想化方式のシステムでは、負荷状況に応じて仮想マシンの追加や削除を自動的に行うオートスケーリングが行われる（例えば特許文献１）。またコンテナ型のシステムでも、負荷状況に応じたコンテナのオートスケーリングが行われる。
【０００５】
更に近年、ハイパーバイザ型とコンテナ型を組み合わせたハイブリッド方式も提案されている。ハイブリッド方式のシステムでは、仮想マシン上にコンテナを構築する。例えば特許文献２には、そのようなハイブリッド方式が例示されている。
【０００６】
ハイブリッド方式の従来システムでは、仮想マシンレベルのオートスケーリングとコンテナレベルのオートスケーリングとが互いに独立に行われている。すなわち、従来は、仮想マシン群の負荷状況等の状態に応じて仮想マシン群のオートスケーリングが行われ、コンテナ群の負荷状況等の状態に応じてコンテナ群のオートスケーリングが行われていた。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１７−４１１８５号公報
【特許文献２】特開２０１６−１８１１８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
仮想マシン上にコンテナを稼働させるシステムにおいて、オートスケーリングにより仮想マシンを停止させると、その仮想マシン上でコンテナが稼働していた場合、そのコンテナが強制終了されてしまう。コンテナが強制終了すると、コンテナ上で動作していたアプリケーションシステムに不具合が生じたりそのシステムが管理するデータに不整合が生じたりする等の問題が起こるおそれがある。
【０００９】
本発明は、仮想マシン群の状態のみに基づいて仮想マシン群のオートスケーリングを行う方式と比べて、仮想マシン上で稼働中のコンテナが強制終了されてしまう事態が生じにくい仕組みを提供することを目的とする。
【課題を解決するための手段】
【００１０】
請求項１に係る発明は、１以上の仮想マシンと、前記仮想マシン上で稼働するコンテナのオートスケール処理を行うコンテナスケール装置と、仮想マシンのオートスケール処理を行う仮想マシンスケール装置であって、スケールインを行う場合に前記１以上の仮想マシンのうちスケールインに対する保護状態が解除されている仮想マシンを停止させる仮想マシンスケール装置と、を含み、前記仮想マシンは、自機上で１以上のコンテナが稼働中である場合に、前記仮想マシンスケール装置によるスケールインに対して自機を保護状態とする制御を行う制御手段、を含む、情報処理システムである。
【００１１】
請求項２に係る発明は、自機上で１以上のコンテナが稼働中である場合に、仮想マシンスケール装置によるスケールインに対して自機を保護状態とする制御を行う制御手段、を含む仮想マシンである。
【００１２】
請求項３に係る発明は、前記制御手段は、自機上で稼働中のコンテナがない場合に、仮想マシンスケール装置によるスケールインに対する自機の前記保護状態を解除する、請求項２に記載の仮想マシンである。
【００１３】
請求項４に係る発明は、前記制御手段は、自機上で稼働中のコンテナがない状態の継続時間が閾値に達するまでは前記保護状態を解除しない、請求項３に記載の仮想マシンである。
【００１４】
請求項５に係る発明は、前記仮想マシン上で稼働可能なコンテナには、保護対象のコンテナと保護対象でないコンテナとがあり、前記制御手段は、保護対象でないコンテナが自機で稼働しているか否かは、自機を前記保護状態の解除の制御に反映させない、請求項２〜４のいずれか１項に記載の仮想マシンである。
【００１５】
請求項６に係る発明は、前記制御手段は、自機上で稼働中のコンテナがない場合であっても、前記仮想マシンを含む稼働中の仮想マシンの数が必要な仮想マシンの数以上である場合には、前記保護状態を解除しない、請求項２〜５のいずれか１項に記載の仮想マシンである。
【００１６】
請求項７に係る発明は、前記制御手段は、自機上で稼働中のコンテナがない場合、前記保護状態を解除する前に、新たに起動されるコンテナのホストマシンの候補から自機を除外する処理を実行する、請求項２〜６のいずれか１項に記載の仮想マシンである。
【００１７】
請求項８に係る発明は、前記制御手段は、自機上でコンテナが起動していても、そのコンテナが所定のプログラムを実行していない場合には、そのコンテナは稼働中でないものとして取り扱う、請求項２〜７のいずれか１項に記載の仮想マシンである。
【００１８】
請求項９に係る発明は、前記制御手段は、自機上でコンテナが起動していても、そのコンテナが実行する処理が所定段階まで進捗した以降は、そのコンテナは稼働中でないものとして取り扱う、請求項２〜８のいずれか１項に記載の仮想マシンである。
【発明の効果】
【００１９】
請求項１または２に係る発明によれば、仮想マシン群の状態のみに基づいて仮想マシン群のオートスケーリングを行う方式と比べて、仮想マシン上で稼働中のコンテナが強制終了されてしまう事態が生じにくくすることができる。
【００２０】
請求項３に係る発明によれば、自機上でコンテナの強制終了が生じない場合に、自機をスケールインの際に終了させる候補とすることができる。
【００２１】
請求項４に係る発明によれば、自機上で稼働中のコンテナがなくなってすぐに自機の保護状態を解除する場合と比べて、自機に対応するコンテナが新たに起動される際に自機（仮想マシン）を起動し直す必要が少なくなる。
【００２２】
請求項５に係る発明によれば、どんなコンテナでも稼働中であれば自機の保護状態を解除しない方式と比べて、保護対象のコンテナが強制終了されにくくしつつも、自機をスケールインの候補にしやすくすることができる。
【００２３】
請求項６に係る発明によれば、スケールインの必要がある場合にのみ、保護状態を解除することができる。
【００２４】
請求項７に係る発明によれば、自機の保護状態を解除するまでの間に新たなコンテナが自機上で起動される可能性を減らすことができる。
【００２５】
請求項８又は９に係る発明によれば、コンテナが起動していれば自機の保護状態を解除しない方式と比べて、自機をスケールインの候補にしやすくすることができる。
【図面の簡単な説明】
【００２６】
【図１】実施形態のシステム構成の一例を示す図である。
【図２】保護制御部の処理手順の一例を示す図である。
【図３】仮想マシンオートスケーリング管理装置の処理手順の一例を示す図である。
【発明を実施するための形態】
【００２７】
図１を参照して、実施形態のクラウドサービスシステムの一例を説明する。
【００２８】
図１のクラウドサービスシステムは、複数のコンピュータシステム１０Ａ、１０Ｂ、・・・と、仮想マシンオートスケーリング管理装置２０と、コンテナオートスケーリング管理装置３０と、を含む。
【００２９】
コンピュータシステム１０Ａ、１０Ｂ、・・・（以下区別の必要がない場合はコンピュータシステム１０と総称する）は、１以上の物理的な（すなわちハードウエアの）コンピュータからなるシステムである。個々のコンピュータは、１以上のＣＰＵ（中央演算装置）、メモリ（一次記憶装置）、二次記憶装置等のハードウエアリソースを備えている。このコンピュータシステム１０のＯＳ上でハイパーバイザ型仮想化の仮想マシン１０２ａ、１０２ｂ、１０２ｃ、・・・（以下区別の必要がない場合は仮想マシン１０２と総称する）が稼働する。
【００３０】
個々の仮想マシン１０２上には、コンテナ型仮想化のコンテナ１１０Ａ、１１０Ｂ、・・・（以下区別の必要がない場合はコンテナ１１０と総称する）が稼働しており、コンテナ１１０内でアプリケーションが実行される。図には、サービス（アプリケーション）ＡのためのコンテナＡ（１１０Ａ）と、サービスＢのためのコンテナＢ（１１０Ｂ）という２種類のコンテナ１１０を例示しているが、これら以外の種類のコンテナ１１０があってももちろんよい。図示のように、同じ種類のコンテナ１１０を１つの仮想マシン１０２上で複数稼働させること（コンテナＡがその例）も、複数の仮想マシン１０２上で複数稼働させること（コンテナＢがその例）も可能である。図示例では、コンテナＡをホストするための仮想マシンのグループであるコンテナＡ用仮想マシン群１００Ａには１つの仮想マシン１０２ａが含まれ、コンテナＢをホストするコンテナＢ用仮想マシン群１００Ｂには２つの仮想マシン１０２ｂ及び１０２ｃが含まれる。なお、図示例では１つの仮想マシン１０２上で１種類のコンテナ１１０が稼働しているが、１つの仮想マシン１０２上で複数種類のコンテナ１１０が同時に稼働するような運用形態も可能である。この場合、複数種類のコンテナ１１０が混在して稼働している仮想マシン１０２は、それら複数のコンテナ種類のそれぞれに対応する仮想マシン群１００（１００Ａと１００Ｂの総称）に属する。なお、図では、わかりやすさのために、コンテナＡ用仮想マシン群１００Ａをホストするコンピュータシステム１０Ａと、コンテナＢ用仮想マシン群１００Ｂをホストするコンピュータシステム１０Ｂとを区別して図示したが、コンピュータシステム１０がこのように明確に区別されている必要はない。
【００３１】
仮想マシン１０２は、コンテナ１１０の他に、保護制御部１２０のプログラムを実行する。保護制御部１２０については、後で説明する。
【００３２】
仮想マシンオートスケーリング管理装置２０は、仮想マシンレベルのオートスケーリングを行う。この仮想マシンレベルのオートスケーリングでは、仮想マシン群の負荷上昇等に応じてスケールアウト（仮想マシンの台数を増やすこと）し、負荷減少等に応じてスケールイン（仮想マシンの台数を減らすこと）する。
【００３３】
ここで、仮想マシン１０２はスケールインに対して保護状態とすることができ、保護状態に設定された仮想マシン１０２は、オートスケーリングにおけるスケールインの際の削除対象から外される。すなわち、スケールインを行う場合、仮想マシンオートスケーリング管理装置２０は、スケールインに対して保護状態でない（すなわち非保護状態である）仮想マシンの中から所定（あらかじめ定められた）基準で選んだ１以上の仮想マシンを終了させ、削除する。
【００３４】
コンテナオートスケーリング管理装置３０は、コンテナレベルでのオートスケーリングを行う。例えば、コンテナＡのアプリケーションについての負荷が上昇すれば、コンテナＡをスケールアウト（すなわち新たなコンテナＡを起動する）し、その負荷が下降すればコンテナＡを減らす（すなわち既存のコンテナＡのうち所定の基準から選んだものを終了し、削除する）。
【００３５】
仮想マシンオートスケーリング管理装置２０及びコンテナオートスケーリング管理装置３０は、クラウドサービスシステム上で稼働する仮想マシン１０２上でプログラムを実行することにより構成されるものであってもよい。
【００３６】
さて、仮想マシン１０２で実行される保護制御部１２０は、その仮想マシン１０２のスケールインに対する保護状態の設定及び解除の制御を行う。概略的には、この制御では、その仮想マシン１０２上でコンテナ１１０が１つ以上稼働していれば、その仮想マシン１０２を保護状態に設定する（なお、仮想マシン１０２を起動するのは一般にその上でコンテナ１１０を稼働させるためなので、実際の運用では、仮想マシン１０２は起動時に（その上ですぐにコンテナ１１０を起動しない場合でも）保護状態に設定する）。また、保護状態の仮想マシン１０２が、コンテナ１１０が１つも稼働していない状態になると、その仮想マシン１０２の保護状態を解除する。仮想マシン１０２は、保護状態か否かを示す２値のフラグを有しており、保護状態であればそのフラグが例えばオンにセットされており、保護状態でなくなればそのフラグがオフにリセットされる。
【００３７】
ここで、コンテナ１１０の中には保護対象のものと、保護対象でないものがあってもよい。保護対象のコンテナ１１０は、仮想マシン１０２の終了を原因として強制終了されることがないように保護すべきコンテナである。一方、保護対象でないコンテナ１１０は、仮想マシン１０２の終了に伴って強制終了されても問題がないコンテナである。例えば、ユーザが、クラウドサービスシステムに対して自分の利用したいコンテナ１１０のテンプレート（コンテナ１１０の各種設定を規定する情報）を登録する際に、そのコンテナ１１０を保護対象とするか否かを指定する。また、別の例として、強制終了されても問題のないアプリケーションのみを実行するよう設定されたコンテナ１１０は、保護対象でないと自動設定され、そうでないコンテナ１１０は保護対象と自動設定されるようにしてもよい。この場合、クラウドサービスシステムにおけるコンテナ１１０のテンプレートの入力を受け付ける機構（図示省略）は、アプリケーションの名称に対応付けてそのアプリケーションが強制終了されると問題があるか否かを示す情報（この情報は例えばその機構に保持されている）を参照して、その自動設定を行えばよい。
【００３８】
このようにコンテナ１１０に保護対象であるものとそうでないものとが存在する例では、仮想マシン１０２の保護状態を解除するか否かの制御には、保護対象のコンテナ１１０のみを考慮し、保護対象でないコンテナ１１０は考慮しない。すなわち、仮想マシン１０２上で保護対象のコンテナ１１０が１つも稼働していない状態となった場合には、保護対象でないコンテナ１１０が１以上稼働していたとしても、その仮想マシン１０２の保護状態は解除する。また、同様に仮想マシン１０２を保護状態に設定する制御でも、その仮想マシン１０２上で保護対象でないコンテナ１１０が稼働しているか否かを考慮に入れないようにしてもよい。
【００３９】
１つの例では、保護制御部１２０は、コンテナ情報取得部１２２、未稼働時間計算部１２４及びマシン状態更新部１２６を有する。
【００４０】
コンテナ情報取得部１２２は、その保護制御部１２０が実行されている仮想マシン１０２（以下、自機と呼ぶ）上で稼働しているコンテナ１１０の情報を取得する。コンテナ情報取得部１２２は、自機上で１以上のコンテナ１１０が稼働しているか否かの情報を取得する。コンテナ１１０に保護対象のものと保護対象でないものとが存在する例では、コンテナ情報取得部１２２は、自機上で稼働しているコンテナ１１０が保護対象のものか否かの情報を取得する。
【００４１】
例えばコンテナ型仮想化を実現するＤｏｃｋｅｒ（商標）システムでは、個々のコンテナ１１０はＯＳ上で実行されるプロセスであり、そのコンテナ１１０のプロセスの中で、個々のアプリケーションのプロセスが実行される。この場合コンテナ情報取得部１２２は、自機が実行しているＯＳ上で実行されているプロセスを調べることで、その仮想マシン１０２上でどの種類のコンテナ１１０がそれぞれいくつ実行されているかを知ることができる。また、保護対象のコンテナ１１０と保護対象でないコンテナ１１０とを、例えばコンテナ１１０のプロセスを起動する際の引数の違い等で区別しておけば、コンテナ情報取得部１２２は、自機上で実行されているプロセスの情報から、保護対象のコンテナ１１０が稼働しているか（あるいはいくつ稼働しているか）を知ることができる。
【００４２】
未稼働時間計算部１２４は、自機上でコンテナ１１０が１つも稼働していない状態となった時点からの経過時間（以下、未稼働時間と呼ぶ）を計算する。１つの例では、未稼働時間計算部１２４が計算した未稼働時間を、自機の保護状態の解除の判定に用いる（後述の図２の手順）。
【００４３】
マシン状態更新部１２６は、自機のスケールインに対する保護状態の設定や解除を行う。保護状態の解除は、コンテナ情報取得部１２２で取得したコンテナ１１０の稼働状況に応じて制御される。また、自機が、新たに起動するコンテナ１１０をホストする（すなわちそのコンテナ１１０を稼働させる）ホストマシンの候補とするか否かという状態（以下ホスト候補可否状態と呼ぶ）を、マシン状態更新部１２６が更新してもよい。コンテナオートスケーリング管理装置３０は、新たにコンテナ１１０を起動する必要が生じた場合、ホスト候補可否状態が「ホスト可」（新規コンテナ１１０の起動を許可）である仮想マシン１０２の中から、その新たなコンテナ１１０を起動させる仮想マシン１０２を選ぶ。ホスト候補可否状態の更新は、後述する図２の手順で実行される。
【００４４】
図２を参照して、保護制御部１２０の処理手順の一例を説明する。この手順は、保護状態に設定されている仮想マシン１０２内の保護制御部１２０が、その保護状態を解除するための処理である。この処理は例えば定期的に実行される。この処理が実行される前に、例えばその仮想マシン１０２の起動時に自動的に、あるいは起動後にユーザ等の指示に従って、その仮想マシン１０２は保護状態に設定されているものとする。
【００４５】
まず、保護制御部１２０は、自機（仮想マシン１０２）上で稼働中のコンテナ１１０の数が０であるかどうかを、コンテナ情報取得部１２２により取得した情報に基づいて判定する（Ｓ１０）。１つの例では、コンテナ１１０が自機上で「稼働中」であるとは、自機のＯＳ上でそのコンテナ１１０のプロセスが実行されていることを意味する（別の例については後述する）。この例では、自機のＯＳ上でコンテナ１１０のプロセスが１以上実行中であれば、Ｓ１０の「自機上で稼働中のコンテナの数は０？」の判定結果は否定（false）となる。この場合、保護制御部１２０は処理を終了し、これにより自機の保護状態は維持される。自機上でコンテナ１１０が少なくとも１つ稼働しているので、保護状態を維持するのである。
【００４６】
Ｓ１０の判定結果が肯定（true）である場合（すなわち自機上で稼働しているコンテナ１１０がない場合）、保護制御部１２０は、未稼働時間計算部１２４に自機でのコンテナ１１０の未稼働時間を計算させる。そして、その未稼働時間が所定の閾値を超えているか否かを判定する（Ｓ１２）。例えば、コンテナ情報取得部１２２が例えば定期的に取得した情報から自機上で稼働中のコンテナ１１０がないことが分かった時点で、未稼働時間計算部１２４がその時点の時刻を未稼働の開始時刻として記憶する。未稼働時間計算部１２４は、この記憶した未稼働の開始時刻から現在時刻までの経過時間を未稼働時間として求める。なお、この未稼働時間の開始時刻は、その記憶の後、コンテナ情報取得部１２２が例えば定期的に取得した情報から、自機上で１以上のコンテナ１１０が稼働していることが分かった場合に、クリア（消去）される。未稼働の開始時刻が記憶されていない場合、未稼働時間計算部１２４は、未稼働時間の計算を行わない。
【００４７】
Ｓ１２で未稼働時間が閾値を超えていない（false）と判定した場合、保護制御部１２０は自機の保護状態を維持して処理を終了する。この未稼働時間についてのＳ１２の判定は、保護状態が容易に解除されすぎないようにするためのものである。例えば自機上で稼働中のコンテナ１１０がなくなると直ちに保護状態を解除すると、自機（仮想マシン１０２）がそのまますぐにスケールインの対象として終了される場合もあり、その場合、その終了の直後に別のコンテナ１１０を新たに起動する必要が生じた場合に仮想マシン１０２の不足を招く可能性がある。これに対し、未稼働時間がある程度（すなわち閾値以上）続けば、その仮想マシン１０２の必要性が低いとみなすことができるので、保護状態を解除しても上述の不足の問題は生じにくい。
【００４８】
Ｓ１２で未稼働時間が閾値を超えた（true）場合、保護制御部１２０は、「必要マシン数−現在のマシン数」（すなわち、必要マシン数から現在のマシン数を減算した減算結果）がマイナス（負値）であるか否かを判定する（Ｓ１４）。ここで、「必要マシン数」とは、仮想マシンオートスケーリング管理装置２０が必要と判断する仮想マシン１０２の数である。必要マシン数は、例えば、従来と同様、仮想マシン１０２群の負荷に応じて仮想マシンオートスケーリング管理装置２０が計算する。また、別の例として、コンテナオートスケーリング管理装置３０が計算した必要コンテナ数から、仮想マシンオートスケーリング管理装置２０が、その必要コンテナ数をまかなうのに必要な仮想マシン１０２の数を計算してもよい。また、「現在のマシン数」とは、クラウドサービスシステム上で稼働中の仮想マシン１０２の数である。
【００４９】
Ｓ１４の判定結果がfalse（すなわち「必要マシン数−現在のマシン数」が０以上）の場合、これは、現在のマシン数が必要マシン数以下であること、すなわち現在稼働中の仮想マシン１０２の数が必要と判断される数以下であることを意味する。この場合、自機の保護状態を解除して自機の終了を認めると仮想マシン１０２の不足を招く可能性が高い。そこで、その場合、保護制御部１２０は、保護状態の解除を行わず、処理を終了する。
【００５０】
Ｓ１４の判定結果がfalse（すなわち「必要マシン数−現在のマシン数」が０以上）の場合、これは、現在のマシン数が必要マシン数を上回っていること、言い換えれば、現在稼働中の仮想マシン１０２の数が必要と判断される数よりも多いこと、を意味する。この場合、保護制御部１２０は、Ｓ１６以降の処理に進む。Ｓ１６以降の処理では、基本的には、スケールインに対する自機の保護状態を解除（Ｓ２２）するのであるが、図２の手順では、更にその解除が適切になされるようにする準備のための処理（Ｓ１６〜Ｓ２０）をいくつか行う。
【００５１】
すなわち、保護制御部１２０（マシン状態更新部１２６）は、自機のホスト候補状態を解除する（すなわち、新たに起動するコンテナ１１０のホスト先として選ばれないようにする）（Ｓ１６）。これにより、この後、自機の保護状態の解除が完了するまでの間に新たなコンテナ１１０が自機で起動されることがなくなる。
【００５２】
また保護制御部１２０は、コンテナ情報取得部１２２に現在自機上で稼働しているコンテナ１１０の情報を取得させ、その情報から自機上で稼働中のコンテナ１１０の数が０であるか否かを判定する（Ｓ１８）。Ｓ１０だけでなく、Ｓ１８でも稼働中のコンテナ１１０の数が０であるかどうかを判定するのは、Ｓ１０の後、Ｓ１８の処理に至るまでの間に、自機で新たなコンテナ１１０が起動される可能性があるからである。
【００５３】
Ｓ１８の判定結果がfalseの場合、Ｓ１０で確認した後、新たなコンテナ１１０が自機で起動されているので、保護制御部１２０は、そのコンテナ１１０に停止を指示し、所定時間待つ（Ｓ２０）。この所定時間は、コンテナ１１０に対して停止（終了）を指示した後、コンテナ１１０が正常に停止するまでに通常要する時間（あるいは安全を見てその時間に対してある程度の時間を加えた時間）である。この所定時間が経過した後、保護制御部１２０は、マシン状態更新部１２６により、自機の保護状態を解除する（Ｓ２２）。
【００５４】
Ｓ１８の判定結果がtrueの場合は、この時点では自機上で稼働中のコンテナ１１０はないので、保護制御部１２０（マシン状態更新部１２６）は、自機の保護状態を解除する（Ｓ２２）。
【００５５】
以上の説明では、図２の手順は定期的に実行するとしたが、これは一例に過ぎない。別の例として、「必要マシン数−現在のマシン数」がマイナスになった場合（すなわち仮想マシン群のスケールインが必要になった場合）に、各仮想マシン１０２の保護制御部１２０が図２の手順を実行するようにしてもよい。
【００５６】
次に、図３を参照して、仮想マシンオートスケーリング管理装置２０の処理手順の一例を説明する。この手順は、例えば定期的に実行される。
【００５７】
この手順では、仮想マシンオートスケーリング管理装置２０は、まず「必要マシン数−現在のマシン数」の値がプラス（正値）、マイナス、０のいずれであるかを判定する（Ｓ３０）。「必要マシン数−現在のマシン数」という指標値については、既に説明した。
【００５８】
「必要マシン数−現在のマシン数」がプラスの場合、現在の仮想マシン１０２の数が必要なマシン数に足りていないということなので、仮想マシンオートスケーリング管理装置２０は、仮想マシン１０２群をスケールアウトする（Ｓ３２）。すなわち、新規の仮想マシン１０２を起動する。
【００５９】
「必要マシン数−現在のマシン数」が０の場合、現在のマシン数は必要マシン数に一致しており、仮想マシン１０２の増減は必要ない。この場合、仮想マシンオートスケーリング管理装置２０は、処理を終了する。
【００６０】
「必要マシン数−現在のマシン数」がマイナスの場合、現在の仮想マシン１０２の数が必要なマシン数を上回っているということである。この場合、スケールインを試みることになる。このために仮想マシンオートスケーリング管理装置２０は、仮想マシン１０２の中から保護状態でない（スケールイン非保護）の仮想マシン１０２を探す（Ｓ３４）。これには、各仮想マシン１０２の保護状態のフラグを調べればよい。
【００６１】
スケールイン非保護の仮想マシン１０２がない場合、仮想マシン１０２はいずれも停止できないので、仮想マシンオートスケーリング管理装置２０は処理を終了する。
【００６２】
スケールイン非保護の仮想マシン１０２が見つかった場合、仮想マシンオートスケーリング管理装置２０は、見つかったスケールイン非保護の仮想マシン１０２を終了（停止）させる（Ｓ３６）。スケールイン非保護の仮想マシン１０２が複数見つかった場合、終了させるのは１台だけでもよいし、見つかった仮想マシン１０２を「現在のマシン数−必要マシン数」以下の範囲内ですべて終了させてもよい。また、見つかったスケールイン非保護の仮想マシン１０２が複数ある場合、未稼働時間計算部１２４が計算した未稼働時間が長い仮想マシン１０２から優先して終了させるようにしてもよい。
【００６３】
以上に説明したように、本実施形態では、コンテナ１１０が稼働中の仮想マシン１０２について、スケールインに対する保護が解除されないよう制御することで、稼働中のコンテナ１１０がスケールインによる仮想マシン１０２の終了に伴って強制終了されないようにした。
【００６４】
以上の説明では、コンテナ１１０が「稼働中」であるとは、コンテナ１１０が仮想マシン１０２上で起動していること（すなわちそのコンテナ１１０のプロセスが仮想マシン１０２上で実行されていること）であるとしたが、これは一例に過ぎない。この代わりに、コンテナ情報取得部１２２は、例えば、コンテナ１１０が仮想マシン１０２上で単に起動しているだけでは「稼働中」とは判定せず、更にそのコンテナ１１０が、アプリケーションプログラムを実行していてはじめて、そのコンテナ１１０が「稼働中」であると判定してもよい。ここでのアプリケーションプログラムは、そのコンテナ１１０で実行するようそのコンテナ１１０の定義情報（テンプレート）に設定されている。
【００６５】
なお、コンテナ１１０に実行させるアプリケーションプログラムの中には、強制終了すると問題があるもの（例えばコンテナ１１０を用いて提供したいサービスの強制終了を招くもの）と、強制終了しても問題がないもの（例えばそのサービスに関係がないもの）が含まれ得る。前者を第１種プログラムと呼び後者を第２種プログラムと呼ぶことにする。コンテナ情報取得部１２２は、第１種プログラムを実行中のコンテナ１１０は稼働中であると判定し、第２種プログラムを１以上実行中だが第１種プログラムは１つも実行していないコンテナ１１０は稼働中でないと判定する。
【００６６】
コンテナ情報取得部１２２は、自機で実行されている各コンテナ１１０にログインし、そのコンテナ１１０内で実行されているプロセスの有無や、実行されているプロセスのプログラム名等を調べることで、各コンテナ１１０がアプリケーションプログラムを実行しているか（あるいは第１種プログラムを実行しているか）を判定する。
【００６７】
また、コンテナ１１０が実行するアプリケーションプログラムの処理に複数の段階が設けられており、その処理が特定の段階まで進捗した以降は、そのアプリケーションプログラムが強制終了しても問題がない場合がある。例えば、コンテナ１１０が実行するアプリケーションプログラムの処理が、入力された文書データを翻訳し、その翻訳結果のデータをストレージに保存するという処理である場合を考える。このアプリケーションプログラムは、翻訳が完了してメモリ上の翻訳結果のデータをストレージに保存する命令を（例えばＤＭＡコントローラに）発したら、通常は保存が成功するため、その命令に対する正常終了の応答を待たずに終了しても問題にならない。したがって、その処理がストレージへのデータ保存命令の発行という進捗段階に達したら、その処理を実行しているコンテナ１１０が強制終了しても問題はない。
【００６８】
そこで、コンテナ情報取得部１２２は、自機上のコンテナ１１０で実行中の進捗状況を調べ、その処理について定められた特定段階まで処理が進捗していれば、そのコンテナ１１０は稼働中でないものとして取り扱う。このような制御を可能にするために、例えばコンテナ１１０で実行されるアプリケーションプログラムは、実行している処理がどの段階まで進捗しているかを、そのプログラムの外部から参照可能なデータ（例えばファイル）に書き込んでいく。コンテナ情報取得部１２２は、そのデータを監視することで、そのプログラムの進捗状況を知得する。
【符号の説明】
【００６９】
１０，１０Ａ，１０Ｂ  コンピュータシステム、２０  仮想マシンオートスケーリング管理装置、３０  コンテナオートスケーリング装置、１００  仮想マシン群，１００Ａ  コンテナＡ用仮想マシン群、１００Ｂ  コンテナＢ用仮想マシン群、１０２，１０２ａ，１０２ｂ  仮想マシン、１１０，１１０Ａ，１１０Ｂ  コンテナ、１２０  保護制御部、１２２  コンテナ情報取得部、１２４  未稼働時間計算部、１２６  マシン状態更新部。
【図１】
2018163389.tif 000003
【図２】
2018163389.tif 000004
【図３】
2018163389.tif 000005