全体的に説明されるように、本開示の態様は、被調整環境内で被調整デバイスの動作および機能性を制御するために被調整環境内に存在するコーディネータに関する。いくつかの例では、被調整デバイスは、別個の主要目的を有する家庭用器具など、少なくとも1つの代替的な主要機能を有する組み込みデバイスまたはシンデバイスに対応してもよい。そのようなデバイスは、いくつかの例では、「モノのインターネット」デバイス、すなわち「IoT」デバイスと称されてもよい。被調整デバイスは、制限されたローカルユーザインタフェース能力を含んでもよく、よって、リモート管理からの利点を有することができる。本明細書で開示されるコーディネータは、コーディネータおよび被調整デバイスを含む環境(ローカルエリアネットワーク、すなわち「LAN」環境など)内で、被調整デバイスのローカルなそのようなリモート管理を可能にする。よって、コーディネータの使用は、ローカル環境の外部の通信を必要とすることなく、被調整デバイスの管理を可能にすることができ、それによって、プライバシリスクにおける減少を可能にし、外部またはパブリック通信ネットワークの使用を通じて通信速度における増大を可能にする。特に、本開示の態様は、コードのポータブルセグメントの即時的な実行がコーディネータ上で機能を実装することを可能にする、局所化されたオンデマンドコード実行システムとしてのコーディネータの利用に関する。コードのそれらのポータブルセグメントは、本明細書で「タスク」と称されてもよい。いくつかの例では、タスクは、デバイスの状態を変更することによってなど、被調整デバイスの機能性を調整するために利用されてもよい。例えば、被調整デバイスがネットワーク対応照明である場合、タスクは、現在時間、ユーザ入力、または別の被調整デバイスの状態など、コーディネータへの入力に従って照明の状態を変更するように機能してもよい(例えば、「オン」または「オフ」にする)。コーディネータは更に、いくつかの異なるプロトコルに従って被調整デバイスとタスクとの間の通信を可能にすることができ、いくつかの例では、そのようなプロトコルの間の変換機能を提供することができる。また更に、コーディネータは、いくつかの例では、タスクの実行位置を管理してもよく、その結果、タスクは、候補デバイスの能力およびタスクの実行についての要件に従って、コーディネータ上で、被調整デバイス上で、またはリモート環境(例えば、リモートネットワークコンピューティング環境)のデバイス上で実行されてもよい。それらのタスクは、いくつかの例では、ユーザによって定義されてもよく、タスクに対応するユーザによりサブミットされたコードに従って、ユーザがコーディネータまたは被調整デバイス上で様々な機能性を実装することを可能にする。よって、コーディネータは、被調整デバイスの即時的に再構成可能な局所化された管理を提供することができる。
いくつかの例では、コーディネータは、「デバイスシャドウ」を介して被調整デバイスの状態を管理してもよい。概して、デバイスシャドウは、被調整デバイスからリモートの位置に記憶されるように(例えば、コーディネータまたはリモートデバイスシャドウサービス)、被調整デバイスの所望の状態のデータ表現に対応してもよい。被調整デバイスは、デバイスシャドウによって表された状態と同期するように構成されてもよく、よって、デバイスシャドウへの変更が被調整デバイスの状態における対応する変更を生じさせると予測されてもよい。いくつかの例では、被調整デバイスおよび対応するシャドウの同期は、プロトコルが本分野において既知である、MQTTプロトコルなど、「発行/サブスクライブ」モデル通信プロトコルを介して行われてもよい。したがって、被調整デバイスは、その被調整デバイスについてデバイスシャドウに「サブスクライブ」してもよい。コーディネータは次いで、デバイスシャドウに「発行」する要求を介して、デバイスシャドウの状態への所望の変更を取得してもよい。コーディネータは、通信プロトコルを介して、被調整デバイスにデバイスシャドウの状態における変更を通知してもよく、被調整デバイスは、デバイスシャドウの状態にローカル状態を同期することによって応答してもよい。デバイスシャドウの使用は、例えば、被調整デバイスとの通信から被調整デバイスの状態を読み出しまたは修正する要求を分離する際に有益である場合がある。実例として、被調整デバイスの状態を読み出しまたは修正する要求は、デバイスシャドウを読み出しまたは修正することに関して即刻で成功すると考えられてもよい。被調整デバイスに必要ないずれかの変更は次いで、被調整デバイスとシャドウデバイスとの間の通信プロトコルに従って、要求に対して非同期に行われてもよい。デバイスと対話する要求がデバイスとの実際の通信から分離されることがあることを理由に、それらの要求およびデバイス通信は、異なる通信プロトコルをも利用してもよい。例えば、デバイスシャドウを介してデバイス状態を読み出しまたは修正する要求は、伝送制御プロトコル(TCP)などの高オーバヘッド、高信頼性プロトコルに従って伝送されてもよく、デバイスシャドウと被調整デバイスとの間の通信は、MQTTなどの低オーバヘッドプロトコルを介して行われてもよい。被調整デバイスに通信を伝送するMQTTに関する更なる詳細は、その全体が参照によって本明細書に組み込まれる、「EXECUTING REMOTE COMMANDS」と題し、2016年8月26日に出願された米国特許出願第15/249,213号(「213出願」)において見出すことができる。いくつかの例では、デバイスシャドウの利用は、被調整デバイスによって使用される計算リソースを削減することなど、他の利点をもたらすことができる。例えば、被調整デバイスは、被調整デバイスの状態を読み出す要求が対応するデバイスシャドウのホスト(例えば、被調整デバイス)によって扱われることができるように、そのような要求を処理することが必要とされず、更にはそのような要求を認識することが必要とされなくてもよい。デバイスシャドウの使用に関する更なる詳細は、その全体が参照によって本明細書に組み込まれる、「Device Representation Management Using Representation Types」と題し、2016年6月29日に出願された米国特許出願第15/196,700号(「700出願」)において見出すことができる。
本開示の実施形態に従って、コーディネータは、サービスプロバイダの環境を介してコーディネータの構成を変えることができる、ユーザと関連付けられてもよい。実例として、サービスプロバイダ環境は、コーディネータのプロバイダによって運営されてもよく、コーディネータに対する被調整環境の位置、環境内の被調整デバイス、コーディネータによって実行可能なタスク、コーディネータがデバイスの間の通信、タスクの間の通信、もしくはデバイスとタスクとの間の通信をどのように管理するべきか、コーディネータについてのセキュリティ情報、またはコーディネータの他のパラメータ(コーディネータにおいて監視されることになる測定基準、もしくはコーディネータにおいて行われることになるロギングなど)など、コーディネータの様々な構成パラメータをユーザが指定することを可能にすることができる。コーディネータ自体が、いくつかの例では、制限された局所化されたユーザインタフェースと関連付けられることがあることを理由に、サービスプロバイダ環境は、ユーザが、クライアントデバイスを介して、コーディネータについての構成をサブミットさせることを可能にすることができ、コーディネータに構成を自動的にプロビジョニングさせるようにすることを可能にすることができる。サービスプロバイダ環境は更に、単一のクライアントデバイスが、統一したインタフェースを介して複数のコーディネータを管理することを可能にすることができ、新たな構成を配置することによって、またはコーディネータへの構成の前の配置をロールバックもしくは取り消すことによって、コーディネータの構成を素早く変えることを可能にすることができる。
いくつかの例では、サービスプロバイダ環境は、コーディネータの機能性と類似または同一の機能性を提供することができる。例えば、コーディネータは、コードのポータブルセグメント、すなわち「タスク」の実行に少なくとも部分的に基づいて機能してもよい。同様に、サーバプロバイダ環境は、同一または類似のタスクを実行するように機能するオンデマンドコード実行環境を含んでもよい。そのようなオンデマンドコード実行環境に関する更なる詳細は、その全体が参照によって以下に組み込まれる、「PROGRAMMATIC EVENT DETECTION AND MESSAGE GENERATION FOR REQUESTS TO EXECUTE PROGRAM CODE」と題し、2014年9月30日に出願された米国特許第9,323,556号(「556特許」)において見出すことができる。要するに、タスクを実行するために、オンデマンドコード実行環境は、ユーザ要求が受信されるとできるだけ早く使用する準備ができている、事前に初期化された仮想マシンインスタンスのプールを維持してもよい。それらの仮想マシンの事前に初期化された性質に起因して、ユーザコードを実行することと関連付けられた遅延(待ち時間と称されることがある)(例えば、インスタンスおよび言語ランタイム起動時間)は、著しく減少されることができ、100ミリ秒のサブレベルまで減少されることが多い。実例として、オンデマンドコード実行環境は、1つ以上の物理コンピューティングデバイス上で仮想マシンインスタンスのプールを維持してもよく、各々の仮想マシンインスタンスは、そこにロードされた1つ以上のソフトウェア構成要素(例えば、オペレーティングシステム、言語ランタイム、ライブラリなど)を有する。オンデマンドコード実行環境が、ユーザのプログラムコードを実行するための1つ以上の計算上の制約を指定する、ユーザのプログラムコード(「タスク」)を実行する要求を受信するとき、オンデマンドコード実行環境は、要求によって指定された1つ以上の計算上の制約に基づいて、ユーザのプログラムコードを実行するための仮想マシンインスタンスを選択してもよく、選択された仮想マシンインスタンス上でユーザのプログラムコードを実行させてもよい。プログラムコードは、仮想マシンインスタンス上で作成された、分離されたコンテナ内で実行されることができる。要求が受信されるときまでに、プール内の仮想マシンインスタンスが特定のオペレーティングシステムおよび言語ランタイムにより既にブートおよびロードされているので、要求を扱うことができる(例えば、仮想マシンインスタンス上で作成された1つ以上のコンテナ内でユーザコードを実行することによって)発見計算能力と関連付けられた遅延は、著しく減少される。オンデマンドコード実行環境は、「556特許」において更に詳細に説明されるように、ユーザコード(様々なプログラミング言語のいずれかにおいて構成されたスレッド、プログラムなど)を受信し、仮想マシンインスタンスのユーザ構成を必要とすることなく、高度にスケーラブルな、低待ち時間の方式でコードを実行するように構成された仮想マシンインスタンスマネージャを含んでもよい。特に、仮想マシンインスタンスマネージャは、ユーザコードを受信する前に、およびいずれかの特定の仮想マシンインスタンス構成に関するユーザからのいずれかの情報を受信する前に、各々が様々なランタイム環境のうちのいずれか1つ以上に対応する、構成の予め定められたセットに従って仮想マシンインスタンスを作成および構成することができる。その後、仮想マシンインスタンスマネージャは、コードを実行するユーザによって開始された要求を受信し、要求と関連付けられた構成情報に基づいて、コードを実行するように事前構成された仮想マシンインスタンスを識別する。仮想マシンインスタンスマネージャは更に、少なくとも部分的に、割り当てられた仮想マシンインスタンスの内部でコンテナを作成および構成することによって、ユーザのコードを実行するために、識別された仮想マシンインスタンスを割り当てることができる。仮想マシンインスタンスマネージャを実装し、仮想マシンインスタンス上でユーザコード実行する様々な実施形態は、「556特許」において更に詳細に説明される。
コーディネータによって実装されるようなオンデマンドコード実行環境が「556特許」において説明されるオンデマンドコード実行環境(例えば、データセンタにおいて実装されることがある)よりも更に制限された計算リソースと関連付けられることがあることを理由に、コーディネータは、タスク実行の優先付けを支援するようにスケジューラを実装してもよい。特に、スケジューラは、タスクを実行する呼び出しを受信し、ワークアイテム待ち行列上にワークアイテムとしてそのような呼び出しをエンキューする。スケジューラは次いで、スケジューリングアルゴリズムに従って、ワークアイテム待ち行列から呼び出しを選択的にデキューしてもよい。いずれかの数のスケジューリングアルゴリズムは、各々が本分野において既知である、ファーストインファーストアウトスケジューリング、最先デッドラインファーストスケジューリング、最短残り時間スケジューリング、固定優先度プリエンプティブスケジューリング、およびラウンドロビンスケジューリングなど、スケジューラによって利用されてもよい。実例として、各々のスケジューリングアルゴリズムは、コーディネータに対して利用可能な計算リソースの量、およびタスク呼び出しを完了するために必要なリソースの量(例えば、タスクの著者もしくはコーディネータの管理者によって設定されてもよく、またはタスクの静的もしくは動的分析に基づいて推定されてもよい)に基づいて実装されてもよい。いくつかの例では、スケジューリングアルゴリズムは、タスクの著者によって、コーディネータの管理者によって、呼び出しエンティティによってなど、タスクに割り振られた優先度にも少なくとも部分的に基づいてもよい。スケジューラは、スケジューリングアルゴリズムに従ってワークアイテムの待ち行列を処理してもよく、タスク呼び出しがデキューのために選択されるとき、呼び出しに対応するタスクを実行することによって(例えば、呼び出しのパラメータに従って)、タスク呼び出しを完了させてもよい。
タスクの実行を支援するために、コーディネータは更に、コーディネータにおいて計算リソース使用量の状態を監視し、タスクが実行する実行環境の生成、破壊、および維持を管理するためのリソースマネージャを含むことができる。実行環境は、タスク実行に論理的に割り当てられたメモリのいずれかの部分を含むことができる。実例として、実行環境は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「chroot jail」もしくはPython仮想環境「virtualenv」などの「サンドボックス」環境に対応してもよい。他の例では、実行環境は、仮想マシン環境(例えば、JAVA仮想マシン、別個のオペレーティングシステムを有する仮想化されたハードウェアデバイスなど)に対応してもよい。更なる他の例では、実行環境は、仮想化を必ずしも利用しない、タスクの実行に割り当てられたメモリ空間であってもよい。実例として、リソースマネージャは、ワークアイテム待ち行列からどのタスク呼び出しをデキューするかをスケジューラが判定することを可能にするために、利用可能なメモリの量、プロセッササイクル(例えば、中央処理装置、グラフィカルプロセシングユニットなどの)、ネットワーク帯域幅、または他のコンピューティングリソースなど、コーディネータについての現在の計算リソース可用性情報をスケジューラが取り出すことを可能にすることができる。いくつかの例では、リソースマネージャは、スケジューラに、コーディネータにおいて行われる現在のタスク実行のリストなど、他の情報を提供してもよい。リソースマネージャは更に、タスク呼び出しが渡される実行環境を取得するスケジューラからの要求を受信および処理してもよい。実例として、各々のタスクが別個の実行環境において実行され、所与のタスクに対して実行環境が存在しない場合、リソースマネージャは、所与のタスクの実行のために必要なリソースを判定してもよく(プロセッサ能力およびメモリのような、基本的な計算リソースの観点からと共に、ドライバ、ランタイム、ユーティリティ、依存関係など、ソフトウェアリソースの観点から)、そのようなリソースを提供するために実行環境を生成してもよい。リソースマネージャは次いで、スケジューラに、実行環境についての識別情報を返却してもよく、その結果、スケジューラは、実行環境に、タスクを実行する呼び出しを渡してもよい。いくつかの例では、リソースマネージャは、既存の実行環境の再利用をも可能にすることができる。例えば、コーディネータの共通して使用される機能性に対応するタスクなどのいくつかのタスクは、実行環境がタスクに対して事前生成されるように「固定」されてもよい。よって、リソースマネージャがタスクに対して実行環境を生成する要求を受信するとき、事前生成された環境についての識別情報が返却されてもよく、実行環境を生成するために必要とされる時間およびコンピューティングリソースを減少させる。いくつかの例では、実行環境は、2つの異なるタスクが実行のために同一または類似のリソースを必要とするときなど、タスクにわたって再利用されてもよい。そのような例では、リソースマネージャは、実行の間のセキュリティを保証するために、異なるタスクの実行の間で実行環境を「消去」してもよい。以下で更に詳細に説明されるように、リソースマネージャは更に、実行環境の中断および再開を可能にすることができ、その結果、低優先度タスクの実行環境は、高優先度タスクに計算リソースを解放するように中断されてもよく、スケジューリングアルゴリズムに従って再開してもよい。
上記議論されたように、コーディネータは、いくつかの例では、ローカルに(例えば、コーディネータ上で)、またはサービスプロバイダネットワーク内でオンデマンドコード実行環境の使用によってタスクを実行するかどうかを選択するように構成されてもよい。更なる実施例として、コーディネータおよびサービスプロバイダ環境の両方は、被調整デバイスに対応するデバイスシャドウを提供してもよく、ユーザは、コーディネータによってホストされたデバイスシャドウまたはサービスプロバイダ環境内でホストされたデバイスシャドウのいずれかまたは両方を変更する要求をサブミットしてもよい。そのような例では、コーディネータは、所与の被調整デバイスに対応する様々なデバイスシャドウと共に、被調整デバイス自体を同期するように機能してもよい。例えば、コーディネータおよびサービスプロバイダ環境は、バージョンベクトルまたはベクトルクロックプロトコルを実装してもよく、その結果、コーディネータは、それぞれのコーディネータおよびサービスプロバイダ環境においてデバイスシャドウにおけるデバイスシャドウへの変更の順序付けを検出することができる(例えば、所与の順序での順次変更として、または同時変更として)。コーディネータは次いで、そのような変更に応答して、コーディネータにおいてデバイスシャドウの状態を確立するルール(潜在的に構成可能な)を実装してもよい。例えば、コーディネータは、コーディネータおよびサービスプロバイダ環境におけるそれぞれのデバイスシャドウへの順次変更が、コーディネータのデバイスシャドウに関する順次変更であるように、コーディネータのデバイスシャドウを更新させるように(例えば、そのような変更が行われるかに関わらず、変更bの前に変更aが行われる場合、変更aがコーディネータのデバイスシャドウに適用され、次いで、変更bが適用されるように)構成されてもよい。コーディネータは更に、予め定められ、および潜在的に構成可能な方式で同時変更を解決するように構成されてもよい。実例として、コーディネータは、同時変更がコーディネータのデバイスシャドウおよびサービスプロバイダ環境のデバイスシャドウに対して行われる場合、両方の変更が、それらが矛盾しない限り(例えば、両方の変更がデバイスシャドウ内で維持された同一の値を修正しようとしない)維持されるべきであると判定してもよい。更なる実例として、コーディネータは、矛盾する変更がコーディネータのデバイスシャドウおよびサービスプロバイダ環境のデバイスシャドウに対して行われる場合、コーディネータのデバイスシャドウへの変更が維持されるべきであり、サービスプロバイダのデバイスシャドウへの変更が放棄されるべきであると判定してもよい。同時修正に対処する様々な他の機構が当業者によって認識されよう。
いくつかの実施形態では、コーディネータは、コーディネータ上で実行する異なるタスクの間の通信、またはコーディネータ上で実行するタスクとリモート環境(例えば、オンデマンドコード実行システム)内で実行するタスクとの間の通信を促進するように実行可能なコードを含む、通信マネージャを含んでもよい。実例として、通信マネージャは、標準化されたインタフェースを提供してもよく、標準化されたインタフェースを通じて、タスク実行は、タスクを実行する呼び出しまたはタスク実行の出力などの情報を交換することができる。通信マネージャは、いくつかのプロトコルをサポートすることができ、その結果、タスクは、タスクの間の潜在的な不一致に関わらず、相互に通信することができる。例えば、一般的に、異なるプログラミング言語で記述されたタスクが相互間で情報を伝送し、またはコーディネータ(タスクの実行を促進するスケジューラなど)上で実行する他のコードと対話することは困難である場合がある。通信マネージャは、ハイパーテキスト転送プロトコル(HTTP)など、公知のプロトコルを介して、そのような通信を促進するインタフェースを提供してもよい。例えば、第1のタスク実行は、通信マネージャに、第2のタスクを実行する要望を示すHTTP要求を伝送してもよい。通信マネージャは次いで、第1のタスク実行を認証し、呼び出しのフォーマットおよびコンテンツを検証することによってなど、呼び出しの正当性を確認してもよく、有効である場合、コーディネータ上で処理するためにスケジューラに呼び出しを伝送してもよい(例えば、スケジューラのAPIを介して)。いくつかの例では、通信マネージャはまた、第2のタスクの結果として生じる実行の出力の返却を促進してもよく、第1のタスク実行に出力を返却してもよい。例えば、通信マネージャは、第1のタスク実行によって伝送された初期のHTTP要求に実行識別子を割り振ってもよく、第2のタスク実行の結果を取得すると、第1のタスク実行に出力の通知を伝送してもよい。他の例では、通信マネージャは、呼び出しタスクがタスク実行の状態についてクエリすることを可能にすることができる。例えば、第2のタスク実行を呼び出す第1のタスク実行は、通信マネージャに、所与の実行識別子に対応する出力についてのクエリを伝送してもよく、通信マネージャは、利用可能である場合、その出力を返却してもよい。いくつかの例では、通信マネージャは、加えてまたは代わりに、実行識別子に対応するタスクの状態など(例えば、実行している、成功して実行した、エラーをもたらしたなど)、他の情報を返却してもよい。上記述べた利点に加えて、通信マネージャの使用は、タスク実行の待ち行列から生じる通信における遅延、通信待ち時間などを扱うことによって、ロバストな非同期タスク内通信を提供することができる。その上、通信マネージャの使用は、様々なタスクによってサポートされるプロトコルに従って複数のプロトコルの使用を可能にすることができる。例えば、通信マネージャは、HTTP1.1およびHTTP2.0プロトコルの両方をサポートすることができ、タスクが異なるプロトコルに従って相互に通信することを可能にすることができる。新たなプロトコルが実装されるにつれて、通信マネージャは、それらの新たなプロトコルをサポートすると共に、旧プロトコルとの互換性を維持するように更新されてもよい。よって、通信マネージャは、タスク内通信における実質的な柔軟性をもたらすことができる。
いくつかの例では、通信マネージャはまた、リモートオンデマンドコード実行システム上でなど、コーディネータの外部で実行するタスクとの通信を促進してもよい。概して、リモートオンデマンドコード実行システムからコーディネータへの通信(または、コーディネータ上で実行するタスク)は、コーディネータからリモートオンデマンドコード実行システムへの通信よりも困難である場合がある。実例として、リモートオンデマンドコード実行システムは、外部ソースからの通信に基づいて主に動作するネットワーク上で実装されてもよく、そのような通信をサポートするように構成されてもよい(例えば、ドメインネームサービス(DNS)プロバイダへの登録、専用ネットワーク接続の使用、外部をソースとした通信を可能にするセキュリティポリシの実装などを介して)。しかしながら、コーディネータは、プライベートネットワークに内で動作してもよく、外部をソースとした通信は、信頼できないものである場合がある。例えば、プライベートネットワークは、ロバストな、信頼でき、および専用ネットワーク接続を利用しなくてもよく、DNSプロバイダを利用しなくてもよく(または、静的ネットワークアドレスを有する)、外部をソースとした通信を抑制する制限的なセキュリティポリシを実装してもよい。それらの問題に対処するために、コーディネータは、リモートオンデマンドコード実行システムなど、外部通信ソースとの通信を可能にするリモートインタフェースを実装してもよい。1つの実施形態では、リモートインタフェースは、コーディネータ上のタスクとして実装されてもよく、外部通信ソースとの通信を開始するように実行してもよい。そのような通信がリモートインタフェースによって開始されることができることを理由に、プライベートネットワーク上での、静的ネットワークアドレスの欠如、制限的なセキュリティポリシ、またはネットワークアドレス変換の使用などの問題は、少なくとも部分的に軽減されることができる。その上、リモートインタフェースは、プライベートネットワークの信頼性における問題に対処する、待ち時間およびエラー耐性通信を提供することができる。実例として、リモートインタフェースは、リモートオンデマンドコード実行システムから、コーディネータ上で実行されることが必要とされるタスクのセットを定期的に取り出してもよく、コーディネータ上でタスクのセットを実行させてもよい(例えば、上記説明されたように、通信マネージャに要求を伝送することを介して)。リモートインタフェースは更に、タスクのセットの実行の出力を取得してもよく、リモートオンデマンドコード実行環境に出力を返却してもよい。よって、リモートインタフェースは、コーディネータとリモートオンデマンドコード実行環境との間の通信を促進することができる。
本開示を考慮して当業者の一人によって認識されるように、本明細書で開示される実施形態は、コンピューティングシステム、特に、外部デバイスによって調整および管理されることになる、制限された局所化されたユーザインタフェースを有するコンピューティングシステムの能力を改善する。特に、本開示は、信頼できる方式で被調整環境内でデバイスを調整および管理するように高度に構成可能なコーディネータを提供すると共に、外部通信ネットワークまたはパブリック通信ネットワークを介した通信に対する必要性を削減または除去することができる。よって、本明細書で開示される実施形態は、被調整デバイスの更なる応答制御を提供すると共に(例えば、通信の待ち時間が減少することに起因して)、被調整デバイスにおいてセキュリティを高める(例えば、パブリックネットワークを介して通信する必要性がないことに起因して)。よって、本開示は、概して、既存のデータ処理システムおよびコンピューティングシステムに対する改善を表す。
その上、本明細書で開示されるコーディネータは、いくつかの状況で利用されてもよく、先行のシステムよりも多数の利点をもたらすことができる。例えば、多くの例におけるローカル通信ネットワーク(例えば、ローカルエリアネットワーク、すなわち「LAN」)が非ローカルネットワーク(例えば、ワイドエリアネットワーク、すなわち「WAN」)よりも高い帯域幅および低い待ち時間をもたらすことができることを理由に、本明細書で開示されるようなコーディネータの使用は、他に不可能または実用的でないデータ処理アプリケーションを可能にし、または実用的にすることができる。例えば、いくつかの現在のネットワークに基づくデータ分析システムは、様々なネットワーク接続されたデバイスからデータの制限された部分を収集し、それらの制限された部分を分析して(例えば、機械学習アルゴリズムに従って)、ネットワーク接続されたデバイスに関する集約データまたは予測的データを生成することによって動作する。例えば、自動車製造業者は、その自動車の動作に関する制限されたデータを収集してもよく、それらの自動車についての支援運転技術の開発を支援するようにデータを分析してもよい。しかしながら、そのような分析は一般的に、動作の間に自動車によって作成されたデータの量が典型的には、ネットワーク結合された分析サービスにそのようなデータを伝送するために利用可能な帯域幅を上回るので、制限されたデータセットに基づいている。そのような自動車にローカルなコーディネータの利用によって、分析(例えば、機械学習アルゴリズムの適用)が、自動車によって生成されたデータの多くの部分、または潜在的に全てに適用されてもよい。そのような分析の出力が分析されたデータよりも小さいことがあることを理由に、そのような出力は次いで、他の個々の自動車の出力と組み合わせまたは集約するために、ネットワーク結合された分析サービスに提供されてもよい。よって、コーディネータの使用は、自動車とネットワーク結合された分析サービスとの間の制限された帯域幅に過度な負荷をかけることなく、自動車のデータのより大きな分析を可能にすることができる。様々な他の局所化されたデータ処理アプリケーションが可能であり、本出願の範囲内である。例えば、常時オンデバイスが環境を監視し、そのような環境内での特定の出来事を記録または報告することよる仕事が課されることができる(例えば、カメラは記録を開始する動き検出またはその記録の長期保存を利用してもよい)複数のシナリオが存在する。本明細書で説明されるようなコーディネータは、そのような記録を行うことができる出来事を動的に変える能力、またはそのような出来事を検出するために行われる分析を提供することができる。例えば、カメラがコーディネータによって管理される場合、カメラは、コーディネータに記録を定期的に提供してもよく、コーディネータは、ユーザにより定義されたタスクに従って記録を分析してもよく、記録をローカルに記憶し、記録において検出された出来事を第三者に通知し、ネットワークアクセス可能な記憶装置に記録をアップロードすることなど、タスクによって定義されるように適切なアクションをとってもよい。そのような分析およびアクションは、本明細書で説明されるように、コーディネータを再構成することによって変化してもよい。よって、本出願のコーディネータは、被調整デバイスの高度に構成可能な、局所化された管理および制御を提供することができる。
本開示の上述した態様および付随する利点の多くは、添付図面と併用するとき、以下の説明を参照することによってより良好に理解されるのと同様に、更に容易に認識されよう。
図1は、コーディネータ114が被調整デバイス112を制御するように動作することができる1つ以上の被調整環境110を含み、被調整環境110と対話することができる(例えば、被調整デバイス112の状態における変更を要求するために)クライアントデバイス102、および様々な被調整環境110内でコーディネータ114との通信またはコーディネータ114の構成を支援することができるサービスプロバイダ環境120を含む、例示的な動作環境100のブロック図である。
被調整環境110、クライアントデバイス、およびサービスプロバイダ環境120は、ネットワーク104を介して通信してもよく、ネットワーク104は、いずれかの有線ネットワーク、無線ネットワーク、またはそれらの組み合わせを含んでもよい。例えば、ネットワーク104は、パーソナルエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、オーバージエアブロードキャストネットワーク(例えば、無線機もしくはテレビのための)、ケーブルネットワーク、サテライトネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであってもよい。更なる実施例として、ネットワーク104は、インターネットなど、場合によっては様々な別個の当事者によって運営される、リンクされたネットワークの公然にアクセス可能なネットワークであってもよい。いくつかの実施形態では、ネットワーク104は、企業または大学のイントラネットなど、プライベートまたは準プライベートネットワークであってもよい。ネットワーク104は、グローバルシステムフォーモバイルコミュニケーションズ(GSM)ネットワーク、符号分割多重アクセス(CDMA)ネットワーク、ロングタームエボリューション(LTE)ネットワーク、またはいずれかの他のタイプの無線ネットワークなど、1つ以上の無線ネットワークを含んでもよい。ネットワーク104は、インターネットまたは他の上述したタイプのネットワークのいずれかを介して通信するためのプロトコルおよび構成要素を使用することができる。例えば、ネットワーク104によって使用されるプロトコルは、ハイパーテキスト転送プロトコル(HTTP)、HTTPセキュア(HTTPS)、MQTT、およびコンストレイントアプリケーションプロトコル(CoAP)などを含んでもよい。インターネットまたは他の上述したタイプの通信ネットワークのいずれかを介して通信するためのプロトコルおよび構成要素は、当業者にとって公知であり、よって、本明細書で更に詳細には説明されない。
本明細書で開示されるいくつかの実施形態は、そのようなプロトコルの標準的な実装態様に従って、MQTTなどの既知のプロトコルを利用してもよく、他の実施形態は、そのようなプロトコルの実装態様を変化させてもよい。例えば、標準化されたMQTTは、「キープアライブ」機能性を利用することができ、それによって、クライアントおよびブローカは、閾値期間(「キープアライブ」閾値)内に標準データもしくは特殊化されたキープアライブメッセージ(例えば、MQTTピング)のいずれかを交換する必要があり、または接続が断たれると想定される。しかしながら、特殊化されたキープアライブメッセージによって生じたオーバヘッドは、被調整環境112内では望ましくない場合がある。よって、本出願のいくつかの実施形態は、可変なキープアライブ閾値を実装してもよく、それによって、通信においてエラーが発生するまで、キープアライブメッセージが伝送されるにつれて、キープアライブ閾値が増大する。実例として、第1のキープアライブ閾値が満了し、キープアライブメッセージのクライアントの伝送をもたらし、クライアントがブローカからキープアライブ応答を取得する場合、クライアントは、後続の伝送のために、潜在的に最大量に到達する、何らかの量だけ(例えば、50%、nミリ秒など)キープアライブ閾値を増大させてもよい。第1のキープアライブ閾値が満了し、キープアライブメッセージのクライアントの伝送をもたらし、クライアントがブローカからキープアライブ応答を取得しない場合、クライアントは、後続の伝送のために、何らかの量だけ(例えば、50%、nミリ秒など)またはデフォルトの最小値までキープアライブ閾値を減少させてもよい。よって、キープアライブメッセージが伝送および確認応答されるにつれて、後続の伝送のためのキープアライブ閾値は、増大することができ、そのような伝送をサポートするために使用される帯域幅を減少させる。MQTTへのそれらの変形は特に、低帯域幅または高輻輳を有する環境110において有益となる場合がある。
各々の被調整環境110は、実行環境110のネットワーク(ネットワークは図1には示されない)を介して通信する、コーディネータ114およびいずれかの数の被調整デバイス112を含んでもよい。被調整環境110内のそれらの関連付けを理由に、所与の環境110内の被調整デバイス112およびコーディネータ114は、通信ネットワークの点で、相互に「ローカル」であると考えられてもよい。例えば、所与の環境110内の被調整デバイス112およびコーディネータ114は、LANまたは他の局所化された通信ネットワークを介して接続されてもよい。被調整デバイス112およびコーディネータ114は、本明細書で説明される実施形態に従って、そのような局所化された通信ネットワークを通じて相互に通信してもよい。いくつかの例では、被調整デバイス112とコーディネータ114との間の通信は、トランスポートレイヤセキュリティ暗号化プロトコルを介してなどで暗号化されてもよい。実例として、コーディネータ114は、コーディネータのデジタル識別を検証するセキュリティ証明書をプロビジョニングされてもよい。セキュリティ証明書は、パブリック証明書機関またはプライベート証明書機関(例えば、サービスプロバイダ環境120によって確立された)によって署名されてもよい。
各々の被調整デバイス112は、コーディネータ114と通信して、被調整デバイス112の機能性を管理するように構成されたコンピューティングデバイスに対応することができる。いくつかの例では、被調整デバイス112は、ロバストな局所化されたユーザインタフェース能力を有する、ラップトップ、デスクトップ、スタンドアロンメディアプレイヤなど、十分な機能を有するコンピューティングデバイスに対応することができる。他の例では、被調整デバイス112は、家庭用器具またはデバイス(冷蔵庫、洗濯機、湯沸し器、加熱炉、ドアロック、照明バルブ、電機コンセント、電気スイッチなど)内にアクセサリとして組み込まれまたはそれらに結合されたデバイスなど、別の主要機能と関連付けられたシンデバイスまたは組み込みデバイスに対応することができる。そのような器具またはデバイスは、いくつかのコンテキストでは、「スマート」デバイス、IoTデバイス、または「接続された」デバイスと称される。そのようにして、被調整デバイス112は、制限されたローカルユーザインタフェースを含んでもよく、リモート管理のために構成されてもよい。いくつかの例では、被調整デバイス112は、ステートフルであってもよく、命令に応答してそれらの状態を変えるように動作してもよい(例えば、「オフ」から「オン」に変化させることによってなど)。
以下で更に詳細に説明されるように(例えば、図2に関して)、コーディネータ114は、被調整デバイス112に伝送された命令が被調整環境110の外側に伝わることなく(よって、そのような命令のセキュリティを増大させ、それらの伝送の速度を増大させる)、被調整デバイス112の動作を調整、管理、または制御する命令を実行するコンピューティングデバイスに対応することができる。特に、コーディネータ114は、被調整デバイス112、クライアントデバイス102、およびサービスプロバイダネットワーク120のデバイスのいずれかの組み合わせの間の通信を管理するように集合的に構成されたプロセッサおよびメモリを含むことができる。コーディネータは更に、サービスプロバイダ環境120のオンデマンドコード実行環境120に類似の方式で、タスクの実行を可能にするように構成されることができる。それらのタスクは、被調整デバイス112、クライアントデバイス102、およびサービスプロバイダネットワーク120のデバイスと通信することを含む、様々なユーザにより定義された機能性またはユーザにより定義されていない機能性を実装してもよい。よって、コーディネータ114は、被調整デバイス112の手動、自動、または準自動制御を可能にするように構成されることができる。例えば、コーディネータ114は、クライアントデバイス102が、被調整デバイス112の状態を変更する要求を伝送することを可能にすることができ、状態におけるそのような変更を生じさせることができる。更なる実施例として、コーディネータ114は、被調整デバイス112の状態が変更されるべき基準をユーザが指定することを可能にすることができ、次いで、基準が満たされるときに被調整デバイス112の状態を自動で変更するように動作してもよい。
以下で議論されるように、コーディネータ114の多くの機能は、タスクを介して確立されてもよく、ユーザによって要求されるようにそれらの機能の即時的な変更を可能にする。いくつかの例では、そのようなタスク(または、ライブラリ、ドライバなど、そのようなタスクの依存関係)は、コーディネータのユーザによって提供されてもよい。他の例では、そのようなタスクは、サービスプロバイダ環境120によってコーディネータ114に提供されてもよい。例えば、サービスプロバイダ環境150は、コーディネータ114と共に、そのようなタスクが適用することができるタイプの被調整デバイス112(例えば、全てのデバイス、特定のデバイスモデル、特定の製造者、タイプ、または機能のデバイスなど)に利用可能なタスクのライブラリを維持してもよい。サービスプロバイダ環境150は次いで、コーディネータ114に、コーディネータ114の被調整環境110内で被調整デバイス112に対して適切な全てもしくはいくつかのタスクを提供してもよく、またはユーザにそのようなタスクの可用性を通知してもよい。1つの実施形態では、ユーザは、サービスプロバイダ環境150またはコーディネータ114に、被調整環境110内の被調整デバイス112について通知してもよい。別の実施形態では、コーディネータ114は、それらのデバイスの伝送に基づいて、被調整環境110内の被調整デバイス112の特性を判定するように構成されてもよい。実例として、被調整デバイス112から通信を受信すると(例えば、自動化された伝送に基づいて、ユーザにより開始されたペアリングに応答して)、コーディネータ114は、伝送のコンテンツもしくはフォーマットを、フォーマットもしくはコンテンツを異なるデバイス時間とマッピングする情報と比較してもよい。そのようなマッピングは、サービスプロバイダ環境150によって維持されてもよく、様々なコーディネータ114から収集されたデータに基づいて更新されてもよい。いくつかの例では、伝送をデバイスタイプとマッピングするのではなく、コーディネータ114は、デバイス112のタイプが既知であるかどうかに関わらず、伝送をデバイス112に対して適切なタスクとマッピングするように機能してもよい。例えば、サービスプロバイダ環境150は、1つ以上の被調整デバイス112により確立された環境110について、そのようなデバイス112の伝送のコンテンツまたはフォーマット、およびそのようなデバイス112の動作を管理するように利用されるタスクを識別するデータを収集してもよい。その後、新たに作成された被調整環境110は、同一または類似の伝送について監視されてもよく、確立された環境110内でのタスク利用は、新たに作成された環境110内での潜在的な使用のために提示されてもよい。更なる他の実施形態では、コーディネータ114は、被調整環境110内でデバイス112を発見するために、ユニバーサルプラグ・プレイ(UPnP)プロトコルセットなど、標準化された発見プロトコルを利用してもよい。
クライアントデバイス102は、ユーザが被調整環境110、サービスプロバイダ環境120、またはその両方と通信することを可能にする様々なコンピューティングデバイスを含んでもよい。概して、クライアントデバイス102は、デスクトップ、ラップトップもしくはタブレットコンピュータ、パーソナルコンピュータ、ウェアラブルコンピュータ、サーバ、携帯情報端末(PDA)、ハイブリッドPDA/携帯電話、携帯電話、電子ブックリーダ、セットトップボックス、ボイスコマンドデバイス、カメラ、およびデジタルメディアプレイヤなどのいずれかのコンピューティングデバイスとすることができる。サービスプロバイダ環境120は、コーディネータ114についての構成をサブミットし、その構成の配置を制御し、コーディネータ114またはサービスプロバイダ環境120のオンデマンドコード実行環境150上で実行されることになるタスクに対応するコードをサブミットし、コーディネータ114に関連する情報のロギングまたは監視を参照するなどのために、サービスプロバイダ環境120と対話するための1つ以上のユーザインタフェース、コマンドラインインタフェース(CLI)、アプリケーションプログラミングインタフェース(API)、および/または他のプログラムインタフェースをクライアントデバイス102に提供してもよい。同様に、コーディネータ114は、被調整デバイス112の状態を読み出し、被調整デバイス112の状態における変更を要求し、コーディネータ114がタスクの実行を生じさせることを要求するなどのために、コーディネータ114と対話するための1つ以上のユーザインタフェース、コマンドラインインタフェース(CLI)、アプリケーションプログラミングインタフェース(API)、および/または他のプログラムインタフェースをクライアントデバイス102に提供してもよい。1つ以上の実施形態がユーザインタフェースを使用するとして本明細書で説明されてもよいが、そのような実施形態は、加えてまたは代わりに、いずれかのCLI、API、または他のプログラムインタフェースを使用してもよいことを認識されるべきである。
サービスプロバイダ環境120は、コーディネータ114の構成、コーディネータ114の管理、およびコーディネータ114との通信を可能にするいくつかの要素を含むことができる。特に、サービスプロバイダ環境120は、サービスプロバイダ環境120へのコーディネータ114の登録およびそのようなコーディネータ114の構成を可能にする管理および配置サービス130、コーディネータ114および被調整デバイス112の状態へのロバストな変更を可能にするデバイスシャドウサービス140、並びにタスクのオンデマンドな動的実行と共に、コーディネータ114上でのタスクの配置およびプロビジョニングを提供するオンデマンドコード実行環境150を含む。
図1に示されるように、管理および配置サービス130は、管理および配置サービス130へのコーディネータ114の登録、コーディネータ114についての構成の生成、およびコーディネータ114への構成データの伝送を可能にするように集合的に動作することができる、クライアントおよびデータインタフェース132並びに構成データストア134を含む。実例として、クライアントおよびデータインタフェース132は、1つ以上のユーザインタフェース(例えば、API、CLI、GUIなど)を提供してもよく、1つ以上のユーザインタフェースを通じて、ユーザは、クライアントデバイス102を介して、構成データストア134に記憶するためのコーディネータ114の構成を生成またはサブミットしてもよい。クライアントおよびデータインタフェース132は更に、1つ以上のインタフェースを提供してもよく、1つ以上のインタフェースを通じて、コーディネータ114は、構成を取得してもよく、その結果、コーディネータ114は、取得された構成に従って再構成される。構成データストア134は、ハードドライブ(HDD)、ソリッドステートドライブ(SDD)、ネットワークアタッチドストレージ(NAS)、テープドライブ、またはいずれかのそれらの組み合わせなど、いずれかの永続的または実質的に永続的なデータストアに対応することができる。
デバイスシャドウサービス140は、コーディネータ114または被調整デバイス112など、デバイスの「シャドウ状態」が作成され、維持され、読み取られ、変更され、または削除されることを可能にする要素を含むことができる。上記議論されたように、シャドウ状態は、対応するデバイスの所望の状態を表すデータに対応してもよく、対応するデバイスは、デバイスの現在の状態を反映してもよく、または反映しなくてもよい。例えば、コーディネータ114について、シャドウ状態は、コーディネータ114についての所望の構成バージョンを含んでもよい。被調整デバイス112について、シャドウ状態は、被調整デバイス112の所望の状態(例えば、スイッチまたはバルブについてのオンまたはオフ、ロックに対してロックされまたはロックされていない、温度調節器についての所望の温度など)を含んでもよい。デバイスシャドウサービス140は、ユーザが、クライアントデバイス102または他のエンティティを介して、デバイスについてのシャドウ状態から読み出し、またはデバイスについてのシャドウ状態を修正することを可能にすることができ、更に、デバイスをシャドウ状態に同期するようにデバイスと対話してもよい。実例として、デバイスシャドウサービス140は、インタフェース142(例えば、API、CLI、GUIなどを含んでもよい)を含んでもよく、インタフェース142を通じて、シャドウ状態から読み出し、シャドウ状態に書き込み、シャドウ状態を作成し、またはシャドウ状態を削除する要求が受信されてもよく、シャドウデータストア144は、シャドウ状態を記憶するように構成されてもよい。シャドウデータストア134は、ハードドライブ(HDD)、ソリッドステートドライブ(SDD)、ネットワークアタッチドストレージ(NAS)、テープドライブ、またはいずれかのそれらの組み合わせなど、いずれかの永続的または実質的に永続的なデータストアに対応することができる。デバイスシャドウサービス140に関する更なる詳細は、上記参照によって組み込まれた、「700出願」において見出すことができる。
オンデマンドコード実行環境150は、タスク(例えば、ポータブルコードセグメント)のオンデマンド実行を提供するいくつかのデバイスを含むことができる。特に、オンデマンドコード実行環境150は、フロントエンド152を含むことができ、フロントエンド152を通じて、ユーザは、クライアントデバイス102を介して、オンデマンドコード実行環境150にタスクをサブミットしてもよく、オンデマンドコード実行環境150上でタスクの実行を呼び出してもよい。そのようなタスクは、例えば、タスクデータストア154に記憶されてもよく、タスクデータストア154は、ハードドライブ(HDD)、ソリッドステートドライブ(SDD)、ネットワークアタッチドストレージ(NAS)、テープドライブ、またはいずれかのそれらの組み合わせなど、いずれかの永続的または実質的に永続的なデータストアに対応することができる。図1には示されていないが、オンデマンドコード実行システム150は、いくつかの実行環境など、タスクの実行を可能にする様々な追加の構成要素(例えば、オンデマンドコード実行環境150の物理ホストデバイス上で実行するコンテナまたは仮想マシン)、そのような実行環境を管理するウォーカマネージャ、および即時ベースで(例えば、10ミリ秒を下回る)ウォーカマネージャに利用可能な実行環境を作成することを支援するウォーミングプールマネージャを含むことができる。オンデマンドコード実行環境に関する更なる詳細は、上記参照によって組み込まれた、「556特許」において見出すことができる。
上記述べられたように、タスクは、オンデマンドコード実行環境150およびコーディネータ114の両方において利用されてもよい。上記述べられたように、タスクは、ユーザコード(例えば、特定の機能を達成するための)個々の集合に対応する。本明細書で使用されるようなユーザコードへの言及は、特定のプログラム言語で記述されたいずれかのプログラムコード(例えば、プログラム、ルーチン、サブルーチン、スレッドなど)を指してもよい。本開示では、用語「コード」、「ユーザコード」、および「プログラムコード」は、交換可能に使用されてもよい。そのようなユーザコードは、例えば、ユーザによって開発された特定のウェブアプリケーションまたはモバイルアプリケーションと関連して、特定の機能を達成するように実行されてもよい。そのコードの特定の実行は、本明細書で「タスク実行」または単純に「実行」と称される。タスクは、非限定的な例として、JavaScript(例えば、node.js)、Java、Python、並びに/またはRuby(および/もしくは別のプログラミング言語)で記述されてもよい。タスクは、様々な方式でオンデマンドコード実行システム150またはコーディネータ114上での実行のために「トリガ」されてもよい。1つの実施形態では、クライアントデバイス102または他のコンピューティングデバイスは、タスクを実行する要求を伝送してもよく、それは一般的に、タスクを実行する「呼び出し」と称されることができる。そのような呼び出しは、実行されることになるユーザコード(または、その位置)およびユーザコードを実行するために使用されることになる1つ以上の引数を含んでもよい。例えば、呼び出しは、タスクを実行する要求に沿ってタスクのユーザコードを提供してもよい。別の実施例では、呼び出しは、その名前または識別子によって前にアップロードされたタスクを識別することができる。更なる別の実施例では、タスクに対応するコードは、タスクについての呼び出しに含まれてもよく、要求がコーディネータ114またはオンデマンドコード実行システム150によって受信される前に、別個の位置(例えば、コーディネータ114の記憶装置、ネットワークアクセス可能なストレージサービス、またはタスクデータストア154)にアップロードされてもよい。コーディネータ114またはオンデマンドコード実行システム150の要求インタフェースは、ユーザから、ハイパーテキスト転送プロトコルセキュア(HTTPS)要求としてタスクを実行する呼び出しを受信してもよい。また、HTTPS要求に含まれるいずれかの情報(例えば、ヘッダおよびパラメータ)も、タスクを実行するときに処理および利用されてもよい。上記議論されたように、例えば、HTTP、MQTT、およびCoAPを含むいずれかの他のプロトコルは、要求インタフェース122にタスク呼び出しを包含するメッセージを転送するために使用されてもよい。
タスクを実行する呼び出しは、タスクに対応するユーザコードに沿って使用されることになる1つ以上の第三者ライブラリ(ネイティブライブラリを含む)を指定してもよい。1つの実施形態では、呼び出しは、コーディネータ114またはオンデマンドコード実行システム150に、実行について要求されたタスクに対応するユーザコードおよびいずれかのライブラリ(および/または、その記憶位置の識別子)を包含するZIPファイルを提供してもよい。いくつかの実施形態では、呼び出しは、実行されることになるタスクのプログラムコード、プログラムコードが記述された言語、呼び出しと関連付けられたユーザ、および/またはプログラムコードを実行するために保存されることになるコンピューティングリソース(例えば、メモリなど)を示すメタデータを含む。例えば、タスクのプログラムコードは、呼び出しと共に提供されてもよく、ユーザによって前にアップロードされてもよく、コーディネータ114もしくはオンデマンドコード実行システム150によって提供されてもよく(例えば、標準化されたルーチン)、および/または第三者によって提供されてもよい。いくつかの実施形態では、そのようなリソースレベルの制約(例えば、どの程度のメモリが特定のユーザコードを実行するために割り当てられるか)は、特定のタスクについて指定され、タスクの各々の実行を通じて変化しなくてもよい。そのようなケースでは、コーディネータ140またはオンデマンドコード実行システム150は、各々の個々の呼び出しが受信される前にそのようなリソースレベルの制約へのアクセスを有してもよく、個々の呼び出しは、そのようなリソースレベルの制約を指定しなくてもよい。いくつかの実施形態では、呼び出しは、どの種類のパーミッションまたは権限が、呼び出しがタスクを実行することを引き起こすかを示すパーミッションデータなどの他の制約を指定してもよい。そのようなパーミッションデータは、プライベートリソース(例えば、プライベートネットワーク上の)にアクセスするためにオンデマンドコード実行システム110によって使用されてもよい。
いくつかの実施形態では、呼び出しは、呼び出しを扱うために適合されるべきである振る舞いを指定してもよい。そのような実施形態では、呼び出しは、呼び出しにおいて参照されるタスクを実行するための1つ以上の実行モードを可能にするためのインジケータを含んでもよい。例えば、呼び出しは、デバッグモードでタスクが実行されるべきかどうかを示すためのフラグまたはヘッダを含んでもよく、デバッグモードでは、タスクの実行と関連して生成されてもよいデバッギングおよび/またはロギング出力がユーザに再度提供される(例えば、コンソールユーザインタフェースを介して)。そのような実施例では、コーディネータ114またはオンデマンドコード実行システム150は、呼び出しを検査してもよく、フラグまたはヘッダを探索してもよく、存在する場合、コーディネータ114またはオンデマンドコード実行システム150は、タスクが実行される実行環境の振る舞い(例えば、ロギング機能)を修正してもよく、出力データをユーザに再度提供させてもよい。いくつかの実施形態では、振る舞い/モードインジケータは、コーディネータ114またはオンデマンドコード実行システム150によってユーザに提供されるユーザインタフェースによって呼び出しに追加される。ソースコードプロファイリング、リモートデバッギングなどの他の特徴も、呼び出しにおいて提供されるインジケーションに基づいて、有効または無効にされてもよい。
サービスプロバイダ環境120は、1つ以上のコンピュータネットワーク(図1には示されない)を使用して相互接続された、いくつかのコンピュータシステムを含む分散コンピューティング環境において動作するとして図1に表される。サービスプロバイダ環境120も、図1に例示されるデバイスよりも少ない数または多い数のデバイスを有するコンピューティング環境内で動作してもよい。よって、図1におけるサービスプロバイダ環境120の表現は、例示的であると見なされるべきであり、本開示を限定すると見なされるべきではない。例えば、サービスプロバイダ環境120またはその様々な制約は、本明細書で説明される処理の少なくとも一部を実装するために、様々なウェブサービス構成要素、ホストされたコンピューティング環境もしくは「クラウド」コンピューティング環境、および/またはピアツーピアネットワーク構成を実装してもよい。
更に、サービスプロバイダ環境120は、ハードウェアまたはハードウェアデバイスによって実行されるソフトウェアにおいて直接実装されてもよく、例えば、本明細書で説明される様々な特徴を実行するためのコンピュータ実行可能命令を実行するように構成された物理コンピュータハードウェア上で実装された1つ以上の物理または仮想サーバを含んでもよい。1つ以上のサーバは、例えば、1つ以上のデータセンタ内で、地理的に分散されてもよく、または地理的に同一場所に配置されてもよい。いくつかの例では、1つ以上のサーバは、「クラウドコンピューティング環境」と称されることが多い、即時的にプロビジョニングされ、解放されるコンピューティングリソースのシステムの一部として動作してもよい。
図2は、所与の被調整環境110内で被調整デバイス112を管理するコンピューティングシステム(コーディネータ114として言及される)の全体的なアーキテクチャを表す。図2に表されるワーカマネージャ140の全体的なアーキテクチャは、本開示の態様を実装するために使用されてもよいコンピュータハードウェアおよびソフトウェアモジュールの配列を含む。ハードウェアモジュールは、以下で更に詳細に議論されるように、物理電子デバイスにより実装されてもよい。コーディネータ114は、図2に示されるより要素よりも更に多くの(または、少ない)要素を含んでもよい。しかしながら、開示を可能にすることをもたらすために、それらの一般的な従来の要素の全てが必ずしも示されるわけではない。加えて、図2に例示される全体的なアーキテクチャは、図1に例示される他の構成要素のうちの1つ以上を実装するために使用されてもよい。例示されるように、コーディネータ114は、プロセシングユニット204、ネットワークインタフェース206、コンピュータ可読媒体ドライブ207、および入力/出力デバイスインタフェース208を含み、それらの全ては、通信バスによって相互に通信してもよい。ネットワークインタフェース206は、1つ以上のネットワークまたはコンピューティングシステムに接続性を提供してもよい。よって、プロセシングユニット204は、ネットワーク104を介して、他のコンピューティングシステムまたはサービスから情報および命令を受信してもよい。プロセシングユニット204はまた、メモリ250におよびメモリ250から通信してもよく、更に、入力/出力デバイスインタフェース208を介して、任意選択のディスプレイ(図示せず)に対して出力情報を提供してもよい。入力/出力デバイスインタフェース208はまた、任意選択の入力デバイス(図示せず)から入力を受け付けてもよい。
メモリ250は、本開示の1つ以上の態様を実装するために、プロセシングユニット204が実行するコンピュータプログラム命令(いくつかの実施形態では、モジュールとしてグループ化される)を包含してもよい。メモリ250は一般的に、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、および/または他の永続的な、補助的もしくは非一時的コンピュータ可読媒体を含む。メモリ250は、コーディネータ114の全体的な管理および動作においてプロセシングユニット204による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム252を記憶してもよい。メモリ250は更に、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含んでもよい。例えば、1つの実施形態では、メモリ250は、プロセスマネージャ254、スケジューラ256、配置エージェント258、および通信マネージャ260を含む。
スケジューラ256および配置エージェント258は、プロセシングユニット204による実行のためのタスクを選択し、そのようなタスク実行を管理するようにプロセシングユニット204によって実行されてもよい。特に、スケジューラ256は、所与の時間点における実行のためのタスクを選択し、タスクの実行を中断する(例えば、コーディネータ114における制約されたリソースのインスタンスの下で)命令を含んでもよい。配置エージェント258は、タスクを実行するための適切な実行環境270を選択し、その実行環境270に、タスク実行の間に必要なリソースへの適切なアクセスをプロビジョニングし、実行環境270内でタスクの実行を生じさせる命令を含んでもよい。実行環境270は、本明細書で使用されるように、タスクを実行するためのメモリ250の論理部分を指す。1つの実施形態では、実行環境270は、プログラム的に分離され、その結果、第1の実行環境270内でのコードの実行は、別の実行環境270と関連付けられたメモリを修正することを抑止される。実例として、実行環境270は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「chroot jail」もしくはPython仮想環境「virtualenv」などの「サンドボックス」環境に対応してもよい。他の例では、実行環境270は、仮想マシン環境(例えば、JAVA仮想マシン、別個のオペレーティングシステムを有する仮想化されたハードウェアデバイスなど)に対応してもよい。更なる他の例では、実行環境270は、仮想化を必ずしも利用しない、タスクの実行に割り当てられたメモリ空間であってもよい。
コーディネータ上で実行するタスクの間の通信と共に、コーディネータ114と他のデバイス(例えば、クライアントデバイス102および被調整デバイス112)との間の通信は、通信マネージャ260によって促進されてもよい。特に、通信マネージャ260は、コーディネータ114に向けられたメッセージを取得し、適切な宛先にメッセージを転送するように構成されてもよい。例えば、通信マネージャ260は、タスク、被調整デバイス112、クライアントデバイス102、およびサービスプロバイダ実行環境120のデバイスのいずれかの組み合わせの間でメッセージを経路指定してもよい。
コーディネータ114の動作に関する情報の収集を可能にするために、メモリ250は更に、コーディネータ114においてタスクがどのように実行されるかなど、コーディネータ114の動作を監視し、そのような動作に関する情報を報告するようにコーディネータ114によって実行可能なコードに対応する、測定基準およびロギングエージェント259を含む。情報は、例えば、コーディネータ114上でのタスクの実行時間と共に、そのような実行に関する情報(例えば、使用される計算リソース、実行がエラーをもたらしたかどうかなど)を含んでもよい。いくつかの例では、測定基準およびロギングエージェント259は、ユーザが情報を取得することを可能にするために、メモリ250などにこの情報をローカルに記憶してもよい。他の例では、測定基準およびロギングエージェント259は、サービスプロバイダ環境150になど、情報をリモートに記憶してもよい。測定基準およびロギングエージェント259は、コーディネータ114からサービスプロバイダ環境150にヘルスチェックデータを伝送することなど、コーディネータ114の動作を監視することに関する追加の機能性をも実装してもよい。
コーディネータ114によって実行されるタスクは、タスクメモリ空間280内で論理的にグループ化されるとして示され、タスクメモリ空間280は、各々のタスクに対応するコードを記憶するように構成されたメモリ250の論理単位に対応してもよい。図2に示されるように、タスクメモリ空間280は、ルータタスク282、1つ以上の通信マネージャタスク286、シャドウサービスタスク288、および1つ以上のクライアントにより提供されるタスク290を含む、コーディネータ114の機能性を実装するようにプロセシングユニット204によって実行可能ないくつかのタスクを含むことができる。
ルータタスク282は、コーディネータ114内での、コーディネータ114への、およびコーディネータ114からのメッセージの経路指定を支援するように実行可能なコードの一部に対応してもよい。1つの実施形態では、ルータタスク282は、コーディネータ114において受信されたメッセージまたはイベントの他のインジケーションについての適切な宛先を判定するために、「イベントフローテーブル」を実装する。例えば、通信マネージャ260は、ルータタスク282に、コーディネータ114において取得されたメッセージを転送してもよく(例えば、タスク実行の生成または入力/出力インタフェース208における受信に起因して)、ルータタスク282は、或る識別子にアドレス指定されたメッセージが所与のタスク、所与のクライアントデバイス102、または所与の被調整デバイス102に経路指定されるべきであると判定するためにイベントフローテーブルを利用してもよい。いくつかの例では、イベントフローテーブルは更に、所与のタイプのメッセージを扱う方式を指定するために利用されてもよい。例えば、イベントフローテーブルは、或るタスクまたは被調整デバイス112において発するメッセージまたはイベントデータが別のタスクまたは被調整デバイス112に伝送されるべきであり、コーディネータ114においてロギングされるべきであり、無効化されるべきであり、タスクの新たな実行をもたらすべきであるなどと指定してもよい。イベントフローテーブルは更に、指定された基準を満たすメッセージ(例えば、特定のフラグを含む、所与の識別子にアドレス指定されたなど)がサービスプロバイダ環境120に(例えば、デバイスシャドウサービス140またはオンデマンドコード実行システム150に)伝送されるべきであることを示してもよい。1つの実施形態では、イベントフローテーブルは、識別子として「トピック」を利用してもよく、その結果、特定のトピックと関連付けられたメッセージは、そのトピックについて指定された経路指定に従って伝送される。イベントフローテーブルは更に、メッセージのソースに基づいて、それらのメッセージをどのように経路指定するかについての情報を含んでもよい。例えば、所与のトピックにアドレス指定されたメッセージは、メッセージが第1のタスク、第2のタスク、第1の被調整デバイス112などから受信されるかどうかに基づいて、異なって経路指定されてもよい。イベントフローテーブルの利用によって、ルータタスク282は、メッセージの送信側の動作における変更なしに(例えば、メッセージを生成したタスクについてのコードを再記述することなく、メッセージを生成した被調整デバイス112のソフトウェアを修正することなく、など)、そのようなメッセージが異なる方式で扱われることを可能にすることができる。
通信マネージャタスク286は、通信のプロトコルに従って、コーディネータ114といくつかの異なる外部デバイス(例えば、被調整デバイス102)との間のそのような通信を可能にすることができる。例えば、第1の通信マネージャタスク286は、BLUETOOTH(商標)プロトコルを使用して通信を管理するように構成されてもよく、第2の通信マネージャは、HTTPプロトコルを使用して通信を管理するように構成されてもよい、などである。いくつかの例では、複数の通信マネージャタスク286は、通信を実装するように集合的に作用してもよい。例えば、第1の通信マネージャタスク286は、TCPプロトコルを介した通信を可能にすることができ、第2の通信マネージャタスク286は、MQTTプロトコル(TCPプロトコルを使用し、よって、第1の通信マネージャタスク286を利用することができる)を介した通信を可能にすることができる。異なる通信マネージャタスク286が異なるプロトコルを介して通信するようにコーディネータ114の能力を変化させることができることを理由に、およびコーディネータ114のタスクがコーディネータ114の再構成を介して変化してもよいことを理由に、コーディネータ114は、様々な異なる通信プロトコルを利用するように即時に再構成されることができる。
シャドウサービスタスク288は、コーディネータ114において維持されたデバイスシャドウによる管理およびデバイスシャドウとの対話を促進することができる。実例として、シャドウサービスタスク288は、コーディネータ114に対してローカルにデバイスシャドウサービス140によって提供される機能性と類似の機能性を実装することができる。したがって、シャドウサービスタスク288は、被調整デバイス112のシャドウ状態(所望の状態を表すデータ)を維持することができ、そのようなデータへの読み出しまたは書き込みを可能にすることができる。シャドウサービスタスク288は更に、被調整デバイス112のそのデバイスについてのデバイスシャドウとの同期を可能にすることができる。したがって、被調整デバイス112についてのデバイスシャドウを修正することによって、被調整デバイス112の状態が変化することができる。被調整デバイス112についてのデバイスシャドウを読み出すことによって、被調整デバイス112の状態が判定されることができる。いくつかの例では、シャドウサービスタスク288は更に、デバイスシャドウサービス140によって維持されたデバイスシャドウなど、所与のデバイスについての別のデバイスシャドウと共に調整してもよい。例えば、シャドウサービスタスク288は、ローカルデバイスシャドウをデバイスシャドウサービス140に記憶されたデバイスシャドウと同期してもよく、ローカルデバイスシャドウとデバイスシャドウサービス140に記憶されたデバイスシャドウとの間の不一致を解決してもよい、などである。
上記説明されたタスク(各々が、実例として、サービスプロバイダ環境120と関連付けられたエンティティによって提供されてもよい)に加えて、タスクメモリ空間280は、いずれかの数のクライアントにより提供されるタスク290を含んでもよく、クライアントにより提供されるタスク290は、クライアントデバイス102によって生成され、コーディネータ114への配置のためにサービスプロバイダ環境120にサブミットされた実行可能なコードに対応してもよい。そのようにして、クライアントにより提供されるタスク290によって提供される機能性は、サブミットするユーザの要望に従って変化してもよい。いくつかの例では、クライアントにより提供されるタスク290は、メモリ250が言語ランタイムを含むコーディング言語で記述されてもよい。例えば、コーディネータ114がnode.js、Go、JAVA、およびPythonなどの言語をサポートする場合、クライアントにより提供されるタスク290は、それらの言語のいずれかで記述された実行可能なコードを含んでもよい。
加えて、メモリ250は、コーディネータ114の構成データが記憶されたメモリ250の論理部分を表す、構成データ部272を含む。構成データは、例えば、コーディネータ114の現在の配置バージョン、タスクメモリ空間280のタスクによって記憶されたデータ、またはコーディネータ114の動作において使用される他のデータを含んでもよい。
コーディネータ114の構成(および、再構成)を可能にするために、メモリ250は更に、配置エージェント258を含む。配置エージェント258は、サービスプロバイダ環境120にコーディネータを登録し、コーディネータ114の所望の構成を判定し、コーディネータ114の現在の構成が所望の構成と一致しない例では、コーディネータ114についての構成データを取得し、所望の構成を実装するようにメモリ250を修正するように実行可能なコードに対応することができる。配置エージェント258の動作に関する更なる詳細は、図5および図6に関して以下で説明される。
図3Aは、本出願に従った、例示的な被調整デバイス112Aのアーキテクチャの1つの実施形態を表す。図3Aに表される被調整デバイス112Aの全体的なアーキテクチャは、本開示の態様を実装するために使用されてもよいコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。例示されるように、被調整デバイス112Aは、プロセシングユニット304、ネットワークインタフェース306、コンピュータ可読媒体ドライブ307、入力/出力デバイスインタフェース320、任意選択のディスプレイ302、および入力デバイス324を含み、それらの全ては、通信バスによって相互に通信してもよい。実例として、被調整デバイス112Aは、組み込みデバイスとして、入力または出力など、更に制限された機能性および構成要素を有してもよい。
ネットワークインタフェース306は、図1のネットワーク104など、1つ以上のネットワークまたはコンピューティングシステムに接続性を提供してもよい。よって、プロセシングユニット304は、ネットワークを介して、他のコンピューティングシステムまたはサービスから情報および命令を受信してもよい。プロセシングユニット304はまた、メモリ310におよびメモリ310から通信してもよく、更に、入力/出力デバイスインタフェース320を介して、任意選択のディスプレイ302に対して出力情報を提供してもよい。入力/出力デバイスインタフェース320はまた、キーボード、マウス、デジタルペンなどの任意選択の入力デバイス324から入力を受け付けてもよい。いくつかの実施形態では、被調整デバイス112Aは、図3Aに示される構成要素よりも多い(または、少ない)構成要素を含んでもよい。例えば、被調整デバイス112のいくつかの実施形態は、ディスプレイ302および入力デバイス324を省略してもよく、1つ以上の代替的な通信チャネルを通じて(例えば、ネットワークインタフェース306を介して)入力/出力能力を提供してもよい。加えて、被調整デバイス112Aは、入力および出力インタフェース320をも完全に省略してもよい。
メモリ310は、1つ以上の実施形態を実装するために、プロセシングユニット204が実行するコンピュータプログラム命令を含んでもよい。メモリ310は一般的に、RAM、ROM、または他の永続的もしくは非一時的メモリを含む。メモリ310は、被調整デバイス112Aの全体的な管理および動作においてプロセシングユニット304による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム314を記憶してもよい。メモリ310は更に、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含んでもよい。例えば、1つの実施形態では、メモリ310は、コンテンツにアクセスするためのブラウザアプリケーションアプリケーション316を含む。実例として、ブラウザアプリケーション316は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を包含してもよく、または単純に、データ接続性を提供するソフトウェアアプリケーション(もしくは、実行可能命令)であってもよい。
図3Bは、本出願に従った、例示的な被調整デバイス112Bの代替的なアーキテクチャの1つの実施形態を表す。図3Bに表される被調整デバイス112Bの全体的なアーキテクチャは、本開示の態様を実装するために使用されてもよいコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。しかしながら、被調整デバイス112Bは、被調整デバイス112Bの計算機能性および動作を制限することがある削減された構成要素と関連付けられてもよい。例示されるように、被調整デバイス112Bは、通信バスと通信する、プロセシングユニット350およびネットワークインタフェース352を含む。図3Aの被調整デバイス112Aとは異なり、被調整デバイス112Bは、コンピュータ可読媒体ドライブ、入力/出力デバイスインタフェース、任意選択のディスプレイ、または入力デバイスを有さなくてもよい。
ネットワークインタフェース352は、図1のネットワーク104など、1つ以上のネットワークまたはコンピューティングシステムに接続性を提供してもよい。よって、プロセシングユニット350は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信してもよい。メモリ354は、1つ以上の実施形態を実装するために、プロセシングユニット350が実行するコンピュータプログラム命令を含んでもよい。メモリ354は一般的に、RAM、ROM、または他の永続的もしくは非一時的メモリを含む。この実施形態では、メモリ354は、被調整デバイス112Bの全体的な管理および動作においてプロセシングユニット350による使用のためのコンピュータプログラム命令を提供する完全なオペレーティングシステムを必ず記憶してもよい。むしろ、1つの実施形態では、メモリ354は、命令にアクセスし、命令を受信し、命令を処理するためのインタフェースソフトウェア構成要素356を含む。
図4は、本出願に従った、例示的なクライアントデバイス102のアーキテクチャの1つの実施形態を表す。図4に表されるクライアントデバイス102の全体的なアーキテクチャは、本開示の態様を実装するために使用されてもよいコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。例示されるように、クライアントデバイス102は、プロセシングユニット404、ネットワークインタフェース406、コンピュータ可読媒体ドライブ407、入力/出力デバイスインタフェース420、任意選択のディスプレイ402、および入力デバイス424を含み、それらの全ては、通信バスによって相互に通信してもよい。
ネットワークインタフェース406は、図1のネットワーク104など、1つ以上のネットワークまたはコンピューティングシステムに接続性を提供してもよい。よって、プロセシングユニット404は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信してもよい。プロセシングユニット404はまた、メモリ410におよびメモリ410から通信してもよく、更に、入力/出力デバイスインタフェース420を介して、任意選択のディスプレイ402に対して出力情報を提供してもよい。入力/出力デバイスインタフェース420はまた、キーボード、マウス、デジタルペンなど、任意選択の入力デバイス424から入力を受け付けてもよい。いくつかの実施形態では、クライアントデバイス102は、図4に示される構成要素よりも多い(または、少ない)構成要素を含んでもよい。例えば、被調整デバイス112のいくつかの実施形態は、ディスプレイ402および入力デバイス424を省略してもよく、1つ以上の代替的な通信チャネルを通じて(例えば、ネットワークインタフェース406を介して)入力/出力能力を提供してもよい。加えて、クライアントデバイス102は、入力および出力インタフェース420をも完全に省略してもよい。
メモリ410は、1つ以上の実施形態を実装するために、プロセシングユニット204が実行するコンピュータプログラム命令を含んでもよい。メモリ410は一般的に、RAM、ROM、または他の永続的もしくは非一時的メモリを含む。メモリ410は、クライアントデバイス102の全体的な管理および動作においてプロセシングユニット404による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム414を記憶してもよい。メモリ410は更に、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含んでもよい。例えば、1つの実施形態では、メモリ410は、コンテンツにアクセスするためのブラウザアプリケーションアプリケーション416を含む。実例として、ブラウザアプリケーション416は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を包含してもよく、または単純に、データ接続性を提供するソフトウェアアプリケーション(もしくは、実行可能命令)であってもよい。
図5を参照すると、コーディネータ114への構成の配置を可能にするために、デバイスシャドウサービス130にコーディネータ114を登録し、クライアントデバイス102Aを介してそのような構成をサブミットするための例示的な対話が表される。図5の対話は、(1)において開始し、(1)では、コーディネータは、デバイスシャドウサービス130に登録通知をサブミットすると共に、コーディネータ114についてのデバイスシャドウをサブスクライブする要求をサブミットする。実例として、対話(1)は、コーディネータ114についての登録ルーチンの一部として実装されてもよく、それによって、ユーザは、デバイスシャドウサービス150上でユーザのアカウントにコーディネータ114を登録するためにコーディネータ114の入力(例えば、登録ボタン、スクリーン、キーボード/マウスなど)を利用する。以下で説明されるように、デバイスシャドウサービス150はその後、デバイスシャドウサービス130によって維持されたデバイスシャドウへの変更をコーディネータ114に通知してもよく、その結果、コーディネータ114の構成は、コーディネータ114についてのデバイスシャドウへの対応する修正によって修正されることができる。
(2)において、デバイスシャドウサービス130は、コーディネータ114についてのデバイスシャドウがまだ存在しない場合、そのようなシャドウを生成する。実例として、デバイスシャドウは、登録の時点のコーディネータ114の現在の構成バージョンなど、コーディネータ114についての構成バージョンを含んでもよい。
(3)において、クライアントデバイス102Aは、コーディネータ114とも関連付けられたユーザの制御の下、コーディネータ114についての構成を生成する。いくつかの例では、構成は、クライアントデバイス102A上で実行するソフトウェア(例えば、テキストエディタ、サービスプロバイダ環境150によって提供される特殊化されたアプリケーションなど)の使用によって、クライアントデバイス102A上で完全に生成されてもよい。他の例では、構成は、クライアントデバイス102Aのブラウザアプリケーション上で参照されるネットワーク表示ページを介してなど、クライアントデバイス102Aと管理および配置サービス130との間の対話を介して生成されてもよい。
構成のコンテンツの例示的なテーブルは、テーブル502として図5に示される。テーブル502に示されるように、構成は、環境識別子(例えば、コーディネータ114が動作することを意図される被調整環境110の識別子)、コーディネータ識別子(例えば、シリアル番号など、コーディネータ114の識別子)、デバイスリスト(シリアル番号など、デバイス112の識別情報を含む、コーディネータ114によって管理されることになる被調整デバイス112のリスト)、シャドウリスト(デバイスリストの被調整デバイス112と関連付けられたデバイスシャドウのリスト)、タスクリスト(コーディネータ114に配置されることになるタスクのリスト)、経路指定情報(コーディネータ114のルータタスクによる使用のためのイベントフローテーブル)、ロギングおよび測定基準情報(コーディネータ114の動作に関するロギング情報についての測定基準およびロギングパラメータのリスト)、並びにセキュリティ情報(サービスプロバイダ環境150との通信または被調整環境110内での通信を安全にする際にコーディネータによって使用されることになるセキュリティ証明書など)を含んでもよい。いくつかの例では、構成の各々の値は、クライアントデバイス102Aのユーザによって手動で指定されてもよい。例えば、ユーザは、コーディネータ114内に含まれることになるクライアントにより提供されるタスクの番号、およびコーディネータ114によって管理されることになるデバイス112の番号を指定してもよい。他の例では、1つ以上の値は、クライアントデバイス102Aまたは管理および配置サービス130のソフトウェアを介して自動で指定されてもよい。例えば、管理および配置サービス130は、構成内に含まれることになるコーディネータ識別子またはシャドウリストを自動で提供してもよい。
(4)において、構成は、管理および配置サービス130にサブミットされる。実例として、サブミッションは、構成の伝送を介して(例えば、アップロードを介して)、ネットワーク表示ページのサブミッションを介して、または他の伝送機構を介して行われてもよい。(5)において、管理および配置サービス130は、サブミットされた構成に基づいて、コーディネータ114についての構成パッケージを生成する。例えば、管理および配置サービス130は、コーディネータ114への後の伝送のためのサブミットされた構成値を含むデータファイル(例えば、ZIPファイル、XMLファイルなど)を生成してもよい。管理および配置サービス130は更に、構成をコーディネータ114の他の構成と区別するために、バージョン識別子を構成に割り振ってもよい。
(6)において、管理および配置サービス130は、デバイスシャドウサービス130に、コーディネータ114についてのデバイスシャドウを更新する要求を伝送する。例えば、管理および配置サービス130は、対話(5)において生成された構成パッケージに割り振られた構成バージョンに一致するように、コーディネータ114についてのデバイスシャドウの構成バージョンを修正してもよい。
その後、(7)において、デバイスシャドウサービス130は、コーディネータ114に、コーディネータ114についてのデバイスシャドウへの変更を通知する。1つの実施形態では、通知は、MQTTプロトコルを介して、メッセージがコーディネータと関連付けられたトピックに発行されていることの通知として行われてもよい(メッセージは、更新されたデバイスを表してもよく、トピックは、デバイスシャドウに対応してもよい)。よって、コーディネータ114は、新たな構成パッケージがコーディネータ114において実装されることになるように存在することを通知されることができる。
図6を参照して、例示的な対話がコーディネータ114における構成パッケージの取り出しおよび実装のために説明される。図6の対話は、例えば、図5の対話に続いて行われてもよい。1つの実施形態では、図6の対話は、図2において説明されるように、配置エージェント258の実行を介して実装される。対話は、(1)において開始し、(1)では、コーディネータ114は、管理および配置サービス130から構成パッケージを要求する。実例として、構成パッケージは、コーディネータ114のデバイスシャドウ内で示されるように、パッケージのバージョン識別子に基づいて要求されてもよい。構成パッケージ内に含まれてもよい情報の実施例は、図5を参照して上記説明されている。(2)において、構成パッケージは、管理および配置サービス130からコーディネータ114に返却される。
(3)において、コーディネータ114は、構成パッケージ内で参照される1つ以上のタスクを判定し、どのタスクがコーディネータ114の機能性を実装することができるかを判定するように構成パッケージを検査する。タスクを判定することに加えて、コーディネータ114は、構成パッケージの有効性を検証することなど、構成パッケージに関して追加のアクションを引き受けてもよい(例えば、チェックサムデータ、デジタル署名などを検証することによって)。
(4)において、コーディネータ114は、オンデマンドコード実行環境150から、構成パッケージ内で参照されるタスクを取り出す。実例として、コーディネータ114は、コーディネータ114に伝送されることになる、タスクに対応するそのコード、およびタスクに関する他の情報(メタデータなど)を要求するために、各々のタスクの識別子を利用してもよい。要求されたタスクは、図2を参照して上記説明されたタスクを含んでもよく、例えば、ルータタスク282、通信マネージャタスク286、シャドウサービスタスク288、およびクライアントにより提供されるタスク290を含んでもよい。要求されたタスクは、(5)においてコーディネータ114に返却される。コーディネータ114は、実例として、タスクのチェックサムまたはデジタル署名の正当性を確認することによってなど、受信上でタスクの整合性および有効性を検証してもよい。
(6)において、コーディネータ114は、新たに取得された構成により自身を更新する。実例として、コーディネータ114は、そのメモリ内で、被調整デバイス112のリストなど、構成データのセットを更新してもよい。コーディネータ114は更に、新たな構成情報において参照されるように、タスクの現在のセットを新たに取得されたタスクと置き換えてもよい。1つの実施形態では、コーディネータ114は、リブートを実行してもよく、配置エージェント258は、前のタスクへの参照を新たに取得されたタスクと置き換えてもよい。別の実施形態では、コーディネータ114は、リブートを実行することなく、タスクを置き換えてもよい。例えば、コーディネータ114は、新たに受信されたタスク呼び出しを満たすために、新たに取得されたタスクを利用してもよく、それらのタスクが使用されず、または軽度に使用される時間内に、いずれかの旧タスクを中止してもよく、必要に応じて、旧タスクを新たに取得されたタスクと置き換える。よって、コーディネータは、新たに取得されたタスクに従って、新たな機能性により構成されることができる。
図7を参照して、被調整デバイス112の状態を修正するためにコーディネータ114利用するための例示的な対話が説明される。対話は、(1)において開始し、(1)では、被調整デバイス112は、コーディネータ114への登録、および被調整デバイス112についてデバイスシャドウにサブスクライブする要求を伝送する。対話(1)は、ユーザによって開始されるように(例えば、被調整デバイス112のユーザインタフェースの利用を介して)、例えば、被調整デバイス112によって実装される登録ルーチンの一部として行われてもよい。
(2)において、コーディネータ114は、被調整デバイス112の所望の状態を表す、被調整デバイス112についてのデバイスシャドウを生成する。実例として、デバイスシャドウは、登録の時点の、被調整デバイス112の現在の状態を最初に表してもよい。
(3)において、被調整環境110内で動作していてもよい(例えば、被調整環境110のLANへの接続により)、クライアントデバイス102Aは、コーディネータ114に、所望のデバイス状態に一致するようにデバイスシャドウを修正する要求をサブミットする。要求は、例えば、クライアントデバイス102A上で実行するアプリケーション(例えば、ブラウザ)を介してサブミットされてもよく、コーディネータ114によってサポートされるいずれかの数のプロトコルを介して、コーディネータ114に伝送されてもよい。(3)において、コーディネータ114は、要求を取得し、デバイス状態における要求された変更に一致するように、被調整デバイス112についてのデバイスシャドウを更新する。
(4)において、コーディネータ114は、被調整デバイス112に、対応するデバイスシャドウへの変更を通知する。実例として、コーディネータ114は、MQTTプロトコルを介して、被調整デバイス112に、新たなメッセージ(デバイスシャドウのコンテンツ)が被調整デバイス112によってサブスクライブされたトピックに投稿されていることの通知を伝送してもよい(デバイスシャドウの識別子)。
(5)において、被調整デバイス112は、更新されたデバイスシャドウに一致するようにその現在の状態を更新する。例えば、被調整デバイス112がスイッチまたは照明バルブである場合、被調整デバイス112は、所望の状態に一致するようにターンオンまたはオフしてもよい。よって、デバイスシャドウの使用によって、コーディネータ114は、被調整デバイス112の動作への変更を促進することができる。
図8を参照して、コーディネータ114上でタスクを実行する呼び出しを処理するための例示的な対話が説明される。特に、図8の対話は、コーディネータ114のスケジューラ256によって引き受けられてもよく、スケジューラ256は、ワークアイテムタスクを実行する呼び出しを待ち行列内にエンキューし、リソースマネージャ254から取得されるように、コーディネータ114の計算リソースの状態に基づいて、処理のためのワークアイテムを待ち行列から選択する。
図8の対話は、(1)において開始し、(1)では、スケジューラ256は、「タスクA」として図8において指定されたタスクを実行する呼び出しを取得する。呼び出しは、例えば、タスクの識別情報(例えば、タスクに対してグローバルに一意な識別子)と共に、タスクまたはタスクの実行に関する他の情報(例えば、タスクについての実行パラメータを指定するフラグ)が渡されるパラメータを含んでもよい。いくつかの例では、呼び出しは、呼び出しを生成した別のプロセスまたはエンティティからスケジューラ256において直接取得されてもよい。例えば、別のプロセスまたはエンティティは、タスクを呼び出すためのスケジューラによって提供されるAPIの関数を引き起こしてもよい。他の例では、呼び出しは、図2の通信マネージャ260など、通信マネージャを介して取得されてもよく、通信マネージャは、第1のフォーマット(例えば、HTTP)にある呼び出しを取得し、スケジューラ256に呼び出しを渡すように機能してもよい。
呼び出しを受信すると、スケジューラ256は、(2)においてワークアイテム待ち行列802としてグラフィカルに表される、ワークアイテム待ち行列内に呼び出しをエンキューする。図8に表されるワークアイテム待ち行列802は、説明の例示的な目的により簡略化されており、よって、上記説明された「タスクA」への呼び出しのみを含む。しかしながら、実用的な実装態様は、タスクを実行するいずれかの数の呼び出しから生じる、いずれかの数のワークアイテムを含んでもよい。
(3)において、スケジューラ256は、リソースマネージャ254に、コーディネータ114において利用可能な(または、タスクを実行する目的のために利用可能な)、利用可能なメモリの量、プロセッササイクル、ネットワーク帯域幅など、コーディネータ114における計算リソースの可用性に関する情報についての要求を伝送する。リソースマネージャ254は、(4)において、その情報を判定してもよく、(5)において、スケジューラ256に要求された情報を返却してもよい。いくつかの例では、リソースマネージャ254は、利用可能な計算リソースについてコーディネータのオペレーティングシステムをクエリすることによってなど、情報を直接収集してもよい。他の例では、リソースマネージャ254は、現在実装されている実行環境のセットに基づいて、利用可能な計算リソースを推論してもよい。実例として、リソースマネージャ254は、実行環境810として図8にグラフィカルに表される、実行環境のセットを維持するように構成されてもよい。各々の実行環境は、対応するタスクの実行のための環境として割り振られてもよい。例えば、コーディネータ114は、ルータタスク環境812内のルータタスクおよびシャドウサービス環境814内のシャドウサービスタスクの現在の実行であってもよい。ワークアイテム待ち行列802と同様に、実行環境810のグラフィカルな表示は、説明の例示的な目的により簡略化されており、実用的な実装態様は、いずれかの数のタスクと関連付けられたいずれかの数の実行環境を含んでもよい。リソースマネージャ254は、設定された量の計算リソースを実行環境810に割り当て、その量のコンピュータリソースの一部を各々の実行環境(いくつかの例では、その一部は、実行環境にわたって変化してもよい)に割り当てるように構成されてもよい。例えば、ルータタスク環境812は、RAMの1ギガバイトおよびプロセッササイクルの10パーセントを割り当てられてもよく、シャドウサービスタスク環境814は、RAMの2ギガバイトおよびプロセッササイクルの5パーセントを割り当てられてもよい。割り当てられた計算リソースのタイプおよび量は、実施形態にわたって変化してもよい。現在の実行環境に割り当てられた計算リソースを実行環境810にわたって割り当てられた総リソースから差し引くことによって、リソースマネージャ254は、(5)において、計算リソースの可用性を判定してもよく、スケジューラ256にその情報を返却してもよい。いくつかの例では、リソースマネージャ254は、実行環境810の現在の状態、およびタスクが各々の実行環境内でアクティブに実行しているかどうかなど、追加の情報を返却してもよい。以下で説明されるように、この追加の情報は、ワークアイテム待ち行列802を処理する際に、スケジューラによって利用されてもよい。
(6)において、スケジューラ256は、存在する場合、どのワークアイテムをデキューおよび処理するかを判定するようにワークアイテム待ち行列802を処理する。スケジューラ256は、ワークアイテム待ち行列802を処理する際に、いずれかの数のスケジューリングアルゴリズムを利用してもよく、スケジューリングアルゴリズムを実施する際に、いくつかの入力を利用してもよい。例えば、スケジューラ256は、実行環境810と関連付けられた、ワークアイテム待ち行列802内の各々のワークアイテムの優先度、および現在実行しているタスクの優先度を利用してもよい。それらの優先度は、例えば、タスクへの呼び出し器、タスクの作成者、またはコーディネータ114の管理者によって確立されてもよい。更なる実施例として、スケジューラ256は、どのワークアイテムをデキューするかを判定するために計算リソースの可用性を利用してもよいと共に、待ち行列に入れられたワークアイテムを処理するために計算リソースの推定された使用量(例えば、アイテムをデキューし、ワークアイテムを介して呼び出されるタスクに実行環境を割り当て、実行環境内でタスクを実行するための計算リソースの推定された使用量)を利用してもよい。待ち行列に入れられたワークアイテムを処理するための計算リソースの推定された使用量は、例えば、タスクへの呼び出し器、タスクの作成者、またはコーディネータ114の管理者によって確立されてもよい。いくつかの例では、待ち行列に入れられたワークアイテムを処理するための計算リソースの推定された使用量は、ワークアイテムに対応するコードの静的または動的分析、同一または類似のワークアイテムをデキューするための履歴的な計算リソースの使用量のレビューなどを介してなど、自動で確立されてもよい。いくつかの例では、スケジューラ256は、ワークアイテムに対応するタスクがコーディネータ上で現在実行しているかどうかなど、追加の入力を利用してもよい。例えば、スケジューラ256は、設定された数の(例えば、1つ)所与のタスクの同時実行のみを可能にするように構成されてもよく、したがって、タスクの実行が実行環境810内で現在アクティブである場合に、タスクに対応するワークアイテムを処理することを拒否してもよい。よって、スケジューリングアルゴリズムの実装によって、スケジューラ256は、タスクを実行する呼び出しを取得してもよく、そのような呼び出しを処理するための順序およびタイミングを選択するために、コーディネータ114の状態に関する情報を利用してもよい。したがって、スケジューラ256は、受信された呼び出しの数が他にコーディネータ114の計算リソースを上回るときでさえ、呼び出しの順序通りの処理がタスクを実行することを可能にすることができる。
図8の対話は、コーディネータ114の実行環境810と関連付けられた単一のリソースマネージャ254を参照して説明される。いくつかの実施形態では、スケジューラ256は、それからワークアイテム待ち行列802上で呼び出しを処理するための計算リソースの可用性を判定するために、複数のリソースマネージャ254と対話してもよく、または単一のリソースマネージャ254は、複数のデバイス(例えば、コーディネータ114および1つ以上の被調整デバイス112)の間のリソース可用性を監視するように動作してもよい。実例として、1つ以上の被調整デバイス112は、タスクを実行するように構成されてもよく、被調整デバイス112上で計算リソースの可用性を監視し、スケジューラ256にその可用性を報告するために、リソースマネージャ254を提供してもよい(または、コーディネータ114によって提供されるなどのリモートリソースマネージャ254を利用してもよい)。スケジューラ256は次いで、被調整デバイス112上でのタスクの実行が適切であるかどうかを判定してもよい。いくつかの例では、スケジューラ256は、タスクを実行するための(例えば、コーディネータ114または1つの被調整デバイス112上で)実行環境についての複数の潜在的な位置の間で選択するように構成されてもよい。実例として、コーディネータ114は、複数のデバイス上での実行のためのタスクを分散させるために、修正されたスケジューリングアルゴリズムを利用してもよく、複数のデバイスは、例えば、タスクを実行するデバイスの能力に基づいて変化してもよい(例えば、デバイスのハードウェア、計算リソースの可用性などに従って)。いくつかの例では、複数のコーディネータ114(同一の被調整環境110内で、または異なる環境110にわたってのいずれか)は、分散コンピューティングアルゴリズムに従って、タスクを実行するように集合的に動作してもよい。例えば、複数のコーディネータ114にわたるスケジューラ256は、過剰な計算能力を有する発見デバイスと通信してもよく、そのようなデバイスに待ち行列に入れられたワークアイテムを分散させてもよい。したがって、図8の例示的な実施例(単一のスケジューラ256およびリソースマネージャ254を含む)は、本質的に例示的であることが意図される。
図9を参照して、ワークアイテム待ち行列からワークアイテムを選択し、ワークアイテムに対応するタスクを実行するための例示的な対話が説明される。図9の対話は、例えば、図8の対話に続いて行われてもよい。それらの対話は、(1)において開始し、(1)では、スケジューラ256は、ワークアイテム待ち行列802から処理のためのワークアイテムを選択する。対話(1)は、例えば、図9に関して上記議論されたように、スケジューラ256によって実装されるスケジューリングアルゴリズムに従って行われてもよい。図9に関する例示を目的として、スケジューラ256が、処理のための「タスクA」への呼び出しをワークアイテム待ち行列802から選択していることが想定される。更に、タスクAへの呼び出しを処理するために十分な計算リソースがコーディネータ114に存在することが想定される。
(2)において、スケジューラ256は、リソースマネージャ254に、タスクAと関連付けられた実行環境を生成する要求を伝送する。図9の説明を目的として、タスクAと関連付けられた現在の実行環境が存在しないことが想定される。よって、リソースマネージャ254は、(3)において、タスクAと関連付けられた実行環境のために必要とされるリソースのセットを判定する。リソースは、例えば、プロセッサ可用性およびメモリなど、計算リソースの一部を含んでもよい。リソースは更に、タスクAを実行するために必要とされるランタイム818またはドライバおよびユーティリティ820などのデータリソースを含んでもよい。実例として、タスクAが所与のプログラミング言語(例えば、Python、GO、Java、Javascriptなど)で記述されたコードに対応する場合、リソースマネージャ254は、タスクAの実行がそのプログラミング言語に対応するランタイムへのアクセスを必要とすると判定してもよい。タスクAがコーディネータ114への物理周辺機器(特殊化された入力/出力デバイスなど)と対話し、またはそれを管理するためのコードに対応する場合、リソースマネージャ254は、タスクAの実行がその物理周辺機器と関連付けられたライブラリ、ドライバ、またはユーティリティへのアクセスを必要とすると判定してもよい。1つの実施形態では、ランタイム、ドライバ、ユーティリティ、または他の依存関係は、タスク自体についてのデータ内に記憶されてもよい(例えば、タスクについてのコンテナのデータイメージ内に)。よって、実行環境810へのタスクのデータのプロビジョニングは、タスクに全ての必要とされる依存関係を提供するのに十分であることができる。しかしながら、個々のタスクについてのデータ内での依存関係のそのような包含は、複数のタスクが依存関係を共有する場合に不十分であることがある(例えば、複数のタスクが同一のドライバ、ライブラリ、ランタイムなどを利用する場合)。これは特に、コーディネータ114が、コーディネータ114上で実行されることになることが要望されるタスクの数と比較して、制限されたデータ記憶装置を有するときに問題となる場合がある。したがって、いくつかの実施形態では、コーディネータ114上のランタイム818、並びにドライバおよびユーティリティ820は、実行環境810とは別個のコーディネータのメモリに記憶されてもよい。ランタイム818、並びにドライバおよびユーティリティ820(または、他の依存関係)へのアクセスを可能にするために、リソースマネージャ254は、所与のタスクについての実行環境に、別個に記憶されるように、それらのランタイム818、並びにドライバおよびユーティリティ820(または、他の依存関係)へのアクセスを提供してもよい。異なる実行環境の間のセキュリティを維持するために、実行環境の外側へのそのようなアクセスが制限されることがある(例えば、読み出しのみ)。例えば、リソースマネージャ254が実行環境としてコンテナを利用する場合、コンテナは、コーディネータ114への必要とされる依存関係の位置への読み出しのみのマウントポイントまたはアクセス制限シンボリックリンクが提供されてもよい。よって、複数の実行環境は、所与の依存関係へのアクセスを共有してもよく、コーディネータ114の総データ記憶使用量は、依存関係の別個の記憶および重複した記憶に対して減少することができる。
いくつかの例では、複数の実行環境は、所与の依存関係への読み出しのみのアクセスを共有することを可能にされてもよく、その依存関係への局所化された修正を行う能力を維持する。例えば、コーディネータ114は、いくつかの例では、共通メモリ空間(例えば、コーディネータ114の下層のファイルシステム)への読み出しのみのアクセスおよび局所化されたメモリ空間(例えば、タスクと関連付けられた実行環境または他の記憶空間の一部)への読み出し/書き込みアクセスを提供し、実行環境に、共通メモリ空間および局所化されたメモリの組み合わされたビュー(「ユニオンマウント」)を提示するために、ユニオンマウンティング(または、ユニオンファイルシステム)を利用してもよい。特に、局所化されたメモリ空間は、「より上位の」ファイルシステムとして利用されてもよく、共通メモリ空間は、「より低位の」ファイルシステムとして利用されてもよい。そのようにして、ユニオンマウントへの書き込みは、「より上位の」局所化されたメモリ空間に関して行われてもよく、ユニオンマウントからの読み出しは、要求されたファイルがそのようなメモリ空間に存在する場合に「より上位の」局所化されたメモリ空間から行われてもよく、または要求されたファイルが局所化されたメモリ空間に存在しない場合に「より低位の」共通メモリ空間から行われてもよい。ユニオンマウントは、「より上位の」局所化されたメモリ空間にホワイトアウトデータを書き込むことによって、「より低位の」共通メモリ空間内のデータを削除する明らかな能力を提供してもよく、その結果、ユニオンマウントからのデータにアクセスする試みが失敗するが、共通メモリ空間上の下層のデータは効果的でない。この方式では、複数の実行環境は、データの共通セット(例えば、依存関係)にアクセスすることを可能にされることができ、局所化ベースでデータのその共通セットを修正および削除する明らかな能力を維持する。いくつかの例では、ユニオンマウントは、コーディネータ114の全てまたは実質的に全ての記憶空間に書き込む明らかな能力を提供するために利用されてもよい。例えば、ユニオンマウントは、より低位の共通メモリ空間としてルートディレクトリを利用してもよい。他の例では、ユニオンマウントは、ルートディレクトリ内のサブディレクトリ、または全ての非隠しファイルに書き込む明らかな能力など、コーディネータ114の全ての記憶空間よりも少なく書き込む明らかな能力を提供するために利用されてもよい。よって、実行環境に提供されるデータは、その環境の要件に従って修正されてもよい。
タスク(図9の実施例では、タスクA)についての必要とされる依存関係を判定した後、リソースマネージャ254は、(4)において、タスクについての実行環境を生成する。上記述べられたように、そのような実行環境は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「chroot jail」もしくはPython仮想環境「virtualenv」などの「サンドボックス」環境である。上記述べられたように、リソースマネージャ254は、タスク自体に対応するコード(例えば、コーディネータ114のデータ記憶装置または外部データ記憶装置から取り出されるような)、タスクによって必要とされるいずれかのランタイム818、並びにタスクによって必要とされるいずれかのドライバおよびユーティリティ820を含む、タスクを実行するために必要とされるいずれかのデータリソースを実行環境にプロビジョニングしてもよい。生成された実行環境が、タスクAの環境816として図9に表される。その後、(5)において、リソースマネージャ254は、スケジューラ256に、実行環境が作成されたことを通知し、スケジューラ256への実行環境(つまり、タスクAの環境816)を識別する。
スケジューラ256は次に、環境内でのタスクの実行を呼び出すために、実行環境についての識別情報を利用することができる。したがって、図9の対話では、スケジューラ256は、タスクへの初期の呼び出し内に含まれるパラメータに従ってタスクを実行するために(例えば、呼び出しがワークアイテム待ち行列802にエンキューされる前)、タスクAの環境816に呼び出しを伝送することができる。よって、タスクAは、そのタスクに対応するコードの機能性を実施するために、実行環境816内でコーディネータ114において実行されることができる。
上記述べられたように、いくつかの実施形態では、スケジューラ256は、待ち行列802のワークアイテムを処理するために、異なるデバイスにわたって複数のリソースマネージャ254と通信してもよく、または単一のリソースマネージャ254は、複数のデバイスにおいて実行環境810を管理するように構成されてもよい。したがって、図9の対話は、いくつかの実施形態では、そのような構成に対処するように修正されてもよい。例えば、スケジューラ256が複数のリソースマネージャ254と対話する場合、スケジューラは、それから実行環境を要求し(例えば、上記説明されたように、スケジューリングアルゴリズムに従って)、その後、適切なリソースマネージャ254と対話して、実行環境情報を取得するための適切なリソースマネージャ254を選択するように構成されてもよい。別の実施例として、スケジューラ254が複数のデバイスにおいて実行環境810を管理するリソースマネージャ254と対話する場合、リソースマネージャ254は、適切なデバイス(例えば、デバイスによって提供されるタスクおよびリソースの要件に従って選択された1つ)上で実行環境を生成し、実行環境を識別する情報を返却するように構成されてもよい。したがって、図9の対話は、被調整環境110の構成に従って変化してもよい。
図10を参照して、オンデマンドコード実行システム上でタスクを実行する呼び出しなど、ワークアイテムの待ち行列を処理するための例示的なルーチン1000が説明される。ルーチン1000は、例えば、図2に示されるように、コーディネータ114上で実行するスケジューラ256によって実装されてもよい。
ルーチン1000は、ブロック1002において開始し、ブロック1002では、スケジューラ256は、ワークアイテムの待ち行列を取得する。各々のワークアイテムは、例えば、コーディネータ114上で所与のタスクを実行する呼び出し(例えば、呼び出しにおいて指定されたパラメータに従って)に対応してもよい。実例として、ワークアイテム待ち行列は、スケジューラ256によって維持および管理されてもよく、その結果、コーディネータ114上で実行する他のタスクまたはソフトウェアは、ワークアイテムとしてタスク呼び出しをワークアイテム待ち行列上にエンキューするために、コーディネータにタスク呼び出しを渡してもよい。
ブロック1004において、スケジューラ256は、コーディネータ114についての計算可用性を取得する。計算可用性は、計算リソース(プロセッサ、メモリ、帯域幅など)の可用性に関するいずれかの測定基準を含んでもよい。1つの実施形態では、計算可用性は、コーディネータ114のオペレーティングシステムから直接取得される。別の実施形態では、計算可用性は、リソースマネージャなど、コーディネータ114上で実行するアプリケーションから取得される。ブロック1004の実装態様は、コーディネータ114上の実行環境の状態、それらの実行環境内で実行するタスクのセットなど、コーディネータ114の状態に関する他の情報を取得することも含んでもよい。
ブロック1006において、スケジューラ256は、デキューおよび処理する1つ以上のワークアイテムを判定するために、計算リソース可用性(および、潜在的には、実行環境内で実行するタスクのセットなどの他の入力)を判定したことに従って、ワークアイテム待ち行列にスケジューリングアルゴリズムを適用する。上記議論されたように、いずれかの数のスケジューリングアルゴリズムは、ファーストインファーストアウトスケジューリング、最先デッドラインファーストスケジューリング、最短残り時間スケジューリング、固定優先度プリエンプティブスケジューリング、およびラウンドロビンスケジューリングなど、待ち行列を処理する際にスケジューラ256によって利用されてもよい。いくつかの例では、スケジューリングアルゴリズムは、タスクの作成者によって、コーディネータの管理者によって、呼び出しエンティティによってなど、タスクに割り振られた優先度にも少なくとも部分的に基づいてもよい。
ルーチン1000の実装態様は、スケジューラ256が、実装されるスケジューリングアルゴリズムに従って、ワークアイテム待ち行列からワークアイテムをデキューするかどうか、およびワークアイテムに対応するタスクを実行するかどうかを判定したことに従って、ブロック1007において変化する。スケジューラ256が、デキューされるべきワークアイテムがないと判定する場合(例えば、ワークアイテムによって呼び出されるタスクを実行するために十分な計算リソースが存在せず、ワークアイテムの優先度が、更に利用可能な計算リソースを作成するために、いずれかの現在実行しているタスクを中止することを保証しないことを理由に)、ルーチン1000は、上記説明されたように、ブロック1004に戻る。
例えば、ワークアイテムによって呼び出されるタスクを実行するために十分な計算リソースが存在し、またはワークアイテムの優先度が、利用可能なそのようなリソースを作成することを保証することを理由に、スケジューラ256が、ワークアイテムがデキューされるべきであると判定する場合(例えば、現在実行しているプロセスを構文解析することによって)、ルーチン1000は、ブロック1008を続け、ブロック1008では、スケジューラ256は、ワークアイテムによって呼び出されるタスクを実行するための実行環境の識別情報を取得する。実例として、スケジューラ256は、リソースマネージャに要求を発行することによって、そのような識別情報を取得してもよく、リソースマネージャは、所与のタスクの実行に割り当てられた実行環境を識別してもよく(および、潜在的には生成する)、スケジューラ256に実行環境の識別情報を返却してもよい。実行環境を識別し、潜在的には生成するためにリソースマネージャによって実装されてもよい1つの例示的なルーチンは、以下で、図11を参照して説明される。
ブロック1010において、スケジューラ256は、ブロック1008において識別された実行環境に、デキューされたワークアイテムに対応するタスクを実行する呼び出しを渡す。実例として、実行環境は、呼び出されるタスクに対応するコードと共に、そのようなコードのいずれかの依存関係がプロビジョニングされてもよい(例えば、リソースマネージャのアクションにより)。よって、スケジューラ256は、コードを実行する実行環境への呼び出しを行ってもよく、デキューされたワークアイテムと関連付けられたいずれかのパラメータのコードを渡してもよい。よって、スケジューラ256は、待ち行列からのワークアイテムを処理させてもよい。
ルーチン100は次いで、ブロック1012を続け、ブロック1012では、実装態様は、ワークアイテム待ち行列の状態に従って変化してもよい。例えば、待ち行列内に更なるワークアイテムが存在する場合、ルーチン1000は、上記説明されたように、ブロック1004に戻ってもよい。待ち行列内に更なるワークアイテムが存在しない場合、ルーチン1000は、ブロック1014において終了してもよい。
例示的な目的により、ルーチン1000の1つの可能な実装態様が説明されるが、当業者は、このルーチン1000に対する変形が可能であることを認識するであろう。例えば、いくつかの例では、ルーチン1000は、連続ループとして実装されてもよく、その結果、それは、スケジューラ256が動作している限り実行する。別の実施例として、ルーチンの様々な部分は、全体的にもしくは部分的に並列して稼働してもよく、または複数の別個のルーチンとして稼働してもよい。実例として、第1のルーチンは、リソース可用性を連続して取得するように動作してもよく、第2のルーチンは、スケジューリングアルゴリズムを介して、ワークアイテム待ち行列に現在既知のリソース可用性を適用し、第3のルーチンは、デキューされたワークアイテムのデキューおよび処理を実装する(例えば、実行環境を取得し、そのような実行環境に呼び出しを渡す)。よって、ルーチン1000のブロックは、本質的に例示であることが意図される。
図11を参照して、タスクを実行するための実行環境を識別し、潜在的に作成するための1つの例示的なルーチン1100が説明される。ルーチン1100は、例えば、コーディネータ114により実行されるリソースマネージャ254によって実施されてもよい。
ルーチン1100は、ブロック1102において開始し、ブロック1102では、リソースマネージャ254は、タスクを実行するための実行環境についての要求を取得する。要求は、例えば、図10を参照して上記説明されたなど、ワークアイテム待ち行列の処理に従ってスケジューラから取得されてもよい。
ブロック1104において、リソースマネージャ254は、実行環境にプロビジョニングされることになるリソースのセットを判定する。リソースは、例えば、計算リソース(例えば、プロセッサ使用量、メモリ、帯域幅など)と共に、ランタイム、ドライバ、ライブラリ、または他の依存関係などのデータリソースを含んでもよい。リソースのセットは、例えば、実行環境内で実行することを意図されたタスクに関する情報に基づいて判定されてもよい。例えば、リソースマネージャ254は、タスクの実行のために必要とされるリソースのセット(例えば、タスクの作成者、コーディネータの管理者、タスクを実行する呼び出しのパラメータによって定義されるような)を判定してもよく、実行環境のために必要とされるリソースとしてリソースのセットを識別してもよい。
ブロック1104において、リソースマネージャ254は、既存の実行環境が利用のために利用可能であるかどうかを判定する。1つの実施形態では、リソースマネージャ254は、環境がタスクの実行に以前に割り振られていたときのみ、そのタスクの実行のために既存の実行環境を利用してもよい。別の実施形態では、リソースマネージャ254は、環境が類似のタスクの(例えば、セキュリティカテゴリなど、タスクの同一のカテゴリ内の)実行に以前に割り振られていたとき、または環境がブロック1104において判定されることが必要ともされるリソースを以前にプロビジョニングされていたとき、既存の実行環境を利用してもよい。
既存の環境が利用可能である場合、ルーチン1100は、ブロック1106に進み、ブロック1106では、リソースマネージャ254は、新たなタスク実行について環境を準備するように、必要に応じて既存の実行環境を更新する。実例として、ブロック1104において必要とされるリソースが、実行環境に現在プロビジョニングされているリソースと一致しない場合、リソースマネージャ254は、環境に追加で必要とされるリソースをプロビジョニングしてもよい(および、潜在的に、使用されていないドライバ、ユーティリティ、ライブラリなど、必要とされていないリソースへのアクセスを除去する)。リソースマネージャ254は更に、前のタスクの間に実行環境への変更が後続の実行に影響を与えないことを保証するために、実行環境をリフレッシュまたは「消去」してもよい。例えば、リソースマネージャ254は、実行環境内で環境変数を消去してもよく、または実行環境と関連付けられたデータキャッシュもしくは一時ファイルディレクトリを消去してもよい。その後、ルーチン1100は、ブロック1114に進み、ブロック1114では、実行環境114の識別情報(例えば、名前、ロケータなど)は、要求に応答してスケジューラなどに返却される。ルーチン1100は次いで、ブロック1116において終了する。
ブロック1104に戻り、既存の実行環境が利用可能でない場合、ルーチン1100は、ブロック1108に進み、ブロック1108では、リソースマネージャ254は、新たな実行環境を生成するためにリソースの再要求が必要とされるかどうかを判定する。実例として、ブロック1104において判定された、必要とされるコンピュータリソースが、コーディネータの利用可能な計算リソースを上回る場合、リソースマネージャ254は、既存の実行環境を中止または休止することによって、計算リソースが再要求されるべきであると判定してもよい。そのような例では、ルーチン1100は、ブロック1110に進み、ブロック1110では、リソースマネージャ254は、別のアクティブな実行環境を中止する。例えば、リソースマネージャ254は、他のアクティブな実行環境内で実行するスレッドへの呼び出しまたは中断を渡してもよく、実行環境が休止されることを示す。そのような呼び出しまたは中断は、スレッドにその状態を保存させてもよく、その結果、スレッドは、後の時間点において(例えば、計算リソース可用性が増大するとき)再開されることができる。他の例では、リソースマネージャ254は、他の実行環境の状態を保存するように動作してもよい。1つの実施形態では、他の実行環境の状態は、実行環境のスナップショットイメージを取ることによってなど、コーディネータのメモリに保存されてもよい。別の実施形態では、他の実行環境の状態は、デバイスシャドウを介して保存されてもよい。実例として、他の実行環境内で実行するタスクは、コーディネータによって「デバイス」と考えられてもよく、デバイスシャドウと関連付けられてもよい。実行の環境および実行の位置内の変数の現在の値など、他の実行環境の状態は、デバイスシャドウに保存されてもよい。よって、他の実行環境内で実行するタスクは、デバイスシャドウおよび保存された値を参照することによって再開されてもよい。デバイスシャドウの使用は、上記参照によって組み込まれた、「700出願」において更に詳細に説明される。
別の実行環境を中止することによって、リソースマネージャ254は、新たに生成された実行環境による使用のための計算リソースを再要求してもよい。ルーチン1110は次いで、ブロック1008に戻り、ブロック1008では、追加のリソースが再要求されるべきかどうかが判定される。ルーチン1100は次いで、再要求されるべき追加のリソースがなくなるまで(例えば、新たな実行環境に割り振る十分なリソースが存在するまで)、ブロック1108とブロック1110との間のループを続けてもよい。ルーチン1100は次いで、ブロック1112に進む。
ブロック1112において、リソースマネージャ254は、ブロック1104において判定されたような、必要とされるリソースに基づいて新たな実行環境を生成する。上記述べられたように、実行環境は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「chroot jail」もしくはPython仮想環境「virtualenv」などの「サンドボックス」環境など、タスクの実行に割り当てられたメモリのいずれかの論理部分を含むことができる。よって、ブロック1104において、リソースマネージャ254は、タスクの実行にメモリの部分を指定し、必要とされるリソースと共にメモリのその部分を割り当てることによって、そのような実行環境を生成してもよい。実例として、リソースマネージャ254は、実行環境の外側にあるデータリソースへのアクセスを提供されるように(例えば、外部データリソースに指し示す実行環境内で読み出しのみのマウントポイントを配置することによって)、実行環境にデータリソースを複製し、または実行環境を修正することによってなど、実行環境に必要とされるデータリソースをプロビジョニングしてもよい。
その後、ルーチン1110は、ブロック1114に進み、ブロック1114では、リソースマネージャ254は、スケジューラなどの要求するエンティティに、リソース環境の識別情報を返却する。ルーチン1110は次いで、ブロック1116において終了する。
図12を参照して、コーディネータ114上での第1のタスク実行が第2のタスク実行を呼び出すことを可能にするために通信マネージャ260の利用のための例示的な対話のセットが説明される。対話は、例えば、第1のタスクの実行が、被調整環境110の状態が所与の条件を満たすことを検出することを可能にし、その条件に応答してアクションを取る(例えば、照明などの被調整デバイス112にメッセージを伝送し、時刻、テナントの出発を検出したことに応答して状態を変更する、など)、第2のタスクの実行を呼び出すことを可能にするように行われてもよい。上記述べられたように、それらのタスク内通信を促進するための通信マネージャ260の使用は、非同期通信をロバストに扱うことをもたらす際、並びにタスク内通信または呼び出し内での様々なプロトコルおよび異なるプロトコルの使用がタスクを実行することを可能にするために有益となることができる。
対話は、(1)において開始し、(1)では、図12におけるタスクA 1202として記される、第1のタスクは、コーディネータ114上でタスクの実行を呼び出す呼び出しメッセージを生成する。呼び出しメッセージは、通信マネージャによってサポートされるいずれかのフォーマットにあってもよく、例えば、タスク実行に渡されることになるパラメータまたは要求された実行に関するメタデータ(実行に割り振るための優先度など)を指定してもよい。1つの実施形態では、呼び出しメッセージは、HTTP要求メッセージである。いくつかの例では、呼び出しメッセージは、タスクに対する一意な識別子を介してなど、呼び出されることになるタスクを指定してもよい。他の例では、呼び出されることになるタスクは、メッセージ自体のコンテンツを介してではなく、呼び出しメッセージについての宛先(例えば、メッセージが伝送されるURI)の使用によって指定されてもよい。メッセージによって使用される要求メソッドは、メッセージに関して引き受けられることになる所望のアクションを指定してもよい。例えば、HTTP POST要求は、タスクの実行を要求するために利用されてもよく、他の要求メソッドは、他の機能性と関連付けられてもよい(例えば、HTTP GET要求は、図13を参照して以下で説明されるように、タスクからの出力を要求するために利用されてもよい)。実例として、タスクA 1202における呼び出しメッセージの生成は、タスクA 1202のライブラリまたは他のコード依存関係への呼び出しを少なくとも部分的に介して促進されてもよく、タスクA 1202は、(例えば、コーディネータ114のプロバイダとは異なってもよい、コーディネータ114のエンドユーザ、タスクA 1202の作成者などとは反対に)コーディネータ114のプロバイダによって作成されてもよい。例えば、タスクA 1202は、ソフトウェア開発キットを使用して生成されてもよく、ソフトウェア開発キットは、タスクA 1202に、呼び出されるとき、通信マネージャ260への伝送のための呼び出しメッセージを生成する「タスク実行」関数を提供するライブラリを含ませる。
(2)において、タスクA 1202は、通信マネージャ260と関連付けられたURIに呼び出しメッセージを伝送する。実例として、通信マネージャ260は、コーディネータ114の指定されたポート上で要求をリスンするHTTPサーバを実装してもよく、タスクA 1202は、コーディネータ114のネットワークアドレスまたはドメインネームを含むURIと共に、指定されたポート(例えば、「localhost:8888」)に呼び出しメッセージを伝送してもよい。いくつかの例では、URIは更に、呼び出されることになるタスクの識別情報を含んでもよい。例えば、コーディネータ114上の各々のタスクは、コーディネータ114上の異なるリソースパスと関連付けられてもよく、その結果、タスクA 1202は、パス「/task_a」と関連付けられ、タスクBは、パス「/task_b」と関連付けられる、などである。よって、呼び出されるタスクと関連付けられたパスに呼び出しメッセージを伝送することによって、通信マネージャ260は、呼び出されるタスクを通知されることができる。図12の例示的な実施例では、タスクA 1202の実行がタスクBの実行を呼び出すことを要望すると想定される。よって、タスクA 1202の実行は、「localhost:8888/task_b」など、タスクBと関連付けられたURIに呼び出しメッセージを伝送してもよい。上記述べられたように、呼び出しを伝送するために使用される要求メソッドは、呼び出されるタスクに関する所望のアクションを指定してもよい。例えば、タスクと関連付けられたURIへの「POST」メソッド要求は、タスクの実行を開始する(例えば、要求内に含まれるパラメータまたはメタデータに従って)要望を示してもよい。
(3)において、呼び出しメッセージを受信すると、通信マネージャ260は、呼び出しメッセージに対応する呼び出されるタスクを識別する。実例として、通信マネージャ260は、呼び出しメッセージのパスまたはURI(例えば、「localhost:8888/task_b」または「/task_b」)をコーディネータ114上のタスクの対応する識別子(例えば、スケジューラ256によって利用されるような、タスクに対応する名前「タスクB」または一意な識別子)と関連付けるマッピングまたは他の情報を維持してもよい。その後、(4)において、通信マネージャ260は、呼び出しメッセージのコンテンツに従って(例えば、呼び出しメッセージ内に含まれる実行パラメータまたはメタデータを指定する、呼び出しメッセージに含まれるパラメータを有する)、識別されたタスクへの呼び出しを生成することができる。通信マネージャ260は次いで、スケジューラ256に、ワークアイテム待ち行列800に配置するためのタスク呼び出しを伝送することができる。スケジューラ256は次いで、例えば、図8および図9の対話に従って、呼び出されるタスクの実行を生じさせてもよい。実例として、通信マネージャ260は、プログラムインタフェース(例えば、API)の使用によって、タスク呼び出しを生成し、スケジューラ256に伝送してもよい。例えば、通信マネージャ260は、スケジューラ256にタスク呼び出しを渡すコードに対応する関数を呼び出してもよく、関数のパラメータは、タスク実行に渡されることになるパラメータ、呼び出しを扱うためのパラメータ(例えば、優先度レベル)などを指定する。いくつかの例では、生成された呼び出しは、呼び出しに対応するタスク実行を追跡するために使用可能な、実行識別子を含んでもよい。実行識別子は、例えば、図13に関して以下で議論されるように、呼び出しに割り振られ、呼び出しに対応するタスク実行の出力または結果を報告するために使用可能な(例えば)一意な番号または英数字文字列に対応してもよい。1つの実施形態では、実行識別子は、通信マネージャ260によって呼び出しに割り振られる。別の実施形態では、実行識別子は、タスクA 1202などの呼び出しタスクによって呼び出しに割り振られる。
(6)において、通信マネージャ260は更に、呼び出しタスク、タスクA 1202に確認応答を返却してもよい。確認応答は、例えば、呼び出しメッセージが通信マネージャ260によって受信され、通信マネージャ260によって成功して処理されており、よって、タスクを実行する呼び出しがスケジューラ256に伝送されており、ワークアイテム待ち行列800に配置されたことを示すことができる。他の例では、確認応答は、通信マネージャ260によってメッセージを扱う際、またはスケジューラ256によってメッセージを扱う際、メッセージ内のエラーを検出することなど、呼び出しメッセージの処理に成功していないことを示してもよい。確認応答メッセージは更に、呼び出しメッセージに対応する実行識別子を含むことができる(実行識別子が通信マネージャ260によって割り振られている例では)。
例示的な対話が図12に関して説明されているが、本開示の実施形態は、追加のまたは代替的な対話を含んでもよい。例えば、通信マネージャ260は、いくつかの例では、いくつかの既知の認証メッセージのいずれかに従って呼び出しメッセージを認証することによってなど、呼び出しメッセージの正当性を確認してもよい。上記述べられたように、いくつかの実施形態では、通信マネージャ260は、複数のプロトコル(または、同一のプロトコルの複数のバージョン)に従って、呼び出しメッセージの伝送を可能にすることができる。更に、通信マネージャ260は、いくつかの例では、本分野では「HTTPS」と称される、HTTPオーバセキュアソケットレイヤ(SSL)/トランスポートレイヤセキュリティ(TLS)の実装によってなど、呼び出しメッセージまたは他の情報のセキュア伝送を可能にすることができる。
第1のタスク実行が第2のタスク実行の要求を伝送することを可能にすることに加え、第1のタスク実行が第2のタスク実行の結果または出力を取得することを可能にすることが有益である場合がある。例えば、第1のタスクの実行は、被調整デバイス112と対話し、そのデバイス112の状態を取得するタスクなど、第2のタスクの実行への呼び出しを伝送することができる。したがって、第1のタスクの実行は、第2のタスクの実行からデバイス112の状態を受信することからの利点を受けることがある。上記議論された図12の対話にあるように、タスク実行の間のデータの伝送は、非同期実行と関連付けられた言語または遅延の間の不一致などの問題を生じさせることがある。よって、通信マネージャ260は更に、タスクの出力または結果(例えば、第2のタスクの実行)が呼び出しタスク(例えば、第1のタスクの実行)に提供されることを可能にすることができる。
タスク実行の出力または結果を提供するために通信マネージャ260の使用のための対話が図13を参照して説明される。特に、図13の対話は、図13のタスクB 1204として識別されたタスク実行が、図13のタスクA 1202として識別された呼び出しタスク実行に実行の出力または結果を報告することを可能にすることができる。いくつかの例では、図13の対話は、タスクA 1202によって、タスクB 1204を実行する要求の伝送に続いて行われてもよい。図13の例示的な実施例では、対話の1つの潜在的な順序付けは、例示を目的に表され、その例示では、タスクA 1202は、通信マネージャ260において出力が受信される前に、通信マネージャ260に、タスクB 1204から出力を取得する要求を伝送する。対話のこの順序付けは、例えば、タスクA 1202および通信マネージャ260がHTTP「ロングポーリング」技術を利用し、それによって、タスクA 1202が即刻な応答を必要とすることなく通信マネージャ260とのHTTP接続を開始し、その結果、通信マネージャ260がタスクA 1202に新たな情報(例えば、タスクB 1204の出力)を通知するために既存のHTTP接続を使用することができる場合に行われてもよい。対話の他の順序付けが可能である。例えば、タスクA 1202は、通信マネージャ260がタスクB 1204の出力を取得した後、通信マネージャ260にその出力を取得する要求を伝送してもよく、その例では、通信マネージャ260は、要求に即刻で応答してもよい。更なる実施例として、通信マネージャ260は、いくつかの実施形態では、タスクA 1202が通信マネージャ260との接続を開始することを必要とすることなく、タスクA 1202にタスクB 1204の出力を通知するために、「プッシュ」通信機構を利用してもよい。よって、図13に表される順序付けは、本質的に例示的であることが意図される。
(2)において、タスクA 1202は、通信マネージャ260に応答要求メッセージを伝送する。実例として、応答要求メッセージがHTTPメッセージである場合、メッセージは、通信マネージャ260と関連付けられたURI(例えば、「localhost:8888」)に伝送されてもよい。いくつかの例では、応答要求メッセージは、タスク実行を識別する実行識別子を含んでもよく、タスク実行から出力が検索される。例えば、応答要求メッセージは、タスクと関連付けられたURIにアドレス指定されたHTTPメッセージ内にヘッダとして実行識別子を含めてもよく、タスクから出力が要求される。他の例では、メッセージが伝送されるURIは、URI内にパスの一部として実行識別子を含めてもよい。例えば、実行識別子「1」に対応するタスク実行の出力についての要求は、実行識別子がコーディネータ114においてタスクにわたって一意である、「http://localhost:8888/1」に伝送されてもよい。実行識別子がタスクにわたって一意でない場合、または他にそれが望ましいとき、それから出力が要求されるタスクの識別子も、URIのパス内に含まれてもよい。例えば、「タスクB」の実行「1」の出力についての要求は、「http://localhost:8888/task_b/1」に伝送されてもよい。要求は、実例として、要求のタイムアウト期間など、通信マネージャ260において要求を処理するためのパラメータを含むことができ、その結果、通信マネージャ260がタイムアウト期間期間内に応答を取得しない場合、エラーメッセージがタスクA 1202に返却される。いくつかの例では、要求は、通信マネージャ260が、タスクB 1204の出力が指定された基準(例えば、絶対値、閾値、値範囲など)に従うときのみタスクA 1202に通知するなど、要求に応答してタスクA 1202に情報をいつ返却するべきか、および返却するべきかどうかを指定する基準を含んでもよい。上記述べられたように、応答要求メッセージの伝送は、HTTPロングポーリング技術に従って行われてもよく、その結果、タスクA 1202と通信マネージャ260との間の接続は、通信マネージャ260がメッセージに即刻で応答することを必要とすることなく維持される。
図13の例示的な実施例では、(3)において、タスクB 1204は出力を生成する。出力は、タスクB 1204に渡された入力を処理した結果としてなど(例えば、タスクB 1204を実行する呼び出しの一部として)、タスクB 1204に対応するコードの実行により生成されたいずれかのデータ、タスクB 1204(例えば、タスクB 1204は、被調整デバイス112と対話するコードに対応する)の実行の間に被調整デバイス112から取得されたデータなどであってもよい。(4)において、出力は、タスクB 1204の実行に割り振られた実行識別子を使用して、通信マネージャ260に伝送される。実例として、出力は、出力を含むコンテンツと共に、HTTP POSTメソッドを利用するHTTP要求としてタスクBに伝送されてもよい。1つの実施形態では、要求は、出力を生成するタスクに対応する実行識別子を含んでもよい(例えば、要求へのヘッダとして)。要求は、対話(2)に関して上記議論されたURI(例えば、「http://localhost:8888/1」または「http://localhost:8888/task_b」)に一致してもよい、実行識別子および/またはタスクB 1204と関連付けられたURIに伝送されてもよい。
(5)において、通信マネージャ260は、タスクB 1204によって提供される出力をタスクA 1202によって伝送された要求メッセージに、両方のメッセージが共通URIに伝送されること、および共通実行識別子を含む(例えば、URI内またはヘッダフィールド内に)ことを検出することによってなどで一致させる。(6)において、通信マネージャは、タスクB 1204によって提供される出力を含む、タスクA 1202の要求メッセージへの応答を生成する。図13に表される実施形態では、対話(2)において伝送された応答要求メッセージがHTTPロングポーリング技術の実装を表す場合、対話(6)において生成された応答は、対話(2)の要求メッセージへの応答であってもよい。他の実施形態では、対話(6)は、独立して伝送されたメッセージ(例えば、タスクA 1202への「プッシュ」メッセージ)の生成を含んでもよい。
(7)において、タスクB 1204の出力を含む、通信マネージャ206において生成された応答は、タスクA 1202に伝送される。したがって、タスクA 1202は、タスクB 1204によって生成された出力を取得してもよく、タスク内通信が可能にされることができる。上記説明を考慮して認識されるように、タスク内通信を可能にするための通信マネージャ260の使用は、いくつかの利点を含むことができる。例えば、各々のタスク(例えば、タスクA 1202およびタスクB 1204)は、異なるプロトコル、または同一のプロトコルの異なるバージョンを介して、通信マネージャ260と通信してもよい。その上、図13に表されるタスク内通信は、各々の言語が通信マネージャ260によってサポートされるプロトコルを実装することができる限り、タスクの特定の言語に依存せず、異なる言語で記述されたタスクの間にあってもよい。加えて、通信マネージャ260の機能性は、タスク内通信のコンテンツ(例えば、メッセージ本文)に依存しないが、通信が伝送されるアドレスまたは通信と関連付けられたヘッダ値に基づいてのみ動作することが可能であってもよい。このようにして、タスクは、通信マネージャ260の機能性を変える必要なく、いずれかのフォーマットのデータを伝送することを可能にされてもよい。また更に、本明細書で説明される通信マネージャ260は、タスクの代わりに様々な機能性を実装することができ、その結果、それらのタスクは、それらの機能性自体を実装する必要がない。例えば、通信マネージャ206は、1つ以上のタスクとの通信を認証してもよく、タスクからの要求の正当性を確認してもよく、要求に関するタイムアウトまたはエラー制御を実装してもよい(例えば、ロバストな非同期呼び出しを可能にするために)。いくつかの例では、通信マネージャ260は、タスクが通信を受信および処理することを保証するために、タスクとの失敗した通信を再送信することによってなど、「サービス品質」保証を実装してもよい。よって、通信マネージャ260は、個々のタスク実行の間の直接通信よりも大きな利点をもたらす。
図14を参照して、例示的なクロスタスク通信ルーチン1400が説明される。ルーチン1400は、例えば、通信マネージャ260によって、コーディネータ114上のタスクの実行の間の通信を可能にするために実装されてもよい。
ルーチン1400は、ブロック1402において開始し、ブロック1402では、通信マネージャ260は、タスクと関連付けられたURIにアドレス指定された呼び出しメッセージを取得する。実例として、呼び出しメッセージは、コーディネータ114のドメインネーム、通信マネージャ260によって実装されたHTTPサーバと関連付けられたポート、および呼び出されるタスクと関連付けられたパス(例えば、「http://<domain>:<port>/<path>」のフォーマットにある)を含む、URIへのHTTP POST要求であってもよい。ブロック1403において、通信マネージャ260は、呼び出しタスク、呼び出しに対応する実行の出力または結果など、呼び出しエンティティに返却するために利用されることができる(以下で説明されるように)、呼び出しと関連付けられることになる実行識別子を取得する。1つの実施形態では、実行識別子は、呼び出しメッセージ内で伝送される(例えば、POST要求のコンテンツとして)。別の実施形態では、実行識別子は、通信マネージャ260によって呼び出しに割り振られ、呼び出しエンティティに返却されてもよい(例えば、POST要求への確認応答または応答の一部として)。
ブロック1404において、通信マネージャ260は、呼び出しメッセージが伝送されたURIに基づいて、呼び出しメッセージに応答して呼び出されることになるタスクを判定する。例えば、通信マネージャ260は、URIのパス(例えば、「/task_identifier」)を、コーディネータ114において維持された特定のタスク(例えば、「タスクX」)に関連付けるマッピングまたは他の情報を維持してもよい。よって、呼び出しメッセージが伝送されたパスを検査することによって、通信マネージャ260は、呼び出しメッセージに応答して、呼び出しへのタスクを判定してもよい。
ブロック1406において、通信マネージャ260は、ブロック1404において識別されたタスクを実行する呼び出しを生成し、コーディネータ114のスケジューラ(上記議論されたように、ワークアイテム待ち行列に従って、呼び出しをエンキューし、呼び出されるタスクの実行を生じさせるように機能してもよい)に呼び出しを伝送する。実例として、呼び出しは、タスクの実行に渡されることになるパラメータ、またはタスクがどのように実行されるべきかに関するパラメータ(例えば、実行に割り振るための優先度)を含んでもよい。そのようなパラメータは、例えば、ブロック1402において取得された呼び出しメッセージから取得されてもよい。呼び出しは更に、ブロック1403において取得されるような、呼び出しと関連付けられた実行識別子を含むことができ、その結果、呼び出しによって開始されるタスク実行は、実行識別子を参照することによって、通信マネージャ260に呼び出しの結果を報告することができる。
ブロック1408において、通信マネージャ260は、実行識別子を参照して、呼び出しに対応するタスクの実行に関する出力または他のデータを取得する。実例として、出力は、通信マネージャ260に対応するサーバに、実行識別子を含むパスにアドレス指定され、出力に対応するコンテンツを含む、HTTP POSTメッセージとして伝送されてもよい。別の実施形態では、出力は、実行識別子を含むコンテンツと共に、HTTP POSTメッセージとして伝送されてもよい。
ブロック1410において、通信マネージャ260は、呼び出しメッセージのソースに出力を返却する。1つの実施形態では、通信マネージャ260は、出力についての要求への応答としてその出力を返却してもよく、要求は、実行識別子を含む。例えば、通信マネージャ260は、実行識別子を含むURIに伝送されたHTTP GETメソッドメッセージへの応答として出力を返却してもよい。別の実施形態では、通信マネージャ260は、それから呼び出しメッセージが受信されたエンティティに出力を独立して伝送してもよい(例えば、「プッシュ」通知として)。呼び出しメッセージのソースへの返却が図14において説明されるが、通信マネージャ260は、加えてまたは代わりに、別の宛先に出力を返却してもよい。例えば、通信マネージャ260において受信された呼び出しメッセージまたは別の通信(例えば、実行識別子を参照する別の通信)は、実行識別子に対応する出力についての代替的な宛先を指定してもよく、ルーチン1400は、その代替的な宛先に出力を返却することを含んでもよい。実例として、代替的な宛先の使用は、タスクの間で出力を再経路指定することを可能にすることができる。例えば、第1のタスクは、第2のタスクの実行を呼び出してもよく、第2のタスクにパラメータとして前に確立された実行識別子(例えば、第3のタスクの実行に対応する)を渡してもよい。第2のタスクは次いで、第2のタスクが元々第3のタスクの実行を引き起こすことに関与していなかった場合でさえ、第3のタスクの出力を取得するために実行識別子を利用してもよい。よって、呼び出しメッセージのソースへの出力の返却は、単純に出力についての1つの可能な宛先である。出力を返却した後、ルーチン1400は、ブロック1412において終了してもよい。
図15を参照して、オンデマンドコード実行環境150上のタスク実行とコーディネータ114上で実行する(または、実行されることになる)タスクとの間のタスク内通信を可能にするための例示的な対話が表される。上記議論されたように、いくつかの例では(および、或る構成の下では)、オンデマンドコード実行環境150において実行するタスクがコーディネータ114と通信することは困難である場合がある。例えば、コーディネータ114は、公然にアドレス指定可能なネットワークと関連付けられなくてもよく、被調整環境120の外側からのコーディネータ114への通信の確立を制限するセキュリティポリシの影響を受けることがあり、またはオンデマンドコード実行環境150との信頼できる通信を維持しないことがある(例えば、オンデマンドコード実行環境150と通信する際に、高ネットワーク待ち時間または伝送エラーの影響を受けることがある)。そのような問題に対処するために、コーディネータ114は、オンデマンドコード実行システムからの要求を連続して、間欠的に、または定期的に取り出して、コーディネータ114上でタスクを実行し、オンデマンドコード実行環境150にそのような実行の結果を報告するために、コーディネータ114上で実行するリモートインタフェースタスク1202を実装してもよい。
図15の対話は、(1)において開始し、(1)では、オンデマンドコード実行環境150は、コーディネータ114においてタスクを実行する呼び出しを取得する。実例として、呼び出しは、オンデマンドコード実行環境150において実行するタスクによって、またはオンデマンドコード実行環境150に呼び出しを伝送する(例えば、オンデマンドコード実行環境150のAPIを介して)クライアントデバイス102によって取得されてもよい。呼び出しは、例えば、呼び出されることになるタスクの識別情報と共に、タスクを実行するためのコーディネータ114の識別情報を含んでもよい。いくつかの例では、呼び出しは更に、実行の前もしくは実行の間にタスクに渡すためのパラメータ、またはタスクをどのように実行するかを制御するためのパラメータ(例えば、タスクの優先度)など、他の情報を含んでもよい。呼び出されることになるタスクの識別情報は、例えば、コーディネータ114、オンデマンドコード実行環境150、またはその両方の上でのタスクの名前または他の識別子を含んでもよい。コーディネータ114についての識別情報は、コーディネータ114の名前もしくは他の識別子、またはコーディネータ114が動作する被調整環境110の名前もしくは他の識別(例えば、単一のコーディネータ114がそのような環境110内に含まれるのみの例では)を含んでもよい。いくつかの例では、コーディネータ114の識別情報は、コーディネータ114がそれと関連付けられるオンデマンドコード実行環境150上のアカウントの指定を含んでもよい。
(2)において、オンデマンドコード実行環境150は、呼び出しが伝送されるべきコーディネータ114を識別する。実例として、オンデマンドコード実行環境150は、呼び出しが伝送されるべき特定のコーディネータ114を判定するために、呼び出しからコーディネータ114についての識別情報を抽出してもよい。その後、(3)において、オンデマンドコード実行環境150は、呼び出しの待ち行列に、コーディネータ114による取り出しを待つ呼び出しをエンキューする。実例として、オンデマンドコード実行環境150は、オンデマンドコード実行環境150から呼び出しを取得することを可能にされたコーディネータ114ごとに、コーディネータ114への伝送を待つ呼び出しの待ち行列を生成してもよい。よって、オンデマンドコード実行環境150は、宛先コーディネータ114に対応する待ち行列に、現在取得されている呼び出しを配置してもよい。いくつかの例では、オンデマンドコード実行環境150は、ファーストインファーストアウトアルゴリズムに従って、待ち行列を動作させてもよい。他の例では、オンデマンドコード実行環境150は、待ち行列に他のスケジューリングアルゴリズム(上記議論されたものなど)を適用してもよい。
(4)において、コーディネータ114上で実行するリモートインタフェースタスク1202は、オンデマンドコード実行環境150に、オンデマンドコード実行環境150において待ち行列に入れられたタスク呼び出しを取り出す要求を伝送する。リモートインタフェースタスク1202は、本明細書で説明される実施形態に従って、コーディネータ114においてタスクとして実装されてもよい。実例として、リモートインタフェースタスク1202は、オンデマンドコード実行環境150と連続して、間欠的に、または定期的に対話して、コーディネータ114上での実行のためのオンデマンドコード実行環境150において待ち行列に入れられたタスク呼び出しを取り出すように実行可能なコードに対応してもよい。1つの実施形態では、タスク呼び出しを取り出す要求は、オンデマンドコード実行環境150のURIにアドレス指定されたHTTP要求(例えば、GETメソッド要求)であってもよい。実例として、URIは、コーディネータ114に対応するとして、オンデマンドコード実行環境150によって指定されたパスを含んでもよい。
(5)において、オンデマンドコード実行環境150は、要求に応答して、リモートインタフェースタスク1202に、待ち行列に入れられた呼び出しを返却する。1つの実施形態では、オンデマンドコード実行環境150は、コーディネータ114に、全ての待ち行列に入れられたタスク呼び出しを返却してもよい。別の実施形態では、オンデマンドコード実行環境150は、コーディネータ114からの要求ごとの待ち行列に入れられた閾値数のタスク呼び出し(例えば、待ち行列からの最も高く順序付けられた呼び出し、または最も高く順序付けられたn個の呼び出し)のみを含んでもよい。
(6)において、リモートインタフェースタスク1202は、オンデマンドコード実行環境150から取り出された呼び出しに対応する呼び出しメッセージを生成する。1つの実施形態では、コーディネータ114は、コーディネータ114によって利用されるフォーマットに従って、新たな呼び出しを生成するために取り出された呼び出しからの情報を利用してもよい。例えば、上記説明されたように、コーディネータ114は、所与のフォーマットに従って(例えば、呼び出されるタスクを識別するURIにアドレス指定され、要求のコンテンツとしてタスクの実行に関するパラメータを含むHTTP POST要求として)、タスクを実行する呼び出しを取得するように構成された通信マネージャ260を含んでもよい。よって、リモートインタフェースタスク1202は、通信マネージャ260によって利用されるフォーマットに従って、新たな呼び出しを生成するために、取り出された呼び出し(例えば、オンデマンドコード実行環境150によって伝送されたHTTPパケットのコンテンツ)からの情報を利用してもよい。別の実施形態では、オンデマンドコード実行環境150は、カプセル化されたデータパケットとしてタスク呼び出しを返却するように構成されてもよく、その結果、それは、カプセル化されたリモートインタフェースタスク1202であってもよく、新たな呼び出しの独立した生成を必要とすることなく、コーディネータ114内で伝送されてもよい。
(7)において、コーディネータ114は、通信マネージャ260に呼び出しを伝送する。呼び出しは、上記説明された実施形態に従って伝送されてもよい(例えば、呼び出されるタスクを識別するURIにアドレス指定されたHTTP POST要求として)。その後、通信マネージャ260は、呼び出しをコーディネータ114のワークアイテム待ち行列上でエンキューさせ、コーディネータ114の実行環境内で実行させるように動作してもよい。タスクを実行する呼び出しを処理するための対話は、図8〜図13に関して上記説明されている。よって、図15の対話を介して、オンデマンドコード実行環境150は、コーディネータ114上でタスクの実行を生じさせるように動作してもよい。
オンデマンドコード実行環境150を介してコーディネータ114上でタスクの実行を開始するためにリモートインタフェースタスク1202の使用のための例示的な対話が図15に表されるが、リモートインタフェースタスク1202は、いくつかの例では、追加の機能性を実装してもよい。例えば、リモートインタフェースタスク1202は、コーディネータ114においてタスクの実行の出力または結果を取得し(例えば、図13の対話に従って)、オンデマンドコード実行環境150にそのような出力または結果を返却するように動作してもよい。実例として、出力または結果は、オンデマンドコード実行環境150に返却されてもよく、タスクの実行識別子(例えば、呼び出しエンティティまたはオンデマンドコード実行環境150によって割り振られてもよい)を含んでもよい。オンデマンドコード実行環境150は更に、図13を参照して上記説明されたのと同様に、呼び出しエンティティに出力または結果を返却するように機能してもよい。
図16を参照して、例示的な外部タスク呼び出しルーチン1600が説明される。ルーチン1600は、例えば、オンデマンドコード実行環境150によって実装されてもよい(例えば、オンデマンドコード実行環境150のフロントエンド152を介して)。ルーチン1600は、1602において開始し、1602では、オンデマンドコード実行環境150は、コーディネータ114に対してタスク呼び出し待ち行列を生成する。タスク呼び出し待ち行列は、オンデマンドコード実行環境150のメモリ内の論理構造として実装されてもよく、コーディネータ114においてタスクを実行する呼び出しを記憶するように構成されてもよい。タスク呼び出し待ち行列は、デバイスが、待ち行列が対応するコーディネータ114上でタスクの実行を要求することを可能にするために、URIなどのリソース識別子と関連付けられてもよい。
ブロック1604において、オンデマンドコード実行環境150は、コーディネータ114上でタスクを実行する呼び出しを取得する。呼び出しは、例えば、オンデマンドコード実行環境150のAPIを介して取得されてもよく、クライアントデバイス102、オンデマンドコード実行環境150上で実行するタスク、コーディネータ114上で実行するタスク、または他のデバイスによって生成されてもよい。呼び出しは、タスクに渡されることになるパラメータ、またはタスクの実行に関するパラメータ(例えば、優先度)を含んでもよい。
ブロック1606において、オンデマンドコード実行環境150は、タスクを実行することが意図されるコーディネータ114に対応する呼び出しをタスク呼び出し待ち行列内にエンキューする。いくつかの例では、オンデマンドコード実行環境150は、呼び出しの正当性を確認し(例えば、それが適切な認証情報、フォーマットを含むことを保証するために)、または呼び出しに実行識別子を割り振ることなど、待ち行列に呼び出しを配置する前に追加のアクションを引き受けてもよい。オンデマンドコード実行環境150は次いで、ブロック1608において、判定された順序付けに従って待ち行列内に呼び出しを分類するために、待ち行列にスケジューリングアルゴリズムを適用してもよい。スケジューリングアルゴリズムは、例えば、重み付けラウンドロビンアルゴリズムを含んでもよい。
ブロック1610において、オンデマンドコード実行環境150は、コーディネータ114から、コーディネータ114に対応する待ち行列に呼び出しを提供する要求を取得する。要求は、例えば、コーディネータ114上で実行するリモートインタフェースタスクによって生成されてもよい。1つの実施形態では、要求は、待ち行列に対応するURIにアドレス指定されたHTTP GETメソッド要求である。
その後、ブロック1612において、オンデマンドコード実行環境150は、スケジューリングアルゴリズムに従った待ち行列の順序付けに従って、待ち行列内の呼び出しを伝送する。1つの実施形態では、オンデマンドコード実行環境150は、コーディネータ114に、全ての待ち行列に入れられた呼び出しを伝送してもよい。別の実施形態では、オンデマンドコード実行環境150は、所与の要求に応答して、コーディネータ114に、閾値数の(例えば、1つの)呼び出しのみを伝送してもよく、コーディネータ114は、待ち行列に入れられた呼び出しを受信するために、複数の要求を伝送してもよい。実例として、呼び出しの伝送は、パブリックネットワーク(例えば、ネットワーク104)を通じてコーディネータに伝送するのに適切なフォーマットに呼び出しをカプセル化することを含んでもよく、その結果、コーディネータ114において呼び出しをデカプセル化することができ、呼び出しを独立して再作成することなく、コーディネータ114の通信マネージャに呼び出しを伝送することができる。よって、コーディネータ114は、オンデマンドコード実行環境150にサブミットされるような、タスクを実行する呼び出しを取得してもよい(例えば、リモートインタフェースタスクを介して)。その後、コーディネータ114は、被調整デバイス112の動作を管理することなど、所望の機能性を引き受けるために、上記説明された実施形態に従って呼び出しを処理してもよい。ルーチン1600は次いで、ブロック1614において終了してもよい。
上記述べられたように、オンデマンドコード実行環境150は、いくつかの例では、コーディネータ114上で実行されるタスクの出力の取り出しなど、追加の機能性を実装してもよい。そのような例では、ルーチン1600は、追加の要素を含むように修正されてもよく、または新たなルーチンが、コーディネータ114において実行されるタスクの出力の取り出しを促進するように、オンデマンドコード実行環境150によって実装されてもよい。例えば、オンデマンドコード実行環境150は、リモートインタフェースタスクによってオンデマンドコード実行環境150に配信されるような(例えば、タスクの実行識別子を含むURIにアドレス指定されたHTTP POSTメソッド要求として)、タスクの出力の報告を待ってもよい。オンデマンドコード実行環境150は次いで、呼び出しエンティティに出力の通知を伝送してもよく(例えば、「プッシュ」通知として)、または出力を記憶してもよく、その結果、呼び出しエンティティは、オンデマンドコード実行環境150からそれを要求することによって出力を取り出すことができる(例えば、タスクの実行識別子を含むURIにアドレス指定されたHTTP GETメソッド要求を介して)。よって、オンデマンドコード実行環境150は、いくつかの例では、コーディネータ114の通信マネージャと同様に動作してもよい。他の実施形態では、オンデマンドコード実行環境150は、そのような機能性を除外してもよく、コーディネータ114上で実行するリモートインタフェースタスクは、ネットワーク104を介してアクセス可能なネットワークアタッチドストレージシステムにそのような出力を記憶することなど、他の機構を介してタスク実行の出力を報告してもよい。
開示の様々な実施例の実施形態は、以下の条項によって説明されることができる。
条項1.
被調整デバイスの動作を管理するコーディネータコンピューティングデバイスをリモートに構成するシステムであって、前記システムは、
前記コーディネータコンピューティングデバイスについてのデバイスシャドウを含む非一時的データストアであって、前記デバイスシャドウは、前記コーディネータコンピューティングデバイスの所望の構成についてのバージョン識別子を示す、前記非一時的データストアと、
前記非一時的データストアと通信する配置デバイスと、を含み、
前記配置デバイスは、
前記コーディネータコンピューティングデバイスについての構成情報を取得することであって、前記構成情報は、前記コーディネータコンピューティングデバイスによって管理されることになる1つ以上の被調整デバイスおよび前記1つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる1つ以上のタスクを示し、前記1つ以上のタスクの個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記構成情報は更に、前記1つ以上のタスクの実行から取得されたメッセージに応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを判定するための基準を示すイベントフローテーブルを指定する、前記取得することと、
前記構成情報を含む構成パッケージを生成することであって、前記構成パッケージは、追加のバージョン識別子と関連付けられる、前記生成することと、
前記所望の構成が前記追加のバージョン識別子に対応することを示すように前記デバイスシャドウを修正することと、
前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知することと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記構成パッケージを伝送することであって、前記コーディネータコンピューティングデバイスは、前記構成パッケージ内で示される前記1つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる前記1つ以上のタスクを取り出すために、前記構成パッケージを利用するように構成される、前記伝送することと、
を行うようにコンピュータ実行可能命令により構成されたプロセッサを含む、
前記システム。
条項2.
前記プロセッサは更に、前記デバイスシャドウに対応するトピックへの前記コーディネータコンピューティングデバイスについてのサブスクリプションを取得するコンピュータ実行可能命令により構成され、
前記プロセッサは、前記コーディネータコンピューティングデバイスに、前記トピックへの発行の通知として前記修正されたデバイスシャドウを通知するように構成される、条項1に記載のシステム。
条項3.
前記通知は、MQTTプロトコルを介して伝送される、条項2に記載のシステム。
条項4.
前記被調整デバイスは、代替的な主要機能と関連付けられた汎用コンピューティングデバイス、シンデバイス、または組み込みデバイスのうちの少なくとも1つを含む、条項1に記載のシステム。
条項5.
前記コーディネータコンピューティングデバイスを更に含み、
前記コーディネータコンピューティングデバイスは、前記被調整デバイスの状態を管理するように集合的に構成されたプロセッサおよびメモリを含む、条項1に記載のシステム。
条項6.
コンピュータにより実行される方法であって、
コーディネータコンピューティングデバイスの登録を取得することであって、前記コーディネータコンピューティングデバイスは、前記コーディネータコンピューティングデバイスによって管理されることになる1つ以上の被調整デバイスを含む被調整環境と関連付けられる、前記取得することと、
前記コーディネータコンピューティングデバイスについてのデバイスシャドウを生成することであって、前記デバイスシャドウは、前記コーディネータコンピューティングデバイスの所望の構成についてのバージョン識別子を示す、前記生成することと、
前記コーディネータコンピューティングデバイスについての構成情報を取得することであって、前記構成情報は、前記1つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる1つ以上のタスクを示し、前記1つ以上のタスクの個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応する、前記取得することと、
前記構成情報を含む構成パッケージを生成することであって、前記構成パッケージは、追加のバージョン識別子と関連付けられる、前記生成することと、
前記所望の構成が前記追加のバージョン識別子に対応することを示すように前記デバイスシャドウを修正することと、
前記コーディネータコンピューティングデバイスに前記デバイスシャドウへの修正を通知することと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記構成パッケージを伝送することであって、前記コーディネータコンピューティングデバイスは、前記構成パッケージ内で示される前記1つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる前記1つ以上のタスクを取り出すために、前記構成パッケージを利用するように構成される、前記伝送することと、
を含む、前記コンピュータにより実行される方法。
条項7.
前記構成パッケージは更に、前記1つ以上のタスクのタスクうちの少なくとも1つからの前記被調整デバイス、または前記1つ以上の被調整デバイスのうちのある被調整デバイスにおいて取得されたメッセージに応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを判定するための基準を示すイベントフローテーブルを含む、条項6に記載のコンピュータにより実行される方法。
条項8.
前記構成パッケージは更に、前記被調整デバイスと前記コーディネータコンピューティングデバイスとの間の通信において使用されることになるセキュリティ証明書を含む、条項6に記載のコンピュータにより実行される方法。
条項9.
前記構成パッケージは更に、前記コーディネータコンピューティングデバイスによって維持されることになるデバイスシャドウのセットのインジケーションを含み、
前記デバイスシャドウのセットの個々のデバイスシャドウは、前記1つ以上の被調整デバイスの個々の被調整デバイスに対応する、条項6に記載のコンピュータにより実行される方法。
条項10.
前記コーディネータコンピューティングデバイスの前記登録を取得することは、前記デバイスシャドウに対応するトピックへの前記コーディネータコンピューティングデバイスについてのサブスクリプションを取得することを含み、
前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知することは、前記コーディネータコンピューティングデバイスに前記トピックへの発行の通知を伝送することを含む、条項6に記載のコンピュータにより実行される方法。
条項11.
前記コーディネータコンピューティングデバイスのユーザと関連付けられたクライアントコンピューティングから、前記1つ以上のタスクの少なくとも1つのタスクを取得することと、
前記コーディネータコンピューティングデバイスにおける前記構成パッケージの処理に応答して、前記少なくとも1つのタスクについての要求を受信することと、
前記コーディネータコンピューティングデバイスに前記少なくとも1つのタスクを提供することと、
を更に含む、条項6に記載のコンピュータにより実行される方法。
条項12.
前記コーディネータコンピューティングデバイスについての更新された構成情報を取得することと、
前記更新された構成情報から更新された構成パッケージを生成することであって、前記構成パッケージは、更新されたバージョン識別子と関連付けられる、前記生成することと、
前記所望の構成が前記更新されたバージョン識別子に対応することを示すように前記デバイスシャドウを修正することと、
前記コーディネータコンピューティングデバイスに前記デバイスシャドウへの修正を通知することと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記更新された構成パッケージを伝送することと、
を更に含む、条項6に記載のコンピュータにより実行される方法。
条項13.
コンピュータ実行可能命令を含む非一時的コンピュータ可読媒体であって、前記コンピュータ実行可能命令は、配置システムによって実行されるとき、前記配置システムに、
コーディネータコンピューティングデバイスについてのデバイスシャドウを生成することであって、前記デバイスシャドウは、前記コーディネータコンピューティングデバイスの所望の構成についてのバージョン識別子を示し、前記コーディネータコンピューティングデバイスは、前記コーディネータコンピューティングデバイスによって管理されることになる1つ以上の被調整デバイスを含む被調整環境と関連付けられる、前記生成することと、
前記コーディネータコンピューティングデバイスについての構成情報を取得することであって、前記構成情報は、前記1つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる1つ以上のタスクを示し、前記1つ以上のタスクの個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応する、前記取得することと、
前記所望の構成が追加のバージョン識別子に対応することを示すように前記デバイスシャドウを修正することと、
前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知することと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記構成パッケージを伝送することであって、前記コーディネータコンピューティングデバイスは、前記構成パッケージ内で示される前記1つ以上の被調整デバイスを管理するように前記コーディネータコンピューティングデバイスによって実行されることになる前記1つ以上のタスクを取り出すために、前記構成パッケージを利用するように構成される、前記伝送することと、
を行わせる、前記非一時的コンピュータ可読媒体。
条項14.
前記コンピュータ実行可能命令は更に、前記配置システムに、
前記1つ以上のタスクに対応する実行可能なコードを取得することであって、前記1つ以上のタスクは、
前記1つ以上の被調整デバイスの個々の被調整デバイスについてのデバイスシャドウを生成するように前記コーディネータコンピューティングデバイスによって実行可能な第1のタスクと、
前記1つ以上の被調整デバイスのうちの少なくとも1つ、または前記1つ以上のタスクのうちの少なくとも1つにアドレス指定されたメッセージを経路指定するように前記コーディネータコンピューティングデバイスによって実行可能な第2のタスクと、を含む、
前記取得することと、
前記コーディネータコンピューティングデバイスから前記1つ以上のタスクについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記1つ以上のタスクを伝送することと、
を行わせる、条項13に記載の非一時的コンピュータ可読媒体。
条項15.
前記1つ以上のタスクは更に、前記タスクと関連付けられたプロトコルに従って通信を可能にするように前記コーディネータコンピューティングデバイスによって実行可能な第3のタスクを含む、条項14に記載の非一時的コンピュータ可読媒体。
条項16.
前記構成パッケージは更に、前記コーディネータコンピューティングデバイスによって維持されることになるデバイスシャドウのセットのインジケーションを含み、
前記デバイスシャドウのセットの個々のデバイスシャドウは、前記1つ以上の被調整デバイスの個々の被調整デバイスに対応する、条項14に記載の非一時的コンピュータ可読媒体。
条項17.
前記コンピュータ実行可能命令は更に、前記配置システムに、
前記デバイスシャドウに対応するトピックへの前記コーディネータコンピューティングデバイスについてのサブスクリプションを取得させ、
前記コンピュータ実行可能命令は、前記配置システムに、前記コーディネータコンピューティングデバイスに前記トピックへの発行の通知を伝送することによって、前記コーディネータコンピューティングデバイスに前記修正されたデバイスシャドウを通知させる、条項14に記載の非一時的コンピュータ可読媒体。
条項18.
前記コンピュータ実行可能命令は更に、前記配置システムに、
前記コーディネータコンピューティングデバイスのユーザと関連付けられたクライアントコンピューティングから、前記1つ以上のタスクの少なくとも1つのタスクを取得することと、
前記コーディネータコンピューティングデバイスにおける前記構成パッケージの処理に応答して、前記少なくとも1つのタスクについての要求を受信することと、
前記コーディネータコンピューティングデバイスに前記少なくとも1つのタスクを提供することと、
を行わせる、条項14に記載の非一時的コンピュータ可読媒体。
条項19.
前記コンピュータ実行可能命令は更に、前記配置システムに、
前記コーディネータコンピューティングデバイスについての更新された構成情報を取得することと、
前記更新された構成情報から更新された構成パッケージを生成することであって、前記構成パッケージは、更新されたバージョン識別子と関連付けられる、前記生成することと、
前記所望の構成が前記更新されたバージョン識別子に対応することを示すように前記デバイスシャドウを修正することと、
前記コーディネータコンピューティングデバイスに前記デバイスシャドウへの修正を通知することと、
前記コーディネータコンピューティングデバイスから前記構成パッケージについての要求を取得することと、
前記コーディネータコンピューティングデバイスに前記更新された構成パッケージを伝送することと、
を行わせる、条項14に記載の非一時的コンピュータ可読媒体。
条項20.
前記1つ以上のタスクの少なくとも1つのタスクは、前記コーディネータコンピューティングデバイスで、および前記コーディネータコンピューティングデバイスとは別個のオンデマンドコード実行システム内の両方で実行可能である、条項14に記載の非一時的コンピュータ可読媒体。
条項21.
被調整環境内で1つ以上の被調整デバイスを管理するように構成されたコーディネータコンピューティングデバイス内でリソースを管理するシステムであって、前記システムは、
非一時的データストアであって、
実行されるとき、前記コーディネータ上で1つ以上のタスクを実行するように呼び出しの待ち行列を実装するスケジューラであって、前記1つ以上のタスクの個々のタスクは、前記被調整環境内で前記1つ以上の被調整デバイスの動作を管理するように前記コーディネータコンピューティングデバイスによって実行可能なコードに対応する、前記スケジューラと、
実行されるとき、前記1つ以上のタスクを実行するための実行環境を生成するリソースマネージャと、
に対応するコンピュータ実行可能命令を含む、前記非一時的データストアと、
前記非一時的データストアと通信し、前記スケジューラを実行するように構成されたプロセッサと、を含み、前記スケジューラの実行は、前記プロセッサに、
前記待ち行列内にタスク呼び出しのセットをエンキューすることであって、個々のタスク呼び出しは、前記1つ以上のタスクのうちのあるタスクを実行する呼び出しに対応する、前記エンキューすることと、
前記リソースマネージャから、前記コーディネータ上の計算リソースの可用性を取得することと、
処理のための前記タスク呼び出しのセットの少なくとも1つのタスク呼び出しを選択するために、計算リソースの前記可用性に少なくとも部分的に基づいて、前記待ち行列にスケジューリングアルゴリズムを適用することと、
前記少なくとも1つのタスク呼び出しに対応するタスクを実行するための実行環境を選択するように前記リソースマネージャに指示することと、
前記実行環境内で前記少なくとも1つのタスク呼び出しに対応する前記タスクを実行すること、を行わせ、
前記プロセッサは更に、前記少なくとも1つのタスク呼び出しに対応する前記タスクを実行するための前記実行環境を生成するために、前記リソースマネージャを実行するように構成され、
前記実行環境の生成は、前記実行環境に、前記少なくとも1つのタスク呼び出しに対応する前記タスクを実行するために必要とされるデータリソースをプロビジョニングすることを含む、
前記システム。
条項22.
前記被調整デバイスは、代替的な主要機能と関連付けられた汎用コンピューティングデバイス、シンデバイス、または組み込みデバイスのうちの少なくとも1つを含む、条項21に記載のシステム。
条項23.
前記実行環境に、前記少なくとも1つのタスク呼び出しに対応する前記タスクを実行するために必要とされるデータリソースをプロビジョニングすることは、前記実行環境に、前記タスクに対応する前記実行可能なコードをプロビジョニングすることを含む、条項21に記載のシステム。
条項24.
前記実行環境に、前記少なくとも1つのタスク呼び出しに対応する前記タスクを実行するために必要とされるデータリソースをプロビジョニングすることは、前記実行環境に、ランタイム環境に対応するドライバ、コードライブラリ、データ、またはコードユーティリティのうちの少なくとも1つをプロビジョニングすることを含む、条項21に記載のシステム。
条項25.
前記実行環境は、ソフトウェアコンテナに対応する、条項21に記載のシステム。
条項26.
前記データリソースは、前記ソフトウェアコンテナの外部に記憶され、
前記実行環境に、前記少なくとも1つのタスク呼び出しに対応する前記タスクを実行するために必要とされるデータリソースをプロビジョニングすることは、前記ソフトウェアコンテナを前記データリソースへの読み出しのみのアクセスに関連付けることを含む、条項25に記載のシステム。
条項27.
前記ソフトウェアコンテナを前記データリソースへの読み出しのみのアクセスに関連付けることは、前記実行環境に前記データリソースおよび追加のメモリ空間の組み合わされたビューを提示している間、前記データリソースへの読み出しのみのアクセスおよび前記追加のメモリ空間への読み出し/書き込みアクセスを組み合わせるユニオンマウントを生成することを含む、条項26に記載のシステム。
条項28.
前記実行環境は、第1の実行環境であり、前記リソースマネージャの実行は更に、前記プロセッサに、
第2のタスクを実行するための第2の実行環境についての要求を取得させ、
前記第1のタスクが実行を停止したことを検出させ、
前記要求を満たすために前記第1の実行環境を選択させる、
条項21に記載のシステム。
条項29.
コンピュータ実行可能命令を含む非一時的コンピュータ可読媒体であって、
リソースマネージャを実装するようにコンピューティングシステムによって実行可能な第1の命令であって、前記リソースマネージャの実装は、前記コンピューティングシステムに、
1つ以上のタスクの第1のタスクを実行するための実行環境についての要求を取得することであって、前記1つ以上のタスクの個々のタスクは、前記コンピューティングシステムによって実行可能なコードに対応する、前記取得することと、
前記タスクの実行のために必要とされるデータリソースのセットを判定することと、
少なくとも部分的に、前記実行環境に前記データリソースのセットへのアクセスをプロビジョニングすることによって、前記タスクの実行のための実行環境を生成することと、
を行わせる、前記第1の命令と、
スケジューラを実装するように前記コンピューティングシステムによって実行可能な第2の命令であって、前記スケジューラの実装は、前記コンピューティングシステムに、
待ち行列内にタスク呼び出しのセットをエンキューすることであって、個々のタスク呼び出しは、前記1つ以上のタスクのタスクを実行する呼び出しに対応する、前記エンキューすることと、
前記コンピューティングシステム上の計算リソースの可用性を取得することと、
処理のための前記タスク呼び出しのセットのタスク呼び出しを選択するために、計算リソースの前記可用性に少なくとも部分的に基づいて、前記待ち行列にスケジューリングアルゴリズムを適用することであって、前記タスク呼び出しは、前記第1のタスクを実行する呼び出しに対応する、前記適用することと、
前記第1のタスクを実行するための前記実行環境についての前記要求を伝送することと、
前記実行環境内で前記第1のタスクを実行することと、
を行わせる、前記第2の命令と、
を含む、前記非一時的コンピュータ可読媒体。
条項30.
前記実行環境は、第1の実行環境であり、前記リソースマネージャの実装は更に、前記コンピューティングシステムに、
第2のタスクを実行するための第2の実行環境についての要求を取得させ、
前記第1のタスクが実行を停止したことを検出させ、
前記要求を満たすために前記第1の実行環境を選択させる、
条項29に記載の非一時的コンピュータ可読媒体。
条項31.
前記第1の実行環境は、前記第2のタスクおよび前記第1のタスクが同一のタスクに対応することを検出したことに少なくとも部分的に基づいて選択される、条項30に記載の非一時的コンピュータ可読媒体。
条項32.
前記第1の実行環境は、前記第2のタスクが前記第1の実行環境に利用可能なデータリソースに依存することを検出することに少なくとも部分的に基づいて選択される、条項30に記載の非一時的コンピュータ可読媒体。
条項33.
前記リソースマネージャの実装は更に、前記コンピューティングシステムに、
前記実行環境によって必要とされる計算リソースの可用性が閾値レベルを下回ると判定させ、
前記計算リソースの使用量と関連付けられた第2の実行環境を中断させる、
条項30に記載の非一時的コンピュータ可読媒体。
条項34.
前記計算リソースは、プロセッサ可用性、メモリ可用性、またはネットワーク帯域幅可用性のうちの少なくとも1つを含む、条項33に記載の非一時的コンピュータ可読媒体。
条項35.
前記第2の実行環境の中断は、前記第2の実行環境のスナップショットイメージデータを生成すること、またはデバイスシャドウに前記第2の実行環境の状態を保存することのうちの少なくとも1つを含む、条項33に記載の非一時的コンピュータ可読媒体。
条項36.
前記リソースマネージャの実装は更に、前記コンピューティングシステムに、前記実行環境を生成させ、
前記実行環境を生成することは、前記実行環境に前記データリソースのセットおよび追加のメモリ空間の組み合わされたビューを提示している間、前記データリソースのセットへの読み出しのみのアクセスおよび前記追加のメモリ空間への読み出し/書き込みアクセスを組み合わせるユニオンマウントを生成することを含む、条項30に記載の非一時的コンピュータ可読媒体。
条項37.
コンピュータにより実行される方法であって、
待ち行列内にタスク呼び出しのセットをエンキューすることであって、個々のタスク呼び出しは、1つ以上のタスクのうちのあるタスクを実行する呼び出しに対応する、前記エンキューすることと、
前記コンピューティングシステム上の計算リソースの可用性を取得することと、
処理のための前記タスク呼び出しのセットのうちのあるタスク呼び出しを選択するために、計算リソースの前記可用性に少なくとも部分的に基づいて、前記待ち行列にスケジューリングアルゴリズムを適用することであって、前記タスク呼び出しは、前記第1のタスクを実行する呼び出しに対応する、前記適用することと、
前記タスクの実行のために必要とされるデータリソースのセットを判定することと、
少なくとも部分的に、前記実行環境に前記データリソースのセットへのアクセスをプロビジョニングすることによって、前記タスクの実行のための実行環境を生成することと、
前記実行環境内で前記第1のタスクを実行することと、
を含む、前記コンピュータにより実行される方法。
条項38.
前記データリソースのセットは、データリソースまたは計算リソースのうちの少なくとも1つを含む、条項37に記載のコンピュータにより実行される方法。
条項39.
前記実行環境は、ソフトウェアコンテナに対応し、
前記実行環境に前記データリソースのセットへのアクセスをプロビジョニングすることは、前記ソフトウェアコンテナを前記データリソースへの読み出しのみのアクセスに関連付けることを含む、条項37に記載のコンピュータにより実行される方法。
条項40.
前記ソフトウェアコンテナを前記データリソースのセットへの読み出しのみのアクセスに関連付けることは、前記実行環境に前記データリソースのセットおよび追加のメモリ空間の組み合わされたビューを提示している間、前記データリソースのセットへの読み出しのみのアクセスおよび前記追加のメモリ空間への読み出し/書き込みアクセスを組み合わせるユニオンマウントを生成することを含む、条項39に記載のコンピュータにより実行される方法。
条項41.
前記実行環境は、第1の実行環境であり、前記コンピュータにより実行される方法は更に、
第2のタスクを実行するための第2の実行環境についての要求を取得することと、
前記第1のタスクが実行を停止したことを検出することと、
前記要求を満たすために前記第1の実行環境を選択することと、
を含む、条項37に記載のコンピュータにより実行される方法。
条項42.
前記第1の実行環境は、前記第2のタスクおよび前記第1のタスクが同一のタスクに対応すること、または前記第2のタスクが前記第1の実行環境に利用可能なデータリソースに依存することを検出したことに少なくとも部分的に基づいて選択される、条項41に記載のコンピュータにより実行される方法。
条項43.
前記実行環境によって必要とされる計算リソースの可用性が閾値レベルを下回ると判定することと、
前記計算リソースの使用量と関連付けられた第2の実行環境を中断することと、
を更に含む、条項37に記載のコンピュータにより実行される方法。
条項44.
前記第2の実行環境を中断することは、前記第2の実行環境のスナップショットイメージデータを生成すること、またはデバイスシャドウに前記第2の実行環境の状態を保存することのうちの少なくとも1つを含む、条項43に記載のコンピュータにより実行される方法。
条項45.
前記待ち行列内に前記第2の実行環境の実行を再開する呼び出しをエンキューすることと、
前記第2の実行環境の前記実行を再開する前記呼び出しを選択するために、前記計算リソースの可用性に少なくとも部分的に基づいて、前記待ち行列を処理することと、
前記第2の実行環境の前記実行を再開することと、
を更に含む、条項43に記載のコンピュータにより実行される方法。
条項46.
コーディネータコンピューティングデバイスでのタスクの実行の間の通信を可能にする通信マネージャを実装する前記コーディネータコンピューティングデバイスであって、
前記コーディネータコンピューティングデバイスは、被調整環境内で1つ以上の被調整デバイスを管理するように構成され、前記システムは、
実行されるとき、前記コーディネータコンピューティングデバイスでのタスク実行の間の通信を可能にする、前記通信マネージャに対応するコンピュータ実行可能命令を含む非一時的データストアであって、個々のタスクは、前記1つ以上の被調整デバイスの動作を管理するように前記コーディネータコンピューティングデバイスによって実行可能なコードに対応する、前記非一時的データストアと、
前記非一時的データストアと通信し、前記通信マネージャを実行するように構成されたプロセッサと、を含み、前記通信マネージャの実行は、前記プロセッサに、
前記コーディネータコンピューティングデバイスでの第1のタスクの実行から呼び出しメッセージを取得することであって、前記呼び出しメッセージは、第2のタスクと関連付けられたリソース識別子にアドレス指定され、前記呼び出しメッセージは、前記第2のタスクの実行に渡されることになるパラメータを含む、前記取得することと、
前記呼び出しメッセージがアドレス指定された少なくとも前記リソース識別子から前記第2のタスクを識別することと、
前記コーディネータコンピューティングデバイスで前記第2のタスクの実行を生じさせることと、
前記第2のタスクの前記実行に実行識別子を伝送することと、
前記第2のタスクの前記実行から返却メッセージを取得することであって、前記返却メッセージは、前記実行識別子を指定する、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第2のタスクの前記実行の出力として前記返却メッセージを識別することと、
前記第1のタスクの前記実行に前記第2のタスクの前記実行の前記出力を返却することと、
を行わせる、前記コーディネータコンピューティングデバイス。
条項47.
前記呼び出しメッセージまたは前記返却メッセージのうちの少なくとも1つは、ハイパーテキスト転送プロトコル(HTTP)メッセージである、条項46に記載のコーディネータコンピューティングデバイス。
条項48.
前記プロセッサは更に、前記第1のタスクおよび前記第2のタスクのそれぞれの前記実行のための実行環境を生成するように構成され、
前記実行環境は、相互に分離される、条項46に記載のコーディネータコンピューティングデバイス。
条項49.
前記通信マネージャの実行は更に、前記プロセッサに、前記呼び出しメッセージ内のセキュリティ情報の正当性を確認させる、条項46に記載のコーディネータコンピューティングデバイス。
条項50.
前記返却メッセージは、前記返却メッセージが伝送されるアドレスまたは前記返却メッセージのヘッダフィールドのうちの少なくとも1つに前記実行識別子を含めることによって、前記実行識別子を指定する、条項46に記載のコーディネータコンピューティングデバイス。
条項51.
コーディネータコンピューティングデバイスでのタスクの実行の間の通信を可能にする通信マネージャを実装する前記コーディネータコンピューティングデバイスによって実行可能な命令を含む非一時的コンピュータ可読媒体であって、個々のタスクは、1つ以上の被調整デバイスの動作を管理する前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記命令の実行は、前記コーディネータコンピューティングデバイスに、
前記コーディネータコンピューティングデバイスでの第1のタスクの実行から呼び出しメッセージを取得することであって、前記呼び出しメッセージは、第2のタスクと関連付けられたリソース識別子にアドレス指定される、前記取得することと、
前記呼び出しメッセージがアドレス指定された少なくとも前記リソース識別子から前記第2のタスクを識別することと、
前記コーディネータコンピューティングデバイスで前記第2のタスクの実行を生じさせることと、
前記第2のタスクの前記実行から返却メッセージを取得することであって、前記返却メッセージは、前記第2のタスクの前記実行と関連付けられた実行識別子を含む、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第2のタスクの前記実行の出力として前記返却メッセージを識別することと、
前記第1のタスクの前記実行に前記第2のタスクの前記実行の前記出力を返却することと、
を行わせる、前記非一時的コンピュータ可読媒体。
条項52.
前記命令の実行は更に、前記コーディネータコンピューティングデバイスに、前記第1のタスクの前記実行から返却要求メッセージを取得させ、前記第2のタスクの前記実行の前記出力は、前記返却要求メッセージに応答して、前記第1のタスクの前記実行に返却される、条項51に記載の非一時的コンピュータ可読媒体。
条項53.
前記返却要求メッセージは、前記実行識別子を含む前記リソース識別子にアドレス指定される、条項52に記載の非一時的コンピュータ可読媒体。
条項54.
前記返却要求メッセージは、前記返却メッセージを取得する前に取得される、条項52に記載の非一時的コンピュータ可読媒体。
条項55.
前記呼び出しメッセージは、前記第2のタスクの前記実行に割り振られることになる優先度を含む、条項52に記載の非一時的コンピュータ可読媒体。
条項56.
前記第2のタスクと関連付けられ前記リソース識別子は、前記コーディネータコンピューティングデバイスと関連付けられたドメインネーム、前記通信マネージャと関連付けられたポート、および前記第2のタスクと関連付けられたパスを含む、条項52に記載の非一時的コンピュータ可読媒体。
条項57.
前記第2のタスクと関連付けられた前記リソース識別子は、ユニフォームリソース識別子である、条項52に記載の非一時的コンピュータ可読媒体。
条項58.
前記第1のタスクおよび前記第2のタスクは、同一のタスクである、条項52に記載の非一時的コンピュータ可読媒体。
条項59.
コーディネータコンピューティングデバイスでのタスクの実行の間の通信を可能にするコンピュータにより実行される方法であって、個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記コンピュータにより実行される方法は、
前記コーディネータコンピューティングデバイスでの第1のタスク実行から呼び出しメッセージを取得することであって、前記呼び出しメッセージは、第2のタスクと関連付けられたリソース識別子にアドレス指定される、前記取得することと、
前記呼び出しメッセージがアドレス指定された少なくとも前記リソース識別子から前記第2のタスクを識別することと、
前記コーディネータコンピューティングデバイスで前記第2のタスクの実行を生じさせることと、
前記第2のタスクの前記実行から返却メッセージを取得することであって、前記返却メッセージは、前記第2のタスクの前記実行と関連付けられた実行識別子を含む、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第2のタスクの前記実行の出力として前記返却メッセージを識別することと、
前記第1のタスクの前記実行に前記第2のタスクの前記実行の前記出力を返却することと、
を含む、前記コンピュータにより実行される方法。
条項60.
前記第2のタスクの前記実行に前記実行識別子を割り振ること、または前記呼び出しメッセージ内で前記実行識別子を識別することのうちの少なくとも1つを更に含む、条項59に記載のコンピュータにより実行される方法。
条項61.
前記第2のタスクの前記実行に前記実行識別子を渡すことを更に含む、条項59に記載のコンピュータにより実行される方法。
条項62.
前記コーディネータコンピューティングデバイスで前記第2のタスクの実行を生じさせることは、前記コーディネータコンピューティングデバイスでの前記第2のタスクの前記実行のための実行環境を生成することを含む、条項59に記載のコンピュータにより実行される方法。
条項63.
前記第1のタスクの前記実行に前記第2のタスクの前記実行の前記出力を返却することは、前記第1のタスクにプッシュメッセージとして前記出力を返却することを含む、条項59に記載のコンピュータにより実行される方法。
条項64.
前記第1のタスクは、第1のプログラミング言語のコードに対応し、前記第2のタスクは、第2のプログラミング言語のコードに対応する、条項59に記載のコンピュータにより実行される方法。
条項65.
前記第1のタスクの前記実行から返却要求メッセージを取得することを更に含み、
前記第2のタスクの前記実行の前記出力は、前記返却要求メッセージに応答して、前記第1のタスクの前記実行に返却される、条項59に記載のコンピュータにより実行される方法。
条項66.
前記返却要求メッセージは、前記返却メッセージを取得する前に取得される、条項59に記載のコンピュータにより実行される方法。
条項67.
コーディネータコンピューティングデバイスでタスクをリモートに引き起こすことを可能にするリモートインタフェースを実装する前記コーディネータコンピューティングデバイスであって、前記コーディネータコンピューティングデバイスは、被調整環境内で1つ以上の被調整デバイスを管理するように構成され、個々のタスクは、前記1つ以上の被調整デバイスの動作を管理する前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記コーディネータコンピューティングデバイスは、
実行されるとき、前記コーディネータコンピューティングデバイスでタスクをリモートに引き起こすことを可能にする、前記リモートインタフェースに対応するコンピュータ実行可能命令を含む非一時的データストアと、
前記非一時的データストアと通信し、前記リモートインタフェースを実行するように構成されたプロセッサと、を含み、前記リモートインタフェースの実行は、前記プロセッサに、
前記コーディネータコンピューティングデバイスで第1のタスクを実行する呼び出しを取得するために、前記コーディネータコンピューティングデバイスからリモートのオンデマンドコード実行環境にクエリを伝送することであって、前記クエリは、前記オンデマンドコード実行環境において維持された前記コーディネータコンピューティングデバイスへの呼び出しの待ち行列と関連付けられたリソース識別子にアドレス指定される、前記伝送することと、
前記コーディネータコンピューティングデバイスで前記第1のタスクを実行する前記呼び出しを取得することであって、前記呼び出しは、前記第2のタスクの実行に渡されることになるパラメータを含む、前記取得することと、
第2のタスクおよび前記コーディネータコンピューティングデバイスと関連付けられたリソース識別子を判定することと、
前記コーディネータコンピューティングデバイスで前記第1のタスクを実行する前記呼び出しに対応する呼び出しメッセージを生成することであって、前記呼び出しメッセージは、前記第2のタスクと関連付けられた前記リソース識別子にアドレス指定され、前記呼び出しメッセージは、前記第2のタスクの実行に渡されることになる前記パラメータを含み、前記呼び出しメッセージは、前記コーディネータコンピューティングデバイスで前記第1のタスクの実行を生じさせる、前記生成することと、
を行わせる、前記コーディネータコンピューティングデバイス。
条項68.
前記リモートインタフェースの実行は更に、前記プロセッサに、
前記第2のタスクの前記実行に対応する実行識別子を取得することと、
前記第2のタスクの前記実行から返却メッセージを取得することであって、前記メッセージは、前記実行識別子を含むリソース識別子にアドレス指定される、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第2のタスクの前記実行の出力として前記返却メッセージを識別することと、
オンデマンドコード実行環境に前記第2のタスクの前記実行の前記出力を返却することと、
を行わせる、条項67に記載のコーディネータコンピューティングデバイス。
条項69.
前記リモートインタフェースの実行は、前記プロセッサに、前記実行識別子を生成すること、または前記第1のタスクを実行する前記呼び出し内で前記実行識別子を検出することのうちの少なくとも1つによって、前記実行識別子を取得させる、条項68に記載のコーディネータコンピューティングデバイス。
条項70.
前記呼び出しメッセージは、前記第2のタスクと関連付けられた前記リソース識別子にアドレス指定されたハイパーテキスト転送プロトコル(HTTP)メッセージである、条項67に記載のコーディネータコンピューティングデバイス。
条項71.
コーディネータコンピューティングデバイスでタスクをリモートに引き起こすことを可能にするリモートインタフェースを実装する前記コーディネータコンピューティングデバイスによって実行可能な命令を含む非一時的コンピュータ可読媒体であって、個々のタスクは、1つ以上の被調整デバイスの動作を管理する前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記命令の実行は、前記コーディネータコンピューティングデバイスに、
前記コーディネータコンピューティングデバイスからリモートのオンデマンドコード実行環境に、前記コーディネータコンピューティングデバイスで第1のタスクを実行する呼び出しについてのクエリを伝送することであって、前記クエリは、前記オンデマンドコード実行環境において維持された前記コーディネータコンピューティングデバイスへの呼び出しの待ち行列と関連付けられたリソース識別子にアドレス指定される、前記伝送することと、
前記コーディネータコンピューティングデバイスで前記第1のタスクを実行する前記呼び出しを取得することと、
第2のタスクおよび前記コーディネータコンピューティングデバイスと関連付けられたリソース識別子を判定することと、
前記コーディネータコンピューティングデバイスで前記第1のタスクを実行する前記呼び出しに対応する呼び出しメッセージを生成することであって、前記呼び出しメッセージは、前記第2のタスクと関連付けられた前記リソース識別子にアドレス指定される、前記生成することと、
を行わせる、前記非一時的コンピュータ可読媒体。
条項72.
前記命令の実行は更に、前記コーディネータコンピューティングデバイスに、
前記第2のタスクの前記実行から返却メッセージを取得することであって、前記メッセージは、前記第2のタスクの前記実行に対応する実行識別子を含むリソース識別子にアドレス指定される、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第2のタスクの前記実行の出力として前記返却メッセージを識別することと、
オンデマンドコード実行環境に前記第2のタスクの前記実行の前記出力を返却することと、
を行わせる、条項71に記載の非一時的コンピュータ可読媒体。
条項73.
前記命令の実行は更に、前記コーディネータコンピューティングデバイスに、少なくとも部分的に、オンデマンドコード実行環境で、前記実行識別子を含む第2のリソース識別子に前記出力を伝送することによって、前記オンデマンドコード実行環境に前記第2のタスクの前記実行の前記出力を返却させる、条項71に記載の非一時的コンピュータ可読媒体。
条項74.
前記命令の実行は,前記コーディネータコンピューティングデバイスに、
前記第2のタスクの前記実行に対応する前記実行識別子を含む前記リソース識別子にアドレス指定された返却要求メッセージを生成させ、
前記リソース識別子に前記返却要求メッセージを伝送させる、
条項71に記載の非一時的コンピュータ可読媒体。
条項75.
前記呼び出しメッセージは、前記第2のタスクの前記実行に割り振られることになる優先度を含む、条項71に記載の非一時的コンピュータ可読媒体。
条項76.
前記第2のタスクおよび前記コーディネータコンピューティングデバイスと関連付けられ前記リソース識別子は、前記コーディネータコンピューティングデバイスと関連付けられたドメインネーム、前記通信マネージャと関連付けられたポート、および前記第1のタスクと関連付けられたパスを含む、条項71に記載の非一時的コンピュータ可読媒体。
条項77.
前記第2のタスクと関連付けられた前記リソース識別子は、ユニフォームリソース識別子である、条項71に記載の非一時的コンピュータ可読媒体。
条項78.
前記命令の実行は、前記コーディネータコンピューティングデバイスに、前記実行環境内で前記第1のタスクを実行するために、前記第1のタスクの実行のための実行環境を生成させる、条項71に記載の非一時的コンピュータ可読媒体。
条項79.
コーディネータコンピューティングデバイスでタスクをリモートに引き起こすことを可能にするように前記コーディネータコンピューティングデバイスによって実装されるコンピュータにより実行される方法であって、個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、前記コンピュータにより実行される方法は、
前記コーディネータコンピューティングデバイスからリモートのオンデマンドコード実行環境に、前記コーディネータコンピューティングデバイスで第1のタスクを実行する呼び出しについてのクエリを伝送することであって、前記クエリは、前記オンデマンドコード実行環境において維持された前記コーディネータコンピューティングデバイスへの呼び出しの待ち行列と関連付けられたリソース識別子にアドレス指定される、前記伝送することと、
前記コーディネータコンピューティングデバイスで前記第1のタスクを実行する前記呼び出しを取得することと、
第2のタスクおよび前記コーディネータコンピューティングデバイスと関連付けられたリソース識別子を判定することと、
前記コーディネータコンピューティングデバイスで前記第1のタスクを実行する前記呼び出しに対応する呼び出しメッセージを生成することであって、前記呼び出しメッセージは、前記第2のタスクと関連付けられた前記リソース識別子にアドレス指定される、前記生成することと、
を含む、前記コンピュータにより実行される方法。
条項80.
前記第1のタスクの実行に実行識別子を割り振ること、または前記呼び出し内で前記実行識別子を識別することのうちの少なくとも1つを更に含む、条項79に記載のコンピュータにより実行される方法。
条項81.
前記呼び出しメッセージは、前記実行識別子を含む、条項80に記載のコンピュータにより実行される方法。
条項82.
前記呼び出しメッセージに応答して、前記コーディネータコンピューティングデバイスで前記第1のタスクを実行することを更に含み、
前記コーディネータコンピューティングデバイスで前記第1のタスクを実行することは、前記コーディネータコンピューティングデバイスでの前記第1のタスクの実行のための実行環境を生成することを含む、条項79に記載のコンピュータにより実行される方法。
条項83.
前記第1のタスクの実行から返却メッセージを取得することであって、前記メッセージは、前記第1のタスクの前記実行に対応する実行識別子を含むリソース識別子にアドレス指定される、前記取得することと、
前記実行識別子を含む前記リソース識別子に少なくとも部分的に基づいて、前記第1のタスクの前記実行の出力として前記返却メッセージを識別することと、
オンデマンドコード実行環境に前記第2のタスクの前記実行の前記出力を返却することと、
を更に含む、条項79に記載のコンピュータにより実行される方法。
条項84.
返却要求メッセージを生成することと、前記第1のタスクの前記実行に対応する前記実行識別子を含む前記リソース識別子に、前記返却要求メッセージを伝送することと、を更に含む、条項83に記載のコンピュータにより実行される方法。
条項85.
オンデマンドコード実行環境に前記第2のタスクの前記実行の前記出力を返却することは、前記オンデマンドコード実行環境上で、前記実行識別子を含む第2のリソース識別子に前記出力を伝送することを含む、条項83に記載のコンピュータにより実行される方法。
条項86.
前記呼び出しメッセージを生成することは、前記取得された呼び出しから前記呼び出しメッセージをデカプセル化することを含む、条項79に記載のコンピュータにより実行される方法。
条項87.
被調整環境内で1つ以上の被調整デバイスを管理するように構成されたコーディネータコンピューティングデバイスであって、前記コーディネータコンピューティングデバイスは、
非一時的データストアであって、
前記1つ以上の被調整デバイスの動作を管理する1つ以上のタスクであって、個々のタスクは、前記コーディネータコンピューティングデバイスよって実行可能なコードに対応する、前記1つ以上のタスクと、
前記1つ以上の被調整デバイスの第1の被調整デバイスによる入力に応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを指定するイベントフロー情報と、
を含む、前記非一時的データストアと、
前記非一時的データストアと通信するプロセッサと、を含み、前記プロセッサは、コンピュータ実行可能命令により、
前記コーディネータコンピューティングデバイスについての構成パッケージを取得することであって、前記構成パッケージは、前記1つ以上の被調整デバイスおよび前記1つ以上のタスクを識別する、前記取得することと、
ネットワークアクセス可能データストアから、前記構成パッケージにおいて識別されるような、前記1つ以上のタスクを取り出すことと、
前記非一時的データストアに前記1つ以上のタスクを記憶することと、
前記第1の被調整デバイスから前記入力を取得することと、
前記イベントフロー情報に少なくとも部分的に基づいて、前記入力に応答して実行されることになる前記1つ以上のタスクの第1のタスクを識別することと、
前記第1のタスクに対応する実行環境を生成することと、
前記実行環境内で前記第1のタスクを実行することと、
を行う、ように構成される、前記コーディネータコンピューティングデバイス。
条項88.
前記プロセッサは更に、コンピュータ実行可能命令により、
前記第1のタスクの実行の出力を取得し、
前記イベントフロー情報に少なくとも部分的に基づいて、前記出力が伝送される、前記1つ以上の被調整デバイスのうちのある被調整デバイスを識別し、
前記被調整デバイスに前記出力を伝送する、
ように構成される、条項87に記載のコーディネータコンピューティングデバイス。
条項89.
前記出力は、MQTT通知として伝送される、条項88に記載のコーディネータコンピューティングデバイス。
条項90.
前記1つ以上の被調整デバイスは、代替的な主要機能と関連付けられた汎用コンピューティングデバイス、シンデバイス、または組み込みデバイスのうちの少なくとも1つを含む、条項87に記載のコーディネータコンピューティングデバイス。
条項91.
被調整環境内で1つ以上の被調整デバイスを管理する命令を含む非一時的コンピュータ可読媒体であって、前記命令は、前記被調整環境と関連付けられたコーディネータコンピューティングデバイスによって実行されるとき、前記コーディネータコンピューティングデバイスに、
前記コーディネータコンピューティングデバイスについての構成パッケージを取得することであって、前記構成パッケージは、前記1つ以上の被調整デバイス、前記1つ以上の被調整デバイスの動作を管理する1つ以上のタスクを識別し、個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、イベントフロー情報は、前記1つ以上の被調整デバイスの第1の被調整デバイスによる入力に応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを指定する、前記取得することと、
ネットワークアクセス可能データストアから、前記構成パッケージにおいて識別されるような、前記1つ以上のタスクを取り出すことと、
前記第1の被調整デバイスから前記入力を取得することと、
少なくとも前記イベントフロー情報から、前記入力に応答して実行されることになる前記1つ以上のタスクの第1のタスクを識別することと、
前記第1のタスクに対応する実行環境を生成することと、
前記実行環境内で前記第1のタスクを実行することと、
を行わせる、前記非一時的コンピュータ可読媒体。
条項92.
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、
前記第1のタスクから出力メッセージを取得させ、
第2のタスクまたは前記出力メッセージが伝送される第2の被調整デバイスのうちの少なくとも1つを識別するために、前記イベントフロー情報を参照させ、
前記第2のタスクまたは第2の被調整デバイスのうちの少なくとも1つに前記出力メッセージを伝送させる、
条項91に記載の非一時的コンピュータ可読媒体。
条項93.
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、前記コーディネータコンピューティングデバイスで実行されるルータタスクに前記出力メッセージを渡させ、
前記ルータタスクは、前記少なくとも1つの第2のタスクまたは第2の被調整デバイスを識別するために、前記イベントフロー情報を参照するように実行可能である、条項92に記載の非一時的コンピュータ可読媒体。
条項94.
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、前記コーディネータコンピューティングデバイスでの他のタスクの実行環境から分離されたコンテナとして前記実行環境を生成させる、条項91に記載の非一時的コンピュータ可読媒体。
条項95.
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、前記第1のタスクの実行のために必要とされるデータリソースへのアクセスを前記実行環境にプロビジョニングさせる、条項94に記載の非一時的コンピュータ可読媒体。
条項96.
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、
前記コーディネータコンピューティングデバイスの所望の状態を示すデバイスシャドウサービスにサブスクライブさせ、
前記所望の状態が前記デバイスシャドウサービスにおいて修正されたことを示す通知を取得させ、
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、前記所望の状態が修正されたことの前記通知に応答して、前記構成パッケージを取得させる、条項91に記載の非一時的コンピュータ可読媒体。
条項97.
前記命令は、実行されるとき、前記コーディネータコンピューティングデバイスに、
ワークアイテム待ち行列に、前記第1のタスクへの呼び出しをエンキューさせ、
前記ワークアイテム待ち行列からデキューするための前記第1のタスクを選択するために、前記ワークアイテム待ち行列にスケジューリングアルゴリズムを適用させる、
条項91に記載の非一時的コンピュータ可読媒体。
条項98.
前記第1のタスクは、前記コーディネータコンピューティングデバイスに、
前記第1の被調整デバイスの所望の状態を判定させ、
前記所望の状態を示すように前記第1の被調整デバイスのデバイスシャドウを修正させ、
前記第1の被調整デバイスに前記所望の状態の通知を伝送させる、
ように実行可能なシャドウサービスタスクである、条項91に記載の非一時的コンピュータ可読媒体。
条項99.
前記第1の被調整デバイスへの前記通知は、前記デバイスシャドウに対応するトピックへの前記第1の被調整デバイスによるサブスクリプションに応答して伝送される、条項91に記載の非一時的コンピュータ可読媒体。
条項100.
被調整環境内で1つ以上の被調整デバイスを管理するようにコーディネータコンピューティングデバイスにより実装されるコンピュータにより実行される方法であって、前記コンピュータにより実行される方法は、
前記コーディネータコンピューティングデバイスについての構成パッケージを取得することであって、前記構成パッケージは、前記1つ以上の被調整デバイス、前記1つ以上の被調整デバイスの動作を管理する1つ以上のタスクを識別し、個々のタスクは、前記コーディネータコンピューティングデバイスによって実行可能なコードに対応し、イベントフロー情報は、前記1つ以上の被調整デバイスの第1の被調整デバイスによる入力に応答して、前記コーディネータコンピューティングデバイスによって取られることになるアクションを指定する、前記取得することと、
ネットワークアクセス可能データストアから、前記構成パッケージにおいて識別されるような、前記1つ以上のタスクを取り出すことと、
前記第1の被調整デバイスから前記入力を取得することと、
少なくとも前記イベントフロー情報から、前記入力に応答して実行されることになる前記1つ以上のタスクの第1のタスクを識別することと、
前記第1のタスクに対応する実行環境を生成することと、
前記実行環境内で前記第1のタスクを実行することと、
を含む、前記コンピュータにより実行される方法。
条項101.
前記第1のタスクから出力メッセージを取得することと、
第2のタスクまたは前記出力メッセージが伝送される第2の被調整デバイスのうちの少なくとも1つを識別するために、前記イベントフロー情報を参照することと、
前記第2のタスクまたは第2の被調整デバイスのうちの少なくとも1つに前記出力メッセージを伝送することと、
を更に含む、条項100に記載のコンピュータにより実行される方法。
条項102.
前記第2のタスクまたは前記出力が伝送される前記第2の被調整デバイスのうちの少なくとも1つを識別するために、前記イベントフロー情報を参照することは、前記コーディネータコンピューティングデバイスで実行されるルータタスクに前記出力メッセージを渡すことを含み、
前記ルータタスクは、前記少なくとも1つの第2のタスクまたは第2の被調整デバイスを識別するために、前記イベントフロー情報を参照するように実行可能である、条項101に記載のコンピュータにより実行される方法。
条項103.
前記第1のタスクに対応する前記実行環境を生成することは、前記コーディネータコンピューティングデバイスでの他のタスクの実行環境とは分離されたコンテナを生成することを含む、条項100に記載のコンピュータにより実行される方法。
条項104.
前記実行環境に、前記第1のタスクの実行のために必要とされるデータリソースへのアクセスをプロビジョニングすることを更に含む、条項100に記載のコンピュータにより実行される方法。
条項105.
前記コーディネータコンピューティングデバイスの所望の状態を示すデバイスシャドウサービスにサブスクライブすることと、
前記所望の状態が前記デバイスシャドウサービスにおいて修正されたことの通知を取得することと、を更に含み、
構成パッケージを取得することは、前記通知に少なくとも部分的に基づいて行われる、
条項100に記載のコンピュータにより実行される方法。
条項106.
前記第1の被調整デバイスの所望の状態を判定することと、
前記所望の状態を示すように前記第1の被調整デバイスのデバイスシャドウを修正することと、
前記第1の被調整デバイスに前記所望の状態の通知を伝送することと、
を更に含む、条項100に記載のコンピュータにより実行される方法。
様々な機能性が独立して上記説明されていてもよいが、それらの機能性は、独立してまたはいずれかの組み合わせで実装されてもよいことが予期される。その上、それらの機能性は、上記参照によって組み込まれた、関連出願において説明された機能性、デバイス、または環境と組み合わされてもよいことが予期される。例えば、本明細書で説明されるようなコーディネータコンピューティングデバイスは、受信されたメッセージ(例えば、被調整デバイスからのMQTTメッセージ)の解釈が、潜在的には特殊化されたメッセージトピックの使用によって、メッセージが転送されるべきデバイスまたはタスクのサブセットを判定することを可能にするように、関連出願において説明された主題を実装してもよい。更なる実施例として、コーディネータコンピューティングデバイスは更に、メッセージが受信側の間で転送されるべきであるかどうかを判定するために、受信されたメッセージ(例えば、被調整デバイスまたはタスク実行からの)内に含まれるセキュリティ情報を利用してもよい。更なる別の実施例として、コーディネータコンピューティングデバイスは、潜在的にはメッセージ本文の検査を必要とすることなく、メッセージ内の(例えば、トピックフィールド内の)組み込みコードの使用が、メッセージの様々な扱いを有効にすることを可能にすることができる。当業者は、本開示を考慮して、本明細書で説明される機能性の多くの組み合わせが可能であることを認識するであろう。
上記説明された方法およびプロセスの全ては、1つ以上のコンピュータまたはプロセッサにおいて具体化されてよく、1つ以上のコンピュータまたはプロセッサによって実行されるソフトウェアコードモジュールを介して完全に自動化されてよい。コードモジュールは、任意の種類の非一過性のコンピュータ可読媒体または他のコンピュータ記憶装置内に記憶されてよい。方法のいくつかまたはすべては、代わりに専用コンピュータハードウェアで実施されてもよい。
特に明記しない限り、とりわけ、「できる(can)」、「できるであろう(could)」、「可能性がある(might)」、または「してよい(may)」等の条件的言語は、そうでなければいくつかの実施形態がある特定の特徴、要素、および/またはステップを含み、一方で他の実施形態が含まないことを示すために概して使用されるとして文脈内で理解される。したがって、そのような条件的言語は、概して、特徴、要素、および/またはステップが、1つ以上の実施形態に任意の方法で要求されるか、または1つ以上の実施形態が、ユーザ入力もしくはプロンプトを用いて、もしくは用いずに、これらの特徴、要素、および/またはステップが含まれるのか、それとも任意の特定の実施形態で行われるべきであるかを決定するための論理を必ず含むことを含意することは意図していない。
特に明記しない限り、句「X、YまたはZのうちの少なくとも1つ」などの選言的な言葉は、そうでなければ項目、用語等がX、YもしくはZのいずれか、またはその任意の組み合わせ(例えば、X、Yおよび/またはZ)であってよいことを示すために一般的に用いられるとして文脈の中で理解される。ゆえに、係る選言的言語は、特定の実施形態がXの少なくとも1つ、Yの少なくとも1つまたはZの少なくとも1つがそれぞれ存在することを必要とすることを暗示することを一般的に意図しておらず、意味するべきではない。
特に明記しない限り、「a」または「an」等の冠詞は、概して、1つ以上の記載された項目を含むと解釈すべきである。したがって、「〜するように構成された装置」等の語句は、1つ以上の列挙された装置を含むことを目的とする。そのような1つまたは複数の列挙された装置は、記載される詳述を実行するように集合的に構成することもできる。例えば、「列挙A、BおよびCを実行するように構成されたプロセッサ」は、列挙BおよびCを実行するように構成された第2のプロセッサと連動して機能し、列挙Aを実行するように構成された第1のプロセッサを含む場合がある。
本明細書に説明する、および/または添付の図面に図示するフロー図のいずれのルーチンの記述、要素、またはブロックも、ルーチンにおける特定の論理的機能または要素を実装するための1つまたは複数の実行可能な命令を含む、モジュール、セグメント、またはコードの部分を潜在的に表すものとして理解されるべきである。代替の実施態様は、本明細書に説明する実施形態の範囲内に含まれ、その中で要素または機能は、当業者によって理解されるであろうように、関係する機能性に応じて、実質的に同時または逆の順序を含む、示されるもの、説明されるものとは異なる順序で削除または実行され得る。
多くの変形形態および改変形態が上記の実施形態に対して行われ得、それらの要素が他の許容される実施例中にあるものとして理解されることが強調されるべきである。全ての係る変更形態および変形形態が、本開示の範囲内で本明細書に含有され、以下の特許請求の範囲によって保護されることが意図される。