(57)【要約】  ソフトウェアコンテナのライブマイグレーションを実施するための開示されるコンピュータ実装方法は、（ｉ）ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求をプロセスがソフトウェアコンテナ内で実行されている間に識別することと、（ｉｉ）実行中のプロセスのチェックポイントを作成することと、（ｉｉｉ）チェックポイントをターゲットコンピューティングシステムに転送することと、（ｉｖ）プロセスの増分チェックポイントを再帰的に作成し、増分チェックポイントをチェックポイントにマージすることによって、チェックポイントを再帰的に更新することと、（ｖ）増分チェックポイントのイテレーションでチェックポイントを更新する前に、増分チェックポイントのイテレーションのサイズに基づいて、ターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることが所定の時間目標を満たすことを予測することと、（ｖｉ）ターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることと、を含み得る。様々な別の方法、システム、及びコンピュータ可読媒体もまた開示される。
2019530072.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアコンテナのライブマイグレーションを実施するためのコンピュータ実装方法であって、前記方法の少なくとも一部分は、少なくとも１つのプロセッサを備えるコンピューティングデバイスによって実施され、前記方法は、
ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求を少なくとも１つのプロセスが前記ソフトウェアコンテナ内で実行されている間に識別することと、
前記要求に応じて、前記実行中のプロセスのチェックポイントを作成することであって、前記チェックポイントが、前記実行中のプロセスの状態の表現を含む、ことと、
前記チェックポイントを前記ターゲットコンピューティングシステムに転送することと、
前記実行中のプロセスの増分チェックポイントを再帰的に作成し、前記増分チェックポイントを前記ターゲットコンピューティングシステムに転送し、前記増分チェックポイントを前記チェックポイントにマージすることによって、前記チェックポイントを再帰的に更新することと、
前記増分チェックポイントのイテレーションで前記チェックポイントを更新する前に、前記増分チェックポイントの前記イテレーションのサイズに基づいて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナのマイグレーションをファイナライズすることを含むタスクが所定の時間目標を満たすことを予測することと、
前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズすることが前記所定の時間目標を満たすことを予測したことに応じて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージした後、前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズすることと、を含む、コンピュータ実装方法。
【請求項２】
前記増分チェックポイントの直近のイテレーションのサイズが所定の閾値を超えていることを判定することと、
前記チェックポイントの前記直近のイテレーションの前記サイズが前記所定の閾値を超えていることを判定したことに応じて、前記増分チェックポイントのほとんどのイテレーションを破棄し、新しい完全バージョンの前記チェックポイントを再作成することと、
前記新しい完全バージョンの前記チェックポイントを前記ターゲットコンピューティングシステムに転送して前記チェックポイントを置換することと、を更に含む、請求項１に記載のコンピュータ実装方法。
【請求項３】
前記ソフトウェアコンテナに対してコンピューティングリソースへのアクセスを縮小し、それにより、前記増分チェックポイントの前記イテレーションの最大サイズを減少させ、前記タスクが前記所定の時間目標を満たすことを可能にすることによって、前記ソフトウェアコンテナを前記ソースコンピューティングシステムにおいてスロットリングすることを更に含む、請求項１に記載のコンピュータ実装方法。
【請求項４】
前記チェックポイントが、
前記プロセスのアプリケーションメモリの状態と、
前記プロセスのプロセスハンドルと、
前記プロセスによって保持されているファイルハンドルと、
前記プロセスによって保持されているソケットと、のうちの少なくとも１つの記憶された表現を含む、請求項１に記載のコンピュータ実装方法。
【請求項５】
前記ソフトウェアコンテナは、前記ソフトウェアコンテナ内で実行している前記プロセスが、前記ソフトウェアコンテナをホストしているオペレーティングシステムに対してシステムコールを実施する、サンドボックス化された環境を含む、請求項１に記載のコンピュータ実装方法。
【請求項６】
前記増分チェックポイントが、前記プロセスの現在の状態と直近の前のバージョンの前記チェックポイントとの間の差異の表現を含む、請求項１に記載のコンピュータ実装方法。
【請求項７】
前記マイグレーションをファイナライズすることが、
前記チェックポイントを前記ターゲットコンピューティングシステムにある新しいソフトウェアコンテナに復元することと、
前記ソースコンピューティングシステムにある前記ソフトウェアコンテナを指し示す代わりに、前記ターゲットコンピューティングシステムにある前記新しいソフトウェアコンテナを指し示すように、通信経路をリダイレクトすることと、を含む、請求項１に記載のコンピュータ実装方法。
【請求項８】
前記通信経路をリダイレクトすることが、ソフトウェア定義型ネットワーク内で、これまで前記ソースコンピューティングシステムにある前記ソフトウェアコンテナに割り当てられていたインターネットプロトコルアドレスを前記ターゲットコンピューティングシステムにある前記新しいソフトウェアコンテナに再割り当てすることを含む、請求項７に記載のコンピュータ実装方法。
【請求項９】
前記ソフトウェアコンテナの前記マイグレーションは、クライアントシステムが前記ソースコンピューティングシステムにある前記プロセスと通信することから始まり、前記クライアントシステムが前記ターゲットコンピューティングシステムにある前記プロセスと通信することで終わる、前記クライアントシステムとのステートフルなセッションを維持する前記プロセスを含む、請求項１に記載のコンピュータ実装方法。
【請求項１０】
ソフトウェアコンテナのライブマイグレーションを実施するためのシステムであって、前記システムは、
ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求を少なくとも１つのプロセスが前記ソフトウェアコンテナ内で実行されている間に識別する、メモリ内に記憶されている、識別モジュールと、
前記要求に応じて、前記実行中のプロセスのチェックポイントを作成する、メモリ内に記憶されている、作成モジュールであって、前記チェックポイントが、前記実行中のプロセスの状態の表現を含む、作成モジュールと、
前記チェックポイントを前記ターゲットコンピューティングシステムに転送する、メモリ内に記憶されている、転送モジュールと、
前記実行中のプロセスの増分チェックポイントを再帰的に作成し、前記増分チェックポイントを前記ターゲットコンピューティングシステムに転送することによって前記チェックポイントを再帰的に更新し、前記増分チェックポイントを前記チェックポイントにマージする、メモリ内に記憶されている、更新モジュールと、
前記増分チェックポイントのイテレーションで前記チェックポイントを更新する前に、前記増分チェックポイントの前記イテレーションのサイズに基づいて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナのマイグレーションをファイナライズすることを含むタスクが所定の時間目標を満たすことを予測する、メモリ内に記憶されている、予測モジュールと、
前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズすることが前記所定の時間目標を満たすことを予測したことに応じて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージした後、前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズする、メモリ内に記憶されている、ファイナライズモジュールと、
前記識別モジュール、前記作成モジュール、前記転送モジュール、前記更新モジュール、前記予測モジュール、及び前記ファイナライズモジュールを実行するように構成されている少なくとも１つの物理プロセッサと、を含む、システム。
【請求項１１】
前記更新モジュールが更に、
前記増分チェックポイントの直近のイテレーションのサイズが所定の閾値を超えていることを判定し、
前記チェックポイントの前記直近のイテレーションの前記サイズが前記所定の閾値を超えていることを判定したことに応じて、前記増分チェックポイントのほとんどのイテレーションを破棄し、新しい完全バージョンの前記チェックポイントを再作成し、
前記新しい完全バージョンの前記チェックポイントを前記ターゲットコンピューティングシステムに転送して前記チェックポイントを置換する、請求項１０に記載のシステム。
【請求項１２】
前記予測モジュールが更に、前記ソフトウェアコンテナに対してコンピューティングリソースへのアクセスを縮小し、それにより、前記増分チェックポイントの前記イテレーションの最大サイズを減少させ、前記タスクが前記所定の時間目標を満たすことを可能にすることによって、前記ソフトウェアコンテナを前記ソースコンピューティングシステムにおいてスロットリングする、請求項１０に記載のシステム。
【請求項１３】
前記チェックポイントが、
前記プロセスのアプリケーションメモリの状態と、
前記プロセスのプロセスハンドルと、
前記プロセスによって保持されているファイルハンドルと、
前記プロセスによって保持されているソケットと、のうちの少なくとも１つの記憶された表現を含む、請求項１０に記載のシステム。
【請求項１４】
前記ソフトウェアコンテナは、前記ソフトウェアコンテナ内で実行している前記プロセスが、前記ソフトウェアコンテナをホストしているオペレーティングシステムに対してシステムコールを実施する、サンドボックス化された環境を含む、請求項１０に記載のシステム。
【請求項１５】
前記増分チェックポイントが、前記プロセスの現在の状態と直近の前のバージョンの前記チェックポイントとの間の差異の表現を含む、請求項１０に記載のシステム。
【請求項１６】
前記ファイナライズモジュールが、
前記チェックポイントを前記ターゲットコンピューティングシステムにある新しいソフトウェアコンテナに復元することと、
前記ソースコンピューティングシステムにある前記ソフトウェアコンテナを指し示す代わりに、前記ターゲットコンピューティングシステムにある前記新しいソフトウェアコンテナを指し示すように、通信経路をリダイレクトすることと、によって前記マイグレーションをファイナライズする、請求項１０に記載のシステム。
【請求項１７】
前記ファイナライズモジュールが、ソフトウェア定義型ネットワーク内で、これまで前記ソースコンピューティングシステムにある前記ソフトウェアコンテナに割り当てられていたインターネットプロトコルアドレスを前記ターゲットコンピューティングシステムにある前記新しいソフトウェアコンテナに再割り当てすることによって、前記通信経路をリダイレクトする、請求項１６に記載のシステム。
【請求項１８】
前記ソフトウェアコンテナの前記マイグレーションは、クライアントシステムが前記ソースコンピューティングシステムにある前記プロセスと通信することから始まり、前記クライアントシステムが前記ターゲットコンピューティングシステムにある前記プロセスと通信することで終わる、前記クライアントシステムとのステートフルなセッションを維持する前記プロセスを含む、請求項１０に記載のシステム。
【請求項１９】
１つ以上のコンピュータ可読命令を含む非一過性コンピュータ可読媒体であって、前記命令が、コンピューティングデバイスの少なくとも１つのプロセッサによって実行されるとき、前記コンピューティングデバイスに、
ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求を少なくとも１つのプロセスが前記ソフトウェアコンテナ内で実行されている間に識別させ、
前記要求に応じて、前記実行中のプロセスのチェックポイントを作成させ、前記チェックポイントが、前記実行中のプロセスの状態の表現を含み、
前記チェックポイントを前記ターゲットコンピューティングシステムに転送させ、
前記実行中のプロセスの増分チェックポイントを再帰的に作成し、前記増分チェックポイントを前記ターゲットコンピューティングシステムに転送し、前記増分チェックポイントを前記チェックポイントにマージすることによって、前記チェックポイントを再帰的に更新させ、
前記増分チェックポイントのイテレーションで前記チェックポイントを更新する前に、前記増分チェックポイントの前記イテレーションのサイズに基づいて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナのマイグレーションをファイナライズすることを含むタスクが所定の時間目標を満たすことを予測させ、
前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズすることが前記所定の時間目標を満たすことを予測したことに応じて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージした後、前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズさせる、非一過性コンピュータ可読媒体。
【請求項２０】
前記１つ以上のコンピュータ可読命令が更に、前記コンピューティングデバイスに、
前記増分チェックポイントの直近のイテレーションのサイズが所定の閾値を超えていることを判定させ、
前記チェックポイントの前記直近のイテレーションの前記サイズが前記所定の閾値を超えていることを判定したことに応じて、前記増分チェックポイントのほとんどのイテレーションを破棄させ、新しい完全バージョンの前記チェックポイントを再作成させ、
前記新しい完全バージョンの前記チェックポイントを前記ターゲットコンピューティングシステムに転送して前記チェックポイントを置換させる、請求項１９に記載の非一過性コンピュータ可読媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
システム管理者は、ハードウェアをアップグレードすること、システム保守を実施すること、システムリソースを管理すること、又は負荷分散を実施することを目的として、ある場所にホストされているリソースを別の場所にマイグレーションすることを所望し得る。しかしながら、いくつかの種類のリソースを従来のアプローチによってマイグレーションすることは、コンピューティング動作に大幅な中断をもたらす恐れがある。
【０００２】
ソフトウェアコンテナは、コンテナ内で動作するアプリケーションのためにリソース及び／又は名前空間の分離を提供することによって、安全な、一貫した、制御された、及び／又は軽量な動作環境を提供し得る。ソフトウェアコンテナは、アプリケーションのために柔軟な配備を容易にし得るものであり、例えば、あるシステム上からソフトウェアコンテナを取り去ることができ、別のシステム上に同等のソフトウェアコンテナを配備することができる。しかしながら、ソフトウェアコンテナ内でアプリケーションを実行しながら同ソフトウェアコンテナを再配備することは、アプリケーションのステートフル性を中断させる可能性があり、潜在的に、データ損失、外部システムとの相互運用エラー、及び／又はクライアントシステムとのセッションの切断（潜在的に、エンドユーザに関わるセッションを含む）につながる恐れがある。したがって、従来のアプローチを用いてソフトウェアコンテナをマイグレーションするかどうかの決断は、マイグレーションの利益とアプリケーション信頼性の利益との間の犠牲を伴う選択を必要とし得る。
【０００３】
本開示は、それ故に、ソフトウェアコンテナのライブマイグレーションを実施するためのシステム及び方法に対するニーズを認識し、これを対象にする。
【発明の概要】
【０００４】
以下でより詳細に説明されるように、本開示は、初期アプリケーションチェックポイントを（例えば、アプリケーションのステートフルなプロパティを捕捉するダンプ動作に基づいて）作成し、このチェックポイントをターゲットコンピューティングシステムに転送し、その後、マイグレーションが開始されると指定された時間目標以内にそれが完了すると予測が示すほど、増分アプリケーションチェックポイントが（例えば、状態の変化が比較的少ないことに起因して）十分小さくなるまで、増分アプリケーションチェックポイントを（例えば、アプリケーション状態情報の差異に基づいて）作成及び転送することにより、ソフトウェアコンテナのライブマイグレーションを実施するための様々なシステム及び方法について説明する。
【０００５】
一例では、ソフトウェアコンテナのライブマイグレーションを実施するためのコンピュータ実装方法は、（ｉ）ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求を少なくとも１つのプロセスがソフトウェアコンテナ内で実行されている間に識別することと、（ｉｉ）この要求に応じて、実行中のプロセスのチェックポイントを作成することであって、チェックポイントが、実行中のプロセスの状態の表現を含む、ことと、（ｉｉｉ）チェックポイントをターゲットコンピューティングシステムに転送することと、（ｉｖ）実行中のプロセスの増分チェックポイントを再帰的に作成し、この増分チェックポイントをターゲットコンピューティングシステムに転送し、この増分チェックポイントをチェックポイントにマージすることによって、チェックポイントを再帰的に更新することと、（ｖ）増分チェックポイントのイテレーションでチェックポイントを更新する前に、増分チェックポイントのイテレーションのサイズに基づいて、増分チェックポイントのイテレーションをチェックポイントにマージすること及びターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることを含むタスクが所定の時間目標を満たすことを予測することと、（ｖｉ）増分チェックポイントのイテレーションをチェックポイントにマージすること及びターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることが所定の時間目標を満たすことを予測したことに応じて、増分チェックポイントのイテレーションをチェックポイントにマージした後、ターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることと、を含み得る。
【０００６】
一実施形態では、コンピュータ実装方法は、（ｉ）増分チェックポイントの直近のイテレーションのサイズが所定の閾値を超えていることを判定することと、（ｉｉ）チェックポイントの直近のイテレーションのサイズが所定の閾値を超えていることを判定したことに応じて、増分チェックポイントのほとんどのイテレーション（most iteration）を破棄し、新しい完全バージョンのチェックポイントを再作成することと、（ｉｉｉ）新しい完全バージョンのチェックポイントをターゲットコンピューティングシステムに転送してチェックポイントを置換することと、を更に含み得る。
【０００７】
一実施形態では、コンピュータ実装方法は、ソフトウェアコンテナに対してコンピューティングリソースへのアクセスを縮小し、それにより、増分チェックポイントのイテレーションの最大サイズを減少させ、タスクが所定の時間目標を満たすことを可能にすることによって、ソフトウェアコンテナをソースコンピューティングシステムにおいてスロットリングすることを更に含み得る。
【０００８】
一実施形態では、チェックポイントは、（ｉ）プロセスのアプリケーションメモリの状態、（ｉｉ）プロセスのプロセスハンドル、（ｉｉｉ）プロセスによって保持されているファイルハンドル、及び／又は（ｉｖ）プロセスによって保持されているソケット、の記憶された表現を含み得る。
【０００９】
一実施形態では、ソフトウェアコンテナは、ソフトウェアコンテナ内で実行しているプロセスが、ソフトウェアコンテナをホストしているオペレーティングシステムに対してシステムコールを実施する、サンドボックス化された環境を含み得る。
【００１０】
一実施形態では、増分チェックポイントは、プロセスの現在の状態と直近の前のバージョンのチェックポイントとの間の差異の表現を含み得る。
【００１１】
いくつかの例では、マイグレーションをファイナライズすることは、チェックポイントをターゲットコンピューティングシステムにある新しいソフトウェアコンテナに復元することと、ソースコンピューティングシステムにあるソフトウェアコンテナを指し示す代わりに、ターゲットコンピューティングシステムにある新しいソフトウェアコンテナを指し示すように、通信経路をリダイレクトすることと、を含み得る。
【００１２】
いくつかの例では、通信経路をリダイレクトすることは、ソフトウェア定義型ネットワーク内で、これまでソースコンピューティングシステムにあるソフトウェアコンテナに割り当てられていたインターネットプロトコルアドレスをターゲットコンピューティングシステムにある新しいソフトウェアコンテナに再割り当てすることを含み得る。
【００１３】
一実施形態では、ソフトウェアコンテナのマイグレーションは、クライアントシステムがソースコンピューティングシステムにあるプロセスと通信することから始まり、クライアントシステムがターゲットコンピューティングシステムにあるプロセスと通信することで終わる、クライアントシステムとのステートフルなセッションを維持するプロセスを含み得る。
【００１４】
一実施形態では、上述の方法を実装するためのシステムは、（ｉ）ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求を少なくとも１つのプロセスがソフトウェアコンテナ内で実行されている間に識別する、メモリ内に記憶されている、識別モジュールと、（ｉｉ）この要求に応じて、実行中のプロセスのチェックポイントを作成する、メモリ内に記憶されている、作成モジュールであって、チェックポイントが、実行中のプロセスの状態の表現を含む、作成モジュールと、（ｉｉｉ）チェックポイントをターゲットコンピューティングシステムに転送する、メモリ内に記憶されている、転送モジュールと、（ｉｖ）実行中のプロセスの増分チェックポイントを再帰的に作成し、この増分チェックポイントをターゲットコンピューティングシステムに転送することによってチェックポイントを再帰的に更新し、増分チェックポイントをチェックポイントにマージする、メモリ内に記憶されている、更新モジュールと、（ｖ）増分チェックポイントのイテレーションでチェックポイントを更新する前に、増分チェックポイントのイテレーションのサイズに基づいて、増分チェックポイントのイテレーションをチェックポイントにマージすること及びターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることを含むタスクが所定の時間目標を満たすことを予測する、メモリ内に記憶されている、予測モジュールと、（ｖｉ）増分チェックポイントのイテレーションをチェックポイントにマージすること及びターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることが所定の時間目標を満たすことを予測したことに応じて、増分チェックポイントのイテレーションをチェックポイントにマージした後、ターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズする、メモリ内に記憶されている、ファイナライズモジュールと、（ｖｉｉ）識別モジュール、作成モジュール、転送モジュール、更新モジュール、予測モジュール、及びファイナライズモジュールを実行するように構成されている少なくとも１つの物理プロセッサと、を含み得る。
【００１５】
いくつかの例では、上記の方法は、非一過性コンピュータ可読媒体上にコンピュータ可読命令としてコード化されてもよい。例えば、コンピュータ可読媒体は、１つ以上のコンピュータ実行可能命令を含み得、この１つ以上のコンピュータ実行可能命令は、コンピューティングデバイスの少なくとも１つのプロセッサによって実行されるとき、コンピューティングデバイスに、（ｉ）ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求を少なくとも１つのプロセスがソフトウェアコンテナ内で実行されている間に識別させ、（ｉｉ）この要求に応じて、実行中のプロセスのチェックポイントを作成させ、チェックポイントは実行中のプロセスの状態の表現を含み、（ｉｉｉ）チェックポイントをターゲットコンピューティングシステムに転送させ、（ｉｖ）実行中のプロセスの増分チェックポイントを再帰的に作成し、この増分チェックポイントをターゲットコンピューティングシステムに転送し、この増分チェックポイントをチェックポイントにマージすることによって、チェックポイントを再帰的に更新させ、（ｖ）増分チェックポイントのイテレーションでチェックポイントを更新する前に、増分チェックポイントのイテレーションのサイズに基づいて、増分チェックポイントのイテレーションをチェックポイントにマージすること及びターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることを含むタスクが所定の時間目標を満たすことを予測させ、（ｖｉ）増分チェックポイントのイテレーションをチェックポイントにマージすること及びターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることが所定の時間目標を満たすことを予測したことに応じて、増分チェックポイントのイテレーションをチェックポイントにマージした後、ターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズさせ得る。
【００１６】
上記で述べた実施形態のうちのいずれかからの機能は、本明細書で説明する一般原理に従って互いと組み合わせて使用されてもよい。これらの及び他の実施形態、特性、及び利点は、添付の図面及び請求項と併せて、以下の詳細な説明を一読することで、より完全に理解されよう。
【図面の簡単な説明】
【００１７】
添付の図面は、いくつかの例示的な実施形態を例解し、かつ本明細書の一部である。以下の説明とともに、これらの図面は、本開示の種々の原理を実証及び説明する。
【図１】ソフトウェアコンテナのライブマイグレーションを実施するための例示的なシステムのブロック図である。
【図２】ソフトウェアコンテナのライブマイグレーションを実施するための追加の例示的なシステムのブロック図である。
【図３】ソフトウェアコンテナのライブマイグレーションを実施するための例示的な方法のフローチャートである。
【図４】ソフトウェアコンテナのライブマイグレーションを実施するための追加の例示的な方法のブロック図である。
【００１８】
図面を通じて、同一の参照文字及び説明は、類似であるが、必ずしも同一ではない要素を示す。本明細書において説明される例示的な実施形態は、種々の修正及び代替的な形態が可能であるが、具体的な実施形態が、図面において、例として示されており、かつ本明細書において詳細に説明される。しかしながら、本明細書において説明される例示的な実施形態は、開示される特定の形態に限定されることを意図されない。むしろ、本開示は、添付の請求項の範囲内にある全ての修正物、同等物、及び代替物を網羅する。
【発明を実施するための形態】
【００１９】
本開示は、概して、ソフトウェアコンテナのライブマイグレーションを実施するためのシステム及び方法を対象とする。以下でより詳細に説明されるように、初期アプリケーションチェックポイントを（例えば、アプリケーションのステートフルなプロパティを捕捉するダンプ動作に基づいて）作成し、このチェックポイントをターゲットコンピューティングシステムに転送し、その後、マイグレーションが開始されたならば指定された時間目標以内にそれが完了すると予測されるほど、増分アプリケーションチェックポイントが（例えば、状態の変化が比較的少ないことに起因して）十分小さくなるまで、増分アプリケーションチェックポイントを（例えば、アプリケーション状態情報の差異に基づいて）作成及び転送することにより、本明細書に記載のシステム及び方法は、ソフトウェアコンテナの効率的かつ効果的なライブマイグレーションを容易にし得る。加えて、いくつかの例では、ソフトウェアコンテナで利用可能なリソースをスロットリングすることにより、本明細書に記載のシステム及び方法は、増分アプリケーションチェックポイントのサイズを減少させ、それにより、マイグレーションが時間目標以内に完了するほど短時間で増分アプリケーションチェックポイントを適用することができる確率を潜在的に向上させ得る。
【００２０】
更に、本明細書に記載のシステム及び方法は、コンピューティングシステムから離れる方向へのライブマイグレーションを容易にすることによって、ソフトウェアコンテナをホストしているコンピューティングシステムの機能及び／又は動作を改良し得る（例えば、コンピューティングシステム上のコンピューティング負荷を軽減し、コンピューティングシステムのハードウェア及び／若しくはソフトウェアアップグレードを容易にし、コンピューティングシステム上での保守作業を容易にし、並びに／又はコンピューティングシステム上で他のアプリケーションを実行するためにリソースを解放する）。加えて、本明細書に記載のシステム及び方法は、ソフトウェアコンテナ内のアプリケーションが連続したサービスを提供することができるように、ターゲットコンピューティングシステムがソフトウェアコンテナをホストするのを容易にすることによって、ソフトウェアコンテナのライブマイグレーションのターゲットとなるコンピューティングシステムの機能及び／又は動作を改良し得る。更に、本明細書に記載のシステム及び方法は、システム間でのアプリケーションのシームレスな転送を容易にすることによって、分散コンピューティングシステムの機能及び／又は動作を改良し得る。いくつかの例では、本明細書に記載のシステム及び方法は、ライブマイグレーション動作の計算負荷を減少させてよく、及び／又はライブマイグレーション動作の信頼性を向上させることによって、１つ以上のコンピューティングシステムの機能を改良し得る。
【００２１】
以下では、図１〜図２を参照して、ソフトウェアコンテナのライブマイグレーションを実施するための例示的なシステムの詳細な説明を提供する。対応するコンピュータ実装方法の詳細な説明もまた、図３〜図４に関連して提供する。
【００２２】
図１は、ソフトウェアコンテナのライブマイグレーションを実施するための例示的なシステム１００のブロック図である。この図に示すように、例示的なシステム１００は、１つ以上のタスクを実施するための１つ以上のモジュール１０２を含んでもよい。例えば、以下でより詳細に説明されるように、例示的なシステム１００は、ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求を少なくとも１つのプロセスがソフトウェアコンテナ内で実行されている間に識別する識別モジュール１０４を含み得る。例示的なシステム１００は、この要求に応じて実行中のプロセスのチェックポイントを作成する作成モジュール１０６を追加的に含み得、このチェックポイントは、実行中のプロセスの状態の表現を含んでいる。例示的なシステム１００はまた、チェックポイントをターゲットコンピューティングシステムに転送する転送モジュール１０８も含み得る。例示的なシステム１００は、実行中のプロセスの増分チェックポイントを再帰的に作成し、この増分チェックポイントをターゲットコンピューティングシステムに転送することによってチェックポイントを再帰的に更新し、増分チェックポイントをチェックポイントにマージする、更新モジュール１１０を追加的に含み得る。例示的なシステム１００はまた、増分チェックポイントのイテレーションでチェックポイントを更新する前に、増分チェックポイントのイテレーションのサイズに基づいて、増分チェックポイントのイテレーションをチェックポイントにマージすること及びターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることを含むタスクが所定の時間目標を満たすことを予測する、予測モジュール１１２も含み得る。例示的なシステム１００は、増分チェックポイントのイテレーションをチェックポイントにマージすること及びターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることが所定の時間目標を満たすことを予測したことに応じて、増分チェックポイントのイテレーションをチェックポイントにマージした後、ターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズする、ファイナライズモジュール１１４を追加的に含み得る。別個の要素として例解されるが、図１のモジュール１０２のうちの１つ以上は、単一のモジュール又はアプリケーションの一部分を表し得る。
【００２３】
特定の実施形態では、図１のモジュール１０２のうちの１つ以上は、コンピューティングデバイスによって実行されるとき、コンピューティングデバイスに、１つ以上のタスクを実施させてもよい１つ以上のソフトウェアアプリケーション又はプログラムを表してもよい。例えば、以下でより詳細に説明されるように、モジュール１０２のうちの１つ以上は、図２に示されているデバイス（例えば、コンピューティングデバイス２０２、ソースコンピューティングシステム２０６、及び／又はターゲットコンピューティングシステム２０８）など、１つ以上のコンピューティングデバイス上で動作するように記憶及び構成されているモジュールを表し得る。図１のモジュール１０２のうちの１つ以上はまた、１つ以上のタスクを実施するように構成された１つ以上の特殊目的のコンピュータの全て又は一部分を表してもよい。
【００２４】
図１に示されているように、例示的なシステム１００はまた、メモリ１４０など、１つ以上のメモリデバイスも含み得る。メモリ１４０は、データ及び／又はコンピュータ可読命令を記憶することが可能な任意のタイプ又は形式の揮発性又は不揮発性のストレージデバイス又は媒体を概して表す。一例では、メモリ１４０は、モジュール１０２のうちの１つ以上を記憶、ロード、及び／又は維持し得る。メモリ１４０の例としては、限定することなく、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、フラッシュメモリ、ハードディスクドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＳＤ）、光ディスクドライブ、キャッシュ、これらのうちの１つ以上の変形若しくは組み合わせ、又は任意の他の好適なストレージメモリが挙げられる。
【００２５】
図１に示されているように、例示的なシステム１００はまた、物理プロセッサ１３０など、１つ以上の物理プロセッサも含み得る。物理プロセッサ１３０は、コンピュータ可読命令を解釈及び／又は実行することができる任意のタイプ又は形式のハードウェア実装型処理ユニットを概して表す。一例では、物理プロセッサ１３０は、メモリ１４０に記憶されているモジュール１０２のうちの１つ以上にアクセスし得、及び／又はこれらを修正し得る。追加的に又は代替的に、物理プロセッサ１３０は、ソフトウェアコンテナのライブマイグレーションの実施を容易にするために、モジュール１０２のうちの１つ以上を実行し得る。物理プロセッサ１３０の例としては、限定することなく、マイクロプロセッサ、マイクロコントローラ、中央処理ユニット（ＣＰＵ）、ソフトコアプロセッサを実装しているフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、これらのうちの１つ以上の部分、これらのうちの１つ以上の変形若しくは組み合わせ、又は任意の他の好適な物理プロセッサが挙げられる。
【００２６】
図１に示されているように、例示的なシステム１００はまた、追加の要素１２０など、１つ以上の追加の要素も含み得る。例えば、例示的なシステムは、チェックポイント１２２及び増分チェックポイント１２４を含み得る。チェックポイント１２２は、プロセス及び／又はソフトウェアコンテナの任意のタイプ又は形式の状態情報を表し得る。増分チェックポイント１２４は、前の状態に対して新規の及び／又は変化した、プロセス及び／又はソフトウェアコンテナの任意のタイプ又は形式の状態情報を表し得る。
【００２７】
図１の例示的なシステム１００は、様々な態様で実装され得る。例えば、例示的なシステム１００の全て又は一部分は、図２の例示的なシステム２００の部分を表し得る。図２に示すように、システム２００は、ソースコンピューティングシステム２０６及び／又はターゲットコンピューティングシステム２０８とネットワーク２０４を介して通信するコンピューティングデバイス２０２を含み得る。一例では、モジュール１０２の機能性の全て又は一部分は、コンピューティングデバイス２０２、サーバ２０６、及び／又は任意の他の好適なコンピューティングシステムによって実施され得る。以下でより詳細に説明されるように、図１のモジュール１０２のうちの１つ以上は、コンピューティングデバイス２０２、ソースコンピューティングシステム２０６、及び／又はターゲットコンピューティングシステム２０８の少なくとも１つのプロセッサによって実行されるとき、コンピューティングデバイス２０２、ソースコンピューティングシステム２０６、及び／又はターゲットコンピューティングシステム２０８が、ソフトウェアコンテナのライブマイグレーションを実施することを可能にし得る。
【００２８】
コンピューティングデバイス２０２は、コンピュータ実行可能命令を読み出すことができる任意のタイプ又は形式のコンピューティングデバイスを概して表す。例えば、コンピューティングデバイス２０２は、データセンタ管理システムを表し得る。コンピューティングデバイス２０２の追加の例としては、限定することなく、ノートブック、タブレット、デスクトップ、サーバ、携帯電話、個人情報機器（ＰＤＡ）、マルチメディアプレイヤー、組み込みシステム、ウェアラブルデバイス（例えば、スマートウォッチ、スマートグラスなど）、ゲーム機、これらのうちの１つ以上の変形若しくは組み合わせ、又は任意の他の好適なコンピューティングデバイスが挙げられる。
【００２９】
ソースコンピューティングシステム２０６及びターゲットコンピューティングシステム２０８は、ソフトウェアコンテナをホストすることができる任意のタイプ又は形式のコンピューティングデバイスを概して表す。ソースコンピューティングシステム２０６及びターゲットコンピューティングシステム２０８の追加の例としては、限定することなく、特定のソフトウェアアプリケーションを動作させる並びに／又は様々なストレージ、データベース、及び／若しくはウェブサービスを提供するように構成されている、アプリケーションサーバ、ストレージサーバ、データベースサーバ、及び／又はウェブサーバが挙げられる。図２ではそれぞれが単一のエンティティとして示されているが、ソースコンピューティングシステム２０６及びターゲットコンピューティングシステム２０８はそれぞれ、互いに共同して機能及び／又は動作する複数のサーバを含み及び／又は表し得る。
【００３０】
ネットワーク２０４は、通信又はデータ転送を容易にすることができる任意の媒体又はアーキテクチャを概して表す。一例では、ネットワーク２０４は、コンピューティングデバイス２０２、ソースコンピューティングシステム２０６、及び／又はターゲットコンピューティングシステム２０８の間の通信を容易にし得る。この例では、ネットワーク２０４は、無線及び／又は有線接続を使用して、通信又はデータ転送を容易にし得る。ネットワーク２０４の例としては、限定することなく、イントラネット、ワイドエリアネットワーク（ＷＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、パーソナルエリアネットワーク（ＰＡＮ）、ストレージエリアネットワーク（ＳＡＮ）、インターネット、電力線通信（ＰＬＣ）、セルラネットワーク（例えば、汎欧州デジタル移動電話方式（ＧＳＭ（登録商標））ネットワーク）、これらのうちの１つ以上の部分、これらのうちの１つ以上の変形若しくは組み合わせ、又は任意の他の好適なネットワークが挙げられる。
【００３１】
多くの他のデバイス又はサブシステムは、図１のコンピューティングシステム１００及び／又は図２のコンピューティングシステム２００に接続され得る。逆に、図１及び図２に示す構成要素及びデバイスの全てが、本明細書において説明及び／又は例示される実施形態を実践するために存在する必要があるわけではない。上記で述べたデバイス及びサブシステムはまた、図２に示すものとは異なる様式で相互接続されてもよい。コンピューティングシステム１００及び２００はまた、任意の数のソフトウェア、ファームウェア、及び／又はハードウェア構成を採用してもよい。例えば、本明細書において開示される例示的な実施形態のうちの１つ以上は、コンピュータ可読媒体上に、コンピュータプログラム（コンピュータソフトウェア、ソフトウェアアプリケーション、コンピュータ可読命令、及び／又はコンピュータ制御論理とも称される）としてコード化され得る。
【００３２】
「コンピュータ可読媒体」という用語は、本明細書において使用される際、概して、コンピュータ可読命令を記憶又は担持することが可能な任意の形態のデバイス、キャリア、又は媒体を指す。コンピュータ可読媒体の例としては、限定することなく、搬送波などの伝送タイプ媒体、並びに磁気記憶媒体（例えば、ハードディスクドライブ、テープドライブ、及びフロッピーディスク）、光記憶媒体（例えば、コンパクトディスク（ＣＤ）、デジタルビデオディスク（ＤＶＤ）、及びＢＬＵ−ＲＡＹ（登録商標）ディスク）、電子記憶媒体（例えば、ソリッドステートドライブ及びフラッシュ媒体）などの非一時的タイプ媒体、並びに他の分散システムが挙げられる。
【００３３】
図３は、ソフトウェアコンテナのライブマイグレーションを実施するための例示的なコンピュータ実装方法３００のフローチャートである。図３に示されている工程は、図１のシステム１００、図２のシステム２００、及び／又はこれらのうちの１つ以上の変形若しくは組み合わせを含む、任意の好適なコンピュータ実行可能コード及び／又はコンピューティングシステムによって実施され得る。一例では、図３に示されている工程のそれぞれは、複数の副工程を含む及び／又はそれらによって表される構造を有するアルゴリズムを表すものであり得、これらの例を以下に詳細に示す。
【００３４】
図３に示されているように、工程３０２では、本明細書に記載のシステムのうちの１つ以上は、ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求を少なくとも１つのプロセスがソフトウェアコンテナ内で実行されている間に識別し得る。例えば、識別モジュール１０４は、図２のコンピューティングデバイス２０２の一部として、ソフトウェアコンテナ２２０をソースコンピューティングシステム２０６からターゲットコンピューティングシステム２０８へとマイグレーションする要求２３０を少なくとも１つのプロセス２２２がソフトウェアコンテナ２２０内で実行されている間に識別し得る。
【００３５】
「マイグレーション」という用語は、本明細書において使用される際、概して、ソフトウェアコンテナの状態を維持しながらソフトウェアコンテナをあるホストシステムから別のホストシステムへと転送するための任意の動作を指す。例えば、ソフトウェアコンテナは、１つ以上のプロセスを含む及び／又はホストする可能性があり、これに合わせて、ソフトウェアコンテナをマイグレーションすることは、１つ以上のプロセスの状態を維持しながらその１つ以上のプロセスを新しいホスト上にあるソフトウェアコンテナの再構築されたインスタンスに転送することを含み得る。したがって、「マイグレーション」という用語は、ライブマイグレーションを指し得る。本明細書において使用される際、「ライブマイグレーション」という用語は、揮発性の状態（例えば、揮発性メモリ内に表されている状態）がマイグレーション中に維持されるように、並びに／又は外部システムによるソフトウェアコンテナ、プロセス、及び／若しくはアプリケーションとの相互運用（例えば、通信セッション）が中断及び／若しくは状態の喪失なしで持続するように、（１）ソフトウェアコンテナ、プロセス、及び／若しくはアプリケーションのダウンタイムを最小にする及び／若しくはなくす、（２）ソフトウェアコンテナ、プロセス、及び／若しくはアプリケーションが実行中である間に行われる、並びに／又は（３）ソフトウェアコンテナ、プロセス、及び／若しくはアプリケーションの連続したステートフル性及び／若しくは機能を提供する、任意のマイグレーションを指し得る。したがって、いくつかの例では、ライブマイグレーションは、クライアントシステムがライブマイグレーションプロセスの前、その間、及びその後のソフトウェアコンテナ、プロセス、及び／又はアプリケーションとのステートフルなセッションを維持することを可能にし得る。
【００３６】
一例では、ソフトウェアコンテナのマイグレーションは、クライアントシステムがソースコンピューティングシステムにあるプロセスと通信することから始まり、クライアントシステムがターゲットコンピューティングシステムにあるプロセスと通信することで終わる、クライアントシステムとのステートフルなセッションを維持するプロセスを含み得る。
【００３７】
「ソフトウェアコンテナ」という用語は、本明細書において使用される際、概して、オペレーティングシステムレベルでの仮想化及び／又はプロセス分離の任意のインスタンスを指す。いくつかの例では、ソフトウェアコンテナは、オペレーティングシステム名前空間と一致し得る。例えば、ソフトウェアコンテナは、名前空間を１つ以上のプロセスに適用し得、その結果、これらのプロセスは、その名前空間の外側にある１つ以上のリソースから分離される（例えば、それらを見ること及び／又はそれらにアクセスすることができない）。したがって、ある名前空間内のプロセスは、その名前空間内の他のプロセスを見ることが可能であり得るが、同じ基盤カーネルから動作していてもその名前空間の外側にあるプロセスは見ることが不可能であり得る。いくつかの例では、ソフトウェアコンテナは、そのソフトウェアコンテナの外側にある１つ以上のリソースにアクセスできないようにプロセスをそのソフトウェアコンテナ内に分離し得る。例えば、ソフトウェアコンテナは、ホストコンピューティングシステムに固有の物理的な制限及び／又は任意の他のシステム全体の制限を超えてそのソフトウェアコンテナ内のプロセスから見ることが可能な及び／又は使用することが可能なプロセッサアベイラビリティ、揮発性メモリ、ストレージ帯域幅、及び／又はネットワーク帯域幅の量を制限するように、制御グループを１つ以上のプロセスに適用し得る。
【００３８】
いくつかの例では、ソフトウェアコンテナは、ソフトウェアコンテナをホストしているシステムのカーネルによって提供されているサービスに直接アクセスし得る。例えば、ソフトウェアコンテナは、アプリケーションをカプセル化するために、ハードウェア仮想化を使用しないことによって、仮想マシンよりも高い効率を提供し得る。いくつかの例では、ソフトウェアコンテナは、（例えば、１つ以上の追加のソフトウェアコンテナとともに）ホストシステム上にホストされ得るものであるが、ソフトウェアコンテナは、別個のサーバのビューをそのソフトウェアコンテナ内の１つ以上のプロセスに提示し得る。したがって、単一のホストシステムは、互いに分離して動作することができる多数のソフトウェアコンテナをホストし得る。これに合わせて、ソフトウェアコンテナは、ホストシステムの基盤カーネル及びハードウェアと共同して完全仮想化サーバを提供し得る、１つ以上のシステムファイルを含み得る。いくつかの例では、ソフトウェアコンテナは、ソフトウェアコンテナ内のプロセスに別個のファイルシステムを提供し得る。
【００３９】
一例では、ソフトウェアコンテナは、ソフトウェアコンテナ内で実行しているプロセスが、ソフトウェアコンテナをホストしているオペレーティングシステムに対してシステムコールを実施する、サンドボックス化された環境を含み得る。
【００４０】
「プロセス」という用語は、本明細書において使用される際、概して、実行中の任意のプログラム（例えば、プログラムのインスタンス化及び／又は実行コピー）を指す。いくつかの例では、プロセスは、複数のプロセス、スレッド、及び／又はサブプロセスを含み得る。プロセスは、指定された順序で命令を実行することによって、及び／又は揮発性メモリに読み書きすることによって、ステートフルな動作を行い得る。
【００４１】
ソフトウェアコンテナをマイグレーションする要求は、ソフトウェアコンテナのマイグレーションを行うことを指定する任意の好適なコマンド、命令、及び／又は構成データを含み得る。したがって、識別モジュール１０４は、任意の好適なコンテキストで要求を識別し得る。例えば、識別モジュール１０４は、ソフトウェアコンテナをホストしているソースコンピューティングシステムにおいて検出された欠陥、障害及び／又はエラーに応じて発生した要求を識別し得る。追加的に又は代替的に、識別モジュール１０４は、ソースコンピューティングシステム及びターゲットコンピューティングシステムを含む複数のコンピューティングシステムにわたって（例えば、ソースコンピューティングシステムの負荷を減少させることにより）負荷を分散させる命令を識別することによって、要求を識別し得る。いくつかの例では、識別モジュール１０４は、ソフトウェアコンテナをマイグレーションする命令を管理者から受信することによって、要求を識別し得る。いくつかの例では、識別モジュール１０４は、ソースコンピューティングシステム上のソフトウェアを更新する、ソースコンピューティングシステムをデバッグする、ソースコンピューティングシステムを監査する、及び／又はソースコンピューティングシステムをシャットダウンする命令を識別することによって、要求を識別し得る。いくつかの例では、識別モジュール１０４は、ソフトウェアコンテナがソースコンピューティングシステムに配置されることを禁止している、並びに／又はソフトウェアコンテナが別の識別されたアプリケーション及び／若しくはデータオブジェクトとソースコンピューティングシステムを共有することを禁止している、ポリシー（例えば、情報セキュリティポリシー）を識別することによって、要求を識別し得る。いくつかの例では、ソフトウェアコンテナをマイグレーションする要求は、プロセスがソフトウェアコンテナ内で実行中であること、及び／又は外部システムがプロセスとのステートフルなセッションの真っ最中であることを明示し得る。これらの例では、本明細書に記載のシステムは、（例えば、実行中のプロセス及び／又は外部システムとのステートフルなセッションの状態を維持するために）ライブマイグレーションを実行する要求として、要求を識別し得る。
【００４２】
いくつかの例では、本明細書に記載のシステムのうちの１つ以上（例えば、識別モジュール１０４）は、実施するマイグレーションのタイプを判定し得、及び／又はマイグレーションの準備をし得る。例として図４を使用すると、工程３０２では、識別モジュール１０４は、本明細書に記載のシステムがマイグレーションを実施したときにダウンタイム目標を満たすことができるかどうかを予測し得る。以下でより詳細に説明されるように、本明細書に記載のシステムは、任意の様々な態様で、例えば、ソフトウェアコンテナのメモリサイズを含む、任意の様々な情報に基づいて、ダウンタイム目標を満たすことができるかどうかを予測し得る。ダウンタイム目標が満たされないことを識別モジュール１０４が予測すると、工程４０４において、識別モジュール１０４は、マイグレーションを強行するかどうかを判定し得る。例えば、識別モジュール１０４は、マイグレーションを強行することを明示しているマイグレーション設定（例えば、管理者によって設定される）を識別し得る。追加的に又は代替的に、識別モジュール１０４は、マイグレーションが行われても行われなくても、（例えば、ソースコンピューティングシステムにおいて既に進行中である、プロセスに影響する欠陥及び／又は終了手続きに起因して）プロセスが終了することになることを判定し得、そしてマイグレーションを延期しても取り消しても、プロセスの実行の連続性が改善されないであろうことを判定し得る。識別モジュール１０４が、マイグレーションを強行するべきではないと判定すると、工程４０６において、識別モジュール１０４は、マイグレーションの試みを取り消し得る。そうではなく、識別モジュール１０４が、マイグレーションを強行するべきと判定すると、識別モジュール１０４は、以下でより詳細に説明されるように、工程４０８において、マイグレーションを続行し得る。追加的に、いくつかの例では、識別モジュール１０４は、ソフトウェアコンテナを適時にマイグレーションすることと、試みても失敗するであろうという予測にもかかわらずマイグレーションをライブマイグレーションとして（例えば、ダウンタイム目標内で）実施するように試みることと、の両方を行う手続きを開始し得る。
【００４３】
識別モジュール１０４が、工程４０２において、マイグレーションがダウンタイム目標を無事満たすことになると予測すると、識別モジュール１０４は、工程４１０に進み、マイグレーションの準備をし得る。例えば、識別モジュール１０４は、ソフトウェアコンテナの依存性を識別し、ソフトウェアコンテナが依存している各リソースが、ターゲットコンピューティングシステム上で利用可能であるかどうかを判定し得る（例えば、ストレージ空間、入力／出力帯域幅、プロセッサアベイラビリティ、及び／若しくはメモリアベイラビリティなどの十分なコンピューティングリソース、適当なカーネルバージョン、並びに／又はソフトウェアコンテナと相互運用し得る１つ以上のアプリケーションを含む）。いずれかの依存性が欠落している場合、識別モジュール１０４は、欠落している依存性をターゲットコンピューティングシステムに提供し得る。例えば、識別モジュール１０４は、ソフトウェアコンテナによって使用されている１つ以上のデータボリュームをターゲットコンピューティングシステムに転送し得る。加えて、識別モジュール１０４は、アプリケーションコンテナイメージをターゲットコンピューティングシステムに提供し得る。いくつかの例では、識別モジュール１０４は、ソフトウェアコンテナの１つ以上のネットワーク設定を識別し得る（例えば、コンテナに割り当てられているインターネットプロトコルアドレスを含む）。追加的に又は代替的に、識別モジュール１０４は、ソフトウェアコンテナに割り当てられている１つ以上のデータボリュームを識別し得る。いくつかの例では、識別モジュール１０４は、ターゲットコンピューティングシステム上に空のソフトウェアコンテナを（例えば、ソースコンピューティングシステム上のソフトウェアコンテナと一致する構成設定で）作成し得る。
【００４４】
ターゲットコンピューティングシステムにソフトウェアコンテナイメージ（例えば、マイグレーションされるソフトウェアコンテナによってホストされているアプリケーションと一致するアプリケーションをホストしているソフトウェアコンテナ用のイメージ）をダウンロードすることによって、マイグレーションの準備をする。
【００４５】
図３に戻ると、工程３０４では、本明細書に記載のシステムのうちの１つ以上は、要求に応じて、実行中のプロセスのチェックポイントを作成し得、このチェックポイントは、実行中のプロセスの状態の表現を含み得る。例えば、作成モジュール１０６は、図２のコンピューティングデバイス２０２の一部として、要求２３０に応じて、実行中のプロセス２２２のチェックポイント１２２を作成し得、チェックポイント１２２は、実行中のプロセス２２２の状態の表現を含み得る。
【００４６】
「チェックポイント」という用語は、本明細書において使用される際、任意の時点のプロセスの状態の表現を指し得る。これに合わせて、チェックポイントは、本来ならば揮発性の状態情報を維持し得る。例えば、チェックポイントは、（ｉ）プロセスのアプリケーションメモリの状態、（ｉｉ）プロセスのプロセスハンドル、（ｉｉｉ）プロセスによって保持されているファイルハンドル、及び／又は（ｉｖ）プロセスによって保持されているソケット、の記憶された表現を含み得る。追加的に又は代替的に、チェックポイントは、プロセス間の１つ以上の関係、１つ以上のプロセススレッド、プロセス間の１つ以上のパイプ、及び／又はプロセス間の１つ以上の通信の表現を含み得る。概して、チェックポイントは、実行中のプロセスの状態を再構築するために使用され得る任意の状態情報を含み得る。
【００４７】
作成モジュール１０６は、プロセスのチェックポイントを任意の好適な様式で作成し得る。例えば、作成モジュール１０６は、プロセスをフリーズし、次いでプロセスの状態情報を１つ以上のファイルに及び／又は不揮発性ストレージにダンプすることによって、プロセスのチェックポイントを作成し得る。いくつかの例では、作成モジュール１０６は、プロセスの完全な初期チェックポイント（例えば、実行中のプロセスを初期チェックポイントの時点と同じ状態に完全に再構築するための完全な状態情報を含む）を作成し得る。
【００４８】
いくつかの例では、作成モジュール１０６は、高速ストレージデバイスを識別し、プロセスの状態情報を高速ストレージデバイスにダンプすることによって、チェックポイントを作成し得る。例えば、作成モジュール１０６は、状態情報を一時ファイルストレージシステム（例えば、データを揮発性メモリ内に記憶するファイルシステム）にダンプし得る。以下でより詳細に説明されるように、本明細書に記載の１つ以上のシステムは、状態情報をソースコンピューティングシステムにある高速ストレージデバイスからターゲットコンピューティングシステムへと直ちに転送し得る。
【００４９】
例として図４を使用すると、工程４１２では、作成モジュール１０６は、速いストレージリソースを使用してプロセスの状態をダンプし得る。
【００５０】
図３に戻ると、工程３０６では、本明細書に記載のシステムのうちの１つ以上は、チェックポイントをターゲットコンピューティングシステムに転送し得る。例えば、転送モジュール１０８は、図２のコンピューティングデバイス２０２の一部として、チェックポイント１２２をターゲットコンピューティングシステム２０８に転送し得る。
【００５１】
転送モジュール１０８は、任意の好適な様式でチェックポイントをターゲットコンピューティングシステムに転送し得る。例えば、転送モジュール１０８は、チェックポイントを記憶している１つ以上のファイルをソースコンピューティングシステムからターゲットコンピューティングシステムに転送し得る。いくつかの例では、前述したように、本明細書に記載のシステムは、チェックポイントを高速ストレージデバイス（例えば、データを揮発性メモリ内に記憶している一時ファイルシステムなど）上に記憶していることがある。これらの例では、転送モジュール１０８は、チェックポイント（例えば、高速ストレージデバイス上に記憶されたファイルの形式）を揮発性メモリから直接的にターゲットコンピューティングシステムへと転送し得、チェックポイントデータを不揮発性ストレージに書き込むことの遅延を回避する。いくつかの例では、転送モジュール１０８は、遠隔直接メモリアクセス（例えば、チェックポイントをソースコンピューティングシステムのメモリから、ネットワークを介して、ターゲットコンピューティングシステムのメモリへと送達するゼロコピー動作）を使用してチェックポイントをターゲットコンピューティングシステムに転送し得、これにより、ソースコンピューティングシステム又はターゲットコンピューティングシステムのいずれかの上でチェックポイントデータを不揮発性ストレージに書き込むことを潜在的に回避する。
【００５２】
例として図４を使用すると、工程４１４では、転送モジュール１０８は、チェックポイントをターゲットコンピューティングシステムに転送し得る。
【００５３】
図３に戻ると、工程３０８では、本明細書に記載のシステムのうちの１つ以上は、実行中のプロセスの増分チェックポイントを再帰的に作成し、この増分チェックポイントをターゲットコンピューティングシステムに転送することによってチェックポイントを再帰的に更新し、増分チェックポイントをチェックポイントにマージし得る。例えば、更新モジュール１１０は、図２のコンピューティングデバイス２０２の一部として、実行中のプロセス２２２の増分チェックポイント１２４を再帰的に作成し、増分チェックポイント１２４をターゲットコンピューティングシステムに転送することによって、チェックポイント１２２を再帰的に更新し、増分チェックポイント１２４をチェックポイント１２２にマージし得る。
【００５４】
「増分チェックポイント」という用語は、本明細書において使用される際、概して、前のチェックポイント又は増分チェックポイント以降に起こったプロセスの状態の変化を表している任意のチェックポイントデータを指す。したがって、前の時点での完全チェックポイントに適用された増分チェックポイントは、その増分チェックポイントの時点でのプロセスの状態を表している完全チェックポイントをもたらし得る。これに合わせて、増分チェックポイントは、プロセスの現在の状態と直近の前のバージョンのチェックポイントとの間の差異の表現を含み得る。
【００５５】
更新モジュール１１０は、増分チェックポイントを任意の好適な様式で作成し得る。例えば、更新モジュール１１０は、初期チェックポイントを作成するための上述の技術のいずれかを使用して増分チェックポイントを作成し得る。追加的に、いくつかの例では、更新モジュール１１０は、ダーティメモリページ（例えば、最後の完全又は増分チェックポイント以降に書き込みが行われたメモリページ）のみをダンプし得る。
【００５６】
更新モジュール１１０は、増分チェックポイントを任意の好適な様式で転送し得る。例えば、更新モジュール１１０は、初期チェックポイントをターゲットコンピューティングシステムに転送するための上述の技術のいずれかを使用して増分チェックポイントを転送し得る。
【００５７】
更新モジュール１１０は、増分チェックポイントを任意の好適な様式でチェックポイントにマージし得る。例えば、更新モジュール１１０は、単純に、ターゲットコンピューティングシステムにおいて、増分チェックポイント内の新しい情報（例えば、変更されたメモリページ）が古い情報（例えば、前のバージョンのメモリページ）を上書きする場所に、増分チェックポイントを転送することによって、増分チェックポイントをチェックポイントにマージし得る。いくつかの例では、更新モジュール１１０は、チェックポイントの古いバージョンの部分（例えば、前のバージョンのメモリページ）を指し示している参照をチェックポイントの新しいバージョンの部分（例えば、増分チェックポイントの時点での最新バージョンのメモリページ）に修正することによって、増分チェックポイントをチェックポイントにマージし得る。いくつかの例では、更新モジュール１１０は、増分チェックポイントの時点での最新の完全チェックポイントが、チェックポイントデータの集合体から再構築され得るように、増分チェックポイントをチェックポイントデータの集合体に追加することによって、増分チェックポイントをチェックポイントにマージし得る。
【００５８】
理解されるであろうように、チェックポイントを再帰的に更新することは、増分チェックポイントを任意の回数（例えば、１回のみ又は７回）作成、転送、及びマージすることを必要とし得る。しかしながら、以下でより詳細に説明されるように、本明細書に記載のシステムは、ソフトウェアコンテナのマイグレーションに進む前に、チェックポイントに対する更新の回数を減らすための任意の様々な技術を使用し得る。
【００５９】
一例では、本明細書に記載の更新モジュール１１０は、増分チェックポイントのサイズを考慮して新しい完全チェックポイントを作成することにより、チェックポイントを新たに開始し得る。例えば、更新モジュール１１０は、増分チェックポイントの直近のイテレーションのサイズが所定の閾値を超えていることを判定し、（ｉｉ）チェックポイントの直近のイテレーションのサイズが所定の閾値を超えていることを判定したことに応じて、増分チェックポイントのほとんどのイテレーションを破棄し、新しい完全バージョンのチェックポイントを再作成し、（ｉｉｉ）新しい完全バージョンのチェックポイントをターゲットコンピューティングシステムに転送してチェックポイントを置換し得る。いくつかの例では、更新モジュール１１０は、ソフトウェアコンテナのメモリサイズの割合として表される増分チェックポイントの直近のイテレーションのサイズが、所定の割合を超えていることを判定することによって、増分チェックポイントの直近のイテレーションのサイズが、所定の閾値を超えていることを判定し得る。例えば、更新モジュール１１０は、増分チェックポイントをターゲットコンピューティングシステムにコミットする際にソフトウェアコンテナをマイグレーションすることが、時間目標を（例えば、所定の閾値によって示されるように）満たす見込みがないほど、ソフトウェアコンテナが急速に状態情報を変化させていることを判定し得る。
【００６０】
いくつかの例では、更新モジュール１１０は、ソフトウェアコンテナに対してコンピューティングリソースへのアクセスを縮小し、それにより、増分チェックポイントのイテレーションの最大サイズを減少させ、タスクが所定の時間目標を満たすことを可能にすることによって、ソフトウェアコンテナをソースコンピューティングシステムにおいてスロットリングし得る。例えば、更新モジュール１１０は、増分チェックポイントの直近のイテレーションのサイズが所定の閾値を超えていることを判定したことに応じて、ソフトウェアコンテナをスロットリングし得る。更新モジュール１１０は、ソフトウェアコンテナを任意の好適な様式でスロットリングし得る。例えば、更新モジュール１１０は、ソフトウェアコンテナ内の１つ以上のプロセスに対してプロセッサアベイラビリティを減少させ得る（例えば、これにより、ソフトウェアコンテナ内で状態の変化が起こる速度を潜在的に遅くさせる）。追加的に又は代替的に、更新モジュール１１０は、ソフトウェアコンテナ内の１つ以上のプロセスに対してネットワークリソースアベイラビリティ（例えば、帯域幅、接続数など）を減少させ得る。いくつかの例では、更新モジュール１１０は、ソフトウェアコンテナ内の１つ以上のプロセスに対してストレージ入力／出力帯域幅を減少させ得る。様々な例では、更新モジュール１１０は、コンテナ内で実行している１つ以上のプロセスに関連付けられている制御グループに対してコンピューティングリソースへのアクセスを縮小させることによって、ソフトウェアコンテナに対して１つ以上のコンピューティングリソースへのアクセスを縮小させ得る。
【００６１】
例示として図４を使用すると、工程４１６では、更新モジュール１１０は、ソフトウェアコンテナの状態をダンプして（例えば、状態の変化した部分のみをダンプ及び／又は維持して）増分チェックポイントを作成し得、次いでその増分チェックポイントをターゲットコンピューティングシステムに転送し得る。いくつかの例では、工程４１８（例えば、工程４１６の前、その間、及び／又はその後に行われる）では、更新モジュール１１０は、増分チェックポイントのサイズ（例えば、ソフトウェアコンテナの状態の変化箇所のサイズ）が所定の閾値内にあるかどうかを判定し得る。増分チェックポイントのサイズが所定の閾値内にない場合、本明細書に記載のシステムは、工程４１２に進み得る（及び、いくつかの例では、その後のチェックにおいて閾値内に収まる可能性を高めるために、ソフトウェアコンテナをソースコンピューティングシステムにおいてスロットリングし得る）。増分チェックポイントのサイズが所定の閾値内にある場合、本明細書に記載のシステムは、工程４２０に進み得る。
【００６２】
図３に戻ると、工程３１０では、本明細書に記載のシステムのうちの１つ以上は、増分チェックポイントのイテレーションでチェックポイントを更新する前に、増分チェックポイントのイテレーションのサイズに基づいて、増分チェックポイントのイテレーションをチェックポイントにマージすること及びターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることを含むタスクが所定の時間目標を満たすことを予測し得る。例えば、予測モジュール１１２は、図２のコンピューティングデバイス２０２の一部として、増分チェックポイント１２４のイテレーションでチェックポイント１２２を更新する前に、増分チェックポイント１２４のイテレーションのサイズ２３８に基づいて、増分チェックポイント１２４のイテレーションをチェックポイント１２２にマージすること及びターゲットコンピューティングシステム２０８へのソフトウェアコンテナ２２０のマイグレーションをファイナライズすることを含むタスクが時間目標２４０を満たすことを予測し得る。
【００６３】
「時間目標」という用語は、本明細書において使用される際、概して、ソフトウェアコンテナ、プロセス、及び／又はアプリケーションがフリーズ状態、オフライン状態、及び／又は通信遮断状態にある時間の受け入れ可能な長さを画定している任意の目標を指す。所定の時間目標は、任意の様々な基準により決定され得る。例えば、予測モジュール１１２は、通信セッションが存続する時間の長さに基づいて時間目標を決定し得る。例えば、伝送制御プロトコル（ＴＣＰ）セッションは、６０秒のタイムアウト長を使用し得る。これに合わせて、ＴＣＰセッションを介してプロセスと通信しているクライアントシステムは、ソフトウェアコンテナがマイグレーションの間にオフライン状態である時間帯が６０秒を超えると、セッション（ひいては、プロセスとのステートフルな通信）を失い得る。したがって、予測モジュール１１２は、時間目標を６０秒になるように決定し得る。いくつかの例では、予測モジュール１１２は、アクティブな通信セッションを識別し、このアクティブな通信セッションに関する情報に基づいてセッション長を判定、予測、及び／又は推定し、次いで、このセッション長に合わせて（例えば、セッションの切断を回避するように）時間目標を設定することによって、時間目標を決定し得る。追加的に又は代替的に、予測モジュール１１２は、サービスレベル目標を（例えば、定義されているサービスレベルアグリーメントに基づいて）決定することによって、時間目標を決定し得る。したがって、予測モジュール１１２は、どのような時間目標がサービスレベル目標と両立するかを決定し得る。
【００６４】
いくつかの例では、予測モジュール１１２は、プロセスと相互運用している１つ以上のアプリケーションに割り当てられている優先度に基づいて時間目標を決定し得る（例えば、許容されるダウンタイムを優先度の増加に応じて減少させる）。追加的に又は代替的に、予測モジュール１１２は、プロセスと相互運用しているアプリケーションに対して計算された最適な処理能力に基づいて時間目標を決定し得る（例えば、相互運用しているアプリケーションとプロセスとの間の潜在的な処理能力が、計算された最適なレベルを下回る点に至るまで、許容されるダウンタイムを増加させる）。いくつかの例では、予測モジュール１１２は、プロセスがユーザ対面の通信セッションに関与していることを判定したことに応じて、許容されるダウンタイムを減少させ得る。いくつかの例では、予測モジュール１１２は、リアルタイムのコンピューティングシステムに対して定義されたリアルタイムの制約に基づいて、時間目標を決定し得る。上述の例によって理解されるであろうように、いくつかの例では、予測モジュール１１２は時間目標を動的に決定し得る。追加的に又は代替的に、予測モジュール１１２は、矛盾なく定義された時間目標を使用し得る。いくつかの例では、予測モジュール１１２は、管理者が定義した時間目標を使用し得、及び／又はマイグレーションを実施する要求内に明示された時間目標を使用し得る。
【００６５】
予測モジュール１１２は、増分チェックポイントでマイグレーションをファイナライズすることが、任意の様々な態様で時間目標を満たすかどうかを予測し得る。例えば、予測モジュール１１２は、（ｉ）最新のチェックポイントを使用してターゲットコンピューティングシステムにソフトウェアコンテナをインスタンス化するのに要する時間、及び（ｉｉ）次の増分チェックポイントをターゲットシステムにあるチェックポイントに組み込むのに要する時間を予測し、この２つの時間量の和が時間目標内にあるかどうかを判定し得る。例えば、予測モジュール１１２は、ソフトウェアコンテナのメモリサイズに基づいて及び／又はターゲットコンピューティングシステムの１つ以上の特性に基づいてソフトウェアコンテナをインスタンス化するのに要する時間を予測し得る。加えて、予測モジュール１１２は、次の増分チェックポイントをターゲットシステムにあるチェックポイントに組み込むのに要する時間を、次の増分チェックポイントのサイズ（又はサイズの予測）、ソースコンピューティングシステムの１つ以上の特性、ターゲットコンピューティングシステムの１つ以上の特性、ソースコンピューティングシステム及びターゲットコンピューティングシステムを接続しているネットワークの１つ以上の特性、並びに／又はプロセスの１つ以上の特性（例えば、プロセスによって表現されたアプリケーションの振る舞いパターン）に基づいて予測し得る。いくつかの例では、予測モジュール１１２は、（例えば、上述の変数のうちの１つ以上を使用して前のマイグレーションの観測結果に基づいて訓練された）機械学習技術を使用して、増分チェックポイントでマイグレーションをファイナライズすることが時間目標を満たすかどうかを予測し得る。
【００６６】
例として図４を使用すると、工程４２０では、予測モジュール１１２は、ターゲットコンピューティングシステムにあるソフトウェアコンテナにチェックポイントを復元するのにどのくらいの時間を要するかを予測し得る。工程４２２では、予測モジュール１１２は、チェックポイントを復元するための予測された時間と次の増分チェックポイントを作成、転送、及びマージするための時間との和が時間目標を満たすかどうかを予測し得る。時間目標が満たされないことを予測モジュール１１２が予測すると、本明細書に記載のシステムは工程４１６に進み得る。時間目標が満たされることを予測モジュール１１２が予測すると、本明細書に記載のシステムは工程４２４に進み得る。
【００６７】
図３に戻ると、工程３１２では、本明細書に記載のシステムのうちの１つ以上は、増分チェックポイントのイテレーションをチェックポイントにマージすること及びターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズすることが所定の時間目標を満たすことを予測したことに応じて、増分チェックポイントのイテレーションをチェックポイントにマージした後、ターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションをファイナライズし得る。例えば、ファイナライズモジュール１１４は、図２のコンピューティングデバイス２０２の一部として、増分チェックポイント１２４のイテレーションをチェックポイント１２２にマージすること及びターゲットコンピューティングシステム２０８へのソフトウェアコンテナ２２０のマイグレーションをファイナライズすることが時間目標２４０を満たすことを予測したことに応じて、増分チェックポイント１２４のイテレーションをチェックポイント１２２にマージした後、ターゲットコンピューティングシステム２０８へのソフトウェアコンテナ２２０のマイグレーションをファイナライズし得る。
【００６８】
ファイナライズモジュール１１４は、ターゲットコンピューティングシステムへのソフトウェアコンテナのマイグレーションを任意の好適な様式でファイナライズし得る。いくつかの例では、ファイナライズモジュール１１４は、チェックポイントをターゲットコンピューティングシステムにある新しいソフトウェアコンテナ（例えば、マイグレーションが要求された後の前処理段階の間に既に作成されている）に復元し得、ソースコンピューティングシステムにあるソフトウェアコンテナを指し示す代わりに、ターゲットコンピューティングシステムにある新しいソフトウェアコンテナを指し示すように、通信経路をリダイレクトし得る。いくつかの例では、ファイナライズモジュール１１４は、ソフトウェア定義型ネットワーク内で、これまでソースコンピューティングシステムにあるソフトウェアコンテナに割り当てられていたインターネットプロトコルアドレスをターゲットコンピューティングシステムにある新しいソフトウェアコンテナに再割り当てすることによって、通信経路をファイナライズし得る。
【００６９】
一例では、ファイナライズモジュール１１４は、（ｉ）ソースコンピューティングシステムにあるソフトウェアコンテナをネットワークから切断し、（ｉｉ）最終の増分チェックポイントを作成、転送、及びマージし、（ｉｉｉ）ソフトウェアコンテナに対応しているファイルシステムキャッシュから保留中の入力／出力動作をストレージにフラッシュし、（ｉｖ）ソースコンピューティングシステムにあるソフトウェアコンテナによって使用されているインターネットプロトコルアドレスを（例えば、ソフトウェア定義型ネットワークを介して）解放し、（ｖ）ソースコンピューティングシステムにおいてこれまで使用していたインターネットプロトコルアドレスでデスティネーションコンピューティングシステムにあるソフトウェアコンテナを（例えば、ソフトウェア定義型ネットワークを介して）構成し、（ｖｉ）ターゲットコンピューティングシステムにあるソフトウェアコンテナをチェックポイントから復元し得る。
【００７０】
例として図４を使用すると、工程４２４では、ファイナライズモジュール１１４は、ソフトウェアコンテナの最終の増分チェックポイントを実施し、ターゲットコンピューティングシステムにあるソフトウェアコンテナをターゲットコンピューティングシステムにあるチェックポイントから復元し得る。
【００７１】
図１〜図４に関連して上に説明したように、本明細書に記載のシステムは、ソフトウェアコンテナ（例えば、ＯＰＥＮ  ＣＯＮＴＡＩＮＥＲ  ＰＲＯＪＥＣＴ  ＲＵＮＣ、ＬＸＣ、ＤＯＣＫＥＲ、ＣＯＲＥＯＳ  ＲＯＣＫＥＴなど）内で動作しているステートフルなアプリケーション（例えば、データベースアプリケーション）を、コンテナ用のソフトウェア定義型ストレージを有するホスト間でライブマイグレーションし得る。これらのシステムは、アプリケーションに対して受け入れ可能なダウンタイムを有するライブマイグレーション用に高い性能を提供し得、その結果、ステートフルなアプリケーションに接続されたクライアントからの接続が失われることはない。
【００７２】
いくつかの例では、アプリケーション及びその依存性の全ては、ホストのカーネル、プラットフォームディストリビューション、又は配備モデルのバージョンから独立している単一のコンテナにバンドルされ得る。コンテナイメージは小さいものであり得、迅速な送達を容易にし、新しいアプリケーションコンテナを配備するための時間を減少させる。本明細書に記載のシステムは、コンテナマイグレーション中にアプリケーションの高いアベイラビリティ及び高い性能を提供し得る。これらのシステムは、増分チェックポイントを使用してアプリケーションに最小のダウンタイムを保証することにより、全体のアプリケーション状態（例えば、メモリ、ファイルハンドル、プロセスハンドル、及びソケットを含む）をデスティネーションホストに効率よくマイグレーションし得る。本明細書に記載のシステムは、コンテナマイグレーション関連のアクティビティを統御し、アプリケーションの状態がマイグレーション後も一貫性を保ち続けるようにし得る。例えば、基盤ストレージシステムは、デスティネーションホスト上でストレージが利用可能であることを検証し得る。本明細書に記載のシステムは、全ての保留中の入力／出力動作をフラッシュして、データの一貫性を保証し得る。これらのシステムは、インターネットプロトコルアドレスを変更することも接続を失うこともなく、コンテナマイグレーション後も続いてネットワーク接続を保持し得る。これらのシステムはまた、マイグレーションされるコンテナの状態情報及びマイグレーションごとの実際のダウンタイムも収集し得る。本明細書に記載のシステムは、情報を意思決定エンジンに供給し得、この意思決定エンジンは、機械学習を使用して、マイグレーションポリシーを動的に最適化し得る。
【００７３】
マイグレーションを開始する前に、本明細書に記載のシステムは、コンテナメモリサイズ及び予測された復元時間に基づいて、ダウンタイム必要条件を満たすことができるかどうかをチェックし得る。次いで、ダウンタイム必要条件を満たすことができる場合又はマイグレーションを強行する場合（この場合、本明細書に記載のシステムは、マイグレーションプロセス中の更なるチェックを除外し得る）、マイグレーションプロセスは、プリマイグレーション動作に進み得る。
【００７４】
プリマイグレーション段階では、本明細書に記載のシステムは、アプリケーションコンテナイメージがデスティネーションホスト上でまだ利用可能でなければそれをダウンロードし得、また必須のリソースがデスティネーションホスト上で利用可能であることを検証し得る。これらのシステムはまた、マイグレーションされるコンテナと一致する構成で、デスティネーションホスト上に空のコンテナを作成し得る。これらのシステムはまた、マイグレーション後にインターネットプロトコルアドレスの変更又はネットワーク接続の喪失が起こることがないように、マイグレーションされるコンテナに使用されているインターネットプロトコルアドレスを空のコンテナに対して登録し得る。
【００７５】
増分チェックポイント段階では、本明細書に記載のシステムは、アプリケーションコンテナ状態を増分的に捕捉し、それをデスティネーションホストに移動させ得る。これらのシステムは、ダウンタイムを最小にするように適応的に取得するチェックポイントの数を決定し得る。第１のチェックポイントは、コンテナのメモリ全体を含み得る。本明細書に記載のシステムは、チェックポイントファイルをデスティネーションホストに転送し得る（例えば、コンテナの迅速な復元を容易にしてダウンタイムを最小にするために、一時ファイルシステム、ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ）接続型ソリッドステートドライブなどの高性能ストレージに転送し得る）。本明細書に記載のシステムは、増分チェックポイントを作成し、チェックポイントファイルをデスティネーションホストに移動させ得る。これらのシステムは、変更されているコンテナメモリの割合を全ての増分チェックポイントに対してチェックし得る。割合が、意思決定エンジンによって決定された閾値を超えている場合、これらのシステムは、メモリ変更が大きすぎて、マイグレーションはもはや適当ではないと判定し得る（例えば、復元時間が長すぎて、ダウンタイム必要条件を満たせない可能性があるため）。この場合、増分チェックポイント段階は、新しい初期完全チェックポイントでやり直し得る。割合が閾値を超えていない場合、本明細書に記載のシステムは、次のチェックポイントを実施するために必要な時間、及びそのチェックポイントから復元するために必要な時間を予測するために必要な時間を予測し得る。次のチェックポイント時間と新たに推定された復元時間との和が最大ダウンタイムを下回っている場合、本明細書に記載のシステムは、マイグレーションに進み得る。そうでない場合、これらのシステムは、ダウンタイム目標が満たされるまで増分チェックポイント及び予測を実施し続け得る。
【００７６】
マイグレーション段階では、本明細書に記載のシステムは、ソースホストにあるコンテナをネットワークから切断し、最終チェックポイントを実行し得る。同時に、これらのシステムは、ファイルシステムキャッシュから全ての保留中の入力／出力動作をディスクにフラッシュし、コンテナマイグレーションの前及び後に全てのデータがストレージ内で一貫性があることを検証し得る。最終チェックポイントのサイズは、いずれかの増分チェックポイントを最終チェックポイントとして扱う前に各増分チェックポイントのサイズをチェックすることによって制約され得るので、最終チェックポイントを取得するために必要な時間もまた制約され得る。最終チェックポイント後、本明細書に記載のシステムは、インターネットプロトコルアドレスを解放し得、その結果、そのインターネットプロトコルアドレスは、デスティネーションホスト上で再利用され得る。加えて、コンテナは、デスティネーションホスト上でチェックポイントファイルの集合体から復元され得る。
【００７７】
本明細書に記載のシステムはまた、ストレージコンテナに対してメモリ変更の割合が大きい（例えば、１０％を超える）ときも考慮し得る。増分チェックポイント段階を新たに開始したとき、これらのシステムは、ストレージコンテナ内のアプリケーションに対してストレージ速度をスロットリングし得る（例えば、アプリケーションに対してサービスレベルアグリーメントポリシーを変更することによって）。例えば、アプリケーションは、１秒当たり５０，０００回の入力／出力動作を提供するポリシーで初期に構成され得、その後、１秒当たり５，０００回の入力／出力動作を提供するポリシーに切り替わることによってスロットリングされ得る。これは、メモリ及びストレージに対してより少ない変更をもたらし得、その結果、今後の増分チェックポイントサイズを減少させ得、それにより、増分チェックポイントサイズに関する後続のチェックに合格し、マイグレーションをファイナライズすることが可能になる。
【００７８】
上述の開示は、具体的なブロック図、フローチャート、及び実施例を使用して、種々の実施形態を記載するが、本明細書において説明及び／又は例解される各ブロック図の構成要素、フローチャートの工程、動作、及び／又は構成要素は、広範なハードウェア、ソフトウェア、又はファームウェア（又はこれらの任意の組み合わせ）構成を使用して、個々に、及び／又は集合的に実装され得る。加えて、他の構成要素内に含まれる構成要素のいずれの開示も、多くの他のアーキテクチャを実装して、同じ機能性を達成することができるため、事実上、例として見なされるべきである。
【００７９】
いくつかの例では、図１の例示的なシステム１００の全て又は一部分は、クラウドコンピューティング又はネットワークベース環境の部分を表してもよい。クラウドコンピューティング環境は、インターネットを介して、種々のサービス及びアプリケーションを提供し得る。これらのクラウドベースのサービス（例えば、サービスとしてのソフトウェア、サービスとしてプラットフォーム、サービスとしてのインフラストラクチャなど）は、ウェブブラウザ又は他の遠隔インターフェースを通じて、アクセス可能であり得る。本明細書において説明される種々の機能は、遠隔デスクトップ環境又は任意の他のクラウドベースのコンピューティング環境を通じて提供され得る。
【００８０】
種々の実施形態において、図１の例示的なシステム１００の全て又は一部分は、クラウドベースのコンピューティング環境内のマルチテナンシーを容易にし得る。換言すると、本明細書において説明されるモジュールは、本明細書において説明される機能のうちの１つ以上に対するマルチテナンシーを容易にするように、コンピューティングシステム（例えば、サーバ）を構成し得る。例えば、本明細書において説明されるモジュールのうちの１つ以上は、２つ以上のクライアント（例えば、顧客）が、サーバ上で実行されているアプリケーションを共有することを可能にするように、サーバをプログラムし得る。このようにプログラムされたサーバは、複数の顧客（即ち、テナント）間でアプリケーション、オペレーティングシステム、処理システム、及び／又は記憶システムを共有し得る。本明細書において説明されるモジュールのうちの１つ以上はまた、ある顧客が別の顧客のデータ及び／又は構成情報にアクセスすることができないように、各顧客に対して、マルチテナントアプリケーションのデータ及び／又は構成情報を分割し得る。
【００８１】
種々の実施形態によれば、図１の例示的なシステム１００の全て又は一部分は、仮想環境内で実装され得る。例えば、本明細書において説明されるモジュール及び／又はデータは、仮想マシン内に存在し得る、及び／又はそこで実行し得る。本明細書において使用される際、「仮想マシン」という用語は、概して、仮想マシンマネージャ（例えば、ハイパーバイザ）によって、コンピューティングハードウェアから抽象化される任意のオペレーティングシステム環境を指す。
【００８２】
いくつかの例では、図１の例示的なシステム１００の全て又は一部分は、モバイルコンピューティング環境の部分を表し得る。モバイルコンピューティング環境は、モバイル電話、タブレットコンピュータ、電子書籍リーダ、パーソナルデジタルアシスタント、ウェアラブルコンピューティングデバイス（例えば、頭部装着型ディスプレイ、スマートウォッチなどを有するコンピューティングデバイス）、これらのうちの１つ以上の変形若しくは組み合わせ、又は任意の他の好適なモバイルコンピューティングデバイスを含む、広範なモバイルコンピューティングデバイスによって実装され得る。一部の実施例において、モバイルコンピューティング環境は、例えば、バッテリ電力への依存、任意の所与の時間に１つのフォアグラウンドアプリケーションのみを提示すること、遠隔管理特性、タッチスクリーン特性、場所及び移動データ（例えば、グローバルポジショニングシステム、ジャイロスコープ、加速度計などによって提供される）、システムレベルの構成への修正を制限する、及び／又は第３者のソフトウェアが他のアプリケーションの挙動を検査する能力、アプリケーションのインストールを制限する（例えば、承認されたアプリケーションストアのみから得る）能力などを制限する、制限されたプラットフォームを含む、１つ以上の異なる特性を含み得る。本明細書において説明される種々の機能は、モバイルコンピューティング環境に対して提供され得る、及び／又はモバイルコンピューティング環境と相互作用し得る。
【００８３】
本明細書において説明及び／又は例解される工程のプロセスパラメータ及び順序は、例として示されるに過ぎず、所望に応じて変化させることができる。例えば、本明細書において例解及び／又は説明される工程は、特定の順序で図示又は考察されるが、これらの工程は、必ずしも例解又は考察される順序で実施される必要はない。本明細書において説明及び／又は例解される種々の例示的な方法もまた、本明細書において説明若しくは例解される工程のうちの１つ以上を省略し得るか、又は開示されるものに加えて追加の工程を含み得る。
【００８４】
種々の実施形態が、完全に機能的なコンピューティングシステムの文脈で、本明細書において説明及び／又は例解されているが、これらの例示的な実施形態のうちの１つ以上は、分散を実際に行うために使用される特定のタイプのコンピュータ可読媒体にかかわらず、様々な形態のプログラム製品として分散され得る。本明細書において開示される実施形態はまた、あるタスクを実施するモジュールを使用して、実装され得る。これらのモジュールは、コンピュータ可読記憶媒体上に、又はコンピューティングシステム内に記憶され得る、スクリプト、バッチ、又は他の実行可能なファイルを含み得る。いくつかの実施形態では、これらのモジュールは、本明細書において開示される例示的な実施形態のうちの１つ以上を実施するように、コンピューティングシステムを構成し得る。
【００８５】
先述の説明は、当業者が、本明細書において開示される例示的な実施形態の種々の態様を最良に利用することを可能にするために提供されている。この例示的な説明は、網羅的であることを意図するものでも、開示されたいずれかの正確な形態に限定されることを意図するものでもない。多くの修正及び改変が、本開示の趣旨及び範囲から逸脱することなく、可能である。本明細書において開示される実施形態は、全ての点において、例解的であり、制限的ではないと見なされるべきである。本開示の範囲を判定する上では、添付の請求項及びそれらの同等物を参照するべきである。
【００８６】
別途記載されない限り、「〜に接続される（connected to）」及び「〜に連結される（coupled to）」という用語（及びそれらの派生語）は、本明細書及び請求項において使用される際、直接的及び間接的（即ち、他の要素又は構成要素を介した）接続の両方を許容するとして解釈されるものとする。加えて、「ａ」又は「ａｎ」という用語は、本明細書及び請求項において使用される際、「〜のうちの少なくとも１つ（at least one of）」を意味するとして解釈されるものとする。最後に、使用を容易にするために、「含む（including）」及び「有する（having）」という用語（及びそれらの派生語）は、本明細書及び請求項において使用される際、「備える（comprising）」という語と同義的であり、かつ同じ意味を有する。
【図１】
2019530072.tif 000003
【図２】
2019530072.tif 000004
【図３】
2019530072.tif 000005
【図４】
2019530072.tif 000006
【手続補正書】
【提出日】平成31年3月3日(2019.3.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ソフトウェアコンテナのライブマイグレーションを実施するためのコンピュータ実装方法であって、前記方法の少なくとも一部分は、少なくとも１つのプロセッサを備えるコンピューティングデバイスによって実施され、前記方法は、
ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求を少なくとも１つのプロセスが前記ソフトウェアコンテナ内で実行されている間に識別することと、
前記要求に応じて、前記実行中のプロセスのチェックポイントを作成することであって、前記チェックポイントが、前記実行中のプロセスの状態の表現を含む、ことと、
前記チェックポイントを前記ターゲットコンピューティングシステムに転送することと、
前記チェックポイントを再帰的に更新することであって、
前記実行中のプロセスの増分チェックポイントを再帰的に作成し、前記増分チェックポイントを前記ターゲットコンピューティングシステムに転送し、前記増分チェックポイントを前記チェックポイントにマージすることと、
前記増分チェックポイントの直近のイテレーションのサイズが所定の閾値を超えていることを判定することと、
前記チェックポイントの前記直近のイテレーションの前記サイズが前記所定の閾値を超えていることを判定したことに応じて、前記増分チェックポイントのほとんどのイテレーションを破棄し、新しい完全バージョンの前記チェックポイントを再作成することと、
前記新しい完全バージョンの前記チェックポイントを前記ターゲットコンピューティングシステムに転送して前記チェックポイントを置換することと、によって更新することと、
前記増分チェックポイントのイテレーションで前記チェックポイントを更新する前に、前記増分チェックポイントの前記イテレーションのサイズに基づいて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナのマイグレーションをファイナライズすることを含むタスクが所定の時間目標を満たすことを予測することと、
前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズすることが前記所定の時間目標を満たすことを予測したことに応じて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージした後、前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズすることと、を含む、コンピュータ実装方法。
【請求項２】
前記ソフトウェアコンテナに対してコンピューティングリソースへのアクセスを縮小し、それにより、前記増分チェックポイントの前記イテレーションの最大サイズを減少させ、前記タスクが前記所定の時間目標を満たすことを可能にすることによって、前記ソフトウェアコンテナを前記ソースコンピューティングシステムにおいてスロットリングすることを更に含む、請求項１に記載のコンピュータ実装方法。
【請求項３】
前記チェックポイントが、
前記プロセスのプロセスハンドルと、
前記プロセスによって保持されているファイルハンドルと、
前記プロセスによって保持されているソケットと、のうちの少なくとも１つの記憶された表現を含む、請求項１又は２に記載のコンピュータ実装方法。
【請求項４】
前記ソフトウェアコンテナは、前記ソフトウェアコンテナ内で実行している前記プロセスが、前記ソフトウェアコンテナをホストしているオペレーティングシステムに対してシステムコールを実施する、サンドボックス化された環境を含む、請求項１、２、又は３に記載のコンピュータ実装方法。
【請求項５】
前記増分チェックポイントが、前記プロセスの現在の状態と直近の前のバージョンの前記チェックポイントとの間の差異の表現を含む、請求項１、２、３、又は４に記載のコンピュータ実装方法。
【請求項６】
前記マイグレーションをファイナライズすることが、
前記チェックポイントを前記ターゲットコンピューティングシステムにある新しいソフトウェアコンテナに復元することと、
前記ソースコンピューティングシステムにある前記ソフトウェアコンテナを指し示す代わりに、前記ターゲットコンピューティングシステムにある前記新しいソフトウェアコンテナを指し示すように、通信経路をリダイレクトすることと、を含む、請求項１、２、３、４、又は５に記載のコンピュータ実装方法。
【請求項７】
前記ソフトウェアコンテナの前記マイグレーションは、クライアントシステムが前記ソースコンピューティングシステムにある前記プロセスと通信することから始まり、前記クライアントシステムが前記ターゲットコンピューティングシステムにある前記プロセスと通信することで終わる、前記クライアントシステムとのステートフルなセッションを維持する前記プロセスを含む、請求項１、２、３、４、５、又は６に記載のコンピュータ実装方法。
【請求項８】
ソフトウェアコンテナのライブマイグレーションを実施するためのシステムであって、前記システムは、
ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求を少なくとも１つのプロセスが前記ソフトウェアコンテナ内で実行されている間に識別するための手段と、
前記要求に応じて、前記実行中のプロセスのチェックポイントを作成するための手段であって、前記チェックポイントが、前記実行中のプロセスの状態の表現を含む、手段と、
前記チェックポイントを前記ターゲットコンピューティングシステムに転送するための手段と、
前記チェックポイントを再帰的に更新するための手段であって、
前記実行中のプロセスの増分チェックポイントを再帰的に作成し、前記増分チェックポイントを前記ターゲットコンピューティングシステムに転送し、前記増分チェックポイントを前記チェックポイントにマージすることと、
前記増分チェックポイントの直近のイテレーションのサイズが所定の閾値を超えていることを判定することと、
前記チェックポイントの前記直近のイテレーションの前記サイズが前記所定の閾値を超えていることを判定したことに応じて、前記増分チェックポイントの前記直近のイテレーションを破棄し、新しい完全バージョンの前記チェックポイントを再作成することと、
前記新しい完全バージョンの前記チェックポイントを前記ターゲットコンピューティングシステムに転送して前記チェックポイントを置換することと、によって更新するための手段と、
前記増分チェックポイントのイテレーションで前記チェックポイントを更新する前に、前記増分チェックポイントの前記イテレーションのサイズに基づいて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナのマイグレーションをファイナライズすることを含むタスクが所定の時間目標を満たすことを予測する、メモリ内に記憶されている、予測モジュールと、
前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズすることが前記所定の時間目標を満たすことを予測したことに応じて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージした後、前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズする、メモリ内に記憶されている、ファイナライズモジュールと、
前記識別モジュール、前記作成モジュール、前記転送モジュール、前記更新モジュール、前記予測モジュール、及び前記ファイナライズモジュールを実行するように構成されている少なくとも１つの物理プロセッサと、を含む、システム。
【請求項９】
前記予測モジュールが更に、前記ソフトウェアコンテナに対してコンピューティングリソースへのアクセスを縮小し、それにより、前記増分チェックポイントの前記イテレーションの最大サイズを減少させ、前記タスクが前記所定の時間目標を満たすことを可能にすることによって、前記ソフトウェアコンテナを前記ソースコンピューティングシステムにおいてスロットリングする、請求項８に記載のシステム。
【請求項１０】
前記チェックポイントが、
前記プロセスのプロセスハンドルと、
前記プロセスによって保持されているファイルハンドルと、
前記プロセスによって保持されているソケットと、のうちの少なくとも１つの記憶された表現を含む、請求項８又は９に記載のシステム。
【請求項１１】
前記ソフトウェアコンテナは、前記ソフトウェアコンテナ内で実行している前記プロセスが、前記ソフトウェアコンテナをホストしているオペレーティングシステムに対してシステムコールを実施する、サンドボックス化された環境を含む、請求項８、９、又は１０に記載のシステム。
【請求項１２】
前記増分チェックポイントが、前記プロセスの現在の状態と直近の前のバージョンの前記チェックポイントとの間の差異の表現を含む、請求項８、９、１０、又は１１に記載のシステム。
【請求項１３】
前記ファイナライズモジュールが、
前記チェックポイントを前記ターゲットコンピューティングシステムにある新しいソフトウェアコンテナに復元することと、
前記ソースコンピューティングシステムにある前記ソフトウェアコンテナを指し示す代わりに、前記ターゲットコンピューティングシステムにある前記新しいソフトウェアコンテナを指し示すように、通信経路をリダイレクトすることと、によって前記マイグレーションをファイナライズする、請求項８、９、１０、１１、又は１２に記載のシステム。
【請求項１４】
前記ソフトウェアコンテナの前記マイグレーションは、クライアントシステムが前記ソースコンピューティングシステムにある前記プロセスと通信することから始まり、前記クライアントシステムが前記ターゲットコンピューティングシステムにある前記プロセスと通信することで終わる、前記クライアントシステムとのステートフルなセッションを維持する前記プロセスを含む、請求項８、９、１０、１１、１２、又は１３に記載のシステム。
【請求項１５】
１つ以上のコンピュータ可読命令を記憶された状態で含む非一過性コンピュータ可読ストレージ媒体であって、前記命令が、コンピューティングデバイスの少なくとも１つのプロセッサによって実行されるとき、前記コンピューティングデバイスに、
ソフトウェアコンテナをソースコンピューティングシステムからターゲットコンピューティングシステムへとマイグレーションする要求を少なくとも１つのプロセスが前記ソフトウェアコンテナ内で実行されている間に識別させ、
前記要求に応じて、前記実行中のプロセスのチェックポイントを作成させ、前記チェックポイントが、前記実行中のプロセスの状態の表現を含み、
前記チェックポイントを前記ターゲットコンピューティングシステムに転送させ、
前記チェックポイントを、
前記実行中のプロセスの増分チェックポイントを再帰的に作成し、前記増分チェックポイントを前記ターゲットコンピューティングシステムに転送し、前記増分チェックポイントを前記チェックポイントにマージすることと、
前記増分チェックポイントの直近のイテレーションのサイズが所定の閾値を超えていることを判定することと、
前記チェックポイントの前記直近のイテレーションの前記サイズが前記所定の閾値を超えていることを判定したことに応じて、前記増分チェックポイントの前記直近のイテレーションを破棄し、新しい完全バージョンの前記チェックポイントを再作成することと、
前記新しい完全バージョンの前記チェックポイントを前記ターゲットコンピューティングシステムに転送して前記チェックポイントを置換することと、によって再帰的に更新させ、
前記増分チェックポイントのイテレーションで前記チェックポイントを更新する前に、前記増分チェックポイントの前記イテレーションのサイズに基づいて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナのマイグレーションをファイナライズすることを含むタスクが所定の時間目標を満たすことを予測させ、
前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージすること及び前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズすることが前記所定の時間目標を満たすことを予測したことに応じて、前記増分チェックポイントの前記イテレーションを前記チェックポイントにマージした後、前記ターゲットコンピューティングシステムへの前記ソフトウェアコンテナの前記マイグレーションをファイナライズさせる、非一過性コンピュータ可読ストレージ媒体。
【国際調査報告】
2019530072.tif 000007
2019530072.tif 000008