(57)【特許請求の範囲】
【請求項１】
仮想マシンインスタンスを実行する第一計算ノードであって、クライアントデバイスに通信可能に接続された第一計算ノードと、
前記クライアントデバイスおよび前記第一計算ノードに通信可能に接続された計算デバイスと、
前記第一計算ノード内のコンピュータ読取可能命令を記憶した１以上のメモリと、
を備えるシステムにおいて、
前記コンピュータ読取可能命令は、前記計算デバイスによる実行時に、前記計算デバイスに、少なくとも、
前記仮想マシンインスタンスにアクセス可能な記憶デバイスにアプリケーションプログラムのアプリケーションプログラムファイルの第一コピーを保存させ、
前記仮想マシンインスタンス上で前記アプリケーションプログラムファイルの第一部を実行するよう判断させ、前記判断は、前記第一計算ノードの第一性能特性と前記クライアントデバイスの第二性能特性との比較に少なくとも部分的に基づき、前記アプリケーションプログラムファイルの前記第一部は、前記アプリケーションプログラムファイルの他の部分に対して、前記仮想マシンインスタンス上で実行する前記第一部の適否に少なくとも部分的に基づき、前記アプリケーションプログラムファイルの複数の部分から選択され、
前記アプリケーションプログラムファイルの前記第一コピーに少なくとも部分的に基づき、前記仮想マシンインスタンス上で前記アプリケーションプログラムファイルの前記第一部を実行させ、前記クライアントデバイスに保存された前記アプリケーションプログラムファイルの第二コピーに少なくとも部分的に基づき、前記クライアントデバイス上で前記アプリケーションプログラムのインスタンスを実行させ、
前記アプリケーションプログラムファイルの前記第一部の実行結果を、前記クライアントデバイス上で実行する前記アプリケーションプログラムの前記インスタンスによる処理のために前記クライアントデバイスに転送させる、
システム。
【請求項２】
前記１以上のメモリは、さらなるコンピュータ読取可能命令を記憶しており、前記さらなるコンピュータ読取可能命令は、前記計算デバイスによる実行時に、前記システムに、少なくとも、
前記クライアントデバイスの前記第二性能特性を有するクライアントデバイスの割合に少なくとも部分的に基づき、前記仮想マシンインスタンスを確保させる、
請求項１に記載のシステム。
【請求項３】
前記１以上のメモリは、さらなるコンピュータ読取可能命令を記憶しており、前記さらなるコンピュータ読取可能命令は、前記計算デバイスによる実行時に、前記システムに、少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの第三部を実行する費用に少なくとも部分的に基づき、前記クライアントデバイス上で前記アプリケーションプログラムの前記第三部を実行するよう判断させる、
請求項１に記載のシステム。
【請求項４】
前記１以上のメモリは、さらなるコンピュータ読取可能命令を記憶しており、前記さらなるコンピュータ読取可能命令は、前記計算デバイスによる実行時に、前記システムに、少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部の実行を、前記アプリケーションプログラムの前記第一部を実行する費用に少なくとも部分的に基づき、停止するよう判断させる、
請求項１に記載のシステム。
【請求項５】
アプリケーションプログラムを実行するコンピュータ実施方法であって、
仮想マシンインスタンスを実行する第一計算ノードであって、クライアントデバイスに通信可能に接続された第一計算ノードにより、前記仮想マシンインスタンス上でアプリケーションプログラムファイルの第一部を実行するよう判断し、前記アプリケーションプログラムファイルに対応するアプリケーションプログラムのインスタンスは、前記クライアントデバイス上で実行しており、前記判断は、前記クライアントデバイスの第一特性と前記仮想マシンインスタンスの第二特性との比較に少なくとも部分的に基づき、前記アプリケーションプログラムファイルの前記第一部は、前記アプリケーションプログラムファイルの複数の部分から、前記第一計算ノードにより選択され、
前記仮想マシンインスタンスにアクセス可能な記憶デバイスに保存された前記アプリケーションプログラムファイルの第一コピーに少なくとも部分的に基づき、前記仮想マシンインスタンス上で前記アプリケーションプログラムファイルの前記第一部を実行し、
前記アプリケーションプログラムファイルの前記第一部の実行結果を、前記クライアントデバイス上で実行する前記アプリケーションプログラムファイルの第二部による処理のために前記クライアントデバイスに返し、前記クライアントデバイス上で実行する前記アプリケーションプログラムファイルの前記第二部は、前記クライアントデバイスに保存された前記アプリケーションプログラムファイルの第二コピーに少なくとも部分的に基づく、
コンピュータ実施方法。
【請求項６】
前記クライアントデバイスの特性と前記仮想マシンインスタンスの特性とのマッチングに少なくとも部分的に基づき、前記仮想マシンインスタンスを選択することをさらに含む、
請求項５に記載のコンピュータ実施方法。
【請求項７】
前記クライアントデバイスにダウンロードされる前記アプリケーションプログラムの前記第一コピーに少なくとも部分的に基づき、前記仮想マシンインスタンスを確保することをさらに含む、
請求項５に記載のコンピュータ実施方法。
【請求項８】
前記クライアントデバイスの前記第一特性を有するクライアントデバイスの割合に少なくとも部分的に基づき、前記仮想マシンインスタンスを確保することをさらに含む、
請求項７に記載のコンピュータ実施方法。
【請求項９】
前記仮想マシンインスタンス上で前記アプリケーションプログラムの第三部を実行する費用に少なくとも部分的に基づき、前記クライアントデバイス上で前記アプリケーションプログラムの前記第三部を実行するよう判断することをさらに含む、
請求項５に記載のコンピュータ実施方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１４年６月１６日に出願され「ＭＯＢＩＬＥ  ＡＮＤ  ＲＥＭＯＴＥ  ＲＵＮＴＩＭＥ  ＩＮＴＥＧＲＡＴＩＯＮ」と題された米国特許出願第１４／３０６，１７３号（代理人整理番号１０１０５８．０００２０６）、および、２０１４年６月１６日に出願され「ＭＯＢＩＬＥ  ＡＮＤ  ＲＥＭＯＴＥ  ＲＵＮＴＩＭＥ  ＩＮＴＥＧＲＡＴＩＯＮ」と題された米国特許出願第１４／３０６，１６８号（代理人整理番号１０１０５８．０００１７１）の利益を主張し、その開示内容の全体を参照により本明細書に組み込む。
【背景技術】
【０００２】
クライアントデバイスと遠隔配置された計算リソースとの間の従来の負荷分散方法は、クライアントデバイス上で実行するプログラムと遠隔計算設備が提供するサービスとの間における定義されたインタフェースに依存してもよい。クライアント上で実行するプログラムは、例えば、事前に定義されたウェブサービスセットの多様なメソッドに対するコールを呼び出す命令を含むよう設計されてもよい。同様に、ウェブサービスは、クライアントデバイスによる実施ではなく、遠隔計算設備で動作するサービスによる実施が最適であると、設計時に見なされた特定の機能セットを提供するよう設計されてもよい。換言すれば、クライアントデバイスで実行するプログラムと遠隔計算リソースでの境界は設計時に設定される。当該境界を、クライアントデバイスの能力、および、遠隔計算リソースの可用性など、様々な仮定に基づき設定してもよい。しかしながら、これらの仮定は経時的に変更してもよい。
【０００３】
以下の説明は、添付図と合わせれば理解が深まるであろう。例として、本開示の態様の多様な実施例を図示しているが、本発明は、開示した特定の方法および手段に限定されない。
【図面の簡単な説明】
【０００４】
【図１Ａ】遠隔計算設備を活用するアプリケーションの開発用統一パラダイムを使って開発されたプログラムの分散実行を実施するシステムの実施例である。
【図１Ｂ】アプリケーション発行者に代わり、アプリケーションプログラムにクラウドベースの計算リソースを割り当てる実施形態を示すブロック図である。
【図２】コンパイル前のアプリケーションプロラムを示すブロック図であり、アプリケーションプログラムの少なくとも１つのクラスまたはメソッドにアノテーションを付け移行の可能性を示している。
【図３】クラスまたはメソッドの移行適否を判断するための、クラスまたはメソッドにおける依存関係静的解析の実施プロセスを示す図である。
【図４】実行プログラムのクラスまたはメソッドのモニタリングおよび移行、ならびに、ステートレスメソッドおよびステートフルメソッドの呼出しを示す図である。
【図５】アプリケーションプログラムのセグメントの移行適否を判断するアプリケーションプログラムの静的解析を示すフローチャートである。
【図６】付されたスコア、および、アプリケーションプログラムの実行をモニタリングしそれに基づき調整されたスコアに基づいて、移行するクラスまたはメソッドを選択する実施形態を示すフローチャートである。
【図７】分散アプリケーションにおけるオブジェクトのオブジェクトバージョントラッキングおよびコミットモデルを示すフローチャートである。
【図８】本開示の態様を実施し得る計算環境の実施形態を示すブロック図である。
【図９】本開示の態様を実施し得る計算システムの実施形態を示すブロック図である。
【発明を実施するための形態】
【０００５】
様々な形式の携帯電話、タブレット、ゲーム機、パーソナルコンピュータ、およびその他コンシューマ向け計算デバイスなどがあり、計算能力が高い場合がある。しかし、これらデバイスのいずれの能力も、デバイス内蔵ハードウェアにより制限される。開発者は、能力が最小のデバイスタイプに合わせたアプリケーションプログラムを書いてもよい。しかしながら、この方法では、アプリケーションプログラムの能力が制限され、デバイスの能力が十分に活用されない。また、開発者は、アプリケーションプログラムを実行するデバイスの能力まで拡張させるアプリケーションプログラムを書いてもよい。この方法によってデバイスのハードウェアをより活用してもよいが、アプリケーションプログラムの開発がより複雑になり、開発費用が増大する場合がある。
【０００６】
別の方法では、クラウドコンピューティングとも呼ばれる遠隔計算設備などの調整可能な計算リソースを伴ってもよい。遠隔計算設備は、前項に記載の携帯電話、タブレット、ゲーム機、パーソナルコンピュータを含み得る、クライアントデバイスに活用され得る複数の計算リソースを含んでもよい。遠隔計算設備との対話には、様々な方法が用いられてきた。例えば、リモートプロシージャコール、ウェブサービス、Ｒｅｐｒｅｓｅｎｔａｔｉｏｎａｌ  Ｓｔａｔｅ  Ｔｒａｎｓｆｅｒ（「ＲＥＳＴ」）プロトコルなどがある。これらの方法では全て、開発者側の何らかの明確な判断を必要とし、アプリケーションの機能の特定の態様を遠隔計算デバイスで実施させるべきかを判断する。従って、これらの方法では、クライアントデバイスによる能力を超える能力を持ったアプリケーションプログラムを提供する場合があるが、遠隔計算設備の活用程度は、もっぱら開発者の見通し次第となり得る。
【０００７】
リモートプロシージャコール、ウェブサービス、ＲＥＳＴインタフェースなど、これらの方法の別の態様では、アプリケーションプログラムの残りの部分に使用されるものとは異なる別のプログラミングパラダイムや方法論を必要とする。遠隔計算デバイスと対話するために、開発者は遠隔計算デバイスとの専用対話コードを書く。例えば、開発者は、ＲＥＳＴインタフェースコールに対するパラメータをユニフォームリソースロケータ（「ＵＲＬ」）形式にフォーマットするコードを書いてもよい。また、開発者は、Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（「ＨＴＴＰ」）リクエストを出してＲＥＳＴインタフェースを明確に呼び出すコードを書いてもよい。遠隔サービスと対話するこのメソッドは、アプリケーションプログラムが実行されるデバイスにローカルなコードと対話するメソッドとは異なる。ローカルで実施される機能を呼び出すため、開発者は、アプリケーションプログラムが書かれる言語に一般的なシンタックスを使用してもよい。
【０００８】
本開示の態様は多様な実施形態に使用されてもよく、遠隔計算設備の能力を活用するアプリケーションプログラムを開発する統一パラダイムを可能にしてもよい。また、本開示の態様は多様な実施形態に使用してもよく、遠隔計算設備の活用程度を動的に調整してもよい。
【０００９】
図１Ａおよび図１Ｂは、遠隔計算設備を活用するアプリケーションの開発用統一パラダイムを使って開発されたプログラムを分散実行するシステムの実施例を示す。
【００１０】
本明細書で使用するように、語アプリケーションプログラムという用語は、実行可能ファイル、ダイナミックリンクライブラリ、スタティックリンクライブラリなどを含む保存された命令を意味してもよい。また、アプリケーションプログラムという用語は、中間命令、バイトコードおよび保存された命令の他の形式、ならびに、ソースコードおよびテキストファイルなどを意味してもよい。また、アプリケーションプログラムという用語は、多様なコンピューティングアプリケーションの実施に関連する１以上のファイルの１セットを意味してもよい。アプリケーションプログラム（例えば、１以上の関連ファイル）のコピーをクライアントデバイスにダウンロードし保存してもよい。２つ目のコピーを、移行されたクラスまたはメソッドを実行し得る遠隔計算デバイスに保存してもよい。本明細書で使用するように、移行という用語は、オブジェクトまたは機能の一部を遠隔で実行することを意味してもよい。いくつかの場合および実施形態において、移行がオブジェクト全体の再配置を伴うこともあるが、オブジェクトの一部のみを移行する場合もある。実施形態では、移行を実施するのに必要なデータ転送を最小限にする様々な技術を使用してもよく、従って、オブジェクトに関連するデータ全てを移行するのではなく、場合により選択されたメソッドまたはメソッドセットを遠隔で実行するのに必要なデータ量を移行してもよい。
【００１１】
アプリケーションプログラムは多数のクラスを備えてもよい。１つのクラスは、１以上のメソッドを備えてもよく、かつ、１以上の関連データを備えてもよい。１つのメソッドは、１以上の入力パラメータを有してもよく、かつ、１以上の戻り値および／または出力パラメータを有してもよい。１つのメソッドは、入力および／または出力としてクラスに関連するデータを利用する命令を含んでもよい。本明細書で使用するように、メソッドおよび機能という用語は、同じ意味で使用されてもよい。メソッドまたは機能という用語は、特定のクラスに関連するプロシージャ、または、どの特定のクラスにも関連しないスタンドアロンプロシージャの意味で使用されてもよい。
【００１２】
アプリケーションプログラムを実行する場合は、アプリケーションプログラムのインスタンスまたはプロセスを意味してもよい。アプリケーションプログラムを備えたクラスのインスタンスをオブジェクトと呼んでもよい。クラスのインスタンスを、クラスに関連するデータを記憶するメモリ領域と関連させてもよい。
【００１３】
図１Ａは、アプリケーションプログラムのインスタンスであるプロセス１０２を実行しているクライアントデバイス１０４を示す。プロセス１０２は、図のオブジェクト１０６、１０８、１１０および１１２など、多数のクラスインスタンスを備えてもよい。実行の様々なポイントにおいて、オブジェクト１０６、１０８、１１０および１１２の各インスタンスをクライアントデバイス１０４上で実行してもよい。しかし、所定のオブジェクトを選択して遠隔計算ノードに移行してもよい。例えば、図１Ａでは、オブジェクト１１０が計算ノード１１４に移行されて移行オブジェクト１１８として実行されること、および、オブジェクト１０８は計算ノード１１６に移行されて移行オブジェクト１２０として実行されていることを図示する。オブジェクトの移行では、オブジェクトが当初インスタンス化されたデバイスとは別の計算デバイス上で、オブジェクトの１以上のメソッドを実行することを含んでもよい。また、計算ノード１１４または１１６といった遠隔計算ノード上で初めてオブジェクトを作成することによってオブジェクトがインスタンス化前に移行されてもよい。また、実施形態では、移行に関連するいずれの側でも移行オブジェクトを必要に応じインスタンス化してもよい。例えば、オブジェクトをまずクライアントデバイス上でインスタンス化し、その後、オブジェクトのメソッドを遠隔計算ノード上で遠隔実施する直前に遠隔計算ノード上でインスタンス化してもよい。インスタンス変数にも他のオブジェクト状態にも関係無く、機能やオブジェクトメソッドを呼び出すことがあってもよく、その場合、オブジェクトのインスタンス化を「ｎｏ−ｏｐ」とするか、スキップしてもよい。また、オブジェクトを、例えば、移行メソッドによりアクセスされるメモリ位置のみインスタンス化するなどして、部分的にインスタンス化してもよい。
【００１４】
計算ノード１１４および１１６は、遠隔計算設備１２２内でホストされてもよい。いくつかの実施形態において、遠隔計算設備１２２は、アプリケーション発行者に代わりプロバイダにより操作されてもよい。遠隔計算設備１２２を使用することで、発行者のアプリケーション用に演算能力を提供するために、アプリケーション発行者に様々な費用がかかる場合がある。これを、個別にまたは組み合わされ使用され得る多数のファクタの中の、遠隔計算ノードに移行するオブジェクトの範囲判断に使用する１ファクタとしてもよい。例えば、予算が大きい発行者であれば、アプリケーションの性能を改善するために、多数の計算ノードを、クライアントデバイス上で動作するアプリケーションプログラムに使用可能にしてもよい。あるいは、予算が少ない発行者であれば、使用を最低レベルに制限してもよい。しかし、場合により、発行者は、一時的に、遠隔計算設備１２２など設備の遠隔計算デバイスに移行するオブジェクトの数を増加可能にすることを希望するかもしれない。
【００１５】
多様な実施形態において、オブジェクトを、性能およびネットワークコンディションなどのファクタに基づき移行してもよい。例えば、計算ノード１１４上で実行中のオブジェクトを、利用が少ないことを踏まえ計算ノード１１６に移行してもよい。いくつかの場合および実施形態において、オブジェクトを、計算ノード１１４または１１６などの遠隔計算ノードでの実行後、クライアントデバイス１０４に戻してもよい。これは、例えば、クライアントデバイス１０４と遠隔計算設備１２２の間のネットワーク接続を中断する場合に発生する可能性がある。
【００１６】
実施形態では、クラスおよびその依存関係の両方に係わる様々なファクタに基づき、クラスの移行適否を判断してもよい。これには、移行候補が依存する他のクラス、スタティックまたはダイナミックリンクライブラリ、バックグラウンドサービス、オペレーティングシステム（「ＯＳ」）機能およびハードウェアを含んでもよい。さらに、メンバデータおよびメソッドパラメータなど、クラスに関連するデータは、クラスの移行適否に影響を及ぼし得る。
【００１７】
移行候補は、ソフトウェア開発者に識別されてもよい。例えば、開発者はアノテーション、属性、または他の開発言語機能を使って、移行候補にマーク付けしてもよい。この情報は、コンパイラ、インタープリタおよび／またはリンカに処理され、実行可能なプログラムまたはライブラリに含まれてもよい。実施形態では、移行候補の静的解析を実施し、候補クラスのインスタンスの移行に対する実行可能性を初期推定してもよい。従って、いくつかの実施形態において、移行候補としてクラスをマーク付けしてクラス移行を示唆するが、必ずしも決定させるものではない。実行可能性の初期推定は、候補クラスの依存関係および対話モードを解析することによって判断される。
【００１８】
本開示の実施形態を使用して、様々なクライアントデバイスで使用するアプリケーションを発行し、発行されたアプリケーション用に柔軟な計算環境を提供してもよい。例えば、アプリケーション発行者は、所定のメソッドまたはクラスを移行候補としてマークしたアプリケーションプログラムを発行してもよい。また、アプリケーション発行者は、クラウドベースの計算リソースを確保しておき、アプリケーションプログラムをダウンロードするクライアントデバイスとは離れた計算ノード上で、アプリケーションプログラムの一部を実行してもよい。例えば、アプリケーション発行者は、計算能力が比較的低いスマートフォンや、計算能力が比較的高いタブレット上で実行されるゲームプログラムの単一コピーをリリースしてもよい。スマートフォン上で実行されるゲームインスタンスは、確保されたクラウドベース計算リソースの使用量が多くなり、タブレット上で実行されるゲームインスタンスは使用量が少なくなる可能性がある。アプリケーション発行者は、タブレットと携帯電話の割合に基づき、確保するクラウドベース計算リソースの量を調整してもよい。
【００１９】
実施形態では、本開示の態様を利用し、バックグラウンドタスクの実行を移行してもよい。アプリケーションのメソッドまたはクラスを、例えば、システムの起動またはシャットダウンなどのイベントに応答した条件付き移行対象としてマーク付けしてもよい。ランタイム時に、これらのメソッドを移行してもよい。バックグラウンドタスクのクライアントデバイス上での実行に合わせて、この方法を用いてもよい。クライアントデバイスがシャットダウンする際、シャットダウンイベントがバックグラウンドタスクの遠隔計算ノードへの移行のトリガとなり、クライアントデバイスがシャットダウンされる間も引き続き実行されてもよい。クライアントデバイスが再起動されると、実行はクライアント上で継続されてもよい。バックグラウンドタスクのステート情報は、移行ごとに転送されてもよい。これにより、クライアントデバイスがシャットダウンしても、また、ローカルでバックグラウンドタスクの実行を中断しても、バックグラウンドタスクを長期に実行できるようにしてもよい。別の実施例では、能力をセーブするため、移行実施を伴ってもよい。例えば、バックグラウンドタスクを使用するアプリケーションがフォアグラウンドに無い場合、バックグラウンドタスクを遠隔計算デバイスに移行してもよい。当該アプリケーションがフォアグラウンドのアプリケーションとなれば、ローカルで実行再開してもよい。
【００２０】
図１Ｂは、アプリケーション発行者に代わり、クラウドベースの計算リソースをアプリケーションプログラムに割り当てる実施形態を示すブロック図である。プロバイダは、１以上の計算デバイスを備え得るホスト１４０を保持してもよい。アプリケーション発行者１５０は、多様なクライアントにダウンロードされるアプリケーションの発行と同時に、クライアントデバイスの仮想化コピー１４４に関連付けられてもよい。図１Ｂは、アプリケーション発行者１５０とクライアントデバイスの仮想化コピー１４４との関係が１対１であることを示すが、他にも多くの組合せが可能である。例えば、アプリケーション発行者１５０は、アプリケーションプログラムごとに１つの仮想化オペレーティングシステムを確保してもよく、または、多数のアプリケーションプログラムに利用される多数の仮想マシンを確保してもよい。移行オブジェクト１４８は、アプリケーション発行者１５０によって発行された１以上のアプリケーションに関連しており、クライアントデバイスの仮想化コピー１４４のコンテキストで動作してもよい。
【００２１】
第二アプリケーション発行者１５２は、クライアントデバイスの仮想化コピー１４４と同じホスト１４０上で動作し得るクライアントデバイスの仮想化コピー１４２を確保してもよい。移行オブジェクト１４６は、アプリケーション発行者１５２により発行された１以上のアプリケーションに関連しており、クライアントデバイスの仮想化コピー１４２のコンテキストで動作してもよい。
【００２２】
クライアントデバイスの仮想化コピー１４２として、仮想マシンを選択するか構成してもよい。クライアントデバイスの仮想化コピー１４２は、アプリケーションプログラムが動作しているクライアントデバイスと同様の特性を備えてもよい。いくつかの場合および実施形態において、クライアントデバイス上で動作するアプリケーションプログラムは、同じアプリケーションプログラムが遠隔計算ノード上で動作するのと略同様に動作するという意味において、これらの環境の両方は同じであってもよい。より一般的には、実施形態では、移行されたクラスおよびメソッドを実行するため、アプリケーションを実行するクライアントデバイスで使用される環境のコピーまたは同等物を利用してもよい。
【００２３】
本明細書で使用するように、仮想マシンという用語は、ハイパーバイザまたは同様のプロセスに制御されて動作するというように、コンピュータのソフトウェア型エミュレーションに関連してもよい。また、仮想マシンという用語は、ＪＡＶＡ仮想マシンなど、中間レベル（すなわち、非特定プロセッサ）命令を実施する実行可能なプロセスに関連してもよい。クライアント環境の仮想化コピーは、多様な実施形態において、これらのタイプの仮想マシンのいずれかを備えてもよい。
【００２４】
実施形態では、様々に動作し移行可能なプロセスが動作する環境間の互換性を維持してもよい。この場合、クライアントデバイス上でのプロセス実行環境と、遠隔計算ノード上での移行クラスまたはメソッドの実行環境との間で一貫性を保ってもよい。例えば、図１Ａにおいて、プロセス１０２は、ＬＩＮＵＸオペレーティングシステムバージョンで動作するＪＡＶＡ仮想マシン上で実行してもよい。ＬＩＮＵＸオペレーティングシステムの同一バージョンでの動作およびＪＡＶＡ仮想マシンの同一バージョンの使用を踏まえ、計算ノード１１４および１１６はインスタンス化または確保されてもよい。
【００２５】
図２は、コンパイル前のアプリケーションプログラムを示すブロック図であり、アプリケーションプログラムの少なくとも１つのクラスにアノテーションを付け移行の可能性を示している。アプリケーションコード２００は、クラス２０２、２０４および２０６など、多数のクラスを定義する多様なソースファイルを備えてもよい。各クラスは、１以上のメソッドを備え、また、メンバデータとも呼ばれる１以上の関連データを有してもよい。例えば、クラス２０２は、メソッド２０８およびメンバデータ２１０を備え、クラス２０４はメソッド２１２を備えてもよい。
【００２６】
開発者（図示せず）は、クラス２０２にアノテーション２１４を付け、クラス２０２が移行候補として扱われるよう示してもよい。アプリケーションコード２００内のクラスはいくらでも、移行候補としてアノテーションを付けてもよい。しかし、表示を簡略化するために、図２には１つのアノテーションを付けたクラスのみ示す。
【００２７】
アノテーションを付けたクラス２０２についての移行可能性は、その依存関係次第としてもよい。例えば、クラス２０２のメソッド２０８は、クラス２０４のメソッド２１２、および１以上のライブラリ２１４と依存してもよい。依存関係は直接的であっても間接的であってもよい。例えば、メソッド２０８はメソッド２１２を呼び出すコードを含んでおり、メソッド２１２に直接的な依存してもよい。また、メソッド２０８は、１以上のライブラリ２１４の機能または特徴的機能を呼び出すかそれらに依拠してもよい。メソッド２０８は、メソッド２１２が機能を呼び出すため、オペレーティングシステム２１６の所定機能に間接的に依存してもよい。また、１以上のライブラリ２１４、オペレーティングシステム２１６、および、ハードウェア２１８間では、様々な依存関係があってもよい。
【００２８】
オブジェクトの移行では、クライアントデバイスと１以上の遠隔計算ノードとの間、または、１以上の遠隔計算ノード間で多様なコード要素を同期してもよい。同期の態様では、オペレーティングシステムバージョン、ライブラリバージョン、およびアプリケーションバージョンを伴ってもよい。一般的に、オペレーティングシステム、ライブラリ、またはアプリケーションに対応した、実行可能な保存命令の同期を伴ってもよい。例えば、クライアントデバイスがオペレーティングシステムＺのバージョンＸ．Ｙで動作する場合がある。オペレーティングシステムＺのインスタンスを遠隔計算ノード上で動作させてもよい。遠隔計算では、バージョンＸ．Ｙに同等であると判断されたオペレーティングシステムを使用してもよい。この場合、同等性は、依存される機能について判断されてもよい。例えば、図２において、メソッド２１２は、オペレーティングシステムＺの旧バージョンからバージョンＸ．Ｙへのアップグレードによる影響が無いオペレーティングシステム２１６のコンポーネントに依存してもよい。この場合、旧バージョンとバージョンＸ．Ｙは同等であると見なされ、同等であることに基づき同期されていると見なされてもよい。ライブラリおよびアプリケーションプログラムコードは、このような形式の同等性に基づき同期されてもよい。
【００２９】
また、オブジェクトの移行ではデータ要素を同期してもよい。多様な実施形態において、アプリケーションにより保存されるデータは同期され、移行されたオブジェクトは依拠するデータに直接アクセスするようにしてもよい。また、実施形態では、インメモリデータを同期してもよい。実施例として図２では、クラス２０２がメンバデータ２１０を備えてもよい。このデータは、メソッド２０８に使用され、また、クラス２０２の図示していない追加メソッドにより使用されてもよい。従って、いくつかの実施形態では、クライアントデバイスと１以上の遠隔計算ノードとの間、または、２つ以上の遠隔計算ノード間でメンバデータ２１０のデータ同期を実施してもよい。
【００３０】
図３は、クラス移行の適否を判断するための、クラスの依存関係の静的解析実施プロセスを示す図である。ツリー構造を使って、プログラムの様々なクラス３００〜３０６の表示を保存してもよい。ツリー構造はソースまたはコンパイル済みコード要素の構文解析または反映など様々な方法で形成されてもよい。図３において、クラス３００はクラス３０２、３０４、および３０６に依存してもよい。クラス３００のインスタンスの移行適否は、クラス３００が依存するクラスのインスタンスの移行適否に依存してもよい。
【００３１】
様々なファクタが移行適否に影響を及ぼしてもよい。これらには以下の例示的なファクタを含むが、これらに限定されない。移行適否に影響を及ぼす第一ファクタとして、移行可能であり得るクラスのメソッドにより課される計算要求があってもよい。実行時に利用可能な遠隔計算ノードと、ローカルデバイスの計算能力と比較して、この比較に少なくとも部分的に基づき、計算量を解析してもよい。第二ファクタは、移行され得るクラスのメソッドに対するパラメータサイズを含んでもよい。パラメータのないメソッド、またはパラメータが小さいメソッドは、パラメータが多い、またはパラメータが大きいメソッドよりも移行に適していてもよい。第三ファクタは、移行され得るクラスのメソッドが参照するメンバ変数、グローバル変数および他のデータを含む。そういったデータの少量にしか依存しないメソッドは、多量のそのようなデータに依存するメソッドに比べ、より移行に適していてもよい。第四ファクタは、メソッドの呼出し時に影響を受け得るメンバ変数およびグローバル変数といったステート情報間の相互の依存関係の程度を含む。例えば、ステートレスなメソッドは、そうでないメソッドに比べ、より移行に適していてもよい。同様に、特に、多くの追加メソッドがグローバル変数に依存している場合には、グローバル変数に影響を与えるメソッドに比べ、メンバ変数にのみ影響を与えるメソッドの方がより移行に適していてもよい。
【００３２】
オペレーティングシステムのコンポーネントを呼び出すメソッドを含むクラスがあってもよい。例えば、図３では、クラス３０２はＯＳコンポーネント３０８および３１０に依存しており、クラス３０４はＯＳコンポーネント３１２に依存していることを図示する。所定のオペレーティングシステム機能は、クラスまたはメソッドの移行とコンフリクトする場合がある。例えば、図３では、ＯＳコンポーネント３０８は、カメラ３１４に依存していることが図示される。クライアントデバイスにローカルなカメラは、そういった機能の対象であるので、それらの機能は、テストまたはデバイスのシミュレーションなどといった所定の場合を除き、移行すべきでない。他の場合では、オペレーティングシステム機能には、ローカルメモリ管理、電源オフ、またはローカル機能のその他態様など、移行すべきでない機能を含んでもよい。しかし、移行に適したデバイスがあってもよい。図３において、記憶デバイス３１６は移行に適してもよい。実施形態では、ローカルデバイスストレージおよび遠隔デバイスストレージのコンテンツを同期するなど、多様な技術で記憶デバイスの移行をサポートしてもよい。
【００３３】
クラスまたはメソッドの移行適否の初期推定を指定するプログラムのクラスおよびメソッドに、スコア付けしてもよい。実施形態では、移行優先度を高くすべきクラスに高スコアを付け、移行優先度を低くすべきクラス、または移行すべきでないクラスに低スコアを付けてもよい。実施形態では、クラスが依存するＯＳコンポーネントおよびハードウェアなど、クラスやその他の要素に付けられたスコアに基づきクラスにスコアを付けてもよい。
【００３４】
図３の実施例において、クラス３００は、スコア３２０を有するクラス３０２、および、ゼロスコア３２６を有するＯＳコンポーネント３０８を介して、ゼロスコア３３２を有するカメラ３１４に間接的な依存関係があるため、移行候補には向かないかもしれない。これは低い移行優先度が反映され、クラス３００に関連付けられたスコア３１８に低い値が反映されてもよい。
【００３５】
いくつかの実施形態において、クラス３００は、ローカルデバイス上で実施されるＯＳコンポーネント３０８を呼び出すように調整することで、移行の可能性がある。この場合の制御フローは、必要に応じ、クライアントデバイスと遠隔計算デバイスとで交替してもよい。実施形態では、付与時に、インタフェースの対話性、移行データ量といったファクタを利用してもよい。
【００３６】
いくつかの場合および実施形態において、依存するクラス、ＯＳコンポーネントまたはデバイスのスコアが低くても、クラスに高いスコアを付けてもよい。これには様々なファクタがあり、例えば、高スコアクラスと、低スコアクラス、ＯＳコンポーネントまたは高スコアクラスの移行を受け入れるデバイスとの間のインタフェース等がある。これは、例えば、離れた位置で動作する利点が不利益に比べ高い場合であってもよい。これは、高スコアクラスと、低スコアのクラス、ＯＳコンポーネントまたはデバイスとの間の対話頻度が比較的低い場合であってもよい。例えば、一連の長く複雑な計算を実施するクラスであれば、たとえ移行が不可能ないくつかの機能を実施したとしても、移転による恩恵がある場合がある。この場合、移行しない機能を実行するためのコンテキストの切り替えに費用がかかっても、クラスを移行することは有益であってもよい。この費用がかかるファクタとして、クライアントデバイスと遠隔計算ノードとの間のデータ転送、適切な遠隔計算ノードへの対応プロセスの配置などがあってもよい。
【００３７】
いくつかの場合および実施形態において、特定のカテゴリに対応する全てのメソッドまたはクラスのリダイレクションを可能にするためなど選択ファクタに基づいて、クラスまたはメソッドにスコアを付けてもよい。例えば、ＡＰＩに属する機能全てを移行候補としてマーク付けしてもよい。仮スコアまたは条件付スコアをこのコンテキストで使用してもよい。例えば、ランタイム時に判断し、クライアント上でなく離れた位置で利用可能なＡＰＩバージョンを実行してもよい。
【００３８】
また、ある実施形態では、直接的であっても間接的であってもクラスまたはメソッドによる外部ＡＰＩの呼び出しに基づき、クラスまたはメソッドにスコアを付けてもよい。また、スコアは、ＡＰＩの呼出しに掛かる費用に基づいてもよく、その場合、費用は、データ転送費用、帯域幅利用など様々なファクタを参照してもよい。例えば、移行候補はインターネットベースのウェブサービスを呼び出す場合がある。携帯電話での場合、ウェブサービスの呼出しによって、携帯デバイスのユーザはデータ転送量に基づく利用料を負う場合がある。ウェブサービスを呼び出すクラスまたはメソッドを移行することで、こういった料金の発生を回避してもよい。
【００３９】
実施形態では、ＯＳコンポーネント３１２および記憶デバイス３１６へ付されるスコア３３０および３３４に基づき、クラス３０４にスコア３２２を付けてもよい。記憶デバイス３１６へのスコア３３４など、デバイスに付けられるスコアは、開発者の意図やデバイスの移行に対する適合性といった多くのファクタに依存してもよい。例えば、所定のクラスが離れた位置にある記憶デバイスを使用するよう開発者は指示してもよく、アノテーションまたは属性などの方法でその指示を出してもよい。従って、そのような環境では、記憶デバイス３１６へのクラス３０４の間接的な依存関係は、クラス３０４に対し好適なスコアを付けるファクタであろう。換言すれば、スコア３２２またはクラス３０４は、スコア３３０およびスコア３３４に影響される可能性がある。
【００４０】
クラス３０６など依存関係のないクラスは、図３でスコア３２４として示されているが、高い移行スコアを受けてもよい。スコア３２４は、当該クラスが移行に好適とすべき旨の開発者による指示など、様々な追加のファクタにより影響を受けてもよい。例えば、この指示をクラスまたはメソッドのアノテーションで出し、それによりクラスまたはメソッドの移行適否についての開発者の意向を示してもよい。
【００４１】
いくつかの実施形態において、移行優先度を示すスコアを、図３に関連して説明したように、静的解析により設定し、ランタイム中の実行をモニタリングして調整してもよい。他の実施形態において、静的解析を使って移行候補を識別するが、スコア付けはランタイム時まで延ばしてもよい。この場合、静的解析時にクラスに付けるスコアは、オブジェクトへの初期スコア設定の基準とし使用されてもよい。多様な実施形態において、同一クラスの異なるオブジェクトが異なるスコアを有してもよい。これは、例えば、サイズなど、特性が異なる同一クラスの様々なオブジェクトに基づく場合に発生してもよい。例えば、サイズが小さいオブジェクトは、サイズが大きなオブジェクトに比べ、移行候補としてより好適であってもよい。
【００４２】
また、実施形態では、例えば、アプリケーションを携帯デバイス上で動作させる場合に用いるスコアセット、および、アプリケーションをパーソナルコンピュータ上で動作させる場合に用いる別のスコアセットといったように、条件次第で複数のスコアセットを使用してもよい。オブジェクトインスタンスに付けるスコアを、クライアントデバイスの構成またはクライアントデバイスが動作する環境などのファクタに部分的に基づき、クラスに関連させたスコア候補セットから選択してもよい。
【００４３】
図４は、実行プログラムのクラスのモニタリングおよび移行、ならびに、ステートレスメソッドおよびステートフルメソッドの呼出しを示す図である。アプリケーションプログラムをクライアントデバイス４００上で実行してもよい。アプリケーションプログラムはランタイム４０２を使って動作してもよい。いくつかの実施形態において、ランタイム４０２は、中間言語命令またはバイトコード命令をプロセッサ命令に変換し、変換された命令を実行する命令を備えてもよい。また、ランタイム４０２は、仮想計算環境を備えてもよい。
【００４４】
スケジューラ４０４の１以上のモジュールを、クライアントデバイス４００上で実行してもよい。モジュールという用語は、本開示の態様を実施するコンピュータ実行可能命令および回路の多様な組合せを意味してもよい。モジュールは、スタティックおよびダイナミックリンクライブラリ、実行可能なプログラム、オペレーティングシステムコンポーネントなどを備えてもよい。スケジューラ４０４のモジュールは、クライアントデバイス４００、ランタイム４０２、およびアプリケーションプログラム性能の性能特性トラッキングを含む動作を実施してもよい。多様な実施形態において、モニタリング命令および移行命令は１以上のモジュールに含まれ、各モジュールは、本実施形態の多様な態様を実施する命令サブセットを含んでもよい。図４は、単一モジュールにより実行されるモニタリング機能および移行機能を示すが、単一モジュールを使った実施形態に限定されるものと見なすべきでなく、また、本明細書に記載する動作がランタイムまたはオペレーティングシステムなど他の要素に包含させないと見なすべきでない。
【００４５】
スケジューラ４０４のモジュールは、クラスおよびメソッド境界間でのデータ転送のモニタリングを実行してもよい。実施形態では、データ転送特性を、オブジェクトの移行を判断する際のファクタとして利用してもよい。クラスまたはメソッド境界間でのデータ転送量が比較的少なければ、オブジェクトの移行を示唆し、データ転送量が比較的多ければ移行を禁止するとしてもよい。
【００４６】
スケジューラ４０４のモジュールは、移行候補を識別する動作を実施してもよい。候補は、潜在的な候補を識別するアプリケーションプログラム内に含まれた情報、または、当該アプリケーションプログラムに関連付けられた情報を含め、多様なファクタに基づいて識別されてもよい。当該情報は、アプリケーションプログラムに埋め込まれるか、スケジューラ４０４のモジュールに読み出される関連ファイルに書き込まれてもよい。例えば、実施形態では、アプリケーションプログラムの起動時にアプリケーションプログラムをスキャンし、移行候補を識別してもよい。いくつかの実施形態において、アプリケーションプログラムの起動後に、移行候補を識別してもよい。実施形態では、例えば、クラスのインスタンスがインスタンス化される直前に、移行候補としてクラスにマーク付けするかどうかを判断してもよい。
【００４７】
スケジューラ４０４は、モニタリング中に収集された情報を利用して、移行するクラスを選択してもよい。実施形態では、候補であると識別されたクラスの中から移行クラスを選択してもよい。静的解析に基づき候補クラスに付けられたスコアに基づいて、選択してもよい。また、モニタリング情報に基づき調整されたスコアに基づいて、選択してもよい。例えば、静的解析は、あるクラスは移行に好適な候補であると示す場合があるが、当該クラスのモニタリングは、境界間でのデータ転送量が多いことを示す場合がある。ある実施形態では、この場合、クラスに付けられた移行スコアを引き下げ、調整された移行優先度を示すようにしてもよい。
【００４８】
いくつかの場合および実施形態において、クライアントデバイス４００またはランタイム４０２の性能により、いくつかのクラスが高い移行優先度を受けるべきであると示すようスコア調整を示唆される場合がある。例えば、クライアントデバイス４００の中央処理装置（「ＣＰＵ」）がオーバーロードとなった場合、ＣＰＵへの要求が多いクラスには、ＣＰＵへの要求がより少ないクラスより、移行優先度を高くしてもよい。
【００４９】
移行されたクラスは計算ノード４０６上で実行してもよい。ランタイム４０８を、計算ノード４０６上で使用してもよい。実施形態では、クライアントデバイス４００上で動作するランタイム４０２の動作特性と、計算ノード４０６上で動作するランタイム４０８の特性とをマッチングさせてもよい。例えば、計算ノード４０６は、クライアント上で動作するランタイム４０２のバージョンに対応するランタイム４０８のバージョンを動作させてもよい。
【００５０】
スケジューラ４１０のモジュールは、計算ノード４０６上で動作してもよい。計算ノード４０６上のスケジューラ４１０のモジュールは、クライアントデバイス４００上で動作するスケジューラ４０４により実施される動作と同様の動作を実施してもよい。当該動作では、計算ノード４０６およびランタイム４０８の性能の多様な態様をモニタリングすることを含んでもよい。図４においてデータ交換４２２の矢印を使って示された通信パスは、クライアントデバイス４００上で動作するスケジューラ４０４と、計算ノード４０６上で動作するスケジューラ４１０との間で確立されてもよい。スケジューラ４０４および４１０で共有される情報を使って、クライアントデバイス４００から計算ノード４０６へ移行するクラスを選択してもよく、選択されたクラスの移行を終了してもよい。例えば、ある実施形態では、計算ノード４０６のＣＰＵ利用度をモニタリングし、利用度が高すぎると判断したり、クライアントデバイス４００での利用度より利用度が高いと判断したりしてもよい。実施形態では、クラスまたはオブジェクトの移行の優先付けは、クライアントデバイス４００および計算ノード４０６の両方の性能ファクタおよびその両方で収集されたその他データとの比較に基づいてもよい。費用的な有利性または最適な方法を利用して、特定のクラスまたはオブジェクトの移行スコアを調整するかどうかを判断するか、どの程度まで積極的に移行するクラスまたはオブジェクトの選択を行うかを判断してもよい。
【００５１】
計算ノード４０６上にある移行されたオブジェクトと、クライアントデバイス４００上にある移行されていないオブジェクトとの間の対話を、ステートレス対話またはステートフル対話として分類してもよい。ステートレス対話は、実行しても値を返す以外何の影響もないメソッドなど、有意な副作用が無いメソッドと説明されてもよい。一方、ステートフル対話では、同期の必要性と関連する副作用が生ずる。
【００５２】
図４において、ステートレス対話として、ステートレスメソッドである呼出４１２が示され、後に返答４１４が続いてもよい。返答４１４では、結果としてステートレスメソッドを実行させることを含んでもよい。これには、例えば、呼出４１２により提供されたパラメータを使って計算ノード４０６上で実施された計算の結果を含んでもよい。
【００５３】
また、ステートフル対話は、後に返答４１８が続く呼出４１６を含んでもよい。しかし、関連メソッドがステートフルであるため、実施形態では、同期４２０を実施し、計算ノード４０６上でステート変更してクライアントデバイス４００上のデータと一致させ、またその逆も行ってもよい。実施形態では、ステートフルメソッドに関連する動作を実施するためにネットワークを往復する回数を低減させるため、同期４２０に関するデータを呼出４１６および返答４１８と合わせてもよい。
【００５４】
いくつかの場合において、メソッドではステート情報の変更を行わないが、それにもかかわらず状態に依存していてもよい。いくつかの実施形態において、当該メソッドタイプをステートフルメソッドとして扱ってもよい。他の実施形態において、ステートレスメソッドとして扱ってもよい。いくつかの実施形態では、メンバ変数および他のステート情報を呼出４１２で転送してもよい。
【００５５】
ステートフルまたはステートレスであるとする対話分類は、クラスまたはオブジェクトの移行に関するスコア付けに影響を与えてもよい。多様な場合および実施形態において、移行には、ステートレス対話が好適である。アプリケーションプログラムの静的解析に基づき、対話をステートフルであるかステートレスであるか分類してもよい。また、いくつかの実施形態では、静的解析に追加するか、静的解析の代わりに動的解析を用いてもよい。
【００５６】
図５は、アプリケーションプログラムのセグメントの移行適否を判断するアプリケーションプログラムの静的解析を示すフローチャートである。一連の動作として示されているが、当業者であれば、示した順序により本開示の範囲が限定されると見なすべきでなく、示した動作の少なくともいくつかを変更し、削除し、配置換えし、追加の動作で補足し、または、並行して実施してもよいと理解するであろう。
【００５７】
動作５００は、移行の候補であると見なされうる、アプリケーションプログラムのクラスまたはメソッドのサブセットを識別する実施形態を示す。開発者が候補のクラスまたはメソッドへのマーク付けに使用した属性、アノテーションまたは他の方法に基づき、識別を行ってもよい。実施形態では、ソースコードの構文解析やコンパイル済みコードへの反映技術といった技術を使用し、マークされたクラスまたはメソッドを識別してもよい。いくつかの実施形態では、ソースコードまたはコンパイル済みコードをスキャンし、アノテーションまたは属性などの方法を用いることなく、コードの予測挙動に基づき、移行の適否を直接推測してもよい。
【００５８】
動作５０２では、候補メソッドまたは候補クラスに関連するメソッドの入出力特性を解析することを示す。これらの特性は、入力としてメソッドに提供されたパラメータ、または、出力パラメータもしくは戻り値として返されたパラメータのタイプを含んでもよい。基本パラメータタイプ以外を使って規定されたものなど複雑なパラメータタイプは移行に不利な場合があるが、整数などの基本タイプはその逆を示唆するであろう。同様に、パラメータが大きければ移行が不利になる場合があり、パラメータが小さければ有利になる。
【００５９】
動作５０４は、候補クラスのメモリ依存関係を解析することを示す。実施形態では、候補クラスのメソッドによるメソッドパラメータ、メンバ変数（スタティックおよびインスタンス変数の両方を潜在的に含む）、グローバル変数などを参照して識別してもよい。実施形態では、メモリアクセスに関連する多様なファクタを解析し、移行の適否を判断してもよい。例えば、実施形態では、候補メソッドを含む他のメソッドとメンバ変数との間の依存関係を解析してもよい。依存関係が多ければ移行優先度が低く、または、移行に不適であることと示唆し、依存関係が少なければその逆を示唆してもよい。また、参照データ量を検討してもよい。多くのファクタの中でも、依存関係が読み出し専用であるか、読み出し書き出し動作の両方を含むかも、１つのファクタである。
【００６０】
動作５０６は、ダイナミックリンクライブラリ、デーモンプロセス、ウェブサービスなど、アプリケーションプログラムの外部への依存関係を解析する実施形態を示す。移行先でのこれらの依存関係タイプの可用性は、外部依存関係がステートレスでない一部の場合、移行に有利になってもよい。この時、クライアントデバイスおよび遠隔計算ノード上で動作する外部依存関係のステート同期を回避することが望ましい場合がある。一方、ステートレスウェブサービスなどの依存関係が移行先で動作している場合、呼び出しメソッドを移行することで、いくつかのインスタンスにおいて性能が向上されてもよい。サービスの対応バージョンが移行先にあるかどうかも、もう１つの関連ファクタである。
【００６１】
動作５０８において、実施形態では、オペレーションシステムおよびハードウェアの依存関係を解析してもよい。単独または組み合わせて多様な方法を用いてもよい。実施形態では、上記のファクタに基づきメソッドの移行適否を解析してもよい。オペレーティングシステムまたはハードウェアの依存関係の該当する分類に基づき、オペレーティングシステムまたはハードウェアの依存関係を呼び出す候補メソッドにスコア付けしてもよい。しかし、以下の分類化は例示であり、本開示の範囲を限定するものとみなすべきでないことは理解されるであろう。第一分類は、移行が常時不適であるオペレーティングシステムの機能を含んでもよい。メモリ管理機能、電源オフ等がこれに属してもよい。第二分類は、特定の状況を除き移行が不適であるハードウェアおよびハードウェアアクセス機能を含む。クライアントデバイスのカメラのみカメラ視野で撮像が可能であるため、カメラは、このタイプのデバイスの一実施例である。しかし、検査またはシミュレーションといった特別の状況では、カメラを呼び出す機能を移行可能であると示唆してもよい。第三分類は、移行され得るコールを含んでもよい。一実施例として、いくつかの場合および実施形態において、移行により有用となり得るグラフィックプロセッサの呼出しを含むコールがある。例えば、クライアントデバイスより遠隔計算ノードのグラフィック処理ユニットのほうが優れている場合である。第四分類は、移行を意図したコールを含んでもよい。このカテゴリは、遠隔でホストされる記憶サービスに関するサービスに対するコールを含んでもよい。
【００６２】
動作５１０は、移行候補の依存関係チェーンを解析する実施形態を示す。実施形態では、多数のファクタに関する依存関係チェーンを解析してもよい。ファクタの１つは、依存関係チェーンの深さを含んでもよい。依存関係のない、または依存関係の数が少ない候補メソッドは、依存関係の数が多いメソッドに比べ、より移行に適していてもよい。別のファクタに、依存関係チェーンの分離として記述されることができるものを含んでもよい。これは、移行に適した境界を有するチェーンの点を含んでもよく、この際ファクタに基づき適否を判断し得るが、当該ファクタには、候補メソッドの実行中に境界を超えると予期される頻度、または予期される転送データ量を含むが、これらに限定されない。依存関係チェーン内に移行に不適なファクタがある候補メソッドであっても、依存関係チェーンに分離に適する点があれば、それにもかかわらず全体的には移行候補として好適であるとしてもよい。
【００６３】
動作５０２から５１０で解析しているように、示したようなファクタなどのファクタに基づき、実施形態では、動作５１２で示すように、候補クラスまたはメソッドにスコアを付けてもよい。スコアは、クラスまたはメソッドの移行適否、または移行優先度を示してもよい。解析のため、クラスの特性をクラスのメソッドの特性から求めてもよいことに留意する。実施形態では、クラスのメソッドの移行適否に基づき、移行スコアをクラスに付けてもよい。
【００６４】
動作５１４において、実施形態では、アプリケーションプログラムまたは解析中の他のコードに、スコアを示す情報を保存してもよい。また、実施形態では、１つの外部ファイルまたは複数ファイルに当該情報を保存してもよい。スコア情報を、スケジューラ、または情報を解析し得る他のコンポーネントによりランタイムで利用し、移行するクラスおよびメソッドを選択してもよい。
【００６５】
図６は、付けられたスコア、および、アプリケーションプログラムの実行をモニタリングしそれに基づいて調整されたスコアに基づき、移行するクラスを選択する実施形態を示すフローチャートである。一連の動作として示されているが、当業者であれば、示した順序により本開示の範囲が限定されると見なすべきでなく、示した動作の少なくともいくつかを変更し、削除し、配置換えし、追加動作で補足し、または、並行して実施してもよいと理解するであろう。
【００６６】
動作６００で示すように、実施形態では、アプリケーションプログラムのマーク付候補クラスおよびメソッドを識別してもよい。スケジューラコンポーネントは、実行を開始するプログラムを示す情報を受信し、それに応答して、移行候補としてマーク付けされたクラスまたはメソッドセットを判断するために、アプリケーションプログラムコードまたは関連情報の検査を開始してもよい。また、実施形態では、検査を通し静的解析の結果、候補クラスおよびメソッドに付されたスコアを判断してもよい。
【００６７】
動作６０２では、移行候補クラスの初期サブセットを選択することを示す。実施形態では、実行するための初期の移行程度または移行量を判断してもよい。これは、スケジューラモジュールがクラス移行においてどのくらい積極的であるべきかの指示を受信することを含んでもよい。例えば、多様な実施形態において、クラスまたはメソッドを移行する閾値スコアを示すスケジューラモジュールによって、情報を受信してもよい。いくつかの実施形態において、閾値スコアは、開発者が示し、アプリケーションプログラムに埋め込まれた情報として備えられてもよい。他の実施形態において、閾値スコアはファクタにより判断されるが、当該ファクタは、アプリケーションプログラムが動作しているクライアントデバイス、起動時のネットワークの可用性、遠隔計算リソースの可用性などを含むが、これらに限定されない。利用され得るもう１つのファクタは、多様な実施形態において、電力を使用する見込みである。実施形態では、所定のメソッド、システムの機能、プログラム構成などは、閾値レベル以上の電力量を使う可能性が高いと判断してもよい。これらには、携帯電話など電力に敏感なデバイスに対し移行が好適となるようスコア付けしてもよい。いくつかの実施形態において、スコア付けは、コードが動作されるデバイスなどのファクタ次第、またはランタイム時に起こり得る多様な条件次第であってもよい。バッテリレベルが一実施例である。
【００６８】
実施形態では、アプリケーションプログラムの動作に関連する多様なファクタをモニタリングし、収集された情報を使って、移行するものとして選択されたクラスセットを変更してもよい。動作６０４では、クライアントデバイスでのアプリケーションの性能をモニタリングすることを示す。これは、クライアントデバイスの全体的な性能をモニタリングすることを含んでもよい。性能の態様には、アプリケーションプログラムまたはクライアントデバイスのオペレーティングシステムの多様な機能の実行回数を含んでもよい。また、メモリ使用量、ＣＰＵ使用量などの他のメトリクスを含んでもよい。バッテリレベルだけでなく、電力使用量を検討してもよい。いくつかの実施形態において、比較基準として使用するために多様な閾値を規定してもよい。属性またはアノテーションを使って、これらの閾値を候補クラスまたはメソッドに関連付けてもよい。また、アプリケーションプログラムに大域的なパラメータとして、当該閾値を規定してもよい。実施形態では、多様な式またはヒューリスティックを用いて、クライアントデバイスおよびアプリケーションプログラムの性能メトリクスを他のファクタと組み合わせて、候補クラスまたはメソッドを移行すべきかどうかを判断してもよい。
【００６９】
動作６０６では、移行されたクラスまたはメソッドが実行中か実行されてもよい遠隔計算ノードの性能をモニタリングすることを示す。実施形態では、複数の遠隔計算ノードを用いてもよい。遠隔計算ノード性能のモニタリングでは、実行回数、ＣＰＵ使用量、メモリ使用量などのメトリクスを検討してもよい。これには、移行されたメソッドの実行回数など、移行されたクラスおよびメソッドに直接起因するメトリクスを含んでもよい。全体的なシステム性能を検討してもよい。
【００７０】
いくつかの実施形態において、料金を支払ってカスタマが使用するよう提供された遠隔計算ノードに、クラスおよびメソッドを移行してもよい。その場合、クライアントに対する費用は、カスタマのために使用される遠隔計算ノードの量に基づいてもよい。動作６０８では、サーバ側リソースの利用または消費およびその他ファクタをモニタリングし、当該その他ファクタは、移行されたクラスまたはメソッドが、ホストされた遠隔計算ノード上で動作可能になるためのクライアントに対する費用に影響する場合があることを示す。例えば、ある実施形態では、遠隔計算ノード上での利用率を、利用予算レートと比較してもよい。実際の利用が予算利用を超えれば、実施形態では、実際の利用が予算利用以下となるよう、１以上の移行クラスをクライアントデバイスに戻す判断をしてもよい。ネットワーク帯域幅の使用に対しユーザに課され得る費用など、多様な他の費用ファクタを検討してもよい。一般的な用語において、費用は、移行された機能の実行に使用され得る計算リソース、および、それらのリソースを使用するエンドユーザ、発行者、またはプロバイダに対する費用についての評価であってもよい。
【００７１】
動作６１０は、クライアントデバイスと遠隔計算ノードとの間の通信に関連した可用性、レイテンシ、使用可能な帯域幅、および他のファクタのモニタリングを示す。可用性またはその欠如は、クラスまたはメソッドを移行するかどうかの判断における制御ファクタであってもよい。実施形態では、可用と非可用の推移をモニタリングしてもよい。ネットワークが非可用となった場合、実施形態では、ネットワークが可用になるまで、任意の移行済クラスをクライアントデバイスに再配置してもよい。
【００７２】
多様な実施形態でクラスまたはメソッドの移行を判断する際に、または、移行済クラスを対応するクライアントデバイスに再配置するよう判断する際に、ネットワークレイテンシを解析し検討してもよい。実施形態では、移行境界の対話性、または、換言すれば、アプリケーションプログラムの移行されていない部分と移行された部分との対話頻度などの多様な他のファクタについて、ネットワークレイテンシを解析してもよい。ネットワーク帯域幅について、同様のメソッドを使用してもよい。本明細書に記載の技術によりネットワーク状態に動的に適応できるようにしてもよいことに留意する。例えば、高レイテンシの高帯域幅ネットワーク上で動作する場合、チャンク状のインタフェースを有するメソッドが移行対象に選択されてもよい。一方、低帯域幅、低レンテンシネットワークを使う場合、対話性の高いインタフェースを有するメソッドを選択してもよい。
【００７３】
動作６０４から６１０において説明した多様なファクタを用いて、移行候補に関連するスコア値を調整してもよい。いくつかの実施形態において、これには、候補クラスの依存関係ツリーをトラバースし、ツリーにおける依存関係の移行スコアを調整し、依存関係のスコアに基づき候補クラスの全体的な移行スコアを再計算することを含んでもよい。依存関係チェーンに記入する際、スコア調整が、性能ファクタがスコアに与え得る影響の度合いを示す情報により影響を受けてもよい。例えば、アプリケーションプログラムの静的解析時、実施形態では、所定のメソッドは、レイテンシが高いネットワークに影響を受けやすいと判断してもよい。これらのメソッドは、レイテンシが高いネットワーク状態をモニタリングしたことを受け、スコア調整して他のメソッドより大きく減少させてもよい。動作６１２は、当該技術タイプまたは同様の他の解析技術に基づいたスコア調整を示す。
【００７４】
実施形態では、クライアントデバイスと１以上の遠隔計算ノードとの間、または直接計算ノード間で性能情報を転送してもよい。いくつかの実施形態において、複数の実行インスタンス間で性能情報を集計してもよい。性能履歴情報を共有し利用して、初期移行スコアを調整してもよい。
【００７５】
動作６１４は、調整済スコアに基づき移行されたクラスおよびメソッドセットを調整する実施形態を示す。多様な実施形態において、スコアを移行の優先度として扱ってもよい。スケジューラモジュールは、例えば、利用が減少するまでクラスまたはメソッドを追加移行してはならないという、所望の利用レベルに遠隔計算ノードが達するまで、クライアントデバイスから遠隔計算ノードにクラスを移行するよう判断してもよい。或いは、スケジューリングモジュールは、クライアントデバイスの性能が閾値レベルを超えて改善するまで、クライアントデバイスから１つの遠隔計算ノードにまたは１以上の遠隔計算ノードに、クラスを移行するよう判断してもよい。これらのいずれの場合においても、実施形態では、候補のクラスおよびメソッドに付されたスコアに基づき、クラスを移行させてもよい。例えば、最高スコアを最初に、次に２番目に高いスコアといったように移行させてもよい。逆のプロセスを用いて、例えば、移行されたクラスの中で最低スコアの移行済クラスを最初に移動させ、次に２番目に低いスコアといったように、移行済クラスおよびメソッドの数を減らしてもよい。
【００７６】
いくつかの実施形態において、クライアントデバイスを含め、候補移行位置に関する性能ファクタについて、移行スコアを計算してもよい。実施形態では、スコアを比較し、最高スコアに基づきクラスまたはメソッドを移行すると判断してもよい。
【００７７】
クライアント上で実行されるアプリケーションプログラムと移行されたクラスまたはメソッドとの間の対話は、関連オブジェクトの同期を含んでもよい。これには、例えば、移行されたメソッドによりアクセスされるメンバ変数値を示すデータを同期することを含んでもよい。図７は、分散アプリケーションにおけるオブジェクトのオブジェクトバージョントラッキングおよびコミットモデルを示すフローチャートである。一連の動作として示されているが、当業者であれば、示した順序により本開示の範囲が限定されると見なすべきでなく、示した動作の少なくともいくつかを変更し、削除し、配置換えし、追加動作で補足し、または、並行して実施してもよいと理解するであろう。
【００７８】
動作７００では、トラッキングするオブジェクトを識別する。スケジューリングモジュールは、移行されたオブジェクトを識別し、オブジェクトに対する変更をトラッキングしてもよい。この場合、移行されたオブジェクトに関連したどの移行済メソッドがオブジェクトの状態に影響を及ぼすかを、例えば、メンバ変数にどのメソッドが書き込むかを識別することで、判断することを含んでもよい。また、メンバ変数または他の共有ステートで読み出し専用動作を実施するメソッドをトラッキングしてもよい。実施形態では、メソッドまたはオブジェクトに関連するステート関連の依存関係に基づき、移行するメソッドまたはオブジェクトを優先付けしてもよい。実施形態では、当該方法を用いステートをトラッキングするオブジェクトの数を低減してもよい。
【００７９】
動作７０２では、移行済オブジェクトのローカルコピーでのステート変更に応答してベクトルクロックをアップデートすることを示す。ベクトルクロックは、ローカルでの変更またはローカルでの周知変更の累積リストを表してもよい。ローカルでの変更を表すようアップデートがなされた後、ベクトルクロックを、クライアントデバイスまたは遠隔計算ノードに転送して、オブジェクトが変更したことを示してもよい。動作７０４にこれを示す。
【００８０】
動作７０６において、アップデート済みベクトルクロックの受信者は、情報を適用して、受信者のデータコピーをアップデートし変更を反映させるべきかを判断してもよい。受信者のデータコピーに対しどの変更が適用されたかを判断するために、ベクトルクロックの受信コピーをローカルコピーと比較してもよい。
【００８１】
動作７０８では、移行されたオブジェクトに関連したデータのコピーへの変更をコミットすることを示す。これは、例えば、クライアントデバイスおよび遠隔計算ノードがオブジェクトへの変更を永続的にすることを含んでもよい。これにより、クライアントデバイスおよび遠隔計算ノードに反映され、それぞれが正確なバージョンのデータを保有するよう折り合いがついてもよい。
【００８２】
本開示の実施形態は、多様なデータベース管理システム（「ＤＢＭＳ」）タイプと併せて、用いられてもよい。ＤＢＭＳは、保存および検索動作が実行されるデータの集大成を維持するデータソフトウェアおよびハードウェアシステムである。ＤＢＭＳにおいて、データは、一般的に、キー値と追加データの間の関連性で編成される。関連性の本質は、データ集にある実世界の関連性に基づくか、任意であってもよい。ＤＢＭＳは、データ定義、クエリ、アップデートおよび管理などを含む多様な動作を実施してもよい。Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ（「ＳＱＬ」）などのクエリ言語を使って、データベースと対話を実現するＤＢＭＳもあれば、プット、ゲットなどの動作を含むＡＰＩを用いるＤＢＭＳもある。また、データベースとの対話は、ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕｇａｇｅ（「ＨＴＭＬ」）や、Ｅｘｔｅｎｄｅｄ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（「ＸＭＬ」）などの多様なプロトコルや基準に基づいてもよい。ＤＢＭＳは、ソリッドステートドライブなどの１以上の記憶デバイス上でデータを保存する働きをする記憶エンジンなど、多様なアーキテクチャコンポーネントを備えてもよい。
【００８３】
図８は、本発明の態様を実施し得る分散計算環境の実施例を示す図である。多様なユーザ８００ａは、任意のタイプの計算デバイス８０２ａを操作して、多様なクライアントアプリケーションと対話し、データセンタ８２０内の多様な計算ノード８１０ａ、８１０ｂおよび８１０ｃ上で実行するプロセスと、通信ネットワーク８０４を介して通信してもよい。また、クライアントアプリケーション８０２ｂは、ユーザの介入なしに通信してもよい。通信ネットワーク８０４は、インターネット、有線および無線ローカルエリアネットワーク、光ファイバネットワーク、衛星通信など、を含む通信技術の任意の組合せを備えてもよい。任意の数のネットワークプロトコルが使用されてもよい。
【００８４】
データセンタ８２０内で動作する計算ノード８１０ａ、８１０ｂおよび８１０ｃ上で実行するプロセスとの通信は、ゲートウェイ８０６およびルータ８０８を介して提供されてもよい。また、他の多くのネットワーク構成を使用してもよい。図８では明示していないが、多様な認証方法、ウェブサービスレイヤ、ビジネスオブジェクト、または他の中間レイヤを提供し、計算ノード８１０ａ、８１０ｂおよび８１０ｃ上で実行するプロセスとの通信を仲介してもよい。一部の中間レイヤは計算ノードのうち１以上で実行するプロセスを自身で備え得る。また、計算ノード８１０ａ、８１０ｂおよび８１０ｃ、ならびに、それらで実行するプロセスは、ルータ８０８を介して相互通信してもよい。或いは、個別の通信パスを用いてもよい。いくつかの実施形態において、データセンタ８２０を追加のデータセンタと通信するよう構成し、計算ノードおよびそれらで実行するプロセスが他のデータセンタ内で動作する計算ノードおよびプロセスと通信してもよい。
【００８５】
計算ノード８１０ａは、１以上のプロセッサ８１６、１以上のメモリ８１８、および１以上の記憶デバイス８１４を備えた物理ハードウェア上に常駐しているとして示されている。計算ノード８１０ａ上ではプロセスは、オペレーティングシステムと合わせて実行されるか、プロセッサ８１６、メモリ８１８、または記憶デバイス８１４などの物理リソースと直接対話するベアメタルプロセスとして実行されてもよい。
【００８６】
計算ノード８１０ｂおよび８１０ｃは、物理プロセッサ、メモリおよび記憶デバイスなどの多様な物理リソースへの共有アクセスを提供する仮想マシンホスト８１２上で動作するとして示されている。任意の数の仮想方法が、計算ノードをホストするために使用されてもよい。
【００８７】
図８に示す多様な計算ノードは、ウェブサービス、データベース管理システム、ビジネスオブジェクト、モニタ−診断設備などをホストするよう構成されてもよい。計算ノードは、パーソナルコンピュータ、サーバ、クラスタ計算デバイスなど、多様なタイプの計算リソースを意味してもよい。計算ノードは、例えば、携帯電話、スマートフォン、タブレット、埋め込みデバイスなど、多様な計算デバイスを意味してもよい。ハードウェア形式で実施される場合、計算ノードは一般的に、コンピュータ読取可能命令を保存するよう構成された１以上のメモリ、および、当該命令を読み出し実行するよう構成された１以上のプロセッサと関連付けられる。また、ハードウェア型計算ノードは、１以上の記憶デバイス、ネットワークインタフェース、通信バス、ユーザインタフェースデバイスなどを備えてもよい。また、計算ノードは、ハイパーバイザが有っても無くても実施される仮想マシン、仮想ベアメタル環境など、仮想計算リソースを含む。仮想型計算ノードは、ハードウェアリソースに対し非仮想アクセスだけでなく、仮想アクセスも有してもよい。計算ノードは、１以上のアプリケーションプログラムだけでなく、オペレーティングシステムも実行するよう構成されてもよい。また、いくつかの実施形態において、計算ノードは、ベアメタルアプリケーションプログラムを備えてもよい。
【００８８】
少なくともいくつかの実施形態において、本明細書で記載した技術のうち１以上の一部または全てを実施するサーバは、汎用コンピュータシステムを備えてもよく、当該汎用コンピュータシステムは、１以上のコンピュータアクセス可能媒体を備えるか当該媒体にアクセスするよう構成されてもよい。図９は、１以上のコンピュータアクセス可能媒体を備えるか当該媒体にアクセスするよう構成された汎用コンピュータシステムを示す。図に示す実施形態において、計算デバイス９００は、システムメモリ９２０に入出力（Ｉ／Ｏ）インタフェース９３０を介して接続された１以上のプロセッサ９１０ａ、９１０ｂおよび／または９１０ｎ（本明細書では、単体のプロセッサ９１０または複数のプロセッサ９１０とされる）を備える。計算デバイス９００はさらに、Ｉ／Ｏインタフェース９３０に接続されたネットワークインタフェース９４０を備える。
【００８９】
多様な実施形態において、計算デバイス９００は、１つのプロセッサ９１０を備えたユニプロセッサシステム、または複数のプロセッサ９１０（例えば、２つ、４つ、８つ、または任意の適した数）を備えたマルチプロセッサシステムであってもよい。プロセッサ９１０は、命令の実行が可能な適切な任意のプロセッサであってもよい。例えば、多様な実施形態において、プロセッサ９１０は、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、ＭＩＰＳ  ＩＳＡ、または、任意のその他適切なＩＳＡなど、任意の多様な命令セットアーキテクチャ（ＩＳＡ）を実施する、汎用プロセッサまたは埋め込みプロセッサであってもよい。マルチプロセッサシステムにおいて、各プロセッサ９１０は、一般的に、同一のＩＳＡを実施するが、必ずしも同一でなくてもよい。
【００９０】
いくつかの実施形態において、グラフィックプロセッサユニット（「ＧＰＵ」）９１２は、グラフィックレンダリングおよび／または物理的処理能力の提供に関係してもよい。ＧＰＵは、例えば、グラフィック計算専用の高並列化プロセッサアーキテクチャを備えてもよい。いくつかの実施形態において、プロセッサ９１０およびＧＰＵ９１２を、１以上の同一のデバイスタイプとして実施してもよい。
【００９１】
システムメモリ９２０は、プロセッサ９１０によりアクセス可能な命令およびデータを保存するよう構成されてもよい。多様な実施形態において、システムメモリ９２０は、Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（「ＳＲＡＭ」）、Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  ＲＡＭ（「ＳＤＲＡＭ」）、不揮発性／Ｆｌａｓｈ（登録商標）タイプメモリ、または任意の他のタイプのメモリなど、任意の適切なメモリ技術を使って実施されてもよい。図に示した実施形態において、上記のメソッド、技術、およびデータなど、１以上の所望の機能を実行するプログラム命令およびデータは、図では、システムメモリ９２０内にコード９２５およびデータ９２６として保存される。
【００９２】
１つの実施形態において、Ｉ／Ｏインタフェース９３０は、プロセッサ９１０、システムメモリ９２０、および、ネットワークインタフェース９４０または他の周辺インタフェースを含むデバイス内の任意の周辺機器との間で、Ｉ／Ｏトラフィックを調整するよう構成されてもよい。いくつかの実施形態において、Ｉ／Ｏインタフェース９３０は、任意の必要なプロトコル、タイミングまたはその他データ変換を実施して、１つのコンポーネント（例えば、システムメモリ９２０）からのデータ信号を別のコンポーネント（例えば、プロセッサ９１０）での使用に適したフォーマットに変換してもよい。いくつかの実施形態において、Ｉ／Ｏインタフェース９３０は、例えば、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス基準、または、Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ（ＵＳＢ）基準の変形などの多様な周辺バスのタイプを介して取り付けられたデバイスのサポートを含んでもよい。いくつかの実施形態において、Ｉ／Ｏインタフェース９３０の機能を、例えば、ノースブリッジとサウスブリッジなど、２以上の独立したコンポーネントに振り分けてもよい。また、いくつかの実施形態において、システムメモリ９２０へのインタフェースなど、Ｉ／Ｏインタフェース９３０の機能のうちいくつかまたは全てを、直接プロセッサ９１０に組み込んでもよい。
【００９３】
ネットワークインタフェース９４０は、例えば、他のコンピュータシステムまたはデバイスなど、あるネットワークまたはネットワーク９５０に接続された他のデバイスまたはデバイス９６０と、計算デバイス９００との間で、データ交換が可能なように構成されてもよい。多様な実施形態において、ネットワークインタフェース９４０は、例えば、Ｅｔｈｅｒｎｅｔネットワークのタイプなど、任意の適した有線または無線での一般的なデータネットワークを介して通信をサポートしてもよい。さらに、ネットワークインタフェース９４０は、アナログ音声ネットワークまたはデジタルファイバ通信ネットワークなどのテレコミュニケーション／電話ネットワークを介するか、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  ＳＡＮ（ストレージエリアネットワーク）などのストレージエリアネットワークを介するか、または、任意の他の適したタイプのネットワークおよび／またはプロトコルを介して通信をサポートしてもよい。
【００９４】
いくつかの実施形態において、システムメモリ９２０は、対応するメソッドおよび装置の実施形態を実施する、上記のようなプログラム命令およびデータを記憶するよう構成された、コンピュータアクセス可能媒体の１つの実施形態であってもよい。しかし、他の実施形態において、プログラム命令および／またはデータを、様々なタイプのコンピュータアクセス可能媒体上において受信、送信、または保存してもよい。一般的には、コンピュータアクセス可能媒体は、磁気または光媒体などで、例えば、Ｉ／Ｏインタフェース９３０を介して計算デバイス９００に接続されたディスク、またはＤＶＤ／ＣＤなどの、非一時的記憶媒体またはメモリ媒体を含んでもよい。また、非一時的コンピュータアクセス可能記憶媒体は、ＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなど、任意の揮発性または不揮発性媒体を含んでもよく、それらは、計算デバイス９００のいくつかの実施形態において、システムメモリ９２０または別のタイプのメモリとして含まれてもよい。さらに、コンピュータアクセス可能媒体は、電気信号、電磁信号またはデジタル信号などの転送媒体または転送信号を含んでもよく、当該媒体は、ネットワークインタフェース９４０を介して実施され得るようなネットワークおよび／または無線リンクなどの通信媒体を介して搬送される。図９に図示するような複数の計算デバイスの一部または全てを使って、多様な実施形態において上記の機能を実施してもよく、例えば、多様なデバイスおよびサーバ上で動作する複数のソフトウェアコンポーネントが協働して機能を提供してもよい。いくつかの実施形態において、汎用コンピュータシステムの使用による実施に追加するかそれに代えて、記憶デバイス、ネットワークデバイスまたは専用コンピュータシステムを使って、上記の機能の一部を実施してもよい。本明細書で使用するように、「計算デバイス」という用語は、少なくともこれら全てのデバイスのタイプを意味し、これらのデバイスのタイプに限定されない。
【００９５】
計算ノードは、コンピュートノードとも呼ばれ、タブレットコンピュータ、パーソナルコンピュータ、スマートフォン、ゲーム機、コモディティハードウェアコンピュータ、仮想マシン、ウェブサービス、計算クラスタ、およびコンピューティングアプライアンスなど、幅広い計算環境で実施されてもよい。これらの計算デバイスまたは環境のいずれも、便宜上、計算ノードまたはコンピュートノードと記述してもよい。
【００９６】
企業または公共組織などエンティティにより設置されたネットワークは、インターネットおよび／または他のネットワークを介してクライアント分散セットにアクセス可能な１以上のウェブサービス（多様なタイプのクラウドベースコンピューティングまたはストレージなど）を提供しており、プロバイダネットワークと呼ばれる場合がある。そういったプロバイダネットワークは、プロバイダネットワークが提供するインフラストラクチャおよびウェブサービスを実施し分散するのに必要な、物理的および／または仮想コンピュータサーバ、記憶デバイス、ネットワーク装置などの集合など、多様なリソースプールをホストする多数のデータセンタを備えてもよい。リソースは、いくつかの実施形態において、記憶用の記憶容量、処理用処理能力、インスタンス、関連サービスセットなど、ウェブサービスに関連する多様なユニット内でクライアントに提供してもよい。仮想計算インスタンスは、例えば、所定の計算能力（ＣＰＵのタイプおよび番号、メインメモリサイズなどを示すことにより指定してもよい）および所定のソフトウェアスタック（例えば、オペレーティングシステムの特定バージョンで、ハイパーバイザの上部で代わって動作してもよい）を備えた１以上のサーバを備えてもよい。
【００９７】
多数の多様な計算デバイスを単独または組み合わせて使用して、多様な実施形態において、汎用または専用コンピュータサーバ、記憶デバイス、ネットワークデバイスなどを含む、プロバイダネットワークのリソースを実施してもよい。いくつかの実施形態において、例えば、管理者ログインおよびパスワードをユーザに与えることによって、クライアントまたはユーザにリソースインスタンスへのダイレクトアクセスを提供してもよい。他の実施形態において、プロバイダネットワークのオペレータは、クライアントが所定のクライアントアプリケーションに対する実行要件を指定できるようにし、また、アプリケーションに適した実行プラットフォーム（アプリケーションサーバインスタンス、Ｊａｖａ（商標）仮想マシン（ＪＶＭ）、汎用もしくは専用オペレーティングシステム、または、Ｒｕｂｙ、Ｐｅｒｌ、ＰｙｔｈｏｎおよびＣ，Ｃ＋＋など解釈されコンパイルされた多様なプログラミング言語をサポートするプラットフォーム、または、高性能計算プラットフォーム）上で、例えば、クライアントがインスタンスまたは実行プラットフォームに直接アクセスすることなく、クライアントに代わってアプリケーションの実行をスケジュールできるようにしてもよい。提供された１つの実行プラットフォームは、いくつかの実施態様において１以上のリソースインスタンスを用いるが、他の実施態様において複数の実行プラットフォームを単一リソースインスタンスにマッピングしてもよい。
【００９８】
多くの環境において、異なるタイプの仮想計算機能、記憶機能および／または他のネットワークアクセス可能機能を実施するプロバイダネットワークのオペレータは、カスタマが多様なリソース取得モードでリソースへのアクセス権を確保または購入できるようにしてもよい。計算リソースプロバイダは設備を提供し、カスタマが所望の計算リソースを選択起動し、計算リソースにアプリケーションコンポーネントを配置し、環境で実行するアプリケーションを維持できるようにしてもよい。また、計算リソースプロバイダはさらに設備を提供し、カスタマが迅速かつ簡単に、アプリケーションに割り当てられたリソース数およびタイプを、アプリケーション変更の必要性に応じまたは必要容量に応じて手動または自動スケーリングで、拡張または縮小できるようにしてもよい。計算リソースプロバイダが提供する計算リソースは、インスタンスと呼ばれる個別のユニットごとに利用可能にしてもよい。インスタンスは、物理サーバハードウェアプラットフォーム、サーバ上で実行される仮想マシンインスタンス、またはこの２つの組合せを表してもよい。利用可能なインスタンスには、多様なタイプおよび構成のインスタンスがあってよく、多様なインストール済ソフトウェアアプリケーション、ランタイムなどを有した、異なるオペレーティングシステムおよび／またはハイパーバイザを実行する異なるサイズのリソースを含む。インスタンスを、さらに、例えば、基盤となる計算ハードウェアの、論理領域、フォルトトレラント領域、データセンタまたは他の地理的位置を表した所定の可用ゾーンで利用可能にしてもよい。１つの可用ゾーン内でまたは複数の可用ゾーンの全域でコピーを作成してインスタンスの冗長性を向上させ、インスタンスを１つの特定の可用ゾーン内または複数の可用ゾーンの全域で移動させてもよい。一実施例として、ある可用ゾーンでの特定サーバとのクライアント通信のレイテンシは、別のサーバとのクライアント通信のレイテンシ未満である場合がある。この場合、インスタンスを高レンテンシサーバから低レイテンシサーバに移動させ、全体的なクライアントの体験を向上させてもよい。
【００９９】
いくつかの実施形態において、プロバイダネットワークを複数の地理的領域に組織し、各領域は１以上の可用ゾーンを備えてもよい。代わりに可用ゾーン（可用コンテナと呼ばれることもある）が、所定の可用ゾーンのリソースを他の可用ゾーンでの故障から切り離すか隔離するよう構成された、１以上の明確な位置またはデータセンタを備えてもよい。つまり、１つの可用ゾーンでの故障が任意の他の可用ゾーンでの故障に繋がらないようしてもよい。このため、リソースインスタンスの可用性プロファイルが、別の可用ゾーンにおけるリソースインスタンスの可用性プロファイルとは無関係となるようにする。クライアントは、それぞれの可用ゾーンにおいて複数のアプリケーションインスタンスを起動して、１カ所の故障から自身のアプリケーションを守ることができてもよい。同時に、いくつかの実施態様において、安価で低レイテンシであるネットワーク接続を、同一の地理的領域にあるリソースインスタンス間に提供してもよい（同一可用ゾーンのリソース間でのネットワーク転送であればより速い）。
【０１００】
前項までに説明した各プロセス、メソッドおよびアルゴリズムを、１以上のコンピュータまたはコンピュータプロセッサにより実行されるコードモジュールに具現化し、当該コードモジュールにより全てまたは一部を自動化してもよい。コードモジュールを、ハードドライブ、ソリッドステートメモリ、および／または光ディスクなど、任意のタイプの非一時的コンピュータ読取可能媒体またはコンピュータ記憶装置に、保存してもよい。プロセスおよびアルゴリズムを、特定用途向け回路で部分的にまたは全体を実施してもよい。本開示のプロセスおよびプロセスステップの結果を、例えば、揮発性または非揮発性ストレージなど任意のタイプの非一時的コンピュータストレージに永久的に或いはそうでなくても保存してもよい。
【０１０１】
上記の多様な機能およびプロセスを互いに無関係に用いるか、多様な方法に組合せてもよい。あらゆる可能な組合せおよびサブコンビネーションは本開示の範囲に該当するものである。さらに、いくつかの実施態様において、所定のメソッドまたはプロセスブロックを除いてもよい。また、本明細書で説明したメソッドおよびプロセスは、任意の特定のシーケンスに限定されるものではなく、メソッドおよびプロセスに関連するブロックまたはステートを、適切な他のシーケンスで実施することも可能である。例えば、説明したブロックまたはステートを、明確に開示した方法とは違う順序で実施してもよく、複数のブロックまたはステートを１つのブロックまたはステートに組み合わせてもよい。例示的なブロックまたはステートを、逐次、並行にまたは他の方法で実施してもよい。ブロックまたはステートを本開示の例示的な実施形態に追加、または当該実施形態から外してもよい。本開示の例示的なシステムおよびコンポーネントは、本開示内容とは違って構成されてもよい。例えば、要素を本開示の例示的な実施形態に追加し、当該実施形態から外し、または当該実施形態と比較して再配置してもよい。
【０１０２】
使用の際に多様なアイテムをメモリにまたはストレージ上に保存するよう示しているが、これらのアイテムまたはその一部を、メモリ管理およびデータ保全のため、メモリと他の記憶デバイスとの間で移動させてもよいことも、理解されよう。或いは、他の実施形態において、ソフトウェアモジュールおよび／またはシステムのいくつかまたは全ては、別のデバイスのメモリで実行され、コンピュータ間通信を介して、示した計算システムと通信してもよい。さらに、いくつかの実施例において、システムおよび／またはモジュールのいくつかまたは全てを、少なくとも部分的にファームウェアおよび／またはハードウェアなど（例えば、１以上の特定用途向け集積回路（ＡＳＩＣ）、標準的な集積回路、制御装置（例えば、マイクロコントローラおよび／または埋め込み型制御装置などを含み、適切な命令を実行することによる）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、コンプレックスプログラマブルロジックデバイス（ＣＰＬＤ）などを含むが、これらに限定されない）において、他の方法で実施または提供してもよい。また、モジュール、システムおよびデータ構造のいくつかまたは全てを、適切なデバイスに読み出されるか適切な接続を介して読み出されるハードディスク、メモリ、ネットワークまたはポータブルメディアなど、コンピュータ読取可能媒体に（例えば、ソフトウェア命令または構造化データとして）保存されてもよい。また、システム、モジュールおよびデータ構造は、無線式媒体および有線／ケーブル式媒体を含む多様なコンピュータ読取可能転送媒体上で生成されたデータ信号として（例えば、搬送波の一部、または他のアナログもしくはデジタル伝播信号として）転送されてもよく、多様な形式であってもよい（例えば、単一もしくは多重化アナログ信号の一部として、または、複数の個別デジタルパケットもしくはフレームとして）。また、そういったコンピュータプログラム製品は、他の実施形態において他の形式をとってもよい。従って、本発明を他のコンピュータシステム構成で実施してもよい。
【０１０３】
特に「ｃａｎ」、「ｃｏｕｌｄ」、「ｍｉｇｈｔ」、「ｍａｙ」、「ｅ．ｇ．」など本明細書で使用する条件語は、明確に指定しない限り、または、使用される文脈で理解される場合を除き、他の実施形態では含まないこともあるが、所定の実施形態では所定の機能、要素および／またはステップを含むことを一般的に伝えるものとする。このため、このような条件語は、機能、要素および／またはステップが１以上の実施形態において何らかの形で要求されると一般的に示すものではなく、また、これらの機能、要素および／またはステップが含まれるかどうか、もしくは任意の特定の実施形態において実施されるかどうかを、オーサの入力または催促があろうとなかろうと、判断する際のロジックを、１以上の実施形態が必ず備えると一般的に示すものでもない。「ｃｏｍｐｒｉｓｉｎｇ」、「ｉｎｃｌｕｄｉｎｇ」、「ｈａｖｉｎｇ」などの用語は、同じ意味であり、包含的で非限定的に使用されるものであり、追加的な要素、機能、作動、動作などを除外しない。また、「ｏｒ」という用語を含むという意味で使用し（排他的な意味ではない）、例えば、要素のリストをつなげるのに使用される場合、「ｏｒ」という用語は、リストの中に１つ、いくつか、または全ての要素を意味する。
【０１０４】
所定の例示的な実施形態を説明してきたが、これらの実施形態は単に例として提示しており、本開示の発明の範囲を限定する意図は無い。このため、これまでの説明において、任意の特定の機能、特性、ステップ、モジュールまたはブロックが必要でもなく、必要不可欠でもないのを示すことを意図しない。実際、本明細書で説明した新規性のあるメソッドおよびシステムを、多様な他の形式で具現化してもよく、さらに、開示した本発明の精神から逸脱する事無く、本明細書で説明したメソッドおよびシステムの形式に様々な省略、代替、および変更を行ってもよい。添付の請求項および同等内容は、本明細書に開示された発明の所定の範囲および意図に該当するためにそういった形式または変形を含むものとする。
【０１０５】
本開示の実施形態は、以下の条項を考慮しても説明可能である。
１．計算デバイスは、
前記計算デバイスを遠隔計算ノードに通信可能に接続するネットワークインタフェース、および
コンピュータ読取可能命令を記憶した１以上のメモリを備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記計算デバイスは少なくとも、
前記計算デバイス上で、第一機能を含む複数の機能を備えるアプリケーションプログラムの実行を開始し、前記アプリケーションプログラムの第一コピーは、前記計算デバイスに保存され、前記アプリケーションプログラムの第二コピーは前記遠隔計算ノードに保存され、
前記遠隔計算ノード上で実行する前記複数の機能のうち前記第一機能を選択し、前記選択は、前記遠隔計算ノード上で前記第一機能を実行する優先度が前記遠隔計算ノード上で前記複数の機能のうち第二機能を実行する第二優先度より高いことを示す情報に少なくとも部分的に基づき、また、前記第一機能を実行する前記計算デバイスの能力または環境を示す情報に少なくとも部分的に基づき、および、
前記遠隔計算ノードから、前記遠隔計算ノード上での前記第一機能の実行結果を示す情報を受信することを含む、前記計算デバイス。
【０１０６】
２．コンピュータ読取可能命令を記憶した１以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記計算デバイスは少なくとも、
前記遠隔計算ノード上で前記第一機能を実行する前記優先度を、前記計算デバイスの前記能力を示す前記情報に少なくとも部分的に基づき再計算し、および、
前記遠隔計算ノード上で前記第一機能を実行する前記再計算済優先度に少なくとも部分的に基づき、前記遠隔計算ノード上で前記アプリケーションプログラムの第二機能を実行するよう判断する、条項１に記載の計算デバイス。
【０１０７】
３．コンピュータ読取可能命令を記憶した１以上のメモリをさらに備え、前記１以上の計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記計算デバイスは少なくとも、
前記第一機能を実行する前記遠隔計算ノードの能力を示す情報に少なくとも部分的に基づき、前記計算デバイス上で前記第一機能を実行するよう判断する、条項１に記載の計算デバイス。
【０１０８】
４．前記計算デバイスから離れた前記計算ノード上で前記第一機能を実行する優先度を示す前記情報は、前記第一機能のハードウェアデバイスの依存関係に少なくとも部分的に基づく、条項１に記載の計算デバイス。
【０１０９】
５．方法では、
第一計算ノード上で、第一機能を含む複数の機能を備えるプログラムの実行を開始し、
前記第一計算ノードから離れた第二計算ノード上での前記第一機能の実行を示す情報を処理し、前記情報は、前記第一計算ノードに代わり前記第二計算ノード上で前記第一機能を実行する優先度を示し、前記優先度は、前記第二計算ノード上で前記複数の機能のうち他の機能を実行する前記優先度に比較され、
前記第二計算ノード上で前記第一機能を実行するよう判断し、前記判断は、前記第二計算ノード上で前記第一機能を実行する優先度を示す前記情報に少なくとも部分的に基づき、また、前記第一機能を実行する前記第一計算ノードの能力を示す情報に少なくとも部分的に基づき、
前記第一機能を前記第二計算ノード上で実行させ、
前記第一機能を実行する前記第二計算ノードの前記能力を示す追加情報の受信に少なくとも部分的に基づき、前記第一計算ノード上で前記第一機能を実行するよう判断し、および
前記第一機能を前記第一計算ノード上で実行させることを含む、前記方法。
【０１１０】
６．前記第一計算ノードの性能特性のモニタリングに少なくとも部分的に基づき、前記第二計算ノード上で前記プログラムの第二機能を実行するようさらに判断することをさらに含む、条項５に記載の方法。
【０１１１】
７．前記第二計算ノード上での前記第一機能の実行を示す前記情報は、前記第一機能のステート特性を示す値を備える、条項５に記載の方法。
【０１１２】
８．前記第二計算ノード上での前記第一機能の実行を示す前記情報は、前記第一機能のデバイスの依存関係を示す値を備える、条項５に記載の方法。
【０１１３】
９．前記第二計算ノード上での前記第一機能の実行を示す前記情報は、前記第一機能が前記第二計算ノード上での実行候補であるとの開発者による示唆に対応する、条項５に記載の方法。
【０１１４】
１０．前記第一計算ノードに保持されるメンバデータの第一コピーを、前記第二計算ノードに保持される前記メンバデータの第二コピーとさらに同期させ、前記メンバデータは前記第一機能の実行時に参照される、条項５に記載の方法。
【０１１５】
、
１１．前記追加情報は、少なくとも１つの前記第二計算ノードまたは前記第一計算ノードと前記第二計算ノードとの接続の、性能特性に対する変更に対応する、条項５に記載の方法。
【０１１６】
１２．前記第二計算ノード上での前記第一機能の実行する優先度を示す前記情報は、少なくとも１つの前記第一計算ノードの性能、前記第二計算ノードの性能、および、ネットワーク性能の、少なくとも一部に基づき計算された値である、条項５に記載の方法。
【０１１７】
１３．前記第二計算ノード上で前記第一機能を実行する優先度を示す前記情報は、前記プログラムの少なくとも１つの発行者またはユーザに対する費用に少なくとも部分的に基づき計算された値であり、前記費用は、前記第一機能の実行に使用可能な計算リソースに少なくとも部分的に基づく、条項５に記載の方法。
【０１１８】
１４．命令を記憶した非一時的コンピュータ読取可能記憶媒体において、１以上の計算デバイスによる実行時、前記命令により前記１以上の計算デバイスは少なくとも、
複数の機能を備えるプログラムの第一機能に対応する情報を処理し、前記プログラムは第一計算ノード上で実行し、前記情報は第二計算ノード上での前記第一機能の実行の適否を示し、
前記第一機能を実行する前記第一計算ノードの能力を判断し、
前記第二計算ノード上で前記第一機能を実行するよう判断し、前記判断は、前記第一機能が前記第二計算ノード上で実行されてもよいことを示し、前記第一機能を実行する前記第一計算ノードの前記能力を示す前記情報に少なくとも部分的に基づき、および、
前記第一計算ノード上で動作する第二機能から前記第二計算ノード上で動作する前記第一機能への前記プログラムのステート情報の転送に少なくとも部分的に基づき、前記第一機能を前記第二計算ノード上で実行させる、前記非一時的コンピュータ読取可能記憶媒体。
【０１１９】
１５．命令をさらに備え、前記１以上の計算デバイスによる実行時、前記命令により前記１以上の計算デバイスは少なくとも、
前記第一機能のパラメータに対応するデータを前記第一計算ノードから前記第二計算ノードに転送させ、および、
前記第一機能の実行結果に対応するデータを前記第二計算ノードから前記第一計算ノードに転送させる、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１２０】
１６．命令をさらに備え、前記１以上の計算デバイスによる実行時、前記命令により前記１以上の計算デバイスは少なくとも、
前記第一機能を実行する前記第一計算ノードの前記能力と前記第一機能を実行する前記第二計算ノードの能力との比較に少なくとも部分的に基づき、前記第一機能を前記第一計算ノード上で実行させる、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１２１】
１７．命令をさらに備え、前記１以上の計算デバイスによる実行時、前記命令により前記１以上の計算デバイスは少なくとも、
前記第一計算ノードで保持されるメンバデータの第一コピーを前記第二計算ノードで保持される前記メンバデータの第二コピーと同期し、前記メンバデータは前記第一機能の実行時参照される、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１２２】
１８．命令をさらに備え、前記１以上の計算デバイスによる実行時、前記命令により前記１以上の計算デバイスは少なくとも、
前記第一計算ノードの性能特性のモニタリングに少なくとも部分的に基づき、前記第二計算ノード上で前記プログラムの追加機能を実行するよう判断する、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１２３】
１９．前記第二計算ノード上で前記第一機能を実行する適否は、少なくとも１つのアノテーションまたは属性に少なくとも部分的に基づく、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１２４】
２０．前記第二計算ノードは、前記第一計算ノードの実行環境に対応する仮想マシンを備える、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１２５】
２１．方法では、
第一機能を備えたプログラムを実行する第一計算ノードから、前記第一計算ノードから離れた第二計算ノードへの移行候補である前記第一機能を示す情報を処理し、前記第一機能の移行では前記第二計算ノード上で前記第一機能を実行し、
前記第一機能の依存関係を解析し、依存関係の解析では、前記第一機能により呼び出される追加方法を識別し、前記第一機能および前記追加方法により使用されるデータを識別し、前記第一機能および前記追加方法により使用されるハードウェアを識別し、
前記第一機能を前記第一計算ノードから前記第二計算ノードに移行する優先度を示す値を生成し、および、
前記値と前記第一機能の間の関連付けを保存することを含む、前記方法。
【０１２６】
また、本開示の実施形態は、以下の条項を考慮しても説明可能である。
１．システムは、
クライアントデバイスに通信可能に接続された第一計算ノード、および
コンピュータ読取可能命令を記憶した１以上のメモリを備え、計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記計算デバイスは少なくとも、
仮想マシンインスタンスにアクセス可能な記憶デバイスにアプリケーションプログラムのコピーを保存し、前記アプリケーションプログラムの前記コピーはクライアントデバイス上で実行可能な前記アプリケーションプログラムのインスタンスに対応し、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの第一部を実行するよう判断し、前記判断では、前記第一計算ノードの第一性能特性と前記クライアントデバイスの第二性能特性との比較に少なくとも部分的に基づき、前記アプリケーションプログラムの前記第一部は、他の部分と比較した、前記仮想マシンインスタンス上で実行する前記第一部の適否に少なくとも部分的に基づき、前記アプリケーションプログラムの複数の部分から選択され、
前記アプリケーションプログラムの前記第一コピーに少なくとも部分的に基づき、前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部を実行し、および、
前記アプリケーションプログラムの前記第一部の実行結果を、前記アプリケーションプログラムの第二部による処理のため前記クライアントデバイスに転送することを含む、前記システム。
【０１２７】
２．コンピュータ読取可能命令を記憶した１以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記システムは少なくとも、
前記クライアントデバイスの動作特性が前記仮想マシンインスタンスの動作特性と同等であるとの判断に少なくとも部分的に基づき、前記仮想マシンインスタンスを選択する、条項１に記載のシステム。
【０１２８】
３．コンピュータ読取可能命令を記憶した１以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記システムは少なくとも、
前記アプリケーションプログラムがクライアントデバイスにダウンロードされた回数に少なくとも部分的に基づき、インスタンス化された前記仮想マシンを確保する、条項１に記載のシステム。
【０１２９】
４．コンピュータ読取可能命令を記憶した１以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記システムは少なくとも、
前記第二性能特性を有するクライアントデバイスの予期数に少なくとも部分的に基づき、前記仮想マシンを確保する、条項１に記載のシステム。
【０１３０】
５．コンピュータ読取可能命令を記憶した１以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記システムは少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの第三部を実行する費用に少なくとも部分的に基づき、前記クライアントデバイス上で前記アプリケーションプログラムの前記第三部を実行するよう判断する、条項１に記載のシステム。
【０１３１】
６．コンピュータ読取可能命令を記憶した１以上のメモリをさらに備え、前記計算デバイスによる実行時に、前記コンピュータ読取可能命令により前記システムは少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部の実行を、前記アプリケーションプログラムの前記第一部を実行する費用に少なくとも部分的に基づき、停止するよう判断する、条項１に記載のシステム。
【０１３２】
７．アプリケーションプログラムを実行するコンピュータ実施方法では、
コンピュータにより、仮想マシンインスタンス上でアプリケーションプログラムの第一部を実行するよう判断し、前記アプリケーションプログラムのインスタンスは、また、クライアントデバイス上で実行しており、前記判断では、前記クライアントデバイスの第一特性と前記仮想マシンインスタンスの第二特性との比較に少なくとも部分的に基づき、前記アプリケーションプログラムの前記第一部は、前記アプリケーションプログラムの複数の部分から、前記コンピュータにより選択され、
前記アプリケーションプログラムの第一コピーに少なくとも部分的に基づき、前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部を実行し、および、
前記クライアントデバイス上で実行する前記アプリケーションプログラムの第二部により処理される前記アプリケーションプログラムの前記第一部の実行結果を返す、前記コンピュータ実施方法。
【０１３３】
８．前記クライアントデバイスの特性と前記仮想マシンインスタンスの特性とのマッチングに少なくとも部分的に基づき、前記仮想マシンインスタンスを選択することをさらに含む、条項７に記載のコンピュータ実施方法。
【０１３４】
９．前記クライアントデバイスにダウンロードされる前記アプリケーションプログラムの前記第一コピーに少なくとも部分的に基づきインスタンス化された前記仮想マシンを確保することをさらに含む、条項７に記載のコンピュータ実施方法。
【０１３５】
１０．前記クライアントデバイスの前記第一特性を有するクライアントデバイスの割合に少なくとも部分的に基づき、前記仮想マシンインスタンスを確保することをさらに含む、条項９に記載のコンピュータ実施方法。
【０１３６】
１１．前記仮想マシンインスタンス上で前記アプリケーションプログラムの第三部を実行する費用に少なくとも部分的に基づき、前記クライアントデバイス上で前記アプリケーションプログラムの前記第三部を実行するよう判断することをさらに含む、条項７に記載のコンピュータ実施方法。
【０１３７】
１２．前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部の実行を、前記アプリケーションプログラムの前記第一部を実行する費用に少なくとも部分的に基づき、停止するよう判断することをさらに含む、条項７に記載のコンピュータ実施方法。
【０１３８】
１３．前記仮想マシンインスタンスは物理計算デバイスをシミュレーションする、条項７に記載のコンピュータ実施方法。
【０１３９】
１４．命令を記憶した非一時的コンピュータ読取可能記憶媒体において、計算デバイスによる実行時、前記命令により前記計算デバイスは少なくとも、
第一計算ノードに仮想マシンインスタンスを実行させ、
前記第一計算ノードから離れた第二計算ノード上でのアプリケーションプログラムの実行を示す情報を受信し、前記アプリケーションプログラムは第一部および第二部を備え、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部を実行するよう判断し、前記判断は、前記第一計算ノードの第一特性と前記第二計算ノードの第二特性との比較に少なくとも部分的に基づき、前記第一部は、前記アプリケーションプログラムの他部分に比較した、前記仮想マシンインスタンス上で実行する前記第一部の適否に少なくとも部分的に基づき、前記アプリケーションプログラムの複数部分から選択され、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部を実行し、および、
前記アプリケーションプログラムの前記第一部の実行結果を、前記アプリケーションプログラムの前記第二部による処理のため前記第二計算ノードに転送する、前記非一時的コンピュータ読取可能記憶媒体。
【０１４０】
１５．前記仮想マシンインスタンスは、中間言語命令を実行するよう動作可能である、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１４１】
１６．命令をさらに備え、前記１以上の計算デバイスによる実行時、前記命令により前記１以上の計算デバイスは少なくとも、
前記第二計算ノードの特性と前記仮想マシンインスタンスの特性とのマッチングに少なくとも部分的に基づき、前記仮想マシンインスタンスを選択する、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１４２】
１７．命令をさらに備え、前記１以上の計算デバイスによる実行時、前記命令により前記１以上の計算デバイスは少なくとも、
前記第二計算ノードにダウンロードされる前記アプリケーションプログラムのコピーに少なくとも部分的に基づきインスタンス化された前記仮想マシンを確保する、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１４３】
１８．命令をさらに備え、前記１以上の計算デバイスによる実行時、前記命令により前記１以上の計算デバイスは少なくとも、
前記第二計算ノードの前記第二特性を有する計算ノードの割合に少なくとも部分的に基づき、前記仮想マシンインスタンスを確保する、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１４４】
１９．命令をさらに備え、前記１以上の計算デバイスによる実行時、前記命令により前記１以上の計算デバイスは少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの第三部を実行する費用に少なくとも部分的に基づき、前記第二計算ノード上で前記アプリケーションプログラムの前記第三部を実行するよう判断する、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１４５】
２０．命令をさらに備え、前記１以上の計算デバイスによる実行時、前記命令により前記１以上の計算デバイスは少なくとも、
前記仮想マシンインスタンス上で前記アプリケーションプログラムの前記第一部の実行を、前記アプリケーションプログラムの前記第一部を実行する費用に少なくとも部分的に基づき、停止するよう判断する、条項１４に記載の非一時的コンピュータ読取可能記憶媒体。
【０１４６】
２１．前記仮想マシンインスタンスは、物理計算デバイスをシミュレーションする、条項１４に記載のコンピュータ読取可能媒体。
【図１Ａ】
0006385471.tif 000002
【図１Ｂ】
0006385471.tif 000003
【図２】
0006385471.tif 000004
【図３】
0006385471.tif 000005
【図４】
0006385471.tif 000006
【図５】
0006385471.tif 000007
【図６】
0006385471.tif 000008
【図７】
0006385471.tif 000009
【図８】
0006385471.tif 000010
【図９】
0006385471.tif 000011