(57)【要約】  メモリフットプリントを削減したオンデマンドコードの実行のための連携環境を管理するシステムおよび方法が記載されている。コーディネータは、連携デバイスから個々のオンデマンドコード実行要求またはタスクを受信する。コーディネータは、オンデマンドコード実行要求を処理して、オンデマンドコード実行の少なくともサブセットを、実行可能コードを共有する１つ以上のグループに関連付けることができる。連携デバイスは、オンデマンドの実行可能コードを別途ロードして実行することを必要とせずに、個々のタスクの実行を実施することができる。したがって、連携デバイスは、オンデマンドタスクの実行に必要なメモリフットプリントを削減することにより、さらに限られたコンピューティングリソースを有するコンピューティングデバイスに実装され得る。
2021518014.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスへのアクセスを管理するシステムであって、前記システムは、プロセッサおよびメモリを備えたコンピューティングデバイスと、プロセッサおよびメモリを備えた少なくとも１つのコンピューティングデバイスに実装されたコーディネータサービスと、を備え、
前記コンピューティングデバイスは、連携デバイスに相当しており、前記連携デバイスは、オンデマンドコードを実行するための要求を前記コーディネータサービスに送信し、
前記コーディネータサービスは、
グループベースのオンデマンドコードのセットの構成情報を受信し、
前記構成情報に従って、前記グループベースのオンデマンドコードのセットのうちの少なくとも１つをインスタンス化し、
前記連携デバイスから、オンデマンドコードを実行する要求を受信し、
オンデマンドコードを実行するための前記要求を、少なくとも１つの前記グループベースのオンデマンドコードに関連付け、
前記インスタンス化された少なくとも１つの前記グループベースのオンデマンドコードを実行し、
前記インスタンス化された少なくとも１つの前記グループベースのオンデマンドコードに対応する処理結果を生成する、
ように構成されているシステム。
【請求項２】
前記コーディネータサービスは、組織的基準に基づいて、前記要求を少なくとも１つの前記グループベースのオンデマンドコードに関連付ける、
請求項１に記載のシステム。
【請求項３】
前記コーディネータサービスは、さらに、前記前記インスタンス化された少なくとも１つの前記グループベースのオンデマンドコードの前記実行のための状態情報に関する作業キューを維持するように構成されている、
請求項１に記載のシステム。
【請求項４】
少なくとも１つの前記グループベースのオンデマンドコードは、システムレベルのタスクに対応する、
請求項１に記載のシステム。
【請求項５】
連携環境でのオンデマンドコードの実行を管理する方法であって、前記方法は、
プロセッサおよびメモリを有する少なくとも１つのコンピューティングデバイス上に実装されたコーディネータサービスにより、グループベースのオンデマンドコードに対応する要求を識別するための組織的基準を取得するステップと、
前記コーディネータサービスで、１つ以上の連携デバイスから、オンデマンドコードを実行するための個々の要求を受信するステップであって、１つ以上の前記連携デバイスのうちの個々の連携デバイスは、オンデマンドコードを実行するための個々の前記要求を前記コーディネータサービスに送信するステップと、
前記コーディネータサービスにより、オンデマンドコードを実行するための前記個々の要求を、前記グループベースのオンデマンドコードに関連付けるステップと、
前記コーディネータサービスにより、前記グループベースのオンデマンドコードを実行するステップと、
前記コーディネータサービスで、前記グループベースのオンデマンドコードの実行に対応する処理結果を生成するステップであって、前記処理結果は、前記個々の要求に応答して前記個々の連携デバイスに提供されるステップと、
を含む方法。
【請求項６】
前記方法は、前記グループベースのオンデマンドコードの構成情報を受信するステップをさらに含む、
請求項５に記載の方法。
【請求項７】
前記方法は、前記構成情報に従って、前記グループベースのオンデマンドコードをインスタンス化するステップをさらに含む、
請求項６に記載の方法。
【請求項８】
前記方法は、前記グループベースのオンデマンドコードの既存のインスタンス化を識別するステップをさらに含む、
請求項５に記載の方法。
【請求項９】
前記方法は、インスタンス化された前記グループベースのオンデマンドコードの前記実行のための状態情報に関する作業キューを維持することにより、前記グループベースのオンデマンドコードの前記実行を管理するステップをさらに含む、
請求項５に記載の方法。
【請求項１０】
前記方法は、前記グループベースのオンデマンドコードの少なくとも１つの実行を変更することにより、前記グループベースのオンデマンドコードの前記実行を管理するステップをさらに含む、
請求項５に記載の方法。
【請求項１１】
前記方法は、
前記コーディネータサービスで、１つ以上の前記連携デバイスのうちの１つから、オンデマンドコードを実行するためのさらなる要求を受信するステップと、
前記さらなる要求が、前記グループベースのオンデマンドコードに対応していないと判定するステップと、
前記グループベースのオンデマンドコードに関連付けられていないオンデマンドコードを実行するステップと、
前記グループベースのオンデマンドコードに関連付けられていない前記オンデマンドコードの前記実行に対応する処理結果を生成するステップと、
をさらに含む、
請求項５に記載の方法。
【請求項１２】
オンデマンドコードを実行するための前記個々の要求は、認可情報および認証情報を含む、
請求項５に記載の方法。
【請求項１３】
オンデマンドコードを実行するための前記個々の要求を、前記グループベースのオンデマンドコードに関連付けるステップは、少なくとも部分的に前記認可情報および前記認証情報に基づいている、
請求項１２に記載の方法。
【請求項１４】
前記方法は、前記グループベースのオンデマンドコードの少なくとも１つの実行を終了することにより、前記グループベースのオンデマンドコードの前記実行を管理するステップをさらに含む、
請求項５に記載の方法。
【請求項１５】
前記グループベースのオンデマンドコードは、システムレベルのタスクに対応する、
請求項５に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
一般的に説明すると、コンピューティングデバイスは、データを交換するために、１つの通信ネットワーク、または一続きの通信ネットワークを利用する。企業および組織は、業務を支援し、または第三者にサービスを提供するために、いくつかのコンピューティングデバイスを相互に接続したコンピュータネットワークを運用する。コンピューティングシステムは、単一の地理的な位置に設置される場合、または（例えば、プライベートもしくはパブリックの通信ネットワークを介して相互接続された）複数の別々の地理的な位置に設置される場合がある。具体的には、本明細書で概して「データセンタ」と呼ぶデータセンタまたはデータ処理センタは、データセンタのユーザにコンピューティングリソースを提供するために、いくつかの相互に接続されたコンピューティングシステムを含み得る。データセンタは、組織の代わりに運営されるプライベートデータセンタ、または一般大衆の代わりにもしくは一般大衆の利益のために運営されるパブリックデータセンタであり得る。
【０００２】
データセンタリソースの利用度を向上させるために、仮想化技術により、単一の物理コンピューティングデバイスが、データセンタのユーザに対して独立したコンピューティングデバイスとして表示され、かつ動作する仮想マシンの１つ以上のインスタンスをホストすることができる。仮想化に伴い、単一の物理コンピューティングデバイスは、仮想マシンの作成、維持、削除、またはその他の方法による管理を動的に行い得る。結果として、ユーザは、単一のコンピューティングデバイス、またはネットワーク接続されたコンピューティングデバイスの構成を含むコンピュータリソースをデータセンタに要求することができ、ユーザには様々な数の仮想マシンリソースが提供され得る。
【０００３】
ある環境では、通信ネットワークを介して通信するコンピューティングデバイスは、デスクトップパーソナルコンピュータなど、コンピューティングデバイス本来の機能を有するデバイスに対応し得る。他の環境では、通信ネットワークを介して通信するコンピューティングデバイスの少なくとも一部は、少なくとも制限されたコンピューティング機能をも提供しながら、別途の主目的を有する家庭用機器（例えば、サーモスタットまたは冷蔵庫）など、少なくとも１つの代替の主要機能を有する組み込みデバイスまたはシンデバイスに対応し得る。ある例では、これらの組み込みデバイスまたはシンデバイスのローカルユーザインタフェースは制限されており、したがってこれらのデバイスの一部の機能を実施するためにリモート管理が必要とされる場合がある。しかしながら、リモート管理は、リモート管理デバイスとの通信におけるレイテンシと、プライベート情報が、リモート管理デバイスで、またはリモート管理デバイスとの通信を通じて、誤って開示される可能性とのため、ある場合には問題となり得る。これらの問題は、組み込みデバイスまたはシンデバイスとリモート管理デバイスとが、別個の通信ネットワーク上に存在し、またはパブリック通信ネットワークを通じて通信する場合には、より広まり得る。
【０００４】
図面全体を通して、参照番号は、参照される要素間の対応を示すために再使用され得る。図面は、本明細書で説明される例示的な実施形態を示すために提供されており、本開示の範囲を限定することは意図されていない。
【図面の簡単な説明】
【０００５】
【図１】コーディネータが、連携環境内の連携デバイスの動作を局部的に管理し、連携させるように動作し得る説明的な環境を示すブロック図である。
【図２】図１のコーディネータを提供するコンピューティングデバイスの全体的なアーキテクチャを示す。
【図３Ａ】図１のコーディネータによって管理される連携デバイスの全体的なアーキテクチャを示す。
【図３Ｂ】図１のコーディネータによって管理される連携デバイスの全体的なアーキテクチャを示す。
【図４】エッジデバイスにおける認証サービスおよび認可サービスの構成の管理に関係した構成情報を生成してサブミットするために利用され得るクライアントデバイスの全体的なアーキテクチャを示す。
【図５Ａ】グループベースのタスクの構成および実行のための説明的なインタラクションを示す、図１の説明的な環境のブロック図である。
【図５Ｂ】グループベースのタスクの構成および実行のための説明的なインタラクションを示す、図１の説明的な環境のブロック図である。
【図６】グループベースのタスクを受け取って処理するためのルーチンを説明するのに役立つ流れ図である。
【発明を実施するための形態】
【０００６】
一般的に説明すると、本出願は、通信ネットワークにおけるコンピューティングデバイスの管理に該当する。より具体的には、本出願の態様は、連携環境でオンデマンドコードを実行するために利用されるメモリリソースの管理に該当する。本開示の態様によれば、連携環境は、連携環境内の連携デバイスの動作および機能性を制御するために連携環境内に存在するコーディネータを含む。ある例では、コーディネータおよび連携デバイスは、別途の主目的を有する家庭用機器など、少なくとも１つの代替的な主要機能を有する組み込みデバイスまたはシンデバイスに相当するものであってもよい。そのようなデバイスは、ある場合に「モノのインターネット」デバイス、すなわち「ＩｏＴ」デバイスと称され得る。連携デバイスは、限られたローカルユーザインタフェース能力を含んでもよく、この結果として、リモート管理から恩恵を受けてもよい。さらに、コーディネータは、サーバ主体のコンピューティングデバイスと比較して、より限られた処理、メモリ、または通信などのコンピューティングリソースに対応付けられ得るタブレットコンピューティングデバイスなどのデバイスを含んでもよい。
【０００７】
本明細書に開示されるコーディネータは、コーディネータおよび連携デバイスを含む環境（ローカルエリアネットワークすなわち「ＬＡＮ」環境など）の内部で、局部的に、連携デバイスのそのようなリモート管理を可能にする。ある実施形態では下記のように、このような方法でコーディネータを使用することにより、ローカル環境の外部の通信を必要とせずに、連携デバイスを管理することができ、それによってプライバシリスクを低減し、外部またはパブリックの通信ネットワークを使用するよりも通信の速度を増加させることができる。さらに、本明細書に開示されるコーディネータは、コードの移植可能なセグメントの迅速な実行により、コーディネータに機能が実装されることを可能にするので、ローカライズされたオンデマンドコード実行システムとして機能し得る。このようなコードの移植可能なセグメントを、本明細書では「タスク」と呼ぶことがある。ある場合に、タスクは、デバイスの状態を変更することなどにより、連携デバイスの機能性を連携させるために利用され得る。例えば、連携デバイスがネットワーク対応型の照明である場合は、タスクが、現在時刻、ユーザ入力、または別の連携デバイスの状態等のコーディネータへの入力に従って、照明の状態を（例えば、「オン」または「オフ」に）変えるように機能してもよい。コーディネータは、さらに、いくつかの異なるプロトコルに従って、連携デバイスおよびタスクの通信を可能にし、ある例では、そのようなプロトコルの間の変換機能を提供し得る。
【０００８】
またさらに、コーディネータは、場合によっては、タスクの実行先を管理してもよく、その結果、タスクは、候補デバイスの能力、およびタスク実行の要件に応じて、コーディネータ上で、連携デバイス上で、またはリモート環境（例えば、リモートネットワークコンピューティング環境）のデバイス上で実行されてもよい。これらのタスクは、ある例では、ユーザ定義であってもよく、ユーザが、タスクに対応するユーザサブミットコードに従って、コーディネータまたは連携デバイスに様々な機能性を実装できるようになる。したがって、コーディネータは、連携デバイスの迅速に再構成可能なローカライズされた管理を提供することができる。
【０００９】
コーディネータは、集中型の認証サービスおよび認可サービスとは異なるネットワークベースのサービスであって、サービスのエッジノード上の１つ以上の構成要素でインスタンス化されるネットワークベースのサービスに関連付けられ得る。実例として、サービスプロバイダ環境は、コーディネータのプロバイダによって運用されてもよく、コーディネータのための連携環境の場所、環境内の連携デバイス、コーディネータによって実行可能なタスク、コーディネータが、デバイス間、タスク間、もしくはデバイスとタスクとの間の通信をどのように管理すべきか、コーディネータのためのセキュリティ情報、またはコーディネータのその他のパラメータ（コーディネータで監視すべきメトリック、またはコーディネータで行うべきロギング等）等の、コーディネータの様々な構成パラメータをユーザが指定できるようにしてもよい。コーディネータ自体が、限定的なローカライズされたユーザインタフェースに関連付けられている場合があるので、サービスプロバイダ環境では、ユーザが、クライアントデバイスを介して、コーディネータのための構成をサブミットするとともに、その構成を自動的にコーディネータにプロビジョニングされるようにすることができる。さらに、サービスプロバイダ環境では、単一のクライアントデバイスが、統一インタフェースを介して複数のコーディネータを管理できるようにするとともに、新しい構成をコーディネータにデプロイすることによって、またはコーディネータへの以前の構成のデプロイをロールバックする、もしくは取り消すことによって、コーディネータの構成を迅速に変更できるようにする。オンデマンドコードを実施するためのコーディネータに関するさらなる詳細を、「ＯＮ−ＤＥＭＡＮＤ  ＣＯＤＥ  ＥＸＥＣＵＴＩＯＮ  ＩＮ  Ａ  ＬＯＣＡＬＩＺＥＤ  ＤＥＶＩＣＥ  ＣＯＯＲＤＩＮＡＴＯＲ」と題され、２０１６年１１月２８日に提出された同時係属の米国特許出願第１５／３６２，６９６号に見つけることができる。この米国特許出願の全記載内容は、参照により、本明細書に援用される。
【００１０】
ある例では、サービスプロバイダ環境は、コーディネータの機能と類似または同一の機能を提供してもよい。例えば、コーディネータは、コードの移植可能なセグメントすなわち「タスク」の実行に少なくとも部分的に基づいて機能してもよい。同様に、サーバプロバイダ環境は、同一または類似のタスクを実行するように機能するオンデマンドコード実行環境を含んでもよい。そのようなオンデマンドコード実行環境に関するさらなる詳細を、「ＰＲＯＧＲＡＭＭＡＴＩＣ  ＥＶＥＮＴ  ＤＥＴＥＣＴＩＯＮ  ＡＮＤ  ＭＥＳＳＡＧＥ  ＧＥＮＥＲＡＴＩＯＮ  ＦＯＲ  ＲＥＱＵＥＳＴＳ  ＴＯ  ＥＸＥＣＵＴＥ  ＰＲＯＧＲＡＭ  ＣＯＤＥ」と題され、２０１４年９月３０日に提出された米国特許番号第９，３２３，５５６号（「５５６特許」）中に見つけることができる。この米国特許の全記載内容は、参照により、本明細書に援用される。簡単に言えば、タスクを実行するために、オンデマンドコード実行環境では、ユーザの要求が受信されるとすぐに使える状態である、事前に初期化された仮想マシンインスタンスのプールが維持され得る。これらの仮想マシンは、事前に初期化されているために、ユーザコードの実行に伴う（レイテンシと呼ばれることもある）遅延（例えば、インスタンスおよび言語ランタイムの起動時間）を、多くの場合は１００ミリ秒より下のレベルまで、大幅に減らすことができる。
【００１１】
実例として、オンデマンドコード実行環境は、１つ以上の物理コンピューティングデバイス上で仮想マシンインスタンスのプールを維持してもよく、そこでそれぞれの仮想マシンインスタンスは、そのデバイス上にロードされた１つ以上のソフトウェア構成要素（例えば、オペレーティングシステム、言語ランタイム、ライブラリなど）を有する。オンデマンドコード実行環境が、ユーザのプログラムコードを実行する要求（タスク）であって、そのユーザのプログラムコードを実行するための１つ以上の計算制約を指定する要求を受信した際に、オンデマンドコード実行環境では、要求によって指定された１つ以上の計算制約に基づいてユーザのプログラムコードを実行するための仮想マシンインスタンスが選択され、選択された仮想マシンインスタンス上でユーザのプログラムコードが実行されるようにしてもよい。プログラムコードは、仮想マシンインスタンス上に作成される隔離されたコンテナ内で実行させることができる。プール内の仮想マシンインスタンスは、要求が受信されるときまでに、特定のオペレーティングシステムおよび言語ランタイムとともに既にブートされてロードされているので、要求を（例えば、仮想マシンインスタンス上に作成された１つ以上のコンテナ内でユーザコードを実行することによって）処理することができる計算容量を検出するのに伴う遅延は大幅に減少する。
【００１２】
オンデマンドコード実行環境は、５５６特許にさらに詳細に記載されているように、仮想マシンインスタンスのユーザ構成を必要とせずに、ユーザコード（様々なプログラミング言語のいずれかで構成されたスレッド、プログラムなど）を受信し、高度にスケーラブルで低遅延の方法でそのコードを実行するように構成されている、仮想マシンインスタンスマネージャを含んでもよい。具体的には、仮想マシンインスタンスマネージャは、ユーザコードを受信するより前に、かついずれかの特定の仮想マシンインスタンス構成に関するユーザからのいずれかの情報を受信するより前に、それぞれが様々なランタイム環境のいずれか１つ以上に対応する所定の構成セットに従って仮想マシンインスタンスを作成し、構成することができる。その後、仮想マシンインスタンスマネージャは、コードを実行するユーザ起動の要求を受信し、この要求に関連付けられた構成情報に基づいて、コードを実行する事前構成された仮想マシンインスタンスを識別する。仮想マシンインスタンスマネージャは、さらに、識別した仮想マシンインスタンスを確保して、確保した仮想マシンインスタンス内にコンテナを作成して構成することにより、ユーザのコードを少なくとも部分的に実行することができる。仮想マシンインスタンスマネージャを実装し、仮想マシンインスタンス上でユーザコードを実行するための様々な実施形態が、５５６特許にさらに詳細に記載されている。
【００１３】
上記で論じたように、コーディネータは、ある例では、タスクを局部的に（例えば、コーディネータ上で）実行するように構成され得る。連携デバイスによるそれぞれのサブミットされたタスクは、コーディネータによるタスクの実行と、サブミットされたタスク要求に応答するプロセス結果の生成とを容易にするハンドラを含んでもよい。また一方、上記で論じたように、ある実施形態では、連携デバイスは、実行可能コードの少なくとも一部を共有するいくつかのタスクをサブミットして、コーディネータで実行することができる。より限られたコンピューティングリソースで実現されているコーディネータでは、実行するタスクの数が増えると、メモリとしてのコンピューティングリソースの需要が可用性を超える場合がある。そのため、コーディネータは、サブミットされた全てのタスクを適切に実行できないことがあり、またはサブミットされたタスクを効率的に実行できないことがある。さらに、タブレットコンピューティングデバイスなどの代替機能を有するコンピューティングデバイスを含むコーディネータでは、スケーリングタスクの実行は、コーディネータが代替機能を実行するための能力を制限する場合がある。したがって、コーディネータおよび連携ネットワークの動作は、利用可能なコンピューティングリソースに基づいて影響を受ける可能性がある。
【００１４】
コーディネータによって実現されるオンデマンドコード実行環境は、５５６特許に記載されている（例えば、データセンタ内に実装されることがある）オンデマンドコード実行環境よりも限られた計算リソースに関連付けられ得るため、コーディネータは、タスク実行の優先順位付けを支援するスケジューラを実装してもよい。具体的に、スケジューラは、タスクを実行するための呼び出しを受信し、そのような呼び出しを作業項目として作業項目キューに入れる。次に、スケジューラは、スケジューリングアルゴリズムに従って、作業項目キューから呼び出しを選択的に外してもよい。先入れ先出しスケジューリング、締切り順スケジューリング、最小残り時間スケジューリング、固定優先度プリエンプティブスケジューリング、ラウンドロビンスケジューリングなど、任意の数のスケジューリングアルゴリズムがスケジューラによって利用され得る。
【００１５】
実例として、各スケジューリングアルゴリズムは、コーディネータに利用可能な計算リソースの量と、タスク呼び出しを完了するのに必要なリソースの量とに基づいて実装されてもよい（これらの量は、例えば、タスクの作成者またはコーディネータの管理者によって設定され得、またはタスクの静的もしくは動的な分析に基づいて推定され得る）。ある例では、スケジューリングアルゴリズムは、タスクの作成者、コーディネータの管理者、呼び出しエンティティなどによってタスクに割り振られた優先度に少なくとも部分的に基づいていてもよい。スケジューラは、スケジューリングアルゴリズムに従って作業項目のキューを処理し、タスク呼び出しがキューからの取り出しのために選択されると、（例えば、その呼び出しのパラメータに従って）呼び出しに対応するタスクを実行することにより、そのタスク呼び出しを完了させてもよい。さらに説明するように、本出願の態様によれば、コーディネータは、１つ以上の連携デバイスによって提供される個々のタスクの少なくとも一部を、グループベースのタスクの複数の反復で置き換えることにより、さらなるタスクの実行を容易にすることができる。
【００１６】
タスクの実行を支援するために、コーディネータは、さらに、コーディネータでの計算リソースの使用状況を監視するとともに、タスクが実行される実行環境の生成、破壊、および維持を管理するためのリソースマネージャを含んでもよい。実行環境は、タスク実行に論理的に割り当てられたメモリのいずれかの部分を含むことができる。実例として、実行環境は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「サンドボックス」環境（「ｃｈｒｏｏｔ  ｊａｉｌ」またはＰｙｔｈｏｎ仮想環境「ｖｉｒｔｕａｌｅｎｖ」など）に該当するものであってよい。他の例では、実行環境は、仮想マシン環境（例えば、ＪＡＶＡ仮想マシン、別個のオペレーティングシステムを備えた仮想化ハードウェアデバイスなど）に該当するものであってもよい。さらに他の例では、実行環境は、必ずしも仮想化を利用せずに、タスクの実行に割り当てられたメモリ空間であってもよい。実例として、リソースマネージャは、作業項目キューからどのタスク呼び出しを外すかをスケジューラが判定できるようにするために、利用可能なメモリの量、（例えば、中央処理装置、グラフィック処理装置などの）プロセッササイクル、ネットワーク帯域幅、またはその他のコンピューティングリソースなど、コーディネータの現在の計算リソース可用性情報をスケジューラが取得できるようにすることができる。
【００１７】
ある例では、リソースマネージャは、コーディネータで行われている現在のタスク実行のリストなど、他の情報をスケジューラに提供してもよい。リソースマネージャは、さらに、タスク呼び出しを渡すための実行環境を得るために、スケジューラからの要求を受信して処理することがある。実例として、各タスク（個別のタスク、またはグループベースのタスク）が別個の実行環境で実行され、所与のタスクのための実行環境が存在しない場合、リソースマネージャは、所与のタスクの実行のために必要なリソースを（プロセッサ容量およびメモリのような基本的な計算リソースの観点から、さらにはドライバ、ランタイム、ユーティリティ、依存関係など、ソフトウェアリソースの観点から）判定し、そのようなリソースを提供するために実行環境を生成してもよい。その場合、リソースマネージャは、スケジューラが、タスクを実行するための呼び出しを実行環境に渡すことができるように、実行環境についての識別情報をスケジューラに返してもよい。場合によっては、リソースマネージャは、既存の実行環境の再利用を可能にすることもできる。例えば、グループベースのタスクを含む一部のタスクは、実行環境がそのタスクのために事前に生成されるように「固定」されている場合がある。この結果として、リソースマネージャがタスクのための実行環境を生成する要求を受信すると、事前生成された環境についての識別情報が返されて、実行環境を生成するのに必要とされる時間およびコンピューティングリソースを減少させることができる。ある例では、２つの異なるタスクが実行に同一または類似のリソースを必要とする場合など、実行環境がタスク間で再利用されることがある。そのような例では、リソースマネージャは、実行間のセキュリティを保証するために、異なるタスクの実行間の実行環境を「空」にしてもよい。以下でさらに詳細に説明するように、リソースマネージャは、さらに、優先度の低いタスクの実行環境を一時停止して、計算リソースを優先度の高いタスクに解放し、スケジューリングアルゴリズムに従って再開することができるように、実行環境の一時停止および再開を可能にすることができる。
【００１８】
上記で論じたように、本開示の態様によれば、メモリフットプリントを削減したオンデマンドコードを実行するための連携環境が提供される。より具体的には、コーディネータは、連携デバイスから個々のオンデマンドコード実行要求またはタスクを受信する。コーディネータは、オンデマンドコード実行要求を処理して、オンデマンドコード実行の少なくともサブセットを、実行可能コードを共有する１つ以上のグループに関連付けることができる。例えば、連携デバイスは、共通の実行可能コードを有するシステムレベルのタスクに関係したタスクを送信する場合がある。受信した各タスクの実行可能コードを維持し、上記で論じたようにタスクのスケジュールおよび管理を行う代わりに、コーディネータは、タスクのグループ化のための共通実行可能コードに関連付けられたマスタープロセス（またはタスク）を維持してもよい。さらに、コーディネータは、その後、個々のタスクに関する状態情報を維持する個々の作業項目キューを維持することができる。コーディネータは、オンデマンドの実行可能コードを別途ロードして実行することを必要とせずに、個々のタスクの実行を実施することができる。したがって、コーディネータは、要求されたオンデマンドタスクの実行の複数回の反復に対する個々の状態と構成とを維持しながら、オンデマンドタスクの実行に必要なメモリフットプリントを削減することにより、さらに限られたコンピューティングリソースを有するコンピューティングデバイスに実装され得る。
【００１９】
本開示に記載されるいくつかの実施形態の態様は、例示の目的で、認証情報および認可情報の処理と処理結果の生成とに重点を置くことにするが、当業者は、実施例が説明のためのものに過ぎず、必ずしも限定を意図するものではないことを理解するであろう。本開示を考慮して当業者によって理解されるように、本明細書で開示される実施形態は、コンピューティングシステム、特に、外部デバイスによって連携され、管理されることになる、制限されたローカライズされたユーザインタフェースを有するコンピューティングシステムの能力を改善する。
【００２０】
本開示の上に述べた態様と付随する利点の多くとは、添付の図面と併用されると、以下の説明を参照することにより、それらが一層よく理解されるようになるので、さらに容易に認識されるようになる。本出願の様々な実施形態および態様が、図１〜図６に関して説明される。本出願のいかなるものも、実施形態または実施例のいずれかの特定の組み合わせを必要として解釈されるべきではない。さらに、当業者は、本出願の１つ以上の態様または実施形態を容易に組み合わせることができ、本出願の追加の発明的態様をもたらすことができることを理解されよう。
【００２１】
図１は、１つ以上の連携環境１１０であって、連携環境１１０内で、コーディネータ１１４が、（例えば、連携デバイス１１２の状態の変更を要求するために）連携環境１１０とインタラクトし得るクライアントデバイス１０２と同様に、連携デバイス１１２を制御するように動作し得る１つ以上の連携環境１１０と、様々な連携環境１１０内のコーディネータ１１４との通信またはコーディネータ１１４の構成を支援し得るサービスプロバイダ環境１２０とを含む、実例となる動作環境１００のブロック図である。
【００２２】
連携環境１１０、クライアントデバイス、およびサービスプロバイダ環境１２０は、ネットワーク１０４を介して通信することができ、このネットワーク１０４は、任意の有線ネットワーク、無線ネットワーク、またはそれらの組み合わせを含んでもよい。例えば、ネットワーク１０４は、パーソナルエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、（例えば、ラジオまたはテレビのための）無線放送網、ケーブルネットワーク、衛星ネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであってもよい。さらなる例として、ネットワーク１０４は、インターネットなど、様々な別個の関係者によって運営されている可能性のある、連結されたネットワークのうちの公にアクセス可能なネットワークであってもよい。ある実施形態では、ネットワーク１０４は、企業または大学のイントラネット等のプライベートまたはセミプライベートネットワークであり得る。ネットワーク１０４は、汎欧州デジタル移動電話方式（ＧＳＭ）ネットワーク、符号分割多重アクセス（ＣＤＭＡ）ネットワーク、ロングタームエボリューション（ＬＴＥ）ネットワーク等の１つ以上の無線ネットワーク、または他の任意のタイプの無線ネットワークを含み得る。ネットワーク１０４は、インターネットまたは他の前に述べたタイプのいずれかのネットワークを介して通信するためのプロトコルおよび構成要素を使用することができる。例えば、ネットワーク１０４によって使用されるプロトコルは、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、ＨＴＴＰセキュア（ＨＴＴＰＳ）、ＭＱＴＴ、制約付きアプリケーションプロトコル（ＣｏＡＰ）等を含み得る。インターネット、または他の上に述べたタイプのいずれかの通信ネットワークを介して通信するためのプロトコルおよび構成要素は当業者にとって周知であり、したがって本明細書では、さらに詳細には記載していない。ネットワーク１０４の全ての構成要素を図１に示すが、ルータ等の構成要素の１つ以上は、メッセージ処理サービスとして機能してもよい。
【００２３】
各連携環境１１０は、実行環境１１０のネットワーク（このネットワークは図１に示していない）を介して通信する、コーディネータ１１４と任意の数の連携デバイス１１２とを含んでもよい。連携環境１１０内のそれらの接続のために、所与の環境１１０内の連携デバイス１１２とコーディネータ１１４とは、通信ネットワークの観点から、互いに「ローカル」であると考えられ得る。例えば、所与の環境１１０内の連携デバイス１１２とコーディネータ１１４とは、ＬＡＮまたは他の局在化された通信ネットワークを介して接続されてもよい。
【００２４】
各連携デバイス１１２は、連携デバイス１１２の機能性を管理するために、コーディネータ１１４と通信するように構成されたコンピューティングデバイスに相当するものであってよい。ある例では、連携デバイス１１２は、ロバストな局在化されたユーザインタフェース能力を備えた、ラップトップ、デスクトップ、スタンドアロンメディアプレイヤ等の十分な機能を有するコンピューティングデバイスに相当するものであってよい。他の例では、連携デバイス１１２は、家庭用の機器またはデバイス（冷蔵庫、洗濯機、湯沸し器、加熱炉、ドアロック、照明バルブ、電気取出口、電気スイッチなど）の内部に組み込まれるデバイス、またはこれらに付属品として取り付けられるデバイスなど、別の主要機能に関連するシンデバイスまたは組み込みデバイスに相当するものであってもよい。このような機器またはデバイスは、ある文脈では、「スマート」デバイス、ＩｏＴデバイス、または「コネクテッド」デバイスと呼ばれる。したがって、連携デバイス１１２は、限られたローカルユーザインタフェースを含み、リモート管理のために構成され得る。ある例では、連携デバイス１１２は、ステートフルであり、命令に応答して（例えば、「オフ」から「オン」に切り替えるなどによって）それらの状態を変えるように動作してもよい。
【００２５】
以下では（例えば、図２に関して）さらに詳細に説明するように、コーディネータ１１４は、連携デバイス１１２に伝送された命令が連携環境１１０の外部に伝わることを必要とせずに（したがって、そのような命令のセキュリティを高め、それらの伝送速度が増加する）、連携デバイス１１２の動作の調整、管理、または制御を行う命令を実行するコンピューティングデバイスに相当するものであってもよい。連携デバイスと同様に、ある場合に、コーディネータ１１４は、ロバストな局在化されたユーザインタフェース能力を備えた、ラップトップ、デスクトップ、サーバコンピューティングデバイス、タブレットなどのコンピューティングデバイスに相当するものであってもよい。他の例では、連携デバイス１１２は、家庭用の機器またはデバイス（冷蔵庫、洗濯機、湯沸し器、加熱炉、ドアロック、照明バルブ、電気取出口、電気スイッチなど）の内部に組み込まれるデバイス、またはこれらに付属品として取り付けられるデバイスなど、別の主要機能に関連するシンデバイスまたは組み込みデバイスに相当するものであってもよい。上記で論じたように、少なくとも一部の実施形態では、コーディネータ１１４は、リソースに制約があってもよく、またはリソースに制約があるように動作してもよい。実例として、コーディネータが、リソースに制約があり、または別の方法でリソースに制約があるように動作している場合に、コーディネータ１１４は、タスクのグループ化のための共通実行可能コードに関連付けられたマスタープロセスを維持して、連携デバイス１１２によるタスクの実行を容易にすることができる。
【００２６】
具体的には、コーディネータ１１４は、連携デバイス１１２、クライアントデバイス１０２、およびサービスプロバイダネットワーク１２０のデバイスの任意の組み合わせの間の通信を管理するように集合的に構成されているプロセッサおよびメモリを含み得る。コーディネータは、さらに、サービスプロバイダ環境１２０のオンデマンドコード実行環境１２０と同じようにして、タスクの実行を可能にするように構成され得る。これらのタスクは、連携デバイス１１２、クライアントデバイス１０２、およびサービスプロバイダネットワーク１２０のデバイスとの通信を含む、様々なユーザ定義の機能、または非ユーザ定義の機能を実施することができる。コーディネータ１１４がオンデマンド実行環境でタスクの実行をスケジュールする方法の説明的な例は、参照により本明細書に組み込まれている「６９６」出願に開示されている。したがって、コーディネータ１１４は、連携デバイス１１２の手動、自動、または半自動の制御を可能にするように構成され得る。例えば、コーディネータ１１４は、クライアントデバイス１０２が、連携デバイス１１２の状態を変更するための要求を送信できるようにし、そのような状態の変化を生じさせることができる。さらなる例として、コーディネータ１１４は、連携デバイス１１２の状態を変更する必要がある基準をユーザが指定し、その後、その基準が満たされたときに自動的に動作して、連携デバイス１１２の状態を変更できるようにしてもよい。以下に説明するように、コーディネータ１１４の多くの機能はタスクを介して設定することができ、ユーザが望むようにこれらの機能を迅速に変更することを可能にする。
【００２７】
クライアントデバイス１０２は、ユーザが連携環境１１０、サービスプロバイダ環境１２０、またはその両方と通信することを可能にする様々なコンピューティングデバイスを含んでもよい。一般に、クライアントデバイス１０２は、デスクトップコンピュータ、ラップトップコンピュータまたはタブレットコンピュータ、パーソナルコンピュータ、ウェアラブルコンピュータ、サーバ、携帯情報端末（ＰＤＡ）、ハイブリッドＰＤＡ／携帯電話、携帯電話、電子ブックリーダ、セットトップボックス、ボイスコマンドデバイス、カメラ、デジタルメディアプレイヤ等の任意のコンピューティングデバイスであり得る。サービスプロバイダ環境１２０は、コーディネータ１１４用の構成をサブミットし、その構成のデプロイを制御すること、コーディネータ１１４で、またはサービスプロバイダ環境１２０のオンデマンドコード実行環境１５０で実行すべきタスクに対応するコードをサブミットすること、コーディネータ１１４に関連しているロギング情報または監視情報を表示することなどのために、クライアントデバイス１０２に、サービスプロバイダ環境１２０とインタラクトするための１つ以上のユーザインタフェース、コマンドラインインタフェース（ＣＬＩ）、アプリケーションプログラミングインタフェース（ＡＰＩ）、および／またはその他のプログラムインタフェースを提供し得る。同様に、コーディネータ１１４は、連携デバイス１１２の状態の読み出し、連携デバイス１１２の状態における変更の要求、コーディネータ１１４によるタスクの実行の要求などのために、クライアントデバイス１０２に、コーディネータ１１４とインタラクトするための１つ以上のユーザインタフェース、コマンドラインインタフェース（ＣＬＩ）、アプリケーションプログラミングインタフェース（ＡＰＩ）、および／またはその他のプログラムインタフェースを提供し得る。本明細書では、１つ以上の実施形態が、ユーザインタフェースを使用するものとして記載されることがあるが、そのような実施形態は、追加または代替として、任意のＣＬＩ、ＡＰＩ、またはその他のプログラムインタフェースを使用できることが理解されよう。
【００２８】
サービスプロバイダ環境１２０は、コーディネータ１１４の構成、コーディネータ１１４の管理、およびコーディネータ１１４との通信を可能にするいくつかの要素を含み得る。具体的には、サービスプロバイダ環境１２０は、サービスプロバイダ環境１２０へのコーディネータ１１４の登録、およびそのようなコーディネータ１１４の構成を可能にする管理およびデプロイサービス１３０と、タスクのオンデマンドの動的実行、ならびにコーディネータ１１４でのタスクのデプロイおよびプロビジョニングを提供するオンデマンドコード実行環境１４０とを含む。サービスプロバイダ環境１２０は、図１に示していない追加の構成要素またはサービスを含むこともできる。
【００２９】
図１に示すように、管理およびデプロイサービス１３０は、管理およびデプロイサービス１３０へのコーディネータ１１４の登録、コーディネータ１１４用の構成の生成、ならびにコーディネータ１１４への構成データの送信を可能にするために集合的に動作し得る、クライアントおよびデータインタフェース１３２と構成データストア１３４とを含む。実例として、クライアントおよびデータインタフェース１３２は、１つ以上のユーザインタフェース（例えば、ＡＰＩ、ＣＬＩ、ＧＵＩなど）であって、それによってユーザが、クライアントデバイス１０２を介して、コーディネータ１１４の構成を生成し、またはサブミットして、構成データストア１３４に格納することができる、１つ以上のユーザインタフェースを提供し得る。クライアントおよびデータインタフェース１３２は、さらに、１つ以上のインタフェースであって、それによってコーディネータ１１４が、構成を取得することができ、その結果、コーディネータ１１４が、取得された構成に従って再構成される、１つ以上のインタフェースを提供してもよい。構成データストア１３４は、ハードドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＤＤ）、ネットワーク接続ストレージ（ＮＡＳ）、テープドライブ、またはそれらの任意の組み合わせなど、いずれかの永続的または実質的に永続的なデータストアに相当するものであってもよい。
【００３０】
オンデマンドコード実行環境１４０は、タスク（例えば、移植可能なコードセグメント）のオンデマンド実行を提供するいくつかのデバイスを含むことができる。具体的には、オンデマンドコード実行環境１４０は、フロントエンド１４２を含んでもよく、フロントエンド１４２によりユーザは、クライアントデバイス１０２を介して、オンデマンドコード実行環境１４０にタスクをサブミットし、オンデマンドコード実行環境１４０上でタスクの実行を要求することができる。このようなタスクは、例えば、タスクデータストア１５４に記憶されてもよく、このタスクデータストア１５４は、ハードドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＤＤ）、ネットワーク接続ストレージ（ＮＡＳ）、テープドライブ、またはそれらの任意の組み合わせなど、いずれかの永続的または実質的に永続的なデータストアに相当するものであってもよい。図１には示していないが、オンデマンドコード実行システム１４０は、いくつかの実行環境（例えば、オンデマンドコード実行環境１４０の物理ホストデバイスで実行されるコンテナまたは仮想マシン）、そのような実行環境を管理するワーカマネージャ、およびワーカマネージャが実行環境を迅速に（例えば、１０ミリ秒未満で）利用できるように支援するためのウォーミングプールマネージャなど、タスクの実行を可能にする様々な追加構成要素を含んでもよい。オンデマンドコード実行環境に関するさらなる詳細を、上記の参照によって組み込まれる「５５６特許」の中で見つけることができる。
【００３１】
上記のとおり、タスクは、オンデマンドコード実行環境１４０とコーディネータ１１４との両方で利用され得る。上記のとおり、タスクは、（例えば、特定の機能を実現するための）ユーザコードの個々の集合に対応する。本明細書で使用されるユーザコードへの言及は、特定のプログラム言語で記述された任意のプログラムコード（例えば、プログラム、ルーチン、サブルーチン、スレッド等）を指し得る。本開示では、用語「コード」、「ユーザコード」、および「プログラムコード」は、互換的に使用されてもよい。このようなユーザコードは、例えば、ユーザによって開発された特定のウェブアプリケーションまたはモバイルアプリケーションに関連して、特定の機能を実現するように実行され得る。そのコードの特定の実行は、本明細書では「タスク実行」または単に「実行」と呼ばれる。タスクは、非限定的な例として、ＪａｖａＳｃｒｉｐｔ（例えば、ｎｏｄｅ．ｊｓ）、Ｊａｖａ、Ｐｙｔｈｏｎ、および／またはＲｕｂｙ（および／または別のプログラミング言語）で記述され得る。本出願でさらに述べるように、グループベースのタスクは、タスクのグループ化のための共通実行可能コードに関連した実行可能コードに相当し、個々のタスクの代わりにコーディネータ１１４によって実行される場合がある。そのような実行は、実行のための個々のタスクのストレージを減らすことにより、コーディネータのメモリの制約を減じる。
【００３２】
タスクは、様々な方式で、オンデマンドコード実行システム１５０またはコーディネータ１１４で実行するために「トリガ」され得る。一実施形態では、クライアントデバイス１０２または他のコンピューティングデバイスは、タスクを実行するための要求を送信することができ、この要求は、一般に、タスクを実行するための「呼び出し」と呼ばれ得る。このような呼び出しは、実行すべきユーザコード（またはその場所）と、ユーザコードの実行に使用すべき１つ以上の引数とを含んでもよい。例えば、呼び出しは、タスクを実行する要求と併せてタスクのユーザコードを提供し得る。別の例では、呼び出しは、その名前または識別子によって、以前にアップロードされたタスクを識別し得る。さらに別の例では、タスクに対応するコードは、タスクの呼び出しに含めることができるだけでなく、要求がコーディネータ１１４またはオンデマンドコード実行システム１４０によって受信される前に、別個の場所（例えば、コーディネータ１１４のストレージ、ネットワークアクセス可能なストレージサービス、またはタスクデータストア１４４）にアップロードされることがある。コーディネータ１１４またはオンデマンドコード実行システム１４０の要求インタフェースは、ユーザから、ハイパーテキスト転送プロトコルセキュア（ＨＴＴＰＳ）要求としてタスクを実行するための呼び出しを受信し得る。また、ＨＴＴＰＳ要求に含まれる任意の情報（例えば、ヘッダおよびパラメータ）も、タスクを実行するときに処理され利用され得る。上記で説明したように、例えば、ＨＴＴＰ、ＭＱＴＴ、およびＣｏＡＰを含む他の任意のプロトコルは、タスク呼び出しを含むメッセージを要求インタフェース１２２に転送するために使用されてもよい。
【００３３】
タスクを実行するための呼び出しが、タスクに対応するユーザコードと併せて使用すべき１つ以上の（ネイティブライブラリを含む）第三者ライブラリを指定してもよい。一実施形態では、呼び出しは、実行を要求されたタスクに対応するユーザコードおよび任意のライブラリ（および／または、その記憶場所の識別）を含むＺＩＰファイルを、コーディネータ１１４またはオンデマンドコード実行システム１４０に提供してもよい。ある実施形態では、呼び出しは、実行すべきタスクのプログラムコード、プログラムコードが記述された言語、呼び出しと関連付けられたユーザ、および／またはプログラムコードを実行するために確保すべきコンピューティングリソース（例えば、メモリ等）を示すメタデータを含む。例えば、タスクのプログラムコードは、呼び出しとともに提供されたもの、ユーザによって以前にアップロードされたもの、コーディネータ１１４またはオンデマンドコード実行システム１５０によって提供されたもの（例えば、標準ルーチン）、または第三者によって提供されたものであってもよい。
【００３４】
ある実施形態では、そのようなリソースレベルの制約（例えば、特定のユーザコードを実行するために、どれだけのメモリが割り当てられるべきか）は、特定のタスクに対して指定され、タスクの各実行にわたり変えなくてもよい。そのような場合、コーディネータ１１４またはオンデマンドコード実行システム１４０は、１つずつの呼び出しが受信される前に、そのようなリソースレベルの制約にアクセスすることができ、個々の呼び出しは、そのようなリソースレベルの制約を指定しなくてもよい。ある実施形態では、呼び出しは、タスクを実行するために呼び出しが呼び出すパーミッションまたは権限の種類を指示するパーミッションデータなどの他の制約を指定することができる。このようなパーミッションデータは、オンデマンドコード実行システム１１０によって、（例えば、プライベートネットワーク上の）プライベートリソースにアクセスするために使用されてもよい。
【００３５】
ある実施形態では、呼び出しは、呼び出しを処理するために採用されるべき動作を指定してもよい。そのような実施形態では、呼び出しは、呼び出しで参照されるタスクを実行するための１つ以上の実行モードを有効にするためのインジケータを含んでもよい。例えば、呼び出しは、タスクの実行に関連して生成され得るデバッグおよび／またはログの出力が（例えば、コンソールユーザインタフェースを介して）ユーザに返されるデバッグモードでタスクが実行される必要があるかどうかを示すフラグまたはヘッダを含んでもよい。このような例では、コーディネータ１１４またはオンデマンドコード実行システム１５０が呼び出しを調べ、フラグまたはヘッダを探してもよく、フラグまたはヘッダが存在する場合には、コーディネータ１１４またはオンデマンドコード実行システム１５０は、タスクが実行される実行環境の動作（例えば、ロギング機能）を変更し、出力データがユーザに返されるようにしてもよい。ある実施形態では、動作／モードインジケータは、コーディネータ１１４またはオンデマンドコード実行システム１５０によってユーザに提供されるユーザインタフェースによって呼び出しに追加される。ソースコードプロファイリング、リモートデバッギングなどの他の機能も、呼び出しで提供される表示に基づいて、有効または無効にされてもよい。
【００３６】
サービスプロバイダ環境１２０は、１つ以上の（図１に示さない）コンピュータネットワークを使用して相互接続された、いくつかのコンピュータシステムを含む分散コンピューティング環境において動作するものとして図１に示される。サービスプロバイダ環境１２０は、図１に示されているよりも少ない数または多い数のデバイスを有するコンピューティング環境内で動作することもできる。したがって、図１のサービスプロバイダ環境１２０の描写は、説明のためのものとして解釈されるべきであり、本開示を限定するものではない。例えば、サービスプロバイダ環境１２０、またはその様々な構成要素は、本明細書で説明されるプロセスの少なくとも一部を実装するために、様々なウェブサービス構成要素、ホストされたコンピューティング環境または「クラウド」コンピューティング環境、および／またはピアツーピアネットワーク構成を実装してもよい。
【００３７】
さらに、サービスプロバイダ環境１２０は、ハードウェア、またはハードウェアデバイスによって実行されるソフトウェアに直接実装されてもよく、例えば、本明細書で説明される様々な機能を実施するためのコンピュータ実行可能命令を実行するように構成された物理コンピュータハードウェア上に実装される１つ以上の物理サーバまたは仮想サーバを含んでもよい。１つ以上のサーバは、例えば、１つ以上のデータセンタ内に、地理的に分散しているか、または地理的に同じ場所に配置されている場合がある。ある例では、１つ以上のサーバは、多くの場合、「クラウドコンピューティング環境」と呼ばれる、迅速にプロビジョニングおよび解放が行われるコンピューティングリソースのシステムの一部として動作し得る。
【００３８】
図２は、所与の連携環境１１０内の連携デバイス１１２を管理する（一般にコーディネータ１１４と呼ばれる）コンピューティングシステムの全体的なアーキテクチャを示す。コーディネータ１１４への参照は、ソフトウェアモジュールもしくはタスク、またはデバイス（複数可）によって実行される機能を含むことができる。図２に示すコーディネータ１１４の全体的なアーキテクチャは、本開示の態様を実施するために使用することができるコンピュータハードウェアおよびソフトウェアモジュールの配列を含む。ハードウェアモジュールは、下記にさらに詳細に説明するように、物理電子デバイスで実装され得る。コーディネータ１１４は、図２に示すものよりもはるかに多い（または少ない）要素を含む場合がある。しかしながら、開示を可能にするために、これらの一般的な従来の要素の全てを示す必要はない。加えて、図２に示す全体的なアーキテクチャは、図１に示す他の構成要素のうちの１つ以上を実装するために使用してもよい。
【００３９】
図に示すように、コーディネータ１１４は、プロセシングユニット２０４、ネットワークインタフェース２０６、コンピュータ可読媒体ドライブ２０７、および入力／出力デバイスインタフェース２０８を含み、これらの全ては、通信バスによって相互に通信し得る。ネットワークインタフェース２０６は、１つ以上のネットワークまたはコンピューティングシステムへの接続を提供し得る。したがって、プロセシングユニット２０４は、ネットワーク１０４を介して、他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。また、プロセシングユニット２０４は、メモリ２５０との間で通信し、さらに、入力／出力デバイスインタフェース２０８を介して、任意選択のディスプレイ（図示しない）に出力情報を提供することもできる。また、入力／出力デバイスインタフェース２０８は、任意選択の入力デバイス（図示しない）から入力を受け入れることもある。
【００４０】
メモリ２５０は、本開示の１つ以上の態様を実施するために、プロセシングユニット２０４が実行するコンピュータプログラム命令（ある実施形態では、モジュールとしてグループ化される）を含んでもよい。メモリ２５０は、一般に、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、および／またはその他の永続的、補助的、または非一時的なコンピュータ可読媒体を含む。メモリ２５０は、プロセシングユニット２０４が、コーディネータ１１４の全体的な管理および動作において使用するためのコンピュータプログラム命令を提供するオペレーティングシステム２５２を記憶してもよい。メモリ２５０は、さらに、本開示の態様を実施するためのコンピュータプログラム命令およびその他の情報を含んでもよい。例えば、一実施形態では、メモリ２５０は、プロセスマネージャ２５４、スケジューラ２５６、デプロイエージェント２５８、および通信マネージャ２６０を含む。
【００４１】
スケジューラ２５６およびデプロイエージェント２５８は、プロセシングユニット２０４によって実行されるタスクを選択し、そのようなタスクの実行を管理するために、プロセシングユニット２０４によって実行されてもよい。具体的には、スケジューラ２５６は、所与の時点で実行するタスクを選択し、（例えば、コーディネータ１１４でリソースが制約されているインスタンスの下で）タスクの実行を一時停止する命令を含む場合がある。デプロイエージェント２５８は、タスクを実行する適切な実行環境２７０を選択すること、タスク実行中に必要とされるリソースへの適切なアクセスをその実行環境２７０にプロビジョニングすること、および実行環境２７０内にタスクの実行を生じさせることのための命令を含む場合がある。本出願に適用されるように、スケジューラは、連携デバイス１１２から受け取った個々のタスク実行要求の代わりに、実行環境でグループベースのタスクを実行することができる。
【００４２】
実行環境２７０は、本明細書で使用するように、タスクを実行するためのメモリ２５０の論理部分を指す。一実施形態では、実行環境２７０は、プログラム的に分離されており、その結果、第１の実行環境２７０でのコードの実行は、別の実行環境２７０に関連するメモリを変更することが禁止されている。実例として、実行環境２７０は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「サンドボックス」環境（「ｃｈｒｏｏｔ  ｊａｉｌ」またはＰｙｔｈｏｎ仮想環境「ｖｉｒｔｕａｌｅｎｖ」など）に該当するものであってよい。他の例では、実行環境２７０は、仮想マシン環境（例えば、ＪＡＶＡ仮想マシン、別個のオペレーティングシステムを備えた仮想化ハードウェアデバイスなど）に該当するものであってもよい。さらに他の例では、実行環境２７０は、必ずしも仮想化を利用せずに、タスクの実行に割り当てられたメモリ空間であってもよい。
【００４３】
コーディネータ上で実行されているタスクの間の通信とともに、コーディネータ１１４と他のデバイス（例えば、クライアントデバイス１０２および連携デバイス１１２）との間の通信は、通信マネージャ２６０によって促進され得る。具体的に、通信マネージャ２６０は、コーディネータ１１４に向けられたメッセージを取得して、適切な宛先にそのメッセージを転送するように構成され得る。例えば、通信マネージャ２６０は、タスク、連携デバイス１１２、クライアントデバイス１０２、およびサービスプロバイダ実行環境１２０のデバイスの任意の組み合わせの間でメッセージをルーティングしてもよい。
【００４４】
コーディネータ１１４によって実行されるタスクは、各タスクに対応するコードを格納するように構成されたメモリ２５０の論理ユニットに対応し得るタスクメモリ空間２８０内で論理的にグループ化されているように示されている。図２に示すように、タスクメモリ空間２８０は、コーディネータ１１４の機能性を実装するために、プロセシングユニット２０４によって実行可能な、ルータタスク２８２、１つ以上の通信マネージャタスク２８６、シャドウサービスタスク２８８、および１つ以上のクライアント提供のタスク２９０を含む、いくつかのタスクを含み得る。
【００４５】
ルータタスク２８２は、コーディネータ内でのメッセージのルーティング、コーディネータへのメッセージのルーティング、およびコーディネータからのメッセージのルーティングを支援するように実行可能なコードの一部に対応し得る。一実施形態では、ルータタスク２８２は、メッセージの適切な宛先を判定するために、「ルーティングテーブル」を実装する。例えば、通信マネージャ２６０は、コーディネータ１１４で（例えば、入力／出力インタフェース２０８でのタスク実行またはタスク受信による生成に起因して）取得したメッセージをルータタスク２８２に転送することができ、ルータタスク２８２は、ルーティングテーブルを利用して、特定の識別子宛のメッセージを、所与のタスク、所与のクライアントデバイス１０２、または所与の連携デバイス１０２にルーティングする必要があると判定することができる。ルーティングテーブルは、さらに、ある識別子宛てのメッセージが、サービスプロバイダ環境１２０に（例えば、デバイスシャドウサービス１４０またはオンデマンドコード実行システム１５０に）伝送される必要があることを示す場合がある。一実施形態では、ルーティングテーブルは、識別子として「トピック」を利用してもよく、その結果、特定のトピックに関連付けられたメッセージが、そのトピックに対して指定されるルーティングに従って転送される。ルーティングテーブルは、さらに、メッセージのソースに基づいて、それらのメッセージをルーティングする方法についての情報を含んでもよい。例えば、所与のトピックに宛てられたメッセージは、メッセージが第１のタスク、第２のタスク、第１の連携デバイス１１２などから受信されたかどうかに基づき、異なる方法でルーティングされ得る。ルーティングテーブルの利用により、ルータタスク２８２は、メッセージの送信元の動作を変更することなく（例えば、メッセージを生成したタスクのコードを書き直すことなく、メッセージを生成した連携デバイス１１２のソフトウェアを変更することなく、など）、そのようなメッセージがリダイレクトされるようにすることができる。
【００４６】
通信マネージャタスク２８６は、通信のプロトコルに従って、コーディネータ１１４といくつかの異なる外部デバイス（例えば、連携デバイス１０２）との間のそのような通信を可能にすることができる。例えば、第１の通信マネージャタスク２８６が、ＢＬＵＥＴＯＯＴＨ（商標）プロトコルを使用して通信を管理するように構成され得、第２の通信マネージャが、ＨＴＴＰプロトコルを使用して通信を管理するように構成され得る等である。ある例では、複数の通信マネージャタスク２８６が、通信を実施するために集合的に作用し得る。例えば、第１の通信マネージャタスク２８６は、ＴＣＰプロトコルを介した通信を可能にし得る一方、第２の通信マネージャタスク２８６は、ＭＱＴＴプロトコル（ＴＣＰプロトコルを利用し、したがって第１の通信マネージャタスク２８６を利用することができる）を介した通信を可能にし得る。異なる通信マネージャタスク２８６は、異なるプロトコルを介して通信するコーディネータ１１４の能力を変えることができ、コーディネータ１１４のタスクはコーディネータ１１４の再構成を介して変更され得るので、コーディネータ１１４は、様々な異なる通信プロトコルを利用するように迅速に再構成され得る。
【００４７】
作業マネージャタスク２８８は、コーディネータ１１４による共有オンデマンドコードの実行の管理およびインタラクションを促進することができる。実例として、作業マネージャタスク２８８は、受信タスクをグループベースの共有オンデマンドコードに関連付けることができ、一般に、グループベースのオンデマンドコードと呼ばれ、グループベースのオンデマンドコードの実行に関連付けられたタスクに関する状態情報を保持するための作業キューを維持する。
【００４８】
上記のタスク（これらのそれぞれは、例として、サービスプロバイダ環境１２０に関連付けられたエンティティによって提供される場合がある）に加えて、タスクメモリ空間２８０には、コーディネータ１１４にデプロイするための実行可能コードに対応し得る、グループベースのオンデマンドコードまたはグループベースのタスク２９０をいくつでも含めることができる。したがって、クライアント提供のタスク２９０によって提供される機能性は、サブミットするユーザの要望に従って変化し得る。ある例では、クライアント提供のタスク２９０は、メモリ２５０がそのための言語ランタイムを含むコーディング言語で記述されてもよい。例えば、コーディネータ１１４がｎｏｄｅ．ｊｓ、Ｇｏ、ＪＡＶＡ、およびＰｙｔｈｏｎ等の言語をサポートする場合、クライアント提供のタスク２９０は、それらの言語のいずれかで記述された実行可能コードを含み得る。上記で論じたように、グループベースのオンデマンドコードは、機能、作成者、アクセスされたリソース、結果などの組織基準に関連付けられている。ある実施形態では、タスクメモリ空間２８０は、グループベースのオンデマンドコードとして含まれていない、またはグループベースのオンデマンドコードとして明示的に除外されている個々のタスクを含むことができる。
【００４９】
加えて、メモリ２５０は、コーディネータ１１４の構成データが記憶されたメモリ２５０の論理部分を表す構成データ部分２７２を含む。構成データは、例えば、コーディネータ１１４の現在のデプロイバージョン、タスクメモリ空間２８０のタスクによって記憶されたデータ、またはコーディネータ１１４の動作において使用されるその他のデータを含み得る。
【００５０】
コーディネータ１１４の構成（および再構成）を有効にするために、メモリ２５０は、さらに、デプロイエージェント２５８を含む。デプロイエージェント２５８は、コーディネータをサービスプロバイダ環境１２０に登録し、コーディネータ１１４の所望の構成を判定し、コーディネータ１１４の現在の構成が所望の構成と一致しない例では、コーディネータ１１４用の構成データを取得して、所望の構成を実装するようにメモリ２５０を修正するために実行可能なコードに対応し得る。
【００５１】
図３Ａは、本出願による、実例となる連携デバイス１１２Ａのアーキテクチャの一実施形態を示す。図３Ａに示す連携デバイス１１２Ａの全体的なアーキテクチャは、本開示の態様を実施するために使用され得るコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。図に示すように、連携デバイス１１２Ａは、プロセシングユニット３０４、ネットワークインタフェース３０６、コンピュータ可読媒体ドライブ３０７、入力／出力デバイスインタフェース３２０、任意選択のディスプレイ３０２、および入力デバイス３２４を含み、これらの全ては、通信バスによって互いに通信し得る。実例として、連携デバイス１１２Ａは、組み込みデバイスとして、入力または出力等のより制限された機能性および構成要素を有し得る。
【００５２】
ネットワークインタフェース３０６は、図１のネットワーク１０４などの１つ以上のネットワークまたはコンピューティングシステムへの接続を提供し得る。したがって、プロセシングユニット３０４は、ネットワークを介して、他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。また、プロセシングユニット３０４は、メモリ３１０との間で通信し、さらに、入力／出力デバイスインタフェース３２０を介して、任意選択のディスプレイ３０２に出力情報を提供することもできる。また、入力／出力デバイスインタフェース３２０は、キーボード、マウス、デジタルペン等の任意選択の入力デバイス３２４から入力を受け入れてもよい。ある実施形態では、連携デバイス１１２Ａは、図３Ａに示すものよりも多い（または、少ない）構成要素を含み得る。例えば、連携デバイス１１２のある実施形態は、ディスプレイ３０２および入力デバイス３２４を省略し得る一方、１つ以上の代替通信チャネルを経由して（例えば、ネットワークインタフェース３０６を介して）入力／出力能力を提供してもよい。加えて、連携デバイス１１２Ａは、同様に、入力および出力インタフェース３２０を完全に省略してもよい。
【００５３】
メモリ３１０は、１つ以上の実施形態を実施するために、プロセシングユニット２０４が実行するコンピュータプログラム命令を含んでもよい。メモリ３１０は、一般に、ＲＡＭ、ＲＯＭ、または他の永続的もしくは非一時的なメモリを含む。メモリ３１０は、プロセシングユニット３０４が、連携デバイス１１２Ａの全体的な管理および動作において使用するためのコンピュータプログラム命令を提供するオペレーティングシステム３１４を記憶してもよい。メモリ３１０は、さらに、本開示の態様を実施するためのコンピュータプログラム命令およびその他の情報を含んでもよい。例えば、一実施形態では、メモリ３１０は、コンテンツにアクセスするためのブラウザアプリケーション３１６を含む。実例として、ブラウザアプリケーション３１６は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を含んでもよく、または単に、データ接続性を提供するソフトウェアアプリケーション（または実行可能命令）であってもよい。
【００５４】
図３Ｂは、本出願による、実例となる連携デバイス１１２Ｂの代替アーキテクチャの一実施形態を示す。図３Ｂに示す連携デバイス１１２Ｂの全体的なアーキテクチャは、本開示の態様を実施するために使用され得るコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。ただし、連携デバイス１１２Ｂは、連携デバイス１１２Ｂのコンピューティング機能および動作を制限する可能性のある構成要素の削減に関連していてもよい。図に示すように、連携デバイス１１２Ｂは、通信バスと通信する、プロセシングユニット３５０およびネットワークインタフェース３５２を含む。図３Ａの連携デバイス１１２Ａとは異なり、連携デバイス１１２Ｂは、コンピュータ可読媒体ドライブ、入力／出力デバイスインタフェース、任意選択のディスプレイ、または入力デバイスを有していなくてもよい。
【００５５】
ネットワークインタフェース３５２は、図１のネットワーク１０４などの１つ以上のネットワークまたはコンピューティングシステムへの接続を提供し得る。したがって、プロセシングユニット３５０は、ネットワークを介して、他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。メモリ３５４は、１つ以上の実施形態を実施するために、プロセシングユニット３５０が実行するコンピュータプログラム命令を含んでもよい。メモリ３５４は、一般に、ＲＡＭ、ＲＯＭ、または他の永続的もしくは非一時的なメモリを含む。この実施形態では、メモリ３５４は、プロセシングユニット３５０が、連携デバイス１１２Ｂの全体的な管理および動作において使用するためのコンピュータプログラム命令を提供する完全なオペレーティングシステムを必ずしも記憶しなくてよい。代わりに、一実施形態では、メモリ３５４は、命令にアクセスし、命令を受信し、命令を処理するためのインタフェースソフトウェア構成要素３５６を含む。
【００５６】
図４は、本出願による、実例となるクライアントデバイス１０２のアーキテクチャの一実施形態を示す。図４に示すクライアントデバイス１０２の全体的なアーキテクチャは、本開示の態様を実施するために使用され得るコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。図に示すように、クライアントデバイス１０２は、プロセシングユニット４０４、ネットワークインタフェース４０６、コンピュータ可読媒体ドライブ４０７、入力／出力デバイスインタフェース４２０、任意選択のディスプレイ４０２、および入力デバイス４２４を含み、これらの全ては、通信バスによって互いに通信し得る。
【００５７】
ネットワークインタフェース４０６は、図１のネットワーク１０４などの１つ以上のネットワークまたはコンピューティングシステムへの接続を提供し得る。したがって、プロセシングユニット４０４は、ネットワークを介して、他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。また、プロセシングユニット４０４は、メモリ４１０との間で通信し、さらに、入力／出力デバイスインタフェース４２０を介して、任意選択のディスプレイ４０２に出力情報を提供することもできる。また、入力／出力デバイスインタフェース４２０は、キーボード、マウス、デジタルペン等の任意選択の入力デバイス４２４から入力を受け入れてもよい。ある実施形態では、クライアントデバイス１０２は、図４に示すものよりも多い（または、少ない）構成要素を含み得る。例えば、連携デバイス１１２のある実施形態は、ディスプレイ４０２および入力デバイス４２４を省略し得る一方、１つ以上の代替通信チャネルを経由して（例えば、ネットワークインタフェース４０６を介して）入力／出力能力を提供してもよい。加えて、クライアントデバイス１０２は、同様に、入力および出力インタフェース４２０を完全に省略してもよい。
【００５８】
メモリ４１０は、１つ以上の実施形態を実施するために、プロセシングユニット２０４が実行するコンピュータプログラム命令を含んでもよい。メモリ４１０は、一般に、ＲＡＭ、ＲＯＭ、または他の永続的もしくは非一時的なメモリを含む。メモリ４１０は、プロセシングユニット４０４が、クライアントデバイス１０２の全体的な管理および動作において使用するためのコンピュータプログラム命令を提供するオペレーティングシステム４１４を記憶してもよい。メモリ４１０は、さらに、本開示の態様を実施するためのコンピュータプログラム命令およびその他の情報を含んでもよい。例えば、一実施形態では、メモリ４１０は、コンテンツにアクセスするためのブラウザアプリケーション４１６を含む。実例として、ブラウザアプリケーション４１６は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を含んでもよく、または単に、データ接続性を提供するソフトウェアアプリケーション（または実行可能命令）であってもよい。本出願の目的のために、クライアント１０２は、グループベースのオンデマンドコード、またはグループベースのオンデマンドコードの選択基準の構成を容易にすることができる。
【００５９】
図５Ａ〜図５Ｂを次に参照して、グループベースのオンデマンドコードまたはグループベースのオンデマンドタスクを利用してタスク実行要求を処理するためのコンテンツ管理システム１１０の構成要素間の実例となるインタラクションを説明する。より具体的には、図５Ａ〜図５Ｂは、連携デバイス１１２、コーディネータ１１４、クライアントデバイス１０２、およびサービスプロバイダ環境１２０の間のインタラクションに関して記載される。前に述べたように、コーディネータ１１４は、一実施形態では、認可情報および認証情報の受信および維持と、連携デバイス１１２からの認証要求および認可要求の処理とに関連するタスクを実行して、処理結果を生成するように構成することができる。ただし、インタラクションの参照は、たとえ例証目的で使用されたとしても、いずれかの特定のデバイスまたはデバイスの組み合わせに限定されるべきではない。さらに、ある実施形態では、クライアントデバイス１０２またはサービスプロバイダ環境１２０のうちの１つ以上が省略され得る。
【００６０】
図５Ａを参照して、コーディネータ１１４の初期構成について説明する。実例として、サービスプロバイダ環境１２０またはクライアントデバイスは、グループベースのオンデマンドコードの構成および連携を容易にすることができる。実例として、コーディネータ１１４の作業構成要素は、グループベースのオンデマンドコードのセットを構成する。（１）で、コーディネータ１１４は、１つ以上のグループベースのオンデマンドコードの構成を受け取る。一態様では、構成は、システムレベルのタスクなど、グループベースのオンデマンドコードと見なされる特定のタスクの識別を含み得る。別の態様では、タスクの構成は、どのタスク要求がグループベースのオンデマンドコードに対応するかを連携デバイスが判定できるようにするための一致基準である。他の態様では、連携デバイスが、グループベースのオンデマンドコードとなり得るタスクを評価すること、またはタスクを動的に処理してタスクがグループベースのタスクに対応するかどうかを判定することを可能にするために、構成に他の検索基準または処理命令が含められ得る。
【００６１】
（２）では、コーディネータ１１４が構成情報を処理する。一態様では、コーディネータ１１４は、様々な構成情報および基準の解析および保存を行い得る。別の態様では、コーディネータ１１４は、グループベースのオンデマンドコードを形成するタスクまたはオンデマンドコードの要求および受信を行い得る。（３）で、コーディネータ１１４は、グループベースのオンデマンドコードの実行を開始する。上記で論じたように、グループベースのオンデマンドの実行は、グループベースのオンデマンドコードの新たな実装を登録するためのマネージャ構成要素の開始と、グループベースのオンデマンドコードの各反復に関する状態情報を保持するためのマネージャ構成要素の開始とを含む。より具体的には、マネージャ構成要素は、グループベースのタスクの実行の反復ごとに、グループベースのタスクの実行によって要求される、またはグループベースのタスクの実行によって生成される状態情報を含む作業ノードまたはワーカマネージャのインスタンスを維持することができる。作業ノードまたはワーカマネージャにより、コーディネータ１１４のマネージャ構成要素は、１つ以上の連携デバイス１１２からの要求に基づいて、グループベースのタスクの複数の実行を管理することが可能になる。さらに、ある実施形態では、マネージャ構成要素は、グループベースのオンデマンドコードの複数の実行を管理し、グループベースのオンデマンドコードの１つの実行が他の実行に影響を与える可能性がある場合に変更を加えることもできる。例えば、グループベースのオンデマンドコードのインスタンスの実行が進行しないか、エラーが発生した場合、マネージャ構成要素はタスクを終了して、グループベースのオンデマンドコードの他の実行に影響を与えないようにすることができる。構成後、連携デバイスは実行を開始する準備ができている。
【００６２】
図５Ｂを参照して、タスクの処理について説明する。（１）で、１つ以上の連携デバイス１１２は、要求を送信してコーディネータ１１４で実行させる。実例として、連携デバイス１１２は、通信プロトコルを利用して、要求をコーディネータ１１４に送信する。例えば、連携デバイスは、ＭＱＴＴプロトコルを利用して要求を識別し、提供されたログイン、パスワード、生体認証情報など、要求を評価するために利用できる情報を提供してもよい。連携デバイス１１２とコーディネータ１１４との間のインタラクションは、いくつかの通信を必然的に伴い得る。要求の種類に応じて、要求に含まれる情報は、識別子、以前に発行されたトークン、セキュリティ情報などを含み得る。
【００６３】
（２）では、コーディネータ１１４は、タスクの実行要求がグループベースのタスクに該当するかどうかを判定する。該当するのであれば、コーディネータは、要求をグループベースのオンデマンドコードに関連付けることができる。一実施形態では、コーディネータ１１４は、要求またはタスク識別子に含まれる様々な識別子を探すことができる。別の実施形態では、コーディネータ１１４は、基準を適用するなどして要求を処理し、要求がグループベースのオンデマンドコードに対応するかどうかを判定できる。
【００６４】
（３）で、コーディネータは、要求がグループベースのオンデマンドコードに該当すると判定した場合、コーディネータ１１４はグループベースのオンデマンドコードの実行の反復を開始する。上記で論じたように、作業マネージャは、グループベースのオンデマンドコードの複数実行のステータスまたは状態を追跡する作業キューを生成することができる。タスク実行の各インスタンスは、要求で提供された入力を管理し、状態を保持し、出力を生成する別個のワーカタスクまたは構成要素として表現され得る。さらに、ある実施形態では、グループベースのオンデマンドコードのハンドラは、それぞれの要求されたタスクのローカルハンドラとインタラクトし、グループベースのオンデマンドコードの実行を処理し、処理結果を個々のハンドラに提供できるマスターハンドラとして機能する。上記で論じたように、グループベースのオンデマンドコードを利用することにより、コーディネータ１１４は、コーディネータ１１４のメモリリソースが制約され、または制約があるように動作している状況で、連携デバイス１１２によってサブミットされたタスクの処理を改善することができる。あるいは、コーディネータ１１４は、グループベースのオンデマンドコードを複数回実行して状態を追跡することにより、実行のために処理できるタスクの数を増やすこともできる。
【００６５】
（４）で、コーディネータ１１４は処理結果を生成し、処理結果を要求中のクライアントデバイス１０２に送信する。
【００６６】
図６を次に、参照して、実行のためにタスクを処理するためのルーチン６００について説明する。ルーチン６００は、コーディネータ１１４に関しての実例として説明する。前に述べたように、コーディネータ１１４は、一実施形態では、１つ以上のグループベースのオンデマンドコードに関連するタスクを実行するように構成され得る。ただし、インタラクションの参照は、たとえ例証目的で使用されたとしても、いずれかの特定のデバイスまたはデバイスの組み合わせに限定されるべきではない。
【００６７】
ブロック６０２で、コーディネータ１１４は、１つ以上のグループベースのオンデマンドコードの構成を受信する。一態様では、構成は、システムレベルのタスクなど、グループベースのオンデマンドコードと見なされる特定のタスクの識別を含み得る。グループベースのオンデマンドコードの識別には、実行されるグループベースのタスクの受信を含めることができる。別の実施形態では、構成には、事前に保存されたタスク情報のライブラリ、１つ以上の連携デバイス、またはサービスプロバイダネットワーク１２０など、グループベースのタスクの場所またはソースを識別するために使用できる情報を含めることができる。別の態様では、タスクの構成は、どのタスク要求がグループベースのオンデマンドコードに対応するかを連携デバイスが判定できるようにするための一致基準である。この一致基準としては、タスク実行要求の送信に利用される識別子、タスクの内容の識別子（例えば、チェックサムまたはハッシュ）、グループベースのタスクの作成者または配布者などが含まれ得る。他の態様では、連携デバイスが、グループベースのオンデマンドコードとなり得るタスクを評価すること、またはタスクを動的に処理してタスクがグループベースのタスクに対応するかどうかを判定することを可能にするために、構成に他の検索基準または処理命令が含められ得る。
【００６８】
ブロック６０４で、連携デバイスは、構成情報を処理して、１つ以上のグループベースのタスクを構成してインスタンス化する。一態様では、コーディネータデバイス１１４は、様々な構成情報および基準の解析および保存を行い得る。別の態様では、コーディネータデバイス１１４は、グループベースのオンデマンドコードを形成するタスクまたはオンデマンドコードの要求および受信を行い得る。さらに、コーディネータ１１４は、グループベースのオンデマンドコードの実行を開始する。上記で論じたように、グループベースのオンデマンドの実行は、グループベースのオンデマンドコードの新たな実装を登録するためのマネージャ構成要素の開始と、グループベースのオンデマンドコードの各反復に関する状態情報を保持するためのマネージャ構成要素の開始とを含む。より具体的には、マネージャ構成要素は、グループベースのタスクの実行の反復ごとに、グループベースのタスクの実行によって要求される、またはグループベースのタスクの実行によって生成される状態情報を含む作業ノードまたはワーカマネージャのインスタンスを維持することができる。作業ノードまたはワーカマネージャにより、コーディネータ１１４のマネージャ構成要素は、１つ以上の連携デバイス１１２からの要求に基づいて、グループベースのタスクの複数の実行を管理することが可能になる。下記のように、ある実施形態では、マネージャ構成要素は、グループベースのオンデマンドコードのそのような複数の実行を管理し、グループベースのオンデマンドコードの１つの実行が他の実行に影響を与える可能性がある場合に変更を加えることもできる。例えば、グループベースのオンデマンドコードのインスタンスの実行が進行しないか、エラーが発生した場合、マネージャ構成要素はタスクを終了して、グループベースのオンデマンドコードの他の実行に影響を与えないようにすることができる。別の例では、マネージャ構成要素は、入力されたパラメータの変更、出力の処理、または別のグループベースのタスクの置き換えなど、タスクの変更をもたらすことができる。構成後、連携デバイスは、グループベースのタスクの実行を開始する準備ができている。
【００６９】
ブロック６０６で、コーディネータ１１４は、コーディネータ１１４での実行の要求を受信する。実例として、連携デバイス１１２は、通信プロトコルを利用して、要求をコーディネータ１１４に送信する。例えば、連携デバイスは、ＭＱＴＴプロトコルを利用して要求を識別し、提供されたログイン、パスワード、生体認証情報など、要求を評価するために利用できる情報を提供してもよい。連携デバイス１１２とコーディネータ１１４との間のインタラクションは、いくつかの通信を必然的に伴い得る。要求の種類に応じて、要求に含まれる情報は、識別子、以前に発行されたトークン、セキュリティ情報などを含み得る。
【００７０】
決定ブロック６０８で、コーディネータ１１４は、タスクの実行の要求がグループベースのタスクに該当するかどうかを判定する。一実施形態では、コーディネータ１１４は、要求またはタスク識別子に含まれる様々な識別子を探すことができる。別の実施形態では、コーディネータ１１４は、基準を適用するなどして要求を処理し、要求がグループベースのオンデマンドコードに対応するかどうかを判定できる。ブロック６１０で、コーディネータは、要求がグループベースのオンデマンドコードに該当すると判定した場合、コーディネータ１１４はグループベースのオンデマンドコードの実行の反復を開始する。上記で論じたように、作業マネージャは、グループベースのオンデマンドコードの複数実行のステータスまたは状態を追跡する作業キューを生成することができる。タスク実行の各インスタンスは、要求で提供された入力を管理し、状態を保持し、出力を生成する別個のワーカタスクまたは構成要素として表現され得る。さらに、ある実施形態では、グループベースのオンデマンドコードのハンドラは、それぞれの要求されたタスクのローカルハンドラとインタラクトし、グループベースのオンデマンドコードの実行を処理し、処理結果を個々のハンドラに提供できるマスターハンドラとして機能する。ただし、グループベースのオンデマンドコードを複数回実行することにより、コーディネータ１１４が全てのタスクを別々に実行した場合に比べて、連携によって実行される複数のタスクの実行のメモリリソースが少なくなる。ブロック６１２で、コーディネータ１１４は処理結果を生成し、処理結果を要求中のクライアントデバイス１０２に送信する。
【００７１】
あるいは、決定ブロック６０８で、コーディネータが、要求がグループベースのオンデマンドコードに該当していないと判定した場合、コーディネータ１１４は、ブロック６１４で、個々のタスクの実行の反復を開始する。ブロック６１６で、コーディネータ１１４は処理結果を生成し、処理結果を要求中のクライアントデバイス１０２に送信する。
【００７２】
ブロック６１８で、コーディネータ１１４は処理結果を送信し、ルーチン６００はブロック６２０で終了する。
【００７３】
上述の方法およびプロセスの全ては、１つ以上のコンピュータまたはプロセッサで実施されてよく、１つ以上のコンピュータまたはプロセッサによって実行されるソフトウェアコードモジュールを介して完全に自動化されてよい。コードモジュールは、任意の種類の非一過性のコンピュータ可読媒体または他のコンピュータ記憶デバイス内に記憶され得る。本方法の一部または全ては、代わりに専用コンピュータハードウェアで実施され得る。
【００７４】
特に明記しない限り、とりわけ、「できる（ｃａｎ）」、「できるであろう（ｃｏｕｌｄ）」、「可能性がある（ｍｉｇｈｔ）」、または「してよい（ｍａｙ）」等の条件的言語は、他の実施形態が特定の特徴、要素および／またはステップを含まない一方で、特定の実施形態が特定の特徴、要素および／またはステップを含むことを提示するために一般的に使用される文脈内で別様に理解される。したがって、そのような条件的言語は、概して、特徴、要素、および／またはステップが、１つ以上の実施形態に任意の方法で要求されるか、または１つ以上の実施形態が、ユーザ入力もしくはプロンプトを用いて、もしくは用いずに、これらの特徴、要素、および／またはステップが含まれるか、もしくは任意の特定の実施形態で行われるべきであるかを決定するための論理を必ず含むことを含意することは意図していない。
【００７５】
特に明記しない限り、句「Ｘ、Ｙ、またはＺのうちの少なくとも１つ」などの選言的言語は、項目、用語などが、Ｘ、Ｙ、もしくはＺのいずれか、またはそれらの任意の組み合わせ（例えば、Ｘ、Ｙ、および／またはＺ）であり得ることを提示するために一般に使用される文脈の中で別様に理解される。したがって、そのような選言的言語は、ある実施形態がＸの少なくとも１つ、Ｙの少なくとも１つ、またはＺの少なくとも１つがそれぞれ存在することを必要とすることを含意することを一般的に意図しておらず、意味するべきではない。
【００７６】
特に明記しない限り、『ａ』または『ａｎ』等の冠詞は、概して、１つ以上の記載された項目を含むと解釈すべきである。したがって、「〜するように構成された装置」等の語句は、１つ以上の列挙された装置を含むことを意図している。そのような１つまたは複数の列挙された装置は、記載された列挙を実行するように集合的に構成されることもできる。例えば、「列挙Ａ、ＢおよびＣを実行するように構成されたプロセッサ」は、列挙ＢおよびＣを実行するように構成された第２のプロセッサと連動して機能し、列挙Ａを実行するように構成された第１のプロセッサを含む場合がある。
【００７７】
本明細書に説明する、および／または添付の図面に図示するフロー図のいずれのルーチンの記述、要素、またはブロックも、ルーチンにおける特定の論理的機能または要素を実装するための１つまたは複数の実行可能な命令を含む、モジュール、セグメント、またはコードの部分を潜在的に表すものとして理解されるべきである。代替の実施態様は、本明細書に説明される実施形態の範囲内に含まれ、その中で要素または機能は、当業者によって理解されるであろうように、関係する機能性に応じて、実質的に同時または逆の順序を含む、示されるものまたは説明されるものとは異なる順序で削除または実行され得る。
【００７８】
多くの変形形態および変更形態が上記の実施形態に対して行われ得、それらの要素が他の許容される実施例中にあるものとして理解されることが強調されるべきである。全てのこのような変更形態および変形形態は、本明細書において、本開示の範囲内に含まれ、以下の特許請求の範囲によって保護されることが意図される。
【００７９】
本開示の実施形態の例は、以下の条項を鑑みて説明することができる。
条項１．コンピューティングデバイスへのアクセスを管理するシステムであって、プロセッサおよびメモリを備えた少なくとも１つのコンピューティングデバイスであって、前記コンピューティングデバイスが連携デバイスに相当しており、前記連携デバイスが、オンデマンドコードを実行するための要求をコーディネータサービスに送信する、前記コンピューティングデバイスと、プロセッサおよびメモリを備えた少なくとも１つのコンピューティングデバイスに実装されたコーディネータサービスであって、前記サービスは、グループベースのオンデマンドコードのセットの構成情報を受信すること、前記構成情報に従って、前記グループベースのオンデマンドコードのうちの少なくとも１つをインスタンス化すること、前記連携デバイスから、前記オンデマンドコードを実行する前記要求を受信すること、前記オンデマンドコードを実行するための前記要求を、前記グループベースのオンデマンドコードの少なくとも１つに関連付けること、前記インスタンス化された前記グループベースのオンデマンドコードを前記実行すること、および前記インスタンス化された前記グループベースのオンデマンドコードに対応する処理結果を生成することを行うように構成されている前記コーディネータサービスとを備える、前記システム。
【００８０】
条項２．前記コーディネータサービスは、組織的基準に基づいて、前記要求を前記グループベースのオンデマンドコードに関連付ける、条項１に記載のシステム。
【００８１】
条項３．前記コーディネータサービスは、さらに、前記インスタンス化された前記グループベースのオンデマンドコードの前記実行のための状態情報に関する作業キューを維持するように構成されている、条項１または条項２のいずれかに記載のシステム。
【００８２】
条項４．前記グループベースのオンデマンドコードは、システムレベルのタスクに対応する、条項１〜３のいずれかに記載のシステム。
【００８３】
条項５．連携環境でのオンデマンドコードの実行を管理する方法であって、１つ以上の連携デバイスから、オンデマンドコードを実行するための要求を受信すること、前記オンデマンドコードを実行するための個々の要求を、グループベースのオンデマンドコードに関連付けること、前記インスタンス化された前記グループベースのオンデマンドコードを前記実行すること、および前記インスタンス化された前記グループベースのオンデマンドコードに対応する処理結果を生成することを含む、前記方法。
【００８４】
条項６．前記グループベースのオンデマンドコードの構成情報を受信することをさらに含む、条項５に記載の方法。
【００８５】
条項７．前記構成情報に従って、前記グループベースのオンデマンドコードのうちの少なくとも１つのオンデマンドコードの前記インスタンス化を行うことをさらに含む、条項６に記載の方法。
【００８６】
条項８．前記オンデマンドコードを実行するための前記個々の要求を、グループベースのオンデマンドコードに関連付けることが、組織的基準に基づいて、前記要求を前記グループベースのオンデマンドコードに関連付けることを含む、条項５〜７のいずれかに記載の方法。
【００８７】
条項９．前記グループベースのオンデマンドコードの前記実行を管理することをさらに含む、条項５〜８のいずれかに記載の方法。
【００８８】
条項１０．前記グループベースのオンデマンドコードの前記実行を管理することが、前記インスタンス化された前記グループベースのオンデマンドコードの前記実行のための状態情報に関する作業キューを維持することを含む、条項９に記載の方法。
【００８９】
条項１１．前記グループベースのオンデマンドコードの前記実行を管理することが、前記グループベースのオンデマンドコードの少なくとも１つの実行を変更することを含む、条項９または条項１０のいずれかに記載の方法。
【００９０】
条項１２．１つ以上の連携デバイスから、オンデマンドコードを実行するための第２の要求を受信すること、グループベースのオンデマンドコードに関連付けられていないオンデマンドコードを前記実行すること、およびグループベースのオンデマンドコードに関連付けられていない前記オンデマンドコードの前記実行に対応する処理結果を生成することをさらに含む、条項５〜１１のいずれかに記載の方法。
【００９１】
条項１３．連携環境でのタスクの実行を管理する方法であって、オンデマンドコードを実行するための個々の要求を、グループベースのオンデマンドコードに関連付けること、前記インスタンス化された前記グループベースのオンデマンドコードを前記実行すること、および前記インスタンス化された前記グループベースのオンデマンドコードに対応する処理結果を生成することを含む、前記方法。
【００９２】
条項１４．グループベースのオンデマンドコードのセットの構成情報を受信することをさらに含む、条項１３に記載の方法。
【００９３】
条項１５．前記構成情報に従って、前記グループベースのオンデマンドコードのうちの少なくとも１つのオンデマンドコードの前記インスタンス化を行うことをさらに含む、条項１４に記載の方法。
【００９４】
条項１６．前記オンデマンドコードを実行するための前記個々の要求を、グループベースのオンデマンドコードに関連付けることが、組織的基準に基づいて、前記要求を前記グループベースのオンデマンドコードに関連付けることを含む、条項１３〜１５のいずれかに記載の方法。
【００９５】
条項１７．前記インスタンス化された前記グループベースのオンデマンドコードの前記実行のための状態情報に関する作業キューを維持することにより、前記グループベースのオンデマンドコードの前記実行を管理することをさらに含み、前記要求された認可情報および認証情報が処理情報を含む、条項１３〜１６のいずれかに記載の方法。
【００９６】
条項１８．前記グループベースのオンデマンドコードの少なくとも１つの実行を終了することにより、前記グループベースのオンデマンドコードの前記実行を管理することをさらに含む、条項１３〜１７のいずれかに記載の方法。
【００９７】
条項１９．１つ以上の連携デバイスから、オンデマンドコードを実行するための第２の要求を受信すること、グループベースのオンデマンドコードに関連付けられていないオンデマンドコードを前記実行すること、およびグループベースのオンデマンドコードに関連付けられていない前記オンデマンドコードの前記実行に対応する処理結果を生成することをさらに含む、条項１３〜１８のいずれかに記載の方法。
【００９８】
条項２０．前記グループベースのオンデマンドコードは、システムレベルのタスクに対応する、条項１３〜１９のいずれかに記載の方法。
【図１】
2021518014.tif 000003
【図２】
2021518014.tif 000004
【図３Ａ】
2021518014.tif 000005
【図３Ｂ】
2021518014.tif 000006
【図４】
2021518014.tif 000007
【図５Ａ】
2021518014.tif 000008
【図５Ｂ】
2021518014.tif 000009
【図６】
2021518014.tif 000010
【国際調査報告】
2021518014.tif 000011
2021518014.tif 000012
2021518014.tif 000013