(57)【要約】第１のサービスハブに位置するプログラムコード関数のインスタンスに対する関数チェックポイントを作成し、関数チェックポイントを使用して、第２のサービスハブにプログラムコード関数のインスタンスをロードする技術が説明される。例示的な方法は、第１のサービスハブのメモリにロードされたプログラムコード関数のインスタンスに対する関数チェックポイントを作成することを含んでよく、関数チェックポイントは、プログラムコード関数のインスタンスのための実行命令及び実行状態データを含んでよい。ローカルデバイスネットワークに含まれる第２のサービスハブが識別されてよく、関数チェックポイントは、関数チェックポイントを使用して、第２のサービスハブにロードされるプログラムコード関数のインスタンスの実行を可能にするために第２のサービスハブに送信されてよい。【選択図】図１Ａ
2021518018.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサによる実行時に、前記システムに、
第１のサービスハブにおいてプログラムコード関数を受け取ることであって、前記第１のサービスハブが、複数のサービスハブと、前記複数のサービスハブによって提供されるサービスにアクセスするために前記複数のサービスハブに接続する複数の接続デバイスとを含むローカルデバイスネットワークに含まれる、前記受け取ることと、
前記第１のサービスハブ上で前記プログラムコード関数のインスタンスを実行する命令を受け取ることと、
前記第１のサービスハブで前記プログラムコード関数の前記インスタンスの実行を一時停止することと、
前記第１のサービスハブの少なくとも１つのメモリデバイスから前記プログラムコード関数の前記インスタンスに対する実行命令及び実行状態データを取得することと、
前記プログラムコード関数の前記インスタンスに対する前記実行命令及び前記実行状態データを含む関数チェックポイントを作成することと、
前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データに部分的に基づいて、第２のサービスハブで前記プログラムコード関数の前記インスタンスを実行するために利用可能である前記ローカルデバイスネットワークに含まれる前記第２のサービスハブを識別することと、
前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データを使用して、前記プログラムコード関数の前記インスタンスの前記実行状態のロードを可能にするために、前記第１のサービスハブから前記第２のサービスハブに前記関数チェックポイントを送信することと、
を行わせる命令を含む、前記少なくとも１つのメモリデバイスと
を備える、前記システム。
【請求項２】
前記メモリデバイスが、前記少なくとも１つのプロセッサによる実行時に、前記システムに、
前記第１のサービスハブでの前記プログラムコード関数の前記インスタンスの実行に関係するメタデータを取得すること、
前記関数チェックポイントとともに前記メタデータを含むこと、
を行わせる命令をさらに含む、請求項１に記載のシステム。
【請求項３】
前記第２のサービスハブが、
前記第１のサービスハブから前記関数チェックポイントを受け取り、
前記第２のサービスハブに位置する永続記憶装置に前記関数チェックポイントを格納し、
前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データを使用して、前記第２のサービスハブのメモリに前記プログラムコード関数の前記インスタンスの前記実行状態をロードする、請求項１に記載のシステム。
【請求項４】
コンピュータ実装方法であって、
ローカルデバイスネットワークに含まれる第１のサービスハブでプログラムコード関数のインスタンスを実行する命令を受け取ることであって、前記ローカルデバイスネットワークが、複数のサービスハブと、複数の接続デバイスとを含み、前記複数の接続デバイスが、前記複数のサービスハブによって提供されるサービスにアクセスするために前記複数のサービスハブに接続する、前記受け取ることと、
前記第１のサービスハブのメモリにロードされた前記プログラムコード関数の前記インスタンスに対する関数チェックポイントを作成することであって、前記関数チェックポイントが、前記プログラムコード関数の前記インスタンスに対する実行命令及び実行状態データを含む、前記作成することと、
前記ローカルデバイスネットワークに含まれる第２のサービスハブを識別することと、
前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データに部分的に基づいて、前記プログラムコード関数の前記インスタンスの実行を前記第２のサービスハブで実行できるようにするために、前記第２のサービスハブに前記関数チェックポイントを送信することと
を含む、前記コンピュータ実装方法。
【請求項５】
前記第１のサービスハブで前記プログラムコード関数の前記インスタンスの実行を一時停止させることと、
前記第１のサービスハブの前記メモリから前記実行命令及び前記実行状態データを取り出すことと
をさらに含む、請求項４に記載の方法。
【請求項６】
関数タイプ、関数実行状態、または関数完了状態を含む選択基準を使用して、前記第２のサービスハブに移動させる前記プログラムコード関数の前記インスタンスを選択することをさらに含む、請求項４に記載の方法。
【請求項７】
前記ローカルデバイスネットワークに含まれる前記第２のサービスハブを識別することが、前記プログラムコード関数の前記インスタンスをホストするために前記第２のサービスハブを割り当てる移行構成ファイルを参照することをさらに含む、請求項４に記載の方法。
【請求項８】
前記ローカルデバイスネットワークに含まれる前記第２のサービスハブを識別することが、前記第２のサービスハブの計算負荷に部分的に基づいて、前記第２のサービスハブを識別することをさらに含む、請求項４に記載の方法。
【請求項９】
前記関数チェックポイントを作成することが、前記プログラムコード関数の前記インスタンスを実行するための隔離された環境を提供するソフトウェアコンテナの画像を作成することをさらに含む、請求項４に記載の方法。
【請求項１０】
前記関数チェックポイントを作成することが、前記第２のサービスハブの永続記憶装置へのバックアップのために前記関数チェックポイントを定期的に作成することをさらに含む、請求項４に記載の方法。
【請求項１１】
前記第２のサービスハブに前記関数チェックポイントを送信することが、サービスプロバイダ環境のチェックポイントストレージに前記関数チェックポイントを送信することをさらに含み、
前記関数チェックポイントが、前記第２のサービスハブによって前記サービスプロバイダ環境の前記チェックポイントストレージから取り出し可能である、請求項４に記載の方法。
【請求項１２】
前記関数チェックポイントを作成し、前記第２のサービスハブに前記関数チェックポイントを送信することが、
前記第１のサービスハブの揮発性メモリに前記関数チェックポイントを作成することと、
ネットワークを介して前記第２のサービスハブに前記関数チェックポイントを送信することであって、前記第２のサービスハブが、前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データを使用して前記第２のサービスハブの揮発性メモリに前記プログラムコード関数の前記インスタンスをロードする、前記送信することと
をさらに含む、請求項４に記載の方法。
【請求項１３】
システムであって、
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサによる実行時に、前記システムに、
複数のサービスハブと、前記複数のサービスハブによって提供されるサービスにアクセスするために前記サービスハブに接続する複数の接続デバイスとを含むローカルデバイスネットワークに含まれる第１のサービスハブでプログラムコード関数のインスタンスを呼び出すことと、
前記第１のサービスハブで前記プログラムコード関数の前記インスタンスの実行を一時停止することと、
前記プログラムコード関数の前記インスタンスに対する実行命令、実行状態データ、及び関数メタデータを取得することと、
前記実行命令、前記実行状態データ、及び前記関数メタデータを含む関数チェックポイントを作成することと、
サービスプロバイダ環境に格納されるように、かつ、前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データに部分的に基づいて、第２のサービスハブが前記第２のサービスハブで前記プログラムコード関数の前記インスタンスを実行できるようにすることにより、前記関数チェックポイントを取り出すことを可能にするように、前記サービスプロバイダ環境に前記関数チェックポイントを送信することと、
を行わせる命令を含む、少なくとも１つのメモリデバイスと
を備える、前記システム。
【請求項１４】
前記関数チェックポイントが、前記サービスプロバイダ環境で前記第２のサービスハブの状態を表すために使用されるデバイス表現に保存され、
前記第２のサービスハブが前記デバイス表現から前記関数チェックポイントを取り出す、請求項１３に記載のシステム。
【請求項１５】
前記第２のサービスハブが、前記サービスプロバイダ環境に位置するコンピューティングインスタンスであり、
前記プログラムコード関数の前記インスタンスの前記実行状態が、前記コンピューティングインスタンスにロードされる、請求項１３に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
電子デバイス及びコンピューティングシステムは、社会のさまざまな側面にたえず存在するようになってきた。デバイスは、職場で、家庭で、または学校で見つけられ得る。コンピューティングシステムは、データを処理し、格納するためにコンピューティングシステム及びデータストレージシステムを含む場合がある。いくつかのコンピューティングシステムは、全体的なコストを削減し、可用性を向上させ、拡張性を向上させ、新しいアプリケーションの展開にかかる時間を短縮させ得るサービスプロバイダ環境として知られる集中型の仮想コンピューティングオプションの提供を開始している。
【０００２】
通信技術の進歩により、比較的に単純な電子デバイスでさえ、デバイスネットワークに含まれる他のデバイスまたはコンピューティングシステムと通信できるようになった。例えば、モノのインターネット（ＩｏＴ）は、インターネットインフラストラクチャを使用して世界中に散在するコンピューティングデバイスを相互接続している。そのようなデバイスは、データを取り込み、ネットワークを介してサービスプロバイダ環境（例えば、「クラウド」環境）の集中コンピューティングサービスにデータを安全に通信し得る。一実施例では、デバイスは、ローカルデバイスネットワーク内のサービスハブまたはコンピューティングノードにデータを送信し得、サービスハブは、デバイスから受信したデータをサービスプロバイダ環境の集中コンピューティングサービスに転送し得る。さらに、サービスハブは、サービスハブに接続されたデバイスにデータ集約、ローカルコンピューティング、メッセージング、または他のサービスなどのサービスを提供し得る。
【図面の簡単な説明】
【０００３】
【図１Ａ】ソースサービスハブに関数チェックポイントを生成し、関数チェックポイントを使用して、宛先サービスハブにプログラムコード関数のインスタンスを転送するための例示的なシステム及び方法を示す。
【図１Ｂ】ソースサービスハブから宛先サービスハブに関数チェックポイントを転送するための例示的なシステム及び方法の図である。
【図２】ソースサービスハブに関数チェックポイントを生成し、サービスプロバイダ環境を介して宛先サービスハブに関数チェックポイントを提供するための例示的なシステム及び方法の図である。
【図３】ソースサービスハブに関数チェックポイントを生成し、サービスプロバイダ環境のコンピューティングインスタンスに関数チェックポイントを送信するための例示的なシステム及び方法を示す。
【図４Ａ】サービスハブに関数チェックポイントを配布するためのシステムに含まれるさまざまな例示的な構成要素を示すブロック図である。
【図４Ｂ】プログラムコード関数のインスタンスの実行状態を保存するために使用し得る関数チェックポイントを示す。
【図５】利用可能なサービスハブに関数チェックポイントを送信する方法、またはサービスハブが利用できないときにサービスプロバイダ環境に関数チェックポイントを送信するための例示的な方法を示す流れ図である。
【図６】第１のサービスハブで関数チェックポイントを作成し、プログラムコード関数のインスタンスが、関数チェックポイントを使用して第２のサービスハブ上で再開できるように、第２のサービスハブに関数チェックポイントを送信するための例示的な方法を示す流れ図である。
【図７】デバイスサービスネットワークのための例示的なコンピュータネットワーキングアーキテクチャを示すブロック図である。
【図８】例示的なサービスプロバイダ環境を示すブロック図である。
【図９】サービスハブに関数チェックポイントを配布するための方法を実行するために使用し得るコンピューティングデバイスの例を示すブロック図である。
【発明を実施するための形態】
【０００４】
ソースサービスハブに位置するプログラムコード関数のインスタンスに対する関数チェックポイントを作成し、関数チェックポイントを使用して宛先サービスハブ上でプログラムコード関数のインスタンスを実行するための技術が説明される。サービスハブは、複数の接続デバイスも含むローカルデバイスネットワークに含まれてよい。サービスハブは、ローカルデバイスネットワークに含まれる接続デバイスにサービスを提供し、サービスプロバイダ環境（例えば、「クラウド」環境）に含まれるコンピューティングシステムと通信するように構成されたコンピューティングデバイスであってよい。例えば、サービスハブは、メッセージサービス、プログラムコード関数サービス、デバイスシャドーイングサービス、及びユーザーが開発したサービスを含むが、これに限定されるものではないサービスを提供し得る。サービスは、サービスハブのプログラムコード関数を使用して実装されてよく、以下に説明するように、プログラムコード関数のインスタンスは、ソースサービスハブから宛先サービスハブに移動されてよい。
【０００５】
１つの例の構成では、ソースサービスハブ上で実行中のプログラムコード関数のインスタンスは、ソースサービスハブ上でのプログラムコード関数のインスタンスの実行を一時停止し、プログラムコード関数のインスタンスに対する関数チェックポイントを作成することによってローカルデバイスネットワークに含まれる宛先サービスハブに移動されてよい。一実施例では、関数チェックポイントは、ソースサービスハブのメモリから取得された実行命令及び実行状態データ状態を含む１つ以上のチェックポイント画像ファイルを含んでよい。関数チェックポイントは、ソースサービスハブで一時停止される前にプログラムコード関数のインスタンスの実行状態を保存するために使用されてよく、関数チェックポイントに含まれた実行命令及び実行状態データは、宛先サービスハブでプログラムコード関数のインスタンスの実行状態を再開するために使用されてよい。また、ソースサービスハブ上のプログラムコード関数のインスタンスの実行に関係する関数メタデータが、収集されてよい。関数メタデータは、宛先サービスハブ上でのプログラムコード関数のインスタンスの実行状態の復元を容易にするために使用されてよい。
【０００６】
ソースサービスハブ上でプログラムコード関数のインスタンスに対する関数チェックポイントを作成した後、関数チェックポイントはプログラムコード関数のインスタンスをホストするために利用可能であると識別されたローカルデバイスネットワークに位置する宛先サービスハブに送信されてよい。一実施例では、関数チェックポイントは、ローカル無線ネットワークを介してまたは有線ネットワークを介して宛先サービスハブに直接的に送信されてよい。別の実施例では、関数チェックポイントは、以下に説明するように、宛先サービスハブへの配布のためにサービスプロバイダ環境に送信されてよい。さらに別の実施例では、関数チェックポイントは、サービスプロバイダ環境に送信されて、サービスプロバイダ環境に位置するコンピューティングインスタンス上でホストされてよい。関数チェックポイントを受け取った後、宛先サービスハブは、宛先サービスハブのメモリの中に関数チェックポイントに含まれる実行命令及び実行状態データをロードすることによって、プログラムコード関数のインスタンスの実行状態を再開するように構成されてよい。
【０００７】
本技術をさらに説明するために、ここで図を参照して実施例が提供される。図１Ａは、ソースサービスハブ１０４ａ上で実行中のプログラムコード関数１１２のインスタンス（プログラムコード関数インスタンス１１２とも呼ばれる）のために関数チェックポイント１１４を生成し、関数チェックポイント１１４を使用して宛先サービスハブ１０４ｂ上でプログラムコード関数１１２のインスタンスを復元するために使用される例示的なシステム及び方法を示す図である。図１は、ローカルデバイスネットワーク１０２が、複数のサービスハブ１０４ａ〜ｂ及び複数の接続デバイス１１８ａ〜ｎを含んでよいことを示す。理解されるように、ローカルデバイスネットワーク１０２は、任意の数のサービスハブ１０４ａ〜ｂ及び接続デバイス１１８ａ〜ｎを含む場合がある。ローカルデバイスネットワーク１０２は、ビジネス環境（例えば、製造環境、オフィス環境、小売環境など）、家庭環境、レクリエーション環境、及び任意の他の適切な環境内で実装されてよい。いくつかの実施例では、ローカルデバイスネットワーク１０２は、以下に説明するように、広域ネットワーク（ＷＡＮ）を介して、サービスプロバイダ環境（例えば、「クラウド」環境）などの外部ネットワークと通信してよい。
【０００８】
サービスハブ１０４ａ〜ｂは、ローカルデバイスネットワーク１０２に含まれる接続デバイス１１８ａ〜ｎに様々なサービスを提供するソフトウェアをホストするように構成されたコンピューティングデバイスであってよい。サービスハブ１０４ａ〜ｂ上でホストされるソフトウェアは、サービスプロバイダ環境の機能を、接続デバイス１１８ａ〜ｎに拡張し、サービスハブ１０４ａ〜ｂが、例えば接続デバイス１１８ａ〜ｎによって生成された情報を収集し、分析するために使用されるストレージサービス及び計算サービスをホストできるようにし、サービスハブ１０４ａ〜ｂが、接続デバイス１１８ａ〜ｎが互いに安全に通信するために使用するメッセージサービスをホストできるようにする。また、（サービスプロバイダのカスタマを含む）ユーザーは、ローカルデバイスネットワーク１０２内でサービスハブ１０４ａ〜ｂに展開され、その上で実行されてよいサービスのためにソフトウェアアプリケーション及び／またはプログラムコード関数（例えば、「サーバレス」関数）を開発してよい。一例として、ユーザーは、イベントに応えて加入した接続デバイスにメッセージを発行するプログラムコード関数を作成してよく、ユーザーは、ローカルデバイスネットワーク１０２内のサービスハブ１０４ａ〜ｂにプログラムコード関数を展開してよい。サービスハブ１０４ａ〜ｂ上でサービスを呼び出すことは、サービスハブ１０４ａ〜ｂのメモリ１０６ａ〜ｂ（例えば、ランダムアクセスメモリ（ＲＡＭ））の中にプログラムコード関数１１２のインスタンス（つまり、ソフトウェアアプリケーションまたはプログラムコード関数のインスタンス）をロードすることを含んでよい。
【０００９】
プログラムコード関数１１２のインスタンスは、オンデマンドである場合もあれば、長く続く場合もある。実例として、オンデマンドプログラムコード関数は、プログラムコード関数１１２の実行中に状態情報がほとんどまたはまったく維持されていない要求またはイベントに応えて呼び出される場合があり、プログラムコード関数１１２は、完了時に終了する場合がある。長く続くプログラムコード関数はステートフルである場合があり、要求に耳を傾け、外部イベントを転送するなどの継続中のサービスを提供するために使用される場合がある。
【００１０】
１つの例示的な構成に示すように、プログラムコード関数１２４は、ローカルデバイスネットワーク１０２に含まれるサービスハブ１０４ａに展開されてよい。一実施例では、ユーザーは、サービスプロバイダ環境１２０に位置する関数展開マネージャ１２２にプログラムコード関数１２４を提出してよく、関数展開マネージャ１２２は、サービスハブ１０４ａにプログラムコード関数１２４を送信するために使用されてよい。例えば、関数展開マネージャ１２２は、ユーザーが、ユーザーのローカルデバイスネットワーク１０２に含まれる１つ以上のサービスハブ１０４ａ〜ｂに展開のためのプログラムコード関数１２４を提出できるようにするユーザーインタフェースを含んでよい。一実施例では、関数展開マネージャ１２２は、どのサービスハブ１０４ａ〜ｂがプログラムコード関数１２４の展開を受け取ってよいのかを選択するように構成されてよい。したがって、プログラムコード関数は、ユーザーのローカルデバイスネットワーク１０２に含まれるサービスハブ１０４ａ〜ｂのいずれかに透過的に展開されてよい。別の実施例では、ユーザーは、プログラムコード関数１２４を展開するためにサービスハブ１０４ａ〜ｂを指定してよい。サービスハブ１０４ａ〜ｂを選択した後に、関数展開マネージャ１２２は、プログラムコード関数１２４（例えば、プログラムコード関数ファイル）を、選択したサービスハブ１０４ａ〜ｂに送信させてよい。プログラムコード関数１２４を受け取ったことに応えて、サービスハブ１０４ａ〜ｂは、サービスハブ１０４ａ〜ｂ上での実行のためにプログラムコード関数１１２のインスタンスをロードしてよい。
【００１１】
ソースサービスハブ１０４ａでの実行のためにロードされたプログラムコード関数１１２のインスタンスは、宛先サービスハブ１０４ｂに移動されてよい。プログラムコード関数１１２のインスタンスは、様々な理由からソースサービスハブ１０４ａから宛先サービスハブ１０４ｂに移動されてよい。例えば、プログラムコード関数１１２のインスタンスは、ソースサービスハブ１０４ａのコンピューティングリソース（例えば、プロセッサ、メモリ１０６ａ、及び／またはネットワーク帯域幅）が過負荷になるとき、ソースサービスハブ１０４ａの健全性の状態が不安定になるとき、またはソースサービスハブ１０４ａのロードがローカルデバイスネットワーク１０２に追加された宛先サービスハブ１０４ｂに再配布されるとき、宛先サービスハブ１０４ｂに移動されてよい。言うまでもなく、プログラムコード関数１１２のインスタンスをソースサービスハブ１０４ａから宛先サービスハブ１０４ｂに移動させることは、上述の理由以外の理由から実行される場合がある。
【００１２】
宛先サービスハブ１０４ｂに移動されるプログラムコード関数１１２のインスタンスを選択することは、一実施例では、選択基準を使用して実行されてよい。選択基準の非限定的な例は、関数タイプ、関数実行状態、関数完了状態、及び／またはリソース割り当てを含んでよい。関数タイプは、プログラムコード関数１１２のインスタンスがオンデマンドであるのか、それとも長く続くのかを示し得る。実例として、長く続くプログラムコード関数は、長く続くプログラムコード関数の状態情報を保存する要求のため、宛先サービスハブ１０４ｂへの移行のために長続きしないプログラムコード関数に優先して選択される場合がある。関数実行状態は、プログラムコード関数１１２のインスタンスがアイドルであるかどうかを示し得る。実例として、プログラムコード関数のアイドルインスタンスは、プログラムコード関数のアクティブインスタンスを一時停止する必要を回避するために、プログラムコード関数のアクティブインスタンスに優先して選択される場合がある。関数完了状態は、プログラムコード関数１１２のインスタンスの完了率を示し得る。実例として、ほぼ完了しているプログラムコード関数がソースサービスハブ１０４ａ上で実行を完了できるようにするために、最近呼び出されたプログラムコード関数１１２のインスタンスが、ほぼ完了しているプログラムコード関数１１２のインスタンスに優先して選択される場合がある。プログラムコード関数１１２のインスタンスに割り当てられるリソース（例えば、プロセッサ及びメモリ）の量は、プログラムコード関数１１２のインスタンスを宛先サービスハブ１０４ｂに移動させるかどうかを判断するための１つの基準として使用されてよい。例えば、チェックポイントファイルに書き込まれるデータの量が、他のプログラムコード関数のデータ量と比較して少ない場合があるため、より少ないリソースが割り当てられたプログラムコード関数１１２のインスタンスが選択されてもよい。理解されるように、プログラムコード関数１１２のインスタンスを管理するためにオペレーティングシステムによって使用されるプロセステーブルからプログラムコード関数１１２のインスタンスを体系的にまたは無作為に選択することを含む、宛先サービスハブ１０４ｂへの移行のためにプログラムコード関数１１２のインスタンスを選択するために、任意の選択技術が使用されてよい。
【００１３】
ソースサービスハブ１０４ａから宛先サービスハブ１０４ｂにプログラムコード関数１１２のインスタンスを移動させることは、プログラムコード関数１１２のために関数チェックポイント１１４を作成することを含んでよい。関数チェックポイント１１４は、プログラムコード関数１１２のための実行命令（例えば、コンピュータコード）及び実行状態データ（例えば、メモリ１０６ａから取得した関数リソース）を含む１つ以上のファイルを含んでよい。一実施例では、プログラムコード関数１１２のインスタンスを実行するために使用されるソフトウェアコンテナは、ソフトウェアコンテナを再作成するために使用し得る画像ファイルのセット、実行時環境、及び宛先サービスハブ１０４ｂ上でのプログラムコード関数１１２のインスタンスの実行状態を含むソフトウェアコンテナのための関数チェックポイント１１４を作成することによって宛先サービスハブ１０４ｂに移動されてよい。いくつかの実施例では、関数チェックポイント１１４は、実行命令及び実行状態データを含む１つ以上のデータオブジェクトまたはデータストアレコードを含んでよい。また、一実施例では、ソースサービスハブ１０４ａ上でプログラムコード関数１１２のインスタンスを実行することに関係するメタデータが収集されてよく、メタデータは、関数チェックポイント１１４に含まれてよい、または関数チェックポイント１１４に含まれてよい。実例として、メタデータは、プログラムコード関数１１２のインスタンスの実行状態情報（例えば、アイドルまたは実行中）、プログラムコード関数１１２のためのコンピューティングリソース割り当て情報、ロギングメッセージ、コマンドライン引数、及び／またはパラメータ、ソフトウェアアプリケーションリソース名またはプログラムコード関数リソース名などを含んでよい。
【００１４】
一実施例では、図１に示すように、サービスハブ１０４ａ〜ｂは、プログラムコード関数１１２のインスタンスの実行状態を保存し、再開するために使用されるチェックポイントマネージャ１１０（例えば、チェックポイントデーモン）を含む場合がある。例えば、ソースサービスハブ１０４ｂに位置するチェックポイントマネージャ１１０のインスタンスは、ソースサービスハブ１０４ａのメモリ１０６ａに位置するプログラムコード関数１１２のインスタンスに対する関数チェックポイント１１４を作成するために使用されてよい。宛先サービスハブ１０４ｂ上のチェックポイントマネージャ１１０のインスタンスは、関数チェックポイント１１４に含まれる実行状態情報を使用して、宛先サービスハブ１０４ｂのメモリ１０６ｂの中のプログラムコード関数１１２を再開するために使用されてよい。したがって、チェックポイントマネージャ１１０のインスタンスは、ローカルデバイスネットワーク１０２に含まれる各サービスハブ１０４ａ〜ｂにインストールされ、サービスハブ１０４ａ〜ｂがサービスハブ１０４ａ〜ｂの間でプログラムコード関数１１２のインスタンスを移動できるようにする。
【００１５】
一実施例では、チェックポイントマネージャ１１０を使用してプログラムコード関数１１２のインスタンスに対する関数チェックポイント１１４を作成することは、ソースサービスハブ１０４ａの上でプログラムコード関数１１２の実行を一時停止することと、ソースサービスハブ１０４ａのメモリ１０６ａからプログラムコード関数１１２の実行命令及び実行状態データを取得することとを含んでよい。実行命令及び実行状態データは、次いでソースサービスハブ１０４ａの永続記憶装置１０８ａの中に作成された関数チェックポイント１１４に書き込まれてよい。非限定的な例として、チェックポイントマネージャ１１０は、プログラムコード関数１１２のインスタンスのプロセス識別子を使用して、メモリ１０６ａに位置するプロセスファイルシステムの中のプロセスツリーを識別してよい。チェックポイントマネージャ１１０は、プロセスツリーをナビゲートして、プロセスツリーに含まれる任意のタスク（例えば、スレッド及び子プロセス）を識別してよい。プロセスツリーに含まれるタスクを識別した後、チェックポイントマネージャ１１０は、システムコールを使用してタスクを一時停止してよい。タスクを一時停止することによって、タスクがプログラムコード関数１１２の実行状態を変更することを防ぎ得る。例えば、タスクを一時停止することによって、タスクが新しいファイルを開く、新しいソケットを開く、セッション変数を変更する、新しい子プロセスを作り出すなどを防ぎ得る。チェックポイントマネージャ１１０は、プロセスファイルシステム内のプロセスディレクトリをナビゲートして、プログラムコード関数１１２の実行命令及び実行状態データを収集し、ソースサービスハブ１０４ａの永続記憶装置１０８ａ内の関数チェックポイント１１４に実行命令及び実行状態データを書き込んでよい。
【００１６】
関数チェックポイント１１４を作成した後、関数チェックポイント１１４は、宛先サービスハブ１０４ｂに送信されてよい。プログラムコード関数１１２のインスタンスをホストするために宛先サービスハブ１０４ｂを識別することは、一実施例では、ソースサービスハブ１０４ａから移動されたプログラムコード関数１１２のインスタンスをホストするために宛先サービスハブ１０４ｂを割り当てる移行構成ファイル（図４に示す）を参照することを含んでよい。一実施例として、ローカルデバイスネットワーク１０２の中のサービスハブ１０４ａ〜ｂは互いにグループ化されてよく、グループのメンバーは、グループの他のメンバーから移動されたプログラムコード関数のインスタンスをホストするために割り当てられてよい。別の実施例では、宛先サービスハブ１０４ｂは、宛先サービスハブ１０４ｂの計算負荷に部分的に基づいて識別されてよい。例えば、（図４Ａに示す）移行管理モジュールは、ローカルデバイスネットワーク１０２に含まれるサービスハブ１０４ａ〜ｂの計算負荷を評価し、ローカルデバイスネットワーク１０２の他のサービスハブ１０４ａ〜ｂに比較してより少ない計算負荷を有する宛先サービスハブ１０４ｂを識別するために使用されてよい。サービスハブ１０４ａ〜ｂの計算負荷は、サービスハブ１０４ａ〜ｂで実行されている処理の量を指す場合がある。計算負荷は、サービスハブ１０４ａ〜ｂで実行中のいくつかのプログラムコード関数及び／またはソフトウェアアプリケーション、ならびにサービスハブ１０４ａ〜ｂに接続し、対話している場合があるいくつかの接続デバイス１１８ａ〜ｂを含んでよい。関数チェックポイント１１４は、ＷＩ−ＦＩ、Ｚｉｇｂｅｅ、Ｚ−Ｗａｖｅ、ＢＬＵＥＴＯＯＴＨ、ＮＦＣ（近距離無線通信）、セルラー、有線接続などであるが、これに限定されるものではないネットワークプロトコルを使用してローカルエリアネットワーク（ＬＡＮ）を介して、ソースサービスハブ１０４ａから宛先サービスハブ１０４ｂへ送信されてよい。
【００１７】
ソースサービスハブ１０４ａから関数チェックポイント１１４を受け取ったことに応えて、関数チェックポイント１１４は、宛先サービスハブ１０４ｂ上の永続記憶装置１０８ｂ（例えば、ハードディスクドライブ、ソリッドステートドライブ、または任意の不揮発性ストレージデバイス）に格納されてよく、宛先サービスハブ１０４ｂ上に位置するチェックポイントマネージャ１１０は、関数チェックポイント１１４に含まれる実行状態情報を使用して、実行のためにメモリ１０６ｂにプログラムコード関数１１２のインスタンスをロードしてよい。例えば、チェックポイントマネージャ１１０は、メモリ１０６ｂの中に関数チェックポイント１１４をロードし、関数チェックポイント１１４に含まれる実行命令及び実行状態データを使用してプログラムコード関数１１２を再作成してよい。また、関数チェックポイント１１４に含まれる関数メタデータは、宛先サービスハブ１０４ｂ上でプログラムコード関数１１２のインスタンスを復元するために使用されてよい。非限定的な例として、チェックポイントマネージャ１１０は、プログラムコード関数１１２のインスタンスを管理し、名前空間、ソケット、メモリマッピング、タイマ、認証情報、及びスレッドを含むプログラムコード関数１１２によって活用されるリソースを再作成するために、オペレーティングシステムによって使用されるプロセステーブルの中にエントリを作成し、どのリソースがプロセスタスク間で共有されるのかを識別してよい。プログラムコード関数１１２のインスタンスを含むソフトウェアコンテナが宛先サービスハブ１０４ｂに移動される場合には、チェックポイントマネージャ１１０は、関数チェックポイント１１４を使用して宛先サービスハブ１０４ｂのメモリ１０６ｂの中に（ソフトウェアコンテナに含まれるプログラムコード関数１１２を含む）ソフトウェアコンテナをロードしてよい。プログラムコード関数１１２が宛先サービスハブ１０４ｂ上で再作成された後、プログラムコード関数１１２は実行を再開し、プログラムコード関数１１２によって提供されるサービスを利用する接続デバイス１１８ａ〜ｎが、宛先サービスハブ１０４ｂ上でサービスにアクセスできるようにしてよい。
【００１８】
ソースサービスハブ１０４ａから宛先サービスハブ１０４ｂへのプログラムコード関数１１２の移行は、ローカルデバイスネットワーク１０２のユーザーにとって透過的である場合がある。すなわち、ユーザーは、ユーザーのローカルデバイスネットワーク１０２に含まれるどのサービスハブ１０４ａ〜ｂがプログラムコード関数１１２のインスタンスをホストするのかを認識していない場合がある。したがって、ユーザーは、所有者のローカルデバイスネットワーク１０２に含まれるサービスハブ１０４ａ〜ｂのいずれかの上での実行のためにソフトウェアアプリケーションまたはプログラムコード関数を展開してよく、プログラムコード関数１１２のインスタンス（つまり、ソフトウェアアプリケーションまたはプログラムコード関数のインスタンス）は、ユーザーがプログラムコード関数１１２が移動されたことを認識せずに、必要に応じて、サービスハブ１０４ａ〜ｂの間で移動されてよい。
【００１９】
図１Ｂは、ソースサービスハブ１０４ａのメモリ１０６ａから宛先サービスハブ１０４ｂのメモリ１０６ｂに、プログラムコード関数１１２のインスタンスに対して作成された関数チェックポイント１１４を転送するための例示的な方法を示す。上述のように、ソースサービスハブ１０４ｂ上に位置するチェックポイントマネージャ１１０は、ソースサービスハブ１０４ａのメモリ１０６ａに位置するプログラムコード関数１１２のインスタンスに対する関数チェックポイント１１４を作成するために使用されてよい。示される実施例では、チェックポイントマネージャ１１０は、メモリ１０６の中で関数チェックポイント１１４を作成するように構成されてよく、メモリ１０６ａは揮発性メモリであってよい。関数チェックポイント１１４は、次いでネットワーク（例えば、ローカルエリアネットワーク（ＬＡＮ））を介して、または別の実施例では、図２に関連して以下に説明するサービスプロバイダ環境を介して宛先サービスハブ１０４ｂに送信されてよい。
【００２０】
関数チェックポイント１１４は、宛先サービスハブ１０４上で受け取られてよく、宛先サービスハブ１０４ｂ上のチェックポイントマネージャ１１０は、関数チェックポイント１１４に含まれる実行状態情報を使用して宛先サービスハブ１０４ｂのメモリ１０６ｂにプログラムコード関数１１２のインスタンスをロードするために使用されてよい。一実施例として、関数チェックポイント１１４が宛先サービスハブ１０４ｂで受け取られるとき、関数チェックポイント１１４は、一度も永続記憶装置に関数チェックポイント１１４を格納したことなく、揮発性メモリにロードされてよく、チェックポイントマネージャ１１０は、関数チェックポイント１１４に含まれる実行命令及び実行状態データを使用して揮発性メモリにプログラムコード関数１１２のインスタンスをロードしてよい。
【００２１】
図２は、ソースサービスハブ２０４ａ上でプログラムコード関数２１２のインスタンス（プログラムコード関数インスタンス２１２とも呼ばれる）に対する関数チェックポイント２１４を生成し、サービスプロバイダ環境２１６を介して宛先サービスハブ２０４ｂに関数チェックポイント２１４を提供し、関数チェックポイント２１４を使用して宛先サービスハブ２０４ｂ上でプログラムコード関数２１２のインスタンスを再開できるようにするために使用される例示的なシステム及び方法を示す図である。上述のように、ローカルデバイスネットワーク２０２は、接続デバイス２２４にサービスを提供するように構成された複数のサービスハブ２０４ａ〜ｂを含んでよい。サービスは、サービスハブ２０４ａ〜ｂの上でソフトウェアアプリケーションまたはプログラムコード関数のインスタンス（つまり、プログラムコード関数２１２のインスタンス）を実行することによってサービスハブ２０４ａ〜ｂ上に実装されてよい。
【００２２】
サービスハブ２０４ａ〜ｂのそれぞれがチェックポイントマネージャ２１０を含んでよい。ソースサービスハブ２０４ａ上のチェックポイントマネージャ２１０は、ソースサービスハブ２０４ａのメモリ２０６ａにロードされたプログラムコード関数２１２のインスタンスに対する関数チェックポイント２１４を作成し、ソースサービスハブ２０４ａ上の永続記憶装置２０８ａに関数チェックポイント２１４を格納するために使用されてよい。関数チェックポイント２１４は、宛先サービスハブ２０４ｂに送信されてよく、宛先サービスハブ２０４上のチェックポイントマネージャ２１０は、宛先サービスハブ２０４上の永続記憶装置２０８ｂから関数チェックポイント２１４を取り出し、関数チェックポイント２１４を使用して宛先サービスハブ２０４ｂのメモリ２０６ｂにプログラムコード関数２１２のインスタンスをロードするために使用されてよい。サービスハブ２０４ａ〜ｂは、サービスプロバイダ環境２１６とネットワーク通信してよく、サービスプロバイダ環境２１６は、データストレージサービス及びデータ取り出しサービス、オンデマンド処理能力などのネットワークサービス、ならびにサービスハブ２０４ａ〜ｂにアクセス可能であり得る他のサービスを含んでよい。
【００２３】
示されるように、ソースサービスハブ２０４ａ上に関数チェックポイント２１４を作成した後、ソースサービスハブ２０４ａは、宛先サービスハブ２０４ｂへの配布のために、サービスプロバイダ環境２１６に関数チェックポイント２１４を送信してよい。一実施例では、サービスプロバイダ環境２１６は、移行サービス２１８を含んでよい。移行サービス２１８は、宛先サービスハブ２０４ｂに関数チェックポイント２１４を転送するように構成されてよい。例えば、関数チェックポイント２１４を受け取ったことに応えて、移行サービス２１８は、宛先サービスハブ２０４ｂを識別し、宛先サービスハブ２０４ｂに関数チェックポイント２１４を送信してよい。実例として、移行サービス２１８は、ソースサービスハブ２０４ａから移行されたプログラムコード関数２１２のインスタンスをホストするために事前に割り当てられた宛先サービスハブ２０４ｂを識別する場合もあれば、移行サービス２１８は、ソースサービスハブ２０４ａから移動されたプログラムコード関数２１２のインスタンスをホストするために、他のサービスハブと比較してより少ない計算負荷を有する宛先サービスハブ２０４ｂを選択する場合もあれば、移行サービス２１８は、宛先サービスハブ２０４ｂを識別してソースサービスハブ２０４ａから移動されたプログラムコード関数２１２のインスタンスをホストするために、ラウンドロビン選択技術を活用する場合もある。
【００２４】
別の実施例では、ソースサービスハブ２０４ａは、サービスプロバイダ環境２１６に格納するために、サービスプロバイダ環境２１６に関数チェックポイント２１４に送信し、宛先サービスハブ２０４ｂがサービスプロバイダ環境２１６から関数チェックポイント２１４を取り出すことを可能にしてよい。一実施例では、関数チェックポイント２１４は、リレーショナルデータストア、ＮｏＳＱＬデータストア、オブジェクトデータストア、または別のタイプのデータストアであってよいチェックポイントストレージ２２０に格納されてよい。宛先サービスハブ２０４ｂは、チェックポイントストレージ２２０から関数チェックポイント２１４を取り出すように構成されてよい。例えば、宛先サービスハブ２０４ｂは、関数チェックポイント２１４についてチェックポイントストレージ２２０に定期的に問い合わせする場合もあれば、宛先サービスハブ２０４ｂは、関数チェックポイント２１４がチェックポイントストレージ２２０に格納された旨の通知を受け取る場合もある。宛先サービスハブ２０４ｂは、チェックポイントストレージ２２０から関数チェックポイント２１４を取り出してよく、宛先サービスハブ２０４ｂに位置するチェックポイントマネージャ２１０は、関数チェックポイント２１４を使用して宛先サービスハブ２０４ｂのメモリ２０６ｂにプログラムコード関数２１２のインスタンスをロードしてよい。
【００２５】
別の実施例では、関数チェックポイント２１４は、サービスハブ２０４ａ〜ｂの状態を表すために使用されるデバイス表現（例えば、データオブジェクト）を管理するように構成されてよいデバイスシャドーサービス２２２を使用して格納されてよい。デバイスシャドーサービス２２２は、宛先サービスハブ２０４ｂのためのデバイス表現（図示せず）に関数チェックポイント２１４を格納してよく、デバイス表現によって示される状態に宛先サービスハブ２０４ｂの状態を更新することの一環として、宛先サービスハブ２０４ｂは、デバイス表現から関数チェックポイント２１４を取り出し、関数チェックポイント２１４を使用して宛先サービスハブ２０４ｂのメモリ２０６ｂの中にプログラムコード関数２１２のインスタンスを再開してよい。
【００２６】
図３は、ソースサービスハブ３０４からサービスプロバイダ環境３２０の中でホストされるコンピューティングインスタンス３１６に、プログラムコード関数３１２のインスタンス（プログラムコード関数インスタンス３１２とも呼ばれる）を移動させるために使用される例示的なシステム及び方法を示す図である。図３は、ローカルデバイスネットワーク３０２が、ソースサービスハブ３０４に位置するプログラムコード関数３１２のインスタンスをホストできる利用可能なサービスハブを含まない場合がある事例を示す。例えば、ローカルデバイスネットワーク３０２は、追加のサービスハブを含まない場合もあれば、ローカルデバイスネットワーク３０２に含まれる他のサービスハブがプログラムコード関数３１２のインスタンスをホストするように構成されない場合もあれば、ローカルデバイスネットワーク３０２の他のサービスハブの計算負荷が、他のサービスハブが、プログラムコード関数３１２のインスタンスをホストすることを可能にしない場合もある。結果的に、関数チェックポイント３１４は、ソースサービスハブ３０４に位置するプログラムコード関数３１２のインスタンスに対して作成されてよく、プログラムコード関数３１２のインスタンスは、関数チェックポイント３１４を使用してサービスプロバイダ環境３２０で再開されてよい。
【００２７】
示されるように、サービスプロバイダ環境３２０に位置するコンピューティングインスタンス３１６は、ソースサービスハブ３０４のメモリ３０６から移動されたプログラムコード関数３１２のインスタンスをホストするために使用されてよい。プログラムコード関数３１２のインスタンスは、プログラムコード関数３１２のインスタンスに対する関数チェックポイント３１４を作成することによってコンピューティングインスタンス３１６に移動されてよい。例えば、上述のように、チェックポイントマネージャ３１０は、ソースサービスハブ３０４の永続記憶装置３０８の中のプログラムコード関数３１２のインスタンスに対する関数チェックポイント３１４を作成するために使用されてよく、ソースサービスハブ３０４は、コンピューティングインスタンス３１６に関数チェックポイント３１４を送信してよい。コンピューティングインスタンス３１６は、チェックポイントマネージャ３１０のインスタンスを含んでよく、このインクタンスは、コンピューティングインスタンス３１６にプログラムコード関数３１２のインスタンスをロードするために使用されてよい。ローカルデバイスネットワーク３０２に含まれる接続デバイス３１８ａ〜ｎは、サービスプロバイダ環境３２０に位置するコンピューティングインスタンス３１６に要求を送信することによって、プログラムコード関数３１２のインスタンスによって実装されたサービスにアクセスし得る。一実施例では、コンピューティングインスタンス３１６は、サービスプロバイダ環境３２０の中でホストされるデバイスサービスネットワーク（図７に関連して説明する）のアーキテクチャ内で実装されてよい。
【００２８】
別の実施例では、サービスプロバイダ環境３２０は、サービスプロバイダ環境３２０に含まれるコンピューティングリソースを使用してプログラムコード関数を管理するために使用される関数実行サービス（図示せず）を含んでよい。関数チェックポイント３１４は、ソースサービスハブ３０４に位置するプログラムコード関数３１２のインスタンスに対して作成されてよく、関数チェックポイント３１４は、関数実行サービスに送信されてよく、関数実行サービスは、関数チェックポイント３１４を使用して、関数実行サービスによって利用されるコンピューティングリソースにプログラムコード関数３１２のインスタンスをロードし、それによってプログラムコード関数３１２のインスタンスは、ローカルデバイスネットワーク３０２に含まれる接続デバイス３１８ａ〜ｎを利用できるようになる。
【００２９】
図４Ａは、本技術が実行され得る例示的なシステム環境４００の構成要素を示す。システム環境４００は、１つ以上のサービスハブ４０６、及びサービスハブ４０６によって提供されるサービスにアクセスするように構成された１つ以上の接続デバイス４２８ａ〜ｎを含むローカルデバイスネットワーク４０４を含んでよい。サービスハブ４０６は、接続デバイス４２８ａ〜ｎにサービスを提供するように構成されたコンピューティングデバイスであってよい。サービスハブ４０６によって提供されるサービスは、メッセージサービス、プログラムコード関数サービス、デバイスシャドーイングサービス、及びユーザーによって開発されたサービスを含んでよいが、これに限定されるものではない。また、サービスハブ４０６は、図７に関連して以下に説明するデバイスサービスネットワーク４３０に含まれるコンピューティングリソースと通信するように構成されてもよい。デバイスサービスネットワーク４３０は、サービスプロバイダ環境４０２内でホストされてよい。
【００３０】
一実施例では、サービスプロバイダは、自分のコンピューティングデバイスにサービスハブソフトウェアをインストールする場合があるユーザーにサービスハブソフトウェアを提供してよい。サービスハブソフトウェアは、ユーザーのローカルデバイスネットワーク４０４に含まれるエッジコンピューティングデバイスにインストールされると、サービスプロバイダ環境の機能（例えば、メッセージング、コンピューティング、ストレージなど）をサービスハブ４０６に接続するように構成された接続デバイス４２８ａ〜ｎに拡張し得る。別の例では、サービスプロバイダは、ユーザーに専用サービスハブ４０６を提供してよい。ユーザーは、サービスプロバイダ環境の機能を拡張したり、ユーザーのローカルデバイスネットワーク４０４に含まれる接続デバイス４２８ａ〜ｎにローカライズされたサービスを提供したり、ユーザー独自のソフトウェアアプリケーション及びプログラムコード関数をインストールしたりするために、ユーザーのローカルデバイスネットワーク４０４にサービスハブ４０６を追加してよい。
【００３１】
サービスハブ４０６は、ソフトウェアコンテナをホストするための機能を含んでよい。ソフトウェアコンテナまたはコンテナ画像は、プログラムコード関数のための実行命令及び実行状態データ、実行時環境、システムツール、システムライブラリ、設定値などの、プログラムコード関数４１２のインスタンスを実行するために必要とされる構成要素を含む、軽量でスタンドアロンの実行可能ソフトウェアパッケージであってよい。ソースサービスハブから宛先サービスハブにプログラムコード関数４１２のインスタンス（プログラムコード関数インスタンス４１２とも呼ばれる）を移動させることは、ソースサービスハブを実行するためにプログラムコード関数４１２のインスタンスのための隔離された環境を提供するソフトウェアコンテナのチェックポイント画像を作成すること、宛先サービスハブで再開されるためにチェックポイント画像を送信することを含んでよい。
【００３２】
サービスハブ４０６は、プログラムコード関数を実行するためのサーバレスコンピューティング機能を提供するように構成されてよい。実例として、プログラムコード関数は、関数のようであり得るプログラムコードのセグメントを含んでよく、プログラムコード関数はパラメータを受け取り、処理を実行し、返り値を提供してよい。サービスハブ４０６は、プログラムコード関数４１２のインスタンスを実行するために使用されてよい関数実行サービス４３４を含んでよい。関数実行サービス４３４は、プログラムコード関数４１２のインスタンスを実行するサービスのためのプラットフォームを含んでよい。関数実行サービス４３４は、物理ホスト、コンピューティングインスタンス上の、またはプログラムコード関数４１２のインスタンスを呼び出す要求に応えてコードを実行するソフトウェアコンテナ内のプログラムコード関数４１２のインスタンスの実行を管理するために使用されてよく、関数実行サービス４３４は、プログラムコード関数４１２のインスタンスによって使用される計算リソースを管理してよい。プログラムコード関数４１２のインスタンスが実行され、結果が返されると、関数実行サービス４３４は、プログラムコード関数４１２のインスタンスを実行するために割り当てられたコンピュータメモリからプログラムコード関数４１２のインスタンス及び結果を削除するために使用されてよい。
【００３３】
一実施例では、いくつかのサービスハブ４０６は論理的にグループ化されてよく、サービスハブ４０６のグループは、接続デバイス４２８ａ〜ｎによって生成されるデータ及び／または要求を処理してよい。一実施例では、グループに含まれる各サービスハブ４０６は、グループのメンバー間で移行されるプログラムコード関数４１２のインスタンスをホストできる場合がある。したがって、プログラムコード関数４１２のインスタンスは、グループの任意のメンバーに透過的に移動されてよい。グループに含まれるサービスハブ４０６が異なるコンピューティング機能及び／またはソフトウェア機能を有する場合がある別の実施例では、グループのサービスハブ４０６は、サービスハブ４０６のコンピューティング機能及び／またはソフトウェア機能を指定するサービスハブプロファイル４３２を介して、グループ内のどのサービスハブ４０６が特定のプログラムコード関数４１２をホストできるのかを認識させることができ得る。
【００３４】
サービスハブ４０６は、チェックポイントマネージャ４１４及び移行管理モジュール４１８を含んでよい。ソースサービスハブに位置するチェックポイントマネージャ４１４は、プログラムコード関数４１２のインスタンスに対する関数チェックポイント４２０を生成するように構成されてよく、宛先サービスハブに位置するチェックポイントマネージャ４１４は、関数チェックポイント４２０を使用してプログラムコード関数４１２のインスタンスをロードするように構成されてよい。より詳細には、チェックポイントマネージャ４１４は、プログラムコード関数４１２のインスタンスをサービスハブから別のサービスハブに移行させる移行イベントについてサービスハブ４０６を監視するように構成されてよい。例えば、チェックポイントマネージャ４１４は、プロセッサ、メモリ、ネットワーク、及び／またはストレージの利用などのサービスハブ４０６の動作情報を監視し、動作情報を分析して移行イベントを検出するように構成されてよい。一実施例として、チェックポイントマネージャ４１４は、サービスハブ４０６の健全性の状態がいつ不安定になる（例えば、ソフトウェア障害またはハードウェア障害を検出する）のか、またはサービスハブ４０６のコンピューティングリソース（例えば、プロセッサ、メモリ、ストレージ、及び／またはネットワーク帯域幅）がいつ過負荷となるのかを検出するために動作情報を分析してよい。別の実施例として、チェックポイントマネージャ４１４は、サービスハブ４０６が故障した場合に、フェイルオーバーサービスハブ上の永続記憶装置４１０へのバックアップのために、サービスハブ４０６のメモリ４０８にロードされたプログラムコード関数４１２のインスタンスに対する関数チェックポイント４２０を定期的に生成するように構成されてよい。
【００３５】
移行イベントを検出したことに応えて、チェックポイントマネージャ４１４は、サービスハブ４０６のメモリ４０８にロードされたプログラムコード関数４１２のインスタンスに対する関数チェックポイント４２０を生成してよい。一実施例では、チェックポイントマネージャ４１４は、サービスハブ４０６で実行中のプログラムコード関数４１２のインスタンスごとに関数チェックポイント４２０を生成してよい。例えば、サービスハブ４０６が不安定になったことを検出したことに応えて、関数チェックポイント４２０は、プログラムコード関数４１２のインスタンスが安定したサービスハブ４０６に移動できるように、サービスハブのメモリ４０８にロードされるプログラムコード関数４１２のインスタンスごとに作成されてよい。別の実施例では、チェックポイントマネージャ４１４は、宛先サービスハブ４０６に移動し、プログラムコード関数４１２の選択したインスタンスに対する関数チェックポイント４２０を生成するために、ソースサービスハブ４０６のメモリ４０８にロードされたプログラムコード関数４１２のインスタンスを選択してよい。非限定的な例として、サービスハブ４０６のコンピューティングリソースが過負荷であることを検出したことに応えて、チェックポイントマネージャ４１４は、実行待ち行列（例えば、オペレーティングシステムカーネルの中の実行待ち行列の前）でプログラムコード関数４１２のインスタンスを選択し、プログラムコード関数４１２の選択したインスタンスに対する関数チェックポイント４２０を生成してよい。
【００３６】
一実施例では、移行管理モジュール４１８は、宛先サービスハブに移行するためにプログラムコード関数４１２のインスタンスを識別するために使用されてよい。チェックポイントマネージャ４１４は、移行管理モジュール４１８が移行のためにプログラムコード関数４１２のインスタンスを選択することを求める要求を、移行管理モジュール４１８に送信してよい。移行管理モジュール４１８は選択基準を利用して、移行のためにプログラムコード関数４１２のインスタンスを識別してよい。例えば、上述した選択基準、関数タイプ、関数実行状態、リソース割り当て、及び関数完了状態は、宛先サービスハブへの移行のためのプログラムコード関数４１２のインスタンスを選択するために移行管理モジュール４１８によって使用されてよい。別の実施例では、移行構成ファイル４２４は、プログラムコード関数４１２のどのインスタンスを移行するのかを指定するために使用され得る。例えば、移行構成ファイル４２４は、ソフトウェアアプリケーションまたはプログラムコード関数にリソース名を指定してよく、リソース名に関連付けられたサービスハブ４０６のメモリ４０８にロードされたプログラムコード関数４１２のインスタンスが移行のために選択されてよい。
【００３７】
チェックポイントマネージャ４１４は、プログラムコード関数４１２のインスタンスに対する関数チェックポイント４２０を生成するように構成されてよい。例えば、チェックポイントマネージャ４１４は、プログラムコード関数４１２のインスタンスの実行を一時停止し、サービスハブ４０６のメモリ４０８からプログラムコード関数４１２のインスタンスのための実行命令及び実行状態データを取得し、プログラムコード関数４１２のインスタンスに対する実行命令及び実行状態データを含む１つ以上の関数チェックポイント４２０をストレージ４１０に作成してよい。また、一実施例のチェックポイントマネージャ４１４、または別の実施例の移行管理モジュール４１８は、サービスハブ４０６上のプログラムコード関数４１２のインスタンスの実行と関連付けられた関数メタデータ４２２を取得するように構成されてよい。関数メタデータ４２２は、プログラムコード関数４１２のインスタンスのための実行状態情報、プログラムコード関数４１２のインスタンスのための計算リソース割り当て情報、ロギングメッセージ、コマンドライン引数及びパラメータ、リソース名、ならびに他の関数メタデータ４２２を含んでよい。関数メタデータ４２２は、（例えば、別個のメタデータファイルとして）関数チェックポイント４２０に含まれてよく、関数メタデータ４２２は、宛先サービスハブ４０６上にプログラムコード関数４１２のインスタンスをロードするために使用されてよい。
【００３８】
プログラムコード関数４１２のインスタンスに対する関数チェックポイント４２０を生成した後、チェックポイントマネージャ４１４は、関数チェックポイント４２０を宛先サービスハブ４０６に送信させてよい。一実施例では、チェックポイントマネージャ４１４は、例えばソースサービスハブから移行されたプログラムコード関数４１２のインスタンスをホストするために割り当てられた宛先サービスハブを指定することによって、ソースサービスハブと１つ以上の宛先サービスハブとの関係を定義するために使用される移行構成ファイル４２４を参照するように構成されてよい。別の実施例では、移行管理モジュール４１８は、サービスハブ４０６の計算負荷に部分的に基づいて宛先サービスハブを識別するために使用されてよい。例えば、移行管理モジュール４１８は、ローカルデバイスネットワーク４０４に含まれるサービスハブ４０６のための作業負荷情報を取得し、作業負荷情報を解析して、ローカルデバイスネットワーク４０４に含まれる他のサービスハブ４０６と比較してより少ない計算負荷を有するサービスハブ４０６を識別するように構成されてよい。
【００３９】
チェックポイントマネージャ４１４は、ローカルエリアネットワーク（ＬＡＮ）を介してソースサービスハブから宛先サービスハブに関数チェックポイント４２０を送信させる場合もあれば、チェックポイントマネージャ４１４は、関数チェックポイント４２０をソースサービスハブからサービスプロバイダ環境４０２に含まれるデバイスサービスネットワーク４３０に送信させる場合もあり、デバイスサービスネットワーク４３０は、ローカルデバイスネットワーク４０４に含まれる宛先サービスハブ４０６に関数チェックポイント４２０を提供するために使用されてよい。一実施例では、関数チェックポイント４２０はデバイスサービスネットワーク４３０に送信されてよく、そこで関数チェックポイント４２０は、デバイスサービスネットワーク４３０に含まれるコンピューティングインスタンス上でプログラムコード関数４１２のインスタンスを再開するために使用されてよい。
【００４０】
サービスハブ４０６で関数チェックポイント４２０を受け取ったことに応えて、チェックポイントマネージャ４１４は、関数チェックポイント４２０に含まれる実行命令及び実行状態データを使用して、サービスハブ４０６のメモリ４０８にプログラムコード関数４１２のインスタンスをロードするように構成されてよい。例えば、チェックポイントマネージャ４１４は、（例えば、関数チェックポイント４２０についてストレージ４１０を監視することによって）関数チェックポイント４２０がいつサービスハブ４０６で受け取られたのかを検出し、サービスハブ４０６のメモリ４０８に関数チェックポイント４２０に含まれる実行命令及び実行状態データをロードし、それによってサービスハブ４０６のメモリ４０８内のプログラムコード関数４１２のインスタンスを復元するように構成されてよい。また、チェックポイントマネージャ４１４は、プログラムコード関数４１２のインスタンスを復元するために、関数チェックポイント４２０に含まれる関数メタデータ４２２を使用してよい。例えば、関数メタデータ４２２は、プログラムコード関数４１２のインスタンス、ロギングメッセージ、関数呼び出しカウントなどに割り当てられたメモリの量を復元するために使用されてよい。
【００４１】
接続デバイス４２８ａ〜ｎは、アドレス指定可能なデバイス及び／または最終的にアドレス指定可能なデバイスの大規模なネットワークを作成する多くの物理電子デバイスのうちの１つであってよい。接続デバイス４２８ａ〜ｎは、ＷＩ−ＦＩ、Ｚｉｇｂｅｅ、Ｚ−Ｗａｖｅ、ＢＬＵＥＴＯＯＴＨ、ＮＦＣ（近距離無線通信）、セルラーなどの無線ネットワークを介してアドレス指定可能であってよい。接続デバイス４２８ａ〜ｎは、無線ネットワークを介してサービスハブ４０６と通信するように構成されてよい。また、いくつかの実施例では、接続デバイス４２８ａ〜ｎは、デバイスサービスネットワーク４３０及び／またはサービスプロバイダ環境４０２に位置するコンピューティングリソースと通信するように構成されてよい。例えば、サービスプロバイダ環境４０２に位置するサービスに向けられた接続デバイス４２８ａ〜ｎからの要求は、サービスハブ４０６を介してルーティングされる場合もあれば、その要求はネットワーク４２６を介してサービスプロバイダ環境４０２に位置するサービスに直接的に送信される場合もある。
【００４２】
サービスハブ４０６及び接続デバイス４２８ａ〜ｎに加えて、ローカルデバイスネットワーク１０２は、ローカルエリアネットワーク（ＬＡＮ）を実装するために使用されるネットワークデバイス（例えば、ルータ、スイッチなど）を含んでよい。ネットワーク４２６は、イントラネット、インターネット、ローカルエリアネットワーク、広域ネットワーク、無線データネットワーク、または任意の他のそのようなネットワーク、またはその組み合わせを含む、サービスプロバイダ環境４０２と通信するために使用される任意の有用なコンピューティングネットワークを含んでよい。そのようなシステムに利用される構成要素は、選択したネットワーク及び／または環境のタイプに少なくとも部分的に依存する場合がある。ネットワークを介した通信は、有線接続または無線接続及びその組み合わせによって可能にされてよい。
【００４３】
図４は、特定の処理モジュールがこの技術と関連して説明される場合があり、これらの処理モジュールがサービスとして実装されてよいことを示す。１つの例の構成では、モジュールは、コンピュータハードウェアで実行中の１つ以上のプロセスを有するサービスと見なされてよい。そのようなサービスは、要求を受け取り、他のサービスまたはデバイスに出力を提供し得る、集中的にホストされた機能またはサービスアプリケーションであってよい。例えば、サービスは、サービスハブ４０６、サーバ、仮想化サービス環境、グリッドまたはクラスタコンピュータリングシステムでホストされるオンデマンドコンピューティングと見なされてよい。サービスに要求を送信し、サービスから出力を受け取るために、ＡＰＩがサービスごとに提供されてよい。また、そのようなＡＰＩは、サードパーティがサービスとインタフェースをとり、要求を行い、サービスから出力を受け取ることを可能にしてもよい。図４は、上述の技術を実装し得るシステムの実施例を示しているが、多くの他の類似した環境または異なる環境も考えられる。上記に説明し、示した実施例の環境は代表にすぎず、限定的ではない。
【００４４】
図４Ｂは、プログラムコード関数のインスタンスの実行状態を保存するために使用されてよい関数チェックポイント４２０の図である。関数チェックポイント４２０は、宛先サービスハブ上でプログラムコード関数の実行を再開するための情報を含んでよい。関数チェックポイント４２０は、ログファイル、実行統計などのプログラムコード関数の実行及び管理を容易にする１つ以上のアプリケーションによって維持される情報をさらに含んでよい。
【００４５】
図４Ｂに示すように、関数チェックポイント４２０は、プロセッサ状態４４０、メモリ状態４４２、ローカルストレージ４４４、及び任意選択のメタデータ４４６を含んでよい。メタデータ４４６は、環境情報４５０、コマンドライン情報４５２、関数引数４５４、及びＩ／Ｏ情報４５６を含んでよい。関数チェックポイント４２０は、プロセッサ状態４４０、メモリ状態４４２、ローカルストレージ４４４、及び任意選択のメタデータ４４６を表す１つ以上のファイルを含んでよい。関数チェックポイント４２０と関連付けられたファイルのすべてまたは一部は、圧縮、暗号化、符号化、またはその組み合わせから形成されてよい。
【００４６】
プロセッサ状態４４０は、プログラムコード関数のインスタンスの実行に関与するサービスハブと関連付けられた１つ以上のプロセッサに関係する情報を含んでよい。プロセッサ状態４４０は、プログラムコード関数のインスタンスの実行に関与するプロセッサのコンテキストを含んでよい。プロセッサ状態４４０は、例えば、コード関数のための命令ポインタを含む、プロセッサコンテキストを形成するプロセッサレジスタ値のコピーを含んでよい。プロセッサ状態４４０は、プロセッサコンテキストを記述するファイルの中に取り込まれてよい。
【００４７】
メモリ状態４４２は、プログラムコード関数のインスタンスの実行に関与するサービスハブと関連付けられた１つ以上のメモリデバイスに関係する情報を含んでよい。メモリ状態４４２は、例えばプログラムコード関数のインスタンスに割り当てられる、またはそれ以外の場合、プログラムコード関数のインスタンスによって使用される物理メモリページを含んでよい。別の実施例では、メモリ状態４４２は、揮発性メモリの中のプロセスによって使用されるスクラッチメモリを含んでよい。メモリ状態４４２は、１つ以上のメモリダンプファイルの中に取り込まれてよい。
【００４８】
ローカルストレージ４４４は、コード関数のインスタンスの実行に関与するサービスハブと関連付けられた１つ以上のストレージデバイスに関係する情報を含んでよい。ローカルストレージ４４４は、プログラムコード関数のインスタンスによって、フラッシュストレージまたはハードドライブなどの不揮発性メモリデバイスに格納されたデータを含んでよい。ローカルストレージ４４４は、一時データ、作業データ、及び処理された結果を含んでよい。
【００４９】
プログラムコード関数のインスタンスに関係する追加のメタデータ４４６も取り込まれ、関数チェックポイント４２０に含まれてよい。環境情報４５０は、プログラムコード関数のインスタンスがその中で実行する環境についての情報を含んでよい。環境情報４５０は、環境変数、経路変数、プログラムコード関数のインスタンスを実行するユーザーのプロファイル情報、及びインスタンスと関連付けられたデータファイルの場所を含んでよい。コマンドライン情報４５２は、プログラムコード関数のインスタンスをインスタンス化するために使用される１つ以上のコマンドについての情報を含んでよい。コマンドライン情報４５２は、コマンド、コマンドラインフラグ、及び呼び出し中に使用される任意のコマンドラインパラメータを識別し得る。
【００５０】
関数引数４５４は、プログラムコード関数のインスタンスに渡される引数についての情報を含んでよい。関数引数４５４は、実際の引数または引数値が取り出され得る場所に対する参照を含んでよい。Ｉ／Ｏ情報４５６は、プログラムコード関数のインスタンスによって利用される入出力デバイスについての情報を含んでよい。Ｉ／Ｏ情報４５６は、ネットワーク接続情報、周辺機器情報、ユーザーインタフェース情報などを含んでよい。
【００５１】
ここで図５に移ると、流れ図は、第１のサービスハブ上に位置するプログラムコード関数のインスタンスに対する関数チェックポイントを生成し、プログラムコード関数のインスタンスが、関数チェックポイントを使用して再開され得る第２のサービスハブに関数チェックポイントを送信するための例示的な方法５００を示す。ブロック５０２で開始し、プログラムコード関数（またはソフトウェアアプリケーション）は、ローカルデバイスネットワークに含まれるサービスハブに展開されてよい。一実施例では、ローカルデバイスネットワークは、プログラムコード関数を実行できる複数のサービスハブを含んでよい。プログラムコード関数は、ユーザーが、どのサービスハブがプログラムコード関数を実行するために使用されるのかを明確に認識することなく、ローカルデバイスネットワークに含まれるサービスハブのうちの１つに展開され、そこで実行されてよい。サービスハブにプログラムコード関数を展開することによって、プログラムコード関数のインスタンスがサービスハブのメモリの中にロードされる。
【００５２】
ブロック５０４でのように、プログラムコード関数のインスタンスを実行するために使用されるサービスハブの状態は、移行イベントの発生を検出するために監視されてよい。移行イベントは、プログラムコード関数のインスタンスの実行に潜在的に影響を与える任意のソフトウェアまたはハードウェアのイベントを含んでよい。例えば、サービスハブのコンピューティングリソースが過負荷であることを検出すること、またはサービスハブの健全性の状態が不安定になったことを検出することは、プログラムコード関数のインスタンスを異なるサービスハブに移行させる移行イベントである場合がある。
【００５３】
ブロック５０６でのように、移行イベントが検出される場合、次いでブロック５０８でのように、プログラムコード関数のインスタンスが、異なるサービスハブへの移行のために識別されてよい。サービスハブが不安定になった実施例では、複数のプロセスが異なるサービスハブへの移行のために選択されてよい。例えば、ステートフルである（例えば、長く続く）プログラムコード関数のインスタンスは、プログラムコード関数のインスタンスの実行状態を保存するために異なるサービスハブへの移行のために識別されてよい。サービスハブのコンピューティングリソースが過負荷とされる場合がある実施例では、選択基準は、コンピューティングリソースに影響を与えるプログラムコード関数の１つ以上のインスタンスを識別するために使用されてよく、したがってサービスハブから離してプログラムコード関数のインスタンスを移動させることは、コンピューティングリソースに対する負荷を軽減し得る。
【００５４】
異なるサービスハブに移行するためにプログラムコード関数のインスタンスを識別した後、関数チェックポイントが、ブロック５１０でのように、プログラムコード関数のインスタンスに対して作成されてよい。上述のように、関数チェックポイントは、１つ以上の画像ファイル、データオブジェクト、またはデータストアレコードであってよい。関数チェックポイントは、サービスハブ上でプログラムコード関数のインスタンスの実行を一時停止し、サービスハブのメモリからプログラムコード関数のインスタンスのための実行命令及び実行状態データを収集することによって作成されてよい。実行命令及び実行状態は、次いでサービスハブの永続記憶装置の中で作成された関数チェックポイント（例えば、画像ファイル、データオブジェクト、またはデータストアレコード）に書き込まれてよい。また、サービスハブ上のプログラムコード関数のインスタンスの実行に関係するメタデータが収集され、サービスハブの永続記憶装置の中に関数チェックポイントとともに記憶されてよい。
【００５５】
ブロック５１２でのように、宛先サービスハブが識別されてよい。宛先サービスハブは、プログラムコード関数のインスタンスをホストするために使用されてよい。方法５００は、ローカルデバイスネットワークに位置する利用可能な宛先サービスを探すことによって開始してよい。一実施例として、サービスハブを対にするまたはグループ化し、プログラムコード関数のインスタンスをサービスハブの間で移行できるようにしてよい。別の実施例としては、宛先サービスハブは、宛先サービスハブの計算負荷に部分的に基づいて識別されてよい。例えば、ローカルデバイスネットワークに含まれるサービスハブの計算負荷が評価されてよく、ローカルデバイスネットワークに含まれる他のサービスハブに比較してより低い計算負荷を有する宛先サービスハブが、プログラムコード関数のインスタンスをホストするために選択されてよい。
【００５６】
ブロック５１４でのように、ローカルデバイスネットワークに含まれる宛先サービスハブが、プログラムコード関数のインスタンスをホストするために利用可能であるとして識別される場合、次いでブロック５１６でのように、関数チェックポイントはローカルデバイスネットワークに含まれる宛先サービスハブに送信されてよい。宛先サービスハブで関数チェックポイントを受け取ったことに応えて、ブロック５１８でのように、関数チェックポイントは、サービスハブにプログラムコード関数のインスタンスをロードするために使用されてよい。例えば、プログラムコード関数のインスタンスは、関数チェックポイントに含まれる実行命令及び実行状態データを使用して、宛先サービスハブのメモリの中で再作成されてよい。また、関数チェックポイントに含まれるメタデータは、宛先サービスハブ上でプログラムコード関数のインスタンスを作成し直すために使用されてよい。例えば、メタデータは、プログラムコード関数のインスタンスのためのコンピューティングリソース割り当て情報、ロギングメッセージ、コマンドライン引数、及び／またはパラメータなどをロードするために使用されてよい。
【００５７】
ローカルデバイスネットワークに含まれるサービスハブが、プログラムコード関数のインスタンスをホストするために利用できない場合、次いでブロック５２０でのように、関数チェックポイントは、サービスプロバイダ環境に送信されてよく、ブロック５２２でのように、プログラムコード関数のインスタンスは、サービスプロバイダ環境に位置するコンピューティングリソースを使用して、ロードまたは再作成されてよい。例えば、プログラムコード関数のインスタンスは、関数チェックポイントを使用してサービスプロバイダ環境に位置するサーバまたはコンピューティングインスタンスにロードされてよい。
【００５８】
図６は、第１のサービスハブにプログラムコード関数のインスタンスに対する関数チェックポイントを作成し、プログラムコード関数のインスタンスが第２のサービスハブ上で再開できるように第２のサービスハブに関数チェックポイントを送信するための例示的な方法６００を示す流れ図である。ブロック６１０でのように、プログラムコード関数のインスタンスを実行するための命令は、複数のサービスハブと、複数のサービスハブに接続して複数のサービスハブによって提供されるサービスにアクセスする複数の接続デバイスとを備えるローカルデバイスネットワークに含まれる第１のサービスハブで受け取られてよい。一実施例では、ソフトウェアアプリケーションまたはプログラムコード関数は、ローカルデバイスネットワークのサービスのグループに展開されてよく、そこではサービスハブのいずれかが、ソフトウェアアプリケーションまたはプログラムコード関数のインスタンスを実行してよい。
【００５９】
ブロック６２０でのように、第１のサービスハブのメモリにロードされたプログラムコード関数のインスタンスのための関数チェックポイントが作成されてよい。関数チェックポイントは、プログラムコード関数のインスタンスのための実行命令及び実行状態データを含んでよい。一実施例では、関数チェックポイントを作成することは、第１のサービスハブでプログラムコード関数のインスタンスの実行を一時停止すること、第１のサービスハブのメモリから実行命令及び実行状態データを取り出すことを含んでよい。いくつかの実施例では、関数チェックポイントを作成することは、プログラムコード関数のインスタンスが実行するための隔離された環境を提供するソフトウェアコンテナの画像を作成することを含む。また、一実施例では、第１のサービスハブのプログラムコード関数のインスタンスの実行に関係するメタデータが取得されてよく、そのメタデータは関数チェックポイントの中にまたは関数チェックポイントに含まれてよい。関数チェックポイント（及びメタデータ）は、第１のサービスハブに位置する永続記憶装置に格納されてよい。
【００６０】
ブロック６３０でのように、ローカルデバイスネットワークに含まれる第２のサービスハブが識別されてよく、ブロック６４０でのように、関数チェックポイントを使用してプログラムコード関数のインスタンスの実行を第２のサービスハブで再開できるようにするために、関数チェックポイントが第２のサービスハブに送信されてよい。一実施例では、関数チェックポイントは、ローカルエリアネットワークを介して第２のサービスハブに送信されてよい。別の実施例では、関数チェックポイントは、サービスプロバイダ環境のチェックポイントストレージに送信されてよく、第２のサービスハブは、サービスプロバイダ環境のチェックポイントストレージから関数チェックポイントを取り出してよい。一実施例では、関数チェックポイントはサービスプロバイダ環境における第２のサービスハブの状態を表すために使用されるデバイス表現（例えば、デバイス状態のシャドーコピー）に保存されてよく、第２のサービスハブは、サービスプロバイダ環境に位置するデバイス表現から関数チェックポイントを取り出してよい。
【００６１】
関数チェックポイントを受け取った後、第２のサービスハブは第２のサービスハブに位置する永続記憶装置に関数チェックポイントを格納し、次いで関数チェックポイントに含まれる実行命令及び実行状態データを使用して第２のサービスハブのメモリの中のプログラムコード関数のインスタンスの実行状態を再開してよい。代替実施例では、関数チェックポイントはサービスプロバイダ環境に送信されてよく、そこでプログラムコード関数のインスタンスは、関数チェックポイントに含まれる実行命令及び実行状態データを使用してサービスプロバイダ環境に位置するコンピューティングインスタンス上で再開されてよい。
【００６２】
図７は、上述のデバイスが通信し得る例示的なデバイスサービスネットワーク７１０を示すブロック図である。デバイス通信環境またはシステムと呼ばれる場合があるデバイスサービスネットワーク７１０は、広域ネットワークへのアクセスを提供するローカル無線ネットワークなどのネットワーク７２０を介してゲートウェイサーバ７４０にアクセスするサービスハブ７１２及びデバイス７３０に、ゲートウェイサーバ７４０を介してアクセス可能にされた多様なリソースを含む。デバイス７３０は、データストレージ機能及びコンピューティング処理機能などのネットワークサービス及びデバイスサービスにアクセスするために、サービスハブ７１２を介してデバイスサービスネットワーク７１０にアクセスしてよい。デバイスサービスネットワーク７１０で動作するサービスは、デバイス７３０からの要求に応えて、及び／またはサービス内でのコンピューティング操作に応えて、サービスハブ７１２を介してデバイス７３０にデータ及び公開メッセージを通信してよい。
【００６３】
デバイスサービスネットワーク７１０は、デバイス７３０にサービスを提供するために動作する通信可能に結合された構成要素システム７４０、７４２、７４６、７５０、及び７７０を含んでよい。ゲートウェイサーバ７４０は、デバイス７３０とデバイスサービスネットワーク７１０との間のインタフェースを提供するように構成されてよい。ゲートウェイサーバ７４０はデバイス７３０から要求を受け取り、デバイスサービスネットワーク７１０内の適切なシステムに対応するデータ及び公開メッセージを転送する。同様に、デバイスサービスネットワーク７１０内のシステムがデバイス７３０にデータ命令を通信しようと試みるとき、ゲートウェイサーバ７４０は、正しいデバイス７３０にそれらの要求をルーティングする。
【００６４】
ゲートウェイサーバ７４０は、様々な異なるコンピューティング機能及び通信機能を使用して、多様なデバイス７３０と通信するように適合されてよい。例えば、ゲートウェイサーバ７４０は、ＴＣＰ（伝送制御プロトコル）またはＵＤＰ（ユーザーデータグラムプロトコル）プロトコルのどちらかを使用して通信するように適合されてよい。同様に、ゲートウェイサーバ７４０は、例えばＭＱＴＴ（メッセージキューテレメトリトランスポート）、ＣｏＡＰ（制約付きアプリケーションプロトコル）、ＨＴＴＰ（ハイパーテキスト転送プロトコル）及びＨＴＴＰＳ（ＨＴＴＰセキュア）を含む任意の適切なプロトコルを使用して、受け取り、デバイス７３０と通信するようにプログラムされてよい。ゲートウェイサーバ７４０は、デバイス７３０から受け取ったデータ及び命令または公開メッセージを、デバイスサービスネットワーク７１０に含まれる他のサーバシステムが使用し得るフォーマットに変換するようにプログラムされてよい。一実施例では、ゲートウェイサーバ７４０は、ＨＴＴＰＳプロトコルを使用して受け取った公開メッセージを、デバイスサービスネットワーク７１０内の他のサーバへの通信に適したＪＳＯＮ（Ｊａｖａｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）フォーマットの公開メッセージに変換するように適合されてよい。
【００６５】
ゲートウェイサーバ７４０は、特定のゲートウェイサーバ７４０への接続を形成するデバイス７３０であって、特定のゲートウェイサーバ７４０がデバイス７３０との通信のために一般に依存される場合があるデバイス７３０に関する情報を格納してよい、または情報の格納を制御してよい。一実施例では、ゲートウェイサーバ７４０は、デバイス識別子などの特定のデバイス７３０を指定する情報をそこに格納している場合がある。特定のデバイス７３０から確立された接続ごとに、ゲートウェイサーバ７４０は接続を識別する情報も保持してよい。例えば、特定のデバイス７３０と確立された接続ごとに、接続識別子が生成され、格納されてよい。特定の接続に関係する情報も格納されてよい。例えば、接続が確立されたゲートウェイサーバ７４０の特定のソケットを識別する情報、及び接続時にデバイス７３０によって使用された特定のプロトコルを識別する情報も、ゲートウェイサーバ７４０によって格納されてよい。ソケット及びプロトコルなどの情報は、特定の接続を介した追加の通信を容易にするために使用されてよい。
【００６６】
一実施例では、ゲートウェイサーバ７４０は、任意の適切なネットワーキング技術を介して、デバイスレジストリサーバ７４２と通信してよい。デバイスレジストリサーバ７４２は、各デバイス７３０の属性及び機能を追跡するように適合されてよい。一実施例では、デバイスレジストリサーバ７４２は、デバイス７３０の属性を指定する情報でプロビジョニングされてよい。デバイスレジストリサーバ７４２は、デバイス７３０から受け取られる場合がある様々な要求を処理するための規則または論理（例えば、自動化規則）を指定するデータを含んでよい。デバイスレジストリサーバ７４２は、デバイスサービスネットワーク７１０内のサーバの他のサーバによって理解される特定のプロトコルを使用して、例えばＨＴＴＰＳ、ＭＱＴＴ、ＣｏＡＰなどの特定の通信プロトコルで受け取られる特殊デバイス関数またはコマンドを、関数またはコマンドに変換するようにプログラムされてよい。一実施例では、デバイスレジストリサーバ７４２は、特定のデバイス７３０からの特定の要求の受信時に、特定のネットワークサービスサーバ７５０に要求のペイロードデータを格納する要求が行われる必要があることを指定する情報でプロビジョニングされてよい。デバイスレジストリサーバ７４２は、サーバ７４２、７５０からの要求を受け取り、それらの要求をデバイス７３０によって理解されるコマンド及びプロトコルに変換するように同様にプログラムされてよい。
【００６７】
いくつかの実施例では、デバイスサービスネットワーク７１０は、関数移行サーバ７７０を含んでよい。関数移行サーバ７７０は、宛先サービスハブに関数チェックポイントを転送するように構成されてよい。例えば、関数チェックポイントを受け取ったことに応えて、関数移行サーバ７７０は、宛先サービスハブを識別し、宛先サービスハブに関数チェックポイントを送信してよい。
【００６８】
デバイスセキュリティサーバ７４６は、デバイスサービスネットワーク７１０に接続するデバイス７３０に対するセキュリティ関連情報を維持する。一実施例では、デバイスセキュリティサーバ７４６は、デバイス７３０をデバイスサービスネットワーク７１０に登録する要求を処理するようにプログラムされてよい。例えば、デバイス製造業者などのエンティティは、デバイスサービスネットワーク７１０にデバイス７３０を登録する要求を転送してよい。デバイスセキュリティサーバ７４６は、登録要求を受け取り、後続の要求でデバイス識別子を使用してデバイスサービスネットワーク７１０にアクセスするデバイス７３０に一意のデバイス識別子を割り当てる。デバイスセキュリティサーバ７４６は、登録されたデバイスごとに、デバイス登録プロセス中に提供される場合がある認証情報を格納する。例えば、デバイス７３０を登録する要求は、デバイスシリアルナンバーなどのデバイス７３０を識別する情報、及びデバイス７３０を認証する際に使用するための情報を含んでよい。一実施例では、情報は、デジタル証明書を含んでよく、公開鍵−秘密鍵の対のうちの公開鍵を含んでよい。情報は、特定のデバイス７３０のために割り当てられたデバイス識別子に関係して格納されてよい。デバイス７３０がその後、デバイスサービスネットワーク７１０にアクセスしようと試みると、要求は評価のためにデバイスセキュリティサーバ７４６に送られてよい。デバイスセキュリティサーバ７４６は、要求で提供された認証情報が、デバイス識別子に関係して格納され、登録プロセス中に提供された認証情報と一致しているかどうかを判断する。
【００６９】
デバイスセキュリティサーバ７４６は、特定のデバイス７３０と特定のエンティティ（個人または組織）を関連付ける要求を処理するようにさらにプログラムされてよい。デバイスセキュリティサーバ７４６は、特定のデバイス７３０を制御するまたは特定のデバイス７３０と通信する権限を与えられている、例えば個人、ユーザー、アカウント、及び／または組織であってよいエンティティを登録する要求を受け取るように適合されてよい。一実施例では、要求は、製造業者からデバイス７３０を購入した可能性がある個人または組織から受け取られてよい。例えば、デバイスは、個人もしくは組織が製造業者から購入した食洗器、サーモスタット、または照明アセンブリであってよい。個人または組織は、組織が関連付けられている個人または組織にデバイス７３０を登録する要求を開始してよい。要求は、デバイスサービスネットワーク７１０の中に含まれてよい、またはデバイスサービスネットワーク７１０に要求を通信するウェブサービスサーバにルーティングされてよい。要求は、デバイス７３０、及びデバイス７３０と関連付けられることを要求している特定のエンティティ（個人または組織）を識別する。一実施例では、要求は、デバイス７３０がシステムに登録されたときに割り当てられた一意のデバイス識別子を含んでよい。要求は、特定のデバイス７３０と通信する及び／または特定のデバイス７３０を制御する権限を有するとして登録しているエンティティを一意に識別する情報をさらに含んでよい。
【００７０】
デバイスセキュリティサーバ７４６は、デバイス識別子と関係して特定のエンティティを識別する情報を格納する。特定のエンティティがその後データを制御する、またはデータを特定のデバイス７３０へ通信することを試みると、デバイスセキュリティサーバ７４６は、特定のエンティティが特定のデバイス７３０と通信するまたは特定のデバイス７３０を制御する権限を与えられていることを確認するために情報を使用し得る。デバイス７３０と通信する権限を与えられているとして登録されていないエンティティがデバイス７３０と通信するまたはデバイス７３０を制御することを試みると、デバイスセキュリティサーバ７４６は、デバイスセキュリティサーバ７４６に格納された情報を使用して要求を拒否し得る。
【００７１】
ネットワークサービスサーバ７５０は、デバイス７３０からの要求を処理する際にサーバ７４０、７４２、７４６、または７７０のいずれかによって使用され得る任意のリソースまたは処理サーバであってよい。一実施例では、ネットワークサービスサーバ７５０は、データストレージサービス及び取り出しサービス、及び／またはオンデマンド処理能力を提供してよい。例示的な状況では、ネットワークサービスサーバ７５０は、例えばウェブまたはクラウドベースのサービスを含む多数のネットワークアクセス可能サービスのいずれかであってよい。一実施例では、ウェブサービスサーバ７５０は、特定のデバイス７３０及び／またはデバイス７３０のグループに特定の処理を提供するようにプログラムされてよい。
【００７２】
サーバ７４０、７４２、７４６、７５０、及び７７０は、任意の適切なネットワーキングハードウェア及びソフトウェアを介して通信可能に結合されてよい。例えば、サーバは、ローカルエリアネットワークまたは広域ネットワークを介して通信してよい。
【００７３】
外部システム７６０は、任意の数の目的のためにデバイスサービスネットワーク７１０にアクセスしてよい。一実施例では、外部システム７６０は、デバイス７３０をデバイスサービスネットワーク７１０に登録する要求を転送するように適合されたシステムであってよい。例えば、外部システム７６０は、デバイスサービスネットワーク７１０、及び特にデバイスセキュリティサーバ７４６に、デバイスサービスネットワーク７１０との動作のためにデバイス７３０を登録する要求を送信するデバイス製造業者によって、またはデバイス製造業者のために操作されるサーバを含んでよい。同様に、外部システム７６０は、所有権を登録するまたは特定のデバイス７３０との関係性を制御するためにエンティティ（個人または組織）にゲートウェイを提供するために操作されるシステムであってよい。
【００７４】
デバイス７３０は、サービスハブ７１２またはネットワーク７２０を介してデバイスサービスネットワーク７１０と通信可能に結合されてよい任意のデバイスであってよい。例えば、デバイス７３０は、スマートフォン及びタブレットコンピュータなどのコンピューティングデバイス、自動車、洗濯機及び乾燥機などの電化製品、工業用センサ、スイッチ、制御システムなどであってよい。一実施例では、デバイス７３０のそれぞれは、特定のデバイス７３０の動作を反映するデータを格納するために、及び／または例えばネットワークサービスサーバ７５０によって提供される処理を要求するために、ネットワーク７２０を介して通信してよい。図７は３つのデバイス７３０を示しているが、任意の数のデバイス７３０がゲートウェイサーバ７４０を介してデバイスサービスネットワーク７１０にアクセスし得ることが理解される。さらに、デバイス７３０が様々な異なる通信プロトコルを利用してよいことが理解される。例えば、いくつかのデバイス７３０はＴＣＰを使用してデータをトランスポートしてよく、一方、他のデバイスはＵＤＰを使用してデータを通信してよい。いくつかのデバイス７３０はＭＱＴＴを使用してよく、一方、他のデバイスはＣｏＡＰを使用してよく、さらに他のデバイスはＨＴＴＰｓを使用してよい。また、デバイス７３０のそれぞれが、その要求で、他のデバイスと、またはデバイスサービスネットワーク７１０内のシステムとも互換性のない特定の関数またはコマンドを送受するようにプログラムされてよいことも理解される。ゲートウェイサーバ７４０は、デバイスサービスネットワーク７１０を用いる処理に対するそのような要求を受け取り、必要とされる場合、変換することとなるようにプログラムされてよい。
【００７５】
図８は、上述のデバイスサービスネットワークを実装するために使用されてよい例示的なサービスプロバイダ環境８００を示すブロック図である。サービスプロバイダ環境８００は、物理ホスト８０２ａ〜ｅ、コンピューティングインスタンス８０４ａ〜ｅ、仮想化サービスを含んでよいコンピューティングリソース、及びコンピューティングサービスプロバイダのカスタマによる購入及び使用に利用可能であってよい他のタイプのコンピューティングリソースを含んでよい。コンピューティングリソースは、プロセッサ機能、メインメモリ、ディスクストレージ、及びオペレーティングシステムの多くの異なる構成を有する場合がある。特に、示されているサービスプロバイダ環境８００は、本明細書に説明する技術を使用し得る１つの環境を示す。
【００７６】
サーバプロバイダ環境８００は、例えばコンピューティングインスタンス８０４ａ〜ｅをホストするために使用し得る様々な仮想化サービスリソースを含む１つのタイプの環境であってよい。例えば、サービスプロバイダ環境８００は、恒久的にまたは必要な場合に応じて、仮想デバイスもしくはハードウェアデバイス、データベースリソース及びインスタンス、ファイルもしくはブロックデータストレージリソース、及び／またはロードバランシングリソース、ドメインネームサービス（「ＤＮＳ」）リソース、仮想プライベートクラウド（「ＶＰＣ」）リソース、仮想ローカルエリアネットワーク（「ＶＬＡＮ」）リソース、及び／または他のタイプのハードウェア及びソフトウェアコンピューティングリソースなどのネットワーキングリソース、またはネットワークサービスを提供してよい。また、コンピューティングリソースは、コンピューティングインスタンス８０４ａ〜ｅ及び画像、セキュリティグループ、オプショングループ、ゲートウェイ、オプションセット、ネットワークアクセス制御リスト（「ＡＣＬ」）、サブネット、ストレージバケット、ネットワークインタフェース、スナップショット、スポット市場要求、及びストレージボリュームを含む場合があるが、これに限定されるものではない。
【００７７】
上述のコンピューティングリソースは、サービスプロバイダによって運営される１つ以上のデータセンタによる１つの特定の実装で提供されてよい。当業者に既知であるように、データセンタは、コンピュータシステム及び関連構成要素を収容し、操作するために利用される施設である。また、データセンタは、通常、冗長な電源及びバックアップ電源、通信、冷却、及びセキュリティのシステムを含む。データセンタは、地理的に離れた地域に位置する場合があり、コロケーション施設などの様々な他の施設、及びインターネットなどの様々な広域ネットワーク８１２（「ＷＡＮ」）に接続する場合もある。
【００７８】
サービスプロバイダ環境８００は、最終受信者のコミュニティに、ソフトウェアサービスとしてコンピューティング、ストレージ、及びネットワーキングの能力を送達できる場合がある。一実施例では、サービスプロバイダ環境８００は、組織によってまたは組織の代わりに、組織のために確立されてよい。すなわち、サービスプロバイダ環境８００は、「プライベートクラウド環境」を提供してよい。別の実施例では、サービスプロバイダ環境８００は、複数のカスタマが独立して動作してよいマルチテナント環境をサポートしてよい（つまり、パブリッククラウド環境）。一般的に言えば、サービスプロバイダ環境８００は、以下のモデル、つまりインフラストラクチャアズアサービス（「ＩａａＳ」）、プラットフォームアズアサービス（「ＰａａＳ」）、及び／またはソフトウェアアズアサービス（「ＳａａＳ」）を提供してよい。他のモデルが提供される場合がある。ＩａａＳモデルの場合、サービスプロバイダ環境８００は、物理マシンまたは仮想マシンとしてのコンピュータ及び他のリソースを提供してよい。仮想マシンは、以下にさらに説明するように、ハイパーバイザによってゲストとして実行されてよい。ＰａａＳモデルは、オペレーティングシステム、プログラミング言語実行環境、データベース、及びウェブサーバを含んでよいコンピューティングプラットフォームを実現させる。
【００７９】
アプリケーション開発者は、基礎を成すハードウェア及びソフトウェアを購入し、管理するコストを生じさせずにコンピューティングサービスプラットフォーム上で自分のソフトウェアソリューションを開発し、実行し得る。ＳａａＳモデルは、サービスプロバイダ環境８００でのアプリケーションソフトウェアのインストール及び動作を可能にする。最終カスタマは、例えばウェブブラウザまたは他の軽量クライアントアプリケーションを実行中のデスクトプコンピュータ、ラップトップ、タブレット、スマートフォンなどのネットワーク化されたクライアントデバイスを使用してサービスプロバイダ環境８００にアクセスしてよい。当業者は、サービスプロバイダ環境８００が「クラウド」環境として記述されてよいことを認識する。
【００８０】
特に示されたサービスプロバイダ環境８００は、複数のサーバコンピュータ８０２ａ〜ｅを含んでよい。４つのサーバコンピュータが示されているが、任意の数が使用されてよく、大型データセンタは数千のサーバコンピュータを含む場合がある。サービスプロバイダ環境８００は、コンピューティングインスタンス８０４ａ〜ｅを実行するためのコンピューティングリソースを提供してよい。コンピューティングインスタンス８０４ａ〜ｅは、例えば仮想マシンであってよい。仮想マシンは、物理マシンのようにアプリケーションを実行するマシン（つまり、コンピュータ）のソフトウェア実装のインスタンスであってよい。仮想マシンの実施例では、サーバコンピュータ８０２ａ〜ｅのそれぞれは、インスタンスを実行できるインスタンスマネージャ８０８ａ〜ｅを実行するように構成されてよい。インスタンスマネージャ８０８ａ〜ｅは、ハイパーバイザ、仮想マシンモニタ（ＶＭＭ）、または単一のサーバ上での複数のコンピューティングインスタス８０４ａ〜ｅの実行を可能にするように構成された別のタイプのプログラムであってよい。さらに、コンピューティングインスタンス８０４ａ〜ｅのそれぞれは、１つ以上のアプリケーションを実行するように構成されてよい。
【００８１】
１つ以上のサーバコンピュータ８１６は、サービスプロバイダ環境８００及びコンピューティングインスタンス８０４ａ〜ｅの動作を管理するためのソフトウェア構成要素を実行するために確保されてよい。例えば、サーバコンピュータ８１６は管理構成要素８１８を実行してよい。カスタマは管理構成要素８１８にアクセスして、カスタマが購入したコンピューティングインスタンス８０４ａ〜ｅの動作の様々な態様を構成してよい。例えば、カスタマは、コンピューティングインスタンス８０４ａ〜ｅをセットアップし、コンピューティングインスタンス８０４ａ〜ｅの構成に変更を加えてよい。
【００８２】
展開構成要素８２２は、コンピューティングインスタンス８０４ａ〜ｅの展開でカスタマを支援するために使用されてよい。展開構成要素８２２は、アカウントの所有者の名前、クレジットカード情報、所有者の国など、コンピューティングインスタンス８０４ａ〜ｅと関連付けられたアカウント情報にアクセスし得る。展開構成要素８２２は、コンピューティングインスタス８０４ａ〜ｅをどのように構成し得るのかを記述するデータを含むカスタマからの構成を受け取ってよい。例えば、構成は、オペレーティングシステムを含み、コンピューティングインスタンス８０４ａ〜ｅにインストールされる１つ以上のアプリケーションを提供し、コンピューティングインスタンス８０４ａ〜ｅを構成するために実行されるスクリプト及び／または他のタイプのコードを提供し、アプリケーションキャッシュをどのようにして作成する必要があるのかを指定するキャッシュ論理、及び他のタイプの情報を提供してよい。展開構成要素８０２は、コンピューティングインスタンス８０４ａ〜ｅを構成し、準備し、起動するためにカスタマ提供の構成及びキャッシュ論理を利用してよい。構成、キャッシュ論理、及び他の情報は、カスタマが管理構成要素８１８にアクセスすることによって、または展開構成要素８２２にこの情報を直接的に提供することによって指定されてよい。
【００８３】
カスタマアカウント情報８２４は、マルチテナント環境のカスタマと関連付けられた任意の所望の情報を含んでよい。例えば、カスタマアカウント情報は、カスタマのための一意の識別子、カスタマアドレス、請求書作成情報、ライセンシング情報、インスタンスを起動するためのカスタマイズパラメータ、スケジューリング情報などを含んでよい。上述のように、カスタマアカウント情報８２４は、ＡＰＩ要求に対する非同期応答の暗号化に使用されるセキュリティ情報を含む場合もある。「非同期」とは、ＡＰＩ応答が、初期要求後の任意の時点で、及び異なるネットワーク接続でなされてよいことを意味する。
【００８４】
ネットワーク８１０は、サービスプロバイダ環境８００及びサーバコンピュータ８０２ａ〜ｅ、８１６を相互接続するために利用されてよい。ネットワーク８１０は、ローカルエリアネットワーク（ＬＡＮ）であってよく、広域ネットワーク（ＷＡＮ）８１２またはインターネットに接続されてよく、それにより最終カスタマは、サービスプロバイダ環境８００にアクセスし得る。図８に示すネットワークトポロジは簡略化されており、より多くのネットワーク及びネットワーキングデバイスが、本明細書に開示する様々なコンピューティングシステムを相互接続するために利用されてよい。
【００８５】
図９は、本技術のモジュールが実行し得るコンピューティングデバイス９１０を示す。本技術の高レベルの実施例が実行され得るコンピューティングデバイス９１０が示される。コンピューティングデバイス９１０は、メモリデバイス９２０と通信する１つ以上のプロセッサ９１２を含んでよい。コンピューティングデバイス９１０は、コンピューティングデバイス内の構成要素のためのローカル通信インタフェース９１８を含んでよい。例えば、ローカル通信インタフェース９１８は、所望される場合があるローカルデータバス及び／または任意の関連アドレスまたは制御バスであってよい。
【００８６】
メモリデバイス９２０は、プロセッサ（複数可）９１２によって実行可能であるモジュール９２４、及びモジュール９２４のためのデータを含んでよい。一態様では、メモリデバイス９２０は、チェックポイントマネージャ、移行管理モジュール、及び他のモジュールを含んでよい。別の態様では、メモリデバイス９２０は、ネットワーク接続モジュール及び他のモジュールを含んでよい。モジュール９２４は、上述の関数を実行し得る。また、データストア９２２は、プロセッサ（複数可）９１２によって実行可能であるオペレーティングシステムとともに、モジュール９２４及び他のアプリケーションに関係するデータを格納するためのメモリデバイス９２０に位置する場合もある。
【００８７】
また、他のアプリケーションは、メモリデバイス９２０に格納されてもよく、プロセッサ（複数可）９１２によって実行可能であってよい。本明細書で説明する構成要素またはモジュールは、方法のハイブリッドを使用してコンパイル、解釈、または実行される高水準プログラミング言語を使用して、ソフトウェアの形で実装されてよい。
【００８８】
また、コンピューティングデバイスは、コンピューティングデバイスによって使用可能であるＩ／Ｏ（入出力）デバイス９１４にアクセスしてもよい。ネットワーキングデバイス９１６及び類似する通信デバイスは、コンピューティングデバイスに含まれてよい。ネットワーキングデバイス９１６は、インターネット、ＬＡＮ、ＷＡＮ、または他のコンピューティングネットワークに接続する有線ネットワーキングデバイスまたは無線ネットワーキングデバイスであってよい。
【００８９】
メモリデバイス９２０に格納されていると示される構成要素またはモジュールは、プロセッサ（複数可）９１２によって実行されてよい。用語「実行ファイル」は、プロセッサ９１２によって実行され得る形式であるプログラムファイルを意味してよい。例えば、より高水準の言語のプログラムが、メモリデバイス９２０のランダムアクセス部分にロードされ、プロセッサ９１２によって実行されてよいフォーマットのマシンコードにコンパイルされる場合もあれば、ソースコードが別の実行可能プログラムによってロードされ、プロセッサによって実行されるメモリのランダムアクセス部分に命令を生成させるために解釈される場合もある。実行可能プログラムは、メモリデバイス９２０の任意の部分または構成要素に格納されてよい。例えば、メモリデバイス９２０は、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、フラッシュメモリ、ソリッドステートドライブ、メモリカード、ハードドライブ、光ディスク、フロッピーディスク、磁気テープ、または任意の他のメモリ構成要素であってよい。
【００９０】
プロセッサ９１２は複数のプロセッサを表してよく、メモリデバイス９２０は処理回路と並列に動作する複数のメモリユニットを表してよい。これにより、システム内のプロセス及びデータに並列処理チャネルが提供されてよい。ローカルインタフェース９１８は、複数のプロセッサのいずれかと複数のメモリとの間の通信を容易にするためにネットワークとして使用されてよい。ローカルインタフェース９１８は、負荷分散、バルクデータ転送、及び同様のシステムなどの通信を調整するために設計された追加のシステムを使用してよい。
【００９１】
本技術のために提示されたフローチャートは、特定の実行順序を暗示する場合があるが、実行の順序は示されているものと異なる場合がある。例えば、２つ以上のブロックの順序が、示されている順序に比べて並べ替えられる場合がある。さらに、連続して示される２つ以上のブロックは、並列でまたは部分的に並列化されて実行されてよい。いくつかの構成では、フローチャートに示す１つ以上のブロックは、省略またはスキップしてよい。任意の数のカウンタ、状態変数、警告セマフォ、またはメッセージが、有用性、アカウンティング、性能、測定、トラブルシューティングの強化のために、または同様の理由から論理フローに追加される可能性がある。
【００９２】
本明細書に説明する機能単位のいくつかは、その実装の独立性をより具体的に強調するためにモジュールとラベル付けされている。例えば、モジュールは、カスタムＶＬＳＩ回路またはゲートアレイ、論理チップ、トランジスタなどの既製の半導体、または他のディスクリート部品を含むハードウェア回路として実装されてよい。また、モジュールは、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、プログラマブルロジックデバイスなどのプログラム可能なハードウェアデバイスで実装されてもよい。
【００９３】
また、モジュールは、様々なタイプのプロセッサによる実行のためにソフトウェアに実装されてよい。実行可能コードの識別されたモジュールは、オブジェクト、プロシージャ、または関数として編成され得る、例えばコンピュータ命令の１つ以上のブロックを含んでよい。それにも関わらず、識別されたモジュールの実行ファイルは、物理的にともに位置する必要はないが、モジュールを含む異なる場所に格納された異なる命令を含み、論理的に互いに結合されたときにモジュールのために記述された目的を達成してよい。
【００９４】
実際に、実行可能コードのモジュールは単一の命令であってもよく、多くの命令であってもよく、さらにはいくつかの異なるコードセグメント上で、異なるプログラムの間で、及びいくつかのメモリデバイスにわたって分散されてもよい。同様に、動作データは、本明細書ではモジュール内で識別され、示されてよく、任意の適切な形式で実施され、任意の適切なタイプのデータ構造内で編成されてよい。動作データは、単一データセットとして収集される場合もあれば、異なるストレージデバイスを含む異なる場所に分散される場合もある。モジュールは、所望の関数を実行するために動作可能なエージェントを含み、パッシブまたはアクティブであってよい。
【００９５】
また、本明細書に説明する技術は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意の技術で実装される揮発性及び不揮発性、取り外し可能及び取り外し不可能な媒体を含むコンピュータ可読記憶媒体に格納され得る。コンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ‐ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置などの非一過性の機械可読記憶媒体、または所望の情報及び記載された技術を格納するために使用され得る他の任意のコンピュータ記憶媒体を含むが、これに限定されるものではない。
【００９６】
また、本明細書に記載されるデバイスは、デバイスが他のデバイスと通信することを可能にする通信接続またはネットワーキング装置及びネットワーキング接続を含んでよい。通信接続は通信媒体の一例である。通信媒体は、通常、コンピュータ可読命令、データ構造、プログラムモジュール、及び他のデータを、搬送波または他の転送機構などの変調データ信号内に具現化し、任意の情報配信媒体を含む。「変調データ信号」は、その特徴の１つ以上が、信号の中の情報を符号化するように設定または変更された信号を意味する。限定ではなく例として、通信媒体は、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音響、無線周波数、赤外線、及び他の無線媒体などの無線媒体を含む。本明細書で使用されるコンピュータ可読媒体という用語は通信媒体を含む。
【００９７】
図面に示される実施例への参照が行われ、同を説明するために本明細書では特定の言語が使用された。それでもなお、本技術の範囲がそれによって限定されないことを意図していることが理解されよう。本明細書に示された特徴の変更及びさらなる修正、ならびに本明細書に例示されたような実施例のさらなる応用は、本明細書の範囲内と見なされるべきである。
【００９８】
以下の実施例を考慮して、上述したことをより良好に理解することができる。
【００９９】
実施例１は、システムであって、
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサによる実行時に、前記システムに、
第１のサービスハブにおいてプログラムコード関数を受け取ることであって、前記第１のサービスハブが、複数のサービスハブと、前記複数のサービスハブによって提供されるサービスにアクセスするために前記複数のサービスハブに接続する複数の接続デバイスとを含むローカルデバイスネットワークに含まれる、前記受け取ることと、
前記第１のサービスハブ上で前記プログラムコード関数のインスタンスを実行する命令を受け取ることと、
前記第１のサービスハブで前記プログラムコード関数の前記インスタンスの実行を一時停止することと、
前記第１のサービスハブの少なくとも１つのメモリデバイスから前記プログラムコード関数の前記インスタンスに対する実行命令及び実行状態データを取得することと、
前記プログラムコード関数の前記インスタンスに対する前記実行命令及び前記実行状態データを含む関数チェックポイントを作成することと、
前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データに部分的に基づいて、第２のサービスハブで前記プログラムコード関数の前記インスタンスを実行するために利用可能である前記ローカルデバイスネットワークに含まれる前記第２のサービスハブを識別することと、
前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データを使用して、前記プログラムコード関数の前記インスタンスの前記実行状態のロードを可能にするために、前記第１のサービスハブから前記第２のサービスハブに前記関数チェックポイントを送信することと、
を行わせる命令を含む、前記少なくとも１つのメモリデバイスと
を備える、前記システム。
【０１００】
実施例２は、実施例１に記載のシステムであって、前記メモリデバイスが、前記少なくとも１つのプロセッサによる実行時に、前記システムに、さらに
前記第１のサービスハブでの前記プログラムコード関数の前記インスタンスの実行に関係するメタデータを取得すること、
前記関数チェックポイントとともに前記メタデータを含むこと、
を行わせる命令を含む。
【０１０１】
実施例３は、実施例１に記載の主題を含み、前記メモリデバイスが、前記少なくとも１つのプロセッサによる実行時に、前記システムに前記第１のサービスハブに位置する永続記憶装置に前記関数チェックポイントを記憶させる命令を含む。
【０１０２】
実施例４は、実施例１及び３のいずれか１つの主題を含み、前記第２のサービスハブが前記第１のサービスハブから前記関数チェックポイントを受け取り、前記第２のサービスハブに位置する永続記憶装置に前記関数チェックポイントを格納し、前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データを使用して、前記第２のメモリサービスハブのメモリに前記プログラムコード関数の前記インスタンスの前記実行状態をロードする。
【０１０３】
実施例５は、コンピュータ実装方法であって、
複数のサービスハブと、前記複数のサービスハブによって提供されるサービスにアクセスするために前記複数のサービスハブに接続する複数の接続デバイスとを含むローカルデバイスネットワークに含まれる第１のサービスハブでプログラムコード関数のインスタンスを実行する命令を受け取ることと、
前記第１のサービスハブのメモリにロードされた前記プログラムコード関数の前記インスタンスに対する関数チェックポイントを作成することであって、前記関数チェックポイントが、前記プログラムコード関数の前記インスタンスに対する実行命令及び実行状態データを含む、前記作成することと、
前記ローカルデバイスネットワークに含まれる第２のサービスハブを識別することと、
前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データに部分的に基づいて、前記プログラムコード関数の前記インスタンスの実行を前記第２のサービスハブで実行できるようにするために、前記第２のサービスハブに前記関数チェックポイントを送信することと
を含む、前記コンピュータ実装方法。
【０１０４】
実施例６は、実施例５の主題を含み、
前記第１のサービスハブで前記プログラムコード関数の前記インスタンスの実行を一時停止させることと、
前記第１のサービスハブの前記メモリから前記実行命令及び前記実行状態データを取り出すことと
をさらに含む。
【０１０５】
実施例７は、実施例５の主題を含み、
前記第１のサービスハブの健全性の状態が不安定であることを検出することと、
前記第２のサービスハブに移動させる前記プログラムコード関数の前記インスタンスを選択することと
をさらに含む。
【０１０６】
実施例８は、実施例５の主題を含み、
前記第１のサービスハブのコンピューティングリソースが過負荷であることを検出することと、
前記第２のサービスハブに移動させる前記プログラムコード関数の前記インスタンスを選択することと
をさらに含む。
【０１０７】
実施例９は、実施例５の主題を含み、関数タイプ、関数実行状態、または関数完了状態を含む選択基準を使用して、前記第２のサービスハブに移動させる前記プログラムコード関数の前記インスタンスを選択することをさらに含む。
【０１０８】
実施例１０は、実施例５の主題を含み、前記ローカルデバイスネットワークに含まれる前記第２のサービスハブを識別することが、前記プログラムコード関数の前記インスタンスをホストするために前記第２のサービスハブを割り当てる移行構成ファイルを参照することをさらに含む。
【０１０９】
実施例１１は、実施例５の主題を含み、前記ローカルデバイスネットワークに含まれる前記第２のサービスハブを識別することが、前記第２のサービスハブの計算負荷に部分的に基づいて、前記第２のサービスハブを識別することをさらに含む。
【０１１０】
実施例１２は、実施例５の主題を含み、前記関数チェックポイントを作成することが、前記プログラムコード関数の前記インスタンスを実行するための隔離された環境を提供するソフトウェアコンテナの画像を作成することをさらに含む。
【０１１１】
実施例１３は、実施例５及び実施例１２のいずれか１つの主題を含み、前記関数チェックポイントを作成することが、前記第２のサービスハブの永続記憶装置へのバックアップのために前記関数チェックポイントを定期的に作成することをさらに含む。
【０１１２】
実施例１４は、実施例５及び実施例１２〜１３のいずれか１つの主題を含み、前記第２のサービスハブに前記関数チェックポイントを送信することが、ローカルエリアネットワークを介して前記第２のサービスハブに前記関数チェックポイントを送信することをさらに含む。
【０１１３】
実施例１５は、実施例５及び実施例１２〜１４のいずれか１つの主題を含み、前記第２のサービスハブに前記関数チェックポイントを送信することが、サービスプロバイダ環境のチェックポイントストレージに前記関数チェックポイントを送信することをさらに含み、前記関数チェックポイントが、前記第２のサービスハブによって前記サービスプロバイダ環境の前記チェックポイントストレージから取り出し可能である。
【０１１４】
実施例１６は、実施例５及び実施例１２〜１５のいずれか１つの主題を含み、前記関数チェックポイントを作成し、前記第２のサービスハブに前記関数チェックポイントを送信することが、
前記第１のサービスハブの揮発性メモリに前記関数チェックポイントを作成することと、
ネットワークを介して前記第２のサービスハブに前記関数チェックポイントを送信することであって、前記第２のサービスハブが、前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データを使用して前記第２のサービスハブの揮発性メモリに前記プログラムコード関数の前記インスタンスをロードする、前記送信することと
をさらに含む。
【０１１５】
実施例１７は、実施例５及び実施例１２〜１６のいずれか１つの主題を含み、サービスハブのグループに含まれるサービスハブでホストされるサービスハブの前記グループにプログラムコード関数を展開することをさらに含む。
【０１１６】
実施例１８は非一過性機械可読記憶媒体であって、前記非一過性機械可読記憶媒体に実装される命令を含み、１つ以上のプロセッサによる実行時に、前記命令が、
複数のサービスハブと、前記複数のサービスハブによって提供されるサービスにアクセスするために前記サービスハブに接続する複数の接続デバイスとを含むローカルデバイスネットワークに含まれる第１のサービスハブでプログラムコード関数のインスタンスを呼び出すことと、
前記第１のサービスハブで前記プログラムコード関数の前記インスタンスの実行を一時停止することと、
前記プログラムコード関数の前記インスタンスに対する実行命令、実行状態データ、及び関数メタデータを取得することと、
前記実行命令、前記実行状態データ、及び前記関数メタデータを含む関数チェックポイントを作成することと、
サービスプロバイダ環境に格納されるように、かつ、前記関数チェックポイントに含まれる前記実行命令及び前記実行状態データに部分的に基づいて、第２のサービスハブが前記第２のサービスハブで前記プログラムコード関数の前記インスタンスを実行できるようにすることにより、前記関数チェックポイントを取り出すことを可能にするように、前記サービスプロバイダ環境に前記関数チェックポイントを送信することと、
を行う、前記非一過性機械可読記憶媒体。
【０１１７】
実施例１９は、実施例１８の主題を含み、前記関数チェックポイントが、前記サービスプロバイダ環境の前記第２のサービスハブの前記状態を表すために使用されるデバイス表現に保存され、前記第２のサービスハブが前記デバイス表現から前記関数チェックポイントを取り出す。
【０１１８】
実施例２０は、実施例１８〜１９の主題を含み、前記第２のサービスハブが、前記サービスプロバイダ環境に位置するコンピューティングインスタンスであり、前記プログラムコード関数の前記インスタンスの前記実行状態が、前記コンピューティングインスタンスにロードされる。
【０１１９】
さらに、記載された特徴、構造、または特性は、１つ以上の実施例において任意の適切な方法で組み合わせ得る。前述の説明では、記載された技術の実施例の完全な理解を提供するために、様々な構成の実施例など、多くの具体的な詳細が提供された。しかしながら、本技術が１つ以上の特定の詳細なしに、または他の方法、構成要素、デバイスなどを使用して実施され得ることが認識される。他の例では、本技術の態様を曖昧にすることを避けるために、周知の構造または動作は、示されていないかまたは詳細に記載されていない。
【０１２０】
さらに、記載された特徴、構造、または特性は、１つ以上の実施例において任意の適切な方法で組み合わせ得る。前述の説明では、記載された技術の実施例の完全な理解を提供するために、様々な構成の実施例など、多くの具体的な詳細が提供された。しかしながら、当業者であれば、本技術が１つ以上の特定の詳細なしに、または他の方法、構成要素、デバイスなどを使用して実施され得ることを認識するであろう。他の例では、本技術の態様を曖昧にすることを避けるために、周知の構造または動作は、示されていないかまたは詳細に記載されていない。
【０１２１】
発明主題は、構造的特徴及び／または動作に特有の言語で説明してきたが、添付の特許請求の範囲で定義される発明主題は、必ずしも上述の特定の特徴及び動作に限定されるものではないことを理解されたい。むしろ、上述の特定の特徴及び行為は、特許請求の範囲を実施する例示的形態として開示される。記載された技術の精神及び範囲から逸脱することなく、多数の修正及び代替の構成が考案され得る。
【図１Ａ】
2021518018.tif 000003
【図１Ｂ】
2021518018.tif 000004
【図２】
2021518018.tif 000005
【図３】
2021518018.tif 000006
【図４Ａ】
2021518018.tif 000007
【図４Ｂ】
2021518018.tif 000008
【図５】
2021518018.tif 000009
【図６】
2021518018.tif 000010
【図７】
2021518018.tif 000011
【図８】
2021518018.tif 000012
【図９】
2021518018.tif 000013
【国際調査報告】
2021518018.tif 000014
2021518018.tif 000015
2021518018.tif 000016