一般的に説明すると、本出願は、通信ネットワークにおけるコンピューティングデバイスの管理に該当する。より具体的には、本出願の態様は、連携環境でオンデマンドコードを実行するために利用されるメモリリソースの管理に該当する。本開示の態様によれば、連携環境は、連携環境内の連携デバイスの動作および機能性を制御するために連携環境内に存在するコーディネータを含む。ある例では、コーディネータおよび連携デバイスは、別途の主目的を有する家庭用機器など、少なくとも1つの代替的な主要機能を有する組み込みデバイスまたはシンデバイスに相当するものであってもよい。そのようなデバイスは、ある場合に「モノのインターネット」デバイス、すなわち「IoT」デバイスと称され得る。連携デバイスは、限られたローカルユーザインタフェース能力を含んでもよく、この結果として、リモート管理から恩恵を受けてもよい。さらに、コーディネータは、サーバ主体のコンピューティングデバイスと比較して、より限られた処理、メモリ、または通信などのコンピューティングリソースに対応付けられ得るタブレットコンピューティングデバイスなどのデバイスを含んでもよい。
本明細書に開示されるコーディネータは、コーディネータおよび連携デバイスを含む環境(ローカルエリアネットワークすなわち「LAN」環境など)の内部で、局部的に、連携デバイスのそのようなリモート管理を可能にする。ある実施形態では下記のように、このような方法でコーディネータを使用することにより、ローカル環境の外部の通信を必要とせずに、連携デバイスを管理することができ、それによってプライバシリスクを低減し、外部またはパブリックの通信ネットワークを使用するよりも通信の速度を増加させることができる。さらに、本明細書に開示されるコーディネータは、コードの移植可能なセグメントの迅速な実行により、コーディネータに機能が実装されることを可能にするので、ローカライズされたオンデマンドコード実行システムとして機能し得る。このようなコードの移植可能なセグメントを、本明細書では「タスク」と呼ぶことがある。ある場合に、タスクは、デバイスの状態を変更することなどにより、連携デバイスの機能性を連携させるために利用され得る。例えば、連携デバイスがネットワーク対応型の照明である場合は、タスクが、現在時刻、ユーザ入力、または別の連携デバイスの状態等のコーディネータへの入力に従って、照明の状態を(例えば、「オン」または「オフ」に)変えるように機能してもよい。コーディネータは、さらに、いくつかの異なるプロトコルに従って、連携デバイスおよびタスクの通信を可能にし、ある例では、そのようなプロトコルの間の変換機能を提供し得る。
またさらに、コーディネータは、場合によっては、タスクの実行先を管理してもよく、その結果、タスクは、候補デバイスの能力、およびタスク実行の要件に応じて、コーディネータ上で、連携デバイス上で、またはリモート環境(例えば、リモートネットワークコンピューティング環境)のデバイス上で実行されてもよい。これらのタスクは、ある例では、ユーザ定義であってもよく、ユーザが、タスクに対応するユーザサブミットコードに従って、コーディネータまたは連携デバイスに様々な機能性を実装できるようになる。したがって、コーディネータは、連携デバイスの迅速に再構成可能なローカライズされた管理を提供することができる。
コーディネータは、集中型の認証サービスおよび認可サービスとは異なるネットワークベースのサービスであって、サービスのエッジノード上の1つ以上の構成要素でインスタンス化されるネットワークベースのサービスに関連付けられ得る。実例として、サービスプロバイダ環境は、コーディネータのプロバイダによって運用されてもよく、コーディネータのための連携環境の場所、環境内の連携デバイス、コーディネータによって実行可能なタスク、コーディネータが、デバイス間、タスク間、もしくはデバイスとタスクとの間の通信をどのように管理すべきか、コーディネータのためのセキュリティ情報、またはコーディネータのその他のパラメータ(コーディネータで監視すべきメトリック、またはコーディネータで行うべきロギング等)等の、コーディネータの様々な構成パラメータをユーザが指定できるようにしてもよい。コーディネータ自体が、限定的なローカライズされたユーザインタフェースに関連付けられている場合があるので、サービスプロバイダ環境では、ユーザが、クライアントデバイスを介して、コーディネータのための構成をサブミットするとともに、その構成を自動的にコーディネータにプロビジョニングされるようにすることができる。さらに、サービスプロバイダ環境では、単一のクライアントデバイスが、統一インタフェースを介して複数のコーディネータを管理できるようにするとともに、新しい構成をコーディネータにデプロイすることによって、またはコーディネータへの以前の構成のデプロイをロールバックする、もしくは取り消すことによって、コーディネータの構成を迅速に変更できるようにする。オンデマンドコードを実施するためのコーディネータに関するさらなる詳細を、「ON−DEMAND CODE EXECUTION IN A LOCALIZED DEVICE COORDINATOR」と題され、2016年11月28日に提出された同時係属の米国特許出願第15/362,696号に見つけることができる。この米国特許出願の全記載内容は、参照により、本明細書に援用される。
ある例では、サービスプロバイダ環境は、コーディネータの機能と類似または同一の機能を提供してもよい。例えば、コーディネータは、コードの移植可能なセグメントすなわち「タスク」の実行に少なくとも部分的に基づいて機能してもよい。同様に、サーバプロバイダ環境は、同一または類似のタスクを実行するように機能するオンデマンドコード実行環境を含んでもよい。そのようなオンデマンドコード実行環境に関するさらなる詳細を、「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特許に記載されている(例えば、データセンタ内に実装されることがある)オンデマンドコード実行環境よりも限られた計算リソースに関連付けられ得るため、コーディネータは、タスク実行の優先順位付けを支援するスケジューラを実装してもよい。具体的に、スケジューラは、タスクを実行するための呼び出しを受信し、そのような呼び出しを作業項目として作業項目キューに入れる。次に、スケジューラは、スケジューリングアルゴリズムに従って、作業項目キューから呼び出しを選択的に外してもよい。先入れ先出しスケジューリング、締切り順スケジューリング、最小残り時間スケジューリング、固定優先度プリエンプティブスケジューリング、ラウンドロビンスケジューリングなど、任意の数のスケジューリングアルゴリズムがスケジューラによって利用され得る。
実例として、各スケジューリングアルゴリズムは、コーディネータに利用可能な計算リソースの量と、タスク呼び出しを完了するのに必要なリソースの量とに基づいて実装されてもよい(これらの量は、例えば、タスクの作成者またはコーディネータの管理者によって設定され得、またはタスクの静的もしくは動的な分析に基づいて推定され得る)。ある例では、スケジューリングアルゴリズムは、タスクの作成者、コーディネータの管理者、呼び出しエンティティなどによってタスクに割り振られた優先度に少なくとも部分的に基づいていてもよい。スケジューラは、スケジューリングアルゴリズムに従って作業項目のキューを処理し、タスク呼び出しがキューからの取り出しのために選択されると、(例えば、その呼び出しのパラメータに従って)呼び出しに対応するタスクを実行することにより、そのタスク呼び出しを完了させてもよい。さらに説明するように、本出願の態様によれば、コーディネータは、1つ以上の連携デバイスによって提供される個々のタスクの少なくとも一部を、グループベースのタスクの複数の反復で置き換えることにより、さらなるタスクの実行を容易にすることができる。
タスクの実行を支援するために、コーディネータは、さらに、コーディネータでの計算リソースの使用状況を監視するとともに、タスクが実行される実行環境の生成、破壊、および維持を管理するためのリソースマネージャを含んでもよい。実行環境は、タスク実行に論理的に割り当てられたメモリのいずれかの部分を含むことができる。実例として、実行環境は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「サンドボックス」環境(「chroot jail」またはPython仮想環境「virtualenv」など)に該当するものであってよい。他の例では、実行環境は、仮想マシン環境(例えば、JAVA仮想マシン、別個のオペレーティングシステムを備えた仮想化ハードウェアデバイスなど)に該当するものであってもよい。さらに他の例では、実行環境は、必ずしも仮想化を利用せずに、タスクの実行に割り当てられたメモリ空間であってもよい。実例として、リソースマネージャは、作業項目キューからどのタスク呼び出しを外すかをスケジューラが判定できるようにするために、利用可能なメモリの量、(例えば、中央処理装置、グラフィック処理装置などの)プロセッササイクル、ネットワーク帯域幅、またはその他のコンピューティングリソースなど、コーディネータの現在の計算リソース可用性情報をスケジューラが取得できるようにすることができる。
ある例では、リソースマネージャは、コーディネータで行われている現在のタスク実行のリストなど、他の情報をスケジューラに提供してもよい。リソースマネージャは、さらに、タスク呼び出しを渡すための実行環境を得るために、スケジューラからの要求を受信して処理することがある。実例として、各タスク(個別のタスク、またはグループベースのタスク)が別個の実行環境で実行され、所与のタスクのための実行環境が存在しない場合、リソースマネージャは、所与のタスクの実行のために必要なリソースを(プロセッサ容量およびメモリのような基本的な計算リソースの観点から、さらにはドライバ、ランタイム、ユーティリティ、依存関係など、ソフトウェアリソースの観点から)判定し、そのようなリソースを提供するために実行環境を生成してもよい。その場合、リソースマネージャは、スケジューラが、タスクを実行するための呼び出しを実行環境に渡すことができるように、実行環境についての識別情報をスケジューラに返してもよい。場合によっては、リソースマネージャは、既存の実行環境の再利用を可能にすることもできる。例えば、グループベースのタスクを含む一部のタスクは、実行環境がそのタスクのために事前に生成されるように「固定」されている場合がある。この結果として、リソースマネージャがタスクのための実行環境を生成する要求を受信すると、事前生成された環境についての識別情報が返されて、実行環境を生成するのに必要とされる時間およびコンピューティングリソースを減少させることができる。ある例では、2つの異なるタスクが実行に同一または類似のリソースを必要とする場合など、実行環境がタスク間で再利用されることがある。そのような例では、リソースマネージャは、実行間のセキュリティを保証するために、異なるタスクの実行間の実行環境を「空」にしてもよい。以下でさらに詳細に説明するように、リソースマネージャは、さらに、優先度の低いタスクの実行環境を一時停止して、計算リソースを優先度の高いタスクに解放し、スケジューリングアルゴリズムに従って再開することができるように、実行環境の一時停止および再開を可能にすることができる。
上記で論じたように、本開示の態様によれば、メモリフットプリントを削減したオンデマンドコードを実行するための連携環境が提供される。より具体的には、コーディネータは、連携デバイスから個々のオンデマンドコード実行要求またはタスクを受信する。コーディネータは、オンデマンドコード実行要求を処理して、オンデマンドコード実行の少なくともサブセットを、実行可能コードを共有する1つ以上のグループに関連付けることができる。例えば、連携デバイスは、共通の実行可能コードを有するシステムレベルのタスクに関係したタスクを送信する場合がある。受信した各タスクの実行可能コードを維持し、上記で論じたようにタスクのスケジュールおよび管理を行う代わりに、コーディネータは、タスクのグループ化のための共通実行可能コードに関連付けられたマスタープロセス(またはタスク)を維持してもよい。さらに、コーディネータは、その後、個々のタスクに関する状態情報を維持する個々の作業項目キューを維持することができる。コーディネータは、オンデマンドの実行可能コードを別途ロードして実行することを必要とせずに、個々のタスクの実行を実施することができる。したがって、コーディネータは、要求されたオンデマンドタスクの実行の複数回の反復に対する個々の状態と構成とを維持しながら、オンデマンドタスクの実行に必要なメモリフットプリントを削減することにより、さらに限られたコンピューティングリソースを有するコンピューティングデバイスに実装され得る。
本開示に記載されるいくつかの実施形態の態様は、例示の目的で、認証情報および認可情報の処理と処理結果の生成とに重点を置くことにするが、当業者は、実施例が説明のためのものに過ぎず、必ずしも限定を意図するものではないことを理解するであろう。本開示を考慮して当業者によって理解されるように、本明細書で開示される実施形態は、コンピューティングシステム、特に、外部デバイスによって連携され、管理されることになる、制限されたローカライズされたユーザインタフェースを有するコンピューティングシステムの能力を改善する。
本開示の上に述べた態様と付随する利点の多くとは、添付の図面と併用されると、以下の説明を参照することにより、それらが一層よく理解されるようになるので、さらに容易に認識されるようになる。本出願の様々な実施形態および態様が、図1〜図6に関して説明される。本出願のいかなるものも、実施形態または実施例のいずれかの特定の組み合わせを必要として解釈されるべきではない。さらに、当業者は、本出願の1つ以上の態様または実施形態を容易に組み合わせることができ、本出願の追加の発明的態様をもたらすことができることを理解されよう。
図1は、1つ以上の連携環境110であって、連携環境110内で、コーディネータ114が、(例えば、連携デバイス112の状態の変更を要求するために)連携環境110とインタラクトし得るクライアントデバイス102と同様に、連携デバイス112を制御するように動作し得る1つ以上の連携環境110と、様々な連携環境110内のコーディネータ114との通信またはコーディネータ114の構成を支援し得るサービスプロバイダ環境120とを含む、実例となる動作環境100のブロック図である。
連携環境110、クライアントデバイス、およびサービスプロバイダ環境120は、ネットワーク104を介して通信することができ、このネットワーク104は、任意の有線ネットワーク、無線ネットワーク、またはそれらの組み合わせを含んでもよい。例えば、ネットワーク104は、パーソナルエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、(例えば、ラジオまたはテレビのための)無線放送網、ケーブルネットワーク、衛星ネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであってもよい。さらなる例として、ネットワーク104は、インターネットなど、様々な別個の関係者によって運営されている可能性のある、連結されたネットワークのうちの公にアクセス可能なネットワークであってもよい。ある実施形態では、ネットワーク104は、企業または大学のイントラネット等のプライベートまたはセミプライベートネットワークであり得る。ネットワーク104は、汎欧州デジタル移動電話方式(GSM)ネットワーク、符号分割多重アクセス(CDMA)ネットワーク、ロングタームエボリューション(LTE)ネットワーク等の1つ以上の無線ネットワーク、または他の任意のタイプの無線ネットワークを含み得る。ネットワーク104は、インターネットまたは他の前に述べたタイプのいずれかのネットワークを介して通信するためのプロトコルおよび構成要素を使用することができる。例えば、ネットワーク104によって使用されるプロトコルは、ハイパーテキスト転送プロトコル(HTTP)、HTTPセキュア(HTTPS)、MQTT、制約付きアプリケーションプロトコル(CoAP)等を含み得る。インターネット、または他の上に述べたタイプのいずれかの通信ネットワークを介して通信するためのプロトコルおよび構成要素は当業者にとって周知であり、したがって本明細書では、さらに詳細には記載していない。ネットワーク104の全ての構成要素を図1に示すが、ルータ等の構成要素の1つ以上は、メッセージ処理サービスとして機能してもよい。
各連携環境110は、実行環境110のネットワーク(このネットワークは図1に示していない)を介して通信する、コーディネータ114と任意の数の連携デバイス112とを含んでもよい。連携環境110内のそれらの接続のために、所与の環境110内の連携デバイス112とコーディネータ114とは、通信ネットワークの観点から、互いに「ローカル」であると考えられ得る。例えば、所与の環境110内の連携デバイス112とコーディネータ114とは、LANまたは他の局在化された通信ネットワークを介して接続されてもよい。
各連携デバイス112は、連携デバイス112の機能性を管理するために、コーディネータ114と通信するように構成されたコンピューティングデバイスに相当するものであってよい。ある例では、連携デバイス112は、ロバストな局在化されたユーザインタフェース能力を備えた、ラップトップ、デスクトップ、スタンドアロンメディアプレイヤ等の十分な機能を有するコンピューティングデバイスに相当するものであってよい。他の例では、連携デバイス112は、家庭用の機器またはデバイス(冷蔵庫、洗濯機、湯沸し器、加熱炉、ドアロック、照明バルブ、電気取出口、電気スイッチなど)の内部に組み込まれるデバイス、またはこれらに付属品として取り付けられるデバイスなど、別の主要機能に関連するシンデバイスまたは組み込みデバイスに相当するものであってもよい。このような機器またはデバイスは、ある文脈では、「スマート」デバイス、IoTデバイス、または「コネクテッド」デバイスと呼ばれる。したがって、連携デバイス112は、限られたローカルユーザインタフェースを含み、リモート管理のために構成され得る。ある例では、連携デバイス112は、ステートフルであり、命令に応答して(例えば、「オフ」から「オン」に切り替えるなどによって)それらの状態を変えるように動作してもよい。
以下では(例えば、図2に関して)さらに詳細に説明するように、コーディネータ114は、連携デバイス112に伝送された命令が連携環境110の外部に伝わることを必要とせずに(したがって、そのような命令のセキュリティを高め、それらの伝送速度が増加する)、連携デバイス112の動作の調整、管理、または制御を行う命令を実行するコンピューティングデバイスに相当するものであってもよい。連携デバイスと同様に、ある場合に、コーディネータ114は、ロバストな局在化されたユーザインタフェース能力を備えた、ラップトップ、デスクトップ、サーバコンピューティングデバイス、タブレットなどのコンピューティングデバイスに相当するものであってもよい。他の例では、連携デバイス112は、家庭用の機器またはデバイス(冷蔵庫、洗濯機、湯沸し器、加熱炉、ドアロック、照明バルブ、電気取出口、電気スイッチなど)の内部に組み込まれるデバイス、またはこれらに付属品として取り付けられるデバイスなど、別の主要機能に関連するシンデバイスまたは組み込みデバイスに相当するものであってもよい。上記で論じたように、少なくとも一部の実施形態では、コーディネータ114は、リソースに制約があってもよく、またはリソースに制約があるように動作してもよい。実例として、コーディネータが、リソースに制約があり、または別の方法でリソースに制約があるように動作している場合に、コーディネータ114は、タスクのグループ化のための共通実行可能コードに関連付けられたマスタープロセスを維持して、連携デバイス112によるタスクの実行を容易にすることができる。
具体的には、コーディネータ114は、連携デバイス112、クライアントデバイス102、およびサービスプロバイダネットワーク120のデバイスの任意の組み合わせの間の通信を管理するように集合的に構成されているプロセッサおよびメモリを含み得る。コーディネータは、さらに、サービスプロバイダ環境120のオンデマンドコード実行環境120と同じようにして、タスクの実行を可能にするように構成され得る。これらのタスクは、連携デバイス112、クライアントデバイス102、およびサービスプロバイダネットワーク120のデバイスとの通信を含む、様々なユーザ定義の機能、または非ユーザ定義の機能を実施することができる。コーディネータ114がオンデマンド実行環境でタスクの実行をスケジュールする方法の説明的な例は、参照により本明細書に組み込まれている「696」出願に開示されている。したがって、コーディネータ114は、連携デバイス112の手動、自動、または半自動の制御を可能にするように構成され得る。例えば、コーディネータ114は、クライアントデバイス102が、連携デバイス112の状態を変更するための要求を送信できるようにし、そのような状態の変化を生じさせることができる。さらなる例として、コーディネータ114は、連携デバイス112の状態を変更する必要がある基準をユーザが指定し、その後、その基準が満たされたときに自動的に動作して、連携デバイス112の状態を変更できるようにしてもよい。以下に説明するように、コーディネータ114の多くの機能はタスクを介して設定することができ、ユーザが望むようにこれらの機能を迅速に変更することを可能にする。
クライアントデバイス102は、ユーザが連携環境110、サービスプロバイダ環境120、またはその両方と通信することを可能にする様々なコンピューティングデバイスを含んでもよい。一般に、クライアントデバイス102は、デスクトップコンピュータ、ラップトップコンピュータまたはタブレットコンピュータ、パーソナルコンピュータ、ウェアラブルコンピュータ、サーバ、携帯情報端末(PDA)、ハイブリッドPDA/携帯電話、携帯電話、電子ブックリーダ、セットトップボックス、ボイスコマンドデバイス、カメラ、デジタルメディアプレイヤ等の任意のコンピューティングデバイスであり得る。サービスプロバイダ環境120は、コーディネータ114用の構成をサブミットし、その構成のデプロイを制御すること、コーディネータ114で、またはサービスプロバイダ環境120のオンデマンドコード実行環境150で実行すべきタスクに対応するコードをサブミットすること、コーディネータ114に関連しているロギング情報または監視情報を表示することなどのために、クライアントデバイス102に、サービスプロバイダ環境120とインタラクトするための1つ以上のユーザインタフェース、コマンドラインインタフェース(CLI)、アプリケーションプログラミングインタフェース(API)、および/またはその他のプログラムインタフェースを提供し得る。同様に、コーディネータ114は、連携デバイス112の状態の読み出し、連携デバイス112の状態における変更の要求、コーディネータ114によるタスクの実行の要求などのために、クライアントデバイス102に、コーディネータ114とインタラクトするための1つ以上のユーザインタフェース、コマンドラインインタフェース(CLI)、アプリケーションプログラミングインタフェース(API)、および/またはその他のプログラムインタフェースを提供し得る。本明細書では、1つ以上の実施形態が、ユーザインタフェースを使用するものとして記載されることがあるが、そのような実施形態は、追加または代替として、任意のCLI、API、またはその他のプログラムインタフェースを使用できることが理解されよう。
サービスプロバイダ環境120は、コーディネータ114の構成、コーディネータ114の管理、およびコーディネータ114との通信を可能にするいくつかの要素を含み得る。具体的には、サービスプロバイダ環境120は、サービスプロバイダ環境120へのコーディネータ114の登録、およびそのようなコーディネータ114の構成を可能にする管理およびデプロイサービス130と、タスクのオンデマンドの動的実行、ならびにコーディネータ114でのタスクのデプロイおよびプロビジョニングを提供するオンデマンドコード実行環境140とを含む。サービスプロバイダ環境120は、図1に示していない追加の構成要素またはサービスを含むこともできる。
図1に示すように、管理およびデプロイサービス130は、管理およびデプロイサービス130へのコーディネータ114の登録、コーディネータ114用の構成の生成、ならびにコーディネータ114への構成データの送信を可能にするために集合的に動作し得る、クライアントおよびデータインタフェース132と構成データストア134とを含む。実例として、クライアントおよびデータインタフェース132は、1つ以上のユーザインタフェース(例えば、API、CLI、GUIなど)であって、それによってユーザが、クライアントデバイス102を介して、コーディネータ114の構成を生成し、またはサブミットして、構成データストア134に格納することができる、1つ以上のユーザインタフェースを提供し得る。クライアントおよびデータインタフェース132は、さらに、1つ以上のインタフェースであって、それによってコーディネータ114が、構成を取得することができ、その結果、コーディネータ114が、取得された構成に従って再構成される、1つ以上のインタフェースを提供してもよい。構成データストア134は、ハードドライブ(HDD)、ソリッドステートドライブ(SDD)、ネットワーク接続ストレージ(NAS)、テープドライブ、またはそれらの任意の組み合わせなど、いずれかの永続的または実質的に永続的なデータストアに相当するものであってもよい。
オンデマンドコード実行環境140は、タスク(例えば、移植可能なコードセグメント)のオンデマンド実行を提供するいくつかのデバイスを含むことができる。具体的には、オンデマンドコード実行環境140は、フロントエンド142を含んでもよく、フロントエンド142によりユーザは、クライアントデバイス102を介して、オンデマンドコード実行環境140にタスクをサブミットし、オンデマンドコード実行環境140上でタスクの実行を要求することができる。このようなタスクは、例えば、タスクデータストア154に記憶されてもよく、このタスクデータストア154は、ハードドライブ(HDD)、ソリッドステートドライブ(SDD)、ネットワーク接続ストレージ(NAS)、テープドライブ、またはそれらの任意の組み合わせなど、いずれかの永続的または実質的に永続的なデータストアに相当するものであってもよい。図1には示していないが、オンデマンドコード実行システム140は、いくつかの実行環境(例えば、オンデマンドコード実行環境140の物理ホストデバイスで実行されるコンテナまたは仮想マシン)、そのような実行環境を管理するワーカマネージャ、およびワーカマネージャが実行環境を迅速に(例えば、10ミリ秒未満で)利用できるように支援するためのウォーミングプールマネージャなど、タスクの実行を可能にする様々な追加構成要素を含んでもよい。オンデマンドコード実行環境に関するさらなる詳細を、上記の参照によって組み込まれる「556特許」の中で見つけることができる。
上記のとおり、タスクは、オンデマンドコード実行環境140とコーディネータ114との両方で利用され得る。上記のとおり、タスクは、(例えば、特定の機能を実現するための)ユーザコードの個々の集合に対応する。本明細書で使用されるユーザコードへの言及は、特定のプログラム言語で記述された任意のプログラムコード(例えば、プログラム、ルーチン、サブルーチン、スレッド等)を指し得る。本開示では、用語「コード」、「ユーザコード」、および「プログラムコード」は、互換的に使用されてもよい。このようなユーザコードは、例えば、ユーザによって開発された特定のウェブアプリケーションまたはモバイルアプリケーションに関連して、特定の機能を実現するように実行され得る。そのコードの特定の実行は、本明細書では「タスク実行」または単に「実行」と呼ばれる。タスクは、非限定的な例として、JavaScript(例えば、node.js)、Java、Python、および/またはRuby(および/または別のプログラミング言語)で記述され得る。本出願でさらに述べるように、グループベースのタスクは、タスクのグループ化のための共通実行可能コードに関連した実行可能コードに相当し、個々のタスクの代わりにコーディネータ114によって実行される場合がある。そのような実行は、実行のための個々のタスクのストレージを減らすことにより、コーディネータのメモリの制約を減じる。
タスクは、様々な方式で、オンデマンドコード実行システム150またはコーディネータ114で実行するために「トリガ」され得る。一実施形態では、クライアントデバイス102または他のコンピューティングデバイスは、タスクを実行するための要求を送信することができ、この要求は、一般に、タスクを実行するための「呼び出し」と呼ばれ得る。このような呼び出しは、実行すべきユーザコード(またはその場所)と、ユーザコードの実行に使用すべき1つ以上の引数とを含んでもよい。例えば、呼び出しは、タスクを実行する要求と併せてタスクのユーザコードを提供し得る。別の例では、呼び出しは、その名前または識別子によって、以前にアップロードされたタスクを識別し得る。さらに別の例では、タスクに対応するコードは、タスクの呼び出しに含めることができるだけでなく、要求がコーディネータ114またはオンデマンドコード実行システム140によって受信される前に、別個の場所(例えば、コーディネータ114のストレージ、ネットワークアクセス可能なストレージサービス、またはタスクデータストア144)にアップロードされることがある。コーディネータ114またはオンデマンドコード実行システム140の要求インタフェースは、ユーザから、ハイパーテキスト転送プロトコルセキュア(HTTPS)要求としてタスクを実行するための呼び出しを受信し得る。また、HTTPS要求に含まれる任意の情報(例えば、ヘッダおよびパラメータ)も、タスクを実行するときに処理され利用され得る。上記で説明したように、例えば、HTTP、MQTT、およびCoAPを含む他の任意のプロトコルは、タスク呼び出しを含むメッセージを要求インタフェース122に転送するために使用されてもよい。
タスクを実行するための呼び出しが、タスクに対応するユーザコードと併せて使用すべき1つ以上の(ネイティブライブラリを含む)第三者ライブラリを指定してもよい。一実施形態では、呼び出しは、実行を要求されたタスクに対応するユーザコードおよび任意のライブラリ(および/または、その記憶場所の識別)を含むZIPファイルを、コーディネータ114またはオンデマンドコード実行システム140に提供してもよい。ある実施形態では、呼び出しは、実行すべきタスクのプログラムコード、プログラムコードが記述された言語、呼び出しと関連付けられたユーザ、および/またはプログラムコードを実行するために確保すべきコンピューティングリソース(例えば、メモリ等)を示すメタデータを含む。例えば、タスクのプログラムコードは、呼び出しとともに提供されたもの、ユーザによって以前にアップロードされたもの、コーディネータ114またはオンデマンドコード実行システム150によって提供されたもの(例えば、標準ルーチン)、または第三者によって提供されたものであってもよい。
ある実施形態では、そのようなリソースレベルの制約(例えば、特定のユーザコードを実行するために、どれだけのメモリが割り当てられるべきか)は、特定のタスクに対して指定され、タスクの各実行にわたり変えなくてもよい。そのような場合、コーディネータ114またはオンデマンドコード実行システム140は、1つずつの呼び出しが受信される前に、そのようなリソースレベルの制約にアクセスすることができ、個々の呼び出しは、そのようなリソースレベルの制約を指定しなくてもよい。ある実施形態では、呼び出しは、タスクを実行するために呼び出しが呼び出すパーミッションまたは権限の種類を指示するパーミッションデータなどの他の制約を指定することができる。このようなパーミッションデータは、オンデマンドコード実行システム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と呼ばれる)コンピューティングシステムの全体的なアーキテクチャを示す。コーディネータ114への参照は、ソフトウェアモジュールもしくはタスク、またはデバイス(複数可)によって実行される機能を含むことができる。図2に示すコーディネータ114の全体的なアーキテクチャは、本開示の態様を実施するために使用することができるコンピュータハードウェアおよびソフトウェアモジュールの配列を含む。ハードウェアモジュールは、下記にさらに詳細に説明するように、物理電子デバイスで実装され得る。コーディネータ114は、図2に示すものよりもはるかに多い(または少ない)要素を含む場合がある。しかしながら、開示を可能にするために、これらの一般的な従来の要素の全てを示す必要はない。加えて、図2に示す全体的なアーキテクチャは、図1に示す他の構成要素のうちの1つ以上を実装するために使用してもよい。
図に示すように、コーディネータ114は、プロセシングユニット204、ネットワークインタフェース206、コンピュータ可読媒体ドライブ207、および入力/出力デバイスインタフェース208を含み、これらの全ては、通信バスによって相互に通信し得る。ネットワークインタフェース206は、1つ以上のネットワークまたはコンピューティングシステムへの接続を提供し得る。したがって、プロセシングユニット204は、ネットワーク104を介して、他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。また、プロセシングユニット204は、メモリ250との間で通信し、さらに、入力/出力デバイスインタフェース208を介して、任意選択のディスプレイ(図示しない)に出力情報を提供することもできる。また、入力/出力デバイスインタフェース208は、任意選択の入力デバイス(図示しない)から入力を受け入れることもある。
メモリ250は、本開示の1つ以上の態様を実施するために、プロセシングユニット204が実行するコンピュータプログラム命令(ある実施形態では、モジュールとしてグループ化される)を含んでもよい。メモリ250は、一般に、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、および/またはその他の永続的、補助的、または非一時的なコンピュータ可読媒体を含む。メモリ250は、プロセシングユニット204が、コーディネータ114の全体的な管理および動作において使用するためのコンピュータプログラム命令を提供するオペレーティングシステム252を記憶してもよい。メモリ250は、さらに、本開示の態様を実施するためのコンピュータプログラム命令およびその他の情報を含んでもよい。例えば、一実施形態では、メモリ250は、プロセスマネージャ254、スケジューラ256、デプロイエージェント258、および通信マネージャ260を含む。
スケジューラ256およびデプロイエージェント258は、プロセシングユニット204によって実行されるタスクを選択し、そのようなタスクの実行を管理するために、プロセシングユニット204によって実行されてもよい。具体的には、スケジューラ256は、所与の時点で実行するタスクを選択し、(例えば、コーディネータ114でリソースが制約されているインスタンスの下で)タスクの実行を一時停止する命令を含む場合がある。デプロイエージェント258は、タスクを実行する適切な実行環境270を選択すること、タスク実行中に必要とされるリソースへの適切なアクセスをその実行環境270にプロビジョニングすること、および実行環境270内にタスクの実行を生じさせることのための命令を含む場合がある。本出願に適用されるように、スケジューラは、連携デバイス112から受け取った個々のタスク実行要求の代わりに、実行環境でグループベースのタスクを実行することができる。
実行環境270は、本明細書で使用するように、タスクを実行するためのメモリ250の論理部分を指す。一実施形態では、実行環境270は、プログラム的に分離されており、その結果、第1の実行環境270でのコードの実行は、別の実行環境270に関連するメモリを変更することが禁止されている。実例として、実行環境270は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「サンドボックス」環境(「chroot jail」またはPython仮想環境「virtualenv」など)に該当するものであってよい。他の例では、実行環境270は、仮想マシン環境(例えば、JAVA仮想マシン、別個のオペレーティングシステムを備えた仮想化ハードウェアデバイスなど)に該当するものであってもよい。さらに他の例では、実行環境270は、必ずしも仮想化を利用せずに、タスクの実行に割り当てられたメモリ空間であってもよい。
コーディネータ上で実行されているタスクの間の通信とともに、コーディネータ114と他のデバイス(例えば、クライアントデバイス102および連携デバイス112)との間の通信は、通信マネージャ260によって促進され得る。具体的に、通信マネージャ260は、コーディネータ114に向けられたメッセージを取得して、適切な宛先にそのメッセージを転送するように構成され得る。例えば、通信マネージャ260は、タスク、連携デバイス112、クライアントデバイス102、およびサービスプロバイダ実行環境120のデバイスの任意の組み合わせの間でメッセージをルーティングしてもよい。
コーディネータ114によって実行されるタスクは、各タスクに対応するコードを格納するように構成されたメモリ250の論理ユニットに対応し得るタスクメモリ空間280内で論理的にグループ化されているように示されている。図2に示すように、タスクメモリ空間280は、コーディネータ114の機能性を実装するために、プロセシングユニット204によって実行可能な、ルータタスク282、1つ以上の通信マネージャタスク286、シャドウサービスタスク288、および1つ以上のクライアント提供のタスク290を含む、いくつかのタスクを含み得る。
ルータタスク282は、コーディネータ内でのメッセージのルーティング、コーディネータへのメッセージのルーティング、およびコーディネータからのメッセージのルーティングを支援するように実行可能なコードの一部に対応し得る。一実施形態では、ルータタスク282は、メッセージの適切な宛先を判定するために、「ルーティングテーブル」を実装する。例えば、通信マネージャ260は、コーディネータ114で(例えば、入力/出力インタフェース208でのタスク実行またはタスク受信による生成に起因して)取得したメッセージをルータタスク282に転送することができ、ルータタスク282は、ルーティングテーブルを利用して、特定の識別子宛のメッセージを、所与のタスク、所与のクライアントデバイス102、または所与の連携デバイス102にルーティングする必要があると判定することができる。ルーティングテーブルは、さらに、ある識別子宛てのメッセージが、サービスプロバイダ環境120に(例えば、デバイスシャドウサービス140またはオンデマンドコード実行システム150に)伝送される必要があることを示す場合がある。一実施形態では、ルーティングテーブルは、識別子として「トピック」を利用してもよく、その結果、特定のトピックに関連付けられたメッセージが、そのトピックに対して指定されるルーティングに従って転送される。ルーティングテーブルは、さらに、メッセージのソースに基づいて、それらのメッセージをルーティングする方法についての情報を含んでもよい。例えば、所与のトピックに宛てられたメッセージは、メッセージが第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は、受信タスクをグループベースの共有オンデマンドコードに関連付けることができ、一般に、グループベースのオンデマンドコードと呼ばれ、グループベースのオンデマンドコードの実行に関連付けられたタスクに関する状態情報を保持するための作業キューを維持する。
上記のタスク(これらのそれぞれは、例として、サービスプロバイダ環境120に関連付けられたエンティティによって提供される場合がある)に加えて、タスクメモリ空間280には、コーディネータ114にデプロイするための実行可能コードに対応し得る、グループベースのオンデマンドコードまたはグループベースのタスク290をいくつでも含めることができる。したがって、クライアント提供のタスク290によって提供される機能性は、サブミットするユーザの要望に従って変化し得る。ある例では、クライアント提供のタスク290は、メモリ250がそのための言語ランタイムを含むコーディング言語で記述されてもよい。例えば、コーディネータ114がnode.js、Go、JAVA、およびPython等の言語をサポートする場合、クライアント提供のタスク290は、それらの言語のいずれかで記述された実行可能コードを含み得る。上記で論じたように、グループベースのオンデマンドコードは、機能、作成者、アクセスされたリソース、結果などの組織基準に関連付けられている。ある実施形態では、タスクメモリ空間280は、グループベースのオンデマンドコードとして含まれていない、またはグループベースのオンデマンドコードとして明示的に除外されている個々のタスクを含むことができる。
加えて、メモリ250は、コーディネータ114の構成データが記憶されたメモリ250の論理部分を表す構成データ部分272を含む。構成データは、例えば、コーディネータ114の現在のデプロイバージョン、タスクメモリ空間280のタスクによって記憶されたデータ、またはコーディネータ114の動作において使用されるその他のデータを含み得る。
コーディネータ114の構成(および再構成)を有効にするために、メモリ250は、さらに、デプロイエージェント258を含む。デプロイエージェント258は、コーディネータをサービスプロバイダ環境120に登録し、コーディネータ114の所望の構成を判定し、コーディネータ114の現在の構成が所望の構成と一致しない例では、コーディネータ114用の構成データを取得して、所望の構成を実装するようにメモリ250を修正するために実行可能なコードに対応し得る。
図3Aは、本出願による、実例となる連携デバイス112Aのアーキテクチャの一実施形態を示す。図3Aに示す連携デバイス112Aの全体的なアーキテクチャは、本開示の態様を実施するために使用され得るコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。図に示すように、連携デバイス112Aは、プロセシングユニット304、ネットワークインタフェース306、コンピュータ可読媒体ドライブ307、入力/出力デバイスインタフェース320、任意選択のディスプレイ302、および入力デバイス324を含み、これらの全ては、通信バスによって互いに通信し得る。実例として、連携デバイス112Aは、組み込みデバイスとして、入力または出力等のより制限された機能性および構成要素を有し得る。
ネットワークインタフェース306は、図1のネットワーク104などの1つ以上のネットワークまたはコンピューティングシステムへの接続を提供し得る。したがって、プロセシングユニット304は、ネットワークを介して、他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。また、プロセシングユニット304は、メモリ310との間で通信し、さらに、入力/出力デバイスインタフェース320を介して、任意選択のディスプレイ302に出力情報を提供することもできる。また、入力/出力デバイスインタフェース320は、キーボード、マウス、デジタルペン等の任意選択の入力デバイス324から入力を受け入れてもよい。ある実施形態では、連携デバイス112Aは、図3Aに示すものよりも多い(または、少ない)構成要素を含み得る。例えば、連携デバイス112のある実施形態は、ディスプレイ302および入力デバイス324を省略し得る一方、1つ以上の代替通信チャネルを経由して(例えば、ネットワークインタフェース306を介して)入力/出力能力を提供してもよい。加えて、連携デバイス112Aは、同様に、入力および出力インタフェース320を完全に省略してもよい。
メモリ310は、1つ以上の実施形態を実施するために、プロセシングユニット204が実行するコンピュータプログラム命令を含んでもよい。メモリ310は、一般に、RAM、ROM、または他の永続的もしくは非一時的なメモリを含む。メモリ310は、プロセシングユニット304が、連携デバイス112Aの全体的な管理および動作において使用するためのコンピュータプログラム命令を提供するオペレーティングシステム314を記憶してもよい。メモリ310は、さらに、本開示の態様を実施するためのコンピュータプログラム命令およびその他の情報を含んでもよい。例えば、一実施形態では、メモリ310は、コンテンツにアクセスするためのブラウザアプリケーション316を含む。実例として、ブラウザアプリケーション316は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を含んでもよく、または単に、データ接続性を提供するソフトウェアアプリケーション(または実行可能命令)であってもよい。
図3Bは、本出願による、実例となる連携デバイス112Bの代替アーキテクチャの一実施形態を示す。図3Bに示す連携デバイス112Bの全体的なアーキテクチャは、本開示の態様を実施するために使用され得るコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。ただし、連携デバイス112Bは、連携デバイス112Bのコンピューティング機能および動作を制限する可能性のある構成要素の削減に関連していてもよい。図に示すように、連携デバイス112Bは、通信バスと通信する、プロセシングユニット350およびネットワークインタフェース352を含む。図3Aの連携デバイス112Aとは異なり、連携デバイス112Bは、コンピュータ可読媒体ドライブ、入力/出力デバイスインタフェース、任意選択のディスプレイ、または入力デバイスを有していなくてもよい。
ネットワークインタフェース352は、図1のネットワーク104などの1つ以上のネットワークまたはコンピューティングシステムへの接続を提供し得る。したがって、プロセシングユニット350は、ネットワークを介して、他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。メモリ354は、1つ以上の実施形態を実施するために、プロセシングユニット350が実行するコンピュータプログラム命令を含んでもよい。メモリ354は、一般に、RAM、ROM、または他の永続的もしくは非一時的なメモリを含む。この実施形態では、メモリ354は、プロセシングユニット350が、連携デバイス112Bの全体的な管理および動作において使用するためのコンピュータプログラム命令を提供する完全なオペレーティングシステムを必ずしも記憶しなくてよい。代わりに、一実施形態では、メモリ354は、命令にアクセスし、命令を受信し、命令を処理するためのインタフェースソフトウェア構成要素356を含む。
図4は、本出願による、実例となるクライアントデバイス102のアーキテクチャの一実施形態を示す。図4に示すクライアントデバイス102の全体的なアーキテクチャは、本開示の態様を実施するために使用され得るコンピュータハードウェアおよびソフトウェア構成要素の配列を含む。図に示すように、クライアントデバイス102は、プロセシングユニット404、ネットワークインタフェース406、コンピュータ可読媒体ドライブ407、入力/出力デバイスインタフェース420、任意選択のディスプレイ402、および入力デバイス424を含み、これらの全ては、通信バスによって互いに通信し得る。
ネットワークインタフェース406は、図1のネットワーク104などの1つ以上のネットワークまたはコンピューティングシステムへの接続を提供し得る。したがって、プロセシングユニット404は、ネットワークを介して、他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。また、プロセシングユニット404は、メモリ410との間で通信し、さらに、入力/出力デバイスインタフェース420を介して、任意選択のディスプレイ402に出力情報を提供することもできる。また、入力/出力デバイスインタフェース420は、キーボード、マウス、デジタルペン等の任意選択の入力デバイス424から入力を受け入れてもよい。ある実施形態では、クライアントデバイス102は、図4に示すものよりも多い(または、少ない)構成要素を含み得る。例えば、連携デバイス112のある実施形態は、ディスプレイ402および入力デバイス424を省略し得る一方、1つ以上の代替通信チャネルを経由して(例えば、ネットワークインタフェース406を介して)入力/出力能力を提供してもよい。加えて、クライアントデバイス102は、同様に、入力および出力インタフェース420を完全に省略してもよい。
メモリ410は、1つ以上の実施形態を実施するために、プロセシングユニット204が実行するコンピュータプログラム命令を含んでもよい。メモリ410は、一般に、RAM、ROM、または他の永続的もしくは非一時的なメモリを含む。メモリ410は、プロセシングユニット404が、クライアントデバイス102の全体的な管理および動作において使用するためのコンピュータプログラム命令を提供するオペレーティングシステム414を記憶してもよい。メモリ410は、さらに、本開示の態様を実施するためのコンピュータプログラム命令およびその他の情報を含んでもよい。例えば、一実施形態では、メモリ410は、コンテンツにアクセスするためのブラウザアプリケーション416を含む。実例として、ブラウザアプリケーション416は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を含んでもよく、または単に、データ接続性を提供するソフトウェアアプリケーション(または実行可能命令)であってもよい。本出願の目的のために、クライアント102は、グループベースのオンデマンドコード、またはグループベースのオンデマンドコードの選択基準の構成を容易にすることができる。
図5A〜図5Bを次に参照して、グループベースのオンデマンドコードまたはグループベースのオンデマンドタスクを利用してタスク実行要求を処理するためのコンテンツ管理システム110の構成要素間の実例となるインタラクションを説明する。より具体的には、図5A〜図5Bは、連携デバイス112、コーディネータ114、クライアントデバイス102、およびサービスプロバイダ環境120の間のインタラクションに関して記載される。前に述べたように、コーディネータ114は、一実施形態では、認可情報および認証情報の受信および維持と、連携デバイス112からの認証要求および認可要求の処理とに関連するタスクを実行して、処理結果を生成するように構成することができる。ただし、インタラクションの参照は、たとえ例証目的で使用されたとしても、いずれかの特定のデバイスまたはデバイスの組み合わせに限定されるべきではない。さらに、ある実施形態では、クライアントデバイス102またはサービスプロバイダ環境120のうちの1つ以上が省略され得る。
図5Aを参照して、コーディネータ114の初期構成について説明する。実例として、サービスプロバイダ環境120またはクライアントデバイスは、グループベースのオンデマンドコードの構成および連携を容易にすることができる。実例として、コーディネータ114の作業構成要素は、グループベースのオンデマンドコードのセットを構成する。(1)で、コーディネータ114は、1つ以上のグループベースのオンデマンドコードの構成を受け取る。一態様では、構成は、システムレベルのタスクなど、グループベースのオンデマンドコードと見なされる特定のタスクの識別を含み得る。別の態様では、タスクの構成は、どのタスク要求がグループベースのオンデマンドコードに対応するかを連携デバイスが判定できるようにするための一致基準である。他の態様では、連携デバイスが、グループベースのオンデマンドコードとなり得るタスクを評価すること、またはタスクを動的に処理してタスクがグループベースのタスクに対応するかどうかを判定することを可能にするために、構成に他の検索基準または処理命令が含められ得る。
(2)では、コーディネータ114が構成情報を処理する。一態様では、コーディネータ114は、様々な構成情報および基準の解析および保存を行い得る。別の態様では、コーディネータ114は、グループベースのオンデマンドコードを形成するタスクまたはオンデマンドコードの要求および受信を行い得る。(3)で、コーディネータ114は、グループベースのオンデマンドコードの実行を開始する。上記で論じたように、グループベースのオンデマンドの実行は、グループベースのオンデマンドコードの新たな実装を登録するためのマネージャ構成要素の開始と、グループベースのオンデマンドコードの各反復に関する状態情報を保持するためのマネージャ構成要素の開始とを含む。より具体的には、マネージャ構成要素は、グループベースのタスクの実行の反復ごとに、グループベースのタスクの実行によって要求される、またはグループベースのタスクの実行によって生成される状態情報を含む作業ノードまたはワーカマネージャのインスタンスを維持することができる。作業ノードまたはワーカマネージャにより、コーディネータ114のマネージャ構成要素は、1つ以上の連携デバイス112からの要求に基づいて、グループベースのタスクの複数の実行を管理することが可能になる。さらに、ある実施形態では、マネージャ構成要素は、グループベースのオンデマンドコードの複数の実行を管理し、グループベースのオンデマンドコードの1つの実行が他の実行に影響を与える可能性がある場合に変更を加えることもできる。例えば、グループベースのオンデマンドコードのインスタンスの実行が進行しないか、エラーが発生した場合、マネージャ構成要素はタスクを終了して、グループベースのオンデマンドコードの他の実行に影響を与えないようにすることができる。構成後、連携デバイスは実行を開始する準備ができている。
図5Bを参照して、タスクの処理について説明する。(1)で、1つ以上の連携デバイス112は、要求を送信してコーディネータ114で実行させる。実例として、連携デバイス112は、通信プロトコルを利用して、要求をコーディネータ114に送信する。例えば、連携デバイスは、MQTTプロトコルを利用して要求を識別し、提供されたログイン、パスワード、生体認証情報など、要求を評価するために利用できる情報を提供してもよい。連携デバイス112とコーディネータ114との間のインタラクションは、いくつかの通信を必然的に伴い得る。要求の種類に応じて、要求に含まれる情報は、識別子、以前に発行されたトークン、セキュリティ情報などを含み得る。
(2)では、コーディネータ114は、タスクの実行要求がグループベースのタスクに該当するかどうかを判定する。該当するのであれば、コーディネータは、要求をグループベースのオンデマンドコードに関連付けることができる。一実施形態では、コーディネータ114は、要求またはタスク識別子に含まれる様々な識別子を探すことができる。別の実施形態では、コーディネータ114は、基準を適用するなどして要求を処理し、要求がグループベースのオンデマンドコードに対応するかどうかを判定できる。
(3)で、コーディネータは、要求がグループベースのオンデマンドコードに該当すると判定した場合、コーディネータ114はグループベースのオンデマンドコードの実行の反復を開始する。上記で論じたように、作業マネージャは、グループベースのオンデマンドコードの複数実行のステータスまたは状態を追跡する作業キューを生成することができる。タスク実行の各インスタンスは、要求で提供された入力を管理し、状態を保持し、出力を生成する別個のワーカタスクまたは構成要素として表現され得る。さらに、ある実施形態では、グループベースのオンデマンドコードのハンドラは、それぞれの要求されたタスクのローカルハンドラとインタラクトし、グループベースのオンデマンドコードの実行を処理し、処理結果を個々のハンドラに提供できるマスターハンドラとして機能する。上記で論じたように、グループベースのオンデマンドコードを利用することにより、コーディネータ114は、コーディネータ114のメモリリソースが制約され、または制約があるように動作している状況で、連携デバイス112によってサブミットされたタスクの処理を改善することができる。あるいは、コーディネータ114は、グループベースのオンデマンドコードを複数回実行して状態を追跡することにより、実行のために処理できるタスクの数を増やすこともできる。
(4)で、コーディネータ114は処理結果を生成し、処理結果を要求中のクライアントデバイス102に送信する。
図6を次に、参照して、実行のためにタスクを処理するためのルーチン600について説明する。ルーチン600は、コーディネータ114に関しての実例として説明する。前に述べたように、コーディネータ114は、一実施形態では、1つ以上のグループベースのオンデマンドコードに関連するタスクを実行するように構成され得る。ただし、インタラクションの参照は、たとえ例証目的で使用されたとしても、いずれかの特定のデバイスまたはデバイスの組み合わせに限定されるべきではない。
ブロック602で、コーディネータ114は、1つ以上のグループベースのオンデマンドコードの構成を受信する。一態様では、構成は、システムレベルのタスクなど、グループベースのオンデマンドコードと見なされる特定のタスクの識別を含み得る。グループベースのオンデマンドコードの識別には、実行されるグループベースのタスクの受信を含めることができる。別の実施形態では、構成には、事前に保存されたタスク情報のライブラリ、1つ以上の連携デバイス、またはサービスプロバイダネットワーク120など、グループベースのタスクの場所またはソースを識別するために使用できる情報を含めることができる。別の態様では、タスクの構成は、どのタスク要求がグループベースのオンデマンドコードに対応するかを連携デバイスが判定できるようにするための一致基準である。この一致基準としては、タスク実行要求の送信に利用される識別子、タスクの内容の識別子(例えば、チェックサムまたはハッシュ)、グループベースのタスクの作成者または配布者などが含まれ得る。他の態様では、連携デバイスが、グループベースのオンデマンドコードとなり得るタスクを評価すること、またはタスクを動的に処理してタスクがグループベースのタスクに対応するかどうかを判定することを可能にするために、構成に他の検索基準または処理命令が含められ得る。
ブロック604で、連携デバイスは、構成情報を処理して、1つ以上のグループベースのタスクを構成してインスタンス化する。一態様では、コーディネータデバイス114は、様々な構成情報および基準の解析および保存を行い得る。別の態様では、コーディネータデバイス114は、グループベースのオンデマンドコードを形成するタスクまたはオンデマンドコードの要求および受信を行い得る。さらに、コーディネータ114は、グループベースのオンデマンドコードの実行を開始する。上記で論じたように、グループベースのオンデマンドの実行は、グループベースのオンデマンドコードの新たな実装を登録するためのマネージャ構成要素の開始と、グループベースのオンデマンドコードの各反復に関する状態情報を保持するためのマネージャ構成要素の開始とを含む。より具体的には、マネージャ構成要素は、グループベースのタスクの実行の反復ごとに、グループベースのタスクの実行によって要求される、またはグループベースのタスクの実行によって生成される状態情報を含む作業ノードまたはワーカマネージャのインスタンスを維持することができる。作業ノードまたはワーカマネージャにより、コーディネータ114のマネージャ構成要素は、1つ以上の連携デバイス112からの要求に基づいて、グループベースのタスクの複数の実行を管理することが可能になる。下記のように、ある実施形態では、マネージャ構成要素は、グループベースのオンデマンドコードのそのような複数の実行を管理し、グループベースのオンデマンドコードの1つの実行が他の実行に影響を与える可能性がある場合に変更を加えることもできる。例えば、グループベースのオンデマンドコードのインスタンスの実行が進行しないか、エラーが発生した場合、マネージャ構成要素はタスクを終了して、グループベースのオンデマンドコードの他の実行に影響を与えないようにすることができる。別の例では、マネージャ構成要素は、入力されたパラメータの変更、出力の処理、または別のグループベースのタスクの置き換えなど、タスクの変更をもたらすことができる。構成後、連携デバイスは、グループベースのタスクの実行を開始する準備ができている。
ブロック606で、コーディネータ114は、コーディネータ114での実行の要求を受信する。実例として、連携デバイス112は、通信プロトコルを利用して、要求をコーディネータ114に送信する。例えば、連携デバイスは、MQTTプロトコルを利用して要求を識別し、提供されたログイン、パスワード、生体認証情報など、要求を評価するために利用できる情報を提供してもよい。連携デバイス112とコーディネータ114との間のインタラクションは、いくつかの通信を必然的に伴い得る。要求の種類に応じて、要求に含まれる情報は、識別子、以前に発行されたトークン、セキュリティ情報などを含み得る。
決定ブロック608で、コーディネータ114は、タスクの実行の要求がグループベースのタスクに該当するかどうかを判定する。一実施形態では、コーディネータ114は、要求またはタスク識別子に含まれる様々な識別子を探すことができる。別の実施形態では、コーディネータ114は、基準を適用するなどして要求を処理し、要求がグループベースのオンデマンドコードに対応するかどうかを判定できる。ブロック610で、コーディネータは、要求がグループベースのオンデマンドコードに該当すると判定した場合、コーディネータ114はグループベースのオンデマンドコードの実行の反復を開始する。上記で論じたように、作業マネージャは、グループベースのオンデマンドコードの複数実行のステータスまたは状態を追跡する作業キューを生成することができる。タスク実行の各インスタンスは、要求で提供された入力を管理し、状態を保持し、出力を生成する別個のワーカタスクまたは構成要素として表現され得る。さらに、ある実施形態では、グループベースのオンデマンドコードのハンドラは、それぞれの要求されたタスクのローカルハンドラとインタラクトし、グループベースのオンデマンドコードの実行を処理し、処理結果を個々のハンドラに提供できるマスターハンドラとして機能する。ただし、グループベースのオンデマンドコードを複数回実行することにより、コーディネータ114が全てのタスクを別々に実行した場合に比べて、連携によって実行される複数のタスクの実行のメモリリソースが少なくなる。ブロック612で、コーディネータ114は処理結果を生成し、処理結果を要求中のクライアントデバイス102に送信する。
あるいは、決定ブロック608で、コーディネータが、要求がグループベースのオンデマンドコードに該当していないと判定した場合、コーディネータ114は、ブロック614で、個々のタスクの実行の反復を開始する。ブロック616で、コーディネータ114は処理結果を生成し、処理結果を要求中のクライアントデバイス102に送信する。
ブロック618で、コーディネータ114は処理結果を送信し、ルーチン600はブロック620で終了する。
上述の方法およびプロセスの全ては、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つまたは複数の実行可能な命令を含む、モジュール、セグメント、またはコードの部分を潜在的に表すものとして理解されるべきである。代替の実施態様は、本明細書に説明される実施形態の範囲内に含まれ、その中で要素または機能は、当業者によって理解されるであろうように、関係する機能性に応じて、実質的に同時または逆の順序を含む、示されるものまたは説明されるものとは異なる順序で削除または実行され得る。
多くの変形形態および変更形態が上記の実施形態に対して行われ得、それらの要素が他の許容される実施例中にあるものとして理解されることが強調されるべきである。全てのこのような変更形態および変形形態は、本明細書において、本開示の範囲内に含まれ、以下の特許請求の範囲によって保護されることが意図される。
本開示の実施形態の例は、以下の条項を鑑みて説明することができる。
条項1.コンピューティングデバイスへのアクセスを管理するシステムであって、プロセッサおよびメモリを備えた少なくとも1つのコンピューティングデバイスであって、前記コンピューティングデバイスが連携デバイスに相当しており、前記連携デバイスが、オンデマンドコードを実行するための要求をコーディネータサービスに送信する、前記コンピューティングデバイスと、プロセッサおよびメモリを備えた少なくとも1つのコンピューティングデバイスに実装されたコーディネータサービスであって、前記サービスは、グループベースのオンデマンドコードのセットの構成情報を受信すること、前記構成情報に従って、前記グループベースのオンデマンドコードのうちの少なくとも1つをインスタンス化すること、前記連携デバイスから、前記オンデマンドコードを実行する前記要求を受信すること、前記オンデマンドコードを実行するための前記要求を、前記グループベースのオンデマンドコードの少なくとも1つに関連付けること、前記インスタンス化された前記グループベースのオンデマンドコードを前記実行すること、および前記インスタンス化された前記グループベースのオンデマンドコードに対応する処理結果を生成することを行うように構成されている前記コーディネータサービスとを備える、前記システム。
条項2.前記コーディネータサービスは、組織的基準に基づいて、前記要求を前記グループベースのオンデマンドコードに関連付ける、条項1に記載のシステム。
条項3.前記コーディネータサービスは、さらに、前記インスタンス化された前記グループベースのオンデマンドコードの前記実行のための状態情報に関する作業キューを維持するように構成されている、条項1または条項2のいずれかに記載のシステム。
条項4.前記グループベースのオンデマンドコードは、システムレベルのタスクに対応する、条項1〜3のいずれかに記載のシステム。
条項5.連携環境でのオンデマンドコードの実行を管理する方法であって、1つ以上の連携デバイスから、オンデマンドコードを実行するための要求を受信すること、前記オンデマンドコードを実行するための個々の要求を、グループベースのオンデマンドコードに関連付けること、前記インスタンス化された前記グループベースのオンデマンドコードを前記実行すること、および前記インスタンス化された前記グループベースのオンデマンドコードに対応する処理結果を生成することを含む、前記方法。
条項6.前記グループベースのオンデマンドコードの構成情報を受信することをさらに含む、条項5に記載の方法。
条項7.前記構成情報に従って、前記グループベースのオンデマンドコードのうちの少なくとも1つのオンデマンドコードの前記インスタンス化を行うことをさらに含む、条項6に記載の方法。
条項8.前記オンデマンドコードを実行するための前記個々の要求を、グループベースのオンデマンドコードに関連付けることが、組織的基準に基づいて、前記要求を前記グループベースのオンデマンドコードに関連付けることを含む、条項5〜7のいずれかに記載の方法。
条項9.前記グループベースのオンデマンドコードの前記実行を管理することをさらに含む、条項5〜8のいずれかに記載の方法。
条項10.前記グループベースのオンデマンドコードの前記実行を管理することが、前記インスタンス化された前記グループベースのオンデマンドコードの前記実行のための状態情報に関する作業キューを維持することを含む、条項9に記載の方法。
条項11.前記グループベースのオンデマンドコードの前記実行を管理することが、前記グループベースのオンデマンドコードの少なくとも1つの実行を変更することを含む、条項9または条項10のいずれかに記載の方法。
条項12.1つ以上の連携デバイスから、オンデマンドコードを実行するための第2の要求を受信すること、グループベースのオンデマンドコードに関連付けられていないオンデマンドコードを前記実行すること、およびグループベースのオンデマンドコードに関連付けられていない前記オンデマンドコードの前記実行に対応する処理結果を生成することをさらに含む、条項5〜11のいずれかに記載の方法。
条項13.連携環境でのタスクの実行を管理する方法であって、オンデマンドコードを実行するための個々の要求を、グループベースのオンデマンドコードに関連付けること、前記インスタンス化された前記グループベースのオンデマンドコードを前記実行すること、および前記インスタンス化された前記グループベースのオンデマンドコードに対応する処理結果を生成することを含む、前記方法。
条項14.グループベースのオンデマンドコードのセットの構成情報を受信することをさらに含む、条項13に記載の方法。
条項15.前記構成情報に従って、前記グループベースのオンデマンドコードのうちの少なくとも1つのオンデマンドコードの前記インスタンス化を行うことをさらに含む、条項14に記載の方法。
条項16.前記オンデマンドコードを実行するための前記個々の要求を、グループベースのオンデマンドコードに関連付けることが、組織的基準に基づいて、前記要求を前記グループベースのオンデマンドコードに関連付けることを含む、条項13〜15のいずれかに記載の方法。
条項17.前記インスタンス化された前記グループベースのオンデマンドコードの前記実行のための状態情報に関する作業キューを維持することにより、前記グループベースのオンデマンドコードの前記実行を管理することをさらに含み、前記要求された認可情報および認証情報が処理情報を含む、条項13〜16のいずれかに記載の方法。
条項18.前記グループベースのオンデマンドコードの少なくとも1つの実行を終了することにより、前記グループベースのオンデマンドコードの前記実行を管理することをさらに含む、条項13〜17のいずれかに記載の方法。
条項19.1つ以上の連携デバイスから、オンデマンドコードを実行するための第2の要求を受信すること、グループベースのオンデマンドコードに関連付けられていないオンデマンドコードを前記実行すること、およびグループベースのオンデマンドコードに関連付けられていない前記オンデマンドコードの前記実行に対応する処理結果を生成することをさらに含む、条項13〜18のいずれかに記載の方法。
条項20.前記グループベースのオンデマンドコードは、システムレベルのタスクに対応する、条項13〜19のいずれかに記載の方法。