特許第6385471号(P6385471)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

<>
  • 6385471-移行および遠隔ランタイム統合 図000002
  • 6385471-移行および遠隔ランタイム統合 図000003
  • 6385471-移行および遠隔ランタイム統合 図000004
  • 6385471-移行および遠隔ランタイム統合 図000005
  • 6385471-移行および遠隔ランタイム統合 図000006
  • 6385471-移行および遠隔ランタイム統合 図000007
  • 6385471-移行および遠隔ランタイム統合 図000008
  • 6385471-移行および遠隔ランタイム統合 図000009
  • 6385471-移行および遠隔ランタイム統合 図000010
  • 6385471-移行および遠隔ランタイム統合 図000011
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6385471
(24)【登録日】2018年8月17日
(45)【発行日】2018年9月5日
(54)【発明の名称】移行および遠隔ランタイム統合
(51)【国際特許分類】
   G06F 9/50 20060101AFI20180827BHJP
   G06F 9/455 20060101ALI20180827BHJP
【FI】
   G06F9/50 150E
   G06F9/455 150
   G06F9/50 150C
   G06F9/50 150A
【請求項の数】9
【全頁数】34
(21)【出願番号】特願2016-573866(P2016-573866)
(86)(22)【出願日】2015年6月15日
(65)【公表番号】特表2017-522658(P2017-522658A)
(43)【公表日】2017年8月10日
(86)【国際出願番号】US2015035848
(87)【国際公開番号】WO2015195561
(87)【国際公開日】20151223
【審査請求日】2016年12月16日
(31)【優先権主張番号】14/306,168
(32)【優先日】2014年6月16日
(33)【優先権主張国】US
(31)【優先権主張番号】14/306,173
(32)【優先日】2014年6月16日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】506329306
【氏名又は名称】アマゾン テクノロジーズ インコーポレイテッド
(74)【代理人】
【識別番号】100114890
【弁理士】
【氏名又は名称】アインゼル・フェリックス=ラインハルト
(74)【代理人】
【識別番号】100098501
【弁理士】
【氏名又は名称】森田 拓
(74)【代理人】
【識別番号】100116403
【弁理士】
【氏名又は名称】前川 純一
(74)【代理人】
【識別番号】100135633
【弁理士】
【氏名又は名称】二宮 浩康
(74)【代理人】
【識別番号】100162880
【弁理士】
【氏名又は名称】上島 類
(72)【発明者】
【氏名】マーコ アージェンティ
(72)【発明者】
【氏名】カワジャ サルマン シャムズ
【審査官】 井上 宏一
(56)【参考文献】
【文献】 米国特許出願公開第2013/0073600(US,A1)
【文献】 特開2009−217434(JP,A)
【文献】 米国特許出願公開第2010/0318999(US,A1)
【文献】 米国特許出願公開第2009/0022118(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455−9/54
(57)【特許請求の範囲】
【請求項1】
仮想マシンインスタンスを実行する第一計算ノードであって、クライアントデバイスに通信可能に接続された第一計算ノードと、
前記クライアントデバイスおよび前記第一計算ノードに通信可能に接続された計算デバイスと、
前記第一計算ノード内のコンピュータ読取可能命令を記憶した1以上のメモリと、
を備えるシステムにおいて、
前記コンピュータ読取可能命令は、前記計算デバイスによる実行時に、前記計算デバイスに、少なくとも、
前記仮想マシンインスタンスにアクセス可能な記憶デバイスにアプリケーションプログラムのアプリケーションプログラムファイルの第一コピーを保存させ、
前記仮想マシンインスタンス上で前記アプリケーションプログラムファイルの第一部を実行するよう判断させ、前記判断は、前記第一計算ノードの第一性能特性と前記クライアントデバイスの第二性能特性との比較に少なくとも部分的に基づき、前記アプリケーションプログラムファイルの前記第一部は、前記アプリケーションプログラムファイルの他の部分に対して、前記仮想マシンインスタンス上で実行する前記第一部の適否に少なくとも部分的に基づき、前記アプリケーションプログラムファイルの複数の部分から選択され、
前記アプリケーションプログラムファイル前記第一コピーに少なくとも部分的に基づき、前記仮想マシンインスタンス上で前記アプリケーションプログラムファイルの前記第一部を実行させ前記クライアントデバイスに保存された前記アプリケーションプログラムファイルの第二コピーに少なくとも部分的に基づき、前記クライアントデバイス上で前記アプリケーションプログラムのインスタンスを実行させ、
前記アプリケーションプログラムファイルの前記第一部の実行結果を、前記クライアントデバイス上で実行する前記アプリケーションプログラムの前記インスタンスによる処理のため前記クライアントデバイスに転送させる
システム。
【請求項2】
前記1以上のメモリは、さらなるコンピュータ読取可能命令を記憶しており、前記さらなるコンピュータ読取可能命令は、前記計算デバイスによる実行時に、前記システムに、少なくとも、
前記クライアントデバイスの前記第二性能特性を有するクライアントデバイスの割合に少なくとも部分的に基づき、前記仮想マシンインスタンスを確保させる、
請求項1に記載のシステム。
【請求項3】
前記1以上のメモリは、さらなるコンピュータ読取可能命令を記憶しており、前記さらなるコンピュータ読取可能命令は、前記計算デバイスによる実行時に、前記システムに、少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの第三部を実行する費用に少なくとも部分的に基づき、前記クライアントデバイス上で前記アプリケーションプログラムの前記第三部を実行するよう判断させる
請求項1に記載のシステム。
【請求項4】
前記1以上のメモリは、さらなるコンピュータ読取可能命令を記憶しており、前記さらなるコンピュータ読取可能命令は、前記計算デバイスによる実行時に、前記システムに、少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部の実行を、前記アプリケーションプログラムの前記第一部を実行する費用に少なくとも部分的に基づき、停止するよう判断させる
請求項1に記載のシステム。
【請求項5】
アプリケーションプログラムを実行するコンピュータ実施方法であって、
仮想マシンインスタンスを実行する第一計算ノードであって、クライアントデバイスに通信可能に接続された第一計算ノードにより、前記仮想マシンインスタンス上でアプリケーションプログラムファイルの第一部を実行するよう判断し、前記アプリケーションプログラムファイルに対応するアプリケーションプログラムのインスタンスは、前記クライアントデバイス上で実行しており、前記判断は、前記クライアントデバイスの第一特性と前記仮想マシンインスタンスの第二特性との比較に少なくとも部分的に基づき、前記アプリケーションプログラムファイルの前記第一部は、前記アプリケーションプログラムファイルの複数の部分から、前記第一計算ノードにより選択され、
前記仮想マシンインスタンスにアクセス可能な記憶デバイスに保存された前記アプリケーションプログラムファイルの第一コピーに少なくとも部分的に基づき、前記仮想マシンインスタンス上で前記アプリケーションプログラムファイルの前記第一部を実行し、
前記アプリケーションプログラムファイルの前記第一部の実行結果を、前記クライアントデバイス上で実行する前記アプリケーションプログラムファイルの第二部によ処理のために前記クライアントデバイスにし、前記クライアントデバイス上で実行する前記アプリケーションプログラムファイルの前記第二部は、前記クライアントデバイスに保存された前記アプリケーションプログラムファイルの第二コピーに少なくとも部分的に基づく、
コンピュータ実施方法。
【請求項6】
前記クライアントデバイスの特性と前記仮想マシンインスタンスの特性とのマッチングに少なくとも部分的に基づき、前記仮想マシンインスタンスを選択することをさらに含む、
請求項5に記載のコンピュータ実施方法。
【請求項7】
前記クライアントデバイスにダウンロードされる前記アプリケーションプログラムの前記第一コピーに少なくとも部分的に基づき、前記仮想マシンインスタンスを確保することをさらに含む、
請求項5に記載のコンピュータ実施方法。
【請求項8】
前記クライアントデバイスの前記第一特性を有するクライアントデバイスの割合に少なくとも部分的に基づき、前記仮想マシンインスタンスを確保することをさらに含む、
請求項7に記載のコンピュータ実施方法。
【請求項9】
前記仮想マシンインスタンス上で前記アプリケーションプログラムの第三部を実行する費用に少なくとも部分的に基づき、前記クライアントデバイス上で前記アプリケーションプログラムの前記第三部を実行するよう判断することをさらに含む、
請求項5に記載のコンピュータ実施方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2014年6月16日に出願され「MOBILE AND REMOTE RUNTIME INTEGRATION」と題された米国特許出願第14/306,173号(代理人整理番号101058.000206)、および、2014年6月16日に出願され「MOBILE AND REMOTE RUNTIME INTEGRATION」と題された米国特許出願第14/306,168号(代理人整理番号101058.000171)の利益を主張し、その開示内容の全体を参照により本明細書に組み込む。
【背景技術】
【0002】
クライアントデバイスと遠隔配置された計算リソースとの間の従来の負荷分散方法は、クライアントデバイス上で実行するプログラムと遠隔計算設備が提供するサービスとの間における定義されたインタフェースに依存してもよい。クライアント上で実行するプログラムは、例えば、事前に定義されたウェブサービスセットの多様なメソッドに対するコールを呼び出す命令を含むよう設計されてもよい。同様に、ウェブサービスは、クライアントデバイスによる実施ではなく、遠隔計算設備で動作するサービスによる実施が最適であると、設計時に見なされた特定の機能セットを提供するよう設計されてもよい。換言すれば、クライアントデバイスで実行するプログラムと遠隔計算リソースでの境界は設計時に設定される。当該境界を、クライアントデバイスの能力、および、遠隔計算リソースの可用性など、様々な仮定に基づき設定してもよい。しかしながら、これらの仮定は経時的に変更してもよい。
【0003】
以下の説明は、添付図と合わせれば理解が深まるであろう。例として、本開示の態様の多様な実施例を図示しているが、本発明は、開示した特定の方法および手段に限定されない。
【図面の簡単な説明】
【0004】
図1A】遠隔計算設備を活用するアプリケーションの開発用統一パラダイムを使って開発されたプログラムの分散実行を実施するシステムの実施例である。
図1B】アプリケーション発行者に代わり、アプリケーションプログラムにクラウドベースの計算リソースを割り当てる実施形態を示すブロック図である。
図2】コンパイル前のアプリケーションプロラムを示すブロック図であり、アプリケーションプログラムの少なくとも1つのクラスまたはメソッドにアノテーションを付け移行の可能性を示している。
図3】クラスまたはメソッドの移行適否を判断するための、クラスまたはメソッドにおける依存関係静的解析の実施プロセスを示す図である。
図4】実行プログラムのクラスまたはメソッドのモニタリングおよび移行、ならびに、ステートレスメソッドおよびステートフルメソッドの呼出しを示す図である。
図5】アプリケーションプログラムのセグメントの移行適否を判断するアプリケーションプログラムの静的解析を示すフローチャートである。
図6】付されたスコア、および、アプリケーションプログラムの実行をモニタリングしそれに基づき調整されたスコアに基づいて、移行するクラスまたはメソッドを選択する実施形態を示すフローチャートである。
図7】分散アプリケーションにおけるオブジェクトのオブジェクトバージョントラッキングおよびコミットモデルを示すフローチャートである。
図8】本開示の態様を実施し得る計算環境の実施形態を示すブロック図である。
図9】本開示の態様を実施し得る計算システムの実施形態を示すブロック図である。
【発明を実施するための形態】
【0005】
様々な形式の携帯電話、タブレット、ゲーム機、パーソナルコンピュータ、およびその他コンシューマ向け計算デバイスなどがあり、計算能力が高い場合がある。しかし、これらデバイスのいずれの能力も、デバイス内蔵ハードウェアにより制限される。開発者は、能力が最小のデバイスタイプに合わせたアプリケーションプログラムを書いてもよい。しかしながら、この方法では、アプリケーションプログラムの能力が制限され、デバイスの能力が十分に活用されない。また、開発者は、アプリケーションプログラムを実行するデバイスの能力まで拡張させるアプリケーションプログラムを書いてもよい。この方法によってデバイスのハードウェアをより活用してもよいが、アプリケーションプログラムの開発がより複雑になり、開発費用が増大する場合がある。
【0006】
別の方法では、クラウドコンピューティングとも呼ばれる遠隔計算設備などの調整可能な計算リソースを伴ってもよい。遠隔計算設備は、前項に記載の携帯電話、タブレット、ゲーム機、パーソナルコンピュータを含み得る、クライアントデバイスに活用され得る複数の計算リソースを含んでもよい。遠隔計算設備との対話には、様々な方法が用いられてきた。例えば、リモートプロシージャコール、ウェブサービス、Representational State Transfer(「REST」)プロトコルなどがある。これらの方法では全て、開発者側の何らかの明確な判断を必要とし、アプリケーションの機能の特定の態様を遠隔計算デバイスで実施させるべきかを判断する。従って、これらの方法では、クライアントデバイスによる能力を超える能力を持ったアプリケーションプログラムを提供する場合があるが、遠隔計算設備の活用程度は、もっぱら開発者の見通し次第となり得る。
【0007】
リモートプロシージャコール、ウェブサービス、RESTインタフェースなど、これらの方法の別の態様では、アプリケーションプログラムの残りの部分に使用されるものとは異なる別のプログラミングパラダイムや方法論を必要とする。遠隔計算デバイスと対話するために、開発者は遠隔計算デバイスとの専用対話コードを書く。例えば、開発者は、RESTインタフェースコールに対するパラメータをユニフォームリソースロケータ(「URL」)形式にフォーマットするコードを書いてもよい。また、開発者は、Hypertext Transfer Protocol(「HTTP」)リクエストを出してRESTインタフェースを明確に呼び出すコードを書いてもよい。遠隔サービスと対話するこのメソッドは、アプリケーションプログラムが実行されるデバイスにローカルなコードと対話するメソッドとは異なる。ローカルで実施される機能を呼び出すため、開発者は、アプリケーションプログラムが書かれる言語に一般的なシンタックスを使用してもよい。
【0008】
本開示の態様は多様な実施形態に使用されてもよく、遠隔計算設備の能力を活用するアプリケーションプログラムを開発する統一パラダイムを可能にしてもよい。また、本開示の態様は多様な実施形態に使用してもよく、遠隔計算設備の活用程度を動的に調整してもよい。
【0009】
図1Aおよび図1Bは、遠隔計算設備を活用するアプリケーションの開発用統一パラダイムを使って開発されたプログラムを分散実行するシステムの実施例を示す。
【0010】
本明細書で使用するように、語アプリケーションプログラムという用語は、実行可能ファイル、ダイナミックリンクライブラリ、スタティックリンクライブラリなどを含む保存された命令を意味してもよい。また、アプリケーションプログラムという用語は、中間命令、バイトコードおよび保存された命令の他の形式、ならびに、ソースコードおよびテキストファイルなどを意味してもよい。また、アプリケーションプログラムという用語は、多様なコンピューティングアプリケーションの実施に関連する1以上のファイルの1セットを意味してもよい。アプリケーションプログラム(例えば、1以上の関連ファイル)のコピーをクライアントデバイスにダウンロードし保存してもよい。2つ目のコピーを、移行されたクラスまたはメソッドを実行し得る遠隔計算デバイスに保存してもよい。本明細書で使用するように、移行という用語は、オブジェクトまたは機能の一部を遠隔で実行することを意味してもよい。いくつかの場合および実施形態において、移行がオブジェクト全体の再配置を伴うこともあるが、オブジェクトの一部のみを移行する場合もある。実施形態では、移行を実施するのに必要なデータ転送を最小限にする様々な技術を使用してもよく、従って、オブジェクトに関連するデータ全てを移行するのではなく、場合により選択されたメソッドまたはメソッドセットを遠隔で実行するのに必要なデータ量を移行してもよい。
【0011】
アプリケーションプログラムは多数のクラスを備えてもよい。1つのクラスは、1以上のメソッドを備えてもよく、かつ、1以上の関連データを備えてもよい。1つのメソッドは、1以上の入力パラメータを有してもよく、かつ、1以上の戻り値および/または出力パラメータを有してもよい。1つのメソッドは、入力および/または出力としてクラスに関連するデータを利用する命令を含んでもよい。本明細書で使用するように、メソッドおよび機能という用語は、同じ意味で使用されてもよい。メソッドまたは機能という用語は、特定のクラスに関連するプロシージャ、または、どの特定のクラスにも関連しないスタンドアロンプロシージャの意味で使用されてもよい。
【0012】
アプリケーションプログラムを実行する場合は、アプリケーションプログラムのインスタンスまたはプロセスを意味してもよい。アプリケーションプログラムを備えたクラスのインスタンスをオブジェクトと呼んでもよい。クラスのインスタンスを、クラスに関連するデータを記憶するメモリ領域と関連させてもよい。
【0013】
図1Aは、アプリケーションプログラムのインスタンスであるプロセス102を実行しているクライアントデバイス104を示す。プロセス102は、図のオブジェクト106、108、110および112など、多数のクラスインスタンスを備えてもよい。実行の様々なポイントにおいて、オブジェクト106、108、110および112の各インスタンスをクライアントデバイス104上で実行してもよい。しかし、所定のオブジェクトを選択して遠隔計算ノードに移行してもよい。例えば、図1Aでは、オブジェクト110が計算ノード114に移行されて移行オブジェクト118として実行されること、および、オブジェクト108は計算ノード116に移行されて移行オブジェクト120として実行されていることを図示する。オブジェクトの移行では、オブジェクトが当初インスタンス化されたデバイスとは別の計算デバイス上で、オブジェクトの1以上のメソッドを実行することを含んでもよい。また、計算ノード114または116といった遠隔計算ノード上で初めてオブジェクトを作成することによってオブジェクトがインスタンス化前に移行されてもよい。また、実施形態では、移行に関連するいずれの側でも移行オブジェクトを必要に応じインスタンス化してもよい。例えば、オブジェクトをまずクライアントデバイス上でインスタンス化し、その後、オブジェクトのメソッドを遠隔計算ノード上で遠隔実施する直前に遠隔計算ノード上でインスタンス化してもよい。インスタンス変数にも他のオブジェクト状態にも関係無く、機能やオブジェクトメソッドを呼び出すことがあってもよく、その場合、オブジェクトのインスタンス化を「no−op」とするか、スキップしてもよい。また、オブジェクトを、例えば、移行メソッドによりアクセスされるメモリ位置のみインスタンス化するなどして、部分的にインスタンス化してもよい。
【0014】
計算ノード114および116は、遠隔計算設備122内でホストされてもよい。いくつかの実施形態において、遠隔計算設備122は、アプリケーション発行者に代わりプロバイダにより操作されてもよい。遠隔計算設備122を使用することで、発行者のアプリケーション用に演算能力を提供するために、アプリケーション発行者に様々な費用がかかる場合がある。これを、個別にまたは組み合わされ使用され得る多数のファクタの中の、遠隔計算ノードに移行するオブジェクトの範囲判断に使用する1ファクタとしてもよい。例えば、予算が大きい発行者であれば、アプリケーションの性能を改善するために、多数の計算ノードを、クライアントデバイス上で動作するアプリケーションプログラムに使用可能にしてもよい。あるいは、予算が少ない発行者であれば、使用を最低レベルに制限してもよい。しかし、場合により、発行者は、一時的に、遠隔計算設備122など設備の遠隔計算デバイスに移行するオブジェクトの数を増加可能にすることを希望するかもしれない。
【0015】
多様な実施形態において、オブジェクトを、性能およびネットワークコンディションなどのファクタに基づき移行してもよい。例えば、計算ノード114上で実行中のオブジェクトを、利用が少ないことを踏まえ計算ノード116に移行してもよい。いくつかの場合および実施形態において、オブジェクトを、計算ノード114または116などの遠隔計算ノードでの実行後、クライアントデバイス104に戻してもよい。これは、例えば、クライアントデバイス104と遠隔計算設備122の間のネットワーク接続を中断する場合に発生する可能性がある。
【0016】
実施形態では、クラスおよびその依存関係の両方に係わる様々なファクタに基づき、クラスの移行適否を判断してもよい。これには、移行候補が依存する他のクラス、スタティックまたはダイナミックリンクライブラリ、バックグラウンドサービス、オペレーティングシステム(「OS」)機能およびハードウェアを含んでもよい。さらに、メンバデータおよびメソッドパラメータなど、クラスに関連するデータは、クラスの移行適否に影響を及ぼし得る。
【0017】
移行候補は、ソフトウェア開発者に識別されてもよい。例えば、開発者はアノテーション、属性、または他の開発言語機能を使って、移行候補にマーク付けしてもよい。この情報は、コンパイラ、インタープリタおよび/またはリンカに処理され、実行可能なプログラムまたはライブラリに含まれてもよい。実施形態では、移行候補の静的解析を実施し、候補クラスのインスタンスの移行に対する実行可能性を初期推定してもよい。従って、いくつかの実施形態において、移行候補としてクラスをマーク付けしてクラス移行を示唆するが、必ずしも決定させるものではない。実行可能性の初期推定は、候補クラスの依存関係および対話モードを解析することによって判断される。
【0018】
本開示の実施形態を使用して、様々なクライアントデバイスで使用するアプリケーションを発行し、発行されたアプリケーション用に柔軟な計算環境を提供してもよい。例えば、アプリケーション発行者は、所定のメソッドまたはクラスを移行候補としてマークしたアプリケーションプログラムを発行してもよい。また、アプリケーション発行者は、クラウドベースの計算リソースを確保しておき、アプリケーションプログラムをダウンロードするクライアントデバイスとは離れた計算ノード上で、アプリケーションプログラムの一部を実行してもよい。例えば、アプリケーション発行者は、計算能力が比較的低いスマートフォンや、計算能力が比較的高いタブレット上で実行されるゲームプログラムの単一コピーをリリースしてもよい。スマートフォン上で実行されるゲームインスタンスは、確保されたクラウドベース計算リソースの使用量が多くなり、タブレット上で実行されるゲームインスタンスは使用量が少なくなる可能性がある。アプリケーション発行者は、タブレットと携帯電話の割合に基づき、確保するクラウドベース計算リソースの量を調整してもよい。
【0019】
実施形態では、本開示の態様を利用し、バックグラウンドタスクの実行を移行してもよい。アプリケーションのメソッドまたはクラスを、例えば、システムの起動またはシャットダウンなどのイベントに応答した条件付き移行対象としてマーク付けしてもよい。ランタイム時に、これらのメソッドを移行してもよい。バックグラウンドタスクのクライアントデバイス上での実行に合わせて、この方法を用いてもよい。クライアントデバイスがシャットダウンする際、シャットダウンイベントがバックグラウンドタスクの遠隔計算ノードへの移行のトリガとなり、クライアントデバイスがシャットダウンされる間も引き続き実行されてもよい。クライアントデバイスが再起動されると、実行はクライアント上で継続されてもよい。バックグラウンドタスクのステート情報は、移行ごとに転送されてもよい。これにより、クライアントデバイスがシャットダウンしても、また、ローカルでバックグラウンドタスクの実行を中断しても、バックグラウンドタスクを長期に実行できるようにしてもよい。別の実施例では、能力をセーブするため、移行実施を伴ってもよい。例えば、バックグラウンドタスクを使用するアプリケーションがフォアグラウンドに無い場合、バックグラウンドタスクを遠隔計算デバイスに移行してもよい。当該アプリケーションがフォアグラウンドのアプリケーションとなれば、ローカルで実行再開してもよい。
【0020】
図1Bは、アプリケーション発行者に代わり、クラウドベースの計算リソースをアプリケーションプログラムに割り当てる実施形態を示すブロック図である。プロバイダは、1以上の計算デバイスを備え得るホスト140を保持してもよい。アプリケーション発行者150は、多様なクライアントにダウンロードされるアプリケーションの発行と同時に、クライアントデバイスの仮想化コピー144に関連付けられてもよい。図1Bは、アプリケーション発行者150とクライアントデバイスの仮想化コピー144との関係が1対1であることを示すが、他にも多くの組合せが可能である。例えば、アプリケーション発行者150は、アプリケーションプログラムごとに1つの仮想化オペレーティングシステムを確保してもよく、または、多数のアプリケーションプログラムに利用される多数の仮想マシンを確保してもよい。移行オブジェクト148は、アプリケーション発行者150によって発行された1以上のアプリケーションに関連しており、クライアントデバイスの仮想化コピー144のコンテキストで動作してもよい。
【0021】
第二アプリケーション発行者152は、クライアントデバイスの仮想化コピー144と同じホスト140上で動作し得るクライアントデバイスの仮想化コピー142を確保してもよい。移行オブジェクト146は、アプリケーション発行者152により発行された1以上のアプリケーションに関連しており、クライアントデバイスの仮想化コピー142のコンテキストで動作してもよい。
【0022】
クライアントデバイスの仮想化コピー142として、仮想マシンを選択するか構成してもよい。クライアントデバイスの仮想化コピー142は、アプリケーションプログラムが動作しているクライアントデバイスと同様の特性を備えてもよい。いくつかの場合および実施形態において、クライアントデバイス上で動作するアプリケーションプログラムは、同じアプリケーションプログラムが遠隔計算ノード上で動作するのと略同様に動作するという意味において、これらの環境の両方は同じであってもよい。より一般的には、実施形態では、移行されたクラスおよびメソッドを実行するため、アプリケーションを実行するクライアントデバイスで使用される環境のコピーまたは同等物を利用してもよい。
【0023】
本明細書で使用するように、仮想マシンという用語は、ハイパーバイザまたは同様のプロセスに制御されて動作するというように、コンピュータのソフトウェア型エミュレーションに関連してもよい。また、仮想マシンという用語は、JAVA仮想マシンなど、中間レベル(すなわち、非特定プロセッサ)命令を実施する実行可能なプロセスに関連してもよい。クライアント環境の仮想化コピーは、多様な実施形態において、これらのタイプの仮想マシンのいずれかを備えてもよい。
【0024】
実施形態では、様々に動作し移行可能なプロセスが動作する環境間の互換性を維持してもよい。この場合、クライアントデバイス上でのプロセス実行環境と、遠隔計算ノード上での移行クラスまたはメソッドの実行環境との間で一貫性を保ってもよい。例えば、図1Aにおいて、プロセス102は、LINUXオペレーティングシステムバージョンで動作するJAVA仮想マシン上で実行してもよい。LINUXオペレーティングシステムの同一バージョンでの動作およびJAVA仮想マシンの同一バージョンの使用を踏まえ、計算ノード114および116はインスタンス化または確保されてもよい。
【0025】
図2は、コンパイル前のアプリケーションプログラムを示すブロック図であり、アプリケーションプログラムの少なくとも1つのクラスにアノテーションを付け移行の可能性を示している。アプリケーションコード200は、クラス202、204および206など、多数のクラスを定義する多様なソースファイルを備えてもよい。各クラスは、1以上のメソッドを備え、また、メンバデータとも呼ばれる1以上の関連データを有してもよい。例えば、クラス202は、メソッド208およびメンバデータ210を備え、クラス204はメソッド212を備えてもよい。
【0026】
開発者(図示せず)は、クラス202にアノテーション214を付け、クラス202が移行候補として扱われるよう示してもよい。アプリケーションコード200内のクラスはいくらでも、移行候補としてアノテーションを付けてもよい。しかし、表示を簡略化するために、図2には1つのアノテーションを付けたクラスのみ示す。
【0027】
アノテーションを付けたクラス202についての移行可能性は、その依存関係次第としてもよい。例えば、クラス202のメソッド208は、クラス204のメソッド212、および1以上のライブラリ214と依存してもよい。依存関係は直接的であっても間接的であってもよい。例えば、メソッド208はメソッド212を呼び出すコードを含んでおり、メソッド212に直接的な依存してもよい。また、メソッド208は、1以上のライブラリ214の機能または特徴的機能を呼び出すかそれらに依拠してもよい。メソッド208は、メソッド212が機能を呼び出すため、オペレーティングシステム216の所定機能に間接的に依存してもよい。また、1以上のライブラリ214、オペレーティングシステム216、および、ハードウェア218間では、様々な依存関係があってもよい。
【0028】
オブジェクトの移行では、クライアントデバイスと1以上の遠隔計算ノードとの間、または、1以上の遠隔計算ノード間で多様なコード要素を同期してもよい。同期の態様では、オペレーティングシステムバージョン、ライブラリバージョン、およびアプリケーションバージョンを伴ってもよい。一般的に、オペレーティングシステム、ライブラリ、またはアプリケーションに対応した、実行可能な保存命令の同期を伴ってもよい。例えば、クライアントデバイスがオペレーティングシステムZのバージョンX.Yで動作する場合がある。オペレーティングシステムZのインスタンスを遠隔計算ノード上で動作させてもよい。遠隔計算では、バージョンX.Yに同等であると判断されたオペレーティングシステムを使用してもよい。この場合、同等性は、依存される機能について判断されてもよい。例えば、図2において、メソッド212は、オペレーティングシステムZの旧バージョンからバージョンX.Yへのアップグレードによる影響が無いオペレーティングシステム216のコンポーネントに依存してもよい。この場合、旧バージョンとバージョンX.Yは同等であると見なされ、同等であることに基づき同期されていると見なされてもよい。ライブラリおよびアプリケーションプログラムコードは、このような形式の同等性に基づき同期されてもよい。
【0029】
また、オブジェクトの移行ではデータ要素を同期してもよい。多様な実施形態において、アプリケーションにより保存されるデータは同期され、移行されたオブジェクトは依拠するデータに直接アクセスするようにしてもよい。また、実施形態では、インメモリデータを同期してもよい。実施例として図2では、クラス202がメンバデータ210を備えてもよい。このデータは、メソッド208に使用され、また、クラス202の図示していない追加メソッドにより使用されてもよい。従って、いくつかの実施形態では、クライアントデバイスと1以上の遠隔計算ノードとの間、または、2つ以上の遠隔計算ノード間でメンバデータ210のデータ同期を実施してもよい。
【0030】
図3は、クラス移行の適否を判断するための、クラスの依存関係の静的解析実施プロセスを示す図である。ツリー構造を使って、プログラムの様々なクラス300〜306の表示を保存してもよい。ツリー構造はソースまたはコンパイル済みコード要素の構文解析または反映など様々な方法で形成されてもよい。図3において、クラス300はクラス302、304、および306に依存してもよい。クラス300のインスタンスの移行適否は、クラス300が依存するクラスのインスタンスの移行適否に依存してもよい。
【0031】
様々なファクタが移行適否に影響を及ぼしてもよい。これらには以下の例示的なファクタを含むが、これらに限定されない。移行適否に影響を及ぼす第一ファクタとして、移行可能であり得るクラスのメソッドにより課される計算要求があってもよい。実行時に利用可能な遠隔計算ノードと、ローカルデバイスの計算能力と比較して、この比較に少なくとも部分的に基づき、計算量を解析してもよい。第二ファクタは、移行され得るクラスのメソッドに対するパラメータサイズを含んでもよい。パラメータのないメソッド、またはパラメータが小さいメソッドは、パラメータが多い、またはパラメータが大きいメソッドよりも移行に適していてもよい。第三ファクタは、移行され得るクラスのメソッドが参照するメンバ変数、グローバル変数および他のデータを含む。そういったデータの少量にしか依存しないメソッドは、多量のそのようなデータに依存するメソッドに比べ、より移行に適していてもよい。第四ファクタは、メソッドの呼出し時に影響を受け得るメンバ変数およびグローバル変数といったステート情報間の相互の依存関係の程度を含む。例えば、ステートレスなメソッドは、そうでないメソッドに比べ、より移行に適していてもよい。同様に、特に、多くの追加メソッドがグローバル変数に依存している場合には、グローバル変数に影響を与えるメソッドに比べ、メンバ変数にのみ影響を与えるメソッドの方がより移行に適していてもよい。
【0032】
オペレーティングシステムのコンポーネントを呼び出すメソッドを含むクラスがあってもよい。例えば、図3では、クラス302はOSコンポーネント308および310に依存しており、クラス304はOSコンポーネント312に依存していることを図示する。所定のオペレーティングシステム機能は、クラスまたはメソッドの移行とコンフリクトする場合がある。例えば、図3では、OSコンポーネント308は、カメラ314に依存していることが図示される。クライアントデバイスにローカルなカメラは、そういった機能の対象であるので、それらの機能は、テストまたはデバイスのシミュレーションなどといった所定の場合を除き、移行すべきでない。他の場合では、オペレーティングシステム機能には、ローカルメモリ管理、電源オフ、またはローカル機能のその他態様など、移行すべきでない機能を含んでもよい。しかし、移行に適したデバイスがあってもよい。図3において、記憶デバイス316は移行に適してもよい。実施形態では、ローカルデバイスストレージおよび遠隔デバイスストレージのコンテンツを同期するなど、多様な技術で記憶デバイスの移行をサポートしてもよい。
【0033】
クラスまたはメソッドの移行適否の初期推定を指定するプログラムのクラスおよびメソッドに、スコア付けしてもよい。実施形態では、移行優先度を高くすべきクラスに高スコアを付け、移行優先度を低くすべきクラス、または移行すべきでないクラスに低スコアを付けてもよい。実施形態では、クラスが依存するOSコンポーネントおよびハードウェアなど、クラスやその他の要素に付けられたスコアに基づきクラスにスコアを付けてもよい。
【0034】
図3の実施例において、クラス300は、スコア320を有するクラス302、および、ゼロスコア326を有するOSコンポーネント308を介して、ゼロスコア332を有するカメラ314に間接的な依存関係があるため、移行候補には向かないかもしれない。これは低い移行優先度が反映され、クラス300に関連付けられたスコア318に低い値が反映されてもよい。
【0035】
いくつかの実施形態において、クラス300は、ローカルデバイス上で実施されるOSコンポーネント308を呼び出すように調整することで、移行の可能性がある。この場合の制御フローは、必要に応じ、クライアントデバイスと遠隔計算デバイスとで交替してもよい。実施形態では、付与時に、インタフェースの対話性、移行データ量といったファクタを利用してもよい。
【0036】
いくつかの場合および実施形態において、依存するクラス、OSコンポーネントまたはデバイスのスコアが低くても、クラスに高いスコアを付けてもよい。これには様々なファクタがあり、例えば、高スコアクラスと、低スコアクラス、OSコンポーネントまたは高スコアクラスの移行を受け入れるデバイスとの間のインタフェース等がある。これは、例えば、離れた位置で動作する利点が不利益に比べ高い場合であってもよい。これは、高スコアクラスと、低スコアのクラス、OSコンポーネントまたはデバイスとの間の対話頻度が比較的低い場合であってもよい。例えば、一連の長く複雑な計算を実施するクラスであれば、たとえ移行が不可能ないくつかの機能を実施したとしても、移転による恩恵がある場合がある。この場合、移行しない機能を実行するためのコンテキストの切り替えに費用がかかっても、クラスを移行することは有益であってもよい。この費用がかかるファクタとして、クライアントデバイスと遠隔計算ノードとの間のデータ転送、適切な遠隔計算ノードへの対応プロセスの配置などがあってもよい。
【0037】
いくつかの場合および実施形態において、特定のカテゴリに対応する全てのメソッドまたはクラスのリダイレクションを可能にするためなど選択ファクタに基づいて、クラスまたはメソッドにスコアを付けてもよい。例えば、APIに属する機能全てを移行候補としてマーク付けしてもよい。仮スコアまたは条件付スコアをこのコンテキストで使用してもよい。例えば、ランタイム時に判断し、クライアント上でなく離れた位置で利用可能なAPIバージョンを実行してもよい。
【0038】
また、ある実施形態では、直接的であっても間接的であってもクラスまたはメソッドによる外部APIの呼び出しに基づき、クラスまたはメソッドにスコアを付けてもよい。また、スコアは、APIの呼出しに掛かる費用に基づいてもよく、その場合、費用は、データ転送費用、帯域幅利用など様々なファクタを参照してもよい。例えば、移行候補はインターネットベースのウェブサービスを呼び出す場合がある。携帯電話での場合、ウェブサービスの呼出しによって、携帯デバイスのユーザはデータ転送量に基づく利用料を負う場合がある。ウェブサービスを呼び出すクラスまたはメソッドを移行することで、こういった料金の発生を回避してもよい。
【0039】
実施形態では、OSコンポーネント312および記憶デバイス316へ付されるスコア330および334に基づき、クラス304にスコア322を付けてもよい。記憶デバイス316へのスコア334など、デバイスに付けられるスコアは、開発者の意図やデバイスの移行に対する適合性といった多くのファクタに依存してもよい。例えば、所定のクラスが離れた位置にある記憶デバイスを使用するよう開発者は指示してもよく、アノテーションまたは属性などの方法でその指示を出してもよい。従って、そのような環境では、記憶デバイス316へのクラス304の間接的な依存関係は、クラス304に対し好適なスコアを付けるファクタであろう。換言すれば、スコア322またはクラス304は、スコア330およびスコア334に影響される可能性がある。
【0040】
クラス306など依存関係のないクラスは、図3でスコア324として示されているが、高い移行スコアを受けてもよい。スコア324は、当該クラスが移行に好適とすべき旨の開発者による指示など、様々な追加のファクタにより影響を受けてもよい。例えば、この指示をクラスまたはメソッドのアノテーションで出し、それによりクラスまたはメソッドの移行適否についての開発者の意向を示してもよい。
【0041】
いくつかの実施形態において、移行優先度を示すスコアを、図3に関連して説明したように、静的解析により設定し、ランタイム中の実行をモニタリングして調整してもよい。他の実施形態において、静的解析を使って移行候補を識別するが、スコア付けはランタイム時まで延ばしてもよい。この場合、静的解析時にクラスに付けるスコアは、オブジェクトへの初期スコア設定の基準とし使用されてもよい。多様な実施形態において、同一クラスの異なるオブジェクトが異なるスコアを有してもよい。これは、例えば、サイズなど、特性が異なる同一クラスの様々なオブジェクトに基づく場合に発生してもよい。例えば、サイズが小さいオブジェクトは、サイズが大きなオブジェクトに比べ、移行候補としてより好適であってもよい。
【0042】
また、実施形態では、例えば、アプリケーションを携帯デバイス上で動作させる場合に用いるスコアセット、および、アプリケーションをパーソナルコンピュータ上で動作させる場合に用いる別のスコアセットといったように、条件次第で複数のスコアセットを使用してもよい。オブジェクトインスタンスに付けるスコアを、クライアントデバイスの構成またはクライアントデバイスが動作する環境などのファクタに部分的に基づき、クラスに関連させたスコア候補セットから選択してもよい。
【0043】
図4は、実行プログラムのクラスのモニタリングおよび移行、ならびに、ステートレスメソッドおよびステートフルメソッドの呼出しを示す図である。アプリケーションプログラムをクライアントデバイス400上で実行してもよい。アプリケーションプログラムはランタイム402を使って動作してもよい。いくつかの実施形態において、ランタイム402は、中間言語命令またはバイトコード命令をプロセッサ命令に変換し、変換された命令を実行する命令を備えてもよい。また、ランタイム402は、仮想計算環境を備えてもよい。
【0044】
スケジューラ404の1以上のモジュールを、クライアントデバイス400上で実行してもよい。モジュールという用語は、本開示の態様を実施するコンピュータ実行可能命令および回路の多様な組合せを意味してもよい。モジュールは、スタティックおよびダイナミックリンクライブラリ、実行可能なプログラム、オペレーティングシステムコンポーネントなどを備えてもよい。スケジューラ404のモジュールは、クライアントデバイス400、ランタイム402、およびアプリケーションプログラム性能の性能特性トラッキングを含む動作を実施してもよい。多様な実施形態において、モニタリング命令および移行命令は1以上のモジュールに含まれ、各モジュールは、本実施形態の多様な態様を実施する命令サブセットを含んでもよい。図4は、単一モジュールにより実行されるモニタリング機能および移行機能を示すが、単一モジュールを使った実施形態に限定されるものと見なすべきでなく、また、本明細書に記載する動作がランタイムまたはオペレーティングシステムなど他の要素に包含させないと見なすべきでない。
【0045】
スケジューラ404のモジュールは、クラスおよびメソッド境界間でのデータ転送のモニタリングを実行してもよい。実施形態では、データ転送特性を、オブジェクトの移行を判断する際のファクタとして利用してもよい。クラスまたはメソッド境界間でのデータ転送量が比較的少なければ、オブジェクトの移行を示唆し、データ転送量が比較的多ければ移行を禁止するとしてもよい。
【0046】
スケジューラ404のモジュールは、移行候補を識別する動作を実施してもよい。候補は、潜在的な候補を識別するアプリケーションプログラム内に含まれた情報、または、当該アプリケーションプログラムに関連付けられた情報を含め、多様なファクタに基づいて識別されてもよい。当該情報は、アプリケーションプログラムに埋め込まれるか、スケジューラ404のモジュールに読み出される関連ファイルに書き込まれてもよい。例えば、実施形態では、アプリケーションプログラムの起動時にアプリケーションプログラムをスキャンし、移行候補を識別してもよい。いくつかの実施形態において、アプリケーションプログラムの起動後に、移行候補を識別してもよい。実施形態では、例えば、クラスのインスタンスがインスタンス化される直前に、移行候補としてクラスにマーク付けするかどうかを判断してもよい。
【0047】
スケジューラ404は、モニタリング中に収集された情報を利用して、移行するクラスを選択してもよい。実施形態では、候補であると識別されたクラスの中から移行クラスを選択してもよい。静的解析に基づき候補クラスに付けられたスコアに基づいて、選択してもよい。また、モニタリング情報に基づき調整されたスコアに基づいて、選択してもよい。例えば、静的解析は、あるクラスは移行に好適な候補であると示す場合があるが、当該クラスのモニタリングは、境界間でのデータ転送量が多いことを示す場合がある。ある実施形態では、この場合、クラスに付けられた移行スコアを引き下げ、調整された移行優先度を示すようにしてもよい。
【0048】
いくつかの場合および実施形態において、クライアントデバイス400またはランタイム402の性能により、いくつかのクラスが高い移行優先度を受けるべきであると示すようスコア調整を示唆される場合がある。例えば、クライアントデバイス400の中央処理装置(「CPU」)がオーバーロードとなった場合、CPUへの要求が多いクラスには、CPUへの要求がより少ないクラスより、移行優先度を高くしてもよい。
【0049】
移行されたクラスは計算ノード406上で実行してもよい。ランタイム408を、計算ノード406上で使用してもよい。実施形態では、クライアントデバイス400上で動作するランタイム402の動作特性と、計算ノード406上で動作するランタイム408の特性とをマッチングさせてもよい。例えば、計算ノード406は、クライアント上で動作するランタイム402のバージョンに対応するランタイム408のバージョンを動作させてもよい。
【0050】
スケジューラ410のモジュールは、計算ノード406上で動作してもよい。計算ノード406上のスケジューラ410のモジュールは、クライアントデバイス400上で動作するスケジューラ404により実施される動作と同様の動作を実施してもよい。当該動作では、計算ノード406およびランタイム408の性能の多様な態様をモニタリングすることを含んでもよい。図4においてデータ交換422の矢印を使って示された通信パスは、クライアントデバイス400上で動作するスケジューラ404と、計算ノード406上で動作するスケジューラ410との間で確立されてもよい。スケジューラ404および410で共有される情報を使って、クライアントデバイス400から計算ノード406へ移行するクラスを選択してもよく、選択されたクラスの移行を終了してもよい。例えば、ある実施形態では、計算ノード406のCPU利用度をモニタリングし、利用度が高すぎると判断したり、クライアントデバイス400での利用度より利用度が高いと判断したりしてもよい。実施形態では、クラスまたはオブジェクトの移行の優先付けは、クライアントデバイス400および計算ノード406の両方の性能ファクタおよびその両方で収集されたその他データとの比較に基づいてもよい。費用的な有利性または最適な方法を利用して、特定のクラスまたはオブジェクトの移行スコアを調整するかどうかを判断するか、どの程度まで積極的に移行するクラスまたはオブジェクトの選択を行うかを判断してもよい。
【0051】
計算ノード406上にある移行されたオブジェクトと、クライアントデバイス400上にある移行されていないオブジェクトとの間の対話を、ステートレス対話またはステートフル対話として分類してもよい。ステートレス対話は、実行しても値を返す以外何の影響もないメソッドなど、有意な副作用が無いメソッドと説明されてもよい。一方、ステートフル対話では、同期の必要性と関連する副作用が生ずる。
【0052】
図4において、ステートレス対話として、ステートレスメソッドである呼出412が示され、後に返答414が続いてもよい。返答414では、結果としてステートレスメソッドを実行させることを含んでもよい。これには、例えば、呼出412により提供されたパラメータを使って計算ノード406上で実施された計算の結果を含んでもよい。
【0053】
また、ステートフル対話は、後に返答418が続く呼出416を含んでもよい。しかし、関連メソッドがステートフルであるため、実施形態では、同期420を実施し、計算ノード406上でステート変更してクライアントデバイス400上のデータと一致させ、またその逆も行ってもよい。実施形態では、ステートフルメソッドに関連する動作を実施するためにネットワークを往復する回数を低減させるため、同期420に関するデータを呼出416および返答418と合わせてもよい。
【0054】
いくつかの場合において、メソッドではステート情報の変更を行わないが、それにもかかわらず状態に依存していてもよい。いくつかの実施形態において、当該メソッドタイプをステートフルメソッドとして扱ってもよい。他の実施形態において、ステートレスメソッドとして扱ってもよい。いくつかの実施形態では、メンバ変数および他のステート情報を呼出412で転送してもよい。
【0055】
ステートフルまたはステートレスであるとする対話分類は、クラスまたはオブジェクトの移行に関するスコア付けに影響を与えてもよい。多様な場合および実施形態において、移行には、ステートレス対話が好適である。アプリケーションプログラムの静的解析に基づき、対話をステートフルであるかステートレスであるか分類してもよい。また、いくつかの実施形態では、静的解析に追加するか、静的解析の代わりに動的解析を用いてもよい。
【0056】
図5は、アプリケーションプログラムのセグメントの移行適否を判断するアプリケーションプログラムの静的解析を示すフローチャートである。一連の動作として示されているが、当業者であれば、示した順序により本開示の範囲が限定されると見なすべきでなく、示した動作の少なくともいくつかを変更し、削除し、配置換えし、追加の動作で補足し、または、並行して実施してもよいと理解するであろう。
【0057】
動作500は、移行の候補であると見なされうる、アプリケーションプログラムのクラスまたはメソッドのサブセットを識別する実施形態を示す。開発者が候補のクラスまたはメソッドへのマーク付けに使用した属性、アノテーションまたは他の方法に基づき、識別を行ってもよい。実施形態では、ソースコードの構文解析やコンパイル済みコードへの反映技術といった技術を使用し、マークされたクラスまたはメソッドを識別してもよい。いくつかの実施形態では、ソースコードまたはコンパイル済みコードをスキャンし、アノテーションまたは属性などの方法を用いることなく、コードの予測挙動に基づき、移行の適否を直接推測してもよい。
【0058】
動作502では、候補メソッドまたは候補クラスに関連するメソッドの入出力特性を解析することを示す。これらの特性は、入力としてメソッドに提供されたパラメータ、または、出力パラメータもしくは戻り値として返されたパラメータのタイプを含んでもよい。基本パラメータタイプ以外を使って規定されたものなど複雑なパラメータタイプは移行に不利な場合があるが、整数などの基本タイプはその逆を示唆するであろう。同様に、パラメータが大きければ移行が不利になる場合があり、パラメータが小さければ有利になる。
【0059】
動作504は、候補クラスのメモリ依存関係を解析することを示す。実施形態では、候補クラスのメソッドによるメソッドパラメータ、メンバ変数(スタティックおよびインスタンス変数の両方を潜在的に含む)、グローバル変数などを参照して識別してもよい。実施形態では、メモリアクセスに関連する多様なファクタを解析し、移行の適否を判断してもよい。例えば、実施形態では、候補メソッドを含む他のメソッドとメンバ変数との間の依存関係を解析してもよい。依存関係が多ければ移行優先度が低く、または、移行に不適であることと示唆し、依存関係が少なければその逆を示唆してもよい。また、参照データ量を検討してもよい。多くのファクタの中でも、依存関係が読み出し専用であるか、読み出し書き出し動作の両方を含むかも、1つのファクタである。
【0060】
動作506は、ダイナミックリンクライブラリ、デーモンプロセス、ウェブサービスなど、アプリケーションプログラムの外部への依存関係を解析する実施形態を示す。移行先でのこれらの依存関係タイプの可用性は、外部依存関係がステートレスでない一部の場合、移行に有利になってもよい。この時、クライアントデバイスおよび遠隔計算ノード上で動作する外部依存関係のステート同期を回避することが望ましい場合がある。一方、ステートレスウェブサービスなどの依存関係が移行先で動作している場合、呼び出しメソッドを移行することで、いくつかのインスタンスにおいて性能が向上されてもよい。サービスの対応バージョンが移行先にあるかどうかも、もう1つの関連ファクタである。
【0061】
動作508において、実施形態では、オペレーションシステムおよびハードウェアの依存関係を解析してもよい。単独または組み合わせて多様な方法を用いてもよい。実施形態では、上記のファクタに基づきメソッドの移行適否を解析してもよい。オペレーティングシステムまたはハードウェアの依存関係の該当する分類に基づき、オペレーティングシステムまたはハードウェアの依存関係を呼び出す候補メソッドにスコア付けしてもよい。しかし、以下の分類化は例示であり、本開示の範囲を限定するものとみなすべきでないことは理解されるであろう。第一分類は、移行が常時不適であるオペレーティングシステムの機能を含んでもよい。メモリ管理機能、電源オフ等がこれに属してもよい。第二分類は、特定の状況を除き移行が不適であるハードウェアおよびハードウェアアクセス機能を含む。クライアントデバイスのカメラのみカメラ視野で撮像が可能であるため、カメラは、このタイプのデバイスの一実施例である。しかし、検査またはシミュレーションといった特別の状況では、カメラを呼び出す機能を移行可能であると示唆してもよい。第三分類は、移行され得るコールを含んでもよい。一実施例として、いくつかの場合および実施形態において、移行により有用となり得るグラフィックプロセッサの呼出しを含むコールがある。例えば、クライアントデバイスより遠隔計算ノードのグラフィック処理ユニットのほうが優れている場合である。第四分類は、移行を意図したコールを含んでもよい。このカテゴリは、遠隔でホストされる記憶サービスに関するサービスに対するコールを含んでもよい。
【0062】
動作510は、移行候補の依存関係チェーンを解析する実施形態を示す。実施形態では、多数のファクタに関する依存関係チェーンを解析してもよい。ファクタの1つは、依存関係チェーンの深さを含んでもよい。依存関係のない、または依存関係の数が少ない候補メソッドは、依存関係の数が多いメソッドに比べ、より移行に適していてもよい。別のファクタに、依存関係チェーンの分離として記述されることができるものを含んでもよい。これは、移行に適した境界を有するチェーンの点を含んでもよく、この際ファクタに基づき適否を判断し得るが、当該ファクタには、候補メソッドの実行中に境界を超えると予期される頻度、または予期される転送データ量を含むが、これらに限定されない。依存関係チェーン内に移行に不適なファクタがある候補メソッドであっても、依存関係チェーンに分離に適する点があれば、それにもかかわらず全体的には移行候補として好適であるとしてもよい。
【0063】
動作502から510で解析しているように、示したようなファクタなどのファクタに基づき、実施形態では、動作512で示すように、候補クラスまたはメソッドにスコアを付けてもよい。スコアは、クラスまたはメソッドの移行適否、または移行優先度を示してもよい。解析のため、クラスの特性をクラスのメソッドの特性から求めてもよいことに留意する。実施形態では、クラスのメソッドの移行適否に基づき、移行スコアをクラスに付けてもよい。
【0064】
動作514において、実施形態では、アプリケーションプログラムまたは解析中の他のコードに、スコアを示す情報を保存してもよい。また、実施形態では、1つの外部ファイルまたは複数ファイルに当該情報を保存してもよい。スコア情報を、スケジューラ、または情報を解析し得る他のコンポーネントによりランタイムで利用し、移行するクラスおよびメソッドを選択してもよい。
【0065】
図6は、付けられたスコア、および、アプリケーションプログラムの実行をモニタリングしそれに基づいて調整されたスコアに基づき、移行するクラスを選択する実施形態を示すフローチャートである。一連の動作として示されているが、当業者であれば、示した順序により本開示の範囲が限定されると見なすべきでなく、示した動作の少なくともいくつかを変更し、削除し、配置換えし、追加動作で補足し、または、並行して実施してもよいと理解するであろう。
【0066】
動作600で示すように、実施形態では、アプリケーションプログラムのマーク付候補クラスおよびメソッドを識別してもよい。スケジューラコンポーネントは、実行を開始するプログラムを示す情報を受信し、それに応答して、移行候補としてマーク付けされたクラスまたはメソッドセットを判断するために、アプリケーションプログラムコードまたは関連情報の検査を開始してもよい。また、実施形態では、検査を通し静的解析の結果、候補クラスおよびメソッドに付されたスコアを判断してもよい。
【0067】
動作602では、移行候補クラスの初期サブセットを選択することを示す。実施形態では、実行するための初期の移行程度または移行量を判断してもよい。これは、スケジューラモジュールがクラス移行においてどのくらい積極的であるべきかの指示を受信することを含んでもよい。例えば、多様な実施形態において、クラスまたはメソッドを移行する閾値スコアを示すスケジューラモジュールによって、情報を受信してもよい。いくつかの実施形態において、閾値スコアは、開発者が示し、アプリケーションプログラムに埋め込まれた情報として備えられてもよい。他の実施形態において、閾値スコアはファクタにより判断されるが、当該ファクタは、アプリケーションプログラムが動作しているクライアントデバイス、起動時のネットワークの可用性、遠隔計算リソースの可用性などを含むが、これらに限定されない。利用され得るもう1つのファクタは、多様な実施形態において、電力を使用する見込みである。実施形態では、所定のメソッド、システムの機能、プログラム構成などは、閾値レベル以上の電力量を使う可能性が高いと判断してもよい。これらには、携帯電話など電力に敏感なデバイスに対し移行が好適となるようスコア付けしてもよい。いくつかの実施形態において、スコア付けは、コードが動作されるデバイスなどのファクタ次第、またはランタイム時に起こり得る多様な条件次第であってもよい。バッテリレベルが一実施例である。
【0068】
実施形態では、アプリケーションプログラムの動作に関連する多様なファクタをモニタリングし、収集された情報を使って、移行するものとして選択されたクラスセットを変更してもよい。動作604では、クライアントデバイスでのアプリケーションの性能をモニタリングすることを示す。これは、クライアントデバイスの全体的な性能をモニタリングすることを含んでもよい。性能の態様には、アプリケーションプログラムまたはクライアントデバイスのオペレーティングシステムの多様な機能の実行回数を含んでもよい。また、メモリ使用量、CPU使用量などの他のメトリクスを含んでもよい。バッテリレベルだけでなく、電力使用量を検討してもよい。いくつかの実施形態において、比較基準として使用するために多様な閾値を規定してもよい。属性またはアノテーションを使って、これらの閾値を候補クラスまたはメソッドに関連付けてもよい。また、アプリケーションプログラムに大域的なパラメータとして、当該閾値を規定してもよい。実施形態では、多様な式またはヒューリスティックを用いて、クライアントデバイスおよびアプリケーションプログラムの性能メトリクスを他のファクタと組み合わせて、候補クラスまたはメソッドを移行すべきかどうかを判断してもよい。
【0069】
動作606では、移行されたクラスまたはメソッドが実行中か実行されてもよい遠隔計算ノードの性能をモニタリングすることを示す。実施形態では、複数の遠隔計算ノードを用いてもよい。遠隔計算ノード性能のモニタリングでは、実行回数、CPU使用量、メモリ使用量などのメトリクスを検討してもよい。これには、移行されたメソッドの実行回数など、移行されたクラスおよびメソッドに直接起因するメトリクスを含んでもよい。全体的なシステム性能を検討してもよい。
【0070】
いくつかの実施形態において、料金を支払ってカスタマが使用するよう提供された遠隔計算ノードに、クラスおよびメソッドを移行してもよい。その場合、クライアントに対する費用は、カスタマのために使用される遠隔計算ノードの量に基づいてもよい。動作608では、サーバ側リソースの利用または消費およびその他ファクタをモニタリングし、当該その他ファクタは、移行されたクラスまたはメソッドが、ホストされた遠隔計算ノード上で動作可能になるためのクライアントに対する費用に影響する場合があることを示す。例えば、ある実施形態では、遠隔計算ノード上での利用率を、利用予算レートと比較してもよい。実際の利用が予算利用を超えれば、実施形態では、実際の利用が予算利用以下となるよう、1以上の移行クラスをクライアントデバイスに戻す判断をしてもよい。ネットワーク帯域幅の使用に対しユーザに課され得る費用など、多様な他の費用ファクタを検討してもよい。一般的な用語において、費用は、移行された機能の実行に使用され得る計算リソース、および、それらのリソースを使用するエンドユーザ、発行者、またはプロバイダに対する費用についての評価であってもよい。
【0071】
動作610は、クライアントデバイスと遠隔計算ノードとの間の通信に関連した可用性、レイテンシ、使用可能な帯域幅、および他のファクタのモニタリングを示す。可用性またはその欠如は、クラスまたはメソッドを移行するかどうかの判断における制御ファクタであってもよい。実施形態では、可用と非可用の推移をモニタリングしてもよい。ネットワークが非可用となった場合、実施形態では、ネットワークが可用になるまで、任意の移行済クラスをクライアントデバイスに再配置してもよい。
【0072】
多様な実施形態でクラスまたはメソッドの移行を判断する際に、または、移行済クラスを対応するクライアントデバイスに再配置するよう判断する際に、ネットワークレイテンシを解析し検討してもよい。実施形態では、移行境界の対話性、または、換言すれば、アプリケーションプログラムの移行されていない部分と移行された部分との対話頻度などの多様な他のファクタについて、ネットワークレイテンシを解析してもよい。ネットワーク帯域幅について、同様のメソッドを使用してもよい。本明細書に記載の技術によりネットワーク状態に動的に適応できるようにしてもよいことに留意する。例えば、高レイテンシの高帯域幅ネットワーク上で動作する場合、チャンク状のインタフェースを有するメソッドが移行対象に選択されてもよい。一方、低帯域幅、低レンテンシネットワークを使う場合、対話性の高いインタフェースを有するメソッドを選択してもよい。
【0073】
動作604から610において説明した多様なファクタを用いて、移行候補に関連するスコア値を調整してもよい。いくつかの実施形態において、これには、候補クラスの依存関係ツリーをトラバースし、ツリーにおける依存関係の移行スコアを調整し、依存関係のスコアに基づき候補クラスの全体的な移行スコアを再計算することを含んでもよい。依存関係チェーンに記入する際、スコア調整が、性能ファクタがスコアに与え得る影響の度合いを示す情報により影響を受けてもよい。例えば、アプリケーションプログラムの静的解析時、実施形態では、所定のメソッドは、レイテンシが高いネットワークに影響を受けやすいと判断してもよい。これらのメソッドは、レイテンシが高いネットワーク状態をモニタリングしたことを受け、スコア調整して他のメソッドより大きく減少させてもよい。動作612は、当該技術タイプまたは同様の他の解析技術に基づいたスコア調整を示す。
【0074】
実施形態では、クライアントデバイスと1以上の遠隔計算ノードとの間、または直接計算ノード間で性能情報を転送してもよい。いくつかの実施形態において、複数の実行インスタンス間で性能情報を集計してもよい。性能履歴情報を共有し利用して、初期移行スコアを調整してもよい。
【0075】
動作614は、調整済スコアに基づき移行されたクラスおよびメソッドセットを調整する実施形態を示す。多様な実施形態において、スコアを移行の優先度として扱ってもよい。スケジューラモジュールは、例えば、利用が減少するまでクラスまたはメソッドを追加移行してはならないという、所望の利用レベルに遠隔計算ノードが達するまで、クライアントデバイスから遠隔計算ノードにクラスを移行するよう判断してもよい。或いは、スケジューリングモジュールは、クライアントデバイスの性能が閾値レベルを超えて改善するまで、クライアントデバイスから1つの遠隔計算ノードにまたは1以上の遠隔計算ノードに、クラスを移行するよう判断してもよい。これらのいずれの場合においても、実施形態では、候補のクラスおよびメソッドに付されたスコアに基づき、クラスを移行させてもよい。例えば、最高スコアを最初に、次に2番目に高いスコアといったように移行させてもよい。逆のプロセスを用いて、例えば、移行されたクラスの中で最低スコアの移行済クラスを最初に移動させ、次に2番目に低いスコアといったように、移行済クラスおよびメソッドの数を減らしてもよい。
【0076】
いくつかの実施形態において、クライアントデバイスを含め、候補移行位置に関する性能ファクタについて、移行スコアを計算してもよい。実施形態では、スコアを比較し、最高スコアに基づきクラスまたはメソッドを移行すると判断してもよい。
【0077】
クライアント上で実行されるアプリケーションプログラムと移行されたクラスまたはメソッドとの間の対話は、関連オブジェクトの同期を含んでもよい。これには、例えば、移行されたメソッドによりアクセスされるメンバ変数値を示すデータを同期することを含んでもよい。図7は、分散アプリケーションにおけるオブジェクトのオブジェクトバージョントラッキングおよびコミットモデルを示すフローチャートである。一連の動作として示されているが、当業者であれば、示した順序により本開示の範囲が限定されると見なすべきでなく、示した動作の少なくともいくつかを変更し、削除し、配置換えし、追加動作で補足し、または、並行して実施してもよいと理解するであろう。
【0078】
動作700では、トラッキングするオブジェクトを識別する。スケジューリングモジュールは、移行されたオブジェクトを識別し、オブジェクトに対する変更をトラッキングしてもよい。この場合、移行されたオブジェクトに関連したどの移行済メソッドがオブジェクトの状態に影響を及ぼすかを、例えば、メンバ変数にどのメソッドが書き込むかを識別することで、判断することを含んでもよい。また、メンバ変数または他の共有ステートで読み出し専用動作を実施するメソッドをトラッキングしてもよい。実施形態では、メソッドまたはオブジェクトに関連するステート関連の依存関係に基づき、移行するメソッドまたはオブジェクトを優先付けしてもよい。実施形態では、当該方法を用いステートをトラッキングするオブジェクトの数を低減してもよい。
【0079】
動作702では、移行済オブジェクトのローカルコピーでのステート変更に応答してベクトルクロックをアップデートすることを示す。ベクトルクロックは、ローカルでの変更またはローカルでの周知変更の累積リストを表してもよい。ローカルでの変更を表すようアップデートがなされた後、ベクトルクロックを、クライアントデバイスまたは遠隔計算ノードに転送して、オブジェクトが変更したことを示してもよい。動作704にこれを示す。
【0080】
動作706において、アップデート済みベクトルクロックの受信者は、情報を適用して、受信者のデータコピーをアップデートし変更を反映させるべきかを判断してもよい。受信者のデータコピーに対しどの変更が適用されたかを判断するために、ベクトルクロックの受信コピーをローカルコピーと比較してもよい。
【0081】
動作708では、移行されたオブジェクトに関連したデータのコピーへの変更をコミットすることを示す。これは、例えば、クライアントデバイスおよび遠隔計算ノードがオブジェクトへの変更を永続的にすることを含んでもよい。これにより、クライアントデバイスおよび遠隔計算ノードに反映され、それぞれが正確なバージョンのデータを保有するよう折り合いがついてもよい。
【0082】
本開示の実施形態は、多様なデータベース管理システム(「DBMS」)タイプと併せて、用いられてもよい。DBMSは、保存および検索動作が実行されるデータの集大成を維持するデータソフトウェアおよびハードウェアシステムである。DBMSにおいて、データは、一般的に、キー値と追加データの間の関連性で編成される。関連性の本質は、データ集にある実世界の関連性に基づくか、任意であってもよい。DBMSは、データ定義、クエリ、アップデートおよび管理などを含む多様な動作を実施してもよい。Structured Query Language(「SQL」)などのクエリ言語を使って、データベースと対話を実現するDBMSもあれば、プット、ゲットなどの動作を含むAPIを用いるDBMSもある。また、データベースとの対話は、HyperText Markup Langugage(「HTML」)や、Extended Markup Language(「XML」)などの多様なプロトコルや基準に基づいてもよい。DBMSは、ソリッドステートドライブなどの1以上の記憶デバイス上でデータを保存する働きをする記憶エンジンなど、多様なアーキテクチャコンポーネントを備えてもよい。
【0083】
図8は、本発明の態様を実施し得る分散計算環境の実施例を示す図である。多様なユーザ800aは、任意のタイプの計算デバイス802aを操作して、多様なクライアントアプリケーションと対話し、データセンタ820内の多様な計算ノード810a、810bおよび810c上で実行するプロセスと、通信ネットワーク804を介して通信してもよい。また、クライアントアプリケーション802bは、ユーザの介入なしに通信してもよい。通信ネットワーク804は、インターネット、有線および無線ローカルエリアネットワーク、光ファイバネットワーク、衛星通信など、を含む通信技術の任意の組合せを備えてもよい。任意の数のネットワークプロトコルが使用されてもよい。
【0084】
データセンタ820内で動作する計算ノード810a、810bおよび810c上で実行するプロセスとの通信は、ゲートウェイ806およびルータ808を介して提供されてもよい。また、他の多くのネットワーク構成を使用してもよい。図8では明示していないが、多様な認証方法、ウェブサービスレイヤ、ビジネスオブジェクト、または他の中間レイヤを提供し、計算ノード810a、810bおよび810c上で実行するプロセスとの通信を仲介してもよい。一部の中間レイヤは計算ノードのうち1以上で実行するプロセスを自身で備え得る。また、計算ノード810a、810bおよび810c、ならびに、それらで実行するプロセスは、ルータ808を介して相互通信してもよい。或いは、個別の通信パスを用いてもよい。いくつかの実施形態において、データセンタ820を追加のデータセンタと通信するよう構成し、計算ノードおよびそれらで実行するプロセスが他のデータセンタ内で動作する計算ノードおよびプロセスと通信してもよい。
【0085】
計算ノード810aは、1以上のプロセッサ816、1以上のメモリ818、および1以上の記憶デバイス814を備えた物理ハードウェア上に常駐しているとして示されている。計算ノード810a上ではプロセスは、オペレーティングシステムと合わせて実行されるか、プロセッサ816、メモリ818、または記憶デバイス814などの物理リソースと直接対話するベアメタルプロセスとして実行されてもよい。
【0086】
計算ノード810bおよび810cは、物理プロセッサ、メモリおよび記憶デバイスなどの多様な物理リソースへの共有アクセスを提供する仮想マシンホスト812上で動作するとして示されている。任意の数の仮想方法が、計算ノードをホストするために使用されてもよい。
【0087】
図8に示す多様な計算ノードは、ウェブサービス、データベース管理システム、ビジネスオブジェクト、モニタ−診断設備などをホストするよう構成されてもよい。計算ノードは、パーソナルコンピュータ、サーバ、クラスタ計算デバイスなど、多様なタイプの計算リソースを意味してもよい。計算ノードは、例えば、携帯電話、スマートフォン、タブレット、埋め込みデバイスなど、多様な計算デバイスを意味してもよい。ハードウェア形式で実施される場合、計算ノードは一般的に、コンピュータ読取可能命令を保存するよう構成された1以上のメモリ、および、当該命令を読み出し実行するよう構成された1以上のプロセッサと関連付けられる。また、ハードウェア型計算ノードは、1以上の記憶デバイス、ネットワークインタフェース、通信バス、ユーザインタフェースデバイスなどを備えてもよい。また、計算ノードは、ハイパーバイザが有っても無くても実施される仮想マシン、仮想ベアメタル環境など、仮想計算リソースを含む。仮想型計算ノードは、ハードウェアリソースに対し非仮想アクセスだけでなく、仮想アクセスも有してもよい。計算ノードは、1以上のアプリケーションプログラムだけでなく、オペレーティングシステムも実行するよう構成されてもよい。また、いくつかの実施形態において、計算ノードは、ベアメタルアプリケーションプログラムを備えてもよい。
【0088】
少なくともいくつかの実施形態において、本明細書で記載した技術のうち1以上の一部または全てを実施するサーバは、汎用コンピュータシステムを備えてもよく、当該汎用コンピュータシステムは、1以上のコンピュータアクセス可能媒体を備えるか当該媒体にアクセスするよう構成されてもよい。図9は、1以上のコンピュータアクセス可能媒体を備えるか当該媒体にアクセスするよう構成された汎用コンピュータシステムを示す。図に示す実施形態において、計算デバイス900は、システムメモリ920に入出力(I/O)インタフェース930を介して接続された1以上のプロセッサ910a、910bおよび/または910n(本明細書では、単体のプロセッサ910または複数のプロセッサ910とされる)を備える。計算デバイス900はさらに、I/Oインタフェース930に接続されたネットワークインタフェース940を備える。
【0089】
多様な実施形態において、計算デバイス900は、1つのプロセッサ910を備えたユニプロセッサシステム、または複数のプロセッサ910(例えば、2つ、4つ、8つ、または任意の適した数)を備えたマルチプロセッサシステムであってもよい。プロセッサ910は、命令の実行が可能な適切な任意のプロセッサであってもよい。例えば、多様な実施形態において、プロセッサ910は、x86、PowerPC、SPARC、MIPS ISA、または、任意のその他適切なISAなど、任意の多様な命令セットアーキテクチャ(ISA)を実施する、汎用プロセッサまたは埋め込みプロセッサであってもよい。マルチプロセッサシステムにおいて、各プロセッサ910は、一般的に、同一のISAを実施するが、必ずしも同一でなくてもよい。
【0090】
いくつかの実施形態において、グラフィックプロセッサユニット(「GPU」)912は、グラフィックレンダリングおよび/または物理的処理能力の提供に関係してもよい。GPUは、例えば、グラフィック計算専用の高並列化プロセッサアーキテクチャを備えてもよい。いくつかの実施形態において、プロセッサ910およびGPU912を、1以上の同一のデバイスタイプとして実施してもよい。
【0091】
システムメモリ920は、プロセッサ910によりアクセス可能な命令およびデータを保存するよう構成されてもよい。多様な実施形態において、システムメモリ920は、Static Random Access Memory(「SRAM」)、Synchronous Dynamic RAM(「SDRAM」)、不揮発性/Flash(登録商標)タイプメモリ、または任意の他のタイプのメモリなど、任意の適切なメモリ技術を使って実施されてもよい。図に示した実施形態において、上記のメソッド、技術、およびデータなど、1以上の所望の機能を実行するプログラム命令およびデータは、図では、システムメモリ920内にコード925およびデータ926として保存される。
【0092】
1つの実施形態において、I/Oインタフェース930は、プロセッサ910、システムメモリ920、および、ネットワークインタフェース940または他の周辺インタフェースを含むデバイス内の任意の周辺機器との間で、I/Oトラフィックを調整するよう構成されてもよい。いくつかの実施形態において、I/Oインタフェース930は、任意の必要なプロトコル、タイミングまたはその他データ変換を実施して、1つのコンポーネント(例えば、システムメモリ920)からのデータ信号を別のコンポーネント(例えば、プロセッサ910)での使用に適したフォーマットに変換してもよい。いくつかの実施形態において、I/Oインタフェース930は、例えば、Peripheral Component Interconnect(PCI)バス基準、または、Universal Serial Bus(USB)基準の変形などの多様な周辺バスのタイプを介して取り付けられたデバイスのサポートを含んでもよい。いくつかの実施形態において、I/Oインタフェース930の機能を、例えば、ノースブリッジとサウスブリッジなど、2以上の独立したコンポーネントに振り分けてもよい。また、いくつかの実施形態において、システムメモリ920へのインタフェースなど、I/Oインタフェース930の機能のうちいくつかまたは全てを、直接プロセッサ910に組み込んでもよい。
【0093】
ネットワークインタフェース940は、例えば、他のコンピュータシステムまたはデバイスなど、あるネットワークまたはネットワーク950に接続された他のデバイスまたはデバイス960と、計算デバイス900との間で、データ交換が可能なように構成されてもよい。多様な実施形態において、ネットワークインタフェース940は、例えば、Ethernetネットワークのタイプなど、任意の適した有線または無線での一般的なデータネットワークを介して通信をサポートしてもよい。さらに、ネットワークインタフェース940は、アナログ音声ネットワークまたはデジタルファイバ通信ネットワークなどのテレコミュニケーション/電話ネットワークを介するか、Fibre Channel SAN(ストレージエリアネットワーク)などのストレージエリアネットワークを介するか、または、任意の他の適したタイプのネットワークおよび/またはプロトコルを介して通信をサポートしてもよい。
【0094】
いくつかの実施形態において、システムメモリ920は、対応するメソッドおよび装置の実施形態を実施する、上記のようなプログラム命令およびデータを記憶するよう構成された、コンピュータアクセス可能媒体の1つの実施形態であってもよい。しかし、他の実施形態において、プログラム命令および/またはデータを、様々なタイプのコンピュータアクセス可能媒体上において受信、送信、または保存してもよい。一般的には、コンピュータアクセス可能媒体は、磁気または光媒体などで、例えば、I/Oインタフェース930を介して計算デバイス900に接続されたディスク、またはDVD/CDなどの、非一時的記憶媒体またはメモリ媒体を含んでもよい。また、非一時的コンピュータアクセス可能記憶媒体は、RAM(例えば、SDRAM、DDR SDRAM、RDRAM、SRAMなど)、ROMなど、任意の揮発性または不揮発性媒体を含んでもよく、それらは、計算デバイス900のいくつかの実施形態において、システムメモリ920または別のタイプのメモリとして含まれてもよい。さらに、コンピュータアクセス可能媒体は、電気信号、電磁信号またはデジタル信号などの転送媒体または転送信号を含んでもよく、当該媒体は、ネットワークインタフェース940を介して実施され得るようなネットワークおよび/または無線リンクなどの通信媒体を介して搬送される。図9に図示するような複数の計算デバイスの一部または全てを使って、多様な実施形態において上記の機能を実施してもよく、例えば、多様なデバイスおよびサーバ上で動作する複数のソフトウェアコンポーネントが協働して機能を提供してもよい。いくつかの実施形態において、汎用コンピュータシステムの使用による実施に追加するかそれに代えて、記憶デバイス、ネットワークデバイスまたは専用コンピュータシステムを使って、上記の機能の一部を実施してもよい。本明細書で使用するように、「計算デバイス」という用語は、少なくともこれら全てのデバイスのタイプを意味し、これらのデバイスのタイプに限定されない。
【0095】
計算ノードは、コンピュートノードとも呼ばれ、タブレットコンピュータ、パーソナルコンピュータ、スマートフォン、ゲーム機、コモディティハードウェアコンピュータ、仮想マシン、ウェブサービス、計算クラスタ、およびコンピューティングアプライアンスなど、幅広い計算環境で実施されてもよい。これらの計算デバイスまたは環境のいずれも、便宜上、計算ノードまたはコンピュートノードと記述してもよい。
【0096】
企業または公共組織などエンティティにより設置されたネットワークは、インターネットおよび/または他のネットワークを介してクライアント分散セットにアクセス可能な1以上のウェブサービス(多様なタイプのクラウドベースコンピューティングまたはストレージなど)を提供しており、プロバイダネットワークと呼ばれる場合がある。そういったプロバイダネットワークは、プロバイダネットワークが提供するインフラストラクチャおよびウェブサービスを実施し分散するのに必要な、物理的および/または仮想コンピュータサーバ、記憶デバイス、ネットワーク装置などの集合など、多様なリソースプールをホストする多数のデータセンタを備えてもよい。リソースは、いくつかの実施形態において、記憶用の記憶容量、処理用処理能力、インスタンス、関連サービスセットなど、ウェブサービスに関連する多様なユニット内でクライアントに提供してもよい。仮想計算インスタンスは、例えば、所定の計算能力(CPUのタイプおよび番号、メインメモリサイズなどを示すことにより指定してもよい)および所定のソフトウェアスタック(例えば、オペレーティングシステムの特定バージョンで、ハイパーバイザの上部で代わって動作してもよい)を備えた1以上のサーバを備えてもよい。
【0097】
多数の多様な計算デバイスを単独または組み合わせて使用して、多様な実施形態において、汎用または専用コンピュータサーバ、記憶デバイス、ネットワークデバイスなどを含む、プロバイダネットワークのリソースを実施してもよい。いくつかの実施形態において、例えば、管理者ログインおよびパスワードをユーザに与えることによって、クライアントまたはユーザにリソースインスタンスへのダイレクトアクセスを提供してもよい。他の実施形態において、プロバイダネットワークのオペレータは、クライアントが所定のクライアントアプリケーションに対する実行要件を指定できるようにし、また、アプリケーションに適した実行プラットフォーム(アプリケーションサーバインスタンス、Java(商標)仮想マシン(JVM)、汎用もしくは専用オペレーティングシステム、または、Ruby、Perl、PythonおよびC,C++など解釈されコンパイルされた多様なプログラミング言語をサポートするプラットフォーム、または、高性能計算プラットフォーム)上で、例えば、クライアントがインスタンスまたは実行プラットフォームに直接アクセスすることなく、クライアントに代わってアプリケーションの実行をスケジュールできるようにしてもよい。提供された1つの実行プラットフォームは、いくつかの実施態様において1以上のリソースインスタンスを用いるが、他の実施態様において複数の実行プラットフォームを単一リソースインスタンスにマッピングしてもよい。
【0098】
多くの環境において、異なるタイプの仮想計算機能、記憶機能および/または他のネットワークアクセス可能機能を実施するプロバイダネットワークのオペレータは、カスタマが多様なリソース取得モードでリソースへのアクセス権を確保または購入できるようにしてもよい。計算リソースプロバイダは設備を提供し、カスタマが所望の計算リソースを選択起動し、計算リソースにアプリケーションコンポーネントを配置し、環境で実行するアプリケーションを維持できるようにしてもよい。また、計算リソースプロバイダはさらに設備を提供し、カスタマが迅速かつ簡単に、アプリケーションに割り当てられたリソース数およびタイプを、アプリケーション変更の必要性に応じまたは必要容量に応じて手動または自動スケーリングで、拡張または縮小できるようにしてもよい。計算リソースプロバイダが提供する計算リソースは、インスタンスと呼ばれる個別のユニットごとに利用可能にしてもよい。インスタンスは、物理サーバハードウェアプラットフォーム、サーバ上で実行される仮想マシンインスタンス、またはこの2つの組合せを表してもよい。利用可能なインスタンスには、多様なタイプおよび構成のインスタンスがあってよく、多様なインストール済ソフトウェアアプリケーション、ランタイムなどを有した、異なるオペレーティングシステムおよび/またはハイパーバイザを実行する異なるサイズのリソースを含む。インスタンスを、さらに、例えば、基盤となる計算ハードウェアの、論理領域、フォルトトレラント領域、データセンタまたは他の地理的位置を表した所定の可用ゾーンで利用可能にしてもよい。1つの可用ゾーン内でまたは複数の可用ゾーンの全域でコピーを作成してインスタンスの冗長性を向上させ、インスタンスを1つの特定の可用ゾーン内または複数の可用ゾーンの全域で移動させてもよい。一実施例として、ある可用ゾーンでの特定サーバとのクライアント通信のレイテンシは、別のサーバとのクライアント通信のレイテンシ未満である場合がある。この場合、インスタンスを高レンテンシサーバから低レイテンシサーバに移動させ、全体的なクライアントの体験を向上させてもよい。
【0099】
いくつかの実施形態において、プロバイダネットワークを複数の地理的領域に組織し、各領域は1以上の可用ゾーンを備えてもよい。代わりに可用ゾーン(可用コンテナと呼ばれることもある)が、所定の可用ゾーンのリソースを他の可用ゾーンでの故障から切り離すか隔離するよう構成された、1以上の明確な位置またはデータセンタを備えてもよい。つまり、1つの可用ゾーンでの故障が任意の他の可用ゾーンでの故障に繋がらないようしてもよい。このため、リソースインスタンスの可用性プロファイルが、別の可用ゾーンにおけるリソースインスタンスの可用性プロファイルとは無関係となるようにする。クライアントは、それぞれの可用ゾーンにおいて複数のアプリケーションインスタンスを起動して、1カ所の故障から自身のアプリケーションを守ることができてもよい。同時に、いくつかの実施態様において、安価で低レイテンシであるネットワーク接続を、同一の地理的領域にあるリソースインスタンス間に提供してもよい(同一可用ゾーンのリソース間でのネットワーク転送であればより速い)。
【0100】
前項までに説明した各プロセス、メソッドおよびアルゴリズムを、1以上のコンピュータまたはコンピュータプロセッサにより実行されるコードモジュールに具現化し、当該コードモジュールにより全てまたは一部を自動化してもよい。コードモジュールを、ハードドライブ、ソリッドステートメモリ、および/または光ディスクなど、任意のタイプの非一時的コンピュータ読取可能媒体またはコンピュータ記憶装置に、保存してもよい。プロセスおよびアルゴリズムを、特定用途向け回路で部分的にまたは全体を実施してもよい。本開示のプロセスおよびプロセスステップの結果を、例えば、揮発性または非揮発性ストレージなど任意のタイプの非一時的コンピュータストレージに永久的に或いはそうでなくても保存してもよい。
【0101】
上記の多様な機能およびプロセスを互いに無関係に用いるか、多様な方法に組合せてもよい。あらゆる可能な組合せおよびサブコンビネーションは本開示の範囲に該当するものである。さらに、いくつかの実施態様において、所定のメソッドまたはプロセスブロックを除いてもよい。また、本明細書で説明したメソッドおよびプロセスは、任意の特定のシーケンスに限定されるものではなく、メソッドおよびプロセスに関連するブロックまたはステートを、適切な他のシーケンスで実施することも可能である。例えば、説明したブロックまたはステートを、明確に開示した方法とは違う順序で実施してもよく、複数のブロックまたはステートを1つのブロックまたはステートに組み合わせてもよい。例示的なブロックまたはステートを、逐次、並行にまたは他の方法で実施してもよい。ブロックまたはステートを本開示の例示的な実施形態に追加、または当該実施形態から外してもよい。本開示の例示的なシステムおよびコンポーネントは、本開示内容とは違って構成されてもよい。例えば、要素を本開示の例示的な実施形態に追加し、当該実施形態から外し、または当該実施形態と比較して再配置してもよい。
【0102】
使用の際に多様なアイテムをメモリにまたはストレージ上に保存するよう示しているが、これらのアイテムまたはその一部を、メモリ管理およびデータ保全のため、メモリと他の記憶デバイスとの間で移動させてもよいことも、理解されよう。或いは、他の実施形態において、ソフトウェアモジュールおよび/またはシステムのいくつかまたは全ては、別のデバイスのメモリで実行され、コンピュータ間通信を介して、示した計算システムと通信してもよい。さらに、いくつかの実施例において、システムおよび/またはモジュールのいくつかまたは全てを、少なくとも部分的にファームウェアおよび/またはハードウェアなど(例えば、1以上の特定用途向け集積回路(ASIC)、標準的な集積回路、制御装置(例えば、マイクロコントローラおよび/または埋め込み型制御装置などを含み、適切な命令を実行することによる)、フィールドプログラマブルゲートアレイ(FPGA)、コンプレックスプログラマブルロジックデバイス(CPLD)などを含むが、これらに限定されない)において、他の方法で実施または提供してもよい。また、モジュール、システムおよびデータ構造のいくつかまたは全てを、適切なデバイスに読み出されるか適切な接続を介して読み出されるハードディスク、メモリ、ネットワークまたはポータブルメディアなど、コンピュータ読取可能媒体に(例えば、ソフトウェア命令または構造化データとして)保存されてもよい。また、システム、モジュールおよびデータ構造は、無線式媒体および有線/ケーブル式媒体を含む多様なコンピュータ読取可能転送媒体上で生成されたデータ信号として(例えば、搬送波の一部、または他のアナログもしくはデジタル伝播信号として)転送されてもよく、多様な形式であってもよい(例えば、単一もしくは多重化アナログ信号の一部として、または、複数の個別デジタルパケットもしくはフレームとして)。また、そういったコンピュータプログラム製品は、他の実施形態において他の形式をとってもよい。従って、本発明を他のコンピュータシステム構成で実施してもよい。
【0103】
特に「can」、「could」、「might」、「may」、「e.g.」など本明細書で使用する条件語は、明確に指定しない限り、または、使用される文脈で理解される場合を除き、他の実施形態では含まないこともあるが、所定の実施形態では所定の機能、要素および/またはステップを含むことを一般的に伝えるものとする。このため、このような条件語は、機能、要素および/またはステップが1以上の実施形態において何らかの形で要求されると一般的に示すものではなく、また、これらの機能、要素および/またはステップが含まれるかどうか、もしくは任意の特定の実施形態において実施されるかどうかを、オーサの入力または催促があろうとなかろうと、判断する際のロジックを、1以上の実施形態が必ず備えると一般的に示すものでもない。「comprising」、「including」、「having」などの用語は、同じ意味であり、包含的で非限定的に使用されるものであり、追加的な要素、機能、作動、動作などを除外しない。また、「or」という用語を含むという意味で使用し(排他的な意味ではない)、例えば、要素のリストをつなげるのに使用される場合、「or」という用語は、リストの中に1つ、いくつか、または全ての要素を意味する。
【0104】
所定の例示的な実施形態を説明してきたが、これらの実施形態は単に例として提示しており、本開示の発明の範囲を限定する意図は無い。このため、これまでの説明において、任意の特定の機能、特性、ステップ、モジュールまたはブロックが必要でもなく、必要不可欠でもないのを示すことを意図しない。実際、本明細書で説明した新規性のあるメソッドおよびシステムを、多様な他の形式で具現化してもよく、さらに、開示した本発明の精神から逸脱する事無く、本明細書で説明したメソッドおよびシステムの形式に様々な省略、代替、および変更を行ってもよい。添付の請求項および同等内容は、本明細書に開示された発明の所定の範囲および意図に該当するためにそういった形式または変形を含むものとする。
【0105】
本開示の実施形態は、以下の条項を考慮しても説明可能である。
1.計算デバイスは、
前記計算デバイスを遠隔計算ノードに通信可能に接続するネットワークインタフェース、および
コンピュータ読取可能命令を記憶した1以上のメモリを備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記計算デバイスは少なくとも、
前記計算デバイス上で、第一機能を含む複数の機能を備えるアプリケーションプログラムの実行を開始し、前記アプリケーションプログラムの第一コピーは、前記計算デバイスに保存され、前記アプリケーションプログラムの第二コピーは前記遠隔計算ノードに保存され、
前記遠隔計算ノード上で実行する前記複数の機能のうち前記第一機能を選択し、前記選択は、前記遠隔計算ノード上で前記第一機能を実行する優先度が前記遠隔計算ノード上で前記複数の機能のうち第二機能を実行する第二優先度より高いことを示す情報に少なくとも部分的に基づき、また、前記第一機能を実行する前記計算デバイスの能力または環境を示す情報に少なくとも部分的に基づき、および、
前記遠隔計算ノードから、前記遠隔計算ノード上での前記第一機能の実行結果を示す情報を受信することを含む、前記計算デバイス。
【0106】
2.コンピュータ読取可能命令を記憶した1以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記計算デバイスは少なくとも、
前記遠隔計算ノード上で前記第一機能を実行する前記優先度を、前記計算デバイスの前記能力を示す前記情報に少なくとも部分的に基づき再計算し、および、
前記遠隔計算ノード上で前記第一機能を実行する前記再計算済優先度に少なくとも部分的に基づき、前記遠隔計算ノード上で前記アプリケーションプログラムの第二機能を実行するよう判断する、条項1に記載の計算デバイス。
【0107】
3.コンピュータ読取可能命令を記憶した1以上のメモリをさらに備え、前記1以上の計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記計算デバイスは少なくとも、
前記第一機能を実行する前記遠隔計算ノードの能力を示す情報に少なくとも部分的に基づき、前記計算デバイス上で前記第一機能を実行するよう判断する、条項1に記載の計算デバイス。
【0108】
4.前記計算デバイスから離れた前記計算ノード上で前記第一機能を実行する優先度を示す前記情報は、前記第一機能のハードウェアデバイスの依存関係に少なくとも部分的に基づく、条項1に記載の計算デバイス。
【0109】
5.方法では、
第一計算ノード上で、第一機能を含む複数の機能を備えるプログラムの実行を開始し、
前記第一計算ノードから離れた第二計算ノード上での前記第一機能の実行を示す情報を処理し、前記情報は、前記第一計算ノードに代わり前記第二計算ノード上で前記第一機能を実行する優先度を示し、前記優先度は、前記第二計算ノード上で前記複数の機能のうち他の機能を実行する前記優先度に比較され、
前記第二計算ノード上で前記第一機能を実行するよう判断し、前記判断は、前記第二計算ノード上で前記第一機能を実行する優先度を示す前記情報に少なくとも部分的に基づき、また、前記第一機能を実行する前記第一計算ノードの能力を示す情報に少なくとも部分的に基づき、
前記第一機能を前記第二計算ノード上で実行させ、
前記第一機能を実行する前記第二計算ノードの前記能力を示す追加情報の受信に少なくとも部分的に基づき、前記第一計算ノード上で前記第一機能を実行するよう判断し、および
前記第一機能を前記第一計算ノード上で実行させることを含む、前記方法。
【0110】
6.前記第一計算ノードの性能特性のモニタリングに少なくとも部分的に基づき、前記第二計算ノード上で前記プログラムの第二機能を実行するようさらに判断することをさらに含む、条項5に記載の方法。
【0111】
7.前記第二計算ノード上での前記第一機能の実行を示す前記情報は、前記第一機能のステート特性を示す値を備える、条項5に記載の方法。
【0112】
8.前記第二計算ノード上での前記第一機能の実行を示す前記情報は、前記第一機能のデバイスの依存関係を示す値を備える、条項5に記載の方法。
【0113】
9.前記第二計算ノード上での前記第一機能の実行を示す前記情報は、前記第一機能が前記第二計算ノード上での実行候補であるとの開発者による示唆に対応する、条項5に記載の方法。
【0114】
10.前記第一計算ノードに保持されるメンバデータの第一コピーを、前記第二計算ノードに保持される前記メンバデータの第二コピーとさらに同期させ、前記メンバデータは前記第一機能の実行時に参照される、条項5に記載の方法。
【0115】

11.前記追加情報は、少なくとも1つの前記第二計算ノードまたは前記第一計算ノードと前記第二計算ノードとの接続の、性能特性に対する変更に対応する、条項5に記載の方法。
【0116】
12.前記第二計算ノード上での前記第一機能の実行する優先度を示す前記情報は、少なくとも1つの前記第一計算ノードの性能、前記第二計算ノードの性能、および、ネットワーク性能の、少なくとも一部に基づき計算された値である、条項5に記載の方法。
【0117】
13.前記第二計算ノード上で前記第一機能を実行する優先度を示す前記情報は、前記プログラムの少なくとも1つの発行者またはユーザに対する費用に少なくとも部分的に基づき計算された値であり、前記費用は、前記第一機能の実行に使用可能な計算リソースに少なくとも部分的に基づく、条項5に記載の方法。
【0118】
14.命令を記憶した非一時的コンピュータ読取可能記憶媒体において、1以上の計算デバイスによる実行時、前記命令により前記1以上の計算デバイスは少なくとも、
複数の機能を備えるプログラムの第一機能に対応する情報を処理し、前記プログラムは第一計算ノード上で実行し、前記情報は第二計算ノード上での前記第一機能の実行の適否を示し、
前記第一機能を実行する前記第一計算ノードの能力を判断し、
前記第二計算ノード上で前記第一機能を実行するよう判断し、前記判断は、前記第一機能が前記第二計算ノード上で実行されてもよいことを示し、前記第一機能を実行する前記第一計算ノードの前記能力を示す前記情報に少なくとも部分的に基づき、および、
前記第一計算ノード上で動作する第二機能から前記第二計算ノード上で動作する前記第一機能への前記プログラムのステート情報の転送に少なくとも部分的に基づき、前記第一機能を前記第二計算ノード上で実行させる、前記非一時的コンピュータ読取可能記憶媒体。
【0119】
15.命令をさらに備え、前記1以上の計算デバイスによる実行時、前記命令により前記1以上の計算デバイスは少なくとも、
前記第一機能のパラメータに対応するデータを前記第一計算ノードから前記第二計算ノードに転送させ、および、
前記第一機能の実行結果に対応するデータを前記第二計算ノードから前記第一計算ノードに転送させる、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0120】
16.命令をさらに備え、前記1以上の計算デバイスによる実行時、前記命令により前記1以上の計算デバイスは少なくとも、
前記第一機能を実行する前記第一計算ノードの前記能力と前記第一機能を実行する前記第二計算ノードの能力との比較に少なくとも部分的に基づき、前記第一機能を前記第一計算ノード上で実行させる、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0121】
17.命令をさらに備え、前記1以上の計算デバイスによる実行時、前記命令により前記1以上の計算デバイスは少なくとも、
前記第一計算ノードで保持されるメンバデータの第一コピーを前記第二計算ノードで保持される前記メンバデータの第二コピーと同期し、前記メンバデータは前記第一機能の実行時参照される、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0122】
18.命令をさらに備え、前記1以上の計算デバイスによる実行時、前記命令により前記1以上の計算デバイスは少なくとも、
前記第一計算ノードの性能特性のモニタリングに少なくとも部分的に基づき、前記第二計算ノード上で前記プログラムの追加機能を実行するよう判断する、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0123】
19.前記第二計算ノード上で前記第一機能を実行する適否は、少なくとも1つのアノテーションまたは属性に少なくとも部分的に基づく、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0124】
20.前記第二計算ノードは、前記第一計算ノードの実行環境に対応する仮想マシンを備える、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0125】
21.方法では、
第一機能を備えたプログラムを実行する第一計算ノードから、前記第一計算ノードから離れた第二計算ノードへの移行候補である前記第一機能を示す情報を処理し、前記第一機能の移行では前記第二計算ノード上で前記第一機能を実行し、
前記第一機能の依存関係を解析し、依存関係の解析では、前記第一機能により呼び出される追加方法を識別し、前記第一機能および前記追加方法により使用されるデータを識別し、前記第一機能および前記追加方法により使用されるハードウェアを識別し、
前記第一機能を前記第一計算ノードから前記第二計算ノードに移行する優先度を示す値を生成し、および、
前記値と前記第一機能の間の関連付けを保存することを含む、前記方法。
【0126】
また、本開示の実施形態は、以下の条項を考慮しても説明可能である。
1.システムは、
クライアントデバイスに通信可能に接続された第一計算ノード、および
コンピュータ読取可能命令を記憶した1以上のメモリを備え、計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記計算デバイスは少なくとも、
仮想マシンインスタンスにアクセス可能な記憶デバイスにアプリケーションプログラムのコピーを保存し、前記アプリケーションプログラムの前記コピーはクライアントデバイス上で実行可能な前記アプリケーションプログラムのインスタンスに対応し、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの第一部を実行するよう判断し、前記判断では、前記第一計算ノードの第一性能特性と前記クライアントデバイスの第二性能特性との比較に少なくとも部分的に基づき、前記アプリケーションプログラムの前記第一部は、他の部分と比較した、前記仮想マシンインスタンス上で実行する前記第一部の適否に少なくとも部分的に基づき、前記アプリケーションプログラムの複数の部分から選択され、
前記アプリケーションプログラムの前記第一コピーに少なくとも部分的に基づき、前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部を実行し、および、
前記アプリケーションプログラムの前記第一部の実行結果を、前記アプリケーションプログラムの第二部による処理のため前記クライアントデバイスに転送することを含む、前記システム。
【0127】
2.コンピュータ読取可能命令を記憶した1以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記システムは少なくとも、
前記クライアントデバイスの動作特性が前記仮想マシンインスタンスの動作特性と同等であるとの判断に少なくとも部分的に基づき、前記仮想マシンインスタンスを選択する、条項1に記載のシステム。
【0128】
3.コンピュータ読取可能命令を記憶した1以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記システムは少なくとも、
前記アプリケーションプログラムがクライアントデバイスにダウンロードされた回数に少なくとも部分的に基づき、インスタンス化された前記仮想マシンを確保する、条項1に記載のシステム。
【0129】
4.コンピュータ読取可能命令を記憶した1以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記システムは少なくとも、
前記第二性能特性を有するクライアントデバイスの予期数に少なくとも部分的に基づき、前記仮想マシンを確保する、条項1に記載のシステム。
【0130】
5.コンピュータ読取可能命令を記憶した1以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記システムは少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの第三部を実行する費用に少なくとも部分的に基づき、前記クライアントデバイス上で前記アプリケーションプログラムの前記第三部を実行するよう判断する、条項1に記載のシステム。
【0131】
6.コンピュータ読取可能命令を記憶した1以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記システムは少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部の実行を、前記アプリケーションプログラムの前記第一部を実行する費用に少なくとも部分的に基づき、停止するよう判断する、条項1に記載のシステム。
【0132】
7.アプリケーションプログラムを実行するコンピュータ実施方法では、
コンピュータにより、仮想マシンインスタンス上でアプリケーションプログラムの第一部を実行するよう判断し、前記アプリケーションプログラムのインスタンスは、また、クライアントデバイス上で実行しており、前記判断では、前記クライアントデバイスの第一特性と前記仮想マシンインスタンスの第二特性との比較に少なくとも部分的に基づき、前記アプリケーションプログラムの前記第一部は、前記アプリケーションプログラムの複数の部分から、前記コンピュータにより選択され、
前記アプリケーションプログラムの第一コピーに少なくとも部分的に基づき、前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部を実行し、および、
前記クライアントデバイス上で実行する前記アプリケーションプログラムの第二部により処理される前記アプリケーションプログラムの前記第一部の実行結果を返す、前記コンピュータ実施方法。
【0133】
8.前記クライアントデバイスの特性と前記仮想マシンインスタンスの特性とのマッチングに少なくとも部分的に基づき、前記仮想マシンインスタンスを選択することをさらに含む、条項7に記載のコンピュータ実施方法。
【0134】
9.前記クライアントデバイスにダウンロードされる前記アプリケーションプログラムの前記第一コピーに少なくとも部分的に基づきインスタンス化された前記仮想マシンを確保することをさらに含む、条項7に記載のコンピュータ実施方法。
【0135】
10.前記クライアントデバイスの前記第一特性を有するクライアントデバイスの割合に少なくとも部分的に基づき、前記仮想マシンインスタンスを確保することをさらに含む、条項9に記載のコンピュータ実施方法。
【0136】
11.前記仮想マシンインスタンス上で前記アプリケーションプログラムの第三部を実行する費用に少なくとも部分的に基づき、前記クライアントデバイス上で前記アプリケーションプログラムの前記第三部を実行するよう判断することをさらに含む、条項7に記載のコンピュータ実施方法。
【0137】
12.前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部の実行を、前記アプリケーションプログラムの前記第一部を実行する費用に少なくとも部分的に基づき、停止するよう判断することをさらに含む、条項7に記載のコンピュータ実施方法。
【0138】
13.前記仮想マシンインスタンスは物理計算デバイスをシミュレーションする、条項7に記載のコンピュータ実施方法。
【0139】
14.命令を記憶した非一時的コンピュータ読取可能記憶媒体において、計算デバイスによる実行時、前記命令により前記計算デバイスは少なくとも、
第一計算ノードに仮想マシンインスタンスを実行させ、
前記第一計算ノードから離れた第二計算ノード上でのアプリケーションプログラムの実行を示す情報を受信し、前記アプリケーションプログラムは第一部および第二部を備え、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部を実行するよう判断し、前記判断は、前記第一計算ノードの第一特性と前記第二計算ノードの第二特性との比較に少なくとも部分的に基づき、前記第一部は、前記アプリケーションプログラムの他部分に比較した、前記仮想マシンインスタンス上で実行する前記第一部の適否に少なくとも部分的に基づき、前記アプリケーションプログラムの複数部分から選択され、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部を実行し、および、
前記アプリケーションプログラムの前記第一部の実行結果を、前記アプリケーションプログラムの前記第二部による処理のため前記第二計算ノードに転送する、前記非一時的コンピュータ読取可能記憶媒体。
【0140】
15.前記仮想マシンインスタンスは、中間言語命令を実行するよう動作可能である、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0141】
16.命令をさらに備え、前記1以上の計算デバイスによる実行時、前記命令により前記1以上の計算デバイスは少なくとも、
前記第二計算ノードの特性と前記仮想マシンインスタンスの特性とのマッチングに少なくとも部分的に基づき、前記仮想マシンインスタンスを選択する、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0142】
17.命令をさらに備え、前記1以上の計算デバイスによる実行時、前記命令により前記1以上の計算デバイスは少なくとも、
前記第二計算ノードにダウンロードされる前記アプリケーションプログラムのコピーに少なくとも部分的に基づきインスタンス化された前記仮想マシンを確保する、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0143】
18.命令をさらに備え、前記1以上の計算デバイスによる実行時、前記命令により前記1以上の計算デバイスは少なくとも、
前記第二計算ノードの前記第二特性を有する計算ノードの割合に少なくとも部分的に基づき、前記仮想マシンインスタンスを確保する、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0144】
19.命令をさらに備え、前記1以上の計算デバイスによる実行時、前記命令により前記1以上の計算デバイスは少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの第三部を実行する費用に少なくとも部分的に基づき、前記第二計算ノード上で前記アプリケーションプログラムの前記第三部を実行するよう判断する、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0145】
20.命令をさらに備え、前記1以上の計算デバイスによる実行時、前記命令により前記1以上の計算デバイスは少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部の実行を、前記アプリケーションプログラムの前記第一部を実行する費用に少なくとも部分的に基づき、停止するよう判断する、条項14に記載の非一時的コンピュータ読取可能記憶媒体。
【0146】
21.前記仮想マシンインスタンスは、物理計算デバイスをシミュレーションする、条項14に記載のコンピュータ読取可能媒体。
図1A
図1B
図2
図3
図4
図5
図6
図7
図8
図9