(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-09-06
(54)【発明の名称】実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行する方法及びシステム
(51)【国際特許分類】
G06F 9/46 20060101AFI20230830BHJP
G06F 9/455 20180101ALI20230830BHJP
【FI】
G06F9/46 420B
G06F9/455 150
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023503186
(86)(22)【出願日】2021-08-16
(85)【翻訳文提出日】2023-03-09
(86)【国際出願番号】 US2021046133
(87)【国際公開番号】W WO2022040082
(87)【国際公開日】2022-02-24
(32)【優先日】2020-08-17
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2021-06-16
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】523017431
【氏名又は名称】エクソタニウム,インコーポレイテッド
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】シェン,ジーミン
(72)【発明者】
【氏名】ウェザースプーン,ハキーム
(72)【発明者】
【氏名】バン レネッセ,ロベルト
(57)【要約】
実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行する方法は、第1のマシン上で実行中のコンテナエンジンによって、第1のマシン上でコンテナイメージをインスタンス化する命令を受信することを含む。コンテナエンジンは、第1のマシン上で実行中の修正コンテナランタイムプロセスに、第1のマシン上でコンテナイメージをインスタンス化する命令を送信する。修正コンテナランタイムプロセスは、第1のマシン上で、インスタンス化されたコンテナイメージを表すシムプロセスを生成する。シムプロセスは、命令を第2のマシン上で実行中のエージェントに、ネットワーク接続を介してエージェントに接続されたプロキシを介して転送する。エージェントは、コンテナ化されたプロセスとしてのコンテナイメージのインスタンス化を指示する。第1のマシン上で実行中のスケジューラコンポーネントが、コンテナ化されたプロセスを第3のマシンに移行することを決定する。スケジューラコンポーネントは、コンテナ化されたプロセスの実行中に、コンテナ化されたプロセスの第3のマシンへの移行を指示する。
【特許請求の範囲】
【請求項1】
実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行する方法であって、前記方法は、
第1のマシン上で実行中のコンテナエンジンによって、前記第1のマシン上でコンテナイメージをインスタンス化する命令を受信することと、
前記コンテナエンジンによって、前記第1のマシン上で実行中の修正コンテナランタイムプロセスに、前記第1のマシン上で前記コンテナイメージをインスタンス化する前記命令を送信することと、
前記修正コンテナランタイムプロセスによって、前記第1のマシン上で、前記インスタンス化されたコンテナイメージを表すシムプロセスを生成することと、
前記シムプロセスによって、第2のマシン上で実行中のエージェントに、前記命令を、ネットワーク接続を介して前記エージェントに接続されたプロキシを介して転送することと、
前記エージェントによって、コンテナ化されたプロセスとしての前記コンテナイメージのインスタンス化を指示することと、
前記第1のマシン上で実行中のスケジューラコンポーネントによって、前記コンテナ化されたプロセスを第3のマシンに移行することを決定することと、
前記スケジューラコンポーネントによって、前記コンテナ化されたプロセスの実行中に、前記コンテナ化されたプロセスの前記第3のマシンへの移行を指示することと、
を含む、方法。
【請求項2】
前記コンテナエンジンによって、前記第1のマシン上で前記コンテナイメージをインスタンス化する前記命令を受信することは、前記コンテナエンジンによって、前記第1のマシン上で実行中のコンテナ編成エンジンから、前記第1のマシン上で前記コンテナイメージをインスタンス化する前記命令を受信することをさらに含む、請求項1に記載の方法。
【請求項3】
前記スケジューラコンポーネントによって、前記第3のマシンが、前記第2のマシンによって提供される効率レベルよりも高い効率レベルで前記コンテナ化されたプロセスをホストするための機能を提供すると決定することをさらに含む、請求項1に記載の方法。
【請求項4】
前記スケジューラコンポーネントによって、前記第3のマシンが、前記第2のマシンによって提供される最適化のレベルよりも高い最適化のレベルで前記コンテナ化されたプロセスをホストするための機能を提供すると決定することをさらに含む、請求項1に記載の方法。
【請求項5】
実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行するためのシステムであって、
第1のマシン上で実行され、前記第1のマシン上でコンテナイメージをインスタンス化する命令を受信する、コンテナエンジンと、
前記第1のマシン上で実行され、前記コンテナエンジンから、前記第1のマシン上で前記コンテナイメージをインスタンス化する前記命令を受信する、修正コンテナランタイムプロセスと、
(i)前記インスタンス化されたコンテナイメージを表し、(ii)前記修正コンテナランタイムプロセスによって、前記第1のマシン上で前記コンテナイメージをインスタンス化する前記命令を受信することに応答して、前記修正コンテナランタイムプロセスによって前記第1のマシン上で生成され、(iii)プロキシを実行する、シムプロセスと、
(i)第2のマシン上で実行され、(ii)ネットワーク接続を介して前記第1のマシン上の前記プロキシに接続され、(iii)前記シムプロセスから前記プロキシを介して、前記第2のマシン上で前記コンテナイメージをインスタンス化する命令を受信し、(iv)コンテナ化されたプロセスとしての前記コンテナイメージのインスタンス化を指示する、エージェントと、
前記第1のマシン上で実行され、前記コンテナ化されたプロセスを第3のマシンに移行することを決定し、前記コンテナ化されたプロセスの実行中に、前記コンテナ化されたプロセスの前記第3のマシンへの移行を指示する、スケジューラコンポーネントと、
を含む、システム。
【請求項6】
前記第1のマシンは物理コンピューティングデバイスである、請求項5に記載のシステム。
【請求項7】
前記第1のマシンは仮想コンピューティングデバイスである、請求項5に記載のシステム。
【請求項8】
前記第2のマシンは物理コンピューティングデバイスである、請求項5に記載のシステム。
【請求項9】
前記第2のマシンは仮想コンピューティングデバイスである、請求項5に記載のシステム。
【請求項10】
前記コンテナイメージは専用カーネルを含む、請求項5に記載のシステム。
【請求項11】
前記コンテナイメージは、ユーザモードでライブラリとして実行される専用カーネルを含む、請求項5に記載のシステム。
【請求項12】
前記システムは、コンテナ編成エンジンをさらに含む、請求項5に記載のシステム。
【請求項13】
前記コンテナエンジンは、前記コンテナ編成エンジンから、前記第1のマシン上でコンテナイメージをインスタンス化する前記命令を受信するための機能をさらに含む、請求項12に記載のシステム。
【請求項14】
前記コンテナエンジンは、前記修正コンテナランタイムプロセスを実行する命令を受信するための機能をさらに含む、請求項5に記載のシステム。
【請求項15】
前記スケジューラコンポーネントは、前記第3のマシンが、前記第2のマシンによって提供される効率レベルよりも高い効率レベルで前記コンテナ化されたプロセスをホストするための機能を提供すると決定する、請求項5に記載のシステム。
【請求項16】
前記スケジューラコンポーネントは、前記第3のマシンが、前記第2のマシンによって提供される最適化のレベルよりも高い最適化のレベルで前記コンテナ化されたプロセスをホストするための機能を提供すると決定する、請求項5に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
背景
本開示は、コンテナ化されたプロセスをインスタンス化し移行する方法に関する。より詳細には、本明細書に記載の方法及びシステムは、実行中のコンテナ化されたプロセスをインスタンス化し、透過的に移行するための機能に関する。
【背景技術】
【0002】
実行中のプロセスを移行する必要がある。従来、実行中のプロセスは下層オペレーティングシステムに多くの依存関係があるため、プロセスが実行する間にプロセスを移行することは、不可能でないとしても困難である。この必要に対処するための1つの従来手法は、プロセスを実行し得る仮想マシンを提供し、プロセスが必要とするすべてのハードウェア及びソフトウェアリソースの仮想化を仮想マシンに含め、次いでプロセス全体を移行することである。しかしながら、従来手法は、通常、仮想マシン内で利用可能なリソースのすべてよりも少量を有する実行中のプロセスの透過的移行のための機能を提供しない。従来のコンテナランタイムプロセスは、従来のコンテナ化されたプロセス(それらはオペレーティングシステムカーネルを他のコンテナ化されたプロセスと共有するので、コンテナ内で利用可能なリソースのすべてよりも少量を有する)を移行し得るが、オペレーティングシステムカーネルを移行することはできず、オペレーティングシステムは他のプロセスと深く接続されているため透過的な方式で移行がなされ得ないので、その移行は通常、透過的ではなく、コンテナ化されたプロセスの実行中に「ライブ」でなされるものでもない。
【発明の概要】
【課題を解決するための手段】
【0003】
簡潔な概要
実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行する方法は、第1のマシン上で実行中のコンテナエンジンによって、第1のマシン上でコンテナイメージをインスタンス化する命令を受信することを含む。コンテナエンジンは、第1のマシン上で実行中の修正コンテナランタイムプロセスに、第1のマシン上でコンテナイメージをインスタンス化する命令を送信する。修正コンテナランタイムプロセスは、第1のマシン上で、インスタンス化されたコンテナイメージを表すシムプロセスを生成する。シムプロセスは、命令を第2のマシン上で実行中のエージェントに、ネットワーク接続を介してエージェントに接続されたプロキシを介して転送する。エージェントは、コンテナ化されたプロセスとしてのコンテナイメージのインスタンス化を指示する。第1のマシン上で実行中のスケジューラコンポーネントが、コンテナ化されたプロセスを第3のマシンに移行することを決定する。スケジューラコンポーネントは、コンテナ化されたプロセスの実行中に、コンテナ化されたプロセスの第3のマシンへの移行を指示する。
【0004】
図面の簡単な説明
本開示の前述及び他の目的、態様、特徴及び利点は、添付図面と併用される以下の説明を参照することによってより明らかになり、より良く理解されることになろう。
【図面の簡単な説明】
【0005】
【
図1A】実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行するためのシステムの一実施形態を描写するブロック図である。
【
図1B】実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行するためのシステムの一実施形態を描写するブロック図である。
【
図1C】実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行するためのシステムの一実施形態を描写するブロック図である。
【
図1D】実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行するためのシステムの一実施形態を描写するブロック図である。
【
図2】実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行する方法の一実施形態を描写する流れ図である。
【
図3A】本明細書に記載の方法及びシステムに関連して有用なコンピュータの実施形態を描写するブロック図である。
【
図3B】本明細書に記載の方法及びシステムに関連して有用なコンピュータの実施形態を描写するブロック図である。
【
図3C】本明細書に記載の方法及びシステムに関連して有用なコンピュータの実施形態を描写するブロック図である。
【発明を実施するための形態】
【0006】
詳細な説明
本明細書に記載の方法及びシステムは、コンテナ化されたプロセスの実行中に、実行中のコンテナ化されたプロセスをインスタンス化し、透過的に移行するための機能を提供し得る。
【0007】
ここで
図1Aを参照すると、ブロック図が、実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行するためのシステムの一実施形態を描写している。概要では、システム100は、コンテナエンジン103、修正コンテナランタイムプロセス105、シムプロセス107、プロキシ109、エージェント111、コンテナ113、ファイルシステム115a、ファイルシステム115b、ネットワークポート117a、ネットワークポート117b、コンテナ編成エンジン119、スケジューラコンポーネント121、コンピューティングデバイス106a、コンピューティングデバイス106b、及びコンピューティングデバイス106cを含む。
【0008】
コンピューティングデバイス106a~b(コンピューティングデバイス、計算、マシン、又はコンピュータと呼ばれる場合がある)は、本明細書に記載の機能を提供するための命令を実行するように修正された、修正タイプ又は形態のコンピューティングデバイス(
図3A~
図3Cに関連して以下により詳細に説明する)であってもよく、これらの修正は、プロセスをそれらのプロセスの実行中に移行する能力、より具体的には、実行中のコンテナ化されたプロセスをインスタンス化し、あるコンピューティングデバイスから別のコンピューティングデバイスに透過的に移行する能力など、コンピュータ技術に根ざした問題に対する技術的解決策を提供する新しいタイプのコンピューティングデバイスをもたらす。
【0009】
当業者には当然のことながら、マシン106a~cのそれぞれは、物理マシン又は仮想マシンであり得る。当業者には当然のことながら、マシン106bは、物理マシン又は仮想マシンであり得る。
【0010】
マシン106bは、コンテナイメージをコンテナ化されたプロセスとしてインスタンス化するための機能を含み得る。当業者には当然のことながら、従来のコンテナ(及びそれらの関連コンテナイメージ)は、ホストコンピューティングデバイスのカーネルを共有してコンテナ内のアプリケーションを走らせる。従来のコンテナは、通常、バイナリ、ライブラリ、及びランタイムコンポーネントのみを含み、分離は、プロセスレベルの分離と見なすことができる。したがって、従来、コンテナ化されたプロセスは、オペレーティングシステムカーネルへのアクセスを、同じマシン上で実行中の他のコンテナ化されたプロセスと共有するが、これは、1つのコンテナのセキュリティ脆弱性が他のすべてのコンテナを危険にさらす可能性があるので、通常、セキュリティリスクをもたらす。このリスクを管理するためのいくつかの手法には、極端に最小限の共有「エキソカーネル」を提供することと、そのコンテナが必要とするオペレーティングシステムリソースのみを含むようにその特定のコンテナ用に最適化された、プライベートなコンテナ固有のオペレーティングシステムカーネルを含むライブラリを各コンテナに提供することとが含まれる。したがって、本明細書に記載の方法及びシステムは、専用オペレーティングシステムカーネルを含む実行中のコンテナ化されたプロセスをインスタンス化し移行するための機能を提供する。本明細書に記載の方法及びシステムは、コンテナ化されたプロセスのアドレス空間に直接マッピングすることができるオペレーティングシステムカーネルをサポートするための機能を提供し得る。本明細書に記載の方法及びシステムは、分離のために独自のアドレス空間で個々に実行することができるオペレーティングシステムカーネルをサポートするための機能を提供し得る。
【0011】
各コンピューティングデバイス106は、サンドボックスを走らせることができる。コンピューティングデバイス106のいずれも、2つ以上のサンドボックスを走らせることができる。異なるサンドボックスが異なるネットワーク接続を有してもよい。異なるサンドボックスが異なるファイルシステムを有してもよい。異なるサンドボックスが同じネットワーク接続を有してもよい。異なるサンドボックスが同じファイルシステムを有してもよい。
【0012】
各コンピューティングデバイス106は、サンドボックスの代わりに、又はサンドボックスに加えて、仮想マシンを走らせることができる。
【0013】
各コンピューティングデバイス106は、プロセスのグループ又はバンドル、一緒に実行する2つ以上のプロセスを走らせることができる。
【0014】
各コンピューティングデバイス106は、専用オペレーティングシステム(OS)カーネルを用いて生成(spawn)されるコンテナ化されたプロセスを実行することができる。OSカーネルがコンテナ化されたプロセスから分離されたカーネルである場合、コンテナ化されたプロセスは仮想マシンであり、OSカーネルがプロセスのアドレス空間にマッピングされたライブラリとして走っている場合、そのようなOSカーネルは、「X-コンテナ」と呼ばれる場合がある。
【0015】
ここで
図1Cを参照すると、ブロック図が、Xコンテナプラットフォームがコンピューティングデバイス106bにインストールされ、第2のXコンテナプラットフォームがコンピューティングデバイス106cにインストールされる、システム100の一実施形態を描写しており、Xコンテナプラットフォームのそれぞれは、コンテナイメージをコンテナ化されたプロセスとしてインスタンス化するための機能を提供する。いくつかの実施形態では、Xコンテナプラットフォームは、コンテナ化されたプロセスをあるマシンから別のマシンに移行するための機能を提供する。Xコンテナプラットフォームは、オペレーティングシステムカーネルをライブラリとして走らせるためのサポートを提供することができる。
図1CではXコンテナプラットフォームとして描写されているが、当業者には理解されるように、及び上述したように、Xコンテナプラットフォームの代わりに仮想マシンが実行されてもよい。
【0016】
図1B及び
図1Cと併せて、
図1Aに戻って参照すると、コンテナエンジン103は、ソフトウェアコンポーネントとして提供されてもよい。コンテナエンジン103は、ハードウェアコンポーネントとして提供されてもよい。コンピューティングデバイス106aは、コンテナエンジン103を実行することができる。コンテナエンジン103は、コンテナイメージをインスタンス化する命令を受信し、コンテナイメージのインスタンス化を指示するための機能を提供することができる。コンテナエンジン103は、修正コンテナプロセス105を実行する命令を受信するための機能を提供することができる。
【0017】
コンテナイメージは、専用カーネルを含むコンテナイメージであってもよい。コンテナイメージは、ユーザモードでライブラリとして実行中の専用カーネルを含むコンテナイメージであってもよい。
【0018】
システム100は、任意選択でコンテナ編成エンジン119を含み得る。コンテナ編成エンジン119は、コンピューティングデバイス106a上で実行してもよい。コンテナ編成エンジン119は、コンピューティングデバイス106d(図示せず)上で実行してもよい。コンテナエンジン103は、コンテナ編成エンジン119と通信することができ、例えば、コンテナエンジン103は、コンテナ編成エンジン119からコンテナイメージをインスタンス化するための命令を受信することができる。
【0019】
システム100は、スケジューラコンポーネント121を含み得る。スケジューラコンポーネント121は、コンピューティングデバイス106a上で実行してもよい。スケジューラコンポーネント121は、コンピューティングデバイス106d(図示せず)上で実行してもよい。コンテナエンジン103は、スケジューラコンポーネント121と通信することができ、例えば、コンテナエンジン103は、コンテナ編成エンジン119から、コンテナ化されたプロセスをあるコンピューティングデバイスから別のコンピューティングデバイスに移行するための命令を受信することができる。
【0020】
修正コンテナランタイムプロセス105は、ソフトウェアコンポーネントとして提供されてもよい。修正コンテナランタイムプロセス105は、ハードウェアコンポーネントとして提供されてもよい。コンピューティングデバイス106aは、修正コンテナランタイムプロセス105を実行することができる。コンテナエンジン103は、修正コンテナランタイムプロセス105を実行することができる。コンテナエンジン103は、修正コンテナランタイムプロセス105を実行する命令を受信するための機能を含み得る。コンテナエンジン103は、従来の又はその他の未修整コンテナランタイムプロセス(図示せず)を実行する代わりに、修正コンテナランタイムプロセス105を実行する命令を受信するための機能を含み得る。修正コンテナランタイムプロセス105は、シムプロセス107と通信することができる。
【0021】
修正コンテナランタイムプロセス105は、コンテナエンジン103から、第1のマシン上でコンテナイメージをインスタンス化する命令を受信するための機能を含む。修正コンテナランタイムプロセス105は、シムプロセス107を生成するための機能を含む。修正コンテナランタイムプロセス105は、シムプロセス107を生成するアプリケーション・プログラミング・インタフェース(API)を呼び出すための機能を含み得る。
【0022】
シムプロセス107は、ソフトウェアコンポーネントとして提供されてもよい。シムプロセス107は、ハードウェアコンポーネントとして提供されてもよい。コンピューティングデバイス106aは、シムプロセス107を実行することができる。シムプロセス107は、インスタンス化されたコンテナイメージの表現を提供することができ、例えば、シムプロセス107は、インスタンス化されたコンテナイメージにデータを送信することを意図し、シムプロセス107がインスタンス化されたコンテナイメージではないことを認識していないコンポーネントからの通信を受信することができる。シムプロセス107は、コンテナエンジン103から命令を受信することができる。当業者は、シムプロセスが従来コンテナエンジンとランタイムプロセスとの間に置かれていることを理解するであろうが、本明細書に記載の方法及びシステムは、シムプロセス107の一部であり得るプロキシ109を介して、修正ランタイムプロセスとリモートマシン上のエージェントとの間の通信を提供するシムプロセスを実装する。
【0023】
当業者には当然のことながら、サンドボックスは、通常、少なくとも1つのコンテナ、少なくとも1つのコンテナと関連付けられたストレージリソース、及び一意のネットワーク識別情報をカプセル化する-サンドボックスは、少なくとも1つのコンテナ化されたアプリケーションのインスタンスと、少なくとも1つのコンテナ化されたアプリケーションが依存する少なくとも1つのリソースとをカプセル化することができる。しかしながら、
図1Aに示すように、本明細書に記載の方法及びシステムは、サンドボックスをホストするマシン106aとは異なるマシン106b上で実行するコンテナとサンドボックス内のコンポーネントを接続するための機能を提供することができる。
【0024】
シムプロセス107は、プロキシ109を通してエージェント111と接続することができる。マシン106b上で実行中のワーカデーモン(図示せず)が、マシン106a上で実行中の修正コンテナランタイム105によって送られた1つ又は複数のコマンドを実行する責任を負うことができる。修正コンテナランタイム105がマシン106a上に新しいサンドボックスを作成するとき、修正コンテナランタイム105は、エージェント111からの接続を待機するシムプロセス107を生成する。修正コンテナランタイム105は、マシン106aからマシン106b上のワーカデーモンにコマンドを送り、ネットワークの構成に関するメタデータ、ストレージの構成に関するメタデータ、及びエージェント111をシムプロセス107に接続する方法に関する情報を含む情報を提供する。内部管理ネットワーク上でマシン106aに接続され、マシン106a及びワーカデーモンからメッセージを受信することができるマシン106b上で実行中の仮想マシンは、メタデータを受信し、エージェント111を実行する。エージェント111は、メタデータを処理し、処理されたメタデータに基づいて、マシン106a上で走っているシムプロセス107とのネットワーク接続を確立する。シムプロセス107とエージェント111との間のそのようなネットワーク接続の確立により、たとえコンテナ化されたプロセス及び関連エージェント111の異なるマシン106nへの移行があるとしても、エージェント111及びシムプロセス107は、通信することが可能になる。
【0025】
プロキシ109は、ソフトウェアコンポーネントとして提供されてもよい。プロキシ109は、ハードウェアコンポーネントとして提供されてもよい。コンピューティングデバイス106aは、プロキシ109を実行することができる。プロキシ109は、コンピューティングデバイス106aのコンテナエンジン103とは別の部分で実行することができ、例えば、プロキシ109は、コンピューティングデバイス106a上のサンドボックス内で実行することができる。
図1Bに示すように、シムプロセス107は、プロキシ109を実行することができる(例えば、プロキシ109は、シムプロセス107の一部であり得る)。
図1Aに戻って参照すると、シムプロセス107は、プロキシ109と通信することができる。プロキシ109は、例えば、限定するものではないが、コンテナ化されたプロセスをあるコンピューティングデバイスから別のコンピューティングデバイスに移行する命令など、エージェント111と通信するための機能を含む。プロキシ109は、仮想化ネットワークを介してエージェント111と通信するための機能を含み得る。仮想化ネットワークは移行をサポートすることができる。
【0026】
エージェント111は、ソフトウェアコンポーネントとして提供されてもよい。エージェント111は、ハードウェアコンポーネントとして提供されてもよい。コンピューティングデバイス106bは、エージェント111を実行することができる。エージェント111は、仮想マシン内で実行するエージェントであってもよい。エージェント111は、移行をサポートする仮想化ネットワークを通してプロキシ109と通信するための機能を含み、例えば、エージェント111は、第2のコンピューティングデバイス106b上でコンテナイメージをインスタンス化する命令を受信するための機能を含み得る。エージェント111は、コンテナ化されたプロセスとしてのコンテナイメージのインスタンス化を指示するための機能を含み得る。エージェント111は、プロキシ109と通信するための機能を含む。エージェント111は、例えば、コンテナ化されたプロセスをコンピューティングデバイス106bからコンピューティングデバイス106cに(又はその他のコンピューティングデバイスに)移行する命令を受信するための機能を含み得る。エージェント111は、コンテナ化されたプロセスの実行中にコンテナ化されたプロセスを第3のコンピューティングデバイス106cに移行するための機能を含み得る。
【0027】
コンテナ編成エンジン119は、ソフトウェアコンポーネントとして提供されてもよい。コンテナ編成エンジン119は、ハードウェアコンポーネントとして提供されてもよい。コンピューティングデバイス106aは、コンテナ編成エンジン119を実行することができる。コンピューティングデバイス106d(図示せず)が、コンテナ編成エンジン119を実行してもよい。コンテナ編成エンジン119は、コンテナエンジン103と通信するための機能を含む。コンテナ編成エンジン119は、限定されないが、KUBERNETES、DOCKER SWARM、及びAPACHE MESOSによって提供されるものなどのコンテナ編成ツールであるか、又はこれを含み得る。
【0028】
スケジューラコンポーネント121は、ソフトウェアコンポーネントとして提供されてもよい。スケジューラコンポーネント121は、ハードウェアコンポーネントとして提供されてもよい。コンピューティングデバイス106aは、スケジューラコンポーネント121を実行することができる。コンピューティングデバイス106d(図示せず)が、スケジューラコンポーネント121を実行してもよい。スケジューラコンポーネント121は、コンテナエンジン103と通信するための機能を含む。スケジューラコンポーネント121は、移行を管理するための機能を提供することができる。スケジューラコンポーネント121は、システム100のステータスを監視することができる。スケジューラコンポーネント121は、1つ又は複数の仮想マシンの使用に対して請求される1つ又は複数の価格を監視することができる。スケジューラコンポーネント121は、1つ又は複数のポリシーに基づいて移行をトリガすることができる。ポリシーには、例として、コストの最適化、レイテンシの最小化、又は可用性の向上のためのポリシーが含まれる場合がある。
【0029】
議論を容易にするために、コンテナエンジン103、修正コンテナランタイムプロセス105、シムプロセス107、プロキシ109、エージェント111、コンテナ編成コンポーネント119、及びスケジューラコンポーネント121は、別個のモジュールとして
図1に説明されているが、これは、アーキテクチャを特定の実装に制限しないことを理解されたい。例えば、これらの構成要素の一部又はすべては、任意の組み合わせで、単一の回路若しくはソフトウェア機能によって包含されてもよく、又は、代替として、複数のコンピューティングデバイスにわたって分散されてもよい。
【0030】
ここで
図2を参照すると、概要で、流れ図が、実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行するための方法200の一実施形態を描写している。方法200は、第1のマシン上で実行中のコンテナエンジンによって、第1のマシン上でコンテナイメージをインスタンス化する命令を受信することを含む(202)。方法200は、コンテナエンジンによって、第1のマシン上で実行中の修正コンテナランタイムプロセスに、第1のマシン上でコンテナイメージをインスタンス化する命令を送信することを含む(204)。方法200は、修正コンテナランタイムプロセスによって、第1のマシン上で、インスタンス化されたコンテナイメージを表すシムプロセスを生成することを含む(206)。方法200は、シムプロセスによって、命令を第2のマシン上で実行中のエージェントに、ネットワーク接続を介してエージェントに接続されたプロキシを介して転送することを含む(208)。方法200は、第2のマシン上で実行中のエージェントによって、コンテナ化されたプロセスとしてのコンテナイメージのインスタンス化を指示することを含む(210)。方法200は、第1のマシン上で実行中のスケジューラコンポーネントによって、コンテナ化されたプロセスを第3のマシンに移行することを決定することを含む(212)。方法200は、スケジューラコンポーネントによって、コンテナ化されたプロセスの実行中に、コンテナ化されたプロセスの第3のマシンへの移行を指示することを含む(214)。
【0031】
ここで
図2をより詳細に、
図1に関連して参照すると、方法200は、第1のマシン上で実行中のコンテナエンジンによって、第1のマシン上でコンテナイメージをインスタンス化する命令を受信することを含み、コンテナイメージは専用カーネルを含む(202)。コンテナエンジン103は、コンテナ編成エンジン119から命令を受信することができる。
【0032】
方法200は、コンテナエンジンによって、第1のマシン上で実行中の修正コンテナランタイムプロセスに、第1のマシン上でコンテナイメージをインスタンス化する命令を送信することを含む(204)。修正コンテナランタイムプロセス105は、第1のマシン上でコンテナイメージをインスタンス化する命令を受信するが、最初にコンテナイメージをインスタンス化する命令をスケジューラコンポーネント121に送信して、実際の宛先マシンに関する命令を受信するように構成することができる。スケジューラコンポーネント121は、次に、コンテナイメージをどのマシン上でインスタンス化するかに関する命令を修正コンテナランタイムプロセス105に提供することができる-例えば、修正コンテナランタイムプロセス105は、コンテナエンジンからの命令を受信して、第1のマシン106a上でコンテナイメージをインスタンス化することができるが、スケジューラコンポーネント121は、(例えば、イメージをインスタンス化すべきマシンのインターネットプロトコル(IP)アドレスを提供することによって)第2のマシン106b上でコンテナイメージをインスタンス化するように修正コンテナランタイムプロセス105に命令することができ、修正コンテナランタイムプロセス105は、スケジューラコンポーネント121の命令を実行するように構成される。修正コンテナプロセス105は、スケジューラコンポーネント121によって識別されたマシン上で実行中のワーカデーモンと通信して、識別されたマシン上で仮想マシンを起動し、ネットワーク及びストレージを設定し、識別されたマシン上のエージェント111をマシン106a上のプロキシ109と接続する。その後、スケジューラコンポーネント121が、コンテナ化されたプロセス(そのコンテナ化されたプロセスの仮想マシン内のエージェント111を含む)を移行することを決定した場合、スケジューラコンポーネント121は、新しいワーカデーモンで新しいワーカマシン106を確立し(例えば、図示しない実行中のワーカマシン106dへの接続を確立するか、又はそのようなマシンの電源投入及び初期化を指示する)、ランタイムプロセス105を呼び出して実際の移行を行うことになる。
【0033】
方法200は、修正コンテナランタイムプロセスによって、第1のマシン上で、インスタンス化されたコンテナイメージを表すシムプロセスを生成することを含む(206)。インスタンス化された時点で、シムプロセス107は、コンテナエンジン103から直接命令を受信することができる。修正コンテナランタイムプロセス105は、エージェント111に接続するための命令をシムプロセス107に送信することができる。一例として、修正コンテナランタイムプロセス105は、エージェント111からの着信接続要求を期待するように、シムプロセス107に命令を送信することができる。修正コンテナランタイムプロセス105は、エージェント111に接続するための命令をプロキシ109に送信することができる。修正コンテナランタイムプロセス105は、マシン106bに命令を送信して、インスタンス化されたコンテナイメージが走ることになる仮想マシンでエージェント111を初期化するように命令することができ、そのような命令は、エージェント111がプロキシ109を介してシムプロセス107に接続するための命令を含むことができ、エージェント111がそのような接続を確立するために必要とされる接続情報を含むことができる。
【0034】
修正コンテナランタイムプロセス105は、プロキシ109の実行を開始することができる。代替として、シムプロセス107は、プロキシ109の実行を開始する。プロキシ109は、シムプロセス107が実行し始めるときに実行し始めるシムプロセス107の構成要素であってもよい。上述したように、プロキシ109は、せいぜいエージェントがプロキシと同じマシン上で実行する場合に限りエージェントに接続することができる従来のプロキシとは対照的に、リモートマシン上のエージェント111に接続するための機能を含む修正プロキシであってもよい。本明細書に記載の方法及びシステムは、プロキシ及びエージェントがネットワーク接続越しに通信することができるように、プロキシ及びエージェントの非干渉化を提供する。修正コンテナランタイムプロセス105は、第1のコンピューティングデバイス106a上のローカルファイルシステム115aと第2のコンピューティングデバイス106b上のリモートファイルシステム115bとの間のネットワーク接続を確立することができる。このようにして、コンテナ113が実行され、ファイルシステム115b内のデータに変更を加えるとき、ファイルシステム115aは、コンテナ113によってなされたすべてのデータ修正の最新バージョンを有する。システム100がコンテナ113を異なるマシン(例えば、第3のコンピューティングデバイス106c)に移行する場合、ファイルシステム115aは、コンテナ113によってアクセスされるすべてのデータの「真の」又は最新のコピーを保持する。同様に、修正コンテナランタイムプロセス105は、コンピューティングデバイス106a上のネットワークポートとコンピューティングデバイス106b上のネットワークポートとの間にネットワーク接続を確立し、コンピューティングデバイス106b上のネットワークポート117bに宛てられた命令をコンピューティングデバイス106a上のネットワークポート117aにルーティングすることができる。
【0035】
方法200は、シムプロセスによって、命令を第2のマシン上で実行中のエージェントに、ネットワーク接続を介してエージェントに接続されたプロキシを介して転送することを含む(208)。修正コンテナランタイムプロセス105は、シムプロセス107を実行する際にエージェント111とプロキシ109との間のネットワーク接続の確立のための命令を提供している場合がある。コンテナ化されたプロセス及びエージェント111が実行されるVM(ネットワークポート117b及びファイルシステム115bを含む)とコンピューティングデバイス106a上のシムプロセス107との間のネットワークの確立は、仮想マシンを異なるマシン106に移行した後でも各構成要素間の通信を有効にし、実行中のプロセスの透過的な移行を可能にすることができる。
【0036】
方法200は、第2のマシン上で実行中のエージェントによって、コンテナ化されたプロセスとしてのコンテナイメージのインスタンス化を指示することを含む(210)。コンテナ化されたプロセスが専用OSカーネルを含まない場合、システム100は、デフォルトのOSカーネルを提供することができる。
【0037】
方法200は、第1のマシン上で実行中のスケジューラコンポーネントによって、コンテナ化されたプロセスを第3のマシンに移行することを決定することを含む(212)。
【0038】
方法200は、スケジューラコンポーネントによって、コンテナ化されたプロセスの実行中に、コンテナ化されたプロセスの第3のマシンへの移行を指示することを含む(214)。コンテナ化されたプロセスの移行は、エージェント111の移行を含み得る。コンテナ化されたプロセスの移行は、コンテナ化されたプロセスと関連付けられた専用OSカーネルの移行を含み得る。いくつかの実施形態では、コンピューティングデバイス106b及びコンピューティングデバイス106cは、それぞれ仮想マシンを実行し、スケジューラコンポーネント121は、コンピューティングデバイス106b上の仮想マシンに、コンテナ113をコンピューティングデバイス106c上の仮想マシンに移行するように命令する。スケジューラコンポーネント121は、修正コンテナランタイムプロセス105に、コンピューティングデバイス106bとコンピューティングデバイス106cとの間の移行プロセスを実施するように命令することができる。コンピューティングデバイス106b上の仮想マシンは、コンテナ化されたプロセスを別のマシン上の仮想マシンに移行するための機能を含み得る。コンテナ化されたプロセスと同じ仮想化空間内のエージェント111は、マシン106a上のシムプロセス107及びそのプロキシ109とネットワークによって接続されているので、コンテナ化されたプロセスが別のマシン106cに移動したときでも、2つの構成要素は通信を維持することができるようになる。仮想マシンプラットフォームが、コンテナ化されたプロセスとエージェント111の両方が含まれているサンドボックスを移行するとき、(受信マシン106c上で現在実行中の)仮想マシンは、エージェント111とシムプロセス107との間の接続が透過的に維持されるように、ネットワークを再構成する。コンテナ化されたプロセスには、専用OSカーネル(ライブラリとして走るかどうかにかかわらず)があり、実行中のコンテナ化されたプロセスとともに移行する。コンテナ化されたプロセスの移行は、専用OSカーネル及びエージェント111を含む、コンテナ化されたプロセスが実行される仮想マシン全体の移行を含む。
図1Dに示すように、仮想マシンがコンピューティングデバイス106cに移行するとき、コンピューティングデバイス106a上のネットワーク、ファイルシステム、及びプロキシの間の接続は持続し、コンテナ化されたプロセスの実行は、実質的に中断されずに継続することができる。
【0039】
したがって、本明細書に記載の方法及びシステムは、コンテナ化されたプロセスがまだ実行されている間に、コンテナ化されたプロセスをインスタンス化し移行するための機能を提供する。この機能を使用するシナリオのほんの一例として、限定されないが、機能は、「ライトサイジング」又は垂直スケーリングを可能にすることができる。8つのプロセッサ及び2ギガバイトのメモリを有するコンテナイメージのインスタンスから始まり、システム100は、インスタンスが走っている間に、インスタンスが8つのプロセッサ及び100ギガバイトのメモリを提供するマシン上で直ちに走るように、又は逆に、インスタンスがインスタンス化された第1のマシン上で利用可能なリソースのすべてを必要としない場合、より少ないリソースを提供するマシン上で走るように、インスタンスを透過的に変更することができる。したがって、方法は、コンテナ化されたプロセスによるリソース使用状況を監視するステップと、リソースのより効率的な使用を提供するマシンを識別するステップとを含み得る。そのような実施形態では、本明細書に記載の方法及びシステムは、ワークロードが低いときに移行し、ユーザが必要としないマシン(物理又は仮想)の使用を排除するための機能を提供する。スケジューラコンポーネント121は、第3のコンピューティングデバイス106cが、例えば、第2のマシンによって提供される効率レベルよりも高い効率レベルでコンテナ化されたプロセスをホストするための機能を提供すると決定することができる。スケジューラコンポーネント121は、第3のコンピューティングデバイス106cが、例えば、第2のマシンによって提供される最適化のレベルよりも高い最適化のレベルでコンテナ化されたプロセスをホストするための機能を提供すると決定することができる。効率及び最適化の閾値レベルは、ユーザが指定することができる。
【0040】
いくつかの実施形態では、スケジューラコンポーネント121は、特定のコンテナ化されたプロセスに最適なマシンは、マシンの所有者が、最適なマシン上でコンテナ化されたプロセスを実行するために、異なるマシン上よりも少ない金銭をユーザに請求するマシンであると決定することができる。例えば、当業者であれば理解することになるように、1つのマシン(物理又は仮想)の所有者が、マシンの可用性の保証があるときに1つの価格でマシンを利用可能にし、マシンが利用可能のままになる保証がないときにより低価格でマシンを利用可能にする「スポット市場」が存在し、これは通常、マシンによって実行されるワークロードが任意の時点で終了させられることを許容できるときにのみ有用である。そのような実施形態では、本明細書に記載の方法及びシステムは、以前に利用可能であったマシンが(場合によってはほとんど又はまったく警告なく)もう利用可能でなくなることを示したときに移行するための機能を提供することができ、コンテナ化されたプロセスの移行は、コンテナ化されたプロセスの実行を停止することなく生じることができ、スポット市場をより多くの種類のワークロードにとって実行可能な選択肢にすることができる。本明細書に記載の方法及びシステムはまた、以前に第1の価格で利用可能であったマシンが、現在第1の価格よりも高い第2の価格で利用可能になったときに移行するための機能を提供することもできる。本明細書に記載の方法及びシステムはまた、第1のマシンを使用するための価格よりも低い第1の価格で第2のマシンが利用可能になったときに、第1のマシンから第2のマシンに移行するための機能を提供することもできる。
【0041】
いくつかの実施形態では、本明細書に記載の方法及びシステムは、両方のマシンが同じネットワークにある、及び/又は単一エンティティによって所有又は維持されている、1つのマシンから第2のマシンにだけでなく、ネットワークを越えて、第1のエンティティによって所有又は維持されるマシンから第2のエンティティによって所有又は維持されるマシンに(例えば、ある「クラウド」から別の「クラウド」に)コンテナ化されたプロセスを移行するための機能を提供する。すなわち、コンピューティングデバイス106bは、コンピューティングデバイス106cが存在するドメインとは異なるドメインに存在してもよく、各エンティティは、同じエンティティ又は異なるエンティティによって管理され得る。
【0042】
本明細書に記載の方法及びシステムは、高可用性のためにコンテナのレプリカ(又は「ホットバックアップ」)を維持するための機能を提供することができる。コンテナレプリカを維持するための機能は、複製すべきコンテナが実行されるサンドボックスを提供するコンピューティングデバイスに修正を要求する代わりに、透過的に実行することができる。スケジューラコンポーネント121は、コンテナ113のレプリカの生成を指示することができ、例えば、スケジューラコンポーネント121は、実行中のコンテナ113のレプリカを生成すべき時のスケジュールを指定することができる。コンピューティングデバイス106cは、レプリカコンテナ125を生成することができ、例えば、コンピューティングデバイス106c上で実行中のデーモンが、レプリカを生成することができる。実行中のコンテナ113又はコンピューティングデバイス106bがクラッシュするか、予期せず終了するか、又は他の状態で予期せず利用できなくなった場合、方法200は、コンテナエンジン103に透過的な方法で、現在利用できないコンテナ113の以前生成されたレプリカコンテナ125を実行することを含み得る。例として、プロキシ109は、コンテナ113が実行を中止したと決定することができ(例えば、コンテナ125が実行を継続すると期待された時に)、プロキシ109は、スケジューラコンポーネント121にアラートを送信することができる。スケジューラコンポーネント121は、コンテナ113と関連付けられた、以前生成されたコンテナレプリカ125を識別し、レプリカの実行を指示することができる。コンテナ125は、エージェント123で実行を開始し、エージェント123はプロキシ109との新しい接続を確立する。その後の元のコンテナ113との通信は、コンテナ125に切り替えられることになる。この切り替えは、コンテナエンジン103及びコンテナと通信する他の構成要素に対して透過的に起こる。
【0043】
同様に、本明細書に記載の方法及びシステムは、コンテナのチェックポイントを生成するための機能(例えば、上述の移行機能の「オフライン」バージョン)を提供することができる。当業者には当然のことながら、チェックポイントは、特定の時点におけるコンテナの状態をキャプチャすることができ、その後のある時点で、コンテナの状態を「ロールバック」して(例えば、変更を元に戻すことができる)、チェックポイントの生成時にコンテナがあった状態と一致させることができる。レプリカは、常に最新で、個別に実行することができるコンテナのバックアップであり得る(例えば、コンテナをそれが過去に有した状態にするために加える変更のリストではなく、レプリカは、オリジナルとは独立して実行することができるコンテナのコピーである)。いくつかの実施形態では、チェックポイントは、ディスク上(例えば、外部ストレージデバイス上を含む)に保存され、レプリカは、メモリに保存される。コンテナチェックポイントを生成するための機能は、アプリケーション自体又はコンテナエンジン103への修正を必要とせずに、透過的に実行することができる。スケジューラコンポーネント121は、コンテナ113のチェックポイントの生成(例えば、コンテナ113が実行されるコンピューティングデバイスによる)を指示することができ、例えば、スケジューラコンポーネント121は、実行中のコンテナ113のチェックポイントを生成すべき時のスケジュールを指定することができる。定期的な増分チェックポイントを行うことによって、例えば、インフラストラクチャ故障、仮想マシンクラッシュ、及び他の故障の場合、又はユーザがデバッグ若しくは保守目的でシステムを以前の状態にロールバックする必要があるときなど、事前警告がほとんど又はまったくない状態でチェックポイントが必要とされる場合でも、システムは、完全なチェックポイントが実行に利用できることを確実にする。レプリカの生成及び実行に関連して上述したように、スケジューラコンポーネント121は、実行中のコンテナに関する問題を示すアラートを受信し、実行中のコンテナと関連付けられたチェックポイントを識別し、コンテナのチェックポイントを復元して問題を訂正することができる。
【0044】
いくつかの実施形態では、システム100は、非一時的コンピュータ可読媒体上に有形に保存されたコンピュータプログラム命令を含む非一時的なコンピュータ可読媒体を含み、命令は、
図1A~
図1D及び
図2に関連して上述した各ステップを行うために少なくとも1つのプロセッサによって実行可能である。
【0045】
上述のシステムは、それらの構成要素のいずれか又はそれぞれの複数のものを提供することができ、これらの構成要素は、スタンドアロンのマシン、又はいくつかの実施形態では、分散システム内の複数のマシンのいずれかで提供され得ることを理解されたい。「一実施形態では」、「別の実施形態では」などの語句は、一般に、語句の後に続く特定の特徴、構造、ステップ、又は特性が、本開示の少なくとも1つの実施形態に含まれており、本開示の2つ以上の実施形態に含まれ得ることを意味する。このような語句は、同じ実施形態を指す場合があるが、必ずしもそうであるとは限らない。しかしながら、保護の範囲は、添付の特許請求の範囲によって定められ、本明細書で言及された実施形態は、例を提供する。
【0046】
本開示のさまざまな実施形態で使用される「A又はB」、「A又は/及びBの少なくとも1つ」、「A及びBの少なくとも1つ」、「A又はBの少なくとも1つ」、又は「A又は/及びBの1つ又は複数」という用語は、それとともに列挙される単語のありとあらゆる組み合わせを含む。例えば、「A又はB」、「A及びBの少なくとも1つ」又は「A又はBの少なくとも1つ」は、(1)少なくとも1つのAを含むこと、(2)少なくとも1つのBを含むこと、(3)A又はBのいずれかを含むこと、又は(4)少なくとも1つのA及び少なくとも1つのBの両方を含むことを意味し得る。
【0047】
上述のシステム及び方法は、ソフトウェア、ファームウェア、ハードウェア、又はそれらの任意の組み合わせを作り出すプログラミング及び/又はエンジニアリング技術を使用して、方法、装置、又は製品として実装され得る。上述の技術は、プロセッサ、プロセッサによって読み取り可能な記憶媒体(例えば、揮発性及び不揮発性メモリ及び/又は記憶要素を含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを含むプログラム可能なコンピュータ上で実行される1つ又は複数のコンピュータプログラムにおいて実装され得る。入力デバイスを使用して入力された入力にプログラムコードを適用して、説明した機能を行い、出力を生成することができる。出力は、1つ又は複数の出力デバイスに提供され得る。
【0048】
以下の特許請求の範囲内の各コンピュータプログラムは、アセンブリ言語、機械語、高水準手続き型プログラミング言語、又はオブジェクト指向プログラミング言語などの任意のプログラミング言語で実装することができる。プログラミング言語は、例えば、LISP、PROLOG、PERL、C、C++、C#、JAVA、Python、Rust、Go、又は任意のコンパイル型又はインタプリタ型プログラミング言語であり得る。
【0049】
そのような各コンピュータプログラムは、コンピュータプロセッサによる実行のために機械可読ストレージデバイスに有形に具現化されたコンピュータプログラム製品で実装され得る。方法ステップは、コンピュータ可読媒体上に有形に具現化されたプログラムを実行するコンピュータによって行われて、入力に作用し、出力を生成することによって、本明細書に記載の方法及びシステムの機能を行うことができる。適切なプロセッサには、例として、汎用マイクロプロセッサと専用マイクロプロセッサの両方が含まれる。一般に、プロセッサは、読み取り専用メモリ及び/又はランダムアクセスメモリから命令及びデータを受け取る。コンピュータプログラム命令を有形に具現化するのに適したストレージデバイスには、例えば、あらゆる形態のコンピュータ可読デバイス、ファームウェア、プログラマブルロジック、ハードウェア(例えば、集積回路チップ、電子デバイス、コンピュータ可読不揮発性ストレージユニット、EPROM、EEPROM、及びフラッシュメモリデバイスを含む半導体メモリデバイスなどの不揮発性メモリ、内蔵ハードディスク及びリムーバブルディスクなどの磁気ディスク、光磁気ディスク、及びCD-ROM)が含まれる。前述のいずれも、特別に設計されたASIC(特定用途向け集積回路)又はFPGA(フィールドプログラマブルゲートアレイ)によって補完し、又はこれに組み込むことができる。コンピュータは、一般に、内蔵ディスク(図示せず)又はリムーバブルディスクなどの記憶媒体からプログラム及びデータを受け取ることもできる。これらの要素はまた、従来のデスクトップ又はワークステーションコンピュータ、及び本明細書に記載の方法を実装するコンピュータプログラムを実行するのに適した他のコンピュータにも見られることになり、それらは、紙、フィルム、ディスプレイスクリーン、又は他の出力媒体上にカラー又はグレースケールピクセルを作り出すことができる任意のデジタル印刷エンジン若しくはマーキングエンジン、ディスプレイモニタ、又は他のラスタ出力デバイスと併せて使用することができる。コンピュータは、ネットワーク伝送線路、無線伝送媒体、空間を通って伝播する信号、電波、赤外線信号などを介して、プログラムへのアクセスを提供する第2のコンピュータから、プログラム及びデータ(例えば、非一時的コンピュータ可読媒体に保存するための命令を含む)を受信することもできる。
【0050】
ここで
図3A、
図3B、及び
図3Cを参照すると、ブロック図が、上述の方法及びシステムを実装するための新規で非自明の機能を実行するように修正され得るコンピューティングデバイスに関する追加の詳細を描写している。
【0051】
ここで
図3Aを参照すると、ネットワーク環境の一実施形態が描写されている。概要では、ネットワーク環境は、1つ又は複数のネットワーク304を介して1つ又は複数のリモートマシン306a~306n(一般に、サーバ306又はコンピューティングデバイス306とも呼ばれる)と通信する1つ又は複数のクライアント302a~302n(一般に、ローカルマシン302、クライアント302、クライアントノード302、クライアントマシン302、クライアントコンピュータ302、クライアントデバイス302、コンピューティングデバイス302、エンドポイント302又はエンドポイントノード302とも呼ばれる)を含む。
【0052】
図3Aは、クライアント302とリモートマシン306との間にネットワーク304を示しているが、クライアント302及びリモートマシン306は、同じネットワーク304上にあってもよい。ネットワーク304は、企業イントラネットなどのローカルエリアネットワーク(LAN)、メトロポリタンエリアネットワーク(MAN)、又はInternet若しくはWorld Wide Webなどのワイドエリアネットワーク(WAN)とすることができる。いくつかの実施形態では、クライアント302とリモートマシン306との間に複数のネットワーク304がある。これらの実施形態の1つでは、ネットワーク304’(図示せず)が私設ネットワークであってもよく、ネットワーク304が公衆ネットワークであってもよい。これらの実施形態の別のものでは、ネットワーク304が私設ネットワークであってもよく、ネットワーク304’が公衆ネットワークであってもよい。さらに別の実施形態では、ネットワーク304及び304’が両方とも私設ネットワークであってもよい。また別の実施形態では、ネットワーク304及び304’が両方とも公衆ネットワークであってもよい。
【0053】
ネットワーク304は、任意のタイプ及び/又は形態のネットワークであってもよく、以下のいずれかを含み得る。すなわち、ポイントツーポイントネットワーク、ブロードキャストネットワーク、ワイドエリアネットワーク、ローカルエリアネットワーク、電気通信ネットワーク、データ通信ネットワーク、コンピュータネットワーク、ATM(Asynchronous Transfer Mode)ネットワーク、SONET(Synchronous Optical Network)ネットワーク、SDH(Synchronous Digital Hierarchy)ネットワーク、無線ネットワーク、有線ネットワーク、Ethernet、仮想私設ネットワーク(VPN)、ソフトウェア確定ネットワーク(SDN)、AWS VPC(Virtual Private Cloud)ネットワーク又はAzure Virtual Network(VNet)などのクラウド内ネットワーク、及びRDMA(Remote Direct Memory Access)ネットワークである。いくつかの実施形態では、ネットワーク304は、赤外線チャネル又はサテライトバンドなどの無線リンクを含み得る。ネットワーク304のトポロジは、バス、スター、又はリングネットワークトポロジであってもよい。ネットワーク304は、本明細書に記載の動作をサポートすることができる、当業者に知られているような任意のそのようなネットワークトポロジであってもよい。ネットワークは、AMPS、TDMA、CDMA、GSM、GPRS、UMTS、又はLTEを含む、携帯機器(一般にタブレット及びハンドヘルド機器を含む)間で通信するために使用される1つ又は複数の任意のプロトコルを利用する携帯電話ネットワークを含み得る。いくつかの実施形態では、異なるプロトコルを介して異なるタイプのデータを伝送することができる。他の実施形態では、異なるプロトコルを介して同じタイプのデータを伝送することができる。
【0054】
クライアント302及びリモートマシン306(一般に、コンピューティングデバイス300又はマシン300と呼ばれる)は、任意のワークステーション、デスクトップコンピュータ、ラップトップ若しくはノートブックコンピュータ、サーバ、ポータブルコンピュータ、携帯電話、モバイルスマートフォン、若しくは他のポータブル通信デバイス、メディア再生デバイス、ゲームシステム、モバイルコンピューティングデバイス、又は、任意のタイプ及び形態のネットワーク上で通信することができ、本明細書に記載の動作を行うために十分なプロセッサパワー及びメモリ容量を有するその他のタイプ及び/又は形態のコンピューティング、電気通信若しくはメディアデバイスとすることができる。クライアント302は、アプリケーションを実行、操作、又は別の方法で提供することができ、このアプリケーションは、任意のタイプ及び/又は形態のソフトウェア、プログラム、又は実行可能な命令とすることができ、これには、限定されないが、任意のタイプ及び/又は形態のウェブブラウザ、ウェブベースのクライアント、クライアント-サーバアプリケーション、ActiveXコントロール、JAVAアプレット、ウェブサーバ、データベースHPC(高性能計算)アプリケーション、データ処理アプリケーション、又はクライアント302上で実行することができるその他のタイプ及び/又は形態の実行可能命令が含まれる。
【0055】
一実施形態では、コンピューティングデバイス306は、ウェブサーバの機能を提供する。ウェブサーバは、オープンソースウェブサーバであるウェブサーバ、専有ソフトウェアを実行するウェブサーバ、及びサードパーティがウェブサーバの機能を実行するハードウェアをホストするクラウドベースのウェブサーバを含む、任意のタイプのウェブサーバであり得る。いくつかの実施形態では、ウェブサーバ306は、DelawareのApacheソフトウェア財団(Apache Software Foundation)によって保守されるAPACHEサーバなどのオープンソースウェブサーバを含む。他の実施形態では、ウェブサーバは、WA、RedmondのMicrosoft Corporationによって提供されるINTERNET INFORMATION SERVICES製品、CA、Redwood ShoresのOracle Corporationによって提供されるORACLE IPLANETウェブサーバ製品、又はCA、Redwood ShoresのOracle Corporationによって提供されるORACLE WEBLOGIC製品などの専有ソフトウェアを実行する。
【0056】
いくつかの実施形態では、システムは、複数の、論理的にグループ化されたリモートマシン306を含み得る。これらの実施形態の1つでは、リモートマシンの論理グループは、サーバファーム338と呼ばれる場合がある。これらの実施形態の別のものでは、サーバファーム338は、単一エンティティとして運営することができる。
【0057】
当業者には当然のことながら、いくつかの実施形態では、コンピューティングデバイス300は、仮想化環境を提供することができる。そのような実施形態では、コンピューティングデバイス300は、ハイパーバイザ層、仮想化層、及びハードウェア層を含み得る。ハイパーバイザ層は、仮想化層で実行される少なくとも1つの仮想マシンによるハードウェア層のいくつかの物理リソース(例えば、プロセッサ及びディスク)へのアクセスを割り当て、管理するハイパーバイザを含む。仮想化層は、少なくとも1つのオペレーティングシステムと、少なくとも1つのオペレーティングシステムに割り当てられた複数の仮想リソースとを含む。仮想リソースには、限定されないが、複数の仮想プロセッサ及び仮想ディスク、並びに仮想メモリ及び仮想ネットワークインタフェースなどの仮想リソースが含まれてもよい。複数の仮想リソース及びオペレーティングシステムは、仮想マシンと呼ばれる場合がある。ハイパーバイザは、物理デバイスへのアクセスを有するオペレーティングシステムをシミュレートする任意の方法で、オペレーティングシステムに仮想リソースを提供することができる。ハイパーバイザは、任意の数のゲストオペレーティングシステムに仮想リソースを提供することができる。いくつかの実施形態では、コンピューティングデバイスは、1つ又は複数のタイプのハイパーバイザを実行する。これらの実施形態では、ハイパーバイザを使用して、仮想ハードウェアをエミュレートし、物理ハードウェアを分割し、物理ハードウェアを仮想化し、計算環境へのアクセスを提供する仮想マシンを実行することができる。ハイパーバイザには、California、Palo AltoのVMWare, Inc.によって製造されたもの、その開発がオープンソースXen.orgコミュニティによって監督されるオープンソース製品であるXENハイパーバイザ、その開発がオープンソースLinuxコミュニティによって監督されるオープンソース製品であるKVMハイパーバイザ、Microsoftによって提供されるHyperV、VirtualServer又は仮想PCハイパーバイザ、Amazon Nitro、Amazon Firecrackerなどが含まれる場合がある。いくつかの実施形態では、ゲストオペレーティングシステムが実行できる仮想マシンプラットフォームを作成するハイパーバイザを実行するコンピューティングデバイスは、ホストサーバと呼ばれる。いくつかの実施形態では、ハイパーバイザは、コンピューティングデバイス上で実行されるオペレーティングシステム内で実行される。これらの実施形態の1つでは、オペレーティングシステム及びハイパーバイザを実行するコンピューティングデバイスは、ホストオペレーティングシステム(コンピューティングデバイス上で実行されるオペレーティングシステム)、及びゲストオペレーティングシステム(ハイパーバイザによって提供されるコンピューティングリソースパーティション内で実行されるオペレーティングシステム)を有すると言うことができる。他の実施形態では、ハイパーバイザは、ホストオペレーティングシステム上で実行する代わりに、コンピューティングデバイス上のハードウェアと直接相互作用する。これらの実施形態の1つでは、ハイパーバイザは、コンピューティングデバイスを含むハードウェアを指す「ベアメタル」上で実行されていると言うことができる。いくつかの実施形態では、ハイパーバイザは、コンピューティングデバイス上で実行される仮想マシンのプロセッサスケジューリング及びメモリ分割を制御する。これらの実施形態の1つでは、ハイパーバイザは、少なくとも1つの仮想マシンの実行を制御する。これらの実施形態の別のものでは、ハイパーバイザは、コンピューティングデバイスによって提供される少なくとも1つのハードウェアリソースの抽象化を用いて、少なくとも1つの仮想マシンを提示する。他の実施形態では、ハイパーバイザは、物理プロセッサ能力が仮想マシンに提示されるかどうか、及びどのように提示されるかを制御する。一実施形態では、ゲストオペレーティングシステムは、それが実行される仮想マシンと併せて、それが仮想マシンであると認識していない完全に仮想化された仮想マシンを形成し、そのようなマシンは、「ドメインU HVM(ハードウェア仮想マシン(Hardware Virtual Machine))」と呼ばれる場合がある。別の実施形態では、完全仮想化マシンは、完全仮想化マシン内でオペレーティングシステムを実行するために、基本入出力システム(Basic Input/Output System)(BIOS)をエミュレートするソフトウェアを含む。さらに別の実施形態では、完全仮想化マシンは、ハイパーバイザと通信することによって機能を提供するドライバを含むことができ、そのような実施形態では、ドライバは通常、それが仮想化環境内で実行されることを認識している。別の実施形態では、ゲストオペレーティングシステムは、それが実行される仮想マシンと併せて、それが仮想マシンであると認識している準仮想化された仮想マシンを形成し、そのようなマシンは、「ドメインU PV仮想マシン」と呼ばれる場合がある。別の実施形態では、準仮想化マシンは、完全仮想化マシンが含まない追加のドライバを含む。
【0058】
図3B及び
図3Cは、クライアント302又はリモートマシン306の一実施形態を実践するのに有用なコンピューティングデバイス300のブロック図を描写している。
図3B及び
図3Cに示すように、各コンピューティングデバイス300は、中央処理装置321及びメインメモリユニット322を含む。
図3Bに示すように、コンピューティングデバイス300は、ストレージデバイス328、インストールデバイス316、ネットワークインタフェース318、I/Oコントローラ323、ディスプレイデバイス324a~n、キーボード326、マウスなどのポインティングデバイス327、及び1つ又は複数の他のI/Oデバイス330a~nを含み得る。ストレージデバイス328は、限定されないが、オペレーティングシステム及びソフトウェアを含み得る。
図3Cに示すように、各コンピューティングデバイス300は、メモリポート303、ブリッジ370、1つ又は複数の入出力デバイス330a~n(全体として参照符号330を使用して参照される)、及び中央処理装置321と通信するキャッシュメモリ340などの追加の任意選択要素も含み得る。
【0059】
中央処理装置321は、メインメモリユニット322からフェッチされた命令に応答して処理する任意の論理回路である。多くの実施形態では、中央処理装置321は、CA、Mountain ViewのIntel Corporationによって製造されたもの、IL、SchaumburgのMotorola Corporationによって製造されたもの、CA、Santa ClaraのTransmeta Corporationによって製造されたもの、NY、White PlainsのInternational Business Machinesによって製造されたもの、又はCA、SunnyvaleのAdvanced Micro Devicesによって製造されたものなどの、マイクロプロセッサユニットによって提供される。他の例には、RISC-Vプロセッサ、SPARCプロセッサ、ARMプロセッサ、UNIX/LINUXの「ホワイト」ボックスを構築するために使用されるプロセッサ、及び携帯機器用プロセッサが含まれる。コンピューティングデバイス300は、これらのプロセッサのいずれか、又は本明細書で説明したように動作可能なその他のプロセッサに基づくことができる。
【0060】
メインメモリユニット322は、データを保存することができ、任意の記憶場所をマイクロプロセッサ321が直接アクセスすることを可能にする、1つ又は複数のメモリチップであり得る。メインメモリ322は、本明細書で説明したように動作可能な任意の利用可能なメモリチップに基づくことができる。
図3Bに示す実施形態では、プロセッサ321は、システムバス350を介してメインメモリ322と通信する。
図3Cは、プロセッサがメモリポート303を介してメインメモリ322と直接通信するコンピューティングデバイス300の一実施形態を描写している。
図3Cはまた、メインプロセッサ321が、バックサイドバスと呼ばれることもあるセカンダリバスを介してキャッシュメモリ340と直接通信する実施形態も描写している。他の実施形態では、メインプロセッサ321は、システムバス350を使用してキャッシュメモリ340と通信する。
【0061】
図3Bに示す実施形態では、プロセッサ321は、ローカルシステムバス350を介してさまざまなI/Oデバイス330と通信する。中央処理装置321をI/Oデバイス330のいずれかに接続するために、VESA VLバス、ISAバス、EISAバス、MicroChannel Architecture(MCA)バス、PCIバス、PCI-Xバス、PCI-Expressバス、又はNuBusを含む、さまざまなバスを使用することができる。I/Oデバイスがビデオディスプレイ324である実施形態の場合には、プロセッサ321は、ディスプレイ324と通信するためにAdvanced Graphics Port(AGP)を使用することができる。
図3Cは、メインプロセッサ321が、例えば、HYPERTRANSPORT、RAPIDIO、又はINFINIBAND通信技術を介してI/Oデバイス330bとも直接通信するコンピューティングデバイス300の一実施形態を描写している。
【0062】
多種多様なI/Oデバイス330a~nのうちの1つ又は複数が、コンピューティングデバイス300に存在するか、又は接続されてもよく、それらのそれぞれは、同じ又は異なるタイプ及び/又は形態であってもよい。入力デバイスには、キーボード、マウス、トラックパッド、トラックボール、マイクロフォン、スキャナ、カメラ、及び描画タブレットが含まれる。出力デバイスには、ビデオディスプレイ、スピーカ、インクジェットプリンタ、レーザプリンタ、3Dプリンタ、及び昇華型プリンタが含まれる。I/Oデバイスは、
図3Bに示すように、I/Oコントローラ323によって制御され得る。さらにまた、I/Oデバイスは、コンピューティングデバイス300用のストレージ及び/又はインストール媒体316を提供することもできる。いくつかの実施形態では、コンピューティングデバイス300は、CA、Los AlamitosのTwintech Industry, Inc.によって製造されたデバイスのUSBフラッシュドライブラインなどのハンドヘルドUSBストレージデバイスを受け入れるUSB接続(図示せず)を提供することができる。
【0063】
図3Bをさらに参照すると、コンピューティングデバイス300は、3.5インチ、5.25インチディスク、若しくはZIPディスクなどのフロッピーディスクを受け入れるためのフロッピーディスクドライブ、CD-ROMドライブ、CD-R/RWドライブ、DVD-ROMドライブ、さまざまなフォーマットのテープドライブ、USBデバイス、ハードドライブ又はソフトウェア及びプログラムをインストールするのに適したその他のデバイスなどの、任意の適切なインストールデバイス316をサポートすることができる。いくつかの実施形態では、コンピューティングデバイス300は、ネットワーク304を通してソフトウェアをインストールするための機能を提供することができる。コンピューティングデバイス300は、オペレーティングシステム及び他のソフトウェアを保存するための、1つ又は複数のハードディスクドライブ又は独立したディスクの冗長アレイなどのストレージデバイスをさらに含み得る。代替として、コンピューティングデバイス300は、ハードディスクの代わりにストレージ用のメモリチップに依拠することができる。
【0064】
さらにまた、コンピューティングデバイス300は、標準電話回線、LAN又はWANリンク(例えば、802.11、T1、T3、56kb、X.25、SNA、DECNET、RDMA)、ブロードバンド接続(例えば、ISDN、Frame Relay、ATM、Gigabit Ethernet、Ethernet-over-SONET)、無線接続、仮想私設ネットワーク(VPN)接続、又は上記のいずれか若しくはすべての何らかの組み合わせを含むがこれらに限定されない、さまざまな接続を通してネットワーク304にインタフェースするネットワークインタフェース318を含み得る。接続は、さまざまな通信プロトコル(例えば、TCP/IP、IPX、SPX、NetBIOS、Ethernet、ARCNET、SONET、SDH、Fiber Distributed Data Interface(FDDI)、RS232、IEEE802.11、IEEE802.11a、IEEE802.11b、IEEE802.11g、IEEE802.11n、802.15.4、Bluetooth、ZIGBEE、CDMA、GSM、WiMax、及び直接非同期接続)を使用して確立することができる。一実施形態では、コンピューティングデバイス300は、GRE、VXLAN、IPIP、SIT、ip6tnl、VTI及びVTI6、IP6GRE、FOU、GUE、GENEVE、ERSPAN、Secure Socket Layer(SSL)又はTransport Layer Security(TLS)などの、任意のタイプ及び/又は形態のゲートウェイ又はトンネリングプロトコルを介して他のコンピューティングデバイス300’と通信する。ネットワークインタフェース318は、組み込みネットワークアダプタ、ネットワークインタフェースカード、PCMCIAネットワークカード、カードバスネットワークアダプタ、無線ネットワークアダプタ、USBネットワークアダプタ、モデム、又はコンピューティングデバイス300を通信可能な任意のタイプのネットワークにインタフェースして本明細書に記載の動作を行うのに適したその他のデバイスを含み得る。
【0065】
さらなる実施形態では、I/Oデバイス330は、システムバス350と、USBバス、Apple Desktop Bus、RS-232シリアル接続、SCSIバス、FireWireバス、FireWire 800バス、Ethernetバス、AppleTalkバス、Gigabit Ethernetバス、Asynchronous Transfer Modeバス、HIPPIバス、Super HIPPIバス、SerialPlusバス、SCI/LAMPバス、FibreChannelバス、又はSerial Attached小型コンピュータシステムインタフェースバスなどの外部通信バスとの間のブリッジであってもよい。
【0066】
図3B及び
図3Cに描写された種類のコンピューティングデバイス300は、通常、タスクのスケジューリング及びシステムリソースへのアクセスを制御するオペレーティングシステムの制御下で動作する。コンピューティングデバイス300は、MICROSOFT WINDOWSオペレーティングシステムのバージョンのいずれか、UNIX及びLINUXオペレーティングシステムの異なるリリース、Macintoshコンピュータ用のMAC OSの任意のバージョン、任意の組み込みオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専有オペレーティングシステム、モバイルコンピューティングデバイス用の任意のオペレーティングシステム、又はコンピューティングデバイス上で走り、本明細書に記載の動作を行うことができるその他のオペレーティングシステムなどの、任意のオペレーティングシステムを走らせていてもよい。典型的なオペレーティングシステムには、とりわけ、そのすべてがWA、RedmondのMicrosoft Corporationによって製造されているWINDOWS 3.x、WINDOWS 95、WINDOWS 98、WINDOWS 2000、WINDOWS NT 3.51、WINDOWS NT 4.0、WINDOWS CE、WINDOWS XP、WINDOWS 7、WINDOWS 8、WINDOWS VISTA、及びWINDOWS 10、CA、CupertinoのApple Inc.によって製造されたMAC OS、NY、ArmonkのInternational Business Machinesによって製造されたOS/2、NC、RaleighのRed Hat, Inc.によって配布されるLinux変形オペレーティングシステムであるRed Hat Enterprise Linux、England、LondonのCanonical Ltd.によって配布される自由に利用可能なオペレーティングシステムであるUbuntu、centos.orgコミュニティによって配布される自由に利用可能なオペレーティングシステムであるCentOS、SUSEによって配布される自由に利用可能なオペレーティングシステムであるSUSE Linux、又は任意のタイプ及び/又は形態のUnixオペレーティングシステムが含まれるが、これらに限定されない。
【0067】
実行中のコンテナ化されたプロセスをインスタンス化し透過的に移行する方法及びシステムのある特定の実施形態について説明したが、当業者には、本開示の概念を組み込んだ他の実施形態が使用され得ることが明らかであろう。
【国際調査報告】