(57)【要約】【課題】  ソフトウェア・アプリケーションをデプロイするための方法、コンピュータ・プログラム、及びコンピュータ・システムを提供する。【解決手段】  方法及びシステムは、ソフトウェア・アプリケーションをデプロイするためのものである。ソフトウェア・アプリケーションが、デフォルト・デプロイメント構成でコンピューティング・システム上にデプロイされる。デフォルト・デプロイメント構成は、ソフトウェア・アプリケーションの相互作用するソフトウェア・コンポーネントを含む。ソフトウェア・アプリケーションの実行環境の１つ又は複数の動作インジケータが監視される。監視された１つ又は複数の動作インジケータから、実行環境の危機的状況が存在することが確認される。危機的状況が存在すると確認されたことに応答して、ソフトウェア・アプリケーションの１つ又は複数の代替的デプロイメント構成から１つの代替的デプロイメント構成が選択され、各代替的デプロイメント構成は、集約されて対応する集約されたソフトウェア・コンポーネントになるソフトウェア・コンポーネントの１つ又は複数のグループを有する。ソフトウェア・アプリケーションは、選択された代替的デプロイメント構成で、コンピューティング・システム上に再デプロイされる。【選択図】      図４
2021502622.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア・アプリケーションをデプロイするための方法であって、前記方法は、
前記ソフトウェア・アプリケーションを、デフォルト・デプロイメント構成でコンピューティング・システム上にデプロイすることであって、前記デフォルト・デプロイメント構成は、前記ソフトウェア・アプリケーションの複数の相互作用するソフトウェア・コンポーネントを含む、デプロイすることと、
前記ソフトウェア・アプリケーションの実行環境の１つ又は複数の動作インジケータを監視することと、
監視された前記１つ又は複数の動作インジケータから、前記実行環境の危機的状況が存在することを確認することと、
前記確認することに応答して、前記ソフトウェア・アプリケーションの１つ又は複数の代替的デプロイメント構成から１つの代替的デプロイメント構成を選択することであって、各代替的デプロイメント構成は、集約されて対応する集約されたソフトウェア・コンポーネントになる前記ソフトウェア・コンポーネントの１つ又は複数のグループを有する、選択することと、
前記ソフトウェア・アプリケーションを、前記選択された代替的デプロイメント構成で前記コンピューティング・システム上に再デプロイすることと、
を含む、方法。
【請求項２】
前記動作インジケータに従って前記危機的状況から前記実行環境のデフォルト状況に戻ることに応答して、前記ソフトウェア・アプリケーションを、前記デフォルト・デプロイメント構成で前記コンピューティング・システム上に再デプロイすることを含む、請求項１に記載の方法。
【請求項３】
前記ソフトウェア・アプリケーションは、各々が前記対応する集約されたソフトウェア・コンポーネントの１つ又は複数のインスタンスを含む複数のインスタンスにおいてデプロイされる、請求項１に記載の方法。
【請求項４】
前記ソフトウェア・コンポーネントは、対応するサービスを実施し、前記ソフトウェア・アプリケーションは、前記対応するサービスの各サービスの１つ又は複数の呼び出しを含む、請求項１に記載の方法。
【請求項５】
各グループの前記ソフトウェア・コンポーネントは、前記グループの前記ソフトウェア・コンポーネントにより実施される前記サービスの１つ又は複数の遠隔呼び出しを含み、前記対応する集約されたソフトウェア・コンポーネントは、前記遠隔呼び出しを対応するネイティブ呼び出しに置換する、請求項４に記載の方法。
【請求項６】
前記集約されたソフトウェア・コンポーネントの各ソフトウェア・コンポーネントは、前記対応する集約されたソフトウェア・コンポーネントのコードを組み込む、請求項４に記載の方法。
【請求項７】
前記ソフトウェア・アプリケーションは、クラウド・ソフトウェア・アプリケーションである、請求項１に記載の方法。
【請求項８】
前記１つ又は複数の動作インジケータを監視することは、
前記実行環境の１つ又は複数の性能インジケータ、構成インジケータ、及び／又は可用性インジケータを監視することを含む、請求項１に記載の方法。
【請求項９】
前記方法は、
前記ソフトウェア・アプリケーションを、それぞれ前記デフォルト・デプロイメント構成及び前記代替的デプロイメント構成を含む複数の訓練デプロイメント構成で、異なる値の前記動作インジケータを有する複数のコンピューティング・システム上にデプロイすることと、
各訓練環境の各訓練デプロイメント構成における前記ソフトウェア・アプリケーションの１つ又は複数の性能インジケータを測定することと、
前記訓練環境の前記動作インジケータ及び前記訓練デプロイメント構成における前記ソフトウェア・アプリケーションの前記対応する性能インジケータに従って、前記代替的デプロイメント構成を選択するための選択ポリシーを決定することと、
を含む、請求項１に記載の方法。
【請求項１０】
前記方法は、
前記ソフトウェア・アプリケーションを、前記代替的デプロイメント構成に対する複数の候補デプロイメント構成を含む前記訓練デプロイメント構成でデプロイすることと、
前記訓練環境の前記動作インジケータ及び前記訓練デプロイメント構成における前記ソフトウェア・アプリケーションの前記対応する性能インジケータに従って、前記候補デプロイメント構成の中から前記代替的デプロイメント構成を選択することと、
を含む、請求項９に記載の方法。
【請求項１１】
前記ソフトウェア・コンポーネントの１つ又は複数のソフトウェア・コンポーネントはステートレスである、請求項１に記載の方法。
【請求項１２】
前記ソフトウェア・コンポーネントの前記１つ又は複数のソフトウェア・コンポーネントはステートフルであり、各々のステートフル・ソフトウェア・コンポーネントの前記インスタンスの各第１のインスタンスについて、前記方法は、
前記ステートフル・ソフトウェア・コンポーネントの前記第１のインスタンスにより実施される任意のセッションの対応するセッション・データを、前記ステートフル・ソフトウェア・コンポーネントの前記第１のインスタンスがデプロイされる前記コンピューティング・システムの第１のコンピューティング・マシン上に保持することと、
前記セッション・データを、前記第１のコンピューティング・マシンとは異なる前記コンピューティング・システムの１つ又は複数のミラーリング・コンピューティング・マシン上にミラーリングすることと、
前記セッション・データを、前記ミラーリング・コンピューティング・マシンの１つから前記コンピューティング・システムの第２のコンピューティング・マシンにコピーすることであって、前記ステートフル・ソフトウェア・コンポーネントの前記インスタンスの第２のインスタンスは、前記ソフトウェア・コンポーネントの前記第２のインスタンスへの移動に応答してデプロイされる、コピーすることと、
前記セッション・データを、前記ミラーリング・コンピューティング・マシンの１つから前記コンピューティング・システムの第３のコンピューティング・マシンへコピーすることであって、前記ソフトウェア・コンポーネントの前記第１のインスタンスを含む前記集約されたソフトウェア・コンポーネントの１つの驟雨役されたソフトウェア・コンポーネントのインスタンスは、前記ソフトウェア・コンポーネントの前記第１のインスタンスから前記１つの集約されたソフトウェア・コンポーネントの前記インスタンスへの移動に応答してデプロイされる、コピーすることと、
を含む、請求項３に記載の方法。
【請求項１３】
コンピュータ可読プログラム・コードが格納された１つ又は複数のコンピュータ可読ハードウェア・ストレージ・デバイスを含むコンピュータ・プログラム製品であって、前記プログラム・コードは、ソフトウェア・アプリケーションをデプロイするための方法を実施するために、コンピュータ・システムの１つ又は複数のプロセッサにより実行可能な命令を含み、前記方法は、
前記ソフトウェア・アプリケーションを、デフォルト・デプロイメント構成でコンピューティング・システム上にデプロイすることであって、前記デフォルト・デプロイメント構成は、前記ソフトウェア・アプリケーションの複数の相互作用するソフトウェア・コンポーネントを含む、デプロイすることと、
前記ソフトウェア・アプリケーションの実行環境の１つ又は複数の動作インジケータを監視することと、
監視された前記１つ又は複数の動作インジケータから、前記実行環境の危機的状況が存在することを確認することと、
前記確認することに応答して、前記ソフトウェア・アプリケーションの１つ又は複数の代替的デプロイメント構成から１つの代替的デプロイメント構成を選択することであって、各代替的デプロイメント構成は、集約されて対応する集約されたソフトウェア・コンポーネントになる前記ソフトウェア・コンポーネントの１つ又は複数のグループを有する、選択することと、
前記ソフトウェア・アプリケーションを、前記選択された代替的デプロイメント構成で前記コンピューティング・システム上に再デプロイすることと、
を含む、コンピュータ・プログラム製品。
【請求項１４】
前記方法は、
前記動作インジケータに従って前記危機的状況から前記実行環境のデフォルト状況に戻ることに応答して、前記ソフトウェア・アプリケーションを、前記デフォルト・デプロイメント構成で前記コンピューティング・システム上に再デプロイすることを含む、請求項１３に記載のコンピュータ・プログラム製品。
【請求項１５】
前記ソフトウェア・アプリケーションは、各々が前記対応する集約されたソフトウェア・コンポーネントの１つ又は複数のインスタンスを含む複数のインスタンスにおいてデプロイされる、請求項１３に記載のコンピュータ・プログラム製品。
【請求項１６】
前記ソフトウェア・コンポーネントは、対応するサービスを実施し、前記ソフトウェア・アプリケーションは、前記対応するサービスの各サービスの１つ又は複数の呼び出しを含む、請求項１３に記載のコンピュータ・プログラム製品。
【請求項１７】
１つ又は複数のプロセッサ、１つ又は複数のメモリ、及び１つ又は複数のコンピュータ可読ハードウェア・ストレージ・デバイスを含むコンピュータ・システムであって、前記１つ又は複数のハードウェア・ストレージ・デバイスは、ソフトウェア・アプリケーションをデプロイするための方法を実施するために、前記１つ又は複数のメモリを介して前記１つ又は複数のプロセッサにより実行可能なプログラム・コードを含み、前記方法は、
前記ソフトウェア・アプリケーションを、デフォルト・デプロイメント構成でコンピューティング・システム上にデプロイすることであって、前記デフォルト・デプロイメント構成は、前記ソフトウェア・アプリケーションの複数の相互作用するソフトウェア・コンポーネントを含む、デプロイすることと、
前記ソフトウェア・アプリケーションの実行環境の１つ又は複数の動作インジケータを監視することと、
前記監視された１つ又は複数の動作インジケータから、前記実行環境の危機的状況が存在することを確認することと、
前記確認することに応答して、前記ソフトウェア・アプリケーションの１つ又は複数の代替的デプロイメント構成から１つの代替的デプロイメント構成を選択することであって、各代替的デプロイメント構成は、集約されて対応する集約されたソフトウェア・コンポーネントになる前記ソフトウェア・コンポーネントの１つ又は複数のグループを有する、選択することと、
前記ソフトウェア・アプリケーションを、前記選択された代替的デプロイメント構成で前記コンピューティング・システム上に再デプロイすることと、
を含む、コンピュータ・システム。
【請求項１８】
前記方法は、
前記動作インジケータに従って前記危機的状況から前記実行環境のデフォルト状況に戻ることに応答して、前記ソフトウェア・アプリケーションを、前記デフォルト・デプロイメント構成で前記コンピューティング・システム上に再デプロイすることを含む、請求項１７に記載のコンピュータ・システム。
【請求項１９】
前記ソフトウェア・アプリケーションは、各々が前記対応する集約されたソフトウェア・コンポーネントの１つ又は複数のインスタンスを含む複数のインスタンスにおいてデプロイされる、請求項１７に記載のコンピュータ・システム。
【請求項２０】
前記ソフトウェア・コンポーネントは、対応するサービスを実施し、前記ソフトウェア・アプリケーションは、前記対応するサービスの各サービスの１つ又は複数の呼び出しを含む、請求項１７に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報技術に関し、より特定的には、ソフトウェア・アプリケーションの管理に関する。
【背景技術】
【０００２】
ソフトウェア・アプリケーションは、ますます複雑になっている。従って、ソフトウェア・アプリケーションは、一般に、モジュール式アーキテクチャを有し、そこでは、各ソフトウェア・アプリケーションは、互いの間で相互作用する複数のソフトウェア・コンポーネントを含む。モジュール式アーキテクチャは、ソフトウェア・アプリケーションの複雑さを取り除き、それにより、ソフトウェア・アプリケーションの管理（例えば、設計、開発及び保守）を著しく容易にする。
【０００３】
さらに、各ソフトウェア・アプリケーションの異なるデプロイメント構成を提供することができ（例えば、対応する設定に応じてソフトウェア・アプリケーションを構築することによって）、システム管理者は、異なる実行環境（例えば、テスト、生産）に最も適したソフトウェア・アプリケーションのデプロイメント構成を使用することができる。
【０００４】
典型的な例は、クラウド（コンピューティング）環境におけるものである。（クラウド）ソフトウェア・アプリケーションは、クラウド・プロバイダにより、サービスとしてユーザに提供され、要求に応じて対応するコンピューティング・リソースをプロビジョニング、構成、及び解放する（その結果、ソフトウェア・アプリケーションの実際の実装は、ユーザには完全に不透明である）。ソフトウェア・アプリケーションを実装する実際のコンピューティング・リソースからのソフトウェア・アプリケーションのこの分離は、その容量が無限であるように錯覚させ、特に高ピーク負荷条件においてソフトウェア・アプリケーションの利用を改善する（スケールメリットによって）。さらに、ユーザは今や、これらのコンピューティング・リソースの管理（例えば、これらのコンピューティング・リソースの据え付け及び保守）から解放され、ユーザは、これらのコンピューティング・リソースのコスト及び複雑さのために（特に個人及び小さい企業にとって）以前は実行不可能であったタスクを実行することができる（従量課金方式で）。
【０００５】
各ソフトウェア・アプリケーションのソフトウェア・コンポーネントは、一般に、対応する（マイクロ）サービスを実施する。各マイクロ・サービスは、要求される機能を提供するために、（外部サービスに加えて）ソフトウェア・アプリケーションの他のマイクロ・サービスを呼び出すことがある。次に、ソフトウェア・アプリケーションは、複数のインスタンスにおいて（例えば、地理的に分散される対応するデータセンタ上に）デプロイできるので、対応するクラウド・プロバイダのロード・バランサは、クラウド・プロバイダに最も近いソフトウェア・アプリケーションのインスタンスを用いてユーザのあらゆる要求にサービス提供し、応答性を高めることができる。さらに、ソフトウェア・アプリケーションの各インスタンスは、マイクロ・サービスを実施するソフトウェア・アプリケーションのソフトウェア・コンポーネントの複数のインスタンスと共にデプロイすることができ、そのことは、ソフトウェア・アプリケーションの作業負荷の分散を可能にし、信頼性を高めるために冗長性を提供する。
【０００６】
異なる問題がソフトウェア・アプリケーションの動作に悪影響を与えることがある。それにもかかわらず、ソフトウェア・アプリケーションの全てのインスタンスがソフトウェア・アプリケーションの特定のインスタンスにおいて利用可能でなくなる状況でも、ソフトウェア・アプリケーションは、対応するマイクロ・サービスをソフトウェア・アプリケーションの他のインスタンス上に（遠隔）呼び出しを行うことにより動作し続けることができる。
【０００７】
しかしながら、前述の状況は、ソフトウェア・アプリケーションの性能を低下させ得る。例えば、マイクロ・サービスが利用可能でない（例えば、マイクロ・サービスが別の大陸内に配置された）ソフトウェア・アプリケーションのデータセンタから遠く離れたデータセンタ内にデプロイされたソフトウェア・アプリケーションのインスタンスにおいて、マイクロ・サービスが遠隔呼び出しされることがある。従って、それに応じて、これらのデータセンタの間の対応する伝送時間が、ソフトウェア・アプリケーションの応答時間に悪影響を及ぼし、それにより、ソフトウェア・アプリケーションのインスタンスの輻輳がもたらされることがあり、マイクロ・サービスは遠隔呼び出しされるため、そのことは応答時間も悪化させる。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ソフトウェア・アプリケーションをデプロイするための方法、コンピュータ・プログラム、及びコンピュータ・システムを提供する。
【課題を解決するための手段】
【０００９】
本発明の実施形態は、ソフトウェア・アプリケーションをデプロイするための方法、並びに関連したコンピュータ・システム及びコンピュータ・システムを提供する。ソフトウェア・アプリケーションは、デフォルト・デプロイメント構成でコンピューティング・システム上にデプロイされ、このデフォルト・デプロイメント構成は、ソフトウェア・アプリケーションの複数の相互作用するソフトウェア・コンポーネントを含む。ソフトウェア・アプリケーションの実行環境の１つ又は複数の動作インジケータが監視される。監視された１つ又は複数の動作インジケータから、実行環境の危機的状況が存在することが確認される。危機的状況が存在すると確認されたことに応答して、ソフトウェア・アプリケーションの１つ又は複数の代替的デプロイメント構成から１つの代替的デプロイメント構成が選択され、各代替的デプロイメント構成は、集約されて対応する集約されたソフトウェア・コンポーネントになるソフトウェア・コンポーネントの１つ又は複数のグループを有する。ソフトウェア・アプリケーションは、選択された代替的デプロイメント構成で、コンピューティング・システム上に再デプロイされる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態を示す。
【図２】本発明の実施形態を示す。
【図３】本発明の実施形態を示す。
【図４】本発明の実施形態を示す。
【図５】本発明の実施形態を実施するように構成されたコンピューティング・システムの概略的ブロック図を示す。
【図６】本発明の実施形態を実施するために用いることができるソフトウェア・コンポーネントを含む図を示す。
【図７】本発明の実施形態によるクラウド・コンピューティング環境を示す。
【図８】本発明の実施形態による抽象化モデル層を示す。
【発明を実施するための形態】
【００１１】
図１〜図４は、本発明の実施形態を示す。
【００１２】
図１に関して、ソフトウェア・アプリケーション１０５が、デフォルト・デプロイメント構成でコンピューティング・システム上にデプロイされる。
【００１３】
例えば、ソフトウェア・アプリケーション１０５は、ｅコマース・ポータルの実装など、クラウド・タイプのものである（対応するクラウド・プロバイダによりクラウド環境内にサービスとして与えられる）。ソフトウェア・アプリケーションは、同じ参照符号で示される、対応するサービスを実施する複数のソフトウェア・コンポーネントμＳ１〜μＳＮ（各々が、ソフトウェア・アプリケーションの実装に関係なく、その使用を制御する対応するポリシーに従って明確に定められたインターフェースを通じて要求され得るスタンドアロンの基本的機能を提供する）を含む。一実施形態において、サービスμＳ１〜μＳＮは、マイクロ・タイプのものである。マイクロ・サービスμＳ１〜μＳＮは、サイズが小さく、細粒度で（単一の機能を実行するために）、独立してデプロイ可能であり、軽量プロトコル（ＨＴＴＰのような）を通じてアクセス可能である。
【００１４】
一般に、クラウド・プロバイダは、クラウド・サービスのような（ハードウェア及び／又はソフトウェア）コンピューティング・リソース（すなわち、非常に迅速にプロビジョニング、構成、及び解放することができる共有コンピューティング・リソース）のプールを与える。クラウド・サービスのコンピューティング・リソース（仮想タイプのもの、すなわち物理リソースのソフトウェアによるエミュレーションとすることができる）は、要求に応じてクラウド・プロバイダのユーザに与えられ、各ユーザは、これらのコンピューティング・リソースの唯一の制御を有する（次に、これらのコンピューティング・リソースを、各ユーザ専用であるのと同じであるかのように使用することができる）。これらのサービスは、一実施形態において、Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＳａａＳ）モデルに従って提供されるソフトウェア・アプリケーション１０５を含む。
【００１５】
デフォルト・デプロイメント構成において、ソフトウェア・アプリケーション１０５は、１つ又は複数のインスタンスにおいて、クラウド・サービスのクラウド・プロバイダの１つ又は複数のデータセンタＤＣ１〜ＤＣＭ上にデプロイされる。例えば、ソフトウェア・アプリケーション１０５の各インスタンスは、対応するデータセンタＤＣ１〜ＤＣＭにインストールされる。より具体的には、各ソフトウェア・コンポーネントμＳ１〜μＳＮの１つ又は複数のインスタンスが、対応する（実行）コンピューティング・マシン上に、例えば、データセンタＤＣ１〜ＤＣＭの仮想マシンＶＭ１〜ＶＭＭ上にインストールされる。デフォルト構成は、（ソフトウェア・アプリケーションのデプロイメント中）マイクロ・サービスμＳ１〜μＳＮへのその機能の分散に関して所望の信頼性レベルを与えるように選択された。
【００１６】
動作において、マイクロ・サービスμＳ１〜μＳＮは互いに呼び出すことができる（例えば、ＲＥＳＴｆｕｌ仕様に従って）。例えば、マイクロ・サービスμＳ１がマイクロ・サービスμＳ２の機能を要求するとき、マイクロ・サービスμＳ１は、マイクロ・サービスμＳ２を呼び出す（データセンタＤＣ１においてローカルに）。同時に、ソフトウェア・アプリケーション１０５の実行環境の１つ又は複数の動作インジケータが、特定の（制御）コンピューティング・マシンにより、例えば、クラウド・プロバイダ全体を管理するクラウド・マネージャを実行している、基準ＤＣと区別されるクラウド・プロバイダの対応するデータセンタの仮想マシンＶＭにより、監視される。例えば、制御仮想マシンＶＭは、ソフトウェア・アプリケーション１０５のインスタンス、データセンタＤＣ１〜ＤＣＭ、及びデータセンタＤＣ１〜ＤＣＭの間の接続に関する性能インジケータ、構成インジケータ、及び可用性インジケータを周期的に収集する。
【００１７】
図２に関して、ソフトウェア・アプリケーション１０５の動作に悪影響を与える問題が発生する。例えば、マイクロ・サービス（例えば、マイクロ・サービスμＳ２）の全てのインスタンスが、（例えば、データセンタＤＣ１上の）ソフトウェア・アプリケーション１０５の特定のインスタンスでダウンする。それにもかかわらず、データセンタＤＣ１上のソフトウェア・アプリケーション１０５のインスタンスは、ソフトウェア・アプリケーション１０５の他のインスタンス上の同じマイクロ・サービスμＳ２を呼び出すことにより、動作し続けることができる。例えば、ここでマイクロ・サービスμＳ１は、データセンタＤＣ１からデータセンタＤＣ２上のマイクロ・サービスμＳ２を遠隔呼び出しする。
【００１８】
図３に関して、本発明の実施形態によると、ソフトウェア・アプリケーション１０５の実行環境の危機的状況が、制御仮想マシンＶＭにより監視されるソフトウェア・アプリケーションの動作インジケータに従って検出され得る。例えば、危機的状況は、データセンタＤＣ１上で利用可能でないマイクロ・サービスμＳ２の全てのインスタンス、及び低速であるデータセンタＤＣ１とＤＣ２との間の接続（例えば、データセンタＤＣ１及びＤＣ２が異なる大陸に位置するため）により定められ、ソフトウェア・アプリケーション１０５の対応する性能低下をもたらす。性能低下に応答して、ソフトウェア・アプリケーション１０５の１つ又は複数の代替的デプロイメント構成の中から、ソフトウェア・アプリケーション１０５の（選択された）代替的デプロイメント構成が選択される。ソフトウェア・アプリケーション１０５の代替的デプロイメント構成の各々は、集約されて集約されたソフトウェア・コンポーネントになるソフトウェア・コンポーネントμＳ１〜μＳＮの１つ又は複数のグループを有する。各々の集約されたソフトウェア・コンポーネントは、マイクロ・サービスを呼び出すための同じインターフェースを用いて、対応するソフトウェア・コンポーネントの同じ機能を提供する。例えば、選択された代替的デプロイメント構成は、（別個の）ソフトウェア・コンポーネントμＳ１及びμＳ２の代わりに、集約されたソフトウェア・コンポーネントμＳ１２を含む。
【００１９】
図４に関して、ソフトウェア・アプリケーション１０５が、選択された代替的デプロイメント構成で再デプロイ（再ステージング）される。特に、データセンタＤＣ１上のソフトウェア・アプリケーション１０５のインスタンスにおいて、ソフトウェア・コンポーネントμＳ１及びμＳ２が、集約されたソフトウェア・コンポーネントμＳ１２の対応するインスタンスに置換される。従って、マイクロ・サービスμＳ１によるマイクロ・サービスμＳ２のいかなる呼び出しも、今や、集約されたソフトウェア・コンポーネントμＳ１２内で直接実行される（すなわち、データセンタＤＣ１においてローカルに）。しかしながら、データセンタＤＣ１上のソフトウェア・アプリケーション１０５のインスタンスは、ユーザ及びソフトウェア・アプリケーション１０５の他のインスタンスに全く同じ挙動を暴露するので、そのデプロイメント構成の変化は、ユーザに完全に不透明である（すなわち、トランスペアレントではない）。
【００２０】
その結果、ソフトウェア・アプリケーションのデプロイメント構成は、ソフトウェア・アプリケーションの実行環境に動的に適合し、そのことは、ソフトウェア・アプリケーションの性能を著しく高める。特定的には、ソフトウェア・コンポーネントの集約は、マイクロ・サービスの遠隔呼び出し、及びその後の異なるデータセンタの間の対応する通信（例えば、本例におけるデータセンタＤＣ１上のマイクロ・サービスμＳ１によりデータセンタＤＣ２上のマイクロ・サービスμＳ２を呼び出すための）を回避し（又は、少なくとも実質的に減らし）、そのことは、マイクロ・サービスが遠隔呼び出されるソフトウェア・アプリケーションのインスタンスのあらゆる輻輳を回避し（又は、少なくとも実質的に減らし）、それにより、ソフトウェア・アプリケーションの応答時間も改善される（本例におけるデータセンタＤＣ２上のソフトウェア・アプリケーション１０５のインスタンスのように）。
【００２１】
図５は、本発明の実施形態を実施するように構成されたコンピューティング・システム２００の概略ブロック図を示す。
【００２２】
コンピューティング・システム２００は、クラウド・プロバイダ（図５に示されない実行仮想マシン及び制御仮想マシンをホストする）のデータセンタＤＣ１〜ＤＣＭを含む。データセンタＤＣ１〜ＤＣＭは、通信ネットワーク２０５を介して、互いの間で通信する。例えば、対応するクラウド・サービス（上述のソフトウェア・アプリケーションを含む）が、パブリック・クラウド・モデルに従ってクラウド・プロバイダにより提供されるとき、通信ネットワーク２０５は、グローバル・タイプの（典型的には、インターネットに基づく）ものとすることができる。この場合、ユーザは、ユーザのクライアント・コンピューティング・マシン又は単にクライアント２１０（例えば、シン・タイプの）により同じ通信ネットワーク２０５にアクセスすることにより、クラウド・プロバイダに接続する。従って、クラウド・プロバイダは、ソフトウェア・アプリケーションにアクセスするために（例えば、クライアント２１０のウェブブラウザを介して）フロントエンド・サブシステムを暴露する。クラウド・プロバイダは、代わりに、クラウド・サービスを実際に実施形態するバックエンド・サブシステムを有する。バックエンド・サブシステムは、外部からアクセスできないので、ユーザは、バックエンド・サブシステムの位置及び構成について全く分からない。
【００２３】
各データセンタＤＣ１〜ＤＣＭは、幾つかのサーバ・コンピューティング・マシン又は単にサーバ２１５（例えば、ラック又はブレード・タイプの）と、大容量メモリを実装するストレージ・ディスク２２０（例えば、ＲＡＩＤタイプの）とを含む。次に、各サーバ２１５は、各サーバの動作を制御する１つ又は複数のマイクロプロセッサ（μＰ）と、そのブートストラップのための基本コードを格納する不揮発性メモリ（ＲＯＭ）と、マイクロプロセッサ（図５に示されない）により動作メモリとして用いられる揮発性メモリ（ＲＡＭ）とを含む。データセンタＤＣ１〜ＤＣＭはまた、データセンタのサーバ・コンピューティング・マシン（例えば、ＤＶＤのような光ディスクなどの取り外し可能なストレージ・ユニット２３０を読み／書きするためのドライブも備えたパーソナル・コンピュータ）を制御するためのコンソール２２５も含む。スイッチ／ルータ・サブシステム２３５は、サーバ２１５、ディスク２２０、及びコンソール２２５の間の、通信ネットワーク２０５を用いた、あらゆる通信を管理する。サーバ２１５、ディスク２２０、及びコンソール２２５は、配線サブシステム２４０を通じて、スイッチ／ルータ・サブシステム２３５に接続される。
【００２４】
図６は、本発明の実施形態を実施するために用い得るソフトウェア・コンポーネントを含む図を示す。
【００２５】
全てのソフトウェア・コンポーネント（プログラム及びデータ）が、全体として参照符号３００で示される。ソフトウェア・コンポーネントは、一般的には、大容量メモリ内に格納され、オペレーティング・システム及び他のアプリケーション・プログラム（図６に示されない）と共に、プログラムが実行されるとき、制御仮想マシンの作業メモリに（少なくとも部分的に）ロードされる。プログラムは、最初に、例えば、取り外し可能ストレージ・ユニットから又は通信ネットワークから、大容量メモリにインストールされる。この点で、各プログラムは、指定された論理機能を実施するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの部分とすることができる。特定的には、図は、各々の交換メッセージが対応するアクション（記号「Ａ」で始まる連続番号で示される）を表す一連の交換メッセージによって、ソフトウェア・コンポーネント３００の静的構造及びソフトウェア・コンポーネント３００の動的挙動の両方を表す。
【００２６】
特定的には、クリエータ３０５が、対応する開発チームによりソースコードがソースコード・リポジトリ３１０に付加されたソースコード・リポジトリ３１０から、ソフトウェア・アプリケーションのソースコードのオリジナル・バージョンを取り出す。クリエータ３０５は、（例えば、２〜４個のソフトウェア・コンポーネントといった、所定数のソフトウェア・コンポーネントの全ての可能な集約に対応する）ソフトウェア・アプリケーションの代替的デプロイメント構成を選択するために用いられる、その複数の候補デプロイメント構成を定めるようにソースコードを更新する。特定的には、構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎが、デプロイメント構成を選択するために導入される。構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎは、デフォルト・デプロイメント構成及び候補デプロイメント構成に対応する異なる値を取ることができる。クリエータ３０５は、対応するソフトウェア・コンポーネントを、各々の集約されたソフトウェア・コンポーネントに選択的に組み込むためにソースコードを更新する。例えば、構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎにより制御されるスイッチ文が、デフォルト・デプロイメント構成の値とは異なる構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎの各値について、各（第１の）ソフトウェア・コンポーネントの始めに付加される。対応する候補デプロイメント構成が、第１のソフトウェア・コンポーネントにおいて１つ又は複数の（第２の）ソフトウェア・コンポーネントを集約する場合、第２のソフトウェア・コンポーネントのコードを第１のソフトウェア・コンポーネントに組み込むように、命令が付加される。さらに、クリエータ３０５は、ソフトウェア・コンポーネントを遠隔から又はローカルに選択的に呼び出すためにソースコードを更新する。例えば、第１のソフトウェア・コンポーネントにおける各々の第２のソフトウェア・コンポーネントのあらゆる遠隔呼び出し（ＲＥＳＴｆｕｌ呼び出しのような）は、同じく構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎにより制御されるスイッチ文に置き換えられる。構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎが、デフォルト・デプロイメント構成、又は第２のソフトウェア・コンポーネントが第１のソフトウェア・コンポーネントから分離したままである候補デプロイメント構成を示すとき、スイッチ文は、第２のソフトウェア・コンポーネントの遠隔呼び出しを引き起こし、一方、構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎが、第２のソフトウェア・コンポーネントが第１のソフトウェア・コンポーネントと共に集約される候補デプロイメント構成を示すとき、スイッチ文は、第２のソフトウェア・コンポーネントのネイティブの、すなわちローカルの呼び出し（関数呼び出しのような）を引き起こす。例えば、マイクロ・サービスμＳ２の関数ｍｙＦｕｎｃｔｉｏｎ２及びマイクロ・サービスμＳ３の関数ｍｙＦｕｎｃｔｉｏｎ３を呼び出すマイクロ・サービスμＳ１の関数ｍｙＦｕｎｃｔｉｏｎ１を実施する非常に単純なソフトウェア・コンポーネントが、もともと以下の疑似コードを有し得る。：
【表１】
2021502622.tif 000003
【００２７】
ソフトウェア・コンポーネントμＳ１及びμＳ２を集約して集約されたソフトウェア・コンポーネントμＳ１２（構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎ＝１２により示される）にする候補デプロイメント構成、及びソフトウェア・コンポーネントμＳ１及びμＳ３を集めて集約されたソフトウェア・コンポーネントμＳ１３（構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎ＝１３により示される）にする別の候補デプロイメント構成の場合、（構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎ＝０により示される）分離したソフトウェア・コンポーネントμＳ１及びμＳ２を有するデフォルト・デプロイメント構成に加えて、疑似コードは、
【表２】
2021502622.tif 000004
になる。
【００２８】
クリエータ３０５は、ソフトウェア・アプリケーションのソースコードのオリジナル・バージョンを、ソースコード・リポジトリ３１０へのソースコードの更新されたバージョンに置き換える（アクション「Ａ１．更新）。ビルダ３１５は、構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎの現在値（例えば、ソフトウェア・デプロイメント・アプリケーションの構築ツールにより実装される）に従って、ソースコード・リポジトリ３１０から取り出されたソフトウェア・アプリケーションのソースコードから、（ソフトウェア・アプリケーションのデプロイメントのための）ソフトウェア・アプリケーションの異なるデプロイメント・パッケージを構築する。ビルダ３１５は、ソフトウェア・アプリケーションのデプロイメントのために要求される間、一時的にソフトウェア・アプリケーションの各デプロイメント・パッケージ（例えば、対応する仮想アプライアンスの形態の）をデプロイメント・パッケージ・リポジトリ３２０に付加する（アクション「Ａ２．構築」）。
【００２９】
ソフトウェア・アプリケーションの訓練段階中（ソフトウェア・アプリケーションを生産する前に）、コンフィギュレータ３２５は、ソフトウェア・アプリケーションの異なる訓練（実行）環境を構成する。各々の訓練環境は、異なる値の動作インジケータ（ソフトウェア・アプリケーションの代替的デプロイメント構成を選択するために用いられる）を有する。例えば、コンフィギュレータ３２５は、データセンタの間の接続の帯域幅及びデータセンタのサーバの利用可能な処理能力のような１つ又は複数の性能インジケータ、データセンタの間の接続のホップの数及び実行仮想マシンの作業メモリの量のような１つ又は複数の構成インジケータ、及び／又はマイクロ・サービス及びデータセンタの間の接続の可用性のような１つ又は複数の可用性インジケータの異なる値を有するように、訓練環境を構成する（アクション「Ａ３．構成」）。
【００３０】
デプロイヤ３３０は、デプロイメント・パッケージ・リポジトリ３２０からデプロイヤ３３０により取り出されたデプロイメント・パッケージを用いて、ソフトウェア・アプリケーションをコンピューティング・システム上にデプロイするために用いられる。特定的には、ソフトウェア・アプリケーションの訓練段階中、デプロイヤ３３０は、（ソフトウェア・アプリケーションのデプロイメント・パッケージが、実行時にビルダ３１５により構築された後）デフォルト・デプロイメント構成を含むあらゆる訓練デプロイメント構成及びあらゆる候補デプロイメント構成で、ソフトウェア・アプリケーション３３５を、あらゆる訓練環境上に連続してデプロイする（アクション「Ａ４．デプロイ」）。学習者３４０は、ソフトウェア・アプリケーションの代替的デプロイメント構成を選択するための選択ポリシーを学習する。学習者３４０は、あらゆる訓練環境上のあらゆるデプロイメント構成で、ソフトウェア・アプリケーション３３５の１つ又は複数の性能インジケータ（例えば、ベンチマーク要求へのソフトウェア・アプリケーションの平均応答時間）を測定する（アクション「Ａ５．測定」）。次に、学習者３４０は、訓練環境の動作インジケータ及び訓練デプロイメント構成におけるソフトウェア・アプリケーション３３５の対応する性能インジケータに従って、候補デプロイメント構成の中から代替的デプロイメント構成を選択する。例えば、あらゆる訓練環境において、学習者３４０は、デフォルト構成におけるソフトウェア・アプリケーション３３５の性能インジケータが閾値だけ（１０〜２０％のような）上回る場合のみ、ソフトウェア・アプリケーション３３５の最良の性能インジケータ（すなわち、この場合は最も低い平均応答時間）を提供する候補デプロイメント構成を選択する。ひとたび全ての訓練環境が処理されると、選択されたソフトウェア・アプリケーションの候補デプロイメント構成が、代替的デプロイメント構成を定める。従って、代替的デプロイメント構成は、実際に有用である可能性が高いデプロイメント構成に限定される。この点で、必要に応じて、学習者３４０は、選択されなかった候補デプロイメント構成に対応するソースコードの部分を除去することにより、ソースコード・リポジトリ３１０内のソフトウェア・アプリケーションのソースコードを簡略化することもできる（アクション「Ａ６．選択」）。いずれの場合も、学習者３４０は、訓練環境の動作インジケータ及びソフトウェア・アプリケーション３３５の対応する性能インジケータに従って、（ソフトウェア・アプリケーションのデフォルト・デプロイメント構成又は代替的デプロイメント構成を選択するための）選択ポリシーを決定する。例えば、学習者３４０は、機械学習技術を適用して、選択ポリシーを定める決定木を作成する。決定木は、複数の決定ノード（根テスト・ノードから開始する）を含む。各決定ノードは、１つ又は複数の動作インジケータのテストを指定し、２つ又はそれより多い分岐が、これらの動作インジケータの可能な値に対応する決定ノードから下降する。決定木の葉ノードは、構成変数ｍｙＣｏｎｆｉｇｕｒａｔｉｏｎの対応する値を用いることにより、ソフトウェア・アプリケーションのデフォルト／代替的デプロイメント構成を指定する。デフォルト／代替的デプロイメント構成は、根テスト・ノードから葉ノードへの経路に沿った動作インジケータの値について、ソフトウェア・アプリケーションの最良の性能インジケータ（上述のマージンを有する）を提供すると予想されるデプロイメント構成である。学習者３４０は、そのように取得された決定木の表示を決定木ファイル３４５内に格納する（アクション「Ａ７．学習」）。
【００３１】
その後、ソフトウェア・アプリケーションが生産される。最初に、（デプロイメント・パッケージが実行時にビルダ３１５により構築された後）デプロイヤ３３０は、デフォルト・デプロイメント構成で、ソフトウェア・アプリケーション３５０をコンピューティング・システムの（生産）実行環境上にデプロイする（アクション「Ａ８．デプロイ」）。実行時、ソフトウェア・アプリケーションの各ソフトウェア・コンポーネントの各インスタンスは、対応する要求を提供するために、他のソフトウェア・コンポーネントのインスタンスにより、及び／又はソフトウェアのユーザ（図６に示されない）により、呼び出すことができる（アクション「Ａ９．呼び出す」）。これに応じて、ソフトウェア・コンポーネントのこのインスタンスは、各要求を処理する（サービスする）。特定的には、ソフトウェア・コンポーネントは、ステートレス（stateless）又はステートフル（stateful）のいずれかであり得る。ソフトウェア・コンポーネントがステートレスである場合、各要求は、以前に処理された要求に関するいずれの（セッション）データも保持することなく、独立して処理される（その結果、ソフトウェア・コンポーネントのインスタンスは、完全に置き換え可能である）。逆に、ソフトウェア・コンポーネントがステートフルである場合、ソフトウェア・コンポーネントのインスタンスは、セッション・データに反映される履歴に従って対応するユーザとの各セッションにおける複数の要求を処理するために、セッション・データを保持する。ひとたびセッションが閉じられると、セッション・データは廃棄される（アクション「Ａ１０．処理」）。本発明の実施形態によると、セッション・データは、ソフトウェア・コンポーネントの（第１の）インスタンスがデプロイされる（第１の）実行仮想マシンとは異なる１又は複数の他の位置にミラーリングされる。例えば、セッション・データは、いずれかのセッションが開かれるたび、そのセッション・データが更新されるたび、及びセッションが閉じられるたびに、対応する通知を送ることにより、制御仮想マシン及び／又は他の実行仮想マシン（図７に示されない）を含む１つ又は複数の（ミラーリング）仮想マシンにミラーリングされる（アクション「Ａ１１．ミラーリング」）。この場合、ソフトウェア・コンポーネントの第１のインスタンスのあらゆる保留セッションを、ソフトウェア・アプリケーションの別の（遠隔）インスタンス（図６に示されない）における同じソフトウェア・コンポーネントの別の（第２の）インスタンスに移動させ、（第１の）データセンタにおいてソフトウェア・コンポーネントの全てのインスタンスがダウン（すなわち、アボート）し、動作が、別の（第２の）データセンタ内のソフトウェア・コンポーネントのインスタンスに引き継がれたときに発生し得る処理を続行する（又は、第１のデータセンタにおいて、ソフトウェア・コンポーネントのインスタンスが再び動作し、その動作が第２のデータセンタにおけるソフトウェア・コンポーネントのインスタンスから第１のデータセンタにおけるソフトウェア・コンポーネントのインスタンスに戻る場合、逆もまた同様である）。それに応じて、ソフトウェア・コンポーネントの第���のインスタンスが、ソフトウェア・コンポーネントの第２のインスタンスの位置に最も近い対応するセッション・データの位置を特定する（例えば、それぞれ、地理的距離及び伝送速度などの物理的パラメータ及び／又は論理パラメータに従って）。次に、ソフトウェア・コンポーネントの第２のインスタンスは、セッション・データを、この最も近い位置から対応する（第２の）仮想マシンにローカルにコピーして、保留セッションの処理をシームレスに再開し、その第２のインスタンスに提供されるソフトウェア・コンポーネントの第１のインスタンスに対するいずれの次の要求も、今後は、上述のような対応するセッションを処理するためのものである（アクション「Ａ１２．コピー」）。
【００３２】
いずれの場合も、本発明の実施形態による解決法において同時に、モニタ３５５が、ソフトウェア・アプリケーションの実行環境の動作インジケータを監視する。モニタ３５５は、監視時点毎に（例えば、３０〜１２０秒毎に）集められた動作インジケータを分析器３６０に渡す（アクション「Ａ１３．監視」）。分析器３６０は、決定木ファイル３４５から取り出された決定木に従って、監視時点毎の動作インジケータに対応するソフトウェア・アプリケーションの（デフォルト／代替的）デプロイメント構成を選択する。分析器３６０は、根テスト・ノードにおいて指定された動作インジケータをテストし、その値に対応する分岐を下に移動し、葉ノードに達するまで同じ動作を繰り返す。次に、この葉ノードは、動作インジケータにより定められるソフトウェア・アプリケーションの実行環境の現状において、ソフトウェア・アプリケーション３５０の最良の性能を与える可能性が高い（選択された）デプロイメント構成を示す。特定的には、動作インジケータが、実行環境が危機的状況にある（ソフトウェア・アプリケーション３５０の性能が著しく低下し得る）可能性が高いことを示すとき、選択された代替的デプロイメント構成は、ソフトウェア・アプリケーション３５０の性能を改善すると予想されるので、決定木の降順ソート（sorting down）は、代替的デプロイメント構成の１つを選択する。逆に、動作インジケータが、実行環境がデフォルト状況にある可能性が高い（ソフトウェア・アプリケーション３５０の性能が予想されるものである）とき、決定木の降順ソートは、デフォルト・デプロイメント構成を選択する（アクション「Ａ１４．選択」）。選択されたデプロイメント構成がソフトウェア・アプリケーション３５０の現在のデプロイメント構成とは異なるたびに、（ソフトウェア・アプリケーションのデプロイメント・パッケージが実行時にビルダ３１５により構築された後）、デプロイヤ３３０は、選択されたデプロイメント構成で、ソフトウェア・アプリケーション３５０をコンピューティング・システムの実行環境上に再デプロイする。従って、実行環境が、（デフォルト状況から又は別の危機的状況から）いずれかの危機的状況に移ると、ソフトウェア・アプリケーション３５０は、対応する代替的デプロイメント構成で、再デプロイされる（ソフトウェア・アプリケーション３５０の性能の予想される低下を回避するため、又は少なくとも減らすために）。逆に、実行環境が、いずれかの危機的状況からデフォルト状況に移ると、ソフトウェア・アプリケーション３５０は、デフォルト・デプロイメント構成で、再デプロイされる。その結果、ソフトウェア・アプリケーション３５０は、可能な限り早くデフォルト・デプロイメント構成に戻る。ひとたびソフトウェア・アプリケーション３５０の性能を低下させる可能性が高かった危機的状況が取り除かれると、ソフトウェア・アプリケーション３５０は再び、分離した、全てのソフトウェア・アプリケーションのソフトウェア・コンポーネントを有し、それにより、ソフトウェア・アプリケーションのオリジナルの信頼性レベルを回復する（アクション「Ａ１５．再デプロイ」）。ソフトウェア・アプリケーションの再デプロイメントは、あらゆる保留セッションの移動をもたらすことができ、そのことは、例えば、その動作が現在、ソフトウェア・アプリケーションの別の（遠隔の）インスタンスにおけるソフトウェア・アプリケーションの（第１の）インスタンスにより引き継がれているソフトウェア・コンポーネントのインスタンスが、ソフトウェア・アプリケーションの動作を取得し、集約されたソフトウェア・コンポーネントの対応するインスタンスに（ローカルに）集約される。上述のように、集約されたソフトウェア・コンポーネントのインスタンスは、ソフトウェア・アプリケーションの位置に最も近い対応するセッション・データの位置を特定し、この最も近い位置から対応する（第３の）仮想マシン上にセッション・データをローカルにコピーして、保留セッションの処理をシームレスに再開し、集約されたソフトウェア・コンポーネントのインスタンスに提供されるソフトウェア・コンポーネントの第１のインスタンスに対するいずれの次の要求も、今後は、上述のような対応するセッションを処理するためのものである（アクション「Ａ１６．コピー」）。
【００３３】
クラウド・コンピューティングは、最小限の管理労力又はサービス・プロバイダとの対話で迅速にプロビジョニング及び解放することができる構成可能なコンピューティング・リソース（例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス）の共有プールへの、便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス配信のモデルである。このクラウド・モデルは、少なくとも５つの特徴、少なくとも３つのサービス・モデル、及び少なくとも４つのデプロイメント・モデルを含むことができる。
【００３４】
特徴は、以下の通りである。
オンデマンド・セルフサービス：クラウド・コンシューマは、必要に応じて、サーバ時間及びネットワーク・ストレージ等のコンピューティング機能を、人間がサービスのプロバイダと対話する必要なく自動的に、一方的にプロビジョニングすることができる。
広範なネットワーク・アクセス：機能は、ネットワーク上で利用可能であり、異種のシン又はシック・クライアント・プラットフォーム（例えば、携帯電話、ラップトップ、及びＰＤＡ）による使用を促進する標準的な機構を通じてアクセスされる。
リソース・プール化：プロバイダのコンピューティング・リソースは、マルチ・テナント・モデルを用いて、異なる物理及び仮想リソースを要求に応じて動的に割り当て及び再割り当てすることにより、複数のコンシューマにサービスを提供するためにプールされる。コンシューマは、一般に、提供されるリソースの正確な位置についての制御又は知識を持たないが、より高レベルの抽象化では位置（例えば、国、州、又はデータセンタ）を特定できる場合があるという点で、位置とは独立しているといえる。
迅速な弾力性：機能は、迅速かつ弾力的に、場合によっては自動的に、プロビジョニングして素早くスケール・アウトし、迅速にリリースして素早くスケール・インさせることができる。コンシューマにとって、プロビジョニングに利用可能なこれらの機能は、多くの場合、無制限であり、いつでもどんな量でも購入できるように見える。
計測されるサービス：クラウド・システムは、サービスのタイプ（例えば、ストレージ、処理、帯域幅、及びアクティブなユーザ・アカウント）に適した何らかの抽象化レベルでの計量機能を用いることによって、リソースの使用を自動的に制御及び最適化する。リソース使用を監視し、制御し、報告し、利用されるサービスのプロバイダとコンシューマの両方に対して透明性をもたらすことができる。
【００３５】
サービス・モデルは以下の通りである。
Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＳａａＳ）：クラウド・インフラストラクチャ上で動作しているプロバイダのアプリケーションを使用するために、コンシューマに提供される機能である。これらのアプリケーションは、ウェブ・ブラウザ（例えば、ウェブ・ベースの電子メール）などのシン・クライアント・インターフェースを通じて、種々のクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ固有のアプリケーション構成設定の考え得る例外として、ネットワーク、サーバ、オペレーティング・システム、ストレージ、又は個々のアプリケーション機能をも含めて、基礎をなすクラウド・インフラストラクチャを管理又は制御しない。
Ｐｌａｔｆｏｒｍ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＰａａＳ）：プロバイダによってサポートされるプログラミング言語及びツールを用いて生成された、コンシューマが生成した又は取得したアプリケーションを、クラウド・インフラストラクチャ上にデプロイするために、コンシューマに提供される機能である。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、又はストレージなどの基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、デプロイされたアプリケーション、及び場合によってはアプリケーション・ホスティング環境構成に対して制御を有する。
Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＩａａＳ）：コンシューマが、オペレーティング・システム及びアプリケーションを含み得る任意のソフトウェアをデプロイ及び動作させることができる、処理、ストレージ、ネットワーク、及び他の基本的なコンピューティング・リソースをプロビジョニンングするために、コンシューマに提供される機能である。コンシューマは、基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、オペレーティング・システム、ストレージ、デプロイされたアプリケーションに対する制御、及び場合によってはネットワーク・コンポーネント（例えば、ホストのファイアウォール）選択の限定された制御を有する。
【００３６】
デプロイメント・モデルは以下の通りである。
プライベート・クラウド：クラウド・インフラストラクチャは、ある組織のためだけに運営される。このクラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、オンプレミス又はオフプレミスに存在することができる。
コミュニティ・クラウド：クラウド・インフラストラクチャは、幾つかの組織によって共有され、共通の関心事項（例えば、任務、セキュリティ要件、ポリシー、及びコンプライアンス上の考慮事項）を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、オンプレミス又はオフプレミスに存在することができる。
パブリック・クラウド：クラウド・インフラストラクチャは、一般公衆又は大規模な業界グループに利用可能であり、クラウド・サービスを販売する組織によって所有される。  ハイブリッド・クラウド：クラウド・インフラストラクチャは、固有のエンティティのままであるが、データ及びアプリケーションの移行性を可能にする標準化された又は専用の技術（例えば、クラウド間の負荷分散のためのクラウド・バースティング）によって結び付けられる２つ以上のクラウド（プライベート、コミュニティ、又はパブリック）の混成物である。
【００３７】
クラウド・コンピューティング環境は、ステートレス性、低結合性、モジュール性、及びセマンティック相互運用性に焦点を置くことを指向するサービスである。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
【００３８】
ここで図７を参照して、例示的なクラウド・コンピューティング環境５０が示される。示されるように、クラウド・コンピューティング環境５０は、例えばパーソナル・デジタル・アシスタント（ＰＤＡ）又は携帯電話５４Ａ、デスクトップ・コンピュータ５４Ｂ、ラップトップ・コンピュータ５４Ｃ、及び／又は自動車コンピュータ・システム５４Ｎなどといった、クラウド・コンシューマによって用いられるローカル・コンピューティング・デバイスと通信することができる、１つ又は複数のクラウド・コンピューティング・ノード１０を含む。ノード１０は、互いに通信することができる。これらのノードは、上述のようなプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、若しくはハイブリッド・クラウド、又はこれらの組み合わせなど、１つ又は複数のネットワークにおいて物理的又は仮想的にグループ化され得る（図示せず）。このことは、クラウド・コンシューマがローカル・コンピューティング・デバイス上にリソースを保持する必要のないサービスとして、クラウド・コンピューティング環境５０が、インフラストラクチャ、プラットフォーム、及び／又はソフトウェアを提供することを可能にする。図７に示されるコンピューティング・デバイス５４Ａ〜５４Ｎのタイプは単に例示であることを意図し、コンピューティング・ノード１０及びクラウド・コンピューティング環境５０は、いずれのタイプのネットワーク及び／又はネットワーク・アドレス指定可能な接続上でも（例えば、ウェブブラウザを用いて）、いずれのタイプのコンピュータ化されたデバイスとも通信できることを理解されたい。
【００３９】
ここで図８を参照すると、クラウド・コンピューティング環境５０（図７）によって提供される機能抽象化層のセットが示される。図８に示されるコンポーネント、層、及び機能は単に例示であることを意図し、本発明の実施形態はそれらに限定されないことを予め理解されたい。図示されるように、以下の層及び対応する機能が提供される。
【００４０】
ハードウェア及びソフトウェア層６０は、ハードウェア及びソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例として、メインフレーム６１と、ＲＩＳＣ（Reduced Instruction Set Computer（縮小命令セット・コンピュータ））アーキテクチャ・ベースのサーバ６２と、サーバ６３と、ブレードセンタ６４と、ストレージ・デバイス６５と、ネットワーク及びネットワーク・コンポーネント６６とが含まれる。幾つかの実施形態において、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア６７及びデータベース・ソフトウェア６８を含む。
【００４１】
仮想化層７０は、抽象化層を提供し、この層により、仮想エンティティの以下の例、すなわち、仮想サーバ７１と、仮想ストレージ７２と、仮想プライベート・ネットワークを含む仮想ネットワーク７３と、仮想アプリケーション及びオペレーティング・システム７４と、仮想クライアント７５とが提供され得る。
【００４２】
一例において、管理層８０は、以下で説明される機能を提供することができる。リソース・プロビジョニング８１は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソース及び他のリソースの動的な調達を提供する。計量及び価格決定８２は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡と、これらのリソースの消費に対する課金又は請求とを提供する。一例においては、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウド・コンシューマ及びタスクに対する識別情報の検証と、データ及び他のリソースに対する保護とを提供する。ユーザ・ポータル８３は、コンシューマ及びシステム管理者のために、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理並びにサービス・レベル・アグリーメント（ＳＬＡ）計画及び履行８４は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソースの割り当て及び管理を提供する。サービス・レベル・アグリーメント（ＳＬＡ）計画及び履行は、それぞれＳＬＡに従って将来の要件が予想されるクラウド・コンピューティング・リソースの事前準備及び調達を提供する。学習エンジン８５は、本発明の実施形態による、有効グラム生成及び意思決定論理フレームワークを提供する。
【００４３】
作業負荷層９０は、クラウド・コンピューティング環境を利用できる機能の例を提供する。この層から提供され得る作業負荷及び機能の例として、マッピング及びナビゲーション９１、ソフトウェア・ライフサイクル管理９２、仮想教室教育配信９３、データ分析処理９４、トランザクション処理９５、及びソフトウェア・アプリケーション管理９６が挙げられる。
【００４４】
ローカル及び特定の要件を満たすために、当業者は、本開示に多くの論理的及び／又は物理的な修正及び改変を適用することができる。より具体的には、本発明は、本発明の１つ又は複数の実施形態を参照して、一定程度の特殊性をもって記載されてきたが、他の実施形態も同様に、形状及び詳細における様々な省略、置換及び変更が可能であることを理解されたい。特定的には、本発明の異なる実施形態は、その完全な理解を与えるために、先の説明中に記載された（数値などの）具体的な詳細なしに実施することさえでき、逆に、不必要な詳細で説明を曖昧にしないために、周知の特徴が省略又は簡略化されていることもある。さらに、本発明の任意の実施形態に関して記載される特定の要素及び／又は方法実行ステップは、一般的な設計上の選択の問題として、任意の他の実施形態中に組み込み得ることが明示的に意図される。いずれの場合も、各数値は、用語約（about）によって修正されるものと解釈すべきであり（既に行われていない限り）、各数値範囲（その端点を含む）は、範囲内の連続体に沿った任意の可能な数を明示的に指定することが意図される。さらに、序数又は他の修飾子は、単に、同じ名前を有する要素を区別するためのラベルとして用いられるに過ぎず、それ自体で何らかの優先度、優先順位、又は順番を暗示しない。含む（include）、備える（comprise）、有する（have）、包含する（contain）及び含む（involve）（並びにそれらの任意の形態）という用語は、オープンで非網羅的な意味を意図すべきである（すなわち、記述された項目に制限されない）。〜に基づく（based on）、〜に依存する（dependent on）、〜に従う（according to）、〜の関数である（function of）（及びそれらの任意の形態）という用語は、非排他的な関係（すなわち、可能なさらなる変数が含まれる）を意図すべきであり、１つ（a/an）という用語は、（明示的に別段の指定がない限り）１つ又は複数の項目を意図するべきであり、〜のための手段（means for）という用語（又は全てのミーンズ・プラス・ファンクション形式）は、関連関数を実行するように適合又は構成された任意の構造として意図すべきである。
【００４５】
例えば、実施形態は、ソフトウェア・アプリケーションを管理するための方法を提供する。しかしながら、ソフトウェア・アプリケーションは、任意のタイプのもの（例えば、クラウド・ソフトウェア・アプリケーション、標準的ソフトウェア・アプリケーション）とすることができる。
【００４６】
実施形態において、方法は、ソフトウェア・アプリケーションを、デフォルト・デプロイメント構成で、コンピューティング・システム上にデプロイすることを含む。しかしながら、ソフトウェア・アプリケーションは、任意の方法で（例えば、実行時に又はオフラインで構築されたその任意のデプロイメント・パッケージを用いて）任意のコンピューティング・システム上にデプロイすることができる（以下を参照）。
【００４７】
実施形態において、デフォルト・デプロイメント構成は、ソフトウェア・アプリケーションの複数の相互作用するソフトウェア・コンポーネントを含むことができる。しかしながら、ソフトウェア・コンポーネントは、任意の数及び任意のタイプのもの（例えば、サービス、モジュール、ライブラリ）とすることができる。
【００４８】
実施形態において、方法は、ソフトウェア・アプリケーションの実行環境の１つ又は複数の動作インジケータを監視することを含む。しかしながら、動作インジケータは、任意の数及び任意のタイプのもの（例えば、性能インジケータ、構成インジケータ、可用性インジケータ、又はその任意の組み合わせにおける任意の他のインジケータ）及び任意の形態のもの（例えば、数、レベル、フラグ）とすることができる。さらに、動作インジケータは、ソフトウェア・アプリケーションの実行環境に任意の方法で関連し得る（例えば、ソフトウェア・アプリケーションのソフトウェア・コンポーネント、ソフトウェア・コンポーネントが実行されるコンピューティング・マシン、ソフトウェア・コンポーネントの接続、任意の他の外部サービスに関して）。
【００４９】
実施形態において、方法は、ソフトウェア・アプリケーションの１つ又は複数の代替的デプロイメント構成の中から１つの選択された代替的デプロイメント構成を選択することを含む。しかしながら、選択された代替的デプロイメント構成は、任意の数の代替的デプロイメント構成の中から任意の方法で（例えば、分類アルゴリズム、ファジー論理技術を用いて）選択することができる。
【００５０】
実施形態において、選択された代替的デプロイメント構成は、動作インジケータに従った実行環境の危機的状況への移行に応答して選択される。しかしながら、危機的状況は、任意の方法で（例えば、動作インジケータの任意の組み合わせに従って）定めることができ、それへの移行は、任意の方法で（例えば、対応する条件が満たされるとすぐに、又はこれが２又はそれより多い監視時間持続した後のみ）検出され得る。
【００５１】
実施形態において、代替的デプロイメント構成の各々は、集約されて対応する集約されたソフトウェア・コンポーネントになるソフトウェア・コンポーネントの１つ又は複数のグループを有する。しかしながら、各代替的デプロイメント構成は、各々が任意の数のソフトウェア・コンポーネントを含む（代替的ソフトウェア・コンポーネントの全体にわたって同じ又は異なる）任意の数の集約されたソフトウェア・コンポーネントを有することができる。
【００５２】
実施形態において、方法は、ソフトウェア・アプリケーションを、選択された代替的デプロイメント構成で、コンピューティング・システム上に再デプロイすることを含む。しかしながら、ソフトウェア・アプリケーションは、任意の方法で（例えば、完全モード又は差動モードで）再デプロイされ得る。
【００５３】
実施形態において、方法は、動作インジケータに従って危機的状況から実行環境のデフォルト状況に戻ったことに応答して、ソフトウェアを、デフォルト・デプロイメント構成で、コンピューティング・システム上に再デプロイすることを含む。しかしながら、デフォルト状況は、任意の方法で（任意の数及びタイプの危機的状況の定義に従って）定めることができ、それへの移行は、任意の方法で（危機的状況への移行に関して同じ又は異なる）検出することができ、いずれの場合も、全て同じ方法で処理されるソフトウェア・アプリケーションのより一般的条件のうちの２つを定める可能性は排除されない。
【００５４】
実施形態において、ソフトウェア・アプリケーションは、複数のインスタンスにおいてデプロイされる。しかしながら、ソフトウェア・アプリケーションのインスタンスは、任意の方法で（例えば、任意の数及びタイプのデータセンタ又は任意の他のコンピューティング・システム上に）、任意の数で（１つに至るまで）デプロイすることができる。
【００５５】
実施形態において、ソフトウェア・アプリケーションの各インスタンスは、対応するソフトウェア・コンポーネント及び／又は集約されたソフトウェア・コンポーネントの１つ又は複数のインスタンスを含む。しかしながら、各々のソフトウェア・コンポーネント及び／又は集約されたソフトウェア・コンポーネントのインスタンスは、任意の方法で（例えば、任意の数及びタイプの仮想マシン又は任意の他のコンピューティング・マシン上に）及び任意の数で（１つに至るまで）デプロイすることができる。
【００５６】
実施形態において、ソフトウェア・コンポーネントは、対応するサービスを実施する。しかしながら、サービスは、任意のタイプのもの（例えば、標準的なマイクロ・サービス又はナノ・サービス）とすることができる。
【００５７】
実施形態において、ソフトウェア・アプリケーションは、サービスの各々の１又は複数の呼び出しを含む。しかしながら、サービスは、任意の回数及び任意の方法で（例えば、メッセージ、呼び出しを介して）呼び出すことができる。
【００５８】
実施形態において、グループの各々のソフトウェア・コンポーネントは、グループのソフトウェア・コンポーネントにより実施されるサービスの１又は複数の遠隔呼び出しを含む。しかしながら、遠隔呼び出しは、任意の数及び任意のタイプのもの（例えば、ＲＥＳＴｆｕｌ、ＳＯＡＰ）とすることができる。
【００５９】
実施形態において、各グループの対応する集約されたソフトウェア・コンポーネントは、遠隔呼び出しを対応するネイティブ呼び出しに置換する。しかしながら、ネイティブ呼び出しは、任意のタイプのもの（例えば、関数、プロシージャ）とすることができる。
【００６０】
実施形態において、集約されたソフトウェア・コンポーネントの各々は、対応するソフトウェア・コンポーネントのコードを組み込む。しかしながら、コードは、任意の方法で（例えば、対応する命令により、コードをコピーすることにより）組み込むことができ、いずれの場合も、そのコードを別個に（例えば、異なるファイルに）保持することにより、ソフトウェア・コンポーネントの機能を組み合わせて対応する集約されたソフトウェア・コンポーネントにする可能性は排除されない。
【００６１】
実施形態において、ソフトウェア・アプリケーションは、クラウド・ソフトウェア・アプリケーションである。しかしながら、クラウド・ソフトウェア・アプリケーションは、任意のタイプのもの（例えば、パブリック・タイプ、ハイブリッド・タイプ、プライベート・タイプの）とすることができる。
【００６２】
実施形態において、１つ又は複数の動作インジケータを監視することは、実行環境の１つ又は複数の性能インジケータ、構成インジケータ、及び／又は可用性インジケータを監視することを含む。しかしながら、異なる、付加的、代替的動作インジケータ、又はその組み合わせも可能である。
【００６３】
実施形態において、方法は、ソフトウェア・アプリケーションを複数の訓練デプロイメント構成（デフォルト・デプロイメント構成及び代替的デプロイメント構成を含む）でデプロイすることを含む。しかしながら、訓練デプロイメント構成は、任意の数及び任意のタイプのもの（デフォルト・デプロイメント構成及び代替的デプロイメント構成のみに至るまで）とすることができる。
【００６４】
実施形態において、訓練デプロイメント構成の各々は、異なる値の動作インジケータを有する複数の訓練環境上にデプロイされる。しかしながら、訓練環境は、任意の数及び任意のタイプのものとすることができる（例えば、任意の数及びタイプの動作インジケータを、物理的又は仮想的に任意の方法で変化させることにより）。
【００６５】
実施形態において、方法は、訓練環境の各々の訓練デプロイメント構成の各々におけるソフトウェア・アプリケーションの１つ又は複数の性能インジケータを測定することを含む。しかしながら、性能インジケータは、任意の数及び任意のタイプのもの（異なる、付加的、代替的インジケータ、又は可能なそれらの組み合わせと共に）及び任意の形態のもの（例えば、数、レベル、フラグ）とすることができる。
【００６６】
実施形態において、方法は、訓練環境の動作インジケータ及び訓練デプロイメント構成におけるソフトウェア・アプリケーションの対応する性能インジケータに従って、代替的デプロイメント構成を選択するための選択ポリシーを決定することを含む。しかしながら、選択ポリシーは、任意の方法で（例えば、決定木、ニュートラル・ネットワーク、多項式関数又は線形関数、ベイジアン・ネットワークにより）定めることができ、選択ポリシーは、任意の技術で（例えば、訓練例におけるノイズ又は偶然的な規則性に起因する過剰適合（over-fitting）を回避するために決定木を剪定する）及び任意の方法で（例えば、完全に又はインクリメンタルに周期的に）学習することができ、いずれの場合も、選択ポリシーを手動で事前定義する可能性は排除されない。
【００６７】
実施形態において、方法は、ソフトウェア・アプリケーションを、代替的デプロイメント構成のための複数の候補デプロイメント構成を含む訓練デプロイメント構成で、デプロイすることを含む。しかしながら、候補デプロイメント構成は、任意の数のものとすることができ、任意の方法で選択することができる（例えば、ソフトウェア・アプリケーションのソフトウェア・コンポーネントの全ての可能な集約に至るまで）。
【００６８】
実施形態において、方法は、訓練環境の動作インジケータ及び訓練デプロイメント構成におけるソフトウェア・アプリケーションの対応する性能インジケータに従って、候補デプロイメント構成の中から代替的デプロイメント構成を選択することを含む。しかしながら、代替的デプロイメント構成は、任意の方法で（例えば、機械学習技術を用いて）選択することができ、いずれの場合も、代替的デプロイメント構成を手動で事前定義する可能は排除されない。
【００６９】
実施形態において、ソフトウェア・コンポーネントの少なくとも一部はステートレスである。しかしながら、ステートレス・ソフトウェア・コンポーネントは、任意の数のもの（１つもなしから全てまで）とすることができる。
【００７０】
実施形態において、ソフトウェア・コンポーネントの少なくとも一部はステートフルである。しかしながら、ステートフル・ソフトウェア・コンポーネントは、任意の数のもの（１つもなしから全てまで）とすることができる。
【００７１】
実施形態において、方法は、ステートフル・ソフトウェア・コンポーネントのインスタンスの各々の第１のものについての以下のステップを含む。
【００７２】
実施形態において、この場合、方法は、ステートフル・ソフトウェア・コンポーネントの第１のインスタンスにより実施される任意のセッションの対応するセッション・データを、ステートフル・ソフトウェア・コンポーネントの第１のインスタンスがデプロイされるコンピューティング・システムの第１のコンピューティング・マシン上に保持することを含む。しかしながら、セッションは任意の数のものとすることができ、そのセッション・データは、任意のタイプのものとし、任意の方法で（例えば、共通ファイル、専用ファイル、データベースに）格納することができる。
【００７３】
実施形態において、この場合、方法は、セッション・データを、第１のコンピューティング・マシンとは異なるコンピューティング・システムの１つ又は複数のミラーリング・コンピューティング・マシン上にミラーリングすることを含む。しかしながら、セッション・データは、任意の数及びタイプの（仮想／物理）コンピューティング・マシン（例えば、制御仮想マシン、１つ又は複数の他の実行仮想マシン、１つ又は複数の専用マシン、又はその任意の組み合わせ）上にミラーリングすることができる。
【００７４】
実施形態において、この場合、方法は、セッション・データを、ミラーリング・コンピューティング・マシンの１つから、ソフトウェア・コンポーネントの第１のインスタンスからソフトウェア・コンポーネントの第２のインスタンスへのセッションへの移動に応答して、ステートフル・ソフトウェア・コンポーネントのインスタンスの第２のものがデプロイされるコンピューティング・システムの第２のコンピューティング・マシンにコピーすることを含む。しかしながら、ミラーリング・コンピューティング・マシンは、任意の方法で（例えば、任意の数及びタイプのパラメータに従って）選択することができる。いずれの場合も、ミラーリングされたセッション・データを用いる可能性は排除されない。
【００７５】
実施形態において、この場合、方法は、セッション・データを、ミラーリング・コンピューティング・マシンの１つから、ソフトウェア・コンポーネントの第１のインスタンスから集約されたソフトウェア・コンポーネントのインスタンスへの移動に応答して、ソフトウェア・コンポーネントの第１のインスタンスを含む集約されたソフトウェア・コンポーネントの１つのインスタンスがデプロイされるコンピューティング・システムの第３のコンピューティング・マシンにコピーすることを含む。しかしながら、ミラーリング・コンピューティング・マシンは、任意の方法で（上述の状況に対して同じ又は異なる）選択することができる。いずれの場合も、ミラーリングされたセッション・データを直接使用する可能性は排除されない。
【００７６】
一般に、同じ解決法が同等の方法により実施される（より多くの実行ステップ又はその部分の同じ機能を有する類似の実行ステップを用いること、本質的ではない幾つかの実行ステップを除去すること、又はさらなる随意的な実行ステップを付加することにより）場合、類似の考慮事項が適用される。さらに、実行ステップは、異なる順番で、同時に、又は交互に（少なくとも部分的に）実行され得る。
【００７７】
実施形態は、コンピューティング・システム上でコンピュータ・プログラムが実行されるとき、コンピューティング・システムに、上述の方法を実行させるように構成されたコンピュータ・プログラムを提供する。実施形態はコンピュータ・プログラム製品を提供し、コンピュータ・プログラム製品は、プログラム命令が具体化されたコンピュータ可読ストレージ媒体を含み、プログラム命令は、コンピューティング・システムに同じ方法を実行させるように、コンピューティング・システムにより実行可能である。しかしながら、コンピュータ・プログラムは、スタンドアロン・モジュールとして、既存のコンピュータ・プログラム用のプラグインとして（例えば、クラウド・マネージャ）実施すること、又は後者において直接実施することさえ可能である。さらに、コンピュータ・プログラムは、任意のコンピューティング・システム上で実行され得る（以下を参照されたい）。いずれの場合も、本発明の実施形態による解決法は、ハードウェア構造によって（例えば、半導体材料の１つ又は複数のチップ内に統合された電子回路により）、又は適切にプログラムされた若しくは他の方法で構成されたソフトウェア及びハードウェアの組み合わせによって実施されるのにも役立つ。
【００７８】
実施形態は、上述の方法の実行ステップの各々を実行するように構成された手段を含むシステムを提供する。実施形態は、同じ方法の実行ステップの各々を実行するように構成された回路（すなわち、例えば、ソフトウェアにより適切に構成された任意のハードウェア）を含むシステムを提供する。しかしながら、コンピューティング・システムは、任意の数及びタイプのコンピューティング・マシン（例えば、物理タイプ及び／又は仮想タイプの）を含むことができ、また、任意のアーキテクチャ（スタンドアロンの、又はいずれかのローカル、広域、グローバル、セルラー、若しくは衛星ネットワークを介して、又は任意のタイプの有線及び／又は無線接続を利用して、それらの間で通信するコンピューティング・マシンに分散された）を有することができる。
【００７９】
一般に、システムが異なる構造を有する場合、又は同等のソフトウェア・コンポーネントを含む場合、又は他の動作特性を有する場合、類似の考慮事項が適用される。いずれの場合も、そのあらゆるソフトウェア・コンポーネントを、より多くの要素に分離することができ、又は２つ又はそれより多いソフトウェア・コンポーネントを互いに組み合わせて単一の要素にすることができる。さらに、対応する動作の実行を並行してサポートするために、各ソフトウェア・コンポーネントを複製することができる。さらに、特段の定めがない限り、異なるソフトウェア・コンポーネントの間の双方向性は、一般に、連続的である必要はなく、かつ、直接的なものであっても、又は１又は複数の仲介者を通じた間接的なものであってもよい。
【００８０】
本発明は、統合のいずれかの可能な技術的詳細レベルにおける、システム、方法、及び／又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体（単数又は複数）を含むことができる。コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの：すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー・ディスク、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波（例えば、光ファイバ・ケーブルを通る光パルス）、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング／処理デバイスにダウンロードすることができ、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び／又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び／又はエッジ・サーバを含むことができる。各コンピューティング／処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体内に格納するためにコンピュータ可読プログラム命令を転送する。本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、又は、「Ｃ」プログラミング言語若しくは類似のプログラミング言語などの通常の手続き型プログラミング言語を含む１つ又は複数のプログラミング言語の任意の組み合わせで記述することができるいずれかのソースコード若しくはオブジェクトコードとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、スタンドアロン型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネットサービスプロバイダを用いたインターネットを通じて）。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、又はプログラム可能論理アレイ（ＰＬＡ）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を用いて電子回路を個別化することによりコンピュータ可読プログラム命令を実行し、本発明の態様を実施することができる。本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロック内で指定された機能／動作を実装するための手段を作り出すようにすることができる。これらのコンピュータ可読プログラム命令を、コンピュータ、プログラム可能データ処理装置、及び／又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、命令が内部に格納されたコンピュータ可読ストレージ媒体が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作の態様を実装する命令を含む製品を含むようにすることもできる。コンピュータ可読プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実装プロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するようにすることもできる。図面内のフローチャート及びブロック図は、本発明の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される２つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
【００８１】
本発明のコンピュータ・プログラム製品は、コンピュータ可読プログラム・コードがそこに格納された１つ又は複数のコンピュータ可読ハードウェア・ストレージ・デバイスを含み、このプログラム・コードは、本発明の方法を実施するために、１つ又は複数のプロセッサにより実行可能な命令を含む。
【００８２】
本発明のコンピューティング・システムは、１つ又は複数のプロセッサ、１つ又は複数のメモリ、及び１つ又は複数のコンピュータ可読ハードウェア・ストレージ・デバイスを含み、この１つ又は複数のハードウェア・ストレージ・デバイスは、本発明の方法を実施するために１つ又は複数のメモリを介して１つ又は複数のプロセッサにより実行可能なプログラム・コードを含む。
【００８３】
本発明の種々の実施形態の説明は、例証の目的のために提示されたが、これらは、網羅的であること、又は本発明を開示した実施形態に限定することを意図するものではない。当業者には、説明される実施形態の範囲及び趣旨から逸脱することなく、多くの修正及び変形が明らかであろう。本明細書で用いられる用語は、実施形態の原理、実際の適用、又は市場に見られる技術に優る技術的改善を最もよく説明するため、又は、当業者が、本明細書に開示される実施形態を理解するのを可能にするために選択された。
【符号の説明】
【００８４】
１０：コンピューティング・ノード
５０：クラウド・コンピューティング環境
１０５、３３５、３５０：ソフトウェア・アプリケーション
２００：コンピューティング・システム
２０５：通信ネットワーク
２１０：クライアント
２１５：サーバ
３００：ソフトウェア・コンポーネント
３０５：クリエータ
３１０：ソースコード・リポジトリ
３１５：ビルダ
３２０：デプロイメント・パッケージ・リポジトリ
３２５：コンフィギュレータ
３３０：デプロイヤ
３４０：学習者
３４５：決定木ファイル
３５５：モニタ
３６０：分析器
ＤＣ１〜ＤＣＭ：データセンタ
μＳ１〜μＳＮ：マイクロ・サービス
ＶＭ１〜ＶＭＭ：仮想マシン
【図１】
2021502622.tif 000005
【図２】
2021502622.tif 000006
【図３】
2021502622.tif 000007
【図４】
2021502622.tif 000008
【図５】
2021502622.tif 000009
【図６】
2021502622.tif 000010
【図７】
2021502622.tif 000011
【図８】
2021502622.tif 000012
【手続補正書】
【提出日】令和2年5月12日(2020.5.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ソフトウェア・アプリケーションをデプロイするための方法であって、前記方法は、
前記ソフトウェア・アプリケーションを、デフォルト・デプロイメント構成でコンピューティング・システム上にデプロイすることであって、前記デフォルト・デプロイメント構成は、前記ソフトウェア・アプリケーションの複数の相互作用するソフトウェア・コンポーネントを含む、デプロイすることと、
前記ソフトウェア・アプリケーションの実行環境の１つ又は複数の動作インジケータを監視することと、
監視された前記１つ又は複数の動作インジケータから、前記実行環境の危機的状況が存在することを確認することと、
前記確認することに応答して、前記ソフトウェア・アプリケーションの１つ又は複数の代替的デプロイメント構成から１つの代替的デプロイメント構成を選択することであって、各代替的デプロイメント構成は、集約されて対応する集約されたソフトウェア・コンポーネントになる前記ソフトウェア・コンポーネントの１つ又は複数のグループを有する、選択することと、
前記ソフトウェア・アプリケーションを、前記選択された代替的デプロイメント構成で前記コンピューティング・システム上に再デプロイすることと、
を含む、方法。
【請求項２】
前記動作インジケータに従って前記危機的状況から前記実行環境のデフォルト状況に戻ることに応答して、前記ソフトウェア・アプリケーションを、前記デフォルト・デプロイメント構成で前記コンピューティング・システム上に再デプロイすることを含む、請求項１に記載の方法。
【請求項３】
前記ソフトウェア・アプリケーションは、各々が前記対応する集約されたソフトウェア・コンポーネントの１つ又は複数のインスタンスを含む複数のインスタンスにおいてデプロイされる、請求項１に記載の方法。
【請求項４】
前記ソフトウェア・コンポーネントは、対応するサービスを実施し、前記ソフトウェア・アプリケーションは、前記対応するサービスの各サービスの１つ又は複数の呼び出しを含む、請求項１に記載の方法。
【請求項５】
各グループの前記ソフトウェア・コンポーネントは、前記グループの前記ソフトウェア・コンポーネントにより実施される前記サービスの１つ又は複数の遠隔呼び出しを含み、前記対応する集約されたソフトウェア・コンポーネントは、前記遠隔呼び出しを対応するネイティブ呼び出しに置換する、請求項４に記載の方法。
【請求項６】
前記集約されたソフトウェア・コンポーネントの各ソフトウェア・コンポーネントは、前記対応する集約されたソフトウェア・コンポーネントのコードを組み込む、請求項４に記載の方法。
【請求項７】
前記ソフトウェア・アプリケーションは、クラウド・ソフトウェア・アプリケーションである、請求項１に記載の方法。
【請求項８】
前記１つ又は複数の動作インジケータを監視することは、
前記実行環境の１つ又は複数の性能インジケータ、構成インジケータ、及び／又は可用性インジケータを監視することを含む、請求項１に記載の方法。
【請求項９】
前記方法は、
前記ソフトウェア・アプリケーションを、それぞれ前記デフォルト・デプロイメント構成及び前記代替的デプロイメント構成を含む複数の訓練デプロイメント構成で、異なる値の前記動作インジケータを有する複数のコンピューティング・システム上にデプロイすることと、
各訓練環境の各訓練デプロイメント構成における前記ソフトウェア・アプリケーションの１つ又は複数の性能インジケータを測定することと、
前記訓練環境の前記動作インジケータ及び前記訓練デプロイメント構成における前記ソフトウェア・アプリケーションの前記対応する性能インジケータに従って、前記代替的デプロイメント構成を選択するための選択ポリシーを決定することと、
を含む、請求項１に記載の方法。
【請求項１０】
前記方法は、
前記ソフトウェア・アプリケーションを、前記代替的デプロイメント構成に対する複数の候補デプロイメント構成を含む前記訓練デプロイメント構成でデプロイすることと、
前記訓練環境の前記動作インジケータ及び前記訓練デプロイメント構成における前記ソフトウェア・アプリケーションの前記対応する性能インジケータに従って、前記候補デプロイメント構成の中から前記代替的デプロイメント構成を選択することと、
を含む、請求項９に記載の方法。
【請求項１１】
前記ソフトウェア・コンポーネントの１つ又は複数のソフトウェア・コンポーネントはステートレスである、請求項１に記載の方法。
【請求項１２】
前記ソフトウェア・コンポーネントの前記１つ又は複数のソフトウェア・コンポーネントはステートフルであり、各々のステートフル・ソフトウェア・コンポーネントの前記インスタンスの各第１のインスタンスについて、前記方法は、
前記ステートフル・ソフトウェア・コンポーネントの前記第１のインスタンスにより実施される任意のセッションの対応するセッション・データを、前記ステートフル・ソフトウェア・コンポーネントの前記第１のインスタンスがデプロイされる前記コンピューティング・システムの第１のコンピューティング・マシン上に保持することと、
前記セッション・データを、前記第１のコンピューティング・マシンとは異なる前記コンピューティング・システムの１つ又は複数のミラーリング・コンピューティング・マシン上にミラーリングすることと、
前記セッション・データを、前記ミラーリング・コンピューティング・マシンの１つから前記コンピューティング・システムの第２のコンピューティング・マシンにコピーすることであって、前記ステートフル・ソフトウェア・コンポーネントの前記インスタンスの第２のインスタンスは、前記ソフトウェア・コンポーネントの前記第２のインスタンスへの移動に応答してデプロイされる、コピーすることと、
前記セッション・データを、前記ミラーリング・コンピューティング・マシンの１つから前記コンピューティング・システムの第３のコンピューティング・マシンへコピーすることであって、前記ソフトウェア・コンポーネントの前記第１のインスタンスを含む前記集約されたソフトウェア・コンポーネントの１つの驟雨役されたソフトウェア・コンポーネントのインスタンスは、前記ソフトウェア・コンポーネントの前記第１のインスタンスから前記１つの集約されたソフトウェア・コンポーネントの前記インスタンスへの移動に応答してデプロイされる、コピーすることと、
を含む、請求項３に記載の方法。
【請求項１３】
請求項１から請求項１２までのいずれか１項に記載の方法をコンピュータに実行させるコンピュータ・プログラム。
【請求項１４】
請求項１３に記載のコンピュータ・プログラムを格納したコンピュータ可読ストレージ媒体。
【請求項１５】
１つ又は複数のプロセッサ、１つ又は複数のメモリ、及び１つ又は複数のコンピュータ可読ハードウェア・ストレージ・デバイスを含むコンピュータ・システムであって、前記１つ又は複数のハードウェア・ストレージ・デバイスは、前記１つ又は複数のメモリを介して前記１つ又は複数のプロセッサにより実行可能なプログラム・コードを含み、前記プログラム・コードは、請求項１から請求項１２までのいずれか１項に記載の方法を前記１つ又は複数のプロセッサに行わせる、コンピュータ・システム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
本発明の実施形態は、ソフトウェア・アプリケーションをデプロイするための方法、並びに関連したコンピュータ・プログラム及びコンピュータ・システムを提供する。ソフトウェア・アプリケーションは、デフォルト・デプロイメント構成でコンピューティング・システム上にデプロイされ、このデフォルト・デプロイメント構成は、ソフトウェア・アプリケーションの複数の相互作用するソフトウェア・コンポーネントを含む。ソフトウェア・アプリケーションの実行環境の１つ又は複数の動作インジケータが監視される。監視された１つ又は複数の動作インジケータから、実行環境の危機的状況が存在することが確認される。危機的状況が存在すると確認されたことに応答して、ソフトウェア・アプリケーションの１つ又は複数の代替的デプロイメント構成から１つの代替的デプロイメント構成が選択され、各代替的デプロイメント構成は、集約されて対応する集約されたソフトウェア・コンポーネントになるソフトウェア・コンポーネントの１つ又は複数のグループを有する。ソフトウェア・アプリケーションは、選択された代替的デプロイメント構成で、コンピューティング・システム上に再デプロイされる。
【国際調査報告】
2021502622.tif 000013
2021502622.tif 000014