(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-05-20
(45)【発行日】2025-05-28
(54)【発明の名称】コンテナ化環境におけるキャッシュされたクラスデータの共有
(51)【国際特許分類】
G06F 9/455 20180101AFI20250521BHJP
G06F 8/60 20180101ALI20250521BHJP
G06F 12/0815 20160101ALI20250521BHJP
【FI】
G06F9/455
G06F8/60
G06F12/0815
(21)【出願番号】P 2023517723
(86)(22)【出願日】2021-07-20
(86)【国際出願番号】 CN2021107456
(87)【国際公開番号】W WO2022062613
(87)【国際公開日】2022-03-31
【審査請求日】2023-12-12
(32)【優先日】2020-09-23
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】ユー、アンヤン
(72)【発明者】
【氏名】チョプラ、ドゥルーヴ
(72)【発明者】
【氏名】バデル、アレン
(72)【発明者】
【氏名】スンダレサン、ヴィジャイ
(72)【発明者】
【氏名】ピルヴ、マリウス
(72)【発明者】
【氏名】ドーソン、マイケル
(72)【発明者】
【氏名】ハイディンガ、ダニエル
【審査官】児玉 崇晶
(56)【参考文献】
【文献】特開2003-091420(JP,A)
【文献】米国特許出願公開第2015/0033215(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/60
G06F 9/455
G06F 12/0815
(57)【特許請求の範囲】
【請求項1】
キャッシュされたクラスデータを共有するためのコンピュータ実装方法であって、
前記コンピュータが、コンテナ化環境のコンテナにおいてマネージドランタイムアプリケーションの起動を開始することと、
前記コンピュータが、アプリケーションイメージ識別子、前記マネージドランタイムアプリケーションに関連する引数、および当該マネージドランタイムアプリケーションに関連するワーカノードに対応するワーカノード識別子を含む、当該マネージドランタイムアプリケーションに関する情報を受信することと、
前記コンピュータが、前記アプリケーションイメージ識別子と前記引数との組み合わせによってキーされた第1の共有クラスキャッシュ(SCC)を、サーバによって管理される中央SCCリポジトリ内で特定することと、
前記第1のSCCを特定したことに応じて、
前記コンピュータが、前記第1のSCCを前記ワーカノードに関連するクライアントに送信することと、
前記コンピュータが、前記第1のSCCをローカルSCCリポジトリに格納することと、
を含む方法。
【請求項2】
前記コンピュータが、前記クライアントから、前記アプリケーションイメージ識別子、前記引数、前記ワーカノードに関する情報、追加のクラスデータ、事前コンパイルデータ、ならびに前記第1のSCCに関して経時的に生成および蓄積された実行データを含む、前記マネージドランタイムアプリケーションのタイプに関連する第1の更新要求を受信することと、
前記コンピュータが、前記第1の更新要求を受け入れることを決定することと、
前記第1の更新要求を受け入れたことに応じて、
前記コンピュータが、前記第1の更新要求を含む複数の更新要求を分析して、分析済み更新要求データを作成することと、
前記コンピュータが、前記分析済み更新要求データに基づいて、当該分析済み更新要求データが、前記複数の更新要求のうちの2つ以上の更新要求に共通する新たなデータを含むと判断することと、
前記コンピュータが、前記新たなデータに基づいて、前記第1のSCCを修正して第2のSCCを生成することと、
をさらに含む、請求項1に記載の方法。
【請求項3】
前記コンピュータが、前記クライアントから、前記マネージドランタイムアプリケーションによって発信され、前記第1のSCCに関連する第1の更新要求を受信することであって、当該第1の更新要求は、前記アプリケーションイメージ識別子、前記引数、前記ワーカノードに関する情報、追加のクラスデータ、事前コンパイルデータ、ならびに前記第1のSCCに関して経時的に生成および蓄積された実行データを含む、当該マネージドランタイムアプリケーションのタイプに関連する、ことと、
前記コンピュータが、前記第1の更新要求を拒否することを決定することと、
前記コンピュータが、前記第1の更新要求を拒否したことに応じて、前記クライアントに第2のSCCを送信することと、
をさらに含む、請求項1に記載の方法。
【請求項4】
前記マネージドランタイムアプリケーションの前記タイプは、前記アプリケーションイメージ識別子に基づいており、共通のアプリケーションイメージ識別子を有する複数のマネージドランタイムアプリケーションが、同じタイプとなる、
請求項2に記載の方法。
【請求項5】
前記サーバは、前記ワーカノードと分離した別個の専用ノードに配置される、
請求項1に記載の方法。
【請求項6】
前記サーバは、
前記マネージドランタイムアプリケーションの前記起動に連動して、前記コンテナに前記第1のSCCを提供することと、
コンテナオーケストレーションシステムと通信し、前記サーバの範囲内にあるマネージドランタイムアプリケーションイメージに関する情報を取得することと、
前記中央SCCリポジトリを管理することと、
前記コンテナを対応するクライアントに関連付けることと、
前記クライアントから受信した更新要求にしたがって、前記第1のSCCを更新することと、
からなる群から選択されるタスクを実行する、
請求項1に記載の方法。
【請求項7】
前記第1の更新要求を拒否することを決定することは、(i)前記第1のSCCが満杯であること、(ii)前記マネージドランタイムアプリケーションがエラーコードを返していること、(iii)当該マネージドランタイムアプリケーションが予想外のリターンコードを返していること、および(iv)前記第2のSCCが当該第1のSCCよりも新しいこと、からなる群から選択される要因に基づく、
請求項3に記載の方法。
【請求項8】
キャッシュされたクラスデータを共有するための
コンピュータプログラムであって、
コンテナ化環境のコンテナにおいてマネージドランタイムアプリケーションの起動を開始することと、
アプリケーションイメージ識別子、前記マネージドランタイムアプリケーションに関連する引数、および当該マネージドランタイムアプリケーションに関連するワーカノードに対応するワーカノード識別子を含む、当該マネージドランタイムアプリケーションに関する情報を受信することと、
前記アプリケーションイメージ識別子と前記引数との組み合わせによってキーされた第1の共有クラスキャッシュ(第1のSCC)を、サーバによって管理される中央SCCリポジトリ内で特定することと、
前記第1のSCCを特定したことに応じて、
前記第1のSCCを前記ワーカノードに関連するクライアントに送信することと、
前記第1のSCCをローカルSCCリポジトリに格納することと、
を
コンピュータに実行させる、
コンピュータプログラム。
【請求項9】
前記クライアントから、前記アプリケーションイメージ識別子、前記引数、前記ワーカノードに関する情報、追加のクラスデータ、事前コンパイルデータ、ならびに前記第1のSCCに関して経時的に生成および蓄積された実行データを含む、前記マネージドランタイムアプリケーションのタイプに関連する第1の更新要求を受信することと、
前記第1の更新要求を受け入れることを決定することと、
前記第1の更新要求を受け入れたことに応じて、
前記第1の更新要求を含む複数の更新要求を分析して、分析済み更新要求データを作成することと、
前記分析済み更新要求データに基づいて、当該分析済み更新要求データが、前記複数の更新要求のうちの2つ以上の更新要求に共通する新たなデータを含むと判断することと、
前記新たなデータに基づいて、前記第1のSCCを修正して第2のSCCを生成することと、
を
さらにコンピュータに実行させる、請求項8に記載の
コンピュータプログラム。
【請求項10】
前記クライアントから、前記マネージドランタイムアプリケーションによって発信され、前記第1のSCCに関連する第1の更新要求を受信することであって、当該第1の更新要求は、前記アプリケーションイメージ識別子、前記引数、前記ワーカノードに関する情報、追加のクラスデータ、事前コンパイルデータ、ならびに前記第1のSCCに関して経時的に生成および蓄積された実行データを含む、当該マネージドランタイムアプリケーションのタイプに関連する、ことと、
前記第1の更新要求を拒否することを決定することと、
前記第1の更新要求を拒否したことに応じて、前記クライアントに第2のSCCを送信することと、
を
さらにコンピュータに実行させる、請求項8に記載の
コンピュータプログラム。
【請求項11】
前記マネージドランタイムアプリケーションの前記タイプは、前記アプリケーションイメージ識別子に基づいており、共通のアプリケーションイメージ識別子を有する複数のマネージドランタイムアプリケーションが、同じタイプとなる、
請求項9に記載の
コンピュータプログラム。
【請求項12】
前記サーバは、前記ワーカノードと分離した別個の専用ノードに配置される、
請求項8に記載の
コンピュータプログラム。
【請求項13】
前記サーバは、
前記マネージドランタイムアプリケーションの前記起動に連動して、前記コンテナに前記第1のSCCを提供することと、
コンテナオーケストレーションシステムと通信し、前記サーバの範囲内にあるマネージドランタイムアプリケーションイメージに関する情報を取得することと、
前記中央SCCリポジトリを管理することと、
前記コンテナを対応するクライアントに関連付けることと、
前記クライアントから受信した更新要求にしたがって、前記第1のSCCを更新することと、
からなる群から選択されるタスクを実行する、
請求項8に記載の
コンピュータプログラム。
【請求項14】
前記第1の更新要求を拒否することを決定することは、(i)前記第1のSCCが満杯であること、(ii)前記マネージドランタイムアプリケーションがエラーコードを返していること、(iii)当該マネージドランタイムアプリケーションが予想外のリターンコードを返していること、および(iv)前記第2のSCCが当該第1のSCCよりも新しいこと、からなる群から選択される要因に基づく、
請求項10に記載の
コンピュータプログラム。
【請求項15】
キャッシュされたクラスデータを共有するためのコンピュータシステムであって、
プロセッサセットと、
1つ以上のコンピュータ可読記憶媒体と、を含み、
前記プロセッサセットは、前記1つ以上のコンピュータ可読記憶媒体に記憶されたプログラム命令を実行するように構成、配置、接続、もしくはプログラムされ、またはその組み合わせが行われ、
前記プログラム命令は、
コンテナ化環境のコンテナにおいてマネージドランタイムアプリケーションの起動を開始することと、
クラス共有オーケストレータ(CSO)中央サーバによって、アプリケーションイメージ識別子、前記マネージドランタイムアプリケーションに関連する引数、および当該マネージドランタイムアプリケーションに関連するワーカノードに対応するワーカノード識別子を含む、当該マネージドランタイムアプリケーションに関する情報を受信することと、
前記アプリケーションイメージ識別子と前記引数との組み合わせによってキーされた第1の共有クラスキャッシュ(第1のSCC)を、前記CSO中央サーバによって管理される中央SCCリポジトリ内で特定することと、
前記第1のSCCを特定したことに応じて、
前記第1のSCCを前記ワーカノードに関連するCSOクライアントに送信することと、
前記第1のSCCをローカルSCCリポジトリに格納することと、
を実行するようにプログラムされた命令を含む、コンピュータシステム。
【請求項16】
前記
CSOクライアントから、前記アプリケーションイメージ識別子、前記引数、前記ワーカノードに関する情報、追加のクラスデータ、事前コンパイルデータ、ならびに前記第1のSCCに関して経時的に生成および蓄積された実行データを含む、前記マネージドランタイムアプリケーションのタイプに関連する第1の更新要求を受信することと、
前記第1の更新要求を受け入れることを決定することと、
前記第1の更新要求を受け入れたことに応じて、
前記第1の更新要求を含む複数の更新要求を分析して、分析済み更新要求データを作成することと、
前記分析済み更新要求データに基づいて、当該分析済み更新要求データが、前記複数の更新要求のうちの2つ以上の更新要求に共通する新たなデータを含むと判断することと、
前記新たなデータに基づいて、前記第1のSCCを修正して第2のSCCを生成することと、
を実行するようにプログラムされた命令をさらに含む、請求項15に記載のコンピュータシステム。
【請求項17】
前記
CSOクライアントから、前記マネージドランタイムアプリケーションによって発信され、前記第1のSCCに関連する第1の更新要求を受信することであって、当該第1の更新要求は、前記アプリケーションイメージ識別子、前記引数、前記ワーカノードに関する情報、追加のクラスデータ、事前コンパイルデータ、ならびに前記第1のSCCに関して経時的に生成および蓄積された実行データを含む、当該マネージドランタイムアプリケーションのタイプに関連する、ことと、
前記第1の更新要求を拒否することを決定することと、
前記第1の更新要求を拒否したことに応じて、前記
CSOクライアントに第2のSCCを送信することと、
を実行するようにプログラムされた命令をさらに含む、請求項15に記載のコンピュータシステム。
【請求項18】
前記マネージドランタイムアプリケーションの前記タイプは、前記アプリケーションイメージ識別子に基づいており、共通のアプリケーションイメージ識別子を有する複数のマネージドランタイムアプリケーションが、同じタイプとなる、
請求項16に記載のコンピュータシステム。
【請求項19】
前記第1の更新要求を拒否することを決定することは、(i)前記第1のSCCが満杯であること、(ii)前記マネージドランタイムアプリケーションがエラーコードを返していること、(iii)当該マネージドランタイムアプリケーションが予想外のリターンコードを返していること、および(iv)前記第2のSCCが当該第1のSCCよりも新しいこと、からなる群から選択される要因に基づく、
請求項17に記載のコンピュータシステム。
【請求項20】
前記
CSO中央サーバは、
前記マネージドランタイムアプリケーションの前記起動に連動して、前記コンテナに前記第1のSCCを提供することと、
コンテナオーケストレーションシステムと通信し、前記
CSO中央サーバの範囲内にあるマネージドランタイムアプリケーションイメージに関する情報を取得することと、
前記中央SCCリポジトリを管理することと、
前記コンテナを対応する
CSOクライアントに関連付けることと、
前記
CSOクライアントから受信した更新要求にしたがって、前記第1のSCCを更新することと、
からなる群から選択されるタスクを実行する、
請求項15に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、大規模コンピューティングの分野に関し、より具体的には、複数の分離されたユーザ空間(「コンテナ」と呼ばれることもある)を有する「サービスとしてのプラットフォーム」コンピューティング環境に関する。
【背景技術】
【0002】
「サービスとしてのプラットフォーム」コンピューティング環境では、オペレーティングシステムレベルで実装される仮想化によって、ユーザ空間は互いに分離される。
【0003】
いくつかの動的言語コンピューティング環境(dynamic language computing environment)では、アプリケーションが実行時にジャストインタイム(JIT:just-in-time)コンパイルを実行し、読み出し専用クラスデータ(read-only class data)および実行される事前(AOT:ahead-of-time)コンパイルコードを含むクラスファイルがオンデマンドでロードされる。一部のシステムでは、キャッシュ機構(caching mechanism)を使用している。キャッシュ機構においては、アプリケーションのスタートアップ時に、必要なクラスがメモリマップファイル(RAMに常駐する共有クラスキャッシュ)から迅速にロードされる一方で、JITコンパイルが、キャッシュされたAOTコンパイル済みボディ(AOT compiled bodies)を迅速にロードする。
【発明の概要】
【0004】
本発明の一態様によれば、キャッシュされたクラスデータを共有するための方法、コンピュータプログラム製品、もしくはシステムまたはその組み合わせであって、以下の動作(必ずしも以下の順序ではない)を実行するものが提供される:(i)コンテナ化環境のコンテナにおいてマネージドランタイムアプリケーションの起動を開始し、(ii)アプリケーションイメージ識別子、前記マネージドランタイムアプリケーションに関連する引数、および当該マネージドランタイムアプリケーションに関連するワーカノードに対応するワーカノード識別子を含む、当該マネージドランタイムアプリケーションに関する情報を受信し、(iii)前記アプリケーションイメージ識別子と前記引数との組み合わせによってキーされた第1の共有クラスキャッシュ(SCC)を、サーバによって管理される中央SCCリポジトリ内で特定し、(iv)前記第1のSCCを特定したことに応じて、(a)前記第1のSCCを前記ワーカノードに関連するクライアントに送信し、(b)前記第1のSCCをローカルSCCリポジトリに格納し、(v)前記クライアントから、前記アプリケーションイメージ識別子、前記引数、前記ワーカノードに関する情報、追加のクラスデータ、事前コンパイルデータ、ならびに前記第1のSCCに関して経時的に生成および蓄積された実行データを含む、前記マネージドランタイムアプリケーションのタイプに関連する第1の更新要求を受信し、(vi)前記第1の更新要求を受け入れることを決定し、(vii)前記第1の更新要求を受け入れたことに応じて、(a)前記第1の更新要求を含む複数の更新要求を分析して、分析済み更新要求データを作成し、(b)前記分析済み更新要求データに基づいて、当該分析済み更新要求データが、前記複数の更新要求のうちの2つ以上の更新要求に共通する新たなデータを含むと判断し、(c)前記新たなデータに基づいて、前記第1のSCCを修正して第2のSCCを生成する。
【0005】
本発明のさらなる態様によれば、キャッシュされたクラスデータを共有するための方法、コンピュータプログラム製品、もしくはシステムまたはその組み合わせであって、以下の動作(必ずしも以下の順序ではない)を実行するものが提供される:(i)コンテナ化環境のコンテナにおいてマネージドランタイムアプリケーションの起動を開始し、(ii)アプリケーションイメージ識別子、前記マネージドランタイムアプリケーションに関連する引数、および当該マネージドランタイムアプリケーションに関連するワーカノードに対応するワーカノード識別子を含む、当該マネージドランタイムアプリケーションに関する情報を受信し、(iii)前記アプリケーションイメージ識別子と前記引数との組み合わせによってキーされた第1の共有クラスキャッシュ(SCC)を、サーバによって管理される中央SCCリポジトリ内で特定し、(iv)前記第1のSCCを特定したことに応じて、(a)前記第1のSCCを前記ワーカノードに関連するクライアントに送信し、(b)前記第1のSCCをローカルSCCリポジトリに格納し、(v)前記クライアントから、前記マネージドランタイムアプリケーションによって発信され、前記第1のSCCに関連する第1の更新要求を受信することであって、当該第1の更新要求は、前記アプリケーションイメージ識別子、前記引数、前記ワーカノードに関する情報、追加のクラスデータ、事前コンパイルデータ、ならびに前記第1のSCCに関して経時的に生成および蓄積された実行データを含む、当該マネージドランタイムアプリケーションのタイプに関連し、(vi)前記第1の更新要求を拒否することを決定し、(vii)前記第1の更新要求を拒否したことに応じて、前記クライアントに第2のSCCを送信する。
【図面の簡単な説明】
【0006】
【
図1】本発明の一実施形態に係るクラウドコンピューティング環境を示す図である。
【
図2】本発明の一実施形態に係る抽象化モデルレイヤを示す図である。
【
図3】本発明の少なくとも1つの実施形態に係るシステムのブロック図である。
【
図4】本発明の少なくとも1つの実施形態に従って少なくとも部分的に実行される方法を示すフローチャートである。
【
図5】、本発明の少なくとも1つの実施形態に係るシステムの機械論理(例えば、ソフトウェア)部分を示すブロック図である。
【
図6】本発明の少なくとも1つの実施形態に係るシステムの一部のコンポーネントを示すブロック図である。
【
図7】本発明の少なくとも1つの実施形態に係る様々なシステムコンポーネント間の情報フローを示すブロック図である。
【発明を実施するための形態】
【0007】
本発明のいくつかの実施形態に係るコンテナオーケストレータ(container orchestrator)は、クラス共有オーケストレータ(CSO:class sharing orchestrator)サブシステムを備えている。CSOは、クラウド環境におけるコンテナ化されたアプリケーション間でのクラスデータの共有を管理し、アプリケーションのスタートアップ性能、CPU消費、およびメモリ使用量を改善する。共有クラスキャッシュは、互いに分離して動作する複数の仮想マシンが、アプリケーションクラスデータを保持する単一のキャッシュ(本明細書では「共有クラスキャッシュ」(SCC:shared class cache)と称する)を共有することを可能にする。メモリマップファイル(memory mapped file)として構成されたクラスキャッシュは、(1)クラスの不変部分(immutable part)、(2)事前(AOT)コンパイルコード、(3)プロファイリングデータという3つの情報を格納する。
【0008】
この詳細な説明のセクションは、以下の(i)「ハードウェアおよびソフトウェア環境」、(ii)「実施形態例」、(iii)「さらなる注記もしくは実施形態またはその両方」、および(iv)「定義」のサブセクションに分かれている。
【0009】
I.ハードウェアおよびソフトウェア環境
本発明は、任意の可能な技術詳細レベルで統合されたシステム、方法もしくはコンピュータプログラム製品またはそれらの組み合わせとすることができる。コンピュータプログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を記憶したコンピュータ可読記憶媒体を含んでもよい。
【0010】
コンピュータ可読記憶媒体は、命令実行装置によって使用される命令を保持し、記憶することができる有形の装置とすることができる。コンピュータ可読記憶媒体は、一例として、電子記憶装置、磁気記憶装置、光学記憶装置、電磁記憶装置、半導体記憶装置またはこれらの適切な組み合わせであってよい。コンピュータ可読記憶媒体のより具体的な一例としては、ポータブルコンピュータディスケット、ハードディスク、RAM、ROM、EPROM(またはフラッシュメモリ)、SRAM、CD-ROM、DVD、メモリスティック、フロッピーディスク、パンチカードまたは溝内の隆起構造などに命令を記録した機械的に符号化された装置、およびこれらの適切な組み合せが挙げられる。本明細書で使用されるコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波管もしくは他の伝送媒体を介して伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、またはワイヤを介して送信される電気信号のような、一過性の信号それ自体として解釈されるべきではない。
【0011】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピュータ装置/処理装置へダウンロード可能である。あるいは、ネットワーク(例えばインターネット、LAN、WANもしくはワイヤレスネットワークまたはこれらの組み合わせ)を介して、外部コンピュータまたは外部記憶装置へダウンロード可能である。ネットワークは、銅製伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータもしくはエッジサーバまたはこれらの組み合わせを備えることができる。各コンピュータ装置/処理装置内のネットワークアダプタカードまたはネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、当該コンピュータ可読プログラム命令を、各々のコンピュータ装置/処理装置におけるコンピュータ可読記憶媒体に記憶するために転送する。
【0012】
本発明の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用構成データ、または、スモールトークやC++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語や類似のプログラミング言語などの手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで記述されたソースコードもしくはオブジェクトコードのいずれかとすることができる。コンピュータ可読プログラム命令は、スタンドアロン型ソフトウェアパッケージとして完全にユーザのコンピュータ上で、または部分的にユーザのコンピュータ上で実行可能である。あるいは、部分的にユーザのコンピュータ上でかつ部分的にリモートコンピュータ上で、または、完全にリモートコンピュータもしくはサーバ上で実行可能である。後者の場合、リモートコンピュータは、LANやWANを含む任意の種類のネットワークを介してユーザのコンピュータに接続してもよいし、外部コンピュータに(例えば、インターネットサービスプロバイダを使用してインターネットを介して)接続してもよい。いくつかの実施形態において、例えばプログラマブル論理回路、フィールドプログラマブルゲートアレイ(FPGA)、プログラマブル論理アレイ(PLA)を含む電子回路は、本発明の態様を実行する目的で当該電子回路をカスタマイズするために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行することができる。
【0013】
本発明の態様は、本明細書において、本発明の実施形態に係る方法、装置(システム)、およびコンピュータプログラム製品のフローチャートもしくはブロック図またはその両方を参照して説明されている。フローチャートもしくはブロック図またはその両方における各ブロック、および、フローチャートもしくはブロック図またはその両方における複数のブロックの組み合わせは、コンピュータ可読プログラム命令によって実行可能である。
【0014】
これらのコンピュータ可読プログラム命令は、機械を生産するために、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサに提供することができる。これにより、このようなコンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作を実行するための手段を創出する。これらのコンピュータ可読プログラム命令はさらに、コンピュータ、プログラマブルデータ処理装置もしくは他の装置またはこれらの組み合わせに対して特定の態様で機能するよう命令可能なコンピュータ可読記憶媒体に記憶することができる。これにより、命令が記憶された当該コンピュータ可読記憶媒体は、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作の態様を実行するための命令を含む製品を構成する。
【0015】
また、コンピュータ可読プログラム命令を、コンピュータ、他のプログラマブル装置、または他の装置にロードし、一連の動作ステップを当該コンピュータ、他のプログラマブル装置、または他の装置上で実行させることにより、コンピュータ実行プロセスを生成してもよい。これにより、当該コンピュータ、他のプログラマブル装置、または他の装置上で実行される命令が、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作を実行する。
【0016】
図面におけるフローチャートおよびブロック図は、本発明の種々の実施形態に係るシステム、方法およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示している。この点に関して、フローチャートまたはブロック図における各ブロックは、特定の論理機能を実行するための1つ以上の実行可能な命令を含む、命令のモジュール、セグメント、または部分を表すことができる。他の一部の実装形態において、ブロック内に示した機能は、各図に示す順序とは異なる順序で実行されてもよい。例えば、関係する機能に応じて、連続して示される2つのブロックが、実際には、1つの工程として達成されてもよいし、同時もしくは略同時に実行されてもよいし、部分的もしくは全体的に時間的に重複した態様で実行されてもよいし、ブロックが場合により逆順で実行されてもよい。なお、ブロック図もしくはフローチャートまたはその両方における各ブロック、および、ブロック図もしくはフローチャートまたはその両方における複数のブロックの組み合わせは、特定の機能もしくは動作を行う、または専用ハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェアベースのシステムによって実行可能である。
【0017】
本開示は、クラウドコンピューティングに関する詳細な説明を含むが、本明細書に記載された教示の実装形態は、クラウドコンピューティング環境に限定されないことを理解されたい。むしろ、本発明の実施形態は、現在知られている又は後に開発される任意の他のタイプのコンピューティング環境と組み合わせて実施することが可能である。
【0018】
クラウドコンピューティングは、設定可能なコンピューティングリソースの共有プール(例えばネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、記憶装置、アプリケーション、仮想マシンおよびサービス)へ、簡便かつオンデマンドのネットワークアクセスを可能にするためのサービス提供のモデルであり、リソースは、最小限の管理労力または最小限のサービスプロバイダとのやり取りによって速やかに準備(provision)およびリリースできるものである。このクラウドモデルは、少なくとも5つの特性、少なくとも3つのサービスモデル、および少なくとも4つの展開モデルを含むことができる。
【0019】
特性は以下の通りである。
【0020】
オンデマンド・セルフサービス:クラウドの消費者は、サービスプロバイダとの人的な対話を必要することなく、必要に応じて自動的に、サーバ時間やネットワークストレージなどのコンピューティング能力を一方的に準備することができる。
【0021】
ブロード・ネットワークアクセス:コンピューティング能力はネットワーク経由で利用可能であり、また、標準的なメカニズムを介してアクセスできる。それにより、異種のシンまたはシッククライアントプラットフォーム(例えば、携帯電話、ラップトップ、PDA)による利用が促進される。
【0022】
リソースプーリング:プロバイダのコンピューティングリソースはプールされ、マルチテナントモデルを利用して複数の消費者に提供される。様々な物理リソースおよび仮想リソースが、需要に応じて動的に割り当ておよび再割り当てされる。一般に消費者は、提供されたリソースの正確な位置を管理または把握していないため、位置非依存(location independence)の感覚がある。ただし消費者は、より高い抽象レベル(例えば、国、州、データセンタ)では場所を特定可能な場合がある。
【0023】
迅速な柔軟性(elasticity):コンピューティング能力は、迅速かつ柔軟に準備することができるため、場合によっては自動的に、直ちにスケールアウトし、また、速やかにリリースされて直ちにスケールインすることができる。消費者にとって、準備に利用可能なコンピューティング能力は無制限に見える場合が多く、任意の時間に任意の数量で購入することができる。
【0024】
測定されるサービス:クラウドシステムは、サービスの種類(例えば、ストレージ、処理、帯域幅、アクティブユーザアカウント)に適したある程度の抽象化レベルでの測定機能を活用して、リソースの使用を自動的に制御し最適化する。リソース使用量を監視、制御、および報告して、利用されるサービスのプロバイダおよび消費者の両方に透明性を提供することができる。
【0025】
サービスモデルは以下の通りである。
【0026】
サービスとしてのソフトウェア(SaaS):消費者に提供される機能は、クラウドインフラストラクチャ上で動作するプロバイダのアプリケーションを利用できることである。当該そのアプリケーションは、ウェブブラウザ(例えばウェブメール)などのシンクライアントインタフェースを介して、各種のクライアント装置からアクセスできる。消費者は、ネットワーク、サーバ、オペレーティングシステム、ストレージや、個別のアプリケーション機能さえも含めて、基礎となるクラウドインフラストラクチャの管理や制御は行わない。ただし、ユーザ固有の限られたアプリケーション構成の設定はその限りではない。
【0027】
サービスとしてのプラットフォーム(PaaS):消費者に提供される機能は、プロバイダによってサポートされるプログラム言語およびツールを用いて、消費者が作成または取得したアプリケーションを、クラウドインフラストラクチャに展開(deploy)することである。消費者は、ネットワーク、サーバ、オペレーティングシステム、ストレージを含む、基礎となるクラウドインフラストラクチャの管理や制御は行わないが、展開されたアプリケーションを制御でき、かつ場合によってはそのホスティング環境の構成も制御できる。
【0028】
サービスとしてのインフラストラクチャ(IaaS):消費者に提供される機能は、オペレーティングシステムやアプリケーションを含む任意のソフトウェアを消費者が展開および実行可能な、プロセッサ、ストレージ、ネットワーク、および他の基本的なコンピューティングリソースを準備することである。消費者は、基礎となるクラウドインフラストラクチャの管理や制御は行わないが、オペレーティングシステム、ストレージ、および展開されたアプリケーションを制御でき、かつ場合によっては一部のネットワークコンポーネント(例えばホストファイアウォール)を部分的に制御できる。
【0029】
展開モデルは以下の通りである。
【0030】
プライベートクラウド:このクラウドインフラストラクチャは、特定の組織専用で運用される。このクラウドインフラストラクチャは、当該組織または第三者によって管理することができ、オンプレミスまたはオフプレミスで存在することができる。
【0031】
コミュニティクラウド:このクラウドインフラストラクチャは、複数の組織によって共有され、共通の関心事(例えば、ミッション、セキュリティ要件、ポリシー、およびコンプライアンス)を持つ特定のコミュニティをサポートする。このクラウドインフラストラクチャは、当該組織または第三者によって管理することができ、オンプレミスまたはオフプレミスで存在することができる。
【0032】
パブリッククラウド:このクラウドインフラストラクチャは、不特定多数の人々や大規模な業界団体に提供され、クラウドサービスを販売する組織によって所有される。
【0033】
ハイブリッドクラウド:このクラウドインフラストラクチャは、2つ以上のクラウドモデル(プライベート、コミュニティまたはパブリック)を組み合わせたものとなる。それぞれのモデル固有の実体は保持するが、標準または個別の技術によってバインドされ、データとアプリケーションの可搬性(例えば、クラウド間の負荷分散のためのクラウドバースティング)を実現する。
【0034】
クラウドコンピューティング環境は、ステートレス性(statelessness)、低結合性(low coupling)、モジュール性(modularity)および意味論的相互運用性(semantic interoperability)に重点を置いたサービス指向型環境である。クラウドコンピューティングの中核にあるのは、相互接続されたノードのネットワークを含むインフラストラクチャである。
【0035】
ここで、
図1に例示的なクラウドコンピューティング環境50を示す。図示するように、クラウドコンピューティング環境50は1つ以上のクラウドコンピューティングノード10を含む。これらに対して、クラウド消費者が使用するローカルコンピュータ装置(例えば、PDAもしくは携帯電話54A、デスクトップコンピュータ54B、ラップトップコンピュータ54C、もしくは自動車コンピュータシステム54Nまたはこれらの組み合わせなど)は通信を行うことができる。ノード10は互いに通信することができる。ノード10は、例えば、上述のプライベート、コミュニティ、パブリックもしくはハイブリッドクラウドまたはこれらの組み合わせなど、1つ以上のネットワークにおいて、物理的または仮想的にグループ化(不図示)することができる。これにより、クラウドコンピューティング環境50は、サービスとしてのインフラストラクチャ、プラットフォームもしくはソフトウェアまたはこれらの組み合わせを提供することができ、クラウド消費者はこれらについて、ローカルコンピュータ装置上にリソースを維持する必要がない。なお、
図1に示すコンピュータ装置54A~Nの種類は例示に過ぎず、コンピューティングノード10およびクラウドコンピューティング環境50は、任意の種類のネットワークもしくはネットワークアドレス指定可能接続(例えば、ウェブブラウザの使用)またはその両方を介して、任意の種類の電子装置と通信可能であることを理解されたい。
【0036】
ここで、クラウドコンピューティング環境50(
図1)によって提供される機能的抽象化レイヤのセットを
図2に示す。なお、
図2に示すコンポーネント、レイヤおよび機能は例示に過ぎず、本発明の実施形態はこれらに限定されないことをあらかじめ理解されたい。図示するように、以下のレイヤおよび対応する機能が提供される。
【0037】
ハードウェアおよびソフトウェアレイヤ60は、ハードウェアコンポーネントおよびソフトウェアコンポーネントを含む。ハードウェアコンポーネントの例には、メインフレーム61、縮小命令セットコンピュータ(RISC)アーキテクチャベースのサーバ62、サーバ63、ブレードサーバ64、記憶装置65、ならびにネットワークおよびネットワークコンポーネント66が含まれる。いくつかの実施形態において、ソフトウェアコンポーネントは、ネットワークアプリケーションサーバソフトウェア67およびデータベースソフトウェア68を含む。
【0038】
仮想化レイヤ70は、抽象化レイヤを提供する。当該レイヤから、例えば、仮想サーバ71、仮想ストレージ72、仮想プライベートネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティングシステム74、仮想クライアント75、ならびにクラス共有オーケストレータ76などの仮想エンティティを提供することができる。
【0039】
一例として、管理レイヤ80は以下の機能を提供することができる。リソース準備81は、クラウドコンピューティング環境内でタスクを実行するために利用されるコンピューティングリソースおよび他のリソースの動的な調達を可能にする。計量および価格設定82は、クラウドコンピューティング環境内でリソースが利用される際のコスト追跡、およびこれらのリソースの消費に対する請求またはインボイス送付を可能にする。一例として、これらのリソースはアプリケーションソフトウェアのライセンスを含んでもよい。セキュリティは、データおよび他のリソースに対する保護のみならず、クラウド消費者およびタスクの識別確認を可能にする。ユーザポータル83は、消費者およびシステム管理者にクラウドコンピューティング環境へのアクセスを提供する。サービスレベル管理84は、要求されたサービスレベルが満たされるように、クラウドコンピューティングリソースの割り当ておよび管理を可能にする。サービス品質保証(SLA)の計画および履行85は、SLAに従って将来必要になると予想されるクラウドコンピューティングリソースの事前手配および調達を可能にする。
【0040】
ワークロードレイヤ90は、クラウドコンピューティング環境の利用が可能な機能の例を提供する。このレイヤから提供可能なワークロードおよび機能の例には、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想教室教育の配信93、データ分析処理94、取引処理95が含まれる。
【0041】
次に、本発明に係るソフトウェアもしくは方法またはその両方のために可能なハードウェアおよびソフトウェア環境の一実施形態を、図面を参照して詳細に説明する。
図3は、ネットワーク化コンピュータシステム100の様々な部分を示す機能ブロック図である。ネットワーク化コンピュータシステム100は、コンテナオーケストレータサブシステム102、クライアントコンピュータサブシステム104、通信ネットワーク114、サーバコンピュータ200、通信ユニット202、プロセッサセット204、入出力(I/O)インタフェースセット206、メモリ208、持続性ストレージ210、ディスプレイデバイス212、外部デバイス214、ランダムアクセスメモリ(RAM230)、キャッシュ232、およびコンテナオーケストレータプログラム300を含む。
【0042】
コンテナオーケストレータサブシステム102は、多くの点で、本発明における様々なコンピュータサブシステムを代表している。したがって、コンテナオーケストレータサブシステム102のいくつかの部分について、以下の段落にて説明する。
【0043】
コンテナオーケストレータサブシステム102は、ラップトップコンピュータ、タブレットコンピュータ、ネットブックコンピュータ、パーソナルコンピュータ(PC)、デスクトップコンピュータ、パーソナルデジタルアシスタント(PDA)、スマートフォン、または通信ネットワーク114を介してクライアントサブシステムと通信可能な任意のプログラム可能電子デバイスとすることができる。コンテナオーケストレータプログラム300は、この詳細な説明のセクションにおける「実施形態例」サブセクションにて以下で詳述する特定のソフトウェア機能を作成、管理、および制御するために使用される機械可読命令もしくはデータまたはその両方の集合体である。
【0044】
コンテナオーケストレータサブシステム102は、通信ネットワーク114を介して他のコンピュータサブシステムと通信可能である。通信ネットワーク114は、例えば、ローカルエリアネットワーク(LAN)、インターネットなどのワイドエリアネットワーク(WAN)、またはその組み合わせとすることができ、有線、無線、または光ファイバ接続を含むことができる。一般に、通信ネットワーク114は、サーバおよびクライアントサブシステム間の通信をサポートする接続およびプロトコルの任意の組み合わせとすることができる。
【0045】
コンテナオーケストレータサブシステム102は、多くの両矢印を有するブロック図として示される。これらの両矢印(個別の参照数字はない)は、コンテナオーケストレータサブシステム102の様々なコンポーネント間の通信を実現する、通信ファブリックを表す。この通信ファブリックは、プロセッサ(マイクロプロセッサ、通信およびネットワークプロセッサなど)、システムメモリ、周辺デバイス、およびシステム内の他の任意のハードウェアコンポーネント間でデータもしくは制御情報またはその両方を渡すために設計された任意のアーキテクチャで実装することができる。例えば、通信ファブリックは、少なくとも部分的に、1つ以上のバスで実装することができる。
【0046】
メモリ208および持続性ストレージ(persistent storage)210は、コンピュータ可読記憶媒体である。一般に、メモリ208は、任意の適切な揮発性または不揮発性のコンピュータ可読記憶媒体を含むことができる。なお、現在もしくは近い将来またはその両方において、(i)外部デバイス214が、メモリの一部または全部をコンテナオーケストレータサブシステム102に供給できる可能性があること、もしくは(ii)コンテナオーケストレータサブシステム102の外部のデバイスが、コンテナオーケストレータサブシステム102にメモリを提供できる可能性があること、またはその両方の可能性があることに留意されたい。
【0047】
コンテナオーケストレータプログラム300は、(通常はメモリ208の1つ以上のメモリを通じて)それぞれのコンピュータプロセッサセット204の1つ以上がアクセスもしくは実行またはその両方を行うために、持続性ストレージ210に記憶される。持続性ストレージ210は、(i)少なくとも一時的な信号よりも持続性があり、(ii)プログラム(そのソフトロジックもしくはデータまたはその両方を含む)を、有形媒体(磁気または光学ドメインなど)上に記憶し、(iii)永久ストレージ(permanent storage)よりも実質的に持続性が低いものである。あるいは、データストレージは、持続性ストレージ210によって提供されるストレージの種類よりも持続的もしくは永久的またはその両方であってもよい。
【0048】
コンテナオーケストレータプログラム300は、機械可読かつ機械実行可能命令もしくは実体データ(すなわち、データベースに記憶されたデータ種類)またはその両方を含んでもよい。この特定の実施形態では、持続性ストレージ210は、磁気ハードディスクドライブを含む。いくつかの可能な変形例を挙げると、持続性ストレージ210は、ソリッドステートハードドライブ、半導体記憶装置、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROM)、フラッシュメモリ、またはプログラム命令またはデジタル情報を記憶可能な他の任意のコンピュータ可読記憶媒体を含むことができる。
【0049】
持続性ストレージ210が使用する媒体は、取り外し可能であってもよい。例えば、リムーバブルハードドライブが持続性ストレージ210に使用されてもよい。他の例としては、持続性ストレージ210の一部でもある別のコンピュータ可読記憶媒体上に転送するためにドライブに挿入される光および磁気ディスク、サムドライブ、ならびにスマートカードが挙げられる。
【0050】
通信ユニット202は、これらの例では、コンテナオーケストレータサブシステム102の外部の他のデータ処理システムまたはデバイスとの通信を可能にする。これらの例では、通信ユニット202は、1つ以上のネットワークインタフェースカードを含む。通信ユニット202は、物理的および無線通信リンクのいずれかまたは両方を使用して通信を実現してもよい。本明細書で説明するソフトウェアモジュールは、通信ユニット(通信ユニット202など)を介して(持続性ストレージ210などの)持続性記憶装置にダウンロードされてもよい。
【0051】
I/Oインタフェースセット206は、サーバコンピュータ200とのデータ通信においてローカル接続可能な他のデバイスとのデータの入出力を可能にする。例えば、I/Oインタフェースセット206は、外部デバイス214との接続を実現する。外部デバイス214は、キーボード、キーパッド、タッチスクリーン、もしくは他の適切な入力デバイスまたはその組み合わせなどのデバイスを含んでもよい。外部デバイス214は、例えば、サムドライブ、ポータブル光ディスクまたは磁気ディスク、およびメモリカードなどのポータブル・コンピュータ可読記憶媒体を含むこともできる。本発明の実施形態を実施するために使用されるソフトウェアおよびデータ(例えば、コンテナオーケストレータプログラム300)は、このようなポータブル・コンピュータ可読記憶媒体に記憶することができる。これらの実施形態において、関連するソフトウェアは、その全体または一部が、I/Oインタフェースセット206を介して持続性ストレージ210にロードされてもよい(または、ロードされなくてもよい)。また、I/Oインタフェースセット206は、ディスプレイデバイス212ともデータ通信接続する。
【0052】
ディスプレイデバイス212は、データをユーザに表示する機構を実現するものであり、例えば、コンピュータモニタまたはスマートフォンの表示画面であってもよい。
【0053】
本明細書に記載のプログラムは、本発明の特定の実施形態において当該プログラムが実装される用途に基づいて識別される。しかしながら、本明細書におけるいかなる具体的なプログラム名称も、便宜上使用しているに過ぎない。したがって本発明は、そのような名称によって識別もしくは示唆またはその両方がなされるいずれかの特定の用途における使用に限定されるべきものではない。
【0054】
本発明の種々の実施形態を例示として説明してきたが、網羅的であることや、開示した実施形態に限定することを意図したものではない。当業者には明らかなように、記載した各実施形態の範囲から逸脱することなく、多くの変更および変形が可能である。本明細書で用いられる用語は、各実施形態の原理、実際の用途、または市場で確認される技術に対する技術的な改善を最もよく説明するために、または、他の当業者が本明細書に開示する各実施形態を理解できるように選択されたものである。
【0055】
II.実施形態例
図4は、本発明に従った方法を示すフローチャート250である。
図5は、フローチャート250の方法動作の少なくとも一部を実行するためのコンテナオーケストレータプログラム300を示す図である。本方法および関連するソフトウェアを、
図4(方法動作ブロックについて)および
図5(ソフトウェアブロックについて)を主に参照しながら、以下の段落を通じて説明する。
図5のコンテナオーケストレータプログラム300を記憶可能な物理的領域の1つとして、持続性ストレージ210(
図3参照)が挙げられる。
【0056】
処理は、動作S255から開始する。S255にて、コンテナオーケストレータプログラム300は、コンテナ化環境の第1のコンテナにおけるマネージドランタイムアプリケーション(managed runtime application)の起動を開始する。コンテナオーケストレータプログラム300のクラス共有オーケストレータモジュール(CSOモジュール310)は、アプリケーションイメージ識別子、マネージドランタイムアプリケーションの第1のインスタンスに渡される引数のリスト、およびマネージドランタイムアプリケーションの第1のインスタンスをホストするワーカノードに対応するワーカノード識別子を含む、マネージドランタイムアプリケーションに関する情報を受信する。
【0057】
処理は、動作S260に進む。S260にて、コンテナオーケストレータプログラム300の共有クラスキャッシュモジュール312は、マネージドランタイムアプリケーションによる使用に適した共有クラスキャッシュ(SCC:shared class cache)を中央SCCリポジトリから検索する。ここでの適性は、マネージドランタイムアプリケーションに関連する特定の属性に基づく。これらの属性は、アプリケーションイメージに関連する識別子、アプリケーションの起動または操作に関連する1つ以上の引数、もしくは第1のコンテナに関連する識別子またはその組み合わせを含むことができる。
【0058】
処理は、動作S265に進む。S265にて、コンテナオーケストレータプログラム300のCSOモジュール310のキャッシュ共有オーケストレータクライアントサブモジュール(CSOクライアントサブモジュール316)は、共有クラスキャッシュをマネージドランタイムアプリケーションにローカルに、すなわち第1のコンテナに格納する。
【0059】
処理は、動作S270に進む。S270にて、CSO中央サーバサブモジュール314は、CSOクライアントサブモジュール316(マネージドランタイムアプリケーション、または第1のコンテナの内部もしくは外部で実行されている他のアプリケーションに対応)から更新要求を受信する。
【0060】
処理は、判断S275に進む。S275にて、CSO中央サーバサブモジュール314は、上述の動作S270に関連して受信した更新要求を受け入れるか拒否するかを判断する。CSO中央サーバサブモジュール314が更新要求を拒否すると判断した場合、(判断S275にて「拒否」の分岐)、処理は動作S280に進む。S280にて、CSO中央サーバサブモジュール314は、要求者(この場合、CSOクライアントサブモジュール316)に、マネージドランタイムアプリケーションが使用するための第2の共有クラスキャッシュを送信する。
【0061】
CSO中央サーバサブモジュール314が更新要求を受け入れると判断した場合(判断S275にて「受諾」の分岐)、処理は動作S285に進む。S285にて、CSO中央サーバサブモジュール314は、過去に受信され格納された他の要求(ある場合)と共に、更新要求を格納する。
【0062】
要求が閾値数(threshold number)だけ蓄積されると(または、他のトリガイベントが発生すると)、CSO中央サーバサブモジュール314は、蓄積された複数の更新要求を分析する。
図4の実施形態では、CSO中央サーバサブモジュール314は、2つ以上の更新要求が少なくともいくつかの共通データを共有していると判定する。なお、いくつかの実施形態では、同じアプリケーションタイプに関連する複数の更新要求が一緒に分析される。
【0063】
処理は、動作S290に進む。S290にて、CSO中央サーバサブモジュール314は、2つ以上の更新要求が共通データを共有していると判断したことに応じて、共通データを第1の共有クラスキャッシュに追加し、第2の共有クラスキャッシュを生成する。
【0064】
処理は、動作S295に進む。S295にて、CSO中央サーバサブモジュール314は、第1の共有クラスキャッシュに関連するデプロイメントからのその後の更新要求を拒否する。
【0065】
III.さらなる注記もしくは実施形態またはその両方
本発明のいくつかの実施形態は、動的言語環境(例えば、Java)に関する現在の技術水準に関して、以下の事実、潜在的な問題、もしくは潜在的な改善領域またはその組み合わせのうちの1つ以上を認識することができる:(i)ジャストインタイム(JIT)コンパイルは、オーバーヘッドを追加する可能性があり、これが特に、JITコンパイルの大部分が行われるスタートアップ時に、アプリケーションのパフォーマンスに悪影響を与える可能性があること、(ii)JITコンパイルは、高速なアプリケーションのスタートアップおよびランプアップを妨げる可能性があること、もしくは(iii)クラスファイルはオンデマンドでロードされるが、ロードするクラス数が多いアプリケーションでは、クラスロードがアプリケーションスタートアップの遅れの大きな原因となる可能性があること、またはこれらの組み合わせ。
【0066】
いくつかの実施形態において、「アプリケーション」という用語は、「ジャストインタイム」コンパイルを実行することができる仮想マシン上で動作するソフトウェアプログラムを指す。このようなアプリケーションの非限定的な例としては、Spring Bootで構築された証券取引所ウェブアプリケーションや、Open Libertyで構築されたホテル予約ウェブアプリケーションが挙げられる。Spring BootおよびOpen Libertyは、Java仮想マシンの上で動作する。
【0067】
本明細書では、特定の製品(例えば、「Java」、「OpenJ9」、および「JVM」)を参照しているが、本発明の実施形態は、このような製品に限定されるものではない。いくつかの実施形態は、共有クラスキャッシュなどの特定のキャッシュ機構を採用する他の動的実行環境にも同様に適用される。(なお、「Spring Boot」、「Open Liberty」、「Java」、「Java仮想マシン」、「OpenJ9」、もしくは「JVM」という用語またはその組み合わせは、世界中の様々な法域における商標権の対象となる可能性があり、ここでは、このような商標権が存在し得る範囲で標章によって適正に称される製品またはサービスに対して言及する場合にのみ使用される)。
【0068】
本発明のいくつかの実施形態は、以下の特徴、特性、もしくは利点またはその組み合わせのうちの1つ以上を含むことができる:(i)コンパイルされたメソッドのキャッシュを継続的に改善する、(ii)継続的かつ段階的な改善アプローチを採用して、JITは、追跡してキャッシュにマージ可能なメソッドの高速バージョンをコンパイルする、(iii)クラウド上のアプリケーションランタイムのユースケースを最適化する、(iv)コンテナ構成を自動化するオーケストレーションフレームワークを中心としたソリューション、(v)パフォーマンスの向上に使用可能な統計情報を中央領域に送信して再利用し、アプリケーションのコンパイルプロファイルを継続的に改善する、(vi)コンパイルプロファイルは動的で、中央で通信(communicate centrally)でき、それぞれのワークロードに関連するコンパイルプロファイルをオンデマンドで取得し改善することができる。
【0069】
本発明のいくつかの実施形態は、本明細書においてOpenJ9に関連して説明されるが、OpenJ9への適用可能性という点で限定されるものではない。OpenJ9では、Javaアプリケーションのクラスデータは、共有クラスキャッシュ(SCC)に格納される。共有クラスキャッシュ(SCC)とは、以下を含む情報を格納するメモリマップファイルである:(i)クラスの不変部分、(ii)事前(AOT)コンパイルコード、および(iii)プロファイリングデータ。必要なクラスはメモリマップファイル(RAMに常駐している場合が多いSCC)から素早くロードでき、JITコンパイルは、キャッシュされたAOTコンパイル済みボディを迅速にロードするように削減されるので、アプリケーションのスタートアップが加速される。SCCのデータ投入(population)は実行時に透過的に生成されるため、アプリケーションに必要なクラスとメソッドのみがキャッシュされ、AOTボディは少なくともある程度、実行中アプリケーションに合わせて調整されるようになる(なお、「OpenJ9」もしくは「Java」という用語またはその両方は、世界中の様々な法域における商標権の対象となる可能性があり、ここでは、このような商標権が存在し得る範囲で標章によって適正に称される製品またはサービスに対して言及する場合にのみ使用される)。
【0070】
本発明のいくつかの実施形態に係るクラス共有オーケストレータ(CSO)は、少なくとも以下の機能を実行する:(i)クラウド上のJavaアプリケーションのすべてのデプロイメントに、互換性のある高品質のSCCを提供する、(ii)実行中のアプリケーションからSCCデータを収集し、収集したSCCデータに基づいてオフライン処理を実行することによって、実行中のアプリケーションへの影響を最小限にしながら各デプロイメントに提供するSCCの品質を継続的に向上させる。
【0071】
クラス共有オーケストレータ(CSO)は、以下のようにして従来のソリューションを改善する:(i)共有クラスキャッシュ(SCC)の品質を向上させる、もしくは、(ii)コンテナ環境におけるJavaアプリケーションのSCC共有機能の使い勝手を向上させる、またはその両方を行う。これらの改善方法については、以下の段落にて列挙して説明する。
【0072】
(SCCの品質の向上)
いくつかの実施形態において、実行中のコンテナ化Javaアプリケーションは、SCC統合メカニズム(SCC consolidation mechanism)を介して、対応する(元の)SCCに自身のランタイムクラスデータを寄与する。統合メカニズムは、同種の実行中アプリケーションからの更新を結合して、将来のアプリケーションが使用するために、より高品質の新たに形成されたSCCを生成する。このメカニズムは、新たに形成されたSCCが、元のSCCと少なくとも同等か、またはそれ以上の性能を持つことを保証するものである。
【0073】
(コンテナ環境におけるJavaアプリケーションのSCC共有機能の使い勝手の向上)
いくつかの実施形態において、SCC更新メカニズムは、クラウド上の実行中アプリケーション間のSCCデータ交換のサイズ、およびSCCデータ交換の時間を最適化し、実行中アプリケーションおよびネットワーク帯域幅に対するCSOの影響を最小化する。
【0074】
図6のブロック
図600は、本発明に係るシステムのコンポーネントの概要を示す図である。このシステムは、コンテナオーケストレータ602(新たなJavaアプリケーションを起動する)、クラス共有オーケストレータ(CSO)中央サーバエージェント604、SCC統合メカニズム606、SCCセットアップメカニズム608、SCC更新メカニズム610、CSOクライアントエージェント612、中央共有クラスキャッシュ(SCC)リポジトリ614、およびローカルSCCリポジトリ616を含む。様々なシステムコンポーネント間でのインタラクションおよび情報のフローを矢印で示し、以下の数段落にて説明する。
【0075】
いくつかの実施形態では、CSOに以下のソフトウェアエージェントを追加する:(i)CSO中央サーバエージェント604もしくは(ii)CSOクライアントエージェント612またはその両方。
【0076】
(CSO中央サーバエージェント)
【0077】
いくつかの実施形態では、CSO中央サーバエージェント604を、CSOクライアントエージェント(例えばCSOクライアントエージェント612など)をホストするノードから分離した別個の専用ノードに配置する。CSO中央サーバエージェント604は、以下の機能を実行する:(i)スタートアップ時に、新たに起動されたJavaアプリケーションコンテナに適切なSCCを提供する。ここで、CSO中央サーバエージェント604は、CSOが(CSOの範囲内で)実行中のすべてのJavaアプリケーションイメージに関する情報を持つことができるように、既存のコンテナオーケストレーションシステムと通信する、(ii)各JavaアプリケーションイメージのSCCを維持するために使用される中央共有クラスキャッシュ(SCC)リポジトリ614を管理する、(iii)複数のJavaアプリケーションコンテナをそれぞれ対応する複数のCSOクライアントエージェント612と関連付ける、もしくは(iv)CSOクライアントエージェント612からの更新を処理して、各Javaアプリケーションイメージのためにより高品質のSCCを生成する、またはその組み合わせを行う。
【0078】
(CSOクライアントエージェント)
【0079】
CSOクライアントエージェント612は、各ワーカノード上で実行されると共に、そこで実行されているアプリケーションにサービスを提供するバックグラウンドプロセスである。CSOクライアントエージェント612の機能は、以下のものを含む:(i)Java仮想マシン(JVM)の状態を監視する。ここで、状態は「アクティブ」、「アイドル」、または「終了(exiting)」を含む、(ii)アプリケーション状態が「アイドル」または「終了」のいずれかである場合にCSO中央サーバエージェント604に更新を送信する、もしくは、(iii)ワーカノード上の共有クラスキャッシュ(SCC)を維持するローカルSCCリポジトリ616を管理する、またはその両方を行う。
【0080】
中央サーバオーケストレータ(CSO)は、CSO中央サーバエージェント604およびCSOクライアントエージェント612と共に実装される、以下を含む3つのメカニズムを有する:(i)SCCセットアップメカニズム608、(ii)SCC更新メカニズム610、もしくは(iii)SCC統合メカニズム606、またはその組み合わせ。
【0081】
<SCCセットアップメカニズム>
【0082】
SCCセットアップメカニズム608は、以下の動作の少なくともいくつかを実行することによって、新たに起動したJavaアプリケーションインスタンスのために適切なベースSCCをセットアップする:(i)新たなJavaアプリケーションインスタンスに関する情報を受信する、(ii)ベースSCCをCSOクライアントエージェント612に送信する、もしくは(iii)ベースSCCをローカルSCCリポジトリ616に格納する、またはその組み合わせを行う。これらの動作について、以下の数段落にてさらに説明する。
【0083】
(新たなJavaアプリケーションインスタンスに関する情報の受信)
【0084】
CSO中央サーバエージェント604は、既存のコンテナオーケストレーションシステム(コンテナオーケストレータ602)から、これから起動されるJavaアプリケーションインスタンスに関連する情報を受信し、適切なベースSCCの発見を試みる。なお、関連するコンテナは、イメージ構築時(image build time)に供給されたSCCを既に含んでいてもよい。コンテナオーケストレータ602から受信した情報は、以下を含む:(i)適切なベースSCCを識別するために使用されるイメージ識別子(イメージID)、(ii)適切なベースSCCを識別するために使用される、Javaアプリケーションインスタンスに渡される引数、もしくは(ii)関連するCSOクライアントエージェント612を発見するために使用される、Javaアプリケーションインスタンスを実行するノード、またはその組み合わせ。中央SCCリポジトリ614内のすべてのベースSCCは、イメージIDおよびJavaアプリケーションインスタンスに渡された引数によってキーされる(keyed)。その結果、同じイメージIDおよび同じ引数を持つ複数のJavaアプリケーションインスタンスは、同じベースSCCを共有する。
【0085】
(CSOクライアントエージェントへのベースSCCの送信)
【0086】
CSO中央サーバエージェント604は、ノード情報に少なくとも部分的に基づいて、適切なベースSCCを特定する。CSO中央サーバエージェント604は、ベースSCCを対応するCSOクライアントエージェント612に送信する。CSO中央サーバエージェント604は、アプリケーションが必要とするベースSCCを、関連するCSOクライアントエージェント612を介して送信する。各アプリケーションは、同じノード上にあるため、CSOクライアントと関連付けられている。
【0087】
(ベースSCCのローカル格納)
【0088】
CSOクライアントエージェント612は、ベースSCCをローカルSCCリポジトリ616に格納する。ローカルSCCリポジトリ616において、ベースSCCは新たなJavaアプリケーションインスタンスによって使用できるようになる。
【0089】
<SCC更新メカニズム>
【0090】
SCC更新メカニズム610は、以下の動作の少なくともいくつかを実行することによって、SCC更新を管理する:(i)元のSCCを更新する、(ii)実行中アプリケーションをCSOクライアント(CSOクライアントエージェント612を参照)と関連付ける、(iii)SCCを増大させる(grow)、もしくは(iv)SCC更新要求をCSO中央サーバエージェント604に送信する、またはその組み合わせ。CSO中央サーバエージェント604は、複数の理由によって要求を拒否する可能性もある。上述の動作、ならびに要求を拒否する潜在的な理由およびそれに対する関連応答について、以下の数段落にて説明する。
【0091】
(元のSCCの更新)
【0092】
更新とは本質的に、新たなJavaアプリケーションインスタンスのスタートアップ時にアプリケーションのJava仮想マシン(JVM)に対して利用可能にされる元の(ベース)SCCと、JVMがその後に生成する新たな追加SCCとの差(diff)である。
【0093】
(実行中アプリケーションとCSOクライアントとの関連付け)
【0094】
いくつかの実施形態では、クラウド内のすべての実行中アプリケーションをCSOクライアント(CSOクライアントエージェント612を参照)に関連付ける。その結果、各ワーカノードに対して1つのCSOクライアントエージェント612が存在する。CSOクライアントエージェント612は、各アプリケーションの更新(クラスキャッシュ)を計算し、アプリケーションが「アイドル」状態にあるとき、または実行が終了したとき(「終了」状態にあるとき)に、更新をCSO中央サーバエージェント604に送信する。アプリケーションが「アイドル」状態または「終了」状態のいずれかになるのを待つことにより、CSOクライアントエージェント612は、ネットワークトラフィックの最適化に寄与する。これは、更新がネットワーク帯域幅についてアプリケーションと競合しなくなるためである。更新が行われる時間は、アプリケーションもしくはアプリケーションのワークロードまたはその両方に応じて異なる。CSOクライアントは、JVMアイドル検出メカニズムを利用して、アプリケーションの更新をCSO中央サーバ(CSO中央サーバエージェント604を参照)に送信するスケジュールを立てる。
【0095】
(SCCの増大)
【0096】
共有クラスキャッシュ(SCC)は、両端から中央に向かって増大し、クラスデータはSCCの一端に追加され、JITデータは他端に追加される。SCCに関しては、元のSCCのための2つの「ベースポインタ」と、JVMによって新たに追加されたSCCのための2つの「カレントポインタ」とが存在する。SCCの更新は、ベースポインタとカレントポインタとの間のコンテンツを含む。CSOクライアントエージェント612は、ベースポインタを追跡し、各JavaアプリケーションインスタンスについてSCC更新を生成する。
【0097】
(CSO中央サーバへのSCC更新要求の送信)
【0098】
SCC更新要求を送信する前に、(特定のノードに関連する)CSOクライアントエージェント612は、SCC更新がさらなる処理のために受け入れられるかどうかを確認するために、CSO中央サーバエージェント604に要求を送信する。CSO中央サーバエージェント604が要求を拒否した場合、CSO中央サーバエージェント604はその要求を破棄する。その後、特定のノード上のアプリケーションの次のインスタンスは、CSO中央サーバエージェント604によって提供される新たなSCCを使用する。SCC更新要求は、以下の情報を含む:(i)アプリケーションイメージID(アプリケーションタイプの識別用)、(ii)コンテナに渡される引数(アプリケーションタイプの識別用)、(iii)ハードウェア情報(アプリケーションタイプの識別用)、(iv)ノード情報(更新要求の送信元CSOクライアントの識別用)、(v)SCCメタデータ(例えば、ベースSCCバージョン、サイズなど)、もしくは(vi)実行動作データ(例えば、アプリケーションが正しい/期待される/一般的な方法で終了したか)、またはその組み合わせ。
【0099】
いくつかの実施形態では、「アプリケーションタイプ」、「マネージドランタイムアプリケーションタイプ」、および同様の用語は、Dockerイメージ識別子(アプリケーションイメージID)を指す。例えば、証券取引所のウェブアプリケーションを考える。ウェブアプリケーションをクラウドで起動し稼働させるために、いくつかの実施形態において、ウェブアプリケーションはDockerイメージにパッケージ化される。ウェブアプリケーションのDockerイメージIDは、「アプリケーションイメージID」である。本発明の実施形態における、クラスデータ共有に関連するメカニズムもしくは特徴またはその両方は、同じタイプのアプリケーションに適用される。同じアプリケーションのインスタンスは、互いにデータを共有することができる。上述のDockerの例に関して、証券取引所ウェブアプリケーションに関連するDockerイメージは、クラウド内の異なるマシン(これらは、様々な物理的場所に位置する、様々な物理的マシンを使用して証券取引サービスを提供してもよい)上で展開された多くの異なるインスタンス(Dockerコンテナ)を有することができる。すべてのインスタンスは同じDockerイメージIDを有し、その結果、同じタイプであるとみなされ、互いにデータを共有することができる。次に、別のアプリケーション、例えばビデオストリーミングウェブアプリケーションを考える。ビデオストリーミングウェブアプリケーションと証券取引所ウェブアプリケーションとは、異なるDockerイメージIDを有するため、同じタイプではない。ビデオストリーミングアプリケーションの各インスタンスは同じDockerイメージIDを有し、その結果、互いにデータを共有することができる。しかし、ビデオストリーミングアプリケーションのインスタンスは、証券取引アプリケーションのインスタンスとデータを共有することはできない。
【0100】
なお、「Docker」という用語は、世界中の様々な法域における商標権の対象となる可能性があり、ここでは、このような商標権が存在し得る範囲で標章によって適正に称される製品またはサービスに対して言及する場合にのみ使用される。
【0101】
(要求を拒否する潜在的な理由および関連応答)
【0102】
CSO中央サーバエージェント604は、以下の理由または要因のうちの少なくとも1つによって、要求を拒否する場合がある:(i)CSO中央サーバ上のアプリケーションタイプ用のSCCが満杯(full)であり、新たな更新を受け付けない(この場合、CSOクライアントエージェント612は、対応するJavaアプリケーションインスタンスに関する更新の計算および送信を停止する)、(ii)CSO中央サーバエージェント604が、アプリケーションが正常に動作しなかった(たとえば、アプリケーションがエラーコード、まれなリターンコード、もしくは予想外のリターンコードまたはその組み合わせを返した)と判断し、これに応じて更新を無効とみなす、もしくは、(iii)CSO中央サーバエージェント604がSCC更新を古い(outdated)と判断し、その結果、このような古いバージョンからの更新を受け入れなくなる、またはこれらの組み合わせ。CSO中央サーバエージェント604が更新に関連するベースSCCバージョンに比べて新しいベースSCCバージョンを有する場合、SCC更新は古いとみなされ、この場合、CSOクライアントエージェント612は、対応するJavaアプリケーションインスタンスに関するSCC更新の計算および送信を停止する。
【0103】
<SCC統合メカニズム>
【0104】
本発明のいくつかの実施形態に係るSCC統合は、CSOクライアント(たとえばCSOクライアントエージェント612)によって提供されるSCC更新に少なくとも部分的に基づいて、より高品質のSCCを生成する。CSO中央サーバエージェント604は、最近受信したSCC更新の閾値数を(オフラインで)分析し、同じタイプの後続のすべてのJavaアプリケーションインスタンスによって使用可能な新たなベースSCCを構築する。各SCCは、アプリケーションタイプに対応する。あるアプリケーションのインスタンスがキャッシュを満たす(populate)が、当該アプリケーションのすべてのインスタンスが同じSCCを共有する。
【0105】
CSO中央サーバエージェント604は、新たなベースSCCを以下のように構築する。
【0106】
CSO中央サーバは、あるアプリケーションタイプの更新を受信するたびに、後の処理のためにその更新を格納する。
【0107】
CSO中央サーバエージェント604は、閾値数の更新を受信すると、新たな更新の受信を停止し、格納された更新に基づいて新たなSCCを作成する(閾値数は、ヒューリスティクスに基づき、例えばいくつかの実施形態では、CSO中央サーバからの同じベースSCCを現在使用しているすべてのアプリケーションインスタンスの80%に設定される)。
【0108】
アプリケーションタイプに関連付けられたベースSCCがCSO中央サーバに存在する場合、そのベースSCCのすべてのコンテンツが新たなベースSCCで使用される。
【0109】
複数のSCC更新間で共通する新たなデータが存在する場合、CSO中央サーバエージェント604は、その新たなデータを新たなSCCに追加する(例えば、更新の半分以上が同じメソッドのコンパイルを示す場合、CSO中央サーバエージェント604はそのメソッドを「重要」とみなし、そのメソッドを新たなベースSCCに含める)。
【0110】
CSO中央サーバエージェント604が新たなベースSCCを生成すると、CSO中央サーバエージェント604は、古いSCCを使用して起動したデプロイメントから受信したすべての更新要求を拒否し、その後は、新たなベースSCCを使用して起動したデプロイメントから受信した更新のみを受け付ける。
【0111】
本発明のいくつかの実施形態は、以下の特徴、特性、もしくは利点またはその組み合わせの1つ以上を含むことができる:(i)共有クラスキャッシュ(SCC)は、静的(読み取り専用)ではなく、動的(読み取り/書き込み)であってもよい、(ii)プロファイリングデータ、および他のジャストインタイム(JIT)コンパイラヒントは、実行ごとに異なってもよい、(iii)プロファイリングデータを経時的に蓄積して、アプリケーションの状態をより良く把握することができる、もしくは、(iv)SCC内の動的データによって、開発者は、様々なアプリケーションの状態についてオフライン分析を実行し、各アプリケーションに対して最適かつよりコンパクトになるようにSCCを動的に修正することができる、またはこれらの組み合わせ。
【0112】
本発明のいくつかの実施形態は、現在の技術水準に関して、以下の事実、潜在的な問題、もしくは潜在的な改善領域またはその組み合わせのうちの1つ以上を認識することができる。(i)SCCはメモリマップファイルである、(ii)SCC内のクラスデータは、クラスの不変部分を含む、(iii)ジャストインタイム(JIT)コンパイルデータは事前(AOT)コンパイルコードおよびプロファイリングデータを含む場合がある、(iv)共有クラスキャッシュを満たすために「ウォームアップ実行」が必要な場合がある、(v)その後の実行は、スタートアップ時間およびメモリ使用量が改善する場合がある、もしくは(vi)同一のノード上に存在する必要がある場合がある、またはこれらの組み合わせ。
【0113】
図7のブロック
図700は、本発明のいくつかの実施形態に係る、共有クラスキャッシュをセットアップ、更新、および統合するためのプロセスを示す。ブロック
図700は、以下を含む:CSO中央サーバエージェント604、第1のCSOクライアントエージェント612-1、第2のCSOクライアントエージェント612-2、中央SCCリポジトリ614(SCC
5、SCC
6、・・・SCC
kを含む)、第1のローカルSCCリポジトリ616-1(SCC
1、SCC
2、・・・SCC
nを含む)、第2のローカルSCCレポジトリ616-2(SCC
3、SCC
4、・・・SCC
mを含む)、JVM
1701、JVM
2702、JVM
3703、JVM
4704、第1のノード721、第2のノード722、第3のノード723、もしくは保留差分(pending diffs)724、またはこれらの組み合わせ。
【0114】
以下の動作1~11は、それぞれ、
図7における同番号の矢印に対応する。本発明のいくつかの実施形態に係る(そして
図6を参照して上述した)3つのプロセスは、SCCセットアップ(動作1~7)、SCC更新(動作8~10)、およびSCC統合(動作11)からなる。
【0115】
(SCCセットアップ)
【0116】
1.キャッシュ共有オーケストレータ(第1のCSOクライアントエージェント612-1)は、第1のローカル共有クラスキャッシュリポジトリ(第1のローカルSCCリポジトリ616-1)から、起動するコンテナイメージ、および関連パラメータに関する情報を受信する。第1のCSOクライアントエージェント612-1は、適切なSCCをローカルリポジトリ616-1から検索する。
【0117】
2.第1のCSOクライアントエージェント612-1は、適切なSCCを発見した場合、そのSCCをJava仮想マシンコンテナ(例えば、JVM1701)にマウントする。
【0118】
3.第1のCSOクライアントエージェント612-1は、ローカルの第1のローカルSCCリポジトリ616-1内で適切なSCCを発見しなかった場合、CSO中央サーバエージェント604に、適切なSCCを特定する要求を送信する。
【0119】
4.CSO中央サーバエージェント604は、中央SCCリポジトリ614(グローバルSCCリポジトリ)を検索して、適切なSCCを発見および取得する。
【0120】
5.CSO中央サーバエージェント604は、適切なSCCを第1のCSOクライアントエージェント612-1に返す。
【0121】
6.第1のCSOクライアントエージェント612-1は、ローカルリポジトリに適切なSCCをインストールする。
【0122】
7.また、第1のCSOクライアントエージェント612-1は、適切なSCCをJVM1701にマウントする。
【0123】
(SCC更新)
【0124】
8.第2のCSOクライアントエージェント612-2は、関連するJVM(JVM3703、JVM4704)のステータスを照会する。第2のCSOクライアントエージェント612-2はさらに、第2のローカルSCCリポジトリ616-2に保持されるSCCのステータスを照会して、JVM3703もしくはJVM4704またはその両方が、第2のローカルSCCリポジトリ616-2の対応するSCCに存在しない新たなコンテンツを有しているかどうかを決定する。閾値数の新たなコンテンツがJVM3703もしくはJVM4704またはその両方に存在する場合、第2のCSOクライアントエージェント612-2は、第2のローカルSCCリポジトリ616-2にキャッシュされたコンテンツに照らして、JVM3703もしくはJVM4704またはその両方に関連付けられた新たなコンテンツに基づく差(「差分(diff)」)を計算する。
【0125】
9.第2のCSOクライアントエージェント612-2は、差分を含む更新要求をCSO中央サーバエージェント604に送信する。いくつかの実施形態において、第2のCSOクライアントエージェント612-2は最初に、CSO中央サーバエージェント604が更新要求を受け入れるかどうかを確認するために「プローブメッセージ(probe message)」を送信する。
【0126】
10.更新要求を受け入れたことに応じて、CSO中央サーバエージェント604は、差分を保留差分724に格納する。
【0127】
(SCC統合)
【0128】
11.保留差分724に閾値数の新たな更新要求が蓄積されたことに応じて、CSOサーバは、更新要求(それぞれ対応する保留差分を含む)を分析し、中央SCCリポジトリ614(グローバルリポジトリ)に伝播するための情報を選択する。中央SCCリポジトリ614は、更新される共有クラスキャッシュ(SCC5、SCC6、・・・SCCk)のベースバージョンをインクリメントする。CSO中央サーバエージェント604は、より低いバージョンを対象とする更新を拒否する。
【0129】
本発明のいくつかの実施形態は、以下の特徴、特性、もしくは利点またはその組み合わせのうちの1つ以上を含んでもよい:(i)動的なクラスデータを共有する、(ii)クラウド環境におけるクラスデータの品質を継続的に改善する、(iii)キャッシュ更新システムが、すべてのノードにソフトウェアエージェントをデプロイすると共にクラウド環境で実行中の各アプリケーションの共有クラスキャッシュベーススナップショットを追跡することによって、共有クラスキャッシュ更新を効率的に生成する、(iv)キャッシュ統合システムが、ソフトウェアエージェントからクラスキャッシュ更新を効率的に収集すると共に従来のソリューションに対する改善を保証するルールセットを使用して更新を効率的に統合することによって、キャッシュの質を継続的に改善する、(v)キャッシュオーケストレーションシステムが、クラウド環境におけるすべての実行中アプリケーションからのキャッシュデータを管理する、(vi)キャッシュ更新および統合システムが、経時的にキャッシュ結果を継続的に改善する、(vii)クラウド環境における動的共有クラスデータの適用性を改善する、(viii)クラス共有オーケストレータを提供する、(ix)クラウド全体のクラスデータおよび/もしくはクラスタ全体のクラスデータを共有する、もしくは、(x)コンテナ化環境においてクラス共有オーケストレータによるマネージドランタイムアプリケーションの起動を開始する、またはこれらの組み合わせ。
【0130】
本発明のいくつかの実施形態は、キャッシュされたクラスデータを共有するための、コンピュータ実装方法、当該方法を実行するためのコンピュータプログラム製品、もしくは当該方法を実行するためのコンピュータシステム、またはその組み合わせを含む。方法は、(i)コンテナ化環境において、コンテナオーケストレータがマネージドランタイムアプリケーションの起動を開始したことに応じて、クラス共有オーケストレータ中央サーバによって、イメージID、マネージドランタイムアプリケーションのインスタンスに渡される引数、およびインスタンスを実行するワーカノードの識別子を含む情報をコンテナオーケストレータから受信することと、(ii)クラス共有オーケストレータ中央サーバが、イメージIDおよびマネージドランタイムアプリケーションインスタンスに渡された引数のリストを含む検索基準に基づいて、中央共有クラスキャッシュリポジトリ内で適切なベース共有クラスキャッシュを特定したことに応じて、クラス共有オーケストレータ中央サーバによって、適切なベース共有クラスキャッシュを、ワーカノードの情報を使用して識別された対応するクラス共有オーケストレータクライアントに送信することと、(iii)クラス共有オーケストレータ中央サーバから適切なベース共有クラスキャッシュを受信したことに応じて、対応するクラス共有オーケストレータクライアントによって、適切なベース共有クラスキャッシュを、マネージドランタイムアプリケーションのインスタンスによる使用のためにローカルの共有クラスキャッシュリポジトリに格納することと、(iv)クラス共有オーケストレータ中央サーバが、対応するクラス共有オーケストレータクライアントから、イメージID、渡された引数、ハードウェア情報、ノード情報、クラス共有オーケストレータクライアントが受信したベースSCCに関する追加の共有クラスデータを含む更新を処理する要求を受信したことに応じて、クラス共有オーケストレータ中央サーバによって、更新を受け入れるかどうかを判断することと、(v)クラス共有オーケストレータ中央サーバが、更新を処理する要求を拒否したことに応じて、クラス共有オーケストレータ中央サーバによって、更新を破棄することと、(vi)クラス共有オーケストレータ中央サーバによって、新たな共有クラスキャッシュを対応するクラス共有オーケストレータクライアントに送信することと、(vii)クラス共有オーケストレータ中央サーバが、更新を処理する要求を受け入れたことに応じて、マネージドランタイムアプリケーションの特定のタイプについて、クラス共有オーケストレータ中央サーバによる後のオフライン処理のために更新を格納することと、(viii)クラス共有オーケストレータ中央サーバが受信した、設定可能な数の最近の更新を分析して分析データを作成することと、(ix)クラス共有オーケストレータ中央サーバが、分析データを用いて、特定のタイプについてクラス共有オーケストレータ中央サーバ上に古いベース共有クラスキャッシュが存在すると判断したことに応じて、古いベース共有クラスキャッシュのすべてのコンテンツを使用して新たなベース共有クラスキャッシュを生成することと、(x)クラス共有オーケストレータ中央サーバが、1つ以上の更新の間で共通する新たなデータが存在すると判断したことに応じて、クラス共有オーケストレータ中央サーバによって、新たなデータを新たなベース共有クラスキャッシュに追加することと、(xi)新たなベース共有クラスキャッシュが生成されたことに応じて、クラス共有オーケストレータ中央サーバによって、古い共有クラスキャッシュを使用して起動されたデプロイメントからの更新要求を拒否することと、を含む。
【0131】
例示的な実施形態において、3つのノード(ノード-1、ノード-2、ノード-3)がそれぞれ、アプリケーションの3つのインスタンス(app-1、app-2、app-3、すべて所与のアプリケーションタイプ)、3つのローカルキャッシュ共有オーケストレータ(CSO)クライアント(CSO-1、CSO-2、CSO-3)、および3つのローカルキャッシュリポジトリ(キャッシュ-1、キャッシュ-2、キャッシュ-3)をホストする場合を考える。第4のノード(ノード-4)は、CSO中央サーバと、当該所与のアプリケーションタイプのアプリケーションに固有のベース共有クラスキャッシュ(SCC)を有する中央キャッシュリポジトリとをホストする。
【0132】
CSO中央サーバは、CSO-1、CSO-2、CSO-3と通信して、app-1、app-2、app-3が実行中に生成したローカルキャッシュ更新を受信する。CSO中央サーバは、受信したローカルキャッシュ更新に基づき、中央キャッシュリポジトリ内の所与のアプリケーションタイプに対応するベースSCCを更新する。
【0133】
app-1の実行中、CSO-1は関連するキャッシュデータを収集し、ローカルキャッシュリポジトリ(キャッシュ-1)に格納する。ここで、CSO-1が最終的に更新要求を生成し、その要求をCSO中央サーバに送信することを考える。CSO中央サーバは、中央キャッシュリポジトリから適切なベースSCCを検索する。CSO中央サーバは、ベースSCCを特定すると、(app-1に対してローカルの)キャッシュ-1が古くなったと判断する。これに応じて、CSO中央サーバは、CSO-1からの更新要求を拒否し、中央キャッシュリポジトリから、ノード-1上のCSO-1にベースSCCを送信する。app-2およびapp-3についても同じプロセスが行われ、CSO-2およびCSO-3はそれぞれ、関連するキャッシュデータを収集し、それぞれのローカルキャッシュに格納し、CSO中央サーバに更新要求を送信し、CSO中央サーバによってそれぞれのローカルキャッシュが古いと判断された場合に、更新済みのベースSCCを受信してそれぞれのローカルキャッシュを更新する。
【0134】
下記の特許請求の範囲におけるすべてのミーンズプラスファンクション要素またはステッププラスファンクション要素の対応する構造、材料、動作、および均等物は、具体的に特許請求されるように、他の特許請求される要素と組み合わせて機能を実行するためのあらゆる構造、材料、または動作を含むことを意図している。本開示を例示および説明のために提示してきたが、網羅的であることや、開示した形態に本開示を限定することを意図したものではない。本開示の範囲および要旨から逸脱することなく、多くの変更および変形が当業者には明らかである。本実施形態は、本開示の原理および実際の応用例を最もよく説明するために、かつ他の当業者が、企図している特定の用途に適した各種の変更を伴う各種の実施形態について本開示を理解できるように選択され記載されたものである。
【0135】
IV.定義
本発明:「本発明」という用語によって記載される主題が、出願時の特許請求の範囲または特許審査手続き後に最終的に発行される特許請求の範囲のいずれかの範囲に含まれることの絶対的な指標として解釈すべきものではない。「本発明」という用語は、読者が、本明細書において潜在的に新規であると考えられる開示についての一般的な心証を得ることを助けるために使用されるものであるが、この理解は、「本発明(現在の発明)(present invention)」という用語の使用によって示されるように、仮の、暫定的なものであり、特許審査の過程で、関連情報が現れたとき、および場合によって請求項が補正されたときに、変更される可能性がある。
【0136】
実施形態:上記「本発明」の定義を参照。同様の注記が用語「実施形態」にも当てはまる。
【0137】
および/または:包含的論理和(inclusive)、例えば、A、B「および/または」Cは、AまたはBまたはCのうちの少なくとも1つが真であり該当することを意味する。
【0138】
含む:別段の明示的な記載がない限り、「含むが必ずしもこれ(これらに)限定されない」を意味する。
【0139】
ユーザ/加入者(subscriber):(i)1人の人間、(ii)ユーザまたは加入者として機能するための十分な知性を有する人工知能エンティティ、もしくは(iii)関連するユーザまたは加入者のグループ、またはその組み合わせを含むが、必ずしもこれらに限定されない。
【0140】
電気的に接続される:直接的に電気的に接続されるか、または介在要素が存在するように間接的に電気的に接続されるかのいずれかを意味する。電気的接続には、コンデンサ、インダクタ、トランス、真空管などの素子が含まれるが、必ずしもこれらに限定されない。
【0141】
データ通信:無線通信、有線通信、ならびに、無線および有線部分を含む通信経路を含む、現在既知の、または、将来開発される任意の種類のデータ通信方式であり、データ通信は、(i)直接データ通信、(ii)間接データ通信、もしくは(iii)フォーマット、パケット化ステータス、媒体、暗号化ステータス、および/もしくはプロトコルがデータ通信の全体の過程において一定のままであるデータ通信、またはその組み合わせに必ずしも限定されない。
【0142】
受信する/提供する/送信する/入力する/出力する:別段の明示的な規定がない限り、これらの単語は、(i)これらの主体および客体間の関係に関する具体的な直接性(directness)の程度、もしくは(ii)これらの主体および客体間に挿入される中間コンポーネント、動作および/もしく物が存在しないこと、またはその両方を意味すると解釈すべきではない。
【0143】
実質的に人間が介入しない:人間による入力がほとんど、または全く存在せずに(多くの場合、ソフトウェアなどの機械論理の動作によって)自動的に発生するプロセスを意味する。「実質的に人間が介入しない」ことを含む例としては、(i)コンピュータが複雑な処理を実行しており、電力系統の停止に起因して処理の継続が中断されないように、人間がコンピュータを代替電源に切り替えること、(ii)コンピュータが、リソース消費型(resource-intensive)の処理を実行しようとしており、人間が、リソース消費型の処理が本当に実行されるべきであるかどうかを確認すること(この場合、確認のプロセスは、それ単独で考えた場合、実質的な人間の介入を伴うが、リソース消費型の処理は(人間によって行われる必要のある単純な「はい/いいえ」形式の確認はあるが)どのような実質的な人間の介入も含まない)、および(iii)コンピュータが、機械論理を使用して重要な決定(例えば、悪天候を予想して、すべての飛行機を飛行禁止にすることの決定)を行うが、この重要な決定を実施する前に、コンピュータが、単純な「はい/いいえ」形式の確認を人間側から得なければならないこと、が挙げられる。
【0144】
自動的に:人間による介入がないことを意味する。
【0145】
モジュール/サブモジュール:ある種類の機能を行うように動作可能に働くハードウェア、ファームウェアもしくはソフトウェアまたはその組み合わせの任意のセットであって、当該モジュールは、(i)単一の局所的近傍(single local proximity)にある、(ii)広域に分散している、(iii)ソフトウェアコードのより大きな部分内の単一の近傍にある、(iv)ソフトウェアコードの単一部分内に位置する、(v)単一のストレージデバイス、メモリまたは媒体内に位置する、(vi)機械的に接続されている、(vii)電気的に接続されている、もしくは(viii)データ通信接続されている、またはその組み合わせのいずれかを問わない。
【0146】
コンピュータ:顕著なデータ処理能力もしくは機械可読命令読み取り能力またはその両方を有する任意のデバイスであって、デスクトップコンピュータ、メインフレームコンピュータ、ラップトップコンピュータ、フィールドプログラマブルゲートアレイ(FPGA)ベースのデバイス、スマートフォン、携帯情報端末(PDA)、身体装着式もしくは挿入式コンピュータ、埋込みデバイス型コンピュータ、もしくは特定用途向け集積回路(ASIC)ベースのデバイスまたはその組み合わせを含む(ただし、これらに限定されない)。