(57)【特許請求の範囲】
【請求項１】
被調整デバイスの動作を管理するコーディネータコンピューティングデバイスをリモートに構成するシステムであって、前記システムは、
前記コーディネータコンピューティングデバイスについてのデバイスシャドウを含む非一時的データストアであって、前記デバイスシャドウは、前記コーディネータコンピューティングデバイスの所望の構成についてのバージョン識別子を示す非一時的データストアと、
前記非一時的データストアと通信する配置デバイスと、
を含み、
前記配置デバイスは、プロセッサを含み、前記プロセッサは、コンピュータ実行可能命令により、
前記コーディネータコンピューティングデバイスについての構成情報を取得するステップであって、前記構成情報は、前記コーディネータコンピューティングデバイスによって管理されることになる１つ以上の被調整デバイスおよび前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる１つ以上のタスクを示し、前記１つ以上のタスクの個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記構成情報は更に、前記１つ以上のタスクの実行から取得されたメッセージに応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを判定するための基準を示すイベントフローテーブルを指定するステップと、
前記構成情報を含む構成パッケージを生成するステップであって、前記構成パッケージは、追加のバージョン識別子と関連付けられるステップと、
前記所望の構成が前記追加のバージョン識別子に対応することを示すように前記デバイスシャドウを修正するステップと、
前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知するステップと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得するステップと、
前記コーディネータコンピューティングデバイスに前記構成パッケージを伝送するステップであって、前記コーディネータコンピューティングデバイスは、前記構成パッケージ内で示される前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる前記１つ以上のタスクを取り出すために、前記構成パッケージを利用するように構成されるステップと、
を行うシステム。
【請求項２】
前記プロセッサは更に、前記デバイスシャドウに対応するトピックへの前記コーディネータコンピューティングデバイスについてのサブスクリプションを取得するコンピュータ実行可能命令により構成され、
前記プロセッサは、前記コーディネータコンピューティングデバイスに、前記トピックへの発行の通知として前記修正されたデバイスシャドウを通知するように構成される、
請求項１に記載のシステム。
【請求項３】
前記通知は、ＭＱＴＴプロトコルを介して伝送される、
請求項２に記載のシステム。
【請求項４】
前記被調整デバイスは、代替的な主要機能と関連付けられた汎用コンピューティングデバイス、シンデバイス、または組み込みデバイスのうちの少なくとも１つを含む、
請求項１に記載のシステム。
【請求項５】
前記システムは、前記コーディネータコンピューティングデバイスを更に含み、
前記コーディネータコンピューティングデバイスは、前記被調整デバイスの状態を管理するように集合的に構成されたプロセッサおよびメモリを含む、
請求項１に記載のシステム。
【請求項６】
コンピュータにより実行される方法であって、前記方法は、
コーディネータコンピューティングデバイスの登録を取得するステップであって、前記コーディネータコンピューティングデバイスは、前記コーディネータコンピューティングデバイスによって管理されることになる１つ以上の被調整デバイスを含む被調整環境と関連付けられるステップと、
前記コーディネータコンピューティングデバイスについてのデバイスシャドウを生成するステップであって、前記デバイスシャドウは、前記コーディネータコンピューティングデバイスの所望の構成についてのバージョン識別子を示すステップと、
前記コーディネータコンピューティングデバイスについての構成情報を取得するステップであって、前記構成情報は、前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる１つ以上のタスクを示し、前記１つ以上のタスクの個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応するステップと、
前記構成情報を含む構成パッケージを生成するステップであって、前記構成パッケージは、追加のバージョン識別子と関連付けられるステップと、
前記所望の構成が前記追加のバージョン識別子に対応することを示すように前記デバイスシャドウを修正するステップと、
前記コーディネータコンピューティングデバイスに前記デバイスシャドウへの修正を通知するステップと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得するステップと、
前記コーディネータコンピューティングデバイスに前記構成パッケージを伝送するステップであって、前記コーディネータコンピューティングデバイスは、前記構成パッケージ内で示される前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる前記１つ以上のタスクを取り出すために、前記構成パッケージを利用するように構成されるステップと、
を含む、コンピュータにより実行される方法。
【請求項７】
前記構成パッケージは更に、前記コーディネータコンピューティングデバイスにおいて、前記１つ以上のタスクのうちの少なくとも１つのタスク、または前記１つ以上の被調整デバイスのうちのある被調整デバイスから取得されたメッセージに応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを判定するための基準を示すイベントフローテーブルを含む、
請求項６に記載のコンピュータにより実行される方法。
【請求項８】
前記構成パッケージは更に、前記被調整デバイスと前記コーディネータコンピューティングデバイスとの間の通信において使用されることになるセキュリティ証明書を含む、
請求項６に記載のコンピュータにより実行される方法。
【請求項９】
前記構成パッケージは更に、前記コーディネータコンピューティングデバイスによって維持されることになるデバイスシャドウのセットのインジケーションを含み、
前記デバイスシャドウのセットの個々のデバイスシャドウは、前記１つ以上の被調整デバイスの個々の被調整デバイスに対応する、
請求項６に記載のコンピュータにより実行される方法。
【請求項１０】
前記コーディネータコンピューティングデバイスの前記登録を取得するステップは、前記デバイスシャドウに対応するトピックへの前記コーディネータコンピューティングデバイスについてのサブスクリプションを取得するステップを含み、
前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知するステップは、前記コーディネータコンピューティングデバイスに前記トピックへの発行の通知を伝送するステップを含む、
請求項６に記載のコンピュータにより実行される方法。
【請求項１１】
前記コーディネータコンピューティングデバイスのユーザと関連付けられたクライアントコンピューティングから、前記１つ以上のタスクの少なくとも１つのタスクを取得するステップと、
前記コーディネータコンピューティングデバイスにおける前記構成パッケージの処理に応答して、前記少なくとも１つのタスクについての要求を受信するステップと、
前記コーディネータコンピューティングデバイスに前記少なくとも１つのタスクを提供するステップと、
を更に含む、
請求項６に記載のコンピュータにより実行される方法。
【請求項１２】
前記コーディネータコンピューティングデバイスについての更新された構成情報を取得するステップと、
前記更新された構成情報から更新された構成パッケージを生成するステップであって、前記構成パッケージは、更新されたバージョン識別子と関連付けられるステップと、
前記所望の構成が前記更新されたバージョン識別子に対応することを示すように前記デバイスシャドウを修正するステップと、
前記コーディネータコンピューティングデバイスに前記デバイスシャドウへの修正を通知するステップと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得するステップと、
前記コーディネータコンピューティングデバイスに前記更新された構成パッケージを伝送するステップと、
を更に含む、
請求項６に記載のコンピュータにより実行される方法。
【請求項１３】
コンピュータ実行可能命令を含む非一時的コンピュータ可読媒体であって、前記コンピュータ実行可能命令は、配置システムによって実行されるとき、前記配置システムに、
コーディネータコンピューティングデバイスについてのデバイスシャドウを生成するステップであって、前記デバイスシャドウは、前記コーディネータコンピューティングデバイスの所望の構成についてのバージョン識別子を示し、前記コーディネータコンピューティングデバイスは、前記コーディネータコンピューティングデバイスによって管理されることになる１つ以上の被調整デバイスを含む被調整環境と関連付けられるステップと、
前記コーディネータコンピューティングデバイスについての構成情報を取得するステップであって、前記構成情報は、前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる１つ以上のタスクを示し、前記１つ以上のタスクの個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応するステップと、
前記所望の構成が追加のバージョン識別子に対応することを示すように前記デバイスシャドウを修正するステップと、
前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知するステップと、
前記コーディネータコンピューティングデバイスから構成パッケージについての要求を取得するステップと、
前記コーディネータコンピューティングデバイスに前記構成パッケージを伝送するステップであって、前記コーディネータコンピューティングデバイスは、前記構成パッケージ内で示される前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる前記１つ以上のタスクを取り出すために、前記構成パッケージを利用するように構成されるステップと、
を行わせる非一時的コンピュータ可読媒体。
【請求項１４】
前記コンピュータ実行可能命令は更に、前記配置システムに、
前記１つ以上のタスクに対応する実行可能なコードを取得するステップであって、前記１つ以上のタスクは、
前記１つ以上の被調整デバイスの個々の被調整デバイスについてのデバイスシャドウを生成するように前記コーディネータコンピューティングデバイスによって実行可能な第１のタスクと、
前記１つ以上の被調整デバイスのうちの少なくとも１つ、または前記１つ以上のタスクのうちの少なくとも１つにアドレス指定されたメッセージを経路指定するように前記コーディネータコンピューティングデバイスによって実行可能な第２のタスクと、
を含むステップと、
前記コーディネータコンピューティングデバイスから前記１つ以上のタスクについての要求を取得するステップと、
前記コーディネータコンピューティングデバイスに前記１つ以上のタスクを伝送するステップと、
を行わせる、
請求項１３に記載の非一時的コンピュータ可読媒体。
【請求項１５】
前記１つ以上のタスクは更に、前記タスクと関連付けられたプロトコルに従って通信を可能にするように前記コーディネータコンピューティングデバイスによって実行可能な第３のタスクを含む、
請求項１４に記載の非一時的コンピュータ可読媒体。
【請求項１６】
前記構成パッケージは更に、前記コーディネータコンピューティングデバイスによって維持されることになるデバイスシャドウのセットのインジケーションを含み、
前記デバイスシャドウのセットの個々のデバイスシャドウは、前記１つ以上の被調整デバイスの個々の被調整デバイスに対応する、
請求項１３に記載の非一時的コンピュータ可読媒体。
【請求項１７】
前記コンピュータ実行可能命令は更に、前記配置システムに、前記デバイスシャドウに対応するトピックへの前記コーディネータコンピューティングデバイスについてのサブスクリプションを取得するステップを行わせ、
前記コンピュータ実行可能命令は、前記配置システムに、前記コーディネータコンピューティングデバイスに前記トピックへの発行の通知を伝送することによって、前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知するステップを行わせる、
請求項１３に記載の非一時的コンピュータ可読媒体。
【請求項１８】
前記コンピュータ実行可能命令は更に、前記配置システムに、
前記コーディネータコンピューティングデバイスのユーザと関連付けられたクライアントコンピューティングから、前記１つ以上のタスクの少なくとも１つのタスクを取得するステップと、
前記コーディネータコンピューティングデバイスにおける前記構成パッケージの処理に応答して、前記少なくとも１つのタスクについての要求を受信するステップと、
前記コーディネータコンピューティングデバイスに前記少なくとも１つのタスクを提供するステップと、
を行わせる、
請求項１３に記載の非一時的コンピュータ可読媒体。
【請求項１９】
前記コンピュータ実行可能命令は更に、前記配置システムに、
前記コーディネータコンピューティングデバイスについての更新された構成情報を取得するステップと、
前記更新された構成情報から更新された構成パッケージを生成するステップであって、前記構成パッケージは、更新されたバージョン識別子と関連付けられるステップと、
前記所望の構成が前記更新されたバージョン識別子に対応することを示すように前記デバイスシャドウを修正するステップと、
前記コーディネータコンピューティングデバイスに前記デバイスシャドウへの修正を通知するステップと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得するステップと、
前記コーディネータコンピューティングデバイスに前記更新された構成パッケージを伝送するステップと、
を行わせる、
請求項１３に記載の非一時的コンピュータ可読媒体。
【請求項２０】
前記１つ以上のタスクの少なくとも１つのタスクは、前記コーディネータコンピューティングデバイスで、および前記コーディネータコンピューティングデバイスとは別個のオンデマンドコード実行システム内の両方で実行可能である、
請求項１３に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１６年１１月２８日に出願され、「ＭＡＮＡＧＩＮＧ  ＳＥＣＵＲＩＴＹ  ＩＮ  ＭＥＳＳＡＧＩＮＧ  ＰＲＯＴＯＣＯＬ  ＣＯＭＭＵＮＩＣＡＴＩＯＮＳ」と題する米国特許出願第１５／３６２，７５１号、２０１６年１１月２８日に出願され、「ＥＭＢＥＤＤＥＤ  ＣＯＤＥ  ＩＮ  ＭＥＳＳＡＧＩＮＧ  ＰＲＯＴＯＣＯＬ  ＣＯＭＭＵＮＩＣＡＴＩＯＮＳ」と題する米国特許出願第１５／３６２，７５７号、および２０１６年１１月２８日に出願され、「ＭＡＮＡＧＩＮＧ  ＭＥＳＳＡＧＩＮＧ  ＰＲＯＴＯＣＯＬ  ＣＯＭＭＵＮＩＣＡＴＩＯＮＳ」と題する米国特許出願第１５／３６２，７６５号（以下では、集合的に「関連出願」とする）に関する。関連出願の各々の全体は、参照によって本明細書に組み込まれる。
【背景技術】
【０００２】
全体的に説明されるように、コンピューティングデバイスは、データを交換するために、通信ネットワーク、または一連の通信ネットワークを利用する。法人および組織は、操作をサポートするために、または第三者にサービスを提供するために、いくつかのコンピューティングデバイスを相互接続するコンピュータネットワークを運営する。コンピューティングシステムは、単一の地理的位置に位置することがあり、または複数の別個の地理的位置に位置することがある（例えば、プライベートもしくはパブリック通信ネットワークを介して相互接続される）。特に、本明細書で一般的に「データセンタ」と称される、データセンタまたはデータ処理センタは、データセンタのユーザにコンピューティングリソースを提供するために、いくつかの相互接続されたコンピューティングシステムを含むことがある。データセンタは、組織の代わりに運営されるプライベートデータセンタ、または一般大衆の代わりにもしくは一般大衆の利益のために運営されるパブリックデータセンタである場合がある。
【０００３】
データセンタリソースの利用の増大を促進するために、仮想化技術は、単一の物理コンピューティングデバイスが、データセンタのユーザに対して独立したコンピューティングデバイスとして見え、独立したコンピューティングデバイスとして動作する仮想マシンの１つ以上のインスタンスをホストすることを可能にする。仮想化により、単一の物理コンピューティングデバイスは、動的な方式で仮想マシンを作成、維持、削除、または他に管理することができる。次に、ユーザは、データセンタから、単一のコンピューティングデバイスまたはネットワーク化されたコンピューティングデバイスの構成を含む、コンピュータリソースを要求することができ、種々の数の仮想マシンリソースを提供されることができる。
【０００４】
いくつかの環境では、通信ネットワークを介して通信するコンピューティングデバイスは、デスクトップパーソナルコンピュータなど、コンピューティングデバイスとして主要機能を有するデバイスに対応することができる。他の環境では、通信ネットワークを介して通信するコンピューティングデバイスの少なくとも一部は、別個の主要目的を有する家庭用器具（例えば、温度調節器または冷蔵庫）など、少なくとも１つの代替的な主要機能を有すると共に、少なくとも制限された計算機能性をも提供する組み込みデバイスまたはシンデバイスに対応することができる。いくつかの例では、それらの組み込みデバイスまたはシンデバイスのローカルユーザインタフェースは制限され、よって、それらのデバイスのいくつかの機能を実装するために、リモート管理が必要とされることがある。しかしながら、リモート管理は、いくつかの例では、リモート管理デバイスとの通信における待ち時間に起因して、およびプライベート情報が何らかの事情でリモート管理デバイスにおいて開示される、またはリモート管理デバイスとの通信の間のいずれかにおいて開示される可能性があるために問題となることがある。それらの問題は、組み込みデバイスまたはシンデバイスおよびリモート管理デバイスが別個の通信ネットワーク上に存在し、またはパブリック通信ネットワークを通じて通信するときに更に顕著となる場合がある。
【０００５】
図面全体を通じて、言及される要素の間の対応関係を示すために、参照符号が再使用されてもよい。図面は、本明細書で説明される実施例の実施形態を例示するために提供され、開示の範囲を限定することを意図していない。
【図面の簡単な説明】
【０００６】
【図１】コーディネータが被調整環境内で被調整デバイスの動作をローカルに管理および調整するように動作することができる例示的な環境を表すブロック図であり、コーディネータは、コーディネータの動作を修正するために、クライアントデバイスおよびサービスプロバイダ環境と通信してもよい。
【図２】図１のコーディネータを提供するコンピューティングデバイスの全体的なアーキテクチャを表す。
【図３Ａ】図１のコーディネータによって管理される被調整デバイスの全体的なアーキテクチャを表す。
【図３Ｂ】図１のコーディネータによって管理される被調整デバイスの全体的なアーキテクチャを表す。
【図４】図１のコーディネータについての構成情報を生成およびサブミットするために利用されてもよいクライアントデバイスの全体的なアーキテクチャを表す。
【図５】サービスプロバイダ環境の管理および配置サービスに図１のコーディネータを登録し、デバイスシャドウサービスを介して、コーディネータにクライアントデバイスから取得された構成を通知するための例示的な対話を表すフローチャートである。
【図６】所望の機能性を実装するようにコーディネータによって実行可能なオンデマンドコード実行環境のいくつかのタスクを含む、コーディネータに構成をプロビジョニングするために管理および配置サービスを利用するための例示的な対話を表すフローチャートである。
【図７】被調整環境の外部の通信を必要とすることなく、コーディネータを介してクライアントデバイスを介して被調整デバイスの構成を修正するための例示的な対話を表すフローチャートである。
【図８】図１のコーディネータ上でタスクを実行する呼び出しなど、ワークアイテムの待ち行列を管理するための例示的な対話を表すフローチャートである。
【図９】タスクへの呼び出しを実行するための実行環境を生成し、実行環境内でタスクを実行することによって、図８の待ち行列からタスク呼び出しを処理するための例示的な対話を表すフローチャートである。
【図１０】図１のコーディネータによって実装されてもよい例示的な待ち行列処理ルーチンを表す。
【図１１】図１のコーディネータによって実装されてもよい例示的な実行環境生成ルーチンを表す。
【図１２】第１のタスク実行が図１のコーディネータ上で第２のタスク実行を呼び出すことを可能にするために、通信マネージャの使用のための例示的な対話を表すフローチャートである。
【図１３】図１のコーディネータ上での第１のタスク実行の呼び出し器に第１のタスク実行の出力を提供するために、通信マネージャの使用のための例示的な対話を表すフローチャートである。
【図１４】図１のコーディネータ内で通信マネージャによって実装されてもよい例示的なクロスタスク通信ルーチンを表す。
【図１５】外部オンデマンドコード実行環境１５０上での第２のタスク実行を介して図１のコーディネータ上で第１のタスク実行を呼び出すために、リモートインタフェースタスクの使用のための例示的な対話を表すフローチャートである。
【図１６】図１のコーディネータ上で実行するリモートインタフェースタスクによって実装されてもよい例示的な外部タスク呼び出しルーチンを表す。
【発明を実施するための形態】
【０００７】
全体的に説明されるように、本開示の態様は、被調整環境内で被調整デバイスの動作および機能性を制御するために被調整環境内に存在するコーディネータに関する。いくつかの例では、被調整デバイスは、別個の主要目的を有する家庭用器具など、少なくとも１つの代替的な主要機能を有する組み込みデバイスまたはシンデバイスに対応してもよい。そのようなデバイスは、いくつかの例では、「モノのインターネット」デバイス、すなわち「ＩｏＴ」デバイスと称されてもよい。被調整デバイスは、制限されたローカルユーザインタフェース能力を含んでもよく、よって、リモート管理からの利点を有することができる。本明細書で開示されるコーディネータは、コーディネータおよび被調整デバイスを含む環境（ローカルエリアネットワーク、すなわち「ＬＡＮ」環境など）内で、被調整デバイスのローカルなそのようなリモート管理を可能にする。よって、コーディネータの使用は、ローカル環境の外部の通信を必要とすることなく、被調整デバイスの管理を可能にすることができ、それによって、プライバシリスクにおける減少を可能にし、外部またはパブリック通信ネットワークの使用を通じて通信速度における増大を可能にする。特に、本開示の態様は、コードのポータブルセグメントの即時的な実行がコーディネータ上で機能を実装することを可能にする、局所化されたオンデマンドコード実行システムとしてのコーディネータの利用に関する。コードのそれらのポータブルセグメントは、本明細書で「タスク」と称されてもよい。いくつかの例では、タスクは、デバイスの状態を変更することによってなど、被調整デバイスの機能性を調整するために利用されてもよい。例えば、被調整デバイスがネットワーク対応照明である場合、タスクは、現在時間、ユーザ入力、または別の被調整デバイスの状態など、コーディネータへの入力に従って照明の状態を変更するように機能してもよい（例えば、「オン」または「オフ」にする）。コーディネータは更に、いくつかの異なるプロトコルに従って被調整デバイスとタスクとの間の通信を可能にすることができ、いくつかの例では、そのようなプロトコルの間の変換機能を提供することができる。また更に、コーディネータは、いくつかの例では、タスクの実行位置を管理してもよく、その結果、タスクは、候補デバイスの能力およびタスクの実行についての要件に従って、コーディネータ上で、被調整デバイス上で、またはリモート環境（例えば、リモートネットワークコンピューティング環境）のデバイス上で実行されてもよい。それらのタスクは、いくつかの例では、ユーザによって定義されてもよく、タスクに対応するユーザによりサブミットされたコードに従って、ユーザがコーディネータまたは被調整デバイス上で様々な機能性を実装することを可能にする。よって、コーディネータは、被調整デバイスの即時的に再構成可能な局所化された管理を提供することができる。
【０００８】
いくつかの例では、コーディネータは、「デバイスシャドウ」を介して被調整デバイスの状態を管理してもよい。概して、デバイスシャドウは、被調整デバイスからリモートの位置に記憶されるように（例えば、コーディネータまたはリモートデバイスシャドウサービス）、被調整デバイスの所望の状態のデータ表現に対応してもよい。被調整デバイスは、デバイスシャドウによって表された状態と同期するように構成されてもよく、よって、デバイスシャドウへの変更が被調整デバイスの状態における対応する変更を生じさせると予測されてもよい。いくつかの例では、被調整デバイスおよび対応するシャドウの同期は、プロトコルが本分野において既知である、ＭＱＴＴプロトコルなど、「発行／サブスクライブ」モデル通信プロトコルを介して行われてもよい。したがって、被調整デバイスは、その被調整デバイスについてデバイスシャドウに「サブスクライブ」してもよい。コーディネータは次いで、デバイスシャドウに「発行」する要求を介して、デバイスシャドウの状態への所望の変更を取得してもよい。コーディネータは、通信プロトコルを介して、被調整デバイスにデバイスシャドウの状態における変更を通知してもよく、被調整デバイスは、デバイスシャドウの状態にローカル状態を同期することによって応答してもよい。デバイスシャドウの使用は、例えば、被調整デバイスとの通信から被調整デバイスの状態を読み出しまたは修正する要求を分離する際に有益である場合がある。実例として、被調整デバイスの状態を読み出しまたは修正する要求は、デバイスシャドウを読み出しまたは修正することに関して即刻で成功すると考えられてもよい。被調整デバイスに必要ないずれかの変更は次いで、被調整デバイスとシャドウデバイスとの間の通信プロトコルに従って、要求に対して非同期に行われてもよい。デバイスと対話する要求がデバイスとの実際の通信から分離されることがあることを理由に、それらの要求およびデバイス通信は、異なる通信プロトコルをも利用してもよい。例えば、デバイスシャドウを介してデバイス状態を読み出しまたは修正する要求は、伝送制御プロトコル（ＴＣＰ）などの高オーバヘッド、高信頼性プロトコルに従って伝送されてもよく、デバイスシャドウと被調整デバイスとの間の通信は、ＭＱＴＴなどの低オーバヘッドプロトコルを介して行われてもよい。被調整デバイスに通信を伝送するＭＱＴＴに関する更なる詳細は、その全体が参照によって本明細書に組み込まれる、「ＥＸＥＣＵＴＩＮＧ  ＲＥＭＯＴＥ  ＣＯＭＭＡＮＤＳ」と題し、２０１６年８月２６日に出願された米国特許出願第１５／２４９，２１３号（「２１３出願」）において見出すことができる。いくつかの例では、デバイスシャドウの利用は、被調整デバイスによって使用される計算リソースを削減することなど、他の利点をもたらすことができる。例えば、被調整デバイスは、被調整デバイスの状態を読み出す要求が対応するデバイスシャドウのホスト（例えば、被調整デバイス）によって扱われることができるように、そのような要求を処理することが必要とされず、更にはそのような要求を認識することが必要とされなくてもよい。デバイスシャドウの使用に関する更なる詳細は、その全体��参照によって本明細書に組み込まれる、「Ｄｅｖｉｃｅ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎ  Ｍａｎａｇｅｍｅｎｔ  Ｕｓｉｎｇ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎ  Ｔｙｐｅｓ」と題し、２０１６年６月２９日に出願された米国特許出願第１５／１９６，７００号（「７００出願」）において見出すことができる。
【０００９】
本開示の実施形態に従って、コーディネータは、サービスプロバイダの環境を介してコーディネータの構成を変えることができる、ユーザと関連付けられてもよい。実例として、サービスプロバイダ環境は、コーディネータのプロバイダによって運営されてもよく、コーディネータに対する被調整環境の位置、環境内の被調整デバイス、コーディネータによって実行可能なタスク、コーディネータがデバイスの間の通信、タスクの間の通信、もしくはデバイスとタスクとの間の通信をどのように管理するべきか、コーディネータについてのセキュリティ情報、またはコーディネータの他のパラメータ（コーディネータにおいて監視されることになる測定基準、もしくはコーディネータにおいて行われることになるロギングなど）など、コーディネータの様々な構成パラメータをユーザが指定することを可能にすることができる。コーディネータ自体が、いくつかの例では、制限された局所化されたユーザインタフェースと関連付けられることがあることを理由に、サービスプロバイダ環境は、ユーザが、クライアントデバイスを介して、コーディネータについての構成をサブミットさせることを可能にすることができ、コーディネータに構成を自動的にプロビジョニングさせるようにすることを可能にすることができる。サービスプロバイダ環境は更に、単一のクライアントデバイスが、統一したインタフェースを介して複数のコーディネータを管理することを可能にすることができ、新たな構成を配置することによって、またはコーディネータへの構成の前の配置をロールバックもしくは取り消すことによって、コーディネータの構成を素早く変えることを可能にすることができる。
【００１０】
いくつかの例では、サービスプロバイダ環境は、コーディネータの機能性と類似または同一の機能性を提供することができる。例えば、コーディネータは、コードのポータブルセグメント、すなわち「タスク」の実行に少なくとも部分的に基づいて機能してもよい。同様に、サーバプロバイダ環境は、同一または類似のタスクを実行するように機能するオンデマンドコード実行環境を含んでもよい。そのようなオンデマンドコード実行環境に関する更なる詳細は、その全体が参照によって以下に組み込まれる、「ＰＲＯＧＲＡＭＭＡＴＩＣ  ＥＶＥＮＴ  ＤＥＴＥＣＴＩＯＮ  ＡＮＤ  ＭＥＳＳＡＧＥ  ＧＥＮＥＲＡＴＩＯＮ  ＦＯＲ  ＲＥＱＵＥＳＴＳ  ＴＯ  ＥＸＥＣＵＴＥ  ＰＲＯＧＲＡＭ  ＣＯＤＥ」と題し、２０１４年９月３０日に出願された米国特許第９，３２３，５５６号（「５５６特許」）において見出すことができる。要するに、タスクを実行するために、オンデマンドコード実行環境は、ユーザ要求が受信されるとできるだけ早く使用する準備ができている、事前に初期化された仮想マシンインスタンスのプールを維持してもよい。それらの仮想マシンの事前に初期化された性質に起因して、ユーザコードを実行することと関連付けられた遅延（待ち時間と称されることがある）（例えば、インスタンスおよび言語ランタイム起動時間）は、著しく減少されることができ、１００ミリ秒のサブレベルまで減少されることが多い。実例として、オンデマンドコード実行環境は、１つ以上の物理コンピューティングデバイス上で仮想マシンインスタンスのプールを維持してもよく、各々の仮想マシンインスタンスは、そこにロードされた１つ以上のソフトウェア構成要素（例えば、オペレーティングシステム、言語ランタイム、ライブラリなど）を有する。オンデマンドコード実行環境が、ユーザのプログラムコードを実行するための１つ以上の計算上の制約を指定する、ユーザのプログラムコード（「タスク」）を実行する要求を受信するとき、オンデマンドコード実行環境は、要求によって指定された１つ以上の計算上の制約に基づいて、ユーザのプログラムコードを実行するための仮想マシンインスタンスを選択してもよく、選択された仮想マシンインスタンス上でユーザのプログラムコードを実行させてもよい。プログラムコードは、仮想マシンインスタンス上で作成された、分離されたコンテナ内で実行されることができる。要求が受信されるときまでに、プール内の仮想マシンインスタンスが特定のオペレーティングシステムおよび言語ランタイムにより既にブートおよびロードされているので、要求を扱うことができる（例えば、仮想マシンインスタンス上で作成された１つ以上のコンテナ内でユーザコードを実行することによって）発見計算能力と関連付けられた遅延は、著しく減少される。オンデマンドコード実行環境は、「５５６特許」において更に詳細に説明されるように、ユーザコード（様々なプログラミング言語のいずれかにおいて構成されたスレッド、プログラムなど）を受信し、仮想マシンインスタンスのユーザ構成を必要とすることなく、高度にスケーラブルな、低待ち時間の方式でコードを実行するように構成された仮想マシンインスタンスマネージャを含んでもよい。特に、仮想マシ��インスタンスマネージャは、ユーザコードを受信する前に、およびいずれかの特定の仮想マシンインスタンス構成に関するユーザからのいずれかの情報を受信する前に、各々が様々なランタイム環境のうちのいずれか１つ以上に対応する、構成の予め定められたセットに従って仮想マシンインスタンスを作成および構成することができる。その後、仮想マシンインスタンスマネージャは、コードを実行するユーザによって開始された要求を受信し、要求と関連付けられた構成情報に基づいて、コードを実行するように事前構成された仮想マシンインスタンスを識別する。仮想マシンインスタンスマネージャは更に、少なくとも部分的に、割り当てられた仮想マシンインスタンスの内部でコンテナを作成および構成することによって、ユーザのコードを実行するために、識別された仮想マシンインスタンスを割り当てることができる。仮想マシンインスタンスマネージャを実装し、仮想マシンインスタンス上でユーザコード実行する様々な実施形態は、「５５６特許」において更に詳細に説明される。
【００１１】
コーディネータによって実装されるようなオンデマンドコード実行環境が「５５６特許」において説明されるオンデマンドコード実行環境（例えば、データセンタにおいて実装されることがある）よりも更に制限された計算リソースと関連付けられることがあることを理由に、コーディネータは、タスク実行の優先付けを支援するようにスケジューラを実装してもよい。特に、スケジューラは、タスクを実行する呼び出しを受信し、ワークアイテム待ち行列上にワークアイテムとしてそのような呼び出しをエンキューする。スケジューラは次いで、スケジューリングアルゴリズムに従って、ワークアイテム待ち行列から呼び出しを選択的にデキューしてもよい。いずれかの数のスケジューリングアルゴリズムは、各々が本分野において既知である、ファーストインファーストアウトスケジューリング、最先デッドラインファーストスケジューリング、最短残り時間スケジューリング、固定優先度プリエンプティブスケジューリング、およびラウンドロビンスケジューリングなど、スケジューラによって利用されてもよい。実例として、各々のスケジューリングアルゴリズムは、コーディネータに対して利用可能な計算リソースの量、およびタスク呼び出しを完了するために必要なリソースの量（例えば、タスクの著者もしくはコーディネータの管理者によって設定されてもよく、またはタスクの静的もしくは動的分析に基づいて推定されてもよい）に基づいて実装されてもよい。いくつかの例では、スケジューリングアルゴリズムは、タスクの著者によって、コーディネータの管理者によって、呼び出しエンティティによってなど、タスクに割り振られた優先度にも少なくとも部分的に基づいてもよい。スケジューラは、スケジューリングアルゴリズムに従ってワークアイテムの待ち行列を処理してもよく、タスク呼び出しがデキューのために選択されるとき、呼び出しに対応するタスクを実行することによって（例えば、呼び出しのパラメータに従って）、タスク呼び出しを完了させてもよい。
【００１２】
タスクの実行を支援するために、コーディネータは更に、コーディネータにおいて計算リソース使用量の状態を監視し、タスクが実行する実行環境の生成、破壊、および維持を管理するためのリソースマネージャを含むことができる。実行環境は、タスク実行に論理的に割り当てられたメモリのいずれかの部分を含むことができる。実例として、実行環境は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「ｃｈｒｏｏｔ  ｊａｉｌ」もしくはＰｙｔｈｏｎ仮想環境「ｖｉｒｔｕａｌｅｎｖ」などの「サンドボックス」環境に対応してもよい。他の例では、実行環境は、仮想マシン環境（例えば、ＪＡＶＡ仮想マシン、別個のオペレーティングシステムを有する仮想化されたハードウェアデバイスなど）に対応してもよい。更なる他の例では、実行環境は、仮想化を必ずしも利用しない、タスクの実行に割り当てられたメモリ空間であってもよい。実例として、リソースマネージャは、ワークアイテム待ち行列からどのタスク呼び出しをデキューするかをスケジューラが判定することを可能にするために、利用可能なメモリの量、プロセッササイクル（例えば、中央処理装置、グラフィカルプロセシングユニットなどの）、ネットワーク帯域幅、または他のコンピューティングリソースなど、コーディネータについての現在の計算リソース可用性情報をスケジューラが取り出すことを可能にすることができる。いくつかの例では、リソースマネージャは、スケジューラに、コーディネータにおいて行われる現在のタスク実行のリストなど、他の情報を提供してもよい。リソースマネージャは更に、タスク呼び出しが渡される実行環境を取得するスケジューラからの要求を受信および処理してもよい。実例として、各々のタスクが別個の実行環境において実行され、所与のタスクに対して実行環境が存在しない場合、リソースマネージャは、所与のタスクの実行のために必要なリソースを判定してもよく（プロセッサ能力およびメモリのような、基本的な計算リソースの観点からと共に、ドライバ、ランタイム、ユーティリティ、依存関係など、ソフトウェアリソースの観点から）、そのようなリソースを提供するために実行環境を生成してもよい。リソースマネージャは次いで、スケジューラに、実行環境についての識別情報を返却してもよく、その結果、スケジューラは、実行環境に、タスクを実行する呼び出しを渡してもよい。いくつかの例では、リソースマネージャは、既存の実行環境の再利用をも可能にすることができる。例えば、コーディネータの共通して使用される機能性に対応するタスクなどのいくつかのタスクは、実行環境がタスクに対して事前生成されるように「固定」されてもよい。よって、リソースマネージャがタスクに対して実行環境を生成する要求を受信するとき、事前生成された環境についての識別情報が返却されてもよく、実行環境を生成するために必要とされる時間およびコンピューティングリソースを減少させる。いくつかの例では、実行環境は、２つの異なるタスクが実行のために同一または類似のリソースを必要とするときなど、タスクにわたって再利用されてもよい。そのような例では、リソースマネージャは、実行の間のセキュリティを保証するために、異なるタ���クの実行の間で実行環境を「消去」してもよい。以下で更に詳細に説明されるように、リソースマネージャは更に、実行環境の中断および再開を可能にすることができ、その結果、低優先度タスクの実行環境は、高優先度タスクに計算リソースを解放するように中断されてもよく、スケジューリングアルゴリズムに従って再開してもよい。
【００１３】
上記議論されたように、コーディネータは、いくつかの例では、ローカルに（例えば、コーディネータ上で）、またはサービスプロバイダネットワーク内でオンデマンドコード実行環境の使用によってタスクを実行するかどうかを選択するように構成されてもよい。更なる実施例として、コーディネータおよびサービスプロバイダ環境の両方は、被調整デバイスに対応するデバイスシャドウを提供してもよく、ユーザは、コーディネータによってホストされたデバイスシャドウまたはサービスプロバイダ環境内でホストされたデバイスシャドウのいずれかまたは両方を変更する要求をサブミットしてもよい。そのような例では、コーディネータは、所与の被調整デバイスに対応する様々なデバイスシャドウと共に、被調整デバイス自体を同期するように機能してもよい。例えば、コーディネータおよびサービスプロバイダ環境は、バージョンベクトルまたはベクトルクロックプロトコルを実装してもよく、その結果、コーディネータは、それぞれのコーディネータおよびサービスプロバイダ環境においてデバイスシャドウにおけるデバイスシャドウへの変更の順序付けを検出することができる（例えば、所与の順序での順次変更として、または同時変更として）。コーディネータは次いで、そのような変更に応答して、コーディネータにおいてデバイスシャドウの状態を確立するルール（潜在的に構成可能な）を実装してもよい。例えば、コーディネータは、コーディネータおよびサービスプロバイダ環境におけるそれぞれのデバイスシャドウへの順次変更が、コーディネータのデバイスシャドウに関する順次変更であるように、コーディネータのデバイスシャドウを更新させるように（例えば、そのような変更が行われるかに関わらず、変更ｂの前に変更ａが行われる場合、変更ａがコーディネータのデバイスシャドウに適用され、次いで、変更ｂが適用されるように）構成されてもよい。コーディネータは更に、予め定められ、および潜在的に構成可能な方式で同時変更を解決するように構成されてもよい。実例として、コーディネータは、同時変更がコーディネータのデバイスシャドウおよびサービスプロバイダ環境のデバイスシャドウに対して行われる場合、両方の変更が、それらが矛盾しない限り（例えば、両方の変更がデバイスシャドウ内で維持された同一の値を修正しようとしない）維持されるべきであると判定してもよい。更なる実例として、コーディネータは、矛盾する変更がコーディネータのデバイスシャドウおよびサービスプロバイダ環境のデバイスシャドウに対して行われる場合、コーディネータのデバイスシャドウへの変更が維持されるべきであり、サービスプロバイダのデバイスシャドウへの変更が放棄されるべきであると判定してもよい。同時修正に対処する様々な他の機構が当業者によって認識されよう。
【００１４】
いくつかの実施形態では、コーディネータは、コーディネータ上で実行する異なるタスクの間の通信、またはコーディネータ上で実行するタスクとリモート環境（例えば、オンデマンドコード実行システム）内で実行するタスクとの間の通信を促進するように実行可能なコードを含む、通信マネージャを含んでもよい。実例として、通信マネージャは、標準化されたインタフェースを提供してもよく、標準化されたインタフェースを通じて、タスク実行は、タスクを実行する呼び出しまたはタスク実行の出力などの情報を交換することができる。通信マネージャは、いくつかのプロトコルをサポートすることができ、その結果、タスクは、タスクの間の潜在的な不一致に関わらず、相互に通信することができる。例えば、一般的に、異なるプログラミング言語で記述されたタスクが相互間で情報を伝送し、またはコーディネータ（タスクの実行を促進するスケジューラなど）上で実行する他のコードと対話することは困難である場合がある。通信マネージャは、ハイパーテキスト転送プロトコル（ＨＴＴＰ）など、公知のプロトコルを介して、そのような通信を促進するインタフェースを提供してもよい。例えば、第１のタスク実行は、通信マネージャに、第２のタスクを実行する要望を示すＨＴＴＰ要求を伝送してもよい。通信マネージャは次いで、第１のタスク実行を認証し、呼び出しのフォーマットおよびコンテンツを検証することによってなど、呼び出しの正当性を確認してもよく、有効である場合、コーディネータ上で処理するためにスケジューラに呼び出しを伝送してもよい（例えば、スケジューラのＡＰＩを介して）。いくつかの例では、通信マネージャはまた、第２のタスクの結果として生じる実行の出力の返却を促進してもよく、第１のタスク実行に出力を返却してもよい。例えば、通信マネージャは、第１のタスク実行によって伝送された初期のＨＴＴＰ要求に実行識別子を割り振ってもよく、第２のタスク実行の結果を取得すると、第１のタスク実行に出力の通知を伝送してもよい。他の例では、通信マネージャは、呼び出しタスクがタスク実行の状態についてクエリすることを可能にすることができる。例えば、第２のタスク実行を呼び出す第１のタスク実行は、通信マネージャに、所与の実行識別子に対応する出力についてのクエリを伝送してもよく、通信マネージャは、利用可能である場合、その出力を返却してもよい。いくつかの例では、通信マネージャは、加えてまたは代わりに、実行識別子に対応するタスクの状態など（例えば、実行している、成功して実行した、エラーをもたらしたなど）、他の情報を返却してもよい。上記述べた利点に加えて、通信マネージャの使用は、タスク実行の待ち行列から生じる通信における遅延、通信待ち時間などを扱うことによって、ロバストな非同期タスク内通信を提供することができる。その上、通信マネージャの使用は、様々なタスクによってサポートされるプロトコルに従って複数のプロトコルの使用を可能にすることができる。例えば、通信マネージャは、ＨＴＴＰ１．１およびＨＴＴＰ２．０プロトコルの両方をサポートすることができ、タスクが異なるプロトコルに従って相互に通信することを可能にすることができる。新たなプロトコルが実装されるにつれて、通信マネージャは、それらの新たなプロトコルをサポートすると共に、旧プロトコルとの互換性を維持するように更新されてもよい。よって、通信マネージャは、タスク内通信における実質的な柔軟性をもたらすことができる。
【００１５】
いくつかの例では、通信マネージャはまた、リモートオンデマンドコード実行システム上でなど、コーディネータの外部で実行するタスクとの通信を促進してもよい。概して、リモートオンデマンドコード実行システムからコーディネータへの通信（または、コーディネータ上で実行するタスク）は、コーディネータからリモートオンデマンドコード実行システムへの通信よりも困難である場合がある。実例として、リモートオンデマンドコード実行システムは、外部ソースからの通信に基づいて主に動作するネットワーク上で実装されてもよく、そのような通信をサポートするように構成されてもよい（例えば、ドメインネームサービス（ＤＮＳ）プロバイダへの登録、専用ネットワーク接続の使用、外部をソースとした通信を可能にするセキュリティポリシの実装などを介して）。しかしながら、コーディネータは、プライベートネットワークに内で動作してもよく、外部をソースとした通信は、信頼できないものである場合がある。例えば、プライベートネットワークは、ロバストな、信頼でき、および専用ネットワーク接続を利用しなくてもよく、ＤＮＳプロバイダを利用しなくてもよく（または、静的ネットワークアドレスを有する）、外部をソースとした通信を抑制する制限的なセキュリティポリシを実装してもよい。それらの問題に対処するために、コーディネータは、リモートオンデマンドコード実行システムなど、外部通信ソースとの通信を可能にするリモートインタフェースを実装してもよい。１つの実施形態では、リモートインタフェースは、コーディネータ上のタスクとして実装されてもよく、外部通信ソースとの通信を開始するように実行してもよい。そのような通信がリモートインタフェースによって開始されることができることを理由に、プライベートネットワーク上での、静的ネットワークアドレスの欠如、制限的なセキュリティポリシ、またはネットワークアドレス変換の使用などの問題は、少なくとも部分的に軽減されることができる。その上、リモートインタフェースは、プライベートネットワークの信頼性における問題に対処する、待ち時間およびエラー耐性通信を提供することができる。実例として、リモートインタフェースは、リモートオンデマンドコード実行システムから、コーディネータ上で実行されることが必要とされるタスクのセットを定期的に取り出してもよく、コーディネータ上でタスクのセットを実行させてもよい（例えば、上記説明されたように、通信マネージャに要求を伝送することを介して）。リモートインタフェースは更に、タスクのセットの実行の出力を取得してもよく、リモートオンデマンドコード実行環境に出力を返却してもよい。よって、リモートインタフェースは、コーディネータとリモートオンデマンドコード実行環境との間の通信を促進することができる。
【００１６】
本開示を考慮して当業者の一人によって認識されるように、本明細書で開示される実施形態は、コンピューティングシステム、特に、外部デバイスによって調整および管理されることになる、制限された局所化されたユーザインタフェースを有するコンピューティングシステムの能力を改善する。特に、本開示は、信頼できる方式で被調整環境内でデバイスを調整および管理するように高度に構成可能なコーディネータを提供すると共に、外部通信ネットワークまたはパブリック通信ネットワークを介した通信に対する必要性を削減または除去することができる。よって、本明細書で開示される実施形態は、被調整デバイスの更なる応答制御を提供すると共に（例えば、通信の待ち時間が減少することに起因して）、被調整デバイスにおいてセキュリティを高める（例えば、パブリックネットワークを介して通信する必要性がないことに起因して）。よって、本開示は、概して、既存のデータ処理システムおよびコンピューティングシステムに対する改善を表す。
【００１７】
その上、本明細書で開示されるコーディネータは、いくつかの状況で利用されてもよく、先行のシステムよりも多数の利点をもたらすことができる。例えば、多くの例におけるローカル通信ネットワーク（例えば、ローカルエリアネットワーク、すなわち「ＬＡＮ」）が非ローカルネットワーク（例えば、ワイドエリアネットワーク、すなわち「ＷＡＮ」）よりも高い帯域幅および低い待ち時間をもたらすことができることを理由に、本明細書で開示されるようなコーディネータの使用は、他に不可能または実用的でないデータ処理アプリケーションを可能にし、または実用的にすることができる。例えば、いくつかの現在のネットワークに基づくデータ分析システムは、様々なネットワーク接続されたデバイスからデータの制限された部分を収集し、それらの制限された部分を分析して（例えば、機械学習アルゴリズムに従って）、ネットワーク接続されたデバイスに関する集約データまたは予測的データを生成することによって動作する。例えば、自動車製造業者は、その自動車の動作に関する制限されたデータを収集してもよく、それらの自動車についての支援運転技術の開発を支援するようにデータを分析してもよい。しかしながら、そのような分析は一般的に、動作の間に自動車によって作成されたデータの量が典型的には、ネットワーク結合された分析サービスにそのようなデータを伝送するために利用可能な帯域幅を上回るので、制限されたデータセットに基づいている。そのような自動車にローカルなコーディネータの利用によって、分析（例えば、機械学習アルゴリズムの適用）が、自動車によって生成されたデータの多くの部分、または潜在的に全てに適用されてもよい。そのような分析の出力が分析されたデータよりも小さいことがあることを理由に、そのような出力は次いで、他の個々の自動車の出力と組み合わせまたは集約するために、ネットワーク結合された分析サービスに提供されてもよい。よって、コーディネータの使用は、自動車とネットワーク結合された分析サービスとの間の制限された帯域幅に過度な負荷をかけることなく、自動車のデータのより大きな分析を可能にすることができる。様々な他の局所化されたデータ処理アプリケーションが可能であり、本出願の範囲内である。例えば、常時オンデバイスが環境を監視し、そのような環境内での特定の出来事を記録または報告することよる仕事が課されることができる（例えば、カメラは記録を開始する動き検出またはその記録の長期保存を利用してもよい）複数のシナリオが存在する。本明細書で説明されるようなコーディネータは、そのような記録を行うことができる出来事を動的に変える能力、またはそのような出来事を検出するために行われる分析を提供することができる。例えば、カメラがコーディネータによって管理される場合、カメラは、コーディネータに記録を定期的に提供してもよく、コーディネータは、ユーザにより定義されたタスクに従って記録を分析してもよく、記録をローカルに記憶し、記録において検出された出来事を第三者に通知し、ネットワークアクセス可能な記憶装置に記録をアップロードすることなど、タスクによって定義されるように適切なアクションをとってもよい。そのような分析およびアクションは、本明細書で説明されるように、コーディネータを再構成することによって変化してもよい。よって、本出願のコーディネータは、被調整デバイスの高度に構成可能な、局所化された管理および制御を提供することができる。
【００１８】
本開示の上述した態様および付随する利点の多くは、添付図面と併用するとき、以下の説明を参照することによってより良好に理解されるのと同様に、更に容易に認識されよう。
【００１９】
図１は、コーディネータ１１４が被調整デバイス１１２を制御するように動作することができる１つ以上の被調整環境１１０を含み、被調整環境１１０と対話することができる（例えば、被調整デバイス１１２の状態における変更を要求するために）クライアントデバイス１０２、および様々な被調整環境１１０内でコーディネータ１１４との通信またはコーディネータ１１４の構成を支援することができるサービスプロバイダ環境１２０を含む、例示的な動作環境１００のブロック図である。
【００２０】
被調整環境１１０、クライアントデバイス、およびサービスプロバイダ環境１２０は、ネットワーク１０４を介して通信してもよく、ネットワーク１０４は、いずれかの有線ネットワーク、無線ネットワーク、またはそれらの組み合わせを含んでもよい。例えば、ネットワーク１０４は、パーソナルエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、オーバージエアブロードキャストネットワーク（例えば、無線機もしくはテレビのための）、ケーブルネットワーク、サテライトネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであってもよい。更なる実施例として、ネットワーク１０４は、インターネットなど、場合によっては様々な別個の当事者によって運営される、リンクされたネットワークの公然にアクセス可能なネットワークであってもよい。いくつかの実施形態では、ネットワーク１０４は、企業または大学のイントラネットなど、プライベートまたは準プライベートネットワークであってもよい。ネットワーク１０４は、グローバルシステムフォーモバイルコミュニケーションズ（ＧＳＭ）ネットワーク、符号分割多重アクセス（ＣＤＭＡ）ネットワーク、ロングタームエボリューション（ＬＴＥ）ネットワーク、またはいずれかの他のタイプの無線ネットワークなど、１つ以上の無線ネットワークを含んでもよい。ネットワーク１０４は、インターネットまたは他の上述したタイプのネットワークのいずれかを介して通信するためのプロトコルおよび構成要素を使用することができる。例えば、ネットワーク１０４によって使用されるプロトコルは、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、ＨＴＴＰセキュア（ＨＴＴＰＳ）、ＭＱＴＴ、およびコンストレイントアプリケーションプロトコル（ＣｏＡＰ）などを含んでもよい。インターネットまたは他の上述したタイプの通信ネットワークのいずれかを介して通信するためのプロトコルおよび構成要素は、当業者にとって公知であり、よって、本明細書で更に詳細には説明されない。
【００２１】
本明細書で開示されるいくつかの実施形態は、そのようなプロトコルの標準的な実装態様に従って、ＭＱＴＴなどの既知のプロトコルを利用してもよく、他の実施形態は、そのようなプロトコルの実装態様を変化させてもよい。例えば、標準化されたＭＱＴＴは、「キープアライブ」機能性を利用することができ、それによって、クライアントおよびブローカは、閾値期間（「キープアライブ」閾値）内に標準データもしくは特殊化されたキープアライブメッセージ（例えば、ＭＱＴＴピング）のいずれかを交換する必要があり、または接続が断たれると想定される。しかしながら、特殊化されたキープアライブメッセージによって生じたオーバヘッドは、被調整環境１１２内では望ましくない場合がある。よって、本出願のいくつかの実施形態は、可変なキープアライブ閾値を実装してもよく、それによって、通信においてエラーが発生するまで、キープアライブメッセージが伝送されるにつれて、キープアライブ閾値が増大する。実例として、第１のキープアライブ閾値が満了し、キープアライブメッセージのクライアントの伝送をもたらし、クライアントがブローカからキープアライブ応答を取得する場合、クライアントは、後続の伝送のために、潜在的に最大量に到達する、何らかの量だけ（例えば、５０％、ｎミリ秒など）キープアライブ閾値を増大させてもよい。第１のキープアライブ閾値が満了し、キープアライブメッセージのクライアントの伝送をもたらし、クライアントがブローカからキープアライブ応答を取得しない場合、クライアントは、後続の伝送のために、何らかの量だけ（例えば、５０％、ｎミリ秒など）またはデフォルトの最小値までキープアライブ閾値を減少させてもよい。よって、キープアライブメッセージが伝送および確認応答されるにつれて、後続の伝送のためのキープアライブ閾値は、増大することができ、そのような伝送をサポートするために使用される帯域幅を減少させる。ＭＱＴＴへのそれらの変形は特に、低帯域幅または高輻輳を有する環境１１０において有益となる場合がある。
【００２２】
各々の被調整環境１１０は、実行環境１１０のネットワーク（ネットワークは図１には示されない）を介して通信する、コーディネータ１１４およびいずれかの数の被調整デバイス１１２を含んでもよい。被調整環境１１０内のそれらの関連付けを理由に、所与の環境１１０内の被調整デバイス１１２およびコーディネータ１１４は、通信ネットワークの点で、相互に「ローカル」であると考えられてもよい。例えば、所与の環境１１０内の被調整デバイス１１２およびコーディネータ１１４は、ＬＡＮまたは他の局所化された通信ネットワークを介して接続されてもよい。被調整デバイス１１２およびコーディネータ１１４は、本明細書で説明される実施形態に従って、そのような局所化された通信ネットワークを通じて相互に通信してもよい。いくつかの例では、被調整デバイス１１２とコーディネータ１１４との間の通信は、トランスポートレイヤセキュリティ暗号化プロトコルを介してなどで暗号化されてもよい。実例として、コーディネータ１１４は、コーディネータのデジタル識別を検証するセキュリティ証明書をプロビジョニングされてもよい。セキュリティ証明書は、パブリック証明書機関またはプライベート証明書機関（例えば、サービスプロバイダ環境１２０によって確立された）によって署名されてもよい。
【００２３】
各々の被調整デバイス１１２は、コーディネータ１１４と通信して、被調整デバイス１１２の機能性を管理するように構成されたコンピューティングデバイスに対応することができる。いくつかの例では、被調整デバイス１１２は、ロバストな局所化されたユーザインタフェース能力を有する、ラップトップ、デスクトップ、スタンドアロンメディアプレイヤなど、十分な機能を有するコンピューティングデバイスに対応することができる。他の例では、被調整デバイス１１２は、家庭用器具またはデバイス（冷蔵庫、洗濯機、湯沸し器、加熱炉、ドアロック、照明バルブ、電機コンセント、電気スイッチなど）内にアクセサリとして組み込まれまたはそれらに結合されたデバイスなど、別の主要機能と関連付けられたシンデバイスまたは組み込みデバイスに対応することができる。そのような器具またはデバイスは、いくつかのコンテキストでは、「スマート」デバイス、ＩｏＴデバイス、または「接続された」デバイスと称される。そのようにして、被調整デバイス１１２は、制限されたローカルユーザインタフェースを含んでもよく、リモート管理のために構成されてもよい。いくつかの例では、被調整デバイス１１２は、ステートフルであってもよく、命令に応答してそれらの状態を変えるように動作してもよい（例えば、「オフ」から「オン」に変化させることによってなど）。
【００２４】
以下で更に詳細に説明されるように（例えば、図２に関して）、コーディネータ１１４は、被調整デバイス１１２に伝送された命令が被調整環境１１０の外側に伝わることなく（よって、そのような命令のセキュリティを増大させ、それらの伝送の速度を増大させる）、被調整デバイス１１２の動作を調整、管理、または制御する命令を実行するコンピューティングデバイスに対応することができる。特に、コーディネータ１１４は、被調整デバイス１１２、クライアントデバイス１０２、およびサービスプロバイダネットワーク１２０のデバイスのいずれかの組み合わせの間の通信を管理するように集合的に構成されたプロセッサおよびメモリを含むことができる。コーディネータは更に、サービスプロバイダ環境１２０のオンデマンドコード実行環境１２０に類似の方式で、タスクの実行を可能にするように構成されることができる。それらのタスクは、被調整デバイス１１２、クライアントデバイス１０２、およびサービスプロバイダネットワーク１２０のデバイスと通信することを含む、様々なユーザにより定義された機能性またはユーザにより定義されていない機能性を実装してもよい。よって、コーディネータ１１４は、被調整デバイス１１２の手動、自動、または準自動制御を可能にするように構成されることができる。例えば、コーディネータ１１４は、クライアントデバイス１０２が、被調整デバイス１１２の状態を変更する要求を伝送することを可能にすることができ、状態におけるそのような変更を生じさせることができる。更なる実施例として、コーディネータ１１４は、被調整デバイス１１２の状態が変更されるべき基準をユーザが指定することを可能にすることができ、次いで、基準が満たされるときに被調整デバイス１１２の状態を自動で変更するように動作してもよい。
【００２５】
以下で議論されるように、コーディネータ１１４の多くの機能は、タスクを介して確立されてもよく、ユーザによって要求されるようにそれらの機能の即時的な変更を可能にする。いくつかの例では、そのようなタスク（または、ライブラリ、ドライバなど、そのようなタスクの依存関係）は、コーディネータのユーザによって提供されてもよい。他の例では、そのようなタスクは、サービスプロバイダ環境１２０によってコーディネータ１１４に提供されてもよい。例えば、サービスプロバイダ環境１５０は、コーディネータ１１４と共に、そのようなタスクが適用することができるタイプの被調整デバイス１１２（例えば、全てのデバイス、特定のデバイスモデル、特定の製造者、タイプ、または機能のデバイスなど）に利用可能なタスクのライブラリを維持してもよい。サービスプロバイダ環境１５０は次いで、コーディネータ１１４に、コーディネータ１１４の被調整環境１１０内で被調整デバイス１１２に対して適切な全てもしくはいくつかのタスクを提供してもよく、またはユーザにそのようなタスクの可用性を通知してもよい。１つの実施形態では、ユーザは、サービスプロバイダ環境１５０またはコーディネータ１１４に、被調整環境１１０内の被調整デバイス１１２について通知してもよい。別の実施形態では、コーディネータ１１４は、それらのデバイスの伝送に基づいて、被調整環境１１０内の被調整デバイス１１２の特性を判定するように構成されてもよい。実例として、被調整デバイス１１２から通信を受信すると（例えば、自動化された伝送に基づいて、ユーザにより開始されたペアリングに応答して）、コーディネータ１１４は、伝送のコンテンツもしくはフォーマットを、フォーマットもしくはコンテンツを異なるデバイス時間とマッピングする情報と比較してもよい。そのようなマッピングは、サービスプロバイダ環境１５０によって維持されてもよく、様々なコーディネータ１１４から収集されたデータに基づいて更新されてもよい。いくつかの例では、伝送をデバイスタイプとマッピングするのではなく、コーディネータ１１４は、デバイス１１２のタイプが既知であるかどうかに関わらず、伝送をデバイス１１２に対して適切なタスクとマッピングするように機能してもよい。例えば、サービスプロバイダ環境１５０は、１つ以上の被調整デバイス１１２により確立された環境１１０について、そのようなデバイス１１２の伝送のコンテンツまたはフォーマット、およびそのようなデバイス１１２の動作を管理するように利用されるタスクを識別するデータを収集してもよい。その後、新たに作成された被調整環境１１０は、同一または類似の伝送について監視されてもよく、確立された環境１１０内でのタスク利用は、新たに作成された環境１１０内での潜在的な使用のために提示されてもよい。更なる他の実施形態では、コーディネータ１１４は、被調整環境１１０内でデバイス１１２を発見するために、ユニバーサルプラグ・プレイ（ＵＰｎＰ）プロトコルセットなど、標準化された発見プロトコルを利用してもよい。
【００２６】
クライアントデバイス１０２は、ユーザが被調整環境１１０、サービスプロバイダ環境１２０、またはその両方と通信することを可能にする様々なコンピューティングデバイスを含んでもよい。概して、クライアントデバイス１０２は、デスクトップ、ラップトップもしくはタブレットコンピュータ、パーソナルコンピュータ、ウェアラブルコンピュータ、サーバ、携帯情報端末（ＰＤＡ）、ハイブリッドＰＤＡ／携帯電話、携帯電話、電子ブックリーダ、セットトップボックス、ボイスコマンドデバイス、カメラ、およびデジタルメディアプレイヤなどのいずれかのコンピューティングデバイスとすることができる。サービスプロバイダ環境１２０は、コーディネータ１１４についての構成をサブミットし、その構成の配置を制御し、コーディネータ１１４またはサービスプロバイダ環境１２０のオンデマンドコード実行環境１５０上で実行されることになるタスクに対応するコードをサブミットし、コーディネータ１１４に関連する情報のロギングまたは監視を参照するなどのために、サービスプロバイダ環境１２０と対話するための１つ以上のユーザインタフェース、コマンドラインインタフェース（ＣＬＩ）、アプリケーションプログラミングインタフェース（ＡＰＩ）、および／または他のプログラムインタフェースをクライアントデバイス１０２に提供してもよい。同様に、コーディネータ１１４は、被調整デバイス１１２の状態を読み出し、被調整デバイス１１２の状態における変更を要求し、コーディネータ１１４がタスクの実行を生じさせることを要求するなどのために、コーディネータ１１４と対話するための１つ以上のユーザインタフェース、コマンドラインインタフェース（ＣＬＩ）、アプリケーションプログラミングインタフェース（ＡＰＩ）、および／または他のプログラムインタフェースをクライアントデバイス１０２に提供してもよい。１つ以上の実施形態がユーザインタフェースを使用するとして本明細書で説明されてもよいが、そのような実施形態は、加えてまたは代わりに、いずれかのＣＬＩ、ＡＰＩ、または他のプログラムインタフェースを使用してもよいことを認識されるべきである。
【００２７】
サービスプロバイダ環境１２０は、コーディネータ１１４の構成、コーディネータ１１４の管理、およびコーディネータ１１４との通信を可能にするいくつかの要素を含むことができる。特に、サービスプロバイダ環境１２０は、サービスプロバイダ環境１２０へのコーディネータ１１４の登録およびそのようなコーディネータ１１４の構成を可能にする管理および配置サービス１３０、コーディネータ１１４および被調整デバイス１１２の状態へのロバストな変更を可能にするデバイスシャドウサービス１４０、並びにタスクのオンデマンドな動的実行と共に、コーディネータ１１４上でのタスクの配置およびプロビジョニングを提供するオンデマンドコード実行環境１５０を含む。
【００２８】
図１に示されるように、管理および配置サービス１３０は、管理および配置サービス１３０へのコーディネータ１１４の登録、コーディネータ１１４についての構成の生成、およびコーディネータ１１４への構成データの伝送を可能にするように集合的に動作することができる、クライアントおよびデータインタフェース１３２並びに構成データストア１３４を含む。実例として、クライアントおよびデータインタフェース１３２は、１つ以上のユーザインタフェース（例えば、ＡＰＩ、ＣＬＩ、ＧＵＩなど）を提供してもよく、１つ以上のユーザインタフェースを通じて、ユーザは、クライアントデバイス１０２を介して、構成データストア１３４に記憶するためのコーディネータ１１４の構成を生成またはサブミットしてもよい。クライアントおよびデータインタフェース１３２は更に、１つ以上のインタフェースを提供してもよく、１つ以上のインタフェースを通じて、コーディネータ１１４は、構成を取得してもよく、その結果、コーディネータ１１４は、取得された構成に従って再構成される。構成データストア１３４は、ハードドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＤＤ）、ネットワークアタッチドストレージ（ＮＡＳ）、テープドライブ、またはいずれかのそれらの組み合わせなど、いずれかの永続的または実質的に永続的なデータストアに対応することができる。
【００２９】
デバイスシャドウサービス１４０は、コーディネータ１１４または被調整デバイス１１２など、デバイスの「シャドウ状態」が作成され、維持され、読み取られ、変更され、または削除されることを可能にする要素を含むことができる。上記議論されたように、シャドウ状態は、対応するデバイスの所望の状態を表すデータに対応してもよく、対応するデバイスは、デバイスの現在の状態を反映してもよく、または反映しなくてもよい。例えば、コーディネータ１１４について、シャドウ状態は、コーディネータ１１４についての所望の構成バージョンを含んでもよい。被調整デバイス１１２について、シャドウ状態は、被調整デバイス１１２の所望の状態（例えば、スイッチまたはバルブについてのオンまたはオフ、ロックに対してロックされまたはロックされていない、温度調節器についての所望の温度など）を含んでもよい。デバイスシャドウサービス１４０は、ユーザが、クライアントデバイス１０２または他のエンティティを介して、デバイスについてのシャドウ状態から読み出し、またはデバイスについてのシャドウ状態を修正することを可能にすることができ、更に、デバイスをシャドウ状態に同期するようにデバイスと対話してもよい。実例として、デバイスシャドウサービス１４０は、インタフェース１４２（例えば、ＡＰＩ、ＣＬＩ、ＧＵＩなどを含んでもよい）を含んでもよく、インタフェース１４２を通じて、シャドウ状態から読み出し、シャドウ状態に書き込み、シャドウ状態を作成し、またはシャドウ状態を削除する要求が受信されてもよく、シャドウデータストア１４４は、シャドウ状態を記憶するように構成されてもよい。シャドウデータストア１３４は、ハードドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＤＤ）、ネットワークアタッチドストレージ（ＮＡＳ）、テープドライブ、またはいずれかのそれらの組み合わせなど、いずれかの永続的または実質的に永続的なデータストアに対応することができる。デバイスシャドウサービス１４０に関する更なる詳細は、上記参照によって組み込まれた、「７００出願」において見出すことができる。
【００３０】
オンデマンドコード実行環境１５０は、タスク（例えば、ポータブルコードセグメント）のオンデマンド実行を提供するいくつかのデバイスを含むことができる。特に、オンデマンドコード実行環境１５０は、フロントエンド１５２を含むことができ、フロントエンド１５２を通じて、ユーザは、クライアントデバイス１０２を介して、オンデマンドコード実行環境１５０にタスクをサブミットしてもよく、オンデマンドコード実行環境１５０上でタスクの実行を呼び出してもよい。そのようなタスクは、例えば、タスクデータストア１５４に記憶されてもよく、タスクデータストア１５４は、ハードドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＤＤ）、ネットワークアタッチドストレージ（ＮＡＳ）、テープドライブ、またはいずれかのそれらの組み合わせなど、いずれかの永続的または実質的に永続的なデータストアに対応することができる。図１には示されていないが、オンデマンドコード実行システム１５０は、いくつかの実行環境など、タスクの実行を可能にする様々な追加の構成要素（例えば、オンデマンドコード実行環境１５０の物理ホストデバイス上で実行するコンテナまたは仮想マシン）、そのような実行環境を管理するウォーカマネージャ、および即時ベースで（例えば、１０ミリ秒を下回る）ウォーカマネージャに利用可能な実行環境を作成することを支援するウォーミングプールマネージャを含むことができる。オンデマンドコード実行環境に関する更なる詳細は、上記参照によって組み込まれた、「５５６特許」において見出すことができる。
【００３１】
上記述べられたように、タスクは、オンデマンドコード実行環境１５０およびコーディネータ１１４の両方において利用されてもよい。上記述べられたように、タスクは、ユーザコード（例えば、特定の機能を達成するための）個々の集合に対応する。本明細書で使用されるようなユーザコードへの言及は、特定のプログラム言語で記述されたいずれかのプログラムコード（例えば、プログラム、ルーチン、サブルーチン、スレッドなど）を指してもよい。本開示では、用語「コード」、「ユーザコード」、および「プログラムコード」は、交換可能に使用されてもよい。そのようなユーザコードは、例えば、ユーザによって開発された特定のウェブアプリケーションまたはモバイルアプリケーションと関連して、特定の機能を達成するように実行されてもよい。そのコードの特定の実行は、本明細書で「タスク実行」または単純に「実行」と称される。タスクは、非限定的な例として、ＪａｖａＳｃｒｉｐｔ（例えば、ｎｏｄｅ．ｊｓ）、Ｊａｖａ、Ｐｙｔｈｏｎ、並びに／またはＲｕｂｙ（および／もしくは別のプログラミング言語）で記述されてもよい。タスクは、様々な方式でオンデマンドコード実行システム１５０またはコーディネータ１１４上での実行のために「トリガ」されてもよい。１つの実施形態では、クライアントデバイス１０２または他のコンピューティングデバイスは、タスクを実行する要求を伝送してもよく、それは一般的に、タスクを実行する「呼び出し」と称されることができる。そのような呼び出しは、実行されることになるユーザコード（または、その位置）およびユーザコードを実行するために使用されることになる１つ以上の引数を含んでもよい。例えば、呼び出しは、タスクを実行する要求に沿ってタスクのユーザコードを提供してもよい。別の実施例では、呼び出しは、その名前または識別子によって前にアップロードされたタスクを識別することができる。更なる別の実施例では、タスクに対応するコードは、タスクについての呼び出しに含まれてもよく、要求がコーディネータ１１４またはオンデマンドコード実行システム１５０によって受信される前に、別個の位置（例えば、コーディネータ１１４の記憶装置、ネットワークアクセス可能なストレージサービス、またはタスクデータストア１５４）にアップロードされてもよい。コーディネータ１１４またはオンデマンドコード実行システム１５０の要求インタフェースは、ユーザから、ハイパーテキスト転送プロトコルセキュア（ＨＴＴＰＳ）要求としてタスクを実行する呼び出しを受信してもよい。また、ＨＴＴＰＳ要求に含まれるいずれかの情報（例えば、ヘッダおよびパラメータ）も、タスクを実行するときに処理および利用されてもよい。上記議論されたように、例えば、ＨＴＴＰ、ＭＱＴＴ、およびＣｏＡＰを含むいずれかの他のプロトコルは、要求インタフェース１２２にタスク呼び出しを包含するメッセージを転送するために使用されてもよい。
【００３２】
タスクを実行する呼び出しは、タスクに対応するユーザコードに沿って使用されることになる１つ以上の第三者ライブラリ（ネイティブライブラリを含む）を指定してもよい。１つの実施形態では、呼び出しは、コーディネータ１１４またはオンデマンドコード実行システム１５０に、実行について要求されたタスクに対応するユーザコードおよびいずれかのライブラリ（および／または、その記憶位置の識別子）を包含するＺＩＰファイルを提供してもよい。いくつかの実施形態では、呼び出しは、実行されることになるタスクのプログラムコード、プログラムコードが記述された言語、呼び出しと関連付けられたユーザ、および／またはプログラムコードを実行するために保存されることになるコンピューティングリソース（例えば、メモリなど）を示すメタデータを含む。例えば、タスクのプログラムコードは、呼び出しと共に提供されてもよく、ユーザによって前にアップロードされてもよく、コーディネータ１１４もしくはオンデマンドコード実行システム１５０によって提供されてもよく（例えば、標準化されたルーチン）、および／または第三者によって提供されてもよい。いくつかの実施形態では、そのようなリソースレベルの制約（例えば、どの程度のメモリが特定のユーザコードを実行するために割り当てられるか）は、特定のタスクについて指定され、タスクの各々の実行を通じて変化しなくてもよい。そのようなケースでは、コーディネータ１４０またはオンデマンドコード実行システム１５０は、各々の個々の呼び出しが受信される前にそのようなリソースレベルの制約へのアクセスを有してもよく、個々の呼び出しは、そのようなリソースレベルの制約を指定しなくてもよい。いくつかの実施形態では、呼び出しは、どの種類のパーミッションまたは権限が、呼び出しがタスクを実行することを引き起こすかを示すパーミッションデータなどの他の制約を指定してもよい。そのようなパーミッションデータは、プライベートリソース（例えば、プライベートネットワーク上の）にアクセスするためにオンデマンドコード実行システム１１０によって使用されてもよい。
【００３３】
いくつかの実施形態では、呼び出しは、呼び出しを扱うために適合されるべきである振る舞いを指定してもよい。そのような実施形態では、呼び出しは、呼び出しにおいて参照されるタスクを実行するための１つ以上の実行モードを可能にするためのインジケータを含んでもよい。例えば、呼び出しは、デバッグモードでタスクが実行されるべきかどうかを示すためのフラグまたはヘッダを含んでもよく、デバッグモードでは、タスクの実行と関連して生成されてもよいデバッギングおよび／またはロギング出力がユーザに再度提供される（例えば、コンソールユーザインタフェースを介して）。そのような実施例では、コーディネータ１１４またはオンデマンドコード実行システム１５０は、呼び出しを検査してもよく、フラグまたはヘッダを探索してもよく、存在する場合、コーディネータ１１４またはオンデマンドコード実行システム１５０は、タスクが実行される実行環境の振る舞い（例えば、ロギング機能）を修正してもよく、出力データをユーザに再度提供させてもよい。いくつかの実施形態では、振る舞い／モードインジケータは、コーディネータ１１４またはオンデマンドコード実行システム１５０によってユーザに提供されるユーザインタフェースによって呼び出しに追加される。ソースコードプロファイリング、リモートデバッギングなどの他の特徴も、呼び出しにおいて提供されるインジケーションに基づいて、有効または無効にされてもよい。
【００３４】
サービスプロバイダ環境１２０は、１つ以上のコンピュータネットワーク（図１には示されない）を使用して相互接続された、いくつかのコンピュータシステムを含む分散コンピューティング環境において動作するとして図１に表される。サービスプロバイダ環境１２０も、図１に例示されるデバイスよりも少ない数または多い数のデバイスを有するコンピューティング環境内で動作してもよい。よって、図１におけるサービスプロバイダ環境１２０の表現は、例示的であると見なされるべきであり、本開示を限定すると見なされるべきではない。例えば、サービスプロバイダ環境１２０またはその様々な制約は、本明細書で説明される処理の少なくとも一部を実装するために、様々なウェブサービス構成要素、ホストされたコンピューティング環境もしくは「クラウド」コンピューティング環境、および／またはピアツーピアネットワーク構成を実装してもよい。
【００３５】
更に、サービスプロバイダ環境１２０は、ハードウェアまたはハードウェアデバイスによって実行されるソフトウェアにおいて直接実装されてもよく、例えば、本明細書で説明される様々な特徴を実行するためのコンピュータ実行可能命令を実行するように構成された物理コンピュータハードウェア上で実装された１つ以上の物理または仮想サーバを含んでもよい。１つ以上のサーバは、例えば、１つ以上のデータセンタ内で、地理的に分散されてもよく、または地理的に同一場所に配置されてもよい。いくつかの例では、１つ以上のサーバは、「クラウドコンピューティング環境」と称されることが多い、即時的にプロビジョニングされ、解放されるコンピューティングリソースのシステムの一部として動作してもよい。
【００３６】
図２は、所与の被調整環境１１０内で被調整デバイス１１２を管理するコンピューティングシステム（コーディネータ１１４として言及される）の全体的なアーキテクチャを表す。図２に表されるワーカマネージャ１４０の全体的なアーキテクチャは、本開示の態様を実装するために使用されてもよいコンピュータハードウェアおよびソフトウェアモジュールの配列を含む。ハードウェアモジュールは、以下で更に詳細に議論されるように、物理電子デバイスにより実装されてもよい。コーディネータ１１４は、図２に示されるより要素よりも更に多くの（または、少ない）要素を含んでもよい。しかしながら、開示を可能にすることをもたらすために、それらの一般的な従来の要素の全てが必ずしも示されるわけではない。加えて、図２に例示される全体的なアーキテクチャは、図１に例示される他の構成要素のうちの１つ以上を実装するために使用されてもよい。例示されるように、コーディネータ１１４は、プロセシングユニット２０４、ネットワークインタフェース２０６、コンピュータ可読媒体ドライブ２０７、および入力／出力デバイスインタフェース２０８を含み、それらの全ては、通信バスによって相互に通信してもよい。ネットワークインタフェース２０６は、１つ以上のネットワークまたはコンピューティングシステムに接続性を提供してもよい。よって、プロセシングユニット２０４は、ネットワーク１０４を介して、他のコンピューティングシステムまたはサービスから情報および命令を受信してもよい。プロセシングユニット２０４はまた、メモリ２５０におよびメモリ２５０から通信してもよく、更に、入力／出力デバイスインタフェース２０８を介して、任意選択のディスプレイ（図示せず）に対して出力情報を提供してもよい。入力／出力デバイスインタフェース２０８はまた、任意選択の入力デバイス（図示せず）から入力を受け付けてもよい。
【００３７】
メモリ２５０は、本開示の１つ以上の態様を実装するために、プロセシングユニット２０４が実行するコンピュータプログラム命令（いくつかの実施形態では、モジュールとしてグループ化される）を包含してもよい。メモリ２５０は一般的に、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、および／または他の永続的な、補助的もしくは非一時的コンピュータ可読媒体を含む。メモリ２５０は、コーディネータ１１４の全体的な管理および動作においてプロセシングユニット２０４による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム２５２を記憶してもよい。メモリ２５０は更に、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含んでもよい。例えば、１つの実施形態では、メモリ２５０は、プロセスマネージャ２５４、スケジューラ２５６、配置エージェント２５８、および通信マネージャ２６０を含む。
【００３８】
スケジューラ２５６および配置エージェント２５８は、プロセシングユニット２０４による実行のためのタスクを選択し、そのようなタスク実行を管理するようにプロセシングユニット２０４によって実行されてもよい。特に、スケジューラ２５６は、所与の時間点における実行のためのタスクを選択し、タスクの実行を中断する（例えば、コーディネータ１１４における制約されたリソースのインスタンスの下で）命令を含んでもよい。配置エージェント２５８は、タスクを実行するための適切な実行環境２７０を選択し、その実行環境２７０に、タスク実行の間に必要なリソースへの適切なアクセスをプロビジョニングし、実行環境２７０内でタスクの実行を生じさせる命令を含んでもよい。実行環境２７０は、本明細書で使用されるように、タスクを実行するためのメモリ２５０の論理部分を指す。１つの実施形態では、実行環境２７０は、プログラム的に分離され、その結果、第１の実行環境２７０内でのコードの実行は、別の実行環境２７０と関連付けられたメモリを修正することを抑止される。実例として、実行環境２７０は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「ｃｈｒｏｏｔ  ｊａｉｌ」もしくはＰｙｔｈｏｎ仮想環境「ｖｉｒｔｕａｌｅｎｖ」などの「サンドボックス」環境に対応してもよい。他の例では、実行環境２７０は、仮想マシン環境（例えば、ＪＡＶＡ仮想マシン、別個のオペレーティングシステムを有する仮想化されたハードウェアデバイスなど）に対応してもよい。更なる他の例では、実行環境２７０は、仮想化を必ずしも利用しない、タスクの実行に割り当てられたメモリ空間であってもよい。
【００３９】
コーディネータ上で実行するタスクの間の通信と共に、コーディネータ１１４と他のデバイス（例えば、クライアントデバイス１０２および被調整デバイス１１２）との間の通信は、通信マネージャ２６０によって促進されてもよい。特に、通信マネージャ２６０は、コーディネータ１１４に向けられたメッセージを取得し、適切な宛先にメッセージを転送するように構成されてもよい。例えば、通信マネージャ２６０は、タスク、被調整デバイス１１２、クライアントデバイス１０２、およびサービスプロバイダ実行環境１２０のデバイスのいずれかの組み合わせの間でメッセージを経路指定してもよい。
【００４０】
コーディネータ１１４の動作に関する情報の収集を可能にするために、メモリ２５０は更に、コーディネータ１１４においてタスクがどのように実行されるかなど、コーディネータ１１４の動作を監視し、そのような動作に関する情報を報告するようにコーディネータ１１４によって実行可能なコードに対応する、測定基準およびロギングエージェント２５９を含む。情報は、例えば、コーディネータ１１４上でのタスクの実行時間と共に、そのような実行に関する情報（例えば、使用される計算リソース、実行がエラーをもたらしたかどうかなど）を含んでもよい。いくつかの例では、測定基準およびロギングエージェント２５９は、ユーザが情報を取得することを可能にするために、メモリ２５０などにこの情報をローカルに記憶してもよい。他の例では、測定基準およびロギングエージェント２５９は、サービスプロバイダ環境１５０になど、情報をリモートに記憶してもよい。測定基準およびロギングエージェント２５９は、コーディネータ１１４からサービスプロバイダ環境１５０にヘルスチェックデータを伝送することなど、コーディネータ１１４の動作を監視することに関する追加の機能性をも実装してもよい。
【００４１】
コーディネータ１１４によって実行されるタスクは、タスクメモリ空間２８０内で論理的にグループ化されるとして示され、タスクメモリ空間２８０は、各々のタスクに対応するコードを記憶するように構成されたメモリ２５０の論理単位に対応してもよい。図２に示されるように、タスクメモリ空間２８０は、ルータタスク２８２、１つ以上の通信マネージャタスク２８６、シャドウサービスタスク２８８、および１つ以上のクライアントにより提供されるタスク２９０を含む、コーディネータ１１４の機能性を実装するようにプロセシングユニット２０４によって実行可能ないくつかのタスクを含むことができる。
【００４２】
ルータタスク２８２は、コーディネータ１１４内での、コーディネータ１１４への、およびコーディネータ１１４からのメッセージの経路指定を支援するように実行可能なコードの一部に対応してもよい。１つの実施形態では、ルータタスク２８２は、コーディネータ１１４において受信されたメッセージまたはイベントの他のインジケーションについての適切な宛先を判定するために、「イベントフローテーブル」を実装する。例えば、通信マネージャ２６０は、ルータタスク２８２に、コーディネータ１１４において取得されたメッセージを転送してもよく（例えば、タスク実行の生成または入力／出力インタフェース２０８における受信に起因して）、ルータタスク２８２は、或る識別子にアドレス指定されたメッセージが所与のタスク、所与のクライアントデバイス１０２、または所与の被調整デバイス１０２に経路指定されるべきであると判定するためにイベントフローテーブルを利用してもよい。いくつかの例では、イベントフローテーブルは更に、所与のタイプのメッセージを扱う方式を指定するために利用されてもよい。例えば、イベントフローテーブルは、或るタスクまたは被調整デバイス１１２において発するメッセージまたはイベントデータが別のタスクまたは被調整デバイス１１２に伝送されるべきであり、コーディネータ１１４においてロギングされるべきであり、無効化されるべきであり、タスクの新たな実行をもたらすべきであるなどと指定してもよい。イベントフローテーブルは更に、指定された基準を満たすメッセージ（例えば、特定のフラグを含む、所与の識別子にアドレス指定されたなど）がサービスプロバイダ環境１２０に（例えば、デバイスシャドウサービス１４０またはオンデマンドコード実行システム１５０に）伝送されるべきであることを示してもよい。１つの実施形態では、イベントフローテーブルは、識別子として「トピック」を利用してもよく、その結果、特定のトピックと関連付けられたメッセージは、そのトピックについて指定された経路指定に従って伝送される。イベントフローテーブルは更に、メッセージのソースに基づいて、それらのメッセージをどのように経路指定するかについての情報を含んでもよい。例えば、所与のトピックにアドレス指定されたメッセージは、メッセージが第１のタスク、第２のタスク、第１の被調整デバイス１１２などから受信されるかどうかに基づいて、異なって経路指定されてもよい。イベントフローテーブルの利用によって、ルータタスク２８２は、メッセージの送信側の動作における変更なしに（例えば、メッセージを生成したタスクについてのコードを再記述することなく、メッセージを生成した被調整デバイス１１２のソフトウェアを修正することなく、など）、そのようなメッセージが異なる方式で扱われることを可能にすることができる。
【００４３】
通信マネージャタスク２８６は、通信のプロトコルに従って、コーディネータ１１４といくつかの異なる外部デバイス（例えば、被調整デバイス１０２）との間のそのような通信を可能にすることができる。例えば、第１の通信マネージャタスク２８６は、ＢＬＵＥＴＯＯＴＨ（商標）プロトコルを使用して通信を管理するように構成されてもよく、第２の通信マネージャは、ＨＴＴＰプロトコルを使用して通信を管理するように構成されてもよい、などである。いくつかの例では、複数の通信マネージャタスク２８６は、通信を実装するように集合的に作用してもよい。例えば、第１の通信マネージャタスク２８６は、ＴＣＰプロトコルを介した通信を可能にすることができ、第２の通信マネージャタスク２８６は、ＭＱＴＴプロトコル（ＴＣＰプロトコルを使用し、よって、第１の通信マネージャタスク２８６を利用することができる）を介した通信を可能にすることができる。異なる通信マネージャタスク２８６が異なるプロトコルを介して通信するようにコーディネータ１１４の能力を変化させることができることを理由に、およびコーディネータ１１４のタスクがコーディネータ１１４の再構成を介して変化してもよいことを理由に、コーディネータ１１４は、様々な異なる通信プロトコルを利用するように即時に再構成されることができる。
【００４４】
シャドウサービスタスク２８８は、コーディネータ１１４において維持されたデバイスシャドウによる管理およびデバイスシャドウとの対話を促進することができる。実例として、シャドウサービスタスク２８８は、コーディネータ１１４に対してローカルにデバイスシャドウサービス１４０によって提供される機能性と類似の機能性を実装することができる。したがって、シャドウサービスタスク２８８は、被調整デバイス１１２のシャドウ状態（所望の状態を表すデータ）を維持することができ、そのようなデータへの読み出しまたは書き込みを可能にすることができる。シャドウサービスタスク２８８は更に、被調整デバイス１１２のそのデバイスについてのデバイスシャドウとの同期を可能にすることができる。したがって、被調整デバイス１１２についてのデバイスシャドウを修正することによって、被調整デバイス１１２の状態が変化することができる。被調整デバイス１１２についてのデバイスシャドウを読み出すことによって、被調整デバイス１１２の状態が判定されることができる。いくつかの例では、シャドウサービスタスク２８８は更に、デバイスシャドウサービス１４０によって維持されたデバイスシャドウなど、所与のデバイスについての別のデバイスシャドウと共に調整してもよい。例えば、シャドウサービスタスク２８８は、ローカルデバイスシャドウをデバイスシャドウサービス１４０に記憶されたデバイスシャドウと同期してもよく、ローカルデバイスシャドウとデバイスシャドウサービス１４０に記憶されたデバイスシャドウとの間の不一致を解決してもよい、などである。
【００４５】
上記説明されたタスク（各々が、実例として、サービスプロバイダ環境１２０と関連付けられたエンティティによって提供されてもよい）に加えて、タスクメモリ空間２８０は、いずれかの数のクライアントにより提供されるタスク２９０を含んでもよく、クライアントにより提供されるタスク２９０は、クライアントデバイス１０２によって生成され、コーディネータ１１４への配置のためにサービスプロバイダ環境１２０にサブミットされた実行可能なコードに対応してもよい。そのようにして、クライアントにより提供されるタスク２９０によって提供される機能性は、サブミットするユーザの要望に従って変化してもよい。いくつかの例では、クライアントにより提供されるタスク２９０は、メモリ２５０が言語ランタイムを含むコーディング言語で記述されてもよい。例えば、コーディネータ１１４がｎｏｄｅ．ｊｓ、Ｇｏ、ＪＡＶＡ、およびＰｙｔｈｏｎなどの言語をサポートする場合、クライアントにより提供されるタスク２９０は、それらの言語のいずれかで記述された実行可能なコードを含んでもよい。
【００４６】
加えて、メモリ２５０は、コーディネータ１１４の構成データが記憶されたメモリ２５０の論理部分を表す、構成データ部２７２を含む。構成データは、例えば、コーディネータ１１４の現在の配置バージョン、タスクメモリ空間２８０のタスクによって記憶されたデータ、またはコーディネータ１１４の動作において使用される他のデータを含んでもよい。
【００４７】
コーディネータ１１４の構成（および、再構成）を可能にするために、メモリ２５０は更に、配置エージェント２５８を含む。配置エージェント２５８は、サービスプロバイダ環境１２０にコーディネータを登録し、コーディネータ１１４の所望の構成を判定し、コーディネータ１１４の現在の構成が所望の構成と一致しない例では、コーディネータ１１４についての構成データを取得し、所望の構成を実装するようにメモリ２５０を修正するように実行可能なコードに対応することができる。配置エージェント２５８の動作に関する更なる詳細は、図５および図６に関して以下で説明される。
【００４８】
図３Ａは、本出願に従った、例示的な被調整デバイス１１２Ａのアーキテクチャの１つの実施形態を表す。図３Ａに表される被調整デバイス１１２Ａの全体的なアーキテクチャは、本開示の態様を実装するために使用されてもよいコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。例示されるように、被調整デバイス１１２Ａは、プロセシングユニット３０４、ネットワークインタフェース３０６、コンピュータ可読媒体ドライブ３０７、入力／出力デバイスインタフェース３２０、任意選択のディスプレイ３０２、および入力デバイス３２４を含み、それらの全ては、通信バスによって相互に通信してもよい。実例として、被調整デバイス１１２Ａは、組み込みデバイスとして、入力または出力など、更に制限された機能性および構成要素を有してもよい。
【００４９】
ネットワークインタフェース３０６は、図１のネットワーク１０４など、１つ以上のネットワークまたはコンピューティングシステムに接続性を提供してもよい。よって、プロセシングユニット３０４は、ネットワークを介して、他のコンピューティングシステムまたはサービスから情報および命令を受信してもよい。プロセシングユニット３０４はまた、メモリ３１０におよびメモリ３１０から通信してもよく、更に、入力／出力デバイスインタフェース３２０を介して、任意選択のディスプレイ３０２に対して出力情報を提供してもよい。入力／出力デバイスインタフェース３２０はまた、キーボード、マウス、デジタルペンなどの任意選択の入力デバイス３２４から入力を受け付けてもよい。いくつかの実施形態では、被調整デバイス１１２Ａは、図３Ａに示される構成要素よりも多い（または、少ない）構成要素を含んでもよい。例えば、被調整デバイス１１２のいくつかの実施形態は、ディスプレイ３０２および入力デバイス３２４を省略してもよく、１つ以上の代替的な通信チャネルを通じて（例えば、ネットワークインタフェース３０６を介して）入力／出力能力を提供してもよい。加えて、被調整デバイス１１２Ａは、入力および出力インタフェース３２０をも完全に省略してもよい。
【００５０】
メモリ３１０は、１つ以上の実施形態を実装するために、プロセシングユニット２０４が実行するコンピュータプログラム命令を含んでもよい。メモリ３１０は一般的に、ＲＡＭ、ＲＯＭ、または他の永続的もしくは非一時的メモリを含む。メモリ３１０は、被調整デバイス１１２Ａの全体的な管理および動作においてプロセシングユニット３０４による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム３１４を記憶してもよい。メモリ３１０は更に、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含んでもよい。例えば、１つの実施形態では、メモリ３１０は、コンテンツにアクセスするためのブラウザアプリケーションアプリケーション３１６を含む。実例として、ブラウザアプリケーション３１６は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を包含してもよく、または単純に、データ接続性を提供するソフトウェアアプリケーション（もしくは、実行可能命令）であってもよい。
【００５１】
図３Ｂは、本出願に従った、例示的な被調整デバイス１１２Ｂの代替的なアーキテクチャの１つの実施形態を表す。図３Ｂに表される被調整デバイス１１２Ｂの全体的なアーキテクチャは、本開示の態様を実装するために使用されてもよいコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。しかしながら、被調整デバイス１１２Ｂは、被調整デバイス１１２Ｂの計算機能性および動作を制限することがある削減された構成要素と関連付けられてもよい。例示されるように、被調整デバイス１１２Ｂは、通信バスと通信する、プロセシングユニット３５０およびネットワークインタフェース３５２を含む。図３Ａの被調整デバイス１１２Ａとは異なり、被調整デバイス１１２Ｂは、コンピュータ可読媒体ドライブ、入力／出力デバイスインタフェース、任意選択のディスプレイ、または入力デバイスを有さなくてもよい。
【００５２】
ネットワークインタフェース３５２は、図１のネットワーク１０４など、１つ以上のネットワークまたはコンピューティングシステムに接続性を提供してもよい。よって、プロセシングユニット３５０は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信してもよい。メモリ３５４は、１つ以上の実施形態を実装するために、プロセシングユニット３５０が実行するコンピュータプログラム命令を含んでもよい。メモリ３５４は一般的に、ＲＡＭ、ＲＯＭ、または他の永続的もしくは非一時的メモリを含む。この実施形態では、メモリ３５４は、被調整デバイス１１２Ｂの全体的な管理および動作においてプロセシングユニット３５０による使用のためのコンピュータプログラム命令を提供する完全なオペレーティングシステムを必ず記憶してもよい。むしろ、１つの実施形態では、メモリ３５４は、命令にアクセスし、命令を受信し、命令を処理するためのインタフェースソフトウェア構成要素３５６を含む。
【００５３】
図４は、本出願に従った、例示的なクライアントデバイス１０２のアーキテクチャの１つの実施形態を表す。図４に表されるクライアントデバイス１０２の全体的なアーキテクチャは、本開示の態様を実装するために使用されてもよいコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。例示されるように、クライアントデバイス１０２は、プロセシングユニット４０４、ネットワークインタフェース４０６、コンピュータ可読媒体ドライブ４０７、入力／出力デバイスインタフェース４２０、任意選択のディスプレイ４０２、および入力デバイス４２４を含み、それらの全ては、通信バスによって相互に通信してもよい。
【００５４】
ネットワークインタフェース４０６は、図１のネットワーク１０４など、１つ以上のネットワークまたはコンピューティングシステムに接続性を提供してもよい。よって、プロセシングユニット４０４は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信してもよい。プロセシングユニット４０４はまた、メモリ４１０におよびメモリ４１０から通信してもよく、更に、入力／出力デバイスインタフェース４２０を介して、任意選択のディスプレイ４０２に対して出力情報を提供してもよい。入力／出力デバイスインタフェース４２０はまた、キーボード、マウス、デジタルペンなど、任意選択の入力デバイス４２４から入力を受け付けてもよい。いくつかの実施形態では、クライアントデバイス１０２は、図４に示される構成要素よりも多い（または、少ない）構成要素を含んでもよい。例えば、被調整デバイス１１２のいくつかの実施形態は、ディスプレイ４０２および入力デバイス４２４を省略してもよく、１つ以上の代替的な通信チャネルを通じて（例えば、ネットワークインタフェース４０６を介して）入力／出力能力を提供してもよい。加えて、クライアントデバイス１０２は、入力および出力インタフェース４２０をも完全に省略してもよい。
【００５５】
メモリ４１０は、１つ以上の実施形態を実装するために、プロセシングユニット２０４が実行するコンピュータプログラム命令を含んでもよい。メモリ４１０は一般的に、ＲＡＭ、ＲＯＭ、または他の永続的もしくは非一時的メモリを含む。メモリ４１０は、クライアントデバイス１０２の全体的な管理および動作においてプロセシングユニット４０４による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム４１４を記憶してもよい。メモリ４１０は更に、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含んでもよい。例えば、１つの実施形態では、メモリ４１０は、コンテンツにアクセスするためのブラウザアプリケーションアプリケーション４１６を含む。実例として、ブラウザアプリケーション４１６は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を包含してもよく、または単純に、データ接続性を提供するソフトウェアアプリケーション（もしくは、実行可能命令）であってもよい。
【００５６】
図５を参照すると、コーディネータ１１４への構成の配置を可能にするために、デバイスシャドウサービス１３０にコーディネータ１１４を登録し、クライアントデバイス１０２Ａを介してそのような構成をサブミットするための例示的な対話が表される。図５の対話は、（１）において開始し、（１）では、コーディネータは、デバイスシャドウサービス１３０に登録通知をサブミットすると共に、コーディネータ１１４についてのデバイスシャドウをサブスクライブする要求をサブミットする。実例として、対話（１）は、コーディネータ１１４についての登録ルーチンの一部として実装されてもよく、それによって、ユーザは、デバイスシャドウサービス１５０上でユーザのアカウントにコーディネータ１１４を登録するためにコーディネータ１１４の入力（例えば、登録ボタン、スクリーン、キーボード／マウスなど）を利用する。以下で説明されるように、デバイスシャドウサービス１５０はその後、デバイスシャドウサービス１３０によって維持されたデバイスシャドウへの変更をコーディネータ１１４に通知してもよく、その結果、コーディネータ１１４の構成は、コーディネータ１１４についてのデバイスシャドウへの対応する修正によって修正されることができる。
【００５７】
（２）において、デバイスシャドウサービス１３０は、コーディネータ１１４についてのデバイスシャドウがまだ存在しない場合、そのようなシャドウを生成する。実例として、デバイスシャドウは、登録の時点のコーディネータ１１４の現在の構成バージョンなど、コーディネータ１１４についての構成バージョンを含んでもよい。
【００５８】
（３）において、クライアントデバイス１０２Ａは、コーディネータ１１４とも関連付けられたユーザの制御の下、コーディネータ１１４についての構成を生成する。いくつかの例では、構成は、クライアントデバイス１０２Ａ上で実行するソフトウェア（例えば、テキストエディタ、サービスプロバイダ環境１５０によって提供される特殊化されたアプリケーションなど）の使用によって、クライアントデバイス１０２Ａ上で完全に生成されてもよい。他の例では、構成は、クライアントデバイス１０２Ａのブラウザアプリケーション上で参照されるネットワーク表示ページを介してなど、クライアントデバイス１０２Ａと管理および配置サービス１３０との間の対話を介して生成されてもよい。
【００５９】
構成のコンテンツの例示的なテーブルは、テーブル５０２として図５に示される。テーブル５０２に示されるように、構成は、環境識別子（例えば、コーディネータ１１４が動作することを意図される被調整環境１１０の識別子）、コーディネータ識別子（例えば、シリアル番号など、コーディネータ１１４の識別子）、デバイスリスト（シリアル番号など、デバイス１１２の識別情報を含む、コーディネータ１１４によって管理されることになる被調整デバイス１１２のリスト）、シャドウリスト（デバイスリストの被調整デバイス１１２と関連付けられたデバイスシャドウのリスト）、タスクリスト（コーディネータ１１４に配置されることになるタスクのリスト）、経路指定情報（コーディネータ１１４のルータタスクによる使用のためのイベントフローテーブル）、ロギングおよび測定基準情報（コーディネータ１１４の動作に関するロギング情報についての測定基準およびロギングパラメータのリスト）、並びにセキュリティ情報（サービスプロバイダ環境１５０との通信または被調整環境１１０内での通信を安全にする際にコーディネータによって使用されることになるセキュリティ証明書など）を含んでもよい。いくつかの例では、構成の各々の値は、クライアントデバイス１０２Ａのユーザによって手動で指定されてもよい。例えば、ユーザは、コーディネータ１１４内に含まれることになるクライアントにより提供されるタスクの番号、およびコーディネータ１１４によって管理されることになるデバイス１１２の番号を指定してもよい。他の例では、１つ以上の値は、クライアントデバイス１０２Ａまたは管理および配置サービス１３０のソフトウェアを介して自動で指定されてもよい。例えば、管理および配置サービス１３０は、構成内に含まれることになるコーディネータ識別子またはシャドウリストを自動で提供してもよい。
【００６０】
（４）において、構成は、管理および配置サービス１３０にサブミットされる。実例として、サブミッションは、構成の伝送を介して（例えば、アップロードを介して）、ネットワーク表示ページのサブミッションを介して、または他の伝送機構を介して行われてもよい。（５）において、管理および配置サービス１３０は、サブミットされた構成に基づいて、コーディネータ１１４についての構成パッケージを生成する。例えば、管理および配置サービス１３０は、コーディネータ１１４への後の伝送のためのサブミットされた構成値を含むデータファイル（例えば、ＺＩＰファイル、ＸＭＬファイルなど）を生成してもよい。管理および配置サービス１３０は更に、構成をコーディネータ１１４の他の構成と区別するために、バージョン識別子を構成に割り振ってもよい。
【００６１】
（６）において、管理および配置サービス１３０は、デバイスシャドウサービス１３０に、コーディネータ１１４についてのデバイスシャドウを更新する要求を伝送する。例えば、管理および配置サービス１３０は、対話（５）において生成された構成パッケージに割り振られた構成バージョンに一致するように、コーディネータ１１４についてのデバイスシャドウの構成バージョンを修正してもよい。
【００６２】
その後、（７）において、デバイスシャドウサービス１３０は、コーディネータ１１４に、コーディネータ１１４についてのデバイスシャドウへの変更を通知する。１つの実施形態では、通知は、ＭＱＴＴプロトコルを介して、メッセージがコーディネータと関連付けられたトピックに発行されていることの通知として行われてもよい（メッセージは、更新されたデバイスを表してもよく、トピックは、デバイスシャドウに対応してもよい）。よって、コーディネータ１１４は、新たな構成パッケージがコーディネータ１１４において実装されることになるように存在することを通知されることができる。
【００６３】
図６を参照して、例示的な対話がコーディネータ１１４における構成パッケージの取り出しおよび実装のために説明される。図６の対話は、例えば、図５の対話に続いて行われてもよい。１つの実施形態では、図６の対話は、図２において説明されるように、配置エージェント２５８の実行を介して実装される。対話は、（１）において開始し、（１）では、コーディネータ１１４は、管理および配置サービス１３０から構成パッケージを要求する。実例として、構成パッケージは、コーディネータ１１４のデバイスシャドウ内で示されるように、パッケージのバージョン識別子に基づいて要求されてもよい。構成パッケージ内に含まれてもよい情報の実施例は、図５を参照して上記説明されている。（２）において、構成パッケージは、管理および配置サービス１３０からコーディネータ１１４に返却される。
【００６４】
（３）において、コーディネータ１１４は、構成パッケージ内で参照される１つ以上のタスクを判定し、どのタスクがコーディネータ１１４の機能性を実装することができるかを判定するように構成パッケージを検査する。タスクを判定することに加えて、コーディネータ１１４は、構成パッケージの有効性を検証することなど、構成パッケージに関して追加のアクションを引き受けてもよい（例えば、チェックサムデータ、デジタル署名などを検証することによって）。
【００６５】
（４）において、コーディネータ１１４は、オンデマンドコード実行環境１５０から、構成パッケージ内で参照されるタスクを取り出す。実例として、コーディネータ１１４は、コーディネータ１１４に伝送されることになる、タスクに対応するそのコード、およびタスクに関する他の情報（メタデータなど）を要求するために、各々のタスクの識別子を利用してもよい。要求されたタスクは、図２を参照して上記説明されたタスクを含んでもよく、例えば、ルータタスク２８２、通信マネージャタスク２８６、シャドウサービスタスク２８８、およびクライアントにより提供されるタスク２９０を含んでもよい。要求されたタスクは、（５）においてコーディネータ１１４に返却される。コーディネータ１１４は、実例として、タスクのチェックサムまたはデジタル署名の正当性を確認することによってなど、受信上でタスクの整合性および有効性を検証してもよい。
【００６６】
（６）において、コーディネータ１１４は、新たに取得された構成により自身を更新する。実例として、コーディネータ１１４は、そのメモリ内で、被調整デバイス１１２のリストなど、構成データのセットを更新してもよい。コーディネータ１１４は更に、新たな構成情報において参照されるように、タスクの現在のセットを新たに取得されたタスクと置き換えてもよい。１つの実施形態では、コーディネータ１１４は、リブートを実行してもよく、配置エージェント２５８は、前のタスクへの参照を新たに取得されたタスクと置き換えてもよい。別の実施形態では、コーディネータ１１４は、リブートを実行することなく、タスクを置き換えてもよい。例えば、コーディネータ１１４は、新たに受信されたタスク呼び出しを満たすために、新たに取得されたタスクを利用してもよく、それらのタスクが使用されず、または軽度に使用される時間内に、いずれかの旧タスクを中止してもよく、必要に応じて、旧タスクを新たに取得されたタスクと置き換える。よって、コーディネータは、新たに取得されたタスクに従って、新たな機能性により構成されることができる。
【００６７】
図７を参照して、被調整デバイス１１２の状態を修正するためにコーディネータ１１４利用するための例示的な対話が説明される。対話は、（１）において開始し、（１）では、被調整デバイス１１２は、コーディネータ１１４への登録、および被調整デバイス１１２についてデバイスシャドウにサブスクライブする要求を伝送する。対話（１）は、ユーザによって開始されるように（例えば、被調整デバイス１１２のユーザインタフェースの利用を介して）、例えば、被調整デバイス１１２によって実装される登録ルーチンの一部として行われてもよい。
【００６８】
（２）において、コーディネータ１１４は、被調整デバイス１１２の所望の状態を表す、被調整デバイス１１２についてのデバイスシャドウを生成する。実例として、デバイスシャドウは、登録の時点の、被調整デバイス１１２の現在の状態を最初に表してもよい。
【００６９】
（３）において、被調整環境１１０内で動作していてもよい（例えば、被調整環境１１０のＬＡＮへの接続により）、クライアントデバイス１０２Ａは、コーディネータ１１４に、所望のデバイス状態に一致するようにデバイスシャドウを修正する要求をサブミットする。要求は、例えば、クライアントデバイス１０２Ａ上で実行するアプリケーション（例えば、ブラウザ）を介してサブミットされてもよく、コーディネータ１１４によってサポートされるいずれかの数のプロトコルを介して、コーディネータ１１４に伝送されてもよい。（３）において、コーディネータ１１４は、要求を取得し、デバイス状態における要求された変更に一致するように、被調整デバイス１１２についてのデバイスシャドウを更新する。
【００７０】
（４）において、コーディネータ１１４は、被調整デバイス１１２に、対応するデバイスシャドウへの変更を通知する。実例として、コーディネータ１１４は、ＭＱＴＴプロトコルを介して、被調整デバイス１１２に、新たなメッセージ（デバイスシャドウのコンテンツ）が被調整デバイス１１２によってサブスクライブされたトピックに投稿されていることの通知を伝送してもよい（デバイスシャドウの識別子）。
【００７１】
（５）において、被調整デバイス１１２は、更新されたデバイスシャドウに一致するようにその現在の状態を更新する。例えば、被調整デバイス１１２がスイッチまたは照明バルブである場合、被調整デバイス１１２は、所望の状態に一致するようにターンオンまたはオフしてもよい。よって、デバイスシャドウの使用によって、コーディネータ１１４は、被調整デバイス１１２の動作への変更を促進することができる。
【００７２】
図８を参照して、コーディネータ１１４上でタスクを実行する呼び出しを処理するための例示的な対話が説明される。特に、図８の対話は、コーディネータ１１４のスケジューラ２５６によって引き受けられてもよく、スケジューラ２５６は、ワークアイテムタスクを実行する呼び出しを待ち行列内にエンキューし、リソースマネージャ２５４から取得されるように、コーディネータ１１４の計算リソースの状態に基づいて、処理のためのワークアイテムを待ち行列から選択する。
【００７３】
図８の対話は、（１）において開始し、（１）では、スケジューラ２５６は、「タスクＡ」として図８において指定されたタスクを実行する呼び出しを取得する。呼び出しは、例えば、タスクの識別情報（例えば、タスクに対してグローバルに一意な識別子）と共に、タスクまたはタスクの実行に関する他の情報（例えば、タスクについての実行パラメータを指定するフラグ）が渡されるパラメータを含んでもよい。いくつかの例では、呼び出しは、呼び出しを生成した別のプロセスまたはエンティティからスケジューラ２５６において直接取得されてもよい。例えば、別のプロセスまたはエンティティは、タスクを呼び出すためのスケジューラによって提供されるＡＰＩの関数を引き起こしてもよい。他の例では、呼び出しは、図２の通信マネージャ２６０など、通信マネージャを介して取得されてもよく、通信マネージャは、第１のフォーマット（例えば、ＨＴＴＰ）にある呼び出しを取得し、スケジューラ２５６に呼び出しを渡すように機能してもよい。
【００７４】
呼び出しを受信すると、スケジューラ２５６は、（２）においてワークアイテム待ち行列８０２としてグラフィカルに表される、ワークアイテム待ち行列内に呼び出しをエンキューする。図８に表されるワークアイテム待ち行列８０２は、説明の例示的な目的により簡略化されており、よって、上記説明された「タスクＡ」への呼び出しのみを含む。しかしながら、実用的な実装態様は、タスクを実行するいずれかの数の呼び出しから生じる、いずれかの数のワークアイテムを含んでもよい。
【００７５】
（３）において、スケジューラ２５６は、リソースマネージャ２５４に、コーディネータ１１４において利用可能な（または、タスクを実行する目的のために利用可能な）、利用可能なメモリの量、プロセッササイクル、ネットワーク帯域幅など、コーディネータ１１４における計算リソースの可用性に関する情報についての要求を伝送する。リソースマネージャ２５４は、（４）において、その情報を判定してもよく、（５）において、スケジューラ２５６に要求された情報を返却してもよい。いくつかの例では、リソースマネージャ２５４は、利用可能な計算リソースについてコーディネータのオペレーティングシステムをクエリすることによってなど、情報を直接収集してもよい。他の例では、リソースマネージャ２５４は、現在実装されている実行環境のセットに基づいて、利用可能な計算リソースを推論してもよい。実例として、リソースマネージャ２５４は、実行環境８１０として図８にグラフィカルに表される、実行環境のセットを維持するように構成されてもよい。各々の実行環境は、対応するタスクの実行のための環境として割り振られてもよい。例えば、コーディネータ１１４は、ルータタスク環境８１２内のルータタスクおよびシャドウサービス環境８１４内のシャドウサービスタスクの現在の実行であってもよい。ワークアイテム待ち行列８０２と同様に、実行環境８１０のグラフィカルな表示は、説明の例示的な目的により簡略化されており、実用的な実装態様は、いずれかの数のタスクと関連付けられたいずれかの数の実行環境を含んでもよい。リソースマネージャ２５４は、設定された量の計算リソースを実行環境８１０に割り当て、その量のコンピュータリソースの一部を各々の実行環境（いくつかの例では、その一部は、実行環境にわたって変化してもよい）に割り当てるように構成されてもよい。例えば、ルータタスク環境８１２は、ＲＡＭの１ギガバイトおよびプロセッササイクルの１０パーセントを割り当てられてもよく、シャドウサービスタスク環境８１４は、ＲＡＭの２ギガバイトおよびプロセッササイクルの５パーセントを割り当てられてもよい。割り当てられた計算リソースのタイプおよび量は、実施形態にわたって変化してもよい。現在の実行環境に割り当てられた計算リソースを実行環境８１０にわたって割り当てられた総リソースから差し引くことによって、リソースマネージャ２５４は、（５）において、計算リソースの可用性を判定してもよく、スケジューラ２５６にその情報を返却してもよい。いくつかの例では、リソースマネージャ２５４は、実行環境８１０の現在の状態、およびタスクが各々の実行環境内でアクティブに実行しているかどうかなど、追加の情報を返却してもよい。以下で説明されるように、この追加の情報は、ワークアイテム待ち行列８０２を処理する際に、スケジューラによって利用されてもよい。
【００７６】
（６）において、スケジューラ２５６は、存在する場合、どのワークアイテムをデキューおよび処理するかを判定するようにワークアイテム待ち行列８０２を処理する。スケジューラ２５６は、ワークアイテム待ち行列８０２を処理する際に、いずれかの数のスケジューリングアルゴリズムを利用してもよく、スケジューリングアルゴリズムを実施する際に、いくつかの入力を利用してもよい。例えば、スケジューラ２５６は、実行環境８１０と関連付けられた、ワークアイテム待ち行列８０２内の各々のワークアイテムの優先度、および現在実行しているタスクの優先度を利用してもよい。それらの優先度は、例えば、タスクへの呼び出し器、タスクの作成者、またはコーディネータ１１４の管理者によって確立されてもよい。更なる実施例として、スケジューラ２５６は、どのワークアイテムをデキューするかを判定するために計算リソースの可用性を利用してもよいと共に、待ち行列に入れられたワークアイテムを処理するために計算リソースの推定された使用量（例えば、アイテムをデキューし、ワークアイテムを介して呼び出されるタスクに実行環境を割り当て、実行環境内でタスクを実行するための計算リソースの推定された使用量）を利用してもよい。待ち行列に入れられたワークアイテムを処理するための計算リソースの推定された使用量は、例えば、タスクへの呼び出し器、タスクの作成者、またはコーディネータ１１４の管理者によって確立されてもよい。いくつかの例では、待ち行列に入れられたワークアイテムを処理するための計算リソースの推定された使用量は、ワークアイテムに対応するコードの静的または動的分析、同一または類似のワークアイテムをデキューするための履歴的な計算リソースの使用量のレビューなどを介してなど、自動で確立されてもよい。いくつかの例では、スケジューラ２５６は、ワークアイテムに対応するタスクがコーディネータ上で現在実行しているかどうかなど、追加の入力を利用してもよい。例えば、スケジューラ２５６は、設定された数の（例えば、１つ）所与のタスクの同時実行のみを可能にするように構成されてもよく、したがって、タスクの実行が実行環境８１０内で現在アクティブである場合に、タスクに対応するワークアイテムを処理することを拒否してもよい。よって、スケジューリングアルゴリズムの実装によって、スケジューラ２５６は、タスクを実行する呼び出しを取得してもよく、そのような呼び出しを処理するための順序およびタイミングを選択するために、コーディネータ１１４の状態に関する情報を利用してもよい。したがって、スケジューラ２５６は、受信された呼び出しの数が他にコーディネータ１１４の計算リソースを上回るときでさえ、呼び出しの順序通りの処理がタスクを実行することを可能にすることができる。
【００７７】
図８の対話は、コーディネータ１１４の実行環境８１０と関連付けられた単一のリソースマネージャ２５４を参照して説明される。いくつかの実施形態では、スケジューラ２５６は、それからワークアイテム待ち行列８０２上で呼び出しを処理するための計算リソースの可用性を判定するために、複数のリソースマネージャ２５４と対話してもよく、または単一のリソースマネージャ２５４は、複数のデバイス（例えば、コーディネータ１１４および１つ以上の被調整デバイス１１２）の間のリソース可用性を監視するように動作してもよい。実例として、１つ以上の被調整デバイス１１２は、タスクを実行するように構成されてもよく、被調整デバイス１１２上で計算リソースの可用性を監視し、スケジューラ２５６にその可用性を報告するために、リソースマネージャ２５４を提供してもよい（または、コーディネータ１１４によって提供されるなどのリモートリソースマネージャ２５４を利用してもよい）。スケジューラ２５６は次いで、被調整デバイス１１２上でのタスクの実行が適切であるかどうかを判定してもよい。いくつかの例では、スケジューラ２５６は、タスクを実行するための（例えば、コーディネータ１１４または１つの被調整デバイス１１２上で）実行環境についての複数の潜在的な位置の間で選択するように構成されてもよい。実例として、コーディネータ１１４は、複数のデバイス上での実行のためのタスクを分散させるために、修正されたスケジューリングアルゴリズムを利用してもよく、複数のデバイスは、例えば、タスクを実行するデバイスの能力に基づいて変化してもよい（例えば、デバイスのハードウェア、計算リソースの可用性などに従って）。いくつかの例では、複数のコーディネータ１１４（同一の被調整環境１１０内で、または異なる環境１１０にわたってのいずれか）は、分散コンピューティングアルゴリズムに従って、タスクを実行するように集合的に動作してもよい。例えば、複数のコーディネータ１１４にわたるスケジューラ２５６は、過剰な計算能力を有する発見デバイスと通信してもよく、そのようなデバイスに待ち行列に入れられたワークアイテムを分散させてもよい。したがって、図８の例示的な実施例（単一のスケジューラ２５６およびリソースマネージャ２５４を含む）は、本質的に例示的であることが意図される。
【００７８】
図９を参照して、ワークアイテム待ち行列からワークアイテムを選択し、ワークアイテムに対応するタスクを実行するための例示的な対話が説明される。図９の対話は、例えば、図８の対話に続いて行われてもよい。それらの対話は、（１）において開始し、（１）では、スケジューラ２５６は、ワークアイテム待ち行列８０２から処理のためのワークアイテムを選択する。対話（１）は、例えば、図９に関して上記議論されたように、スケジューラ２５６によって実装されるスケジューリングアルゴリズムに従って行われてもよい。図９に関する例示を目的として、スケジューラ２５６が、処理のための「タスクＡ」への呼び出しをワークアイテム待ち行列８０２から選択していることが想定される。更に、タスクＡへの呼び出しを処理するために十分な計算リソースがコーディネータ１１４に存在することが想定される。
【００７９】
（２）において、スケジューラ２５６は、リソースマネージャ２５４に、タスクＡと関連付けられた実行環境を生成する要求を伝送する。図９の説明を目的として、タスクＡと関連付けられた現在の実行環境が存在しないことが想定される。よって、リソースマネージャ２５４は、（３）において、タスクＡと関連付けられた実行環境のために必要とされるリソースのセットを判定する。リソースは、例えば、プロセッサ可用性およびメモリなど、計算リソースの一部を含んでもよい。リソースは更に、タスクＡを実行するために必要とされるランタイム８１８またはドライバおよびユーティリティ８２０などのデータリソースを含んでもよい。実例として、タスクＡが所与のプログラミング言語（例えば、Ｐｙｔｈｏｎ、ＧＯ、Ｊａｖａ、Ｊａｖａｓｃｒｉｐｔなど）で記述されたコードに対応する場合、リソースマネージャ２５４は、タスクＡの実行がそのプログラミング言語に対応するランタイムへのアクセスを必要とすると判定してもよい。タスクＡがコーディネータ１１４への物理周辺機器（特殊化された入力／出力デバイスなど）と対話し、またはそれを管理するためのコードに対応する場合、リソースマネージャ２５４は、タスクＡの実行がその物理周辺機器と関連付けられたライブラリ、ドライバ、またはユーティリティへのアクセスを必要とすると判定してもよい。１つの実施形態では、ランタイム、ドライバ、ユーティリティ、または他の依存関係は、タスク自体についてのデータ内に記憶されてもよい（例えば、タスクについてのコンテナのデータイメージ内に）。よって、実行環境８１０へのタスクのデータのプロビジョニングは、タスクに全ての必要とされる依存関係を提供するのに十分であることができる。しかしながら、個々のタスクについてのデータ内での依存関係のそのような包含は、複数のタスクが依存関係を共有する場合に不十分であることがある（例えば、複数のタスクが同一のドライバ、ライブラリ、ランタイムなどを利用する場合）。これは特に、コーディネータ１１４が、コーディネータ１１４上で実行されることになることが要望されるタスクの数と比較して、制限されたデータ記憶装置を有するときに問題となる場合がある。したがって、いくつかの実施形態では、コーディネータ１１４上のランタイム８１８、並びにドライバおよびユーティリティ８２０は、実行環境８１０とは別個のコーディネータのメモリに記憶されてもよい。ランタイム８１８、並びにドライバおよびユーティリティ８２０（または、他の依存関係）へのアクセスを可能にするために、リソースマネージャ２５４は、所与のタスクについての実行環境に、別個に記憶されるように、それらのランタイム８１８、並びにドライバおよびユーティリティ８２０（または、他の依存関係）へのアクセスを提供してもよい。異なる実行環境の間のセキュリティを維持するために、実行環境の外側へのそのようなアクセスが制限されることがある（例えば、読み出しのみ）。例えば、リソースマネージャ２５４が実行環境としてコンテナを利用する場合、コンテナは、コーディネータ１１４への必要とされる依存関係の位置への読み出しのみのマウントポイントまたはアクセス制限シンボリックリンクが提供されてもよい。よって、複数の実行環境は、所与の依存関係へのアクセスを共有してもよく、コーディネータ１１４の総データ記憶使用量は、依存関係の別個の記憶および重複した記憶に対して減少することができる。
【００８０】
いくつかの例では、複数の実行環境は、所与の依存関係への読み出しのみのアクセスを共有することを可能にされてもよく、その依存関係への局所化された修正を行う能力を維持する。例えば、コーディネータ１１４は、いくつかの例では、共通メモリ空間（例えば、コーディネータ１１４の下層のファイルシステム）への読み出しのみのアクセスおよび局所化されたメモリ空間（例えば、タスクと関連付けられた実行環境または他の記憶空間の一部）への読み出し／書き込みアクセスを提供し、実行環境に、共通メモリ空間および局所化されたメモリの組み合わされたビュー（「ユニオンマウント」）を提示するために、ユニオンマウンティング（または、ユニオンファイルシステム）を利用してもよい。特に、局所化されたメモリ空間は、「より上位の」ファイルシステムとして利用されてもよく、共通メモリ空間は、「より低位の」ファイルシステムとして利用されてもよい。そのようにして、ユニオンマウントへの書き込みは、「より上位の」局所化されたメモリ空間に関して行われてもよく、ユニオンマウントからの読み出しは、要求されたファイルがそのようなメモリ空間に存在する場合に「より上位の」局所化されたメモリ空間から行われてもよく、または要求されたファイルが局所化されたメモリ空間に存在しない場合に「より低位の」共通メモリ空間から行われてもよい。ユニオンマウントは、「より上位の」局所化されたメモリ空間にホワイトアウトデータを書き込むことによって、「より低位の」共通メモリ空間内のデータを削除する明らかな能力を提供してもよく、その結果、ユニオンマウントからのデータにアクセスする試みが失敗するが、共通メモリ空間上の下層のデータは効果的でない。この方式では、複数の実行環境は、データの共通セット（例えば、依存関係）にアクセスすることを可能にされることができ、局所化ベースでデータのその共通セットを修正および削除する明らかな能力を維持する。いくつかの例では、ユニオンマウントは、コーディネータ１１４の全てまたは実質的に全ての記憶空間に書き込む明らかな能力を提供するために利用されてもよい。例えば、ユニオンマウントは、より低位の共通メモリ空間としてルートディレクトリを利用してもよい。他の例では、ユニオンマウントは、ルートディレクトリ内のサブディレクトリ、または全ての非隠しファイルに書き込む明らかな能力など、コーディネータ１１４の全ての記憶空間よりも少なく書き込む明らかな能力を提供するために利用されてもよい。よって、実行環境に提供されるデータは、その環境の要件に従って修正されてもよい。
【００８１】
タスク（図９の実施例では、タスクＡ）についての必要とされる依存関係を判定した後、リソースマネージャ２５４は、（４）において、タスクについての実行環境を生成する。上記述べられたように、そのような実行環境は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「ｃｈｒｏｏｔ  ｊａｉｌ」もしくはＰｙｔｈｏｎ仮想環境「ｖｉｒｔｕａｌｅｎｖ」などの「サンドボックス」環境である。上記述べられたように、リソースマネージャ２５４は、タスク自体に対応するコード（例えば、コーディネータ１１４のデータ記憶装置または外部データ記憶装置から取り出されるような）、タスクによって必要とされるいずれかのランタイム８１８、並びにタスクによって必要とされるいずれかのドライバおよびユーティリティ８２０を含む、タスクを実行するために必要とされるいずれかのデータリソースを実行環境にプロビジョニングしてもよい。生成された実行環境が、タスクＡの環境８１６として図９に表される。その後、（５）において、リソースマネージャ２５４は、スケジューラ２５６に、実行環境が作成されたことを通知し、スケジューラ２５６への実行環境（つまり、タスクＡの環境８１６）を識別する。
【００８２】
スケジューラ２５６は次に、環境内でのタスクの実行を呼び出すために、実行環境についての識別情報を利用することができる。したがって、図９の対話では、スケジューラ２５６は、タスクへの初期の呼び出し内に含まれるパラメータに従ってタスクを実行するために（例えば、呼び出しがワークアイテム待ち行列８０２にエンキューされる前）、タスクＡの環境８１６に呼び出しを伝送することができる。よって、タスクＡは、そのタスクに対応するコードの機能性を実施するために、実行環境８１６内でコーディネータ１１４において実行されることができる。
【００８３】
上記述べられたように、いくつかの実施形態では、スケジューラ２５６は、待ち行列８０２のワークアイテムを処理するために、異なるデバイスにわたって複数のリソースマネージャ２５４と通信してもよく、または単一のリソースマネージャ２５４は、複数のデバイスにおいて実行環境８１０を管理するように構成されてもよい。したがって、図９の対話は、いくつかの実施形態では、そのような構成に対処するように修正されてもよい。例えば、スケジューラ２５６が複数のリソースマネージャ２５４と対話する場合、スケジューラは、それから実行環境を要求し（例えば、上記説明されたように、スケジューリングアルゴリズムに従って）、その後、適切なリソースマネージャ２５４と対話して、実行環境情報を取得するための適切なリソースマネージャ２５４を選択するように構成されてもよい。別の実施例として、スケジューラ２５４が複数のデバイスにおいて実行環境８１０を管理するリソースマネージャ２５４と対話する場合、リソースマネージャ２５４は、適切なデバイス（例えば、デバイスによって提供されるタスクおよびリソースの要件に従って選択された１つ）上で実行環境を生成し、実行環境を識別する情報を返却するように構成されてもよい。したがって、図９の対話は、被調整環境１１０の構成に従って変化してもよい。
【００８４】
図１０を参照して、オンデマンドコード実行システム上でタスクを実行する呼び出しなど、ワークアイテムの待ち行列を処理するための例示的なルーチン１０００が説明される。ルーチン１０００は、例えば、図２に示されるように、コーディネータ１１４上で実行するスケジューラ２５６によって実装されてもよい。
【００８５】
ルーチン１０００は、ブロック１００２において開始し、ブロック１００２では、スケジューラ２５６は、ワークアイテムの待ち行列を取得する。各々のワークアイテムは、例えば、コーディネータ１１４上で所与のタスクを実行する呼び出し（例えば、呼び出しにおいて指定されたパラメータに従って）に対応してもよい。実例として、ワークアイテム待ち行列は、スケジューラ２５６によって維持および管理されてもよく、その結果、コーディネータ１１４上で実行する他のタスクまたはソフトウェアは、ワークアイテムとしてタスク呼び出しをワークアイテム待ち行列上にエンキューするために、コーディネータにタスク呼び出しを渡してもよい。
【００８６】
ブロック１００４において、スケジューラ２５６は、コーディネータ１１４についての計算可用性を取得する。計算可用性は、計算リソース（プロセッサ、メモリ、帯域幅など）の可用性に関するいずれかの測定基準を含んでもよい。１つの実施形態では、計算可用性は、コーディネータ１１４のオペレーティングシステムから直接取得される。別の実施形態では、計算可用性は、リソースマネージャなど、コーディネータ１１４上で実行するアプリケーションから取得される。ブロック１００４の実装態様は、コーディネータ１１４上の実行環境の状態、それらの実行環境内で実行するタスクのセットなど、コーディネータ１１４の状態に関する他の情報を取得することも含んでもよい。
【００８７】
ブロック１００６において、スケジューラ２５６は、デキューおよび処理する１つ以上のワークアイテムを判定するために、計算リソース可用性（および、潜在的には、実行環境内で実行するタスクのセットなどの他の入力）を判定したことに従って、ワークアイテム待ち行列にスケジューリングアルゴリズムを適用する。上記議論されたように、いずれかの数のスケジューリングアルゴリズムは、ファーストインファーストアウトスケジューリング、最先デッドラインファーストスケジューリング、最短残り時間スケジューリング、固定優先度プリエンプティブスケジューリング、およびラウンドロビンスケジューリングなど、待ち行列を処理する際にスケジューラ２５６によって利用されてもよい。いくつかの例では、スケジューリングアルゴリズムは、タスクの作成者によって、コーディネータの管理者によって、呼び出しエンティティによってなど、タスクに割り振られた優先度にも少なくとも部分的に基づいてもよい。
【００８８】
ルーチン１０００の実装態様は、スケジューラ２５６が、実装されるスケジューリングアルゴリズムに従って、ワークアイテム待ち行列からワークアイテムをデキューするかどうか、およびワークアイテムに対応するタスクを実行するかどうかを判定したことに従って、ブロック１００７において変化する。スケジューラ２５６が、デキューされるべきワークアイテムがないと判定する場合（例えば、ワークアイテムによって呼び出されるタスクを実行するために十分な計算リソースが存在せず、ワークアイテムの優先度が、更に利用可能な計算リソースを作成するために、いずれかの現在実行しているタスクを中止することを保証しないことを理由に）、ルーチン１０００は、上記説明されたように、ブロック１００４に戻る。
【００８９】
例えば、ワークアイテムによって呼び出されるタスクを実行するために十分な計算リソースが存在し、またはワークアイテムの優先度が、利用可能なそのようなリソースを作成することを保証することを理由に、スケジューラ２５６が、ワークアイテムがデキューされるべきであると判定する場合（例えば、現在実行しているプロセスを構文解析することによって）、ルーチン１０００は、ブロック１００８を続け、ブロック１００８では、スケジューラ２５６は、ワークアイテムによって呼び出されるタスクを実行するための実行環境の識別情報を取得する。実例として、スケジューラ２５６は、リソースマネージャに要求を発行することによって、そのような識別情報を取得してもよく、リソースマネージャは、所与のタスクの実行に割り当てられた実行環境を識別してもよく（および、潜在的には生成する）、スケジューラ２５６に実行環境の識別情報を返却してもよい。実行環境を識別し、潜在的には生成するためにリソースマネージャによって実装されてもよい１つの例示的なルーチンは、以下で、図１１を参照して説明される。
【００９０】
ブロック１０１０において、スケジューラ２５６は、ブロック１００８において識別された実行環境に、デキューされたワークアイテムに対応するタスクを実行する呼び出しを渡す。実例として、実行環境は、呼び出されるタスクに対応するコードと共に、そのようなコードのいずれかの依存関係がプロビジョニングされてもよい（例えば、リソースマネージャのアクションにより）。よって、スケジューラ２５６は、コードを実行する実行環境への呼び出しを行ってもよく、デキューされたワークアイテムと関連付けられたいずれかのパラメータのコードを渡してもよい。よって、スケジューラ２５６は、待ち行列からのワークアイテムを処理させてもよい。
【００９１】
ルーチン１００は次いで、ブロック１０１２を続け、ブロック１０１２では、実装態様は、ワークアイテム待ち行列の状態に従って変化してもよい。例えば、待ち行列内に更なるワークアイテムが存在する場合、ルーチン１０００は、上記説明されたように、ブロック１００４に戻ってもよい。待ち行列内に更なるワークアイテムが存在しない場合、ルーチン１０００は、ブロック１０１４において終了してもよい。
【００９２】
例示的な目的により、ルーチン１０００の１つの可能な実装態様が説明されるが、当業者は、このルーチン１０００に対する変形が可能であることを認識するであろう。例えば、いくつかの例では、ルーチン１０００は、連続ループとして実装されてもよく、その結果、それは、スケジューラ２５６が動作している限り実行する。別の実施例として、ルーチンの様々な部分は、全体的にもしくは部分的に並列して稼働してもよく、または複数の別個のルーチンとして稼働してもよい。実例として、第１のルーチンは、リソース可用性を連続して取得するように動作してもよく、第２のルーチンは、スケジューリングアルゴリズムを介して、ワークアイテム待ち行列に現在既知のリソース可用性を適用し、第３のルーチンは、デキューされたワークアイテムのデキューおよび処理を実装する（例えば、実行環境を取得し、そのような実行環境に呼び出しを渡す）。よって、ルーチン１０００のブロックは、本質的に例示であることが意図される。
【００９３】
図１１を参照して、タスクを実行するための実行環境を識別し、潜在的に作成するための１つの例示的なルーチン１１００が説明される。ルーチン１１００は、例えば、コーディネータ１１４により実行されるリソースマネージャ２５４によって実施されてもよい。
【００９４】
ルーチン１１００は、ブロック１１０２において開始し、ブロック１１０２では、リソースマネージャ２５４は、タスクを実行するための実行環境についての要求を取得する。要求は、例えば、図１０を参照して上記説明されたなど、ワークアイテム待ち行列の処理に従ってスケジューラから取得されてもよい。
【００９５】
ブロック１１０４において、リソースマネージャ２５４は、実行環境にプロビジョニングされることになるリソースのセットを判定する。リソースは、例えば、計算リソース（例えば、プロセッサ使用量、メモリ、帯域幅など）と共に、ランタイム、ドライバ、ライブラリ、または他の依存関係などのデータリソースを含んでもよい。リソースのセットは、例えば、実行環境内で実行することを意図されたタスクに関する情報に基づいて判定されてもよい。例えば、リソースマネージャ２５４は、タスクの実行のために必要とされるリソースのセット（例えば、タスクの作成者、コーディネータの管理者、タスクを実行する呼び出しのパラメータによって定義されるような）を判定してもよく、実行環境のために必要とされるリソースとしてリソースのセットを識別してもよい。
【００９６】
ブロック１１０４において、リソースマネージャ２５４は、既存の実行環境が利用のために利用可能であるかどうかを判定する。１つの実施形態では、リソースマネージャ２５４は、環境がタスクの実行に以前に割り振られていたときのみ、そのタスクの実行のために既存の実行環境を利用してもよい。別の実施形態では、リソースマネージャ２５４は、環境が類似のタスクの（例えば、セキュリティカテゴリなど、タスクの同一のカテゴリ内の）実行に以前に割り振られていたとき、または環境がブロック１１０４において判定されることが必要ともされるリソースを以前にプロビジョニングされていたとき、既存の実行環境を利用してもよい。
【００９７】
既存の環境が利用可能である場合、ルーチン１１００は、ブロック１１０６に進み、ブロック１１０６では、リソースマネージャ２５４は、新たなタスク実行について環境を準備するように、必要に応じて既存の実行環境を更新する。実例として、ブロック１１０４において必要とされるリソースが、実行環境に現在プロビジョニングされているリソースと一致しない場合、リソースマネージャ２５４は、環境に追加で必要とされるリソースをプロビジョニングしてもよい（および、潜在的に、使用されていないドライバ、ユーティリティ、ライブラリなど、必要とされていないリソースへのアクセスを除去する）。リソースマネージャ２５４は更に、前のタスクの間に実行環境への変更が後続の実行に影響を与えないことを保証するために、実行環境をリフレッシュまたは「消去」してもよい。例えば、リソースマネージャ２５４は、実行環境内で環境変数を消去してもよく、または実行環境と関連付けられたデータキャッシュもしくは一時ファイルディレクトリを消去してもよい。その後、ルーチン１１００は、ブロック１１１４に進み、ブロック１１１４では、実行環境１１４の識別情報（例えば、名前、ロケータなど）は、要求に応答してスケジューラなどに返却される。ルーチン１１００は次いで、ブロック１１１６において終了する。
【００９８】
ブロック１１０４に戻り、既存の実行環境が利用可能でない場合、ルーチン１１００は、ブロック１１０８に進み、ブロック１１０８では、リソースマネージャ２５４は、新たな実行環境を生成するためにリソースの再要求が必要とされるかどうかを判定する。実例として、ブロック１１０４において判定された、必要とされるコンピュータリソースが、コーディネータの利用可能な計算リソースを上回る場合、リソースマネージャ２５４は、既存の実行環境を中止または休止することによって、計算リソースが再要求されるべきであると判定してもよい。そのような例では、ルーチン１１００は、ブロック１１１０に進み、ブロック１１１０では、リソースマネージャ２５４は、別のアクティブな実行環境を中止する。例えば、リソースマネージャ２５４は、他のアクティブな実行環境内で実行するスレッドへの呼び出しまたは中断を渡してもよく、実行環境が休止されることを示す。そのような呼び出しまたは中断は、スレッドにその状態を保存させてもよく、その結果、スレッドは、後の時間点において（例えば、計算リソース可用性が増大するとき）再開されることができる。他の例では、リソースマネージャ２５４は、他の実行環境の状態を保存するように動作してもよい。１つの実施形態では、他の実行環境の状態は、実行環境のスナップショットイメージを取ることによってなど、コーディネータのメモリに保存されてもよい。別の実施形態では、他の実行環境の状態は、デバイスシャドウを介して保存されてもよい。実例として、他の実行環境内で実行するタスクは、コーディネータによって「デバイス」と考えられてもよく、デバイスシャドウと関連付けられてもよい。実行の環境および実行の位置内の変数の現在の値など、他の実行環境の状態は、デバイスシャドウに保存されてもよい。よって、他の実行環境内で実行するタスクは、デバイスシャドウおよび保存された値を参照することによって再開されてもよい。デバイスシャドウの使用は、上記参照によって組み込まれた、「７００出願」において更に詳細に説明される。
【００９９】
別の実行環境を中止することによって、リソースマネージャ２５４は、新たに生成された実行環境による使用のための計算リソースを再要求してもよい。ルーチン１１１０は次いで、ブロック１００８に戻り、ブロック１００８では、追加のリソースが再要求されるべきかどうかが判定される。ルーチン１１００は次いで、再要求されるべき追加のリソースがなくなるまで（例えば、新たな実行環境に割り振る十分なリソースが存在するまで）、ブロック１１０８とブロック１１１０との間のループを続けてもよい。ルーチン１１００は次いで、ブロック１１１２に進む。
【０１００】
ブロック１１１２において、リソースマネージャ２５４は、ブロック１１０４において判定されたような、必要とされるリソースに基づいて新たな実行環境を生成する。上記述べられたように、実行環境は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「ｃｈｒｏｏｔ  ｊａｉｌ」もしくはＰｙｔｈｏｎ仮想環境「ｖｉｒｔｕａｌｅｎｖ」などの「サンドボックス」環境など、タスクの実行に割り当てられたメモリのいずれかの論理部分を含むことができる。よって、ブロック１１０４において、リソースマネージャ２５４は、タスクの実行にメモリの部分を指定し、必要とされるリソースと共にメモリのその部分を割り当てることによって、そのような実行環境を生成してもよい。実例として、リソースマネージャ２５４は、実行環境の外側にあるデータリソースへのアクセスを提供されるように（例えば、外部データリソースに指し示す実行環境内で読み出しのみのマウントポイントを配置することによって）、実行環境にデータリソースを複製し、または実行環境を修正することによってなど、実行環境に必要とされるデータリソースをプロビジョニングしてもよい。
【０１０１】
その後、ルーチン１１１０は、ブロック１１１４に進み、ブロック１１１４では、リソースマネージャ２５４は、スケジューラなどの要求するエンティティに、リソース環境の識別情報を返却する。ルーチン１１１０は次いで、ブロック１１１６において終了する。
【０１０２】
図１２を参照して、コーディネータ１１４上での第１のタスク実行が第２のタスク実行を呼び出すことを可能にするために通信マネージャ２６０の利用のための例示的な対話のセットが説明される。対話は、例えば、第１のタスクの実行が、被調整環境１１０の状態が所与の条件を満たすことを検出することを可能にし、その条件に応答してアクションを取る（例えば、照明などの被調整デバイス１１２にメッセージを伝送し、時刻、テナントの出発を検出したことに応答して状態を変更する、など）、第２のタスクの実行を呼び出すことを可能にするように行われてもよい。上記述べられたように、それらのタスク内通信を促進するための通信マネージャ２６０の使用は、非同期通信をロバストに扱うことをもたらす際、並びにタスク内通信または呼び出し内での様々なプロトコルおよび異なるプロトコルの使用がタスクを実行することを可能にするために有益となることができる。
【０１０３】
対話は、（１）において開始し、（１）では、図１２におけるタスクＡ  １２０２として記される、第１のタスクは、コーディネータ１１４上でタスクの実行を呼び出す呼び出しメッセージを生成する。呼び出しメッセージは、通信マネージャによってサポートされるいずれかのフォーマットにあってもよく、例えば、タスク実行に渡されることになるパラメータまたは要求された実行に関するメタデータ（実行に割り振るための優先度など）を指定してもよい。１つの実施形態では、呼び出しメッセージは、ＨＴＴＰ要求メッセージである。いくつかの例では、呼び出しメッセージは、タスクに対する一意な識別子を介してなど、呼び出されることになるタスクを指定してもよい。他の例では、呼び出されることになるタスクは、メッセージ自体のコンテンツを介してではなく、呼び出しメッセージについての宛先（例えば、メッセージが伝送されるＵＲＩ）の使用によって指定されてもよい。メッセージによって使用される要求メソッドは、メッセージに関して引き受けられることになる所望のアクションを指定してもよい。例えば、ＨＴＴＰ  ＰＯＳＴ要求は、タスクの実行を要求するために利用されてもよく、他の要求メソッドは、他の機能性と関連付けられてもよい（例えば、ＨＴＴＰ  ＧＥＴ要求は、図１３を参照して以下で説明されるように、タスクからの出力を要求するために利用されてもよい）。実例として、タスクＡ  １２０２における呼び出しメッセージの生成は、タスクＡ  １２０２のライブラリまたは他のコード依存関係への呼び出しを少なくとも部分的に介して促進されてもよく、タスクＡ  １２０２は、（例えば、コーディネータ１１４のプロバイダとは異なってもよい、コーディネータ１１４のエンドユーザ、タスクＡ  １２０２の作成者などとは反対に）コーディネータ１１４のプロバイダによって作成されてもよい。例えば、タスクＡ  １２０２は、ソフトウェア開発キットを使用して生成されてもよく、ソフトウェア開発キットは、タスクＡ  １２０２に、呼び出されるとき、通信マネージャ２６０への伝送のための呼び出しメッセージを生成する「タスク実行」関数を提供するライブラリを含ませる。
【０１０４】
（２）において、タスクＡ  １２０２は、通信マネージャ２６０と関連付けられたＵＲＩに呼び出しメッセージを伝送する。実例として、通信マネージャ２６０は、コーディネータ１１４の指定されたポート上で要求をリスンするＨＴＴＰサーバを実装してもよく、タスクＡ  １２０２は、コーディネータ１１４のネットワークアドレスまたはドメインネームを含むＵＲＩと共に、指定されたポート（例えば、「ｌｏｃａｌｈｏｓｔ：８８８８」）に呼び出しメッセージを伝送してもよい。いくつかの例では、ＵＲＩは更に、呼び出されることになるタスクの識別情報を含んでもよい。例えば、コーディネータ１１４上の各々のタスクは、コーディネータ１１４上の異なるリソースパスと関連付けられてもよく、その結果、タスクＡ  １２０２は、パス「／ｔａｓｋ＿ａ」と関連付けられ、タスクＢは、パス「／ｔａｓｋ＿ｂ」と関連付けられる、などである。よって、呼び出されるタスクと関連付けられたパスに呼び出しメッセージを伝送することによって、通信マネージャ２６０は、呼び出されるタスクを通知されることができる。図１２の例示的な実施例では、タスクＡ  １２０２の実行がタスクＢの実行を呼び出すことを要望すると想定される。よって、タスクＡ  １２０２の実行は、「ｌｏｃａｌｈｏｓｔ：８８８８／ｔａｓｋ＿ｂ」など、タスクＢと関連付けられたＵＲＩに呼び出しメッセージを伝送してもよい。上記述べられたように、呼び出しを伝送するために使用される要求メソッドは、呼び出されるタスクに関する所望のアクションを指定してもよい。例えば、タスクと関連付けられたＵＲＩへの「ＰＯＳＴ」メソッド要求は、タスクの実行を開始する（例えば、要求内に含まれるパラメータまたはメタデータに従って）要望を示してもよい。
【０１０５】
（３）において、呼び出しメッセージを受信すると、通信マネージャ２６０は、呼び出しメッセージに対応する呼び出されるタスクを識別する。実例として、通信マネージャ２６０は、呼び出しメッセージのパスまたはＵＲＩ（例えば、「ｌｏｃａｌｈｏｓｔ：８８８８／ｔａｓｋ＿ｂ」または「／ｔａｓｋ＿ｂ」）をコーディネータ１１４上のタスクの対応する識別子（例えば、スケジューラ２５６によって利用されるような、タスクに対応する名前「タスクＢ」または一意な識別子）と関連付けるマッピングまたは他の情報を維持してもよい。その後、（４）において、通信マネージャ２６０は、呼び出しメッセージのコンテンツに従って（例えば、呼び出しメッセージ内に含まれる実行パラメータまたはメタデータを指定する、呼び出しメッセージに含まれるパラメータを有する）、識別されたタスクへの呼び出しを生成することができる。通信マネージャ２６０は次いで、スケジューラ２５６に、ワークアイテム待ち行列８００に配置するためのタスク呼び出しを伝送することができる。スケジューラ２５６は次いで、例えば、図８および図９の対話に従って、呼び出されるタスクの実行を生じさせてもよい。実例として、通信マネージャ２６０は、プログラムインタフェース（例えば、ＡＰＩ）の使用によって、タスク呼び出しを生成し、スケジューラ２５６に伝送してもよい。例えば、通信マネージャ２６０は、スケジューラ２５６にタスク呼び出しを渡すコードに対応する関数を呼び出してもよく、関数のパラメータは、タスク実行に渡されることになるパラメータ、呼び出しを扱うためのパラメータ（例えば、優先度レベル）などを指定する。いくつかの例では、生成された呼び出しは、呼び出しに対応するタスク実行を追跡するために使用可能な、実行識別子を含んでもよい。実行識別子は、例えば、図１３に関して以下で議論されるように、呼び出しに割り振られ、呼び出しに対応するタスク実行の出力または結果を報告するために使用可能な（例えば）一意な番号または英数字文字列に対応してもよい。１つの実施形態では、実行識別子は、通信マネージャ２６０によって呼び出しに割り振られる。別の実施形態では、実行識別子は、タスクＡ  １２０２などの呼び出しタスクによって呼び出しに割り振られる。
【０１０６】
（６）において、通信マネージャ２６０は更に、呼び出しタスク、タスクＡ  １２０２に確認応答を返却してもよい。確認応答は、例えば、呼び出しメッセージが通信マネージャ２６０によって受信され、通信マネージャ２６０によって成功して処理されており、よって、タスクを実行する呼び出しがスケジューラ２５６に伝送されており、ワークアイテム待ち行列８００に配置されたことを示すことができる。他の例では、確認応答は、通信マネージャ２６０によってメッセージを扱う際、またはスケジューラ２５６によってメッセージを扱う際、メッセージ内のエラーを検出することなど、呼び出しメッセージの処理に成功していないことを示してもよい。確認応答メッセージは更に、呼び出しメッセージに対応する実行識別子を含むことができる（実行識別子が通信マネージャ２６０によって割り振られている例では）。
【０１０７】
例示的な対話が図１２に関して説明されているが、本開示の実施形態は、追加のまたは代替的な対話を含んでもよい。例えば、通信マネージャ２６０は、いくつかの例では、いくつかの既知の認証メッセージのいずれかに従って呼び出しメッセージを認証することによってなど、呼び出しメッセージの正当性を確認してもよい。上記述べられたように、いくつかの実施形態では、通信マネージャ２６０は、複数のプロトコル（または、同一のプロトコルの複数のバージョン）に従って、呼び出しメッセージの伝送を可能にすることができる。更に、通信マネージャ２６０は、いくつかの例では、本分野では「ＨＴＴＰＳ」と称される、ＨＴＴＰオーバセキュアソケットレイヤ（ＳＳＬ）／トランスポートレイヤセキュリティ（ＴＬＳ）の実装によってなど、呼び出しメッセージまたは他の情報のセキュア伝送を可能にすることができる。
【０１０８】
第１のタスク実行が第２のタスク実行の要求を伝送することを可能にすることに加え、第１のタスク実行が第２のタスク実行の結果または出力を取得することを可能にすることが有益である場合がある。例えば、第１のタスクの実行は、被調整デバイス１１２と対話し、そのデバイス１１２の状態を取得するタスクなど、第２のタスクの実行への呼び出しを伝送することができる。したがって、第１のタスクの実行は、第２のタスクの実行からデバイス１１２の状態を受信することからの利点を受けることがある。上記議論された図１２の対話にあるように、タスク実行の間のデータの伝送は、非同期実行と関連付けられた言語または遅延の間の不一致などの問題を生じさせることがある。よって、通信マネージャ２６０は更に、タスクの出力または結果（例えば、第２のタスクの実行）が呼び出しタスク（例えば、第１のタスクの実行）に提供されることを可能にすることができる。
【０１０９】
タスク実行の出力または結果を提供するために通信マネージャ２６０の使用のための対話が図１３を参照して説明される。特に、図１３の対話は、図１３のタスクＢ  １２０４として識別されたタスク実行が、図１３のタスクＡ  １２０２として識別された呼び出しタスク実行に実行の出力または結果を報告することを可能にすることができる。いくつかの例では、図１３の対話は、タスクＡ  １２０２によって、タスクＢ  １２０４を実行する要求の伝送に続いて行われてもよい。図１３の例示的な実施例では、対話の１つの潜在的な順序付けは、例示を目的に表され、その例示では、タスクＡ  １２０２は、通信マネージャ２６０において出力が受信される前に、通信マネージャ２６０に、タスクＢ  １２０４から出力を取得する要求を伝送する。対話のこの順序付けは、例えば、タスクＡ  １２０２および通信マネージャ２６０がＨＴＴＰ「ロングポーリング」技術を利用し、それによって、タスクＡ  １２０２が即刻な応答を必要とすることなく通信マネージャ２６０とのＨＴＴＰ接続を開始し、その結果、通信マネージャ２６０がタスクＡ  １２０２に新たな情報（例えば、タスクＢ  １２０４の出力）を通知するために既存のＨＴＴＰ接続を使用することができる場合に行われてもよい。対話の他の順序付けが可能である。例えば、タスクＡ  １２０２は、通信マネージャ２６０がタスクＢ  １２０４の出力を取得した後、通信マネージャ２６０にその出力を取得する要求を伝送してもよく、その例では、通信マネージャ２６０は、要求に即刻で応答してもよい。更なる実施例として、通信マネージャ２６０は、いくつかの実施形態では、タスクＡ  １２０２が通信マネージャ２６０との接続を開始することを必要とすることなく、タスクＡ  １２０２にタスクＢ  １２０４の出力を通知するために、「プッシュ」通信機構を利用してもよい。よって、図１３に表される順序付けは、本質的に例示的であることが意図される。
【０１１０】
（２）において、タスクＡ  １２０２は、通信マネージャ２６０に応答要求メッセージを伝送する。実例として、応答要求メッセージがＨＴＴＰメッセージである場合、メッセージは、通信マネージャ２６０と関連付けられたＵＲＩ（例えば、「ｌｏｃａｌｈｏｓｔ：８８８８」）に伝送されてもよい。いくつかの例では、応答要求メッセージは、タスク実行を識別する実行識別子を含んでもよく、タスク実行から出力が検索される。例えば、応答要求メッセージは、タスクと関連付けられたＵＲＩにアドレス指定されたＨＴＴＰメッセージ内にヘッダとして実行識別子を含めてもよく、タスクから出力が要求される。他の例では、メッセージが伝送されるＵＲＩは、ＵＲＩ内にパスの一部として実行識別子を含めてもよい。例えば、実行識別子「１」に対応するタスク実行の出力についての要求は、実行識別子がコーディネータ１１４においてタスクにわたって一意である、「ｈｔｔｐ：／／ｌｏｃａｌｈｏｓｔ：８８８８／１」に伝送されてもよい。実行識別子がタスクにわたって一意でない場合、または他にそれが望ましいとき、それから出力が要求されるタスクの識別子も、ＵＲＩのパス内に含まれてもよい。例えば、「タスクＢ」の実行「１」の出力についての要求は、「ｈｔｔｐ：／／ｌｏｃａｌｈｏｓｔ：８８８８／ｔａｓｋ＿ｂ／１」に伝送されてもよい。要求は、実例として、要求のタイムアウト期間など、通信マネージャ２６０において要求を処理するためのパラメータを含むことができ、その結果、通信マネージャ２６０がタイムアウト期間期間内に応答を取得しない場合、エラーメッセージがタスクＡ  １２０２に返却される。いくつかの例では、要求は、通信マネージャ２６０が、タスクＢ  １２０４の出力が指定された基準（例えば、絶対値、閾値、値範囲など）に従うときのみタスクＡ  １２０２に通知するなど、要求に応答してタスクＡ  １２０２に情報をいつ返却するべきか、および返却するべきかどうかを指定する基準を含んでもよい。上記述べられたように、応答要求メッセージの伝送は、ＨＴＴＰロングポーリング技術に従って行われてもよく、その結果、タスクＡ  １２０２と通信マネージャ２６０との間の接続は、通信マネージャ２６０がメッセージに即刻で応答することを必要とすることなく維持される。
【０１１１】
図１３の例示的な実施例では、（３）において、タスクＢ  １２０４は出力を生成する。出力は、タスクＢ  １２０４に渡された入力を処理した結果としてなど（例えば、タスクＢ  １２０４を実行する呼び出しの一部として）、タスクＢ  １２０４に対応するコードの実行により生成されたいずれかのデータ、タスクＢ  １２０４（例えば、タスクＢ  １２０４は、被調整デバイス１１２と対話するコードに対応する）の実行の間に被調整デバイス１１２から取得されたデータなどであってもよい。（４）において、出力は、タスクＢ  １２０４の実行に割り振られた実行識別子を使用して、通信マネージャ２６０に伝送される。実例として、出力は、出力を含むコンテンツと共に、ＨＴＴＰ  ＰＯＳＴメソッドを利用するＨＴＴＰ要求としてタスクＢに伝送されてもよい。１つの実施形態では、要求は、出力を生成するタスクに対応する実行識別子を含んでもよい（例えば、要求へのヘッダとして）。要求は、対話（２）に関して上記議論されたＵＲＩ（例えば、「ｈｔｔｐ：／／ｌｏｃａｌｈｏｓｔ：８８８８／１」または「ｈｔｔｐ：／／ｌｏｃａｌｈｏｓｔ：８８８８／ｔａｓｋ＿ｂ」）に一致してもよい、実行識別子および／またはタスクＢ  １２０４と関連付けられたＵＲＩに伝送されてもよい。
【０１１２】
（５）において、通信マネージャ２６０は、タスクＢ  １２０４によって提供される出力をタスクＡ  １２０２によって伝送された要求メッセージに、両方のメッセージが共通ＵＲＩに伝送されること、および共通実行識別子を含む（例えば、ＵＲＩ内またはヘッダフィールド内に）ことを検出することによってなどで一致させる。（６）において、通信マネージャは、タスクＢ  １２０４によって提供される出力を含む、タスクＡ  １２０２の要求メッセージへの応答を生成する。図１３に表される実施形態では、対話（２）において伝送された応答要求メッセージがＨＴＴＰロングポーリング技術の実装を表す場合、対話（６）において生成された応答は、対話（２）の要求メッセージへの応答であってもよい。他の実施形態では、対話（６）は、独立して伝送されたメッセージ（例えば、タスクＡ  １２０２への「プッシュ」メッセージ）の生成を含んでもよい。
【０１１３】
（７）において、タスクＢ  １２０４の出力を含む、通信マネージャ２０６において生成された応答は、タスクＡ  １２０２に伝送される。したがって、タスクＡ  １２０２は、タスクＢ  １２０４によって生成された出力を取得してもよく、タスク内通信が可能にされることができる。上記説明を考慮して認識されるように、タスク内通信を可能にするための通信マネージャ２６０の使用は、いくつかの利点を含むことができる。例えば、各々のタスク（例えば、タスクＡ  １２０２およびタスクＢ  １２０４）は、異なるプロトコル、または同一のプロトコルの異なるバージョンを介して、通信マネージャ２６０と通信してもよい。その上、図１３に表されるタスク内通信は、各々の言語が通信マネージャ２６０によってサポートされるプロトコルを実装することができる限り、タスクの特定の言語に依存せず、異なる言語で記述されたタスクの間にあってもよい。加えて、通信マネージャ２６０の機能性は、タスク内通信のコンテンツ（例えば、メッセージ本文）に依存しないが、通信が伝送されるアドレスまたは通信と関連付けられたヘッダ値に基づいてのみ動作することが可能であってもよい。このようにして、タスクは、通信マネージャ２６０の機能性を変える必要なく、いずれかのフォーマットのデータを伝送することを可能にされてもよい。また更に、本明細書で説明される通信マネージャ２６０は、タスクの代わりに様々な機能性を実装することができ、その結果、それらのタスクは、それらの機能性自体を実装する必要がない。例えば、通信マネージャ２０６は、１つ以上のタスクとの通信を認証してもよく、タスクからの要求の正当性を確認してもよく、要求に関するタイムアウトまたはエラー制御を実装してもよい（例えば、ロバストな非同期呼び出しを可能にするために）。いくつかの例では、通信マネージャ２６０は、タスクが通信を受信および処理することを保証するために、タスクとの失敗した通信を再送信することによってなど、「サービス品質」保証を実装してもよい。よって、通信マネージャ２６０は、個々のタスク実行の間の直接通信よりも大きな利点をもたらす。
【０１１４】
図１４を参照して、例示的なクロスタスク通信ルーチン１４００が説明される。ルーチン１４００は、例えば、通信マネージャ２６０によって、コーディネータ１１４上のタスクの実行の間の通信を可能にするために実装されてもよい。
【０１１５】
ルーチン１４００は、ブロック１４０２において開始し、ブロック１４０２では、通信マネージャ２６０は、タスクと関連付けられたＵＲＩにアドレス指定された呼び出しメッセージを取得する。実例として、呼び出しメッセージは、コーディネータ１１４のドメインネーム、通信マネージャ２６０によって実装されたＨＴＴＰサーバと関連付けられたポート、および呼び出されるタスクと関連付けられたパス（例えば、「ｈｔｔｐ：／／＜ｄｏｍａｉｎ＞：＜ｐｏｒｔ＞／＜ｐａｔｈ＞」のフォーマットにある）を含む、ＵＲＩへのＨＴＴＰ  ＰＯＳＴ要求であってもよい。ブロック１４０３において、通信マネージャ２６０は、呼び出しタスク、呼び出しに対応する実行の出力または結果など、呼び出しエンティティに返却するために利用されることができる（以下で説明されるように）、呼び出しと関連付けられることになる実行識別子を取得する。１つの実施形態では、実行識別子は、呼び出しメッセージ内で伝送される（例えば、ＰＯＳＴ要求のコンテンツとして）。別の実施形態では、実行識別子は、通信マネージャ２６０によって呼び出しに割り振られ、呼び出しエンティティに返却されてもよい（例えば、ＰＯＳＴ要求への確認応答または応答の一部として）。
【０１１６】
ブロック１４０４において、通信マネージャ２６０は、呼び出しメッセージが伝送されたＵＲＩに基づいて、呼び出しメッセージに応答して呼び出されることになるタスクを判定する。例えば、通信マネージャ２６０は、ＵＲＩのパス（例えば、「／ｔａｓｋ＿ｉｄｅｎｔｉｆｉｅｒ」）を、コーディネータ１１４において維持された特定のタスク（例えば、「タスクＸ」）に関連付けるマッピングまたは他の情報を維持してもよい。よって、呼び出しメッセージが伝送されたパスを検査することによって、通信マネージャ２６０は、呼び出しメッセージに応答して、呼び出しへのタスクを判定してもよい。
【０１１７】
ブロック１４０６において、通信マネージャ２６０は、ブロック１４０４において識別されたタスクを実行する呼び出しを生成し、コーディネータ１１４のスケジューラ（上記議論されたように、ワークアイテム待ち行列に従って、呼び出しをエンキューし、呼び出されるタスクの実行を生じさせるように機能してもよい）に呼び出しを伝送する。実例として、呼び出しは、タスクの実行に渡されることになるパラメータ、またはタスクがどのように実行されるべきかに関するパラメータ（例えば、実行に割り振るための優先度）を含んでもよい。そのようなパラメータは、例えば、ブロック１４０２において取得された呼び出しメッセージから取得されてもよい。呼び出しは更に、ブロック１４０３において取得されるような、呼び出しと関連付けられた実行識別子を含むことができ、その結果、呼び出しによって開始されるタスク実行は、実行識別子を参照することによって、通信マネージャ２６０に呼び出しの結果を報告することができる。
【０１１８】
ブロック１４０８において、通信マネージャ２６０は、実行識別子を参照して、呼び出しに対応するタスクの実行に関する出力または他のデータを取得する。実例として、出力は、通信マネージャ２６０に対応するサーバに、実行識別子を含むパスにアドレス指定され、出力に対応するコンテンツを含む、ＨＴＴＰ  ＰＯＳＴメッセージとして伝送されてもよい。別の実施形態では、出力は、実行識別子を含むコンテンツと共に、ＨＴＴＰ  ＰＯＳＴメッセージとして伝送されてもよい。
【０１１９】
ブロック１４１０において、通信マネージャ２６０は、呼び出しメッセージのソースに出力を返却する。１つの実施形態では、通信マネージャ２６０は、出力についての要求への応答としてその出力を返却してもよく、要求は、実行識別子を含む。例えば、通信マネージャ２６０は、実行識別子を含むＵＲＩに伝送されたＨＴＴＰ  ＧＥＴメソッドメッセージへの応答として出力を返却してもよい。別の実施形態では、通信マネージャ２６０は、それから呼び出しメッセージが受信されたエンティティに出力を独立して伝送してもよい（例えば、「プッシュ」通知として）。呼び出しメッセージのソースへの返却が図１４において説明されるが、通信マネージャ２６０は、加えてまたは代わりに、別の宛先に出力を返却してもよい。例えば、通信マネージャ２６０において受信された呼び出しメッセージまたは別の通信（例えば、実行識別子を参照する別の通信）は、実行識別子に対応する出力についての代替的な宛先を指定してもよく、ルーチン１４００は、その代替的な宛先に出力を返却することを含んでもよい。実例として、代替的な宛先の使用は、タスクの間で出力を再経路指定することを可能にすることができる。例えば、第１のタスクは、第２のタスクの実行を呼び出してもよく、第２のタスクにパラメータとして前に確立された実行識別子（例えば、第３のタスクの実行に対応する）を渡してもよい。第２のタスクは次いで、第２のタスクが元々第３のタスクの実行を引き起こすことに関与していなかった場合でさえ、第３のタスクの出力を取得するために実行識別子を利用してもよい。よって、呼び出しメッセージのソースへの出力の返却は、単純に出力についての１つの可能な宛先である。出力を返却した後、ルーチン１４００は、ブロック１４１２において終了してもよい。
【０１２０】
図１５を参照して、オンデマンドコード実行環境１５０上のタスク実行とコーディネータ１１４上で実行する（または、実行されることになる）タスクとの間のタスク内通信を可能にするための例示的な対話が表される。上記議論されたように、いくつかの例では（および、或る構成の下では）、オンデマンドコード実行環境１５０において実行するタスクがコーディネータ１１４と通信することは困難である場合がある。例えば、コーディネータ１１４は、公然にアドレス指定可能なネットワークと関連付けられなくてもよく、被調整環境１２０の外側からのコーディネータ１１４への通信の確立を制限するセキュリティポリシの影響を受けることがあり、またはオンデマンドコード実行環境１５０との信頼できる通信を維持しないことがある（例えば、オンデマンドコード実行環境１５０と通信する際に、高ネットワーク待ち時間または伝送エラーの影響を受けることがある）。そのような問題に対処するために、コーディネータ１１４は、オンデマンドコード実行システムからの要求を連続して、間欠的に、または定期的に取り出して、コーディネータ１１４上でタスクを実行し、オンデマンドコード実行環境１５０にそのような実行の結果を報告するために、コーディネータ１１４上で実行するリモートインタフェースタスク１２０２を実装してもよい。
【０１２１】
図１５の対話は、（１）において開始し、（１）では、オンデマンドコード実行環境１５０は、コーディネータ１１４においてタスクを実行する呼び出しを取得する。実例として、呼び出しは、オンデマンドコード実行環境１５０において実行するタスクによって、またはオンデマンドコード実行環境１５０に呼び出しを伝送する（例えば、オンデマンドコード実行環境１５０のＡＰＩを介して）クライアントデバイス１０２によって取得されてもよい。呼び出しは、例えば、呼び出されることになるタスクの識別情報と共に、タスクを実行するためのコーディネータ１１４の識別情報を含んでもよい。いくつかの例では、呼び出しは更に、実行の前もしくは実行の間にタスクに渡すためのパラメータ、またはタスクをどのように実行するかを制御するためのパラメータ（例えば、タスクの優先度）など、他の情報を含んでもよい。呼び出されることになるタスクの識別情報は、例えば、コーディネータ１１４、オンデマンドコード実行環境１５０、またはその両方の上でのタスクの名前または他の識別子を含んでもよい。コーディネータ１１４についての識別情報は、コーディネータ１１４の名前もしくは他の識別子、またはコーディネータ１１４が動作する被調整環境１１０の名前もしくは他の識別（例えば、単一のコーディネータ１１４がそのような環境１１０内に含まれるのみの例では）を含んでもよい。いくつかの例では、コーディネータ１１４の識別情報は、コーディネータ１１４がそれと関連付けられるオンデマンドコード実行環境１５０上のアカウントの指定を含んでもよい。
【０１２２】
（２）において、オンデマンドコード実行環境１５０は、呼び出しが伝送されるべきコーディネータ１１４を識別する。実例として、オンデマンドコード実行環境１５０は、呼び出しが伝送されるべき特定のコーディネータ１１４を判定するために、呼び出しからコーディネータ１１４についての識別情報を抽出してもよい。その後、（３）において、オンデマンドコード実行環境１５０は、呼び出しの待ち行列に、コーディネータ１１４による取り出しを待つ呼び出しをエンキューする。実例として、オンデマンドコード実行環境１５０は、オンデマンドコード実行環境１５０から呼び出しを取得することを可能にされたコーディネータ１１４ごとに、コーディネータ１１４への伝送を待つ呼び出しの待ち行列を生成してもよい。よって、オンデマンドコード実行環境１５０は、宛先コーディネータ１１４に対応する待ち行列に、現在取得されている呼び出しを配置してもよい。いくつかの例では、オンデマンドコード実行環境１５０は、ファーストインファーストアウトアルゴリズムに従って、待ち行列を動作させてもよい。他の例では、オンデマンドコード実行環境１５０は、待ち行列に他のスケジューリングアルゴリズム（上記議論されたものなど）を適用してもよい。
【０１２３】
（４）において、コーディネータ１１４上で実行するリモートインタフェースタスク１２０２は、オンデマンドコード実行環境１５０に、オンデマンドコード実行環境１５０において待ち行列に入れられたタスク呼び出しを取り出す要求を伝送する。リモートインタフェースタスク１２０２は、本明細書で説明される実施形態に従って、コーディネータ１１４においてタスクとして実装されてもよい。実例として、リモートインタフェースタスク１２０２は、オンデマンドコード実行環境１５０と連続して、間欠的に、または定期的に対話して、コーディネータ１１４上での実行のためのオンデマンドコード実行環境１５０において待ち行列に入れられたタスク呼び出しを取り出すように実行可能なコードに対応してもよい。１つの実施形態では、タスク呼び出しを取り出す要求は、オンデマンドコード実行環境１５０のＵＲＩにアドレス指定されたＨＴＴＰ要求（例えば、ＧＥＴメソッド要求）であってもよい。実例として、ＵＲＩは、コーディネータ１１４に対応するとして、オンデマンドコード実行環境１５０によって指定されたパスを含んでもよい。
【０１２４】
（５）において、オンデマンドコード実行環境１５０は、要求に応答して、リモートインタフェースタスク１２０２に、待ち行列に入れられた呼び出しを返却する。１つの実施形態では、オンデマンドコード実行環境１５０は、コーディネータ１１４に、全ての待ち行列に入れられたタスク呼び出しを返却してもよい。別の実施形態では、オンデマンドコード実行環境１５０は、コーディネータ１１４からの要求ごとの待ち行列に入れられた閾値数のタスク呼び出し（例えば、待ち行列からの最も高く順序付けられた呼び出し、または最も高く順序付けられたｎ個の呼び出し）のみを含んでもよい。
【０１２５】
（６）において、リモートインタフェースタスク１２０２は、オンデマンドコード実行環境１５０から取り出された呼び出しに対応する呼び出しメッセージを生成する。１つの実施形態では、コーディネータ１１４は、コーディネータ１１４によって利用されるフォーマットに従って、新たな呼び出しを生成するために取り出された呼び出しからの情報を利用してもよい。例えば、上記説明されたように、コーディネータ１１４は、所与のフォーマットに従って（例えば、呼び出されるタスクを識別するＵＲＩにアドレス指定され、要求のコンテンツとしてタスクの実行に関するパラメータを含むＨＴＴＰ  ＰＯＳＴ要求として）、タスクを実行する呼び出しを取得するように構成された通信マネージャ２６０を含んでもよい。よって、リモートインタフェースタスク１２０２は、通信マネージャ２６０によって利用されるフォーマットに従って、新たな呼び出しを生成するために、取り出された呼び出し（例えば、オンデマンドコード実行環境１５０によって伝送されたＨＴＴＰパケットのコンテンツ）からの情報を利用してもよい。別の実施形態では、オンデマンドコード実行環境１５０は、カプセル化されたデータパケットとしてタスク呼び出しを返却するように構成されてもよく、その結果、それは、カプセル化されたリモートインタフェースタスク１２０２であってもよく、新たな呼び出しの独立した生成を必要とすることなく、コーディネータ１１４内で伝送されてもよい。
【０１２６】
（７）において、コーディネータ１１４は、通信マネージャ２６０に呼び出しを伝送する。呼び出しは、上記説明された実施形態に従って伝送されてもよい（例えば、呼び出されるタスクを識別するＵＲＩにアドレス指定されたＨＴＴＰ  ＰＯＳＴ要求として）。その後、通信マネージャ２６０は、呼び出しをコーディネータ１１４のワークアイテム待ち行列上でエンキューさせ、コーディネータ１１４の実行環境内で実行させるように動作してもよい。タスクを実行する呼び出しを処理するための対話は、図８〜図１３に関して上記説明されている。よって、図１５の対話を介して、オンデマンドコード実行環境１５０は、コーディネータ１１４上でタスクの実行を生じさせるように動作してもよい。
【０１２７】
オンデマンドコード実行環境１５０を介してコーディネータ１１４上でタスクの実行を開始するためにリモートインタフェースタスク１２０２の使用のための例示的な対話が図１５に表されるが、リモートインタフェースタスク１２０２は、いくつかの例では、追加の機能性を実装してもよい。例えば、リモートインタフェースタスク１２０２は、コーディネータ１１４においてタスクの実行の出力または結果を取得し（例えば、図１３の対話に従って）、オンデマンドコード実行環境１５０にそのような出力または結果を返却するように動作してもよい。実例として、出力または結果は、オンデマンドコード実行環境１５０に返却されてもよく、タスクの実行識別子（例えば、呼び出しエンティティまたはオンデマンドコード実行環境１５０によって割り振られてもよい）を含んでもよい。オンデマンドコード実行環境１５０は更に、図１３を参照して上記説明されたのと同様に、呼び出しエンティティに出力または結果を返却するように機能してもよい。
【０１２８】
図１６を参照して、例示的な外部タスク呼び出しルーチン１６００が説明される。ルーチン１６００は、例えば、オンデマンドコード実行環境１５０によって実装されてもよい（例えば、オンデマンドコード実行環境１５０のフロントエンド１５２を介して）。ルーチン１６００は、１６０２において開始し、１６０２では、オンデマンドコード実行環境１５０は、コーディネータ１１４に対してタスク呼び出し待ち行列を生成する。タスク呼び出し待ち行列は、オンデマンドコード実行環境１５０のメモリ内の論理構造として実装されてもよく、コーディネータ１１４においてタスクを実行する呼び出しを記憶するように構成されてもよい。タスク呼び出し待ち行列は、デバイスが、待ち行列が対応するコーディネータ１１４上でタスクの実行を要求することを可能にするために、ＵＲＩなどのリソース識別子と関連付けられてもよい。
【０１２９】
ブロック１６０４において、オンデマンドコード実行環境１５０は、コーディネータ１１４上でタスクを実行する呼び出しを取得する。呼び出しは、例えば、オンデマンドコード実行環境１５０のＡＰＩを介して取得されてもよく、クライアントデバイス１０２、オンデマンドコード実行環境１５０上で実行するタスク、コーディネータ１１４上で実行するタスク、または他のデバイスによって生成されてもよい。呼び出しは、タスクに渡されることになるパラメータ、またはタスクの実行に関するパラメータ（例えば、優先度）を含んでもよい。
【０１３０】
ブロック１６０６において、オンデマンドコード実行環境１５０は、タスクを実行することが意図されるコーディネータ１１４に対応する呼び出しをタスク呼び出し待ち行列内にエンキューする。いくつかの例では、オンデマンドコード実行環境１５０は、呼び出しの正当性を確認し（例えば、それが適切な認証情報、フォーマットを含むことを保証するために）、または呼び出しに実行識別子を割り振ることなど、待ち行列に呼び出しを配置する前に追加のアクションを引き受けてもよい。オンデマンドコード実行環境１５０は次いで、ブロック１６０８において、判定された順序付けに従って待ち行列内に呼び出しを分類するために、待ち行列にスケジューリングアルゴリズムを適用してもよい。スケジューリングアルゴリズムは、例えば、重み付けラウンドロビンアルゴリズムを含んでもよい。
【０１３１】
ブロック１６１０において、オンデマンドコード実行環境１５０は、コーディネータ１１４から、コーディネータ１１４に対応する待ち行列に呼び出しを提供する要求を取得する。要求は、例えば、コーディネータ１１４上で実行するリモートインタフェースタスクによって生成されてもよい。１つの実施形態では、要求は、待ち行列に対応するＵＲＩにアドレス指定されたＨＴＴＰ  ＧＥＴメソッド要求である。
【０１３２】
その後、ブロック１６１２において、オンデマンドコード実行環境１５０は、スケジューリングアルゴリズムに従った待ち行列の順序付けに従って、待ち行列内の呼び出しを伝送する。１つの実施形態では、オンデマンドコード実行環境１５０は、コーディネータ１１４に、全ての待ち行列に入れられた呼び出しを伝送してもよい。別の実施形態では、オンデマンドコード実行環境１５０は、所与の要求に応答して、コーディネータ１１４に、閾値数の（例えば、１つの）呼び出しのみを伝送してもよく、コーディネータ１１４は、待ち行列に入れられた呼び出しを受信するために、複数の要求を伝送してもよい。実例として、呼び出しの伝送は、パブリックネットワーク（例えば、ネットワーク１０４）を通じてコーディネータに伝送するのに適切なフォーマットに呼び出しをカプセル化することを含んでもよく、その結果、コーディネータ１１４において呼び出しをデカプセル化することができ、呼び出しを独立して再作成することなく、コーディネータ１１４の通信マネージャに呼び出しを伝送することができる。よって、コーディネータ１１４は、オンデマンドコード実行環境１５０にサブミットされるような、タスクを実行する呼び出しを取得してもよい（例えば、リモートインタフェースタスクを介して）。その後、コーディネータ１１４は、被調整デバイス１１２の動作を管理することなど、所望の機能性を引き受けるために、上記説明された実施形態に従って呼び出しを処理してもよい。ルーチン１６００は次いで、ブロック１６１４において終了してもよい。
【０１３３】
上記述べられたように、オンデマンドコード実行環境１５０は、いくつかの例では、コーディネータ１１４上で実行されるタスクの出力の取り出しなど、追加の機能性を実装してもよい。そのような例では、ルーチン１６００は、追加の要素を含むように修正されてもよく、または新たなルーチンが、コーディネータ１１４において実行されるタスクの出力の取り出しを促進するように、オンデマンドコード実行環境１５０によって実装されてもよい。例えば、オンデマンドコード実行環境１５０は、リモートインタフェースタスクによってオンデマンドコード実行環境１５０に配信されるような（例えば、タスクの実行識別子を含むＵＲＩにアドレス指定されたＨＴＴＰ  ＰＯＳＴメソッド要求として）、タスクの出力の報告を待ってもよい。オンデマンドコード実行環境１５０は次いで、呼び出しエンティティに出力の通知を伝送してもよく（例えば、「プッシュ」通知として）、または出力を記憶してもよく、その結果、呼び出しエンティティは、オンデマンドコード実行環境１５０からそれを要求することによって出力を取り出すことができる（例えば、タスクの実行識別子を含むＵＲＩにアドレス指定されたＨＴＴＰ  ＧＥＴメソッド要求を介して）。よって、オンデマンドコード実行環境１５０は、いくつかの例では、コーディネータ１１４の通信マネージャと同様に動作してもよい。他の実施形態では、オンデマンドコード実行環境１５０は、そのような機能性を除外してもよく、コーディネータ１１４上で実行するリモートインタフェースタスクは、ネットワーク１０４を介してアクセス可能なネットワークアタッチドストレージシステムにそのような出力を記憶することなど、他の機構を介してタスク実行の出力を報告してもよい。
【０１３４】
開示の様々な実施例の実施形態は、以下の条項によって説明されることができる。
【０１３５】
条項１．
被調整デバイスの動作を管理するコーディネータコンピューティングデバイスをリモートに構成するシステムであって、前記システムは、
前記コーディネータコンピューティングデバイスについてのデバイスシャドウを含む非一時的データストアであって、前記デバイスシャドウは、前記コーディネータコンピューティングデバイスの所望の構成についてのバージョン識別子を示す、前記非一時的データストアと、
前記非一時的データストアと通信する配置デバイスと、を含み、
前記配置デバイスは、
前記コーディネータコンピューティングデバイスについての構成情報を取得することであって、前記構成情報は、前記コーディネータコンピューティングデバイスによって管理されることになる１つ以上の被調整デバイスおよび前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる１つ以上のタスクを示し、前記１つ以上のタスクの個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記構成情報は更に、前記１つ以上のタスクの実行から取得されたメッセージに応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを判定するための基準を示すイベントフローテーブルを指定する、前記取得することと、
前記構成情報を含む構成パッケージを生成することであって、前記構成パッケージは、追加のバージョン識別子と関連付けられる、前記生成することと、
前記所望の構成が前記追加のバージョン識別子に対応することを示すように前記デバイスシャドウを修正することと、
前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知することと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記構成パッケージを伝送することであって、前記コーディネータコンピューティングデバイスは、前記構成パッケージ内で示される前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる前記１つ以上のタスクを取り出すために、前記構成パッケージを利用するように構成される、前記伝送することと、
を行うようにコンピュータ実行可能命令により構成されたプロセッサを含む、
前記システム。
【０１３６】
条項２．
前記プロセッサは更に、前記デバイスシャドウに対応するトピックへの前記コーディネータコンピューティングデバイスについてのサブスクリプションを取得するコンピュータ実行可能命令により構成され、
前記プロセッサは、前記コーディネータコンピューティングデバイスに、前記トピックへの発行の通知として前記修正されたデバイスシャドウを通知するように構成される、条項１に記載のシステム。
【０１３７】
条項３．
前記通知は、ＭＱＴＴプロトコルを介して伝送される、条項２に記載のシステム。
【０１３８】
条項４．
前記被調整デバイスは、代替的な主要機能と関連付けられた汎用コンピューティングデバイス、シンデバイス、または組み込みデバイスのうちの少なくとも１つを含む、条項１に記載のシステム。
【０１３９】
条項５．
前記コーディネータコンピューティングデバイスを更に含み、
前記コーディネータコンピューティングデバイスは、前記被調整デバイスの状態を管理するように集合的に構成されたプロセッサおよびメモリを含む、条項１に記載のシステム。
【０１４０】
条項６．
コンピュータにより実行される方法であって、
コーディネータコンピューティングデバイスの登録を取得することであって、前記コーディネータコンピューティングデバイスは、前記コーディネータコンピューティングデバイスによって管理されることになる１つ以上の被調整デバイスを含む被調整環境と関連付けられる、前記取得することと、
前記コーディネータコンピューティングデバイスについてのデバイスシャドウを生成することであって、前記デバイスシャドウは、前記コーディネータコンピューティングデバイスの所望の構成についてのバージョン識別子を示す、前記生成することと、
前記コーディネータコンピューティングデバイスについての構成情報を取得することであって、前記構成情報は、前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる１つ以上のタスクを示し、前記１つ以上のタスクの個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応する、前記取得することと、
前記構成情報を含む構成パッケージを生成することであって、前記構成パッケージは、追加のバージョン識別子と関連付けられる、前記生成することと、
前記所望の構成が前記追加のバージョン識別子に対応することを示すように前記デバイスシャドウを修正することと、
前記コーディネータコンピューティングデバイスに前記デバイスシャドウへの修正を通知することと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記構成パッケージを伝送することであって、前記コーディネータコンピューティングデバイスは、前記構成パッケージ内で示される前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる前記１つ以上のタスクを取り出すために、前記構成パッケージを利用するように構成される、前記伝送することと、
を含む、前記コンピュータにより実行される方法。
【０１４１】
条項７．
前記構成パッケージは更に、前記１つ以上のタスクのタスクうちの少なくとも１つからの前記被調整デバイス、または前記１つ以上の被調整デバイスのうちのある被調整デバイスにおいて取得されたメッセージに応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを判定するための基準を示すイベントフローテーブルを含む、条項６に記載のコンピュータにより実行される方法。
【０１４２】
条項８．
前記構成パッケージは更に、前記被調整デバイスと前記コーディネータコンピューティングデバイスとの間の通信において使用されることになるセキュリティ証明書を含む、条項６に記載のコンピュータにより実行される方法。
【０１４３】
条項９．
前記構成パッケージは更に、前記コーディネータコンピューティングデバイスによって維持されることになるデバイスシャドウのセットのインジケーションを含み、
前記デバイスシャドウのセットの個々のデバイスシャドウは、前記１つ以上の被調整デバイスの個々の被調整デバイスに対応する、条項６に記載のコンピュータにより実行される方法。
【０１４４】
条項１０．
前記コーディネータコンピューティングデバイスの前記登録を取得することは、前記デバイスシャドウに対応するトピックへの前記コーディネータコンピューティングデバイスについてのサブスクリプションを取得することを含み、
前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知することは、前記コーディネータコンピューティングデバイスに前記トピックへの発行の通知を伝送することを含む、条項６に記載のコンピュータにより実行される方法。
【０１４５】
条項１１．
前記コーディネータコンピューティングデバイスのユーザと関連付けられたクライアントコンピューティングから、前記１つ以上のタスクの少なくとも１つのタスクを取得することと、
前記コーディネータコンピューティングデバイスにおける前記構成パッケージの処理に応答して、前記少なくとも１つのタスクについての要求を受信することと、
前記コーディネータコンピューティングデバイスに前記少なくとも１つのタスクを提供することと、
を更に含む、条項６に記載のコンピュータにより実行される方法。
【０１４６】
条項１２．
前記コーディネータコンピューティングデバイスについての更新された構成情報を取得することと、
前記更新された構成情報から更新された構成パッケージを生成することであって、前記構成パッケージは、更新されたバージョン識別子と関連付けられる、前記生成することと、
前記所望の構成が前記更新されたバージョン識別子に対応することを示すように前記デバイスシャドウを修正することと、
前記コーディネータコンピューティングデバイスに前記デバイスシャドウへの修正を通知することと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記更新された構成パッケージを伝送することと、
を更に含む、条項６に記載のコンピュータにより実行される方法。
【０１４７】
条項１３．
コンピュータ実行可能命令を含む非一時的コンピュータ可読媒体であって、前記コンピュータ実行可能命令は、配置システムによって実行されるとき、前記配置システムに、
コーディネータコンピューティングデバイスについてのデバイスシャドウを生成することであって、前記デバイスシャドウは、前記コーディネータコンピューティングデバイスの所望の構成についてのバージョン識別子を示し、前記コーディネータコンピューティングデバイスは、前記コーディネータコンピューティングデバイスによって管理されることになる１つ以上の被調整デバイスを含む被調整環境と関連付けられる、前記生成することと、
前記コーディネータコンピューティングデバイスについての構成情報を取得することであって、前記構成情報は、前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる１つ以上のタスクを示し、前記１つ以上のタスクの個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応する、前記取得することと、
前記所望の構成が追加のバージョン識別子に対応することを示すように前記デバイスシャドウを修正することと、
前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知することと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記構成パッケージを伝送することであって、前記コーディネータコンピューティングデバイスは、前記構成パッケージ内で示される前記１つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる前記１つ以上のタスクを取り出すために、前記構成パッケージを利用するように構成される、前記伝送することと、
を行わせる、前記非一時的コンピュータ可読媒体。
【０１４８】
条項１４．
前記コンピュータ実行可能命令は更に、前記配置システムに、
前記１つ以上のタスクに対応する実行可能なコードを取得することであって、前記１つ以上のタスクは、
前記１つ以上の被調整デバイスの個々の被調整デバイスについてのデバイスシャドウを生成するように前記コーディネータコンピューティングデバイスによって実行可能な第１のタスクと、
前記１つ以上の被調整デバイスのうちの少なくとも１つ、または前記１つ以上のタスクのうちの少なくとも１つにアドレス指定されたメッセージを経路指定するように前記コーディネータコンピューティングデバイスによって実行可能な第２のタスクと、を含む、
前記取得することと、
前記コーディネータコンピューティングデバイスから前記１つ以上のタスクについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記１つ以上のタスクを伝送することと、
を行わせる、条項１３に記載の非一時的コンピュータ可読媒体。
【０１４９】
条項１５．
前記１つ以上のタスクは更に、前記タスクと関連付けられたプロトコルに従って通信を可能にするように前記コーディネータコンピューティングデバイスによって実行可能な第３のタスクを含む、条項１４に記載の非一時的コンピュータ可読媒体。
【０１５０】
条項１６．
前記構成パッケージは更に、前記コーディネータコンピューティングデバイスによって維持されることになるデバイスシャドウのセットのインジケーションを含み、
前記デバイスシャドウのセットの個々のデバイスシャドウは、前記１つ以上の被調整デバイスの個々の被調整デバイスに対応する、条項１４に記載の非一時的コンピュータ可読媒体。
【０１５１】
条項１７．
前記コンピュータ実行可能命令は更に、前記配置システムに、
前記デバイスシャドウに対応するトピックへの前記コーディネータコンピューティングデバイスについてのサブスクリプションを取得させ、
前記コンピュータ実行可能命令は、前記配置システムに、前記コーディネータコンピューティングデバイスに前記トピックへの発行の通知を伝送することによって、前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知させる、条項１４に記載の非一時的コンピュータ可読媒体。
【０１５２】
条項１８．
前記コンピュータ実行可能命令は更に、前記配置システムに、
前記コーディネータコンピューティングデバイスのユーザと関連付けられたクライアントコンピューティングから、前記１つ以上のタスクの少なくとも１つのタスクを取得することと、
前記コーディネータコンピューティングデバイスにおける前記構成パッケージの処理に応答して、前記少なくとも１つのタスクについての要求を受信することと、
前記コーディネータコンピューティングデバイスに前記少なくとも１つのタスクを提供することと、
を行わせる、条項１４に記載の非一時的コンピュータ可読媒体。
【０１５３】
条項１９．
前記コンピュータ実行可能命令は更に、前記配置システムに、
前記コーディネータコンピューティングデバイスについての更新された構成情報を取得することと、
前記更新された構成情報から更新された構成パッケージを生成することであって、前記構成パッケージは、更新されたバージョン識別子と関連付けられる、前記生成することと、
前記所望の構成が前記更新されたバージョン識別子に対応することを示すように前記デバイスシャドウを修正することと、
前記コーディネータコンピューティングデバイスに前記デバイスシャドウへの修正を通知することと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記更新された構成パッケージを伝送することと、
を行わせる、条項１４に記載の非一時的コンピュータ可読媒体。
【０１５４】
条項２０．
前記１つ以上のタスクの少なくとも１つのタスクは、前記コーディネータコンピューティングデバイスで、および前記コーディネータコンピューティングデバイスとは別個のオンデマンドコード実行システム内の両方で実行可能である、条項１４に記載の非一時的コンピュータ可読媒体。
【０１５５】
条項２１．
被調整環境内で１つ以上の被調整デバイスを管理するように構成されたコーディネータコンピューティングデバイス内でリソースを管理するシステムであって、前記システムは、
非一時的データストアであって、
実行されるとき、前記コーディネータ上で１つ以上のタスクを実行するように呼び出しの待ち行列を実装するスケジューラであって、前記１つ以上のタスクの個々のタスクは、前記被調整環境内で前記１つ以上の被調整デバイスの動作を管理するように前記コーディネータコンピューティングデバイスによって実行可能なコードに対応する、前記スケジューラと、
実行されるとき、前記１つ以上のタスクを実行するための実行環境を生成するリソースマネージャと、
に対応するコンピュータ実行可能命令を含む、前記非一時的データストアと、
前記非一時的データストアと通信し、前記スケジューラを実行するように構成されたプロセッサと、を含み、前記スケジューラの実行は、前記プロセッサに、
前記待ち行列内にタスク呼び出しのセットをエンキューすることであって、個々のタスク呼び出しは、前記１つ以上のタスクのうちのあるタスクを実行する呼び出しに対応する、前記エンキューすることと、
前記リソースマネージャから、前記コーディネータ上の計算リソースの可用性を取得することと、
処理のための前記タスク呼び出しのセットの少なくとも１つのタスク呼び出しを選択するために、計算リソースの前記可用性に少なくとも部分的に基づいて、前記待ち行列にスケジューリングアルゴリズムを適用することと、
前記少なくとも１つのタスク呼び出しに対応するタスクを実行するための実行環境を選択するように前記リソースマネージャに指示することと、
前記実行環境内で前記少なくとも１つのタスク呼び出しに対応する前記タスクを実行すること、を行わせ、
前記プロセッサは更に、前記少なくとも１つのタスク呼び出しに対応する前記タスクを実行するための前記実行環境を生成するために、前記リソースマネージャを実行するように構成され、
前記実行環境の生成は、前記実行環境に、前記少なくとも１つのタスク呼び出しに対応する前記タスクを実行するために必要とされるデータリソースをプロビジョニングすることを含む、
前記システム。
【０１５６】
条項２２．
前記被調整デバイスは、代替的な主要機能と関連付けられた汎用コンピューティングデバイス、シンデバイス、または組み込みデバイスのうちの少なくとも１つを含む、条項２１に記載のシステム。
【０１５７】
条項２３．
前記実行環境に、前記少なくとも１つのタスク呼び出しに対応する前記タスクを実行するために必要とされるデータリソースをプロビジョニングすることは、前記実行環境に、前記タスクに対応する前記実行可能なコードをプロビジョニングすることを含む、条項２１に記載のシステム。
【０１５８】
条項２４．
前記実行環境に、前記少なくとも１つのタスク呼び出しに対応する前記タスクを実行するために必要とされるデータリソースをプロビジョニングすることは、前記実行環境に、ランタイム環境に対応するドライバ、コードライブラリ、データ、またはコードユーティリティのうちの少なくとも１つをプロビジョニングすることを含む、条項２１に記載のシステム。
【０１５９】
条項２５．
前記実行環境は、ソフトウェアコンテナに対応する、条項２１に記載のシステム。
【０１６０】
条項２６．
前記データリソースは、前記ソフトウェアコンテナの外部に記憶され、
前記実行環境に、前記少なくとも１つのタスク呼び出しに対応する前記タスクを実行するために必要とされるデータリソースをプロビジョニングすることは、前記ソフトウェアコンテナを前記データリソースへの読み出しのみのアクセスに関連付けることを含む、条項２５に記載のシステム。
【０１６１】
条項２７．
前記ソフトウェアコンテナを前記データリソースへの読み出しのみのアクセスに関連付けることは、前記実行環境に前記データリソースおよび追加のメモリ空間の組み合わされたビューを提示している間、前記データリソースへの読み出しのみのアクセスおよび前記追加のメモリ空間への読み出し／書き込みアクセスを組み合わせるユニオンマウントを生成することを含む、条項２６に記載のシステム。
【０１６２】
条項２８．
前記実行環境は、第１の実行環境であり、前記リソースマネージャの実行は更に、前記プロセッサに、
第２のタスクを実行するための第２の実行環境についての要求を取得させ、
前記第１のタスクが実行を停止したことを検出させ、
前記要求を満たすために前記第１の実行環境を選択させる、
条項２１に記載のシステム。
【０１６３】
条項２９．
コンピュータ実行可能命令を含む非一時的コンピュータ可読媒体であって、
リソースマネージャを実装するようにコンピューティングシステムによって実行可能な第１の命令であって、前記リソースマネージャの実装は、前記コンピューティングシステムに、
１つ以上のタスクの第１のタスクを実行するための実行環境についての要求を取得することであって、前記１つ以上のタスクの個々のタスクは、前記コンピューティングシステムによって実行可能なコードに対応する、前記取得することと、
前記タスクの実行のために必要とされるデータリソースのセットを判定することと、
少なくとも部分的に、前記実行環境に前記データリソースのセットへのアクセスをプロビジョニングすることによって、前記タスクの実行のための実行環境を生成することと、
を行わせる、前記第１の命令と、
スケジューラを実装するように前記コンピューティングシステムによって実行可能な第２の命令であって、前記スケジューラの実装は、前記コンピューティングシステムに、
待ち行列内にタスク呼び出しのセットをエンキューすることであって、個々のタスク呼び出しは、前記１つ以上のタスクのタスクを実行する呼び出しに対応する、前記エンキューすることと、
前記コンピューティングシステム上の計算リソースの可用性を取得することと、
処理のための前記タスク呼び出しのセットのタスク呼び出しを選択するために、計算リソースの前記可用性に少なくとも部分的に基づいて、前記待ち行列にスケジューリングアルゴリズムを適用することであって、前記タスク呼び出しは、前記第１のタスクを実行する呼び出しに対応する、前記適用することと、
前記第１のタスクを実行するための前記実行環境についての前記要求を伝送することと、
前記実行環境内で前記第１のタスクを実行することと、
を行わせる、前記第２の命令と、
を含む、前記非一時的コンピュータ可読媒体。
【０１６４】
条項３０．
前記実行環境は、第１の実行環境であり、前記リソースマネージャの実装は更に、前記コンピューティングシステムに、
第２のタスクを実行するための第２の実行環境についての要求を取得させ、
前記第１のタスクが実行を停止したことを検出させ、
前記要求を満たすために前記第１の実行環境を選択させる、
条項２９に記載の非一時的コンピュータ可読媒体。
【０１６５】
条項３１．
前記第１の実行環境は、前記第２のタスクおよび前記第１のタスクが同一のタスクに対応することを検出したことに少なくとも部分的に基づいて選択される、条項３０に記載の非一時的コンピュータ可読媒体。
【０１６６】
条項３２．
前記第１の実行環境は、前記第２のタスクが前記第１の実行環境に利用可能なデータリソースに依存することを検出することに少なくとも部分的に基づいて選択される、条項３０に記載の非一時的コンピュータ可読媒体。
【０１６７】
条項３３．
前記リソースマネージャの実装は更に、前記コンピューティングシステムに、
前記実行環境によって必要とされる計算リソースの可用性が閾値レベルを下回ると判定させ、
前記計算リソースの使用量と関連付けられた第２の実行環境を中断させる、
条項３０に記載の非一時的コンピュータ可読媒体。
【０１６８】
条項３４．
前記計算リソースは、プロセッサ可用性、メモリ可用性、またはネットワーク帯域幅可用性のうちの少なくとも１つを含む、条項３３に記載の非一時的コンピュータ可読媒体。
【０１６９】
条項３５．
前記第２の実行環境の中断は、前記第２の実行環境のスナップショットイメージデータを生成すること、またはデバイスシャドウに前記第２の実行環境の状態を保存することのうちの少なくとも１つを含む、条項３３に記載の非一時的コンピュータ可読媒体。
【０１７０】
条項３６．
前記リソースマネージャの実装は更に、前記コンピューティングシステムに、前記実行環境を生成させ、
前記実行環境を生成することは、前記実行環境に前記データリソースのセットおよび追加のメモリ空間の組み合わされたビューを提示している間、前記データリソースのセットへの読み出しのみのアクセスおよび前記追加のメモリ空間への読み出し／書き込みアクセスを組み合わせるユニオンマウントを生成することを含む、条項３０に記載の非一時的コンピュータ可読媒体。
【０１７１】
条項３７．
コンピュータにより実行される方法であって、
待ち行列内にタスク呼び出しのセットをエンキューすることであって、個々のタスク呼び出しは、１つ以上のタスクのうちのあるタスクを実行する呼び出しに対応する、前記エンキューすることと、
前記コンピューティングシステム上の計算リソースの可用性を取得することと、
処理のための前記タスク呼び出しのセットのうちのあるタスク呼び出しを選択するために、計算リソースの前記可用性に少なくとも部分的に基づいて、前記待ち行列にスケジューリングアルゴリズムを適用することであって、前記タスク呼び出しは、前記第１のタスクを実行する呼び出しに対応する、前記適用することと、
前記タスクの実行のために必要とされるデータリソースのセットを判定することと、
少なくとも部分的に、前記実行環境に前記データリソースのセットへのアクセスをプロビジョニングすることによって、前記タスクの実行のための実行環境を生成することと、
前記実行環境内で前記第１のタスクを実行することと、
を含む、前記コンピュータにより実行される方法。
【０１７２】
条項３８．
前記データリソースのセットは、データリソースまたは計算リソースのうちの少なくとも１つを含む、条項３７に記載のコンピュータにより実行される方法。
【０１７３】
条項３９．
前記実行環境は、ソフトウェアコンテナに対応し、
前記実行環境に前記データリソースのセットへのアクセスをプロビジョニングすることは、前記ソフトウェアコンテナを前記データリソースへの読み出しのみのアクセスに関連付けることを含む、条項３７に記載のコンピュータにより実行される方法。
【０１７４】
条項４０．
前記ソフトウェアコンテナを前記データリソースのセットへの読み出しのみのアクセスに関連付けることは、前記実行環境に前記データリソースのセットおよび追加のメモリ空間の組み合わされたビューを提示している間、前記データリソースのセットへの読み出しのみのアクセスおよび前記追加のメモリ空間への読み出し／書き込みアクセスを組み合わせるユニオンマウントを生成することを含む、条項３９に記載のコンピュータにより実行される方法。
【０１７５】
条項４１．
前記実行環境は、第１の実行環境であり、前記コンピュータにより実行される方法は更に、
第２のタスクを実行するための第２の実行環境についての要求を取得することと、
前記第１のタスクが実行を停止したことを検出することと、
前記要求を満たすために前記第１の実行環境を選択することと、
を含む、条項３７に記載のコンピュータにより実行される方法。
【０１７６】
条項４２．
前記第１の実行環境は、前記第２のタスクおよび前記第１のタスクが同一のタスクに対応すること、または前記第２のタスクが前記第１の実行環境に利用可能なデータリソースに依存することを検出したことに少なくとも部分的に基づいて選択される、条項４１に記載のコンピュータにより実行される方法。
【０１７７】
条項４３．
前記実行環境によって必要とされる計算リソースの可用性が閾値レベルを下回ると判定することと、
前記計算リソースの使用量と関連付けられた第２の実行環境を中断することと、
を更に含む、条項３７に記載のコンピュータにより実行される方法。
【０１７８】
条項４４．
前記第２の実行環境を中断することは、前記第２の実行環境のスナップショットイメージデータを生成すること、またはデバイスシャドウに前記第２の実行環境の状態を保存することのうちの少なくとも１つを含む、条項４３に記載のコンピュータにより実行される方法。
【０１７９】
条項４５．
前記待ち行列内に前記第２の実行環境の実行を再開する呼び出しをエンキューすることと、
前記第２の実行環境の前記実行を再開する前記呼び出しを選択するために、前記計算リソースの可用性に少なくとも部分的に基づいて、前記待ち行列を処理することと、
前記第２の実行環境の前記実行を再開することと、
を更に含む、条項４３に記載のコンピュータにより実行される方法。
【０１８０】
条項４６．
コーディネータコンピューティングデバイスでのタスクの実行の間の通信を可能にする通信マネージャを実装する前記コーディネータコンピューティングデバイスであって、
前記コーディネータコンピューティングデバイスは、被調整環境内で１つ以上の被調整デバイスを管理するように構成され、前記システムは、
実行されるとき、前記コーディネータコンピューティングデバイスでのタスク実行の間の通信を可能にする、前記通信マネージャに対応するコンピュータ実行可能命令を含む非一時的データストアであって、個々のタスクは、前記１つ以上の被調整デバイスの動作を管理するように前記コーディネータコンピューティングデバイスによって実行可能なコードに対応する、前記非一時的データストアと、
前記非一時的データストアと通信し、前記通信マネージャを実行するように構成されたプロセッサと、を含み、前記通信マネージャの実行は、前記プロセッサに、
前記コーディネータコンピューティングデバイスでの第１のタスクの実行から呼び出しメッセージを取得することであって、前記呼び出しメッセージは、第２のタスクと関連付けられたリソース識別子にアドレス指定され、前記呼び出しメッセージは、前記第２のタスクの実行に渡されることになるパラメータを含む、前記取得することと、
前記呼び出しメッセージがアドレス指定された少なくとも前記リソース識別子から前記第２のタスクを識別することと、
前記コーディネータコンピューティングデバイスで前記第２のタスクの実行を生じさせることと、
前記第２のタスクの前記実行に実行識別子を伝送することと、
前記第２のタスクの前記実行から返却メッセージを取得することであって、前記返却メッセージは、前記実行識別子を指定する、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第２のタスクの前記実行の出力として前記返却メッセージを識別することと、
前記第１のタスクの前記実行に前記第２のタスクの前記実行の前記出力を返却することと、
を行わせる、前記コーディネータコンピューティングデバイス。
【０１８１】
条項４７．
前記呼び出しメッセージまたは前記返却メッセージのうちの少なくとも１つは、ハイパーテキスト転送プロトコル（ＨＴＴＰ）メッセージである、条項４６に記載のコーディネータコンピューティングデバイス。
【０１８２】
条項４８．
前記プロセッサは更に、前記第１のタスクおよび前記第２のタスクのそれぞれの前記実行のための実行環境を生成するように構成され、
前記実行環境は、相互に分離される、条項４６に記載のコーディネータコンピューティングデバイス。
【０１８３】
条項４９．
前記通信マネージャの実行は更に、前記プロセッサに、前記呼び出しメッセージ内のセキュリティ情報の正当性を確認させる、条項４６に記載のコーディネータコンピューティングデバイス。
【０１８４】
条項５０．
前記返却メッセージは、前記返却メッセージが伝送されるアドレスまたは前記返却メッセージのヘッダフィールドのうちの少なくとも１つに前記実行識別子を含めることによって、前記実行識別子を指定する、条項４６に記載のコーディネータコンピューティングデバイス。
【０１８５】
条項５１．
コーディネータコンピューティングデバイスでのタスクの実行の間の通信を可能にする通信マネージャを実装する前記コーディネータコンピューティングデバイスによって実行可能な命令を含む非一時的コンピュータ可読媒体であって、個々のタスクは、１つ以上の被調整デバイスの動作を管理する前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記命令の実行は、前記コーディネータコンピューティングデバイスに、
前記コーディネータコンピューティングデバイスでの第１のタスクの実行から呼び出しメッセージを取得することであって、前記呼び出しメッセージは、第２のタスクと関連付けられたリソース識別子にアドレス指定される、前記取得することと、
前記呼び出しメッセージがアドレス指定された少なくとも前記リソース識別子から前記第２のタスクを識別することと、
前記コーディネータコンピューティングデバイスで前記第２のタスクの実行を生じさせることと、
前記第２のタスクの前記実行から返却メッセージを取得することであって、前記返却メッセージは、前記第２のタスクの前記実行と関連付けられた実行識別子を含む、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第２のタスクの前記実行の出力として前記返却メッセージを識別することと、
前記第１のタスクの前記実行に前記第２のタスクの前記実行の前記出力を返却することと、
を行わせる、前記非一時的コンピュータ可読媒体。
【０１８６】
条項５２．
前記命令の実行は更に、前記コーディネータコンピューティングデバイスに、前記第１のタスクの前記実行から返却要求メッセージを取得させ、前記第２のタスクの前記実行の前記出力は、前記返却要求メッセージに応答して、前記第１のタスクの前記実行に返却される、条項５１に記載の非一時的コンピュータ可読媒体。
【０１８７】
条項５３．
前記返却要求メッセージは、前記実行識別子を含む前記リソース識別子にアドレス指定される、条項５２に記載の非一時的コンピュータ可読媒体。
【０１８８】
条項５４．
前記返却要求メッセージは、前記返却メッセージを取得する前に取得される、条項５２に記載の非一時的コンピュータ可読媒体。
【０１８９】
条項５５．
前記呼び出しメッセージは、前記第２のタスクの前記実行に割り振られることになる優先度を含む、条項５２に記載の非一時的コンピュータ可読媒体。
【０１９０】
条項５６．
前記第２のタスクと関連付けられ前記リソース識別子は、前記コーディネータコンピューティングデバイスと関連付けられたドメインネーム、前記通信マネージャと関連付けられたポート、および前記第２のタスクと関連付けられたパスを含む、条項５２に記載の非一時的コンピュータ可読媒体。
【０１９１】
条項５７．
前記第２のタスクと関連付けられた前記リソース識別子は、ユニフォームリソース識別子である、条項５２に記載の非一時的コンピュータ可読媒体。
【０１９２】
条項５８．
前記第１のタスクおよび前記第２のタスクは、同一のタスクである、条項５２に記載の非一時的コンピュータ可読媒体。
【０１９３】
条項５９．
コーディネータコンピューティングデバイスでのタスクの実行の間の通信を可能にするコンピュータにより実行される方法であって、個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記コンピュータにより実行される方法は、
前記コーディネータコンピューティングデバイスでの第１のタスク実行から呼び出しメッセージを取得することであって、前記呼び出しメッセージは、第２のタスクと関連付けられたリソース識別子にアドレス指定される、前記取得することと、
前記呼び出しメッセージがアドレス指定された少なくとも前記リソース識別子から前記第２のタスクを識別することと、
前記コーディネータコンピューティングデバイスで前記第２のタスクの実行を生じさせることと、
前記第２のタスクの前記実行から返却メッセージを取得することであって、前記返却メッセージは、前記第２のタスクの前記実行と関連付けられた実行識別子を含む、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第２のタスクの前記実行の出力として前記返却メッセージを識別することと、
前記第１のタスクの前記実行に前記第２のタスクの前記実行の前記出力を返却することと、
を含む、前記コンピュータにより実行される方法。
【０１９４】
条項６０．
前記第２のタスクの前記実行に前記実行識別子を割り振ること、または前記呼び出しメッセージ内で前記実行識別子を識別することのうちの少なくとも１つを更に含む、条項５９に記載のコンピュータにより実行される方法。
【０１９５】
条項６１．
前記第２のタスクの前記実行に前記実行識別子を渡すことを更に含む、条項５９に記載のコンピュータにより実行される方法。
【０１９６】
条項６２．
前記コーディネータコンピューティングデバイスで前記第２のタスクの実行を生じさせることは、前記コーディネータコンピューティングデバイスでの前記第２のタスクの前記実行のための実行環境を生成することを含む、条項５９に記載のコンピュータにより実行される方法。
【０１９７】
条項６３．
前記第１のタスクの前記実行に前記第２のタスクの前記実行の前記出力を返却することは、前記第１のタスクにプッシュメッセージとして前記出力を返却することを含む、条項５９に記載のコンピュータにより実行される方法。
【０１９８】
条項６４．
前記第１のタスクは、第１のプログラミング言語のコードに対応し、前記第２のタスクは、第２のプログラミング言語のコードに対応する、条項５９に記載のコンピュータにより実行される方法。
【０１９９】
条項６５．
前記第１のタスクの前記実行から返却要求メッセージを取得することを更に含み、
前記第２のタスクの前記実行の前記出力は、前記返却要求メッセージに応答して、前記第１のタスクの前記実行に返却される、条項５９に記載のコンピュータにより実行される方法。
【０２００】
条項６６．
前記返却要求メッセージは、前記返却メッセージを取得する前に取得される、条項５９に記載のコンピュータにより実行される方法。
【０２０１】
条項６７．
コーディネータコンピューティングデバイスでタスクをリモートに引き起こすことを可能にするリモートインタフェースを実装する前記コーディネータコンピューティングデバイスであって、前記コーディネータコンピューティングデバイスは、被調整環境内で１つ以上の被調整デバイスを管理するように構成され、個々のタスクは、前記１つ以上の被調整デバイスの動作を管理する前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記コーディネータコンピューティングデバイスは、
実行されるとき、前記コーディネータコンピューティングデバイスでタスクをリモートに引き起こすことを可能にする、前記リモートインタフェースに対応するコンピュータ実行可能命令を含む非一時的データストアと、
前記非一時的データストアと通信し、前記リモートインタフェースを実行するように構成されたプロセッサと、を含み、前記リモートインタフェースの実行は、前記プロセッサに、
前記コーディネータコンピューティングデバイスで第１のタスクを実行する呼び出しを取得するために、前記コーディネータコンピューティングデバイスからリモートのオンデマンドコード実行環境にクエリを伝送することであって、前記クエリは、前記オンデマンドコード実行環境において維持された前記コーディネータコンピューティングデバイスへの呼び出しの待ち行列と関連付けられたリソース識別子にアドレス指定される、前記伝送することと、
前記コーディネータコンピューティングデバイスで前記第１のタスクを実行する前記呼び出しを取得することであって、前記呼び出しは、前記第２のタスクの実行に渡されることになるパラメータを含む、前記取得することと、
第２のタスクおよび前記コーディネータコンピューティングデバイスと関連付けられたリソース識別子を判定することと、
前記コーディネータコンピューティングデバイスで前記第１のタスクを実行する前記呼び出しに対応する呼び出しメッセージを生成することであって、前記呼び出しメッセージは、前記第２のタスクと関連付けられた前記リソース識別子にアドレス指定され、前記呼び出しメッセージは、前記第２のタスクの実行に渡されることになる前記パラメータを含み、前記呼び出しメッセージは、前記コーディネータコンピューティングデバイスで前記第１のタスクの実行を生じさせる、前記生成することと、
を行わせる、前記コーディネータコンピューティングデバイス。
【０２０２】
条項６８．
前記リモートインタフェースの実行は更に、前記プロセッサに、
前記第２のタスクの前記実行に対応する実行識別子を取得することと、
前記第２のタスクの前記実行から返却メッセージを取得することであって、前記メッセージは、前記実行識別子を含むリソース識別子にアドレス指定される、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第２のタスクの前記実行の出力として前記返却メッセージを識別することと、
オンデマンドコード実行環境に前記第２のタスクの前記実行の前記出力を返却することと、
を行わせる、条項６７に記載のコーディネータコンピューティングデバイス。
【０２０３】
条項６９．
前記リモートインタフェースの実行は、前記プロセッサに、前記実行識別子を生成すること、または前記第１のタスクを実行する前記呼び出し内で前記実行識別子を検出することのうちの少なくとも１つによって、前記実行識別子を取得させる、条項６８に記載のコーディネータコンピューティングデバイス。
【０２０４】
条項７０．
前記呼び出しメッセージは、前記第２のタスクと関連付けられた前記リソース識別子にアドレス指定されたハイパーテキスト転送プロトコル（ＨＴＴＰ）メッセージである、条項６７に記載のコーディネータコンピューティングデバイス。
【０２０５】
条項７１．
コーディネータコンピューティングデバイスでタスクをリモートに引き起こすことを可能にするリモートインタフェースを実装する前記コーディネータコンピューティングデバイスによって実行可能な命令を含む非一時的コンピュータ可読媒体であって、個々のタスクは、１つ以上の被調整デバイスの動作を管理する前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記命令の実行は、前記コーディネータコンピューティングデバイスに、
前記コーディネータコンピューティングデバイスからリモートのオンデマンドコード実行環境に、前記コーディネータコンピューティングデバイスで第１のタスクを実行する呼び出しについてのクエリを伝送することであって、前記クエリは、前記オンデマンドコード実行環境において維持された前記コーディネータコンピューティングデバイスへの呼び出しの待ち行列と関連付けられたリソース識別子にアドレス指定される、前記伝送することと、
前記コーディネータコンピューティングデバイスで前記第１のタスクを実行する前記呼び出しを取得することと、
第２のタスクおよび前記コーディネータコンピューティングデバイスと関連付けられたリソース識別子を判定することと、
前記コーディネータコンピューティングデバイスで前記第１のタスクを実行する前記呼び出しに対応する呼び出しメッセージを生成することであって、前記呼び出しメッセージは、前記第２のタスクと関連付けられた前記リソース識別子にアドレス指定される、前記生成することと、
を行わせる、前記非一時的コンピュータ可読媒体。
【０２０６】
条項７２．
前記命令の実行は更に、前記コーディネータコンピューティングデバイスに、
前記第２のタスクの前記実行から返却メッセージを取得することであって、前記メッセージは、前記第２のタスクの前記実行に対応する実行識別子を含むリソース識別子にアドレス指定される、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第２のタスクの前記実行の出力として前記返却メッセージを識別することと、
オンデマンドコード実行環境に前記第２のタスクの前記実行の前記出力を返却することと、
を行わせる、条項７１に記載の非一時的コンピュータ可読媒体。
【０２０７】
条項７３．
前記命令の実行は更に、前記コーディネータコンピューティングデバイスに、少なくとも部分的に、オンデマンドコード実行環境で、前記実行識別子を含む第２のリソース識別子に前記出力を伝送することによって、前記オンデマンドコード実行環境に前記第２のタスクの前記実行の前記出力を返却させる、条項７１に記載の非一時的コンピュータ可読媒体。
【０２０８】
条項７４．
前記命令の実行は，前記コーディネータコンピューティングデバイスに、
前記第２のタスクの前記実行に対応する前記実行識別子を含む前記リソース識別子にアドレス指定された返却要求メッセージを生成させ、
前記リソース識別子に前記返却要求メッセージを伝送させる、
条項７１に記載の非一時的コンピュータ可読媒体。
【０２０９】
条項７５．
前記呼び出しメッセージは、前記第２のタスクの前記実行に割り振られることになる優先度を含む、条項７１に記載の非一時的コンピュータ可読媒体。
【０２１０】
条項７６．
前記第２のタスクおよび前記コーディネータコンピューティングデバイスと関連付けられ前記リソース識別子は、前記コーディネータコンピューティングデバイスと関連付けられたドメインネーム、前記通信マネージャと関連付けられたポート、および前記第１のタスクと関連付けられたパスを含む、条項７１に記載の非一時的コンピュータ可読媒体。
【０２１１】
条項７７．
前記第２のタスクと関連付けられた前記リソース識別子は、ユニフォームリソース識別子である、条項７１に記載の非一時的コンピュータ可読媒体。
【０２１２】
条項７８．
前記命令の実行は、前記コーディネータコンピューティングデバイスに、前記実行環境内で前記第１のタスクを実行するために、前記第１のタスクの実行のための実行環境を生成させる、条項７１に記載の非一時的コンピュータ可読媒体。
【０２１３】
条項７９．
コーディネータコンピューティングデバイスでタスクをリモートに引き起こすことを可能にするように前記コーディネータコンピューティングデバイスによって実装されるコンピュータにより実行される方法であって、個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記コンピュータにより実行される方法は、
前記コーディネータコンピューティングデバイスからリモートのオンデマンドコード実行環境に、前記コーディネータコンピューティングデバイスで第１のタスクを実行する呼び出しについてのクエリを伝送することであって、前記クエリは、前記オンデマンドコード実行環境において維持された前記コーディネータコンピューティングデバイスへの呼び出しの待ち行列と関連付けられたリソース識別子にアドレス指定される、前記伝送することと、
前記コーディネータコンピューティングデバイスで前記第１のタスクを実行する前記呼び出しを取得することと、
第２のタスクおよび前記コーディネータコンピューティングデバイスと関連付けられたリソース識別子を判定することと、
前記コーディネータコンピューティングデバイスで前記第１のタスクを実行する前記呼び出しに対応する呼び出しメッセージを生成することであって、前記呼び出しメッセージは、前記第２のタスクと関連付けられた前記リソース識別子にアドレス指定される、前記生成することと、
を含む、前記コンピュータにより実行される方法。
【０２１４】
条項８０．
前記第１のタスクの実行に実行識別子を割り振ること、または前記呼び出し内で前記実行識別子を識別することのうちの少なくとも１つを更に含む、条項７９に記載のコンピュータにより実行される方法。
【０２１５】
条項８１．
前記呼び出しメッセージは、前記実行識別子を含む、条項８０に記載のコンピュータにより実行される方法。
【０２１６】
条項８２．
前記呼び出しメッセージに応答して、前記コーディネータコンピューティングデバイスで前記第１のタスクを実行することを更に含み、
前記コーディネータコンピューティングデバイスで前記第１のタスクを実行することは、前記コーディネータコンピューティングデバイスでの前記第１のタスクの実行のための実行環境を生成することを含む、条項７９に記載のコンピュータにより実行される方法。
【０２１７】
条項８３．
前記第１のタスクの実行から返却メッセージを取得することであって、前記メッセージは、前記第１のタスクの前記実行に対応する実行識別子を含むリソース識別子にアドレス指定される、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第１のタスクの前記実行の出力として前記返却メッセージを識別することと、
オンデマンドコード実行環境に前記第２のタスクの前記実行の前記出力を返却することと、
を更に含む、条項７９に記載のコンピュータにより実行される方法。
【０２１８】
条項８４．
返却要求メッセージを生成することと、前記第１のタスクの前記実行に対応する前記実行識別子を含む前記リソース識別子に、前記返却要求メッセージを伝送することと、を更に含む、条項８３に記載のコンピュータにより実行される方法。
【０２１９】
条項８５．
オンデマンドコード実行環境に前記第２のタスクの前記実行の前記出力を返却することは、前記オンデマンドコード実行環境上で、前記実行識別子を含む第２のリソース識別子に前記出力を伝送することを含む、条項８３に記載のコンピュータにより実行される方法。
【０２２０】
条項８６．
前記呼び出しメッセージを生成することは、前記取得された呼び出しから前記呼び出しメッセージをデカプセル化することを含む、条項７９に記載のコンピュータにより実行される方法。
【０２２１】
条項８７．
被調整環境内で１つ以上の被調整デバイスを管理するように構成されたコーディネータコンピューティングデバイスであって、前記コーディネータコンピューティングデバイスは、
非一時的データストアであって、
前記１つ以上の被調整デバイスの動作を管理する１つ以上のタスクであって、個々のタスクは、前記コーディネータコンピューティングデバイスよって実行可能なコードに対応する、前記１つ以上のタスクと、
前記１つ以上の被調整デバイスの第１の被調整デバイスによる入力に応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを指定するイベントフロー情報と、
を含む、前記非一時的データストアと、
前記非一時的データストアと通信するプロセッサと、を含み、前記プロセッサは、コンピュータ実行可能命令により、
前記コーディネータコンピューティングデバイスについての構成パッケージを取得することであって、前記構成パッケージは、前記１つ以上の被調整デバイスおよび前記１つ以上のタスクを識別する、前記取得することと、
ネットワークアクセス可能データストアから、前記構成パッケージにおいて識別されるような、前記１つ以上のタスクを取り出すことと、
前記非一時的データストアに前記１つ以上のタスクを記憶することと、
前記第１の被調整デバイスから前記入力を取得することと、
前記イベントフロー情報に少なくとも部分的に基づいて、前記入力に応答して実行されることになる前記１つ以上のタスクの第１のタスクを識別することと、
前記第１のタスクに対応する実行環境を生成することと、
前記実行環境内で前記第１のタスクを実行することと、
を行う、ように構成される、前記コーディネータコンピューティングデバイス。
【０２２２】
条項８８．
前記プロセッサは更に、コンピュータ実行可能命令により、
前記第１のタスクの実行の出力を取得し、
前記イベントフロー情報に少なくとも部分的に基づいて、前記出力が伝送される、前記１つ以上の被調整デバイスのうちのある被調整デバイスを識別し、
前記被調整デバイスに前記出力を伝送する、
ように構成される、条項８７に記載のコーディネータコンピューティングデバイス。
【０２２３】
条項８９．
前記出力は、ＭＱＴＴ通知として伝送される、条項８８に記載のコーディネータコンピューティングデバイス。
【０２２４】
条項９０．
前記１つ以上の被調整デバイスは、代替的な主要機能と関連付けられた汎用コンピューティングデバイス、シンデバイス、または組み込みデバイスのうちの少なくとも１つを含む、条項８７に記載のコーディネータコンピューティングデバイス。
【０２２５】
条項９１．
被調整環境内で１つ以上の被調整デバイスを管理する命令を含む非一時的コンピュータ可読媒体であって、前記命令は、前記被調整環境と関連付けられたコーディネータコンピューティングデバイスによって実行されるとき、前記コーディネータコンピューティングデバイスに、
前記コーディネータコンピューティングデバイスについての構成パッケージを取得することであって、前記構成パッケージは、前記１つ以上の被調整デバイス、前記１つ以上の被調整デバイスの動作を管理する１つ以上のタスクを識別し、個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、イベントフロー情報は、前記１つ以上の被調整デバイスの第１の被調整デバイスによる入力に応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを指定する、前記取得することと、
ネットワークアクセス可能データストアから、前記構成パッケージにおいて識別されるような、前記１つ以上のタスクを取り出すことと、
前記第１の被調整デバイスから前記入力を取得することと、
少なくとも前記イベントフロー情報から、前記入力に応答して実行されることになる前記１つ以上のタスクの第１のタスクを識別することと、
前記第１のタスクに対応する実行環境を生成することと、
前記実行環境内で前記第１のタスクを実行することと、
を行わせる、前記非一時的コンピュータ可読媒体。
【０２２６】
条項９２．
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、
前記第１のタスクから出力メッセージを取得させ、
第２のタスクまたは前記出力メッセージが伝送される第２の被調整デバイスのうちの少なくとも１つを識別するために、前記イベントフロー情報を参照させ、
前記第２のタスクまたは第２の被調整デバイスのうちの少なくとも１つに前記出力メッセージを伝送させる、
条項９１に記載の非一時的コンピュータ可読媒体。
【０２２７】
条項９３．
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、前記コーディネータコンピューティングデバイスで実行されるルータタスクに前記出力メッセージを渡させ、
前記ルータタスクは、前記少なくとも１つの第２のタスクまたは第２の被調整デバイスを識別するために、前記イベントフロー情報を参照するように実行可能である、条項９２に記載の非一時的コンピュータ可読媒体。
【０２２８】
条項９４．
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、前記コーディネータコンピューティングデバイスでの他のタスクの実行環境から分離されたコンテナとして前記実行環境を生成させる、条項９１に記載の非一時的コンピュータ可読媒体。
【０２２９】
条項９５．
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、前記第１のタスクの実行のために必要とされるデータリソースへのアクセスを前記実行環境にプロビジョニングさせる、条項９４に記載の非一時的コンピュータ可読媒体。
【０２３０】
条項９６．
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、
前記コーディネータコンピューティングデバイスの所望の状態を示すデバイスシャドウサービスにサブスクライブさせ、
前記所望の状態が前記デバイスシャドウサービスにおいて修正されたことを示す通知を取得させ、
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、前記所望の状態が修正されたことの前記通知に応答して、前記構成パッケージを取得させる、条項９１に記載の非一時的コンピュータ可読媒体。
【０２３１】
条項９７．
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、
ワークアイテム待ち行列に、前記第１のタスクへの呼び出しをエンキューさせ、
前記ワークアイテム待ち行列からデキューするための前記第１のタスクを選択するために、前記ワークアイテム待ち行列にスケジューリングアルゴリズムを適用させる、
条項９１に記載の非一時的コンピュータ可読媒体。
【０２３２】
条項９８．
前記第１のタスクは、前記コーディネータコンピューティングデバイスに、
前記第１の被調整デバイスの所望の状態を判定させ、
前記所望の状態を示すように前記第１の被調整デバイスのデバイスシャドウを修正させ、
前記第１の被調整デバイスに前記所望の状態の通知を伝送させる、
ように実行可能なシャドウサービスタスクである、条項９１に記載の非一時的コンピュータ可読媒体。
【０２３３】
条項９９．
前記第１の被調整デバイスへの前記通知は、前記デバイスシャドウに対応するトピックへの前記第１の被調整デバイスによるサブスクリプションに応答して伝送される、条項９１に記載の非一時的コンピュータ可読媒体。
【０２３４】
条項１００．
被調整環境内で１つ以上の被調整デバイスを管理するようにコーディネータコンピューティングデバイスにより実装されるコンピュータにより実行される方法であって、前記コンピュータにより実行される方法は、
前記コーディネータコンピューティングデバイスについての構成パッケージを取得することであって、前記構成パッケージは、前記１つ以上の被調整デバイス、前記１つ以上の被調整デバイスの動作を管理する１つ以上のタスクを識別し、個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、イベントフロー情報は、前記１つ以上の被調整デバイスの第１の被調整デバイスによる入力に応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを指定する、前記取得することと、
ネットワークアクセス可能データストアから、前記構成パッケージにおいて識別されるような、前記１つ以上のタスクを取り出すことと、
前記第１の被調整デバイスから前記入力を取得することと、
少なくとも前記イベントフロー情報から、前記入力に応答して実行されることになる前記１つ以上のタスクの第１のタスクを識別することと、
前記第１のタスクに対応する実行環境を生成することと、
前記実行環境内で前記第１のタスクを実行することと、
を含む、前記コンピュータにより実行される方法。
【０２３５】
条項１０１．
前記第１のタスクから出力メッセージを取得することと、
第２のタスクまたは前記出力メッセージが伝送される第２の被調整デバイスのうちの少なくとも１つを識別するために、前記イベントフロー情報を参照することと、
前記第２のタスクまたは第２の被調整デバイスのうちの少なくとも１つに前記出力メッセージを伝送することと、
を更に含む、条項１００に記載のコンピュータにより実行される方法。
【０２３６】
条項１０２．
前記第２のタスクまたは前記出力が伝送される前記第２の被調整デバイスのうちの少なくとも１つを識別するために、前記イベントフロー情報を参照することは、前記コーディネータコンピューティングデバイスで実行されるルータタスクに前記出力メッセージを渡すことを含み、
前記ルータタスクは、前記少なくとも１つの第２のタスクまたは第２の被調整デバイスを識別するために、前記イベントフロー情報を参照するように実行可能である、条項１０１に記載のコンピュータにより実行される方法。
【０２３７】
条項１０３．
前記第１のタスクに対応する前記実行環境を生成することは、前記コーディネータコンピューティングデバイスでの他のタスクの実行環境とは分離されたコンテナを生成することを含む、条項１００に記載のコンピュータにより実行される方法。
【０２３８】
条項１０４．
前記実行環境に、前記第１のタスクの実行のために必要とされるデータリソースへのアクセスをプロビジョニングすることを更に含む、条項１００に記載のコンピュータにより実行される方法。
【０２３９】
条項１０５．
前記コーディネータコンピューティングデバイスの所望の状態を示すデバイスシャドウサービスにサブスクライブすることと、
前記所望の状態が前記デバイスシャドウサービスにおいて修正されたことの通知を取得することと、を更に含み、
構成パッケージを取得することは、前記通知に少なくとも部分的に基づいて行われる、
条項１００に記載のコンピュータにより実行される方法。
【０２４０】
条項１０６．
前記第１の被調整デバイスの所望の状態を判定することと、
前記所望の状態を示すように前記第１の被調整デバイスのデバイスシャドウを修正することと、
前記第１の被調整デバイスに前記所望の状態の通知を伝送することと、
を更に含む、条項１００に記載のコンピュータにより実行される方法。
【０２４１】
様々な機能性が独立して上記説明されていてもよいが、それらの機能性は、独立してまたはいずれかの組み合わせで実装されてもよいことが予期される。その上、それらの機能性は、上記参照によって組み込まれた、関連出願において説明された機能性、デバイス、または環境と組み合わされてもよいことが予期される。例えば、本明細書で説明されるようなコーディネータコンピューティングデバイスは、受信されたメッセージ（例えば、被調整デバイスからのＭＱＴＴメッセージ）の解釈が、潜在的には特殊化されたメッセージトピックの使用によって、メッセージが転送されるべきデバイスまたはタスクのサブセットを判定することを可能にするように、関連出願において説明された主題を実装してもよい。更なる実施例として、コーディネータコンピューティングデバイスは更に、メッセージが受信側の間で転送されるべきであるかどうかを判定するために、受信されたメッセージ（例えば、被調整デバイスまたはタスク実行からの）内に含まれるセキュリティ情報を利用してもよい。更なる別の実施例として、コーディネータコンピューティングデバイスは、潜在的にはメッセージ本文の検査を必要とすることなく、メッセージ内の（例えば、トピックフィールド内の）組み込みコードの使用が、メッセージの様々な扱いを有効にすることを可能にすることができる。当業者は、本開示を考慮して、本明細書で説明される機能性の多くの組み合わせが可能であることを認識するであろう。
【０２４２】
上記説明された方法およびプロセスの全ては、１つ以上のコンピュータまたはプロセッサにおいて具体化されてよく、１つ以上のコンピュータまたはプロセッサによって実行されるソフトウェアコードモジュールを介して完全に自動化されてよい。コードモジュールは、任意の種類の非一過性のコンピュータ可読媒体または他のコンピュータ記憶装置内に記憶されてよい。方法のいくつかまたはすべては、代わりに専用コンピュータハードウェアで実施されてもよい。
【０２４３】
特に明記しない限り、とりわけ、「できる（ｃａｎ）」、「できるであろう（ｃｏｕｌｄ）」、「可能性がある（ｍｉｇｈｔ）」、または「してよい（ｍａｙ）」等の条件的言語は、そうでなければいくつかの実施形態がある特定の特徴、要素、および／またはステップを含み、一方で他の実施形態が含まないことを示すために概して使用されるとして文脈内で理解される。したがって、そのような条件的言語は、概して、特徴、要素、および／またはステップが、１つ以上の実施形態に任意の方法で要求されるか、または１つ以上の実施形態が、ユーザ入力もしくはプロンプトを用いて、もしくは用いずに、これらの特徴、要素、および／またはステップが含まれるのか、それとも任意の特定の実施形態で行われるべきであるかを決定するための論理を必ず含むことを含意することは意図していない。
【０２４４】
特に明記しない限り、句「Ｘ、ＹまたはＺのうちの少なくとも１つ」などの選言的な言葉は、そうでなければ項目、用語等がＸ、ＹもしくはＺのいずれか、またはその任意の組み合わせ（例えば、Ｘ、Ｙおよび／またはＺ）であってよいことを示すために一般的に用いられるとして文脈の中で理解される。ゆえに、係る選言的言語は、特定の実施形態がＸの少なくとも１つ、Ｙの少なくとも１つまたはＺの少なくとも１つがそれぞれ存在することを必要とすることを暗示することを一般的に意図しておらず、意味するべきではない。
【０２４５】
特に明記しない限り、「ａ」または「ａｎ」等の冠詞は、概して、１つ以上の記載された項目を含むと解釈すべきである。したがって、「〜するように構成された装置」等の語句は、１つ以上の列挙された装置を含むことを目的とする。そのような１つまたは複数の列挙された装置は、記載される詳述を実行するように集合的に構成することもできる。例えば、「列挙Ａ、ＢおよびＣを実行するように構成されたプロセッサ」は、列挙ＢおよびＣを実行するように構成された第２のプロセッサと連動して機能し、列挙Ａを実行するように構成された第１のプロセッサを含む場合がある。
【０２４６】
本明細書に説明する、および／または添付の図面に図示するフロー図のいずれのルーチンの記述、要素、またはブロックも、ルーチンにおける特定の論理的機能または要素を実装するための１つまたは複数の実行可能な命令を含む、モジュール、セグメント、またはコードの部分を潜在的に表すものとして理解されるべきである。代替の実施態様は、本明細書に説明する実施形態の範囲内に含まれ、その中で要素または機能は、当業者によって理解されるであろうように、関係する機能性に応じて、実質的に同時または逆の順序を含む、示されるもの、説明されるものとは異なる順序で削除または実行され得る。
【０２４７】
多くの変形形態および改変形態が上記の実施形態に対して行われ得、それらの要素が他の許容される実施例中にあるものとして理解されることが強調されるべきである。全ての係る変更形態および変形形態が、本開示の範囲内で本明細書に含有され、以下の特許請求の範囲によって保護されることが意図される。
【図１】
0006768158.tif 000002
【図２】
0006768158.tif 000003
【図３Ａ】
0006768158.tif 000004
【図３Ｂ】
0006768158.tif 000005
【図４】
0006768158.tif 000006
【図５】
0006768158.tif 000007
【図６】
0006768158.tif 000008
【図７】
0006768158.tif 000009
【図８】
0006768158.tif 000010
【図９】
0006768158.tif 000011
【図１０】
0006768158.tif 000012
【図１１】
0006768158.tif 000013
【図１２】
0006768158.tif 000014
【図１３】
0006768158.tif 000015
【図１４】
0006768158.tif 000016
【図１５】
0006768158.tif 000017
【図１６】
0006768158.tif 000018