一般的に説明されるように、本出願は、通信ネットワークにおけるコンピューティングデバイス間で伝達されるデータの管理に対応する。より具体的には、本開示の態様は、クライアントコンピューティングデバイスの管理を容易にするメッセージングプロトコルの利用に対応する。例示として、1つ以上のクライアントデバイスは、MQTTメッセージングプロトコル等のメッセージングプロトコルを利用して、コンテンツを交換する。本出願の態様に従って、管理的コンポーネントは、トピックによって体系化されるメッセージを受信するためにサブスクライブされた受信コンピューティングデバイスのセットへの個々のメッセージングを容易にするように構成され得る。より具体的には、例示として、管理的デバイスは、トピックによって体系化される入力メッセージをレビューし、トピックと関連付けられるメッセージを受信するためにサブスクライブされている個々の受信デバイスを選択し得る通信コンポーネントを利用することができる。既存のメッセージングプロトコルを利用することによって、本出願の態様は、別個のデバイス間の通信に関わるクライアントデバイスおよび管理デバイスの必要性を軽減する。
例示的な例を参照すると、1つ以上のクライアントコンピューティングデバイスを含む被調整環境は、1つ以上のメッセージ処理サービスを提供するサービスプロバイダと通信する。被調整環境は、メッセージ処理サービスからのメッセージの配布を含む、被調整環境内で個々の被調整デバイスの管理を容易にするコーディネータを含む。コーディネータは、標準メッセージングプロトコルを活用することによって、被調整デバイスとの通信の交換を容易にする。一実施形態では、コーディネータは、MQTTメッセージングプロトコルを利用することができる。例示として、メッセージングプロトコルは、指定トピックに従って発行されたメッセージに関連するコンテンツを受信するために、コーディネータによって登録するデバイスに関連する能力を含み得る。一般的に説明されるように、コーディネータがトピックに関連するコンテンツを受信するとき、コーディネータは、一般的に、コンテンツを全ての登録済デバイスに転送または発行するであろう。
メッセージングプロトコルのより一般的な実施に従って、コーディネータは、メッセージブロッカー能力において、追加処理なしで、登録済トピックを入力メッセージで識別されるトピックと簡単に一致させるように動作し得る。より具体的には、被調整デバイスのセットが指定トピックによって定義されるタスクの実行またはタスクのセットに関連するメッセージを受信するためにサブスクライブしている場合、より一般的なメッセージングプロトコルを実施するコーディネータは、被調整デバイスの全セットの登録を一致させ、適宜、メッセージを転送するであろう。下記に詳細に説明されるように、本出願の態様に従って、コーディネータまたは他のメッセージ処理コンポーネントは、コーディネータに、入力メッセージを識別された登録済デバイスのセットにどのように送るかを判定させる実行可能コードまたは命令で構成され得る。
引き続き前述の例を参照すると、コンテンツの配信を容易にするために、コーディネータによって受信される通信は、被調整デバイスの登録されたセットのどのセットがメッセージを受信するべきかを判定するために追加情報を利用することができる。本出願に従って、通信のトピック部は、通信の主題を定義するテキストの1つ以上のラベルまたはレベルで構成される。次に、コーディネータは、ルーティングテーブルおよびビジネスルールを利用して、被調整デバイスのサブセットに発行され、かつそれに向けられた別個のトピックを識別することができる。
いくつかの例では、被調整デバイスは、別個の主要目的がある家庭用器具等の少なくとも1つの代替の主要機能を有する埋め込みデバイスまたはシンデバイスに対応し得る。係るデバイスは、いくつかの例では、「モノのインターネット」デバイスまたは「IoT」デバイスと称され得る。被調整デバイスは、制限されたローカルユーザインタフェース能力を含み得、ひいては、リモート管理からの利点をもたらし得る。本明細書に開示されるコーディネータは、コーディネータおよび被調整デバイスを含む環境内で(ローカルエリアネットワークまたは「LAN」の環境等の内部で)、ローカルでの被調整デバイスの係るリモート管理を可能にする。したがって、コーディネータの使用は、ローカル環境の外部の通信を必要とすることなく、被調整デバイスの管理を可能にし得、それによって、プライバシリスクの減少を可能にし、外部またはパブリック通信ネットワークの使用を通して通信速度の増大を可能にする。
さらに、本明細書に開示されるようなコーディネータは、局所化されたオンデマンドコード実行システムとして機能し得、コーディネータ上に機能を実装するコードのポータブルセグメントの即時の実行を可能にする。コードのこれらのポータブルセグメントは、本明細書で「タスク」と称され得る。いくつかの例では、タスクは、例えば、デバイスの状態を変更すること等によって、被調整デバイスの機能を調整するために利用され得る。例えば、被調整デバイスがネットワーク対応照明である場合、タスクは、現在時間、ユーザ入力、または別の被調整デバイスの状態等のコーディネータへの入力に従って照明の状態を変更するように機能し得る(例えば、「オン」または「オフ」にする)。コーディネータは、さらに、いくつかの異なるプロトコルに従って被調整デバイスとタスクとの間の通信を可能にし、いくつかの例では、係るプロトコルの間の変換機能を提供し得る。またさらに、コーディネータは、いくつかの例では、タスクの実行位置を管理し得、その結果、タスクは、候補デバイスの能力およびタスクの実行についての要件に従って、コーディネータ上で、被調整デバイス上で、またはリモート環境(例えば、リモートネットワークコンピューティング環境)のデバイス上で実行され得る。これらのタスクは、いくつかの例では、ユーザによって定義され得、タスクに対応するユーザによりサブミットされたコードに従って、ユーザがコーディネータまたは被調整デバイス上で様々な機能性を実施することを可能にする。したがって、コーディネータは、被調整デバイスの即時に再構成可能な局所化された管理を提供し得る。
いくつかの例では、コーディネータは、「デバイスシャドウ」を介して被調整デバイスの状態を管理し得る。概して、デバイスシャドウは、被調整デバイスから遠隔の位置に記憶されるように(例えば、コーディネータまたはリモートデバイスシャドウサービスによって行われるように)、被調整デバイスの所望の状態のデータ表現に対応し得る。被調整デバイスは、デバイスシャドウによって表された状態と同期するように構成され得、したがって、デバイスシャドウへの変更が被調整デバイスの状態の対応する変更を生じさせると予測され得る。いくつかの例では、被調整デバイスおよび対応するシャドウの同期は、プロトコルが当技術分野において既知である、MQTTプロトコル等の「発行/サブスクライブ」モデル通信プロトコルを介して発生し得る。したがって、被調整デバイスは、当該被調整デバイスのために、デバイスシャドウに「サブスクライブ」し得る。次に、コーディネータは、デバイスシャドウに「発行」する要求によって、デバイスシャドウの状態への所望の変更を取得し得る。コーディネータは、通信プロトコルを介して、被調整デバイスにデバイスシャドウの状態の変更を通知し得、被調整デバイスは、デバイスシャドウの状態にローカル状態を同期することによって応答し得る。デバイスシャドウの使用は、例えば、被調整デバイスとの通信から被調整デバイスの状態を読み出しまたは修正する要求を分離する際に有益であり得る。例示として、被調整デバイスの状態を読み出しまたは修正する要求は、デバイスシャドウを読み出しまたは修正することに関して即座に成功するものと考えられ得る。次に、被調整デバイスに必要な任意の変更は、被調整デバイスとシャドウデバイスとの間の通信プロトコルに従って、要求に対して非同期に発生し得る。デバイスと相互作用する要求がデバイスとの実際の通信から分離され得るため、これらの要求およびデバイス通信は、また、異なる通信プロトコルを利用し得る。例えば、デバイスシャドウを介してデバイス状態を読み出しまたは修正する要求は、伝達制御プロトコル(TCP)等の高オーバヘッド、高信頼性プロトコルに従って伝達され得る一方、デバイスシャドウと被調整デバイスとの間の通信は、MQTT等の低オーバヘッドプロトコルを介して発生し得る。
本開示の実施形態に従って、コーディネータは、サービスプロバイダの環境を介してコーディネータの構成を変え得る、ユーザと関連付けられ得る。例示として、サービスプロバイダ環境は、コーディネータのプロバイダによって運営され得、コーディネータの被調整環境の位置、環境内の被調整デバイス、コーディネータによって実行可能なタスク、コーディネータがデバイスの間の通信、タスクの間の通信、もしくはデバイスとタスクとの間の通信をどのように管理するべきか、コーディネータに関するセキュリティ情報、またはコーディネータの他のパラメータ(コーディネータにおいて監視される測定基準、またはコーディネータにおいて行われるロギング等)等の、コーディネータの様々な構成パラメータをユーザが指定することを可能にし得る。コーディネータ自体が、いくつかの例では、制限された局所化されたユーザインタフェースと関連付けられ得るため、サービスプロバイダ環境は、ユーザが、クライアントデバイスを介して、コーディネータに関する構成をサブミットさせることを可能にし得、コーディネータに構成を自動的にプロビジョニングさせることを可能にし得る。サービスプロバイダ環境は、さらに、単一のクライアントデバイスが、統一したインタフェースを介して複数のコーディネータを管理することを可能にし得、新たな構成を配置することによって、またはコーディネータへの構成の前の配置をロールバックもしくは取り消すことによって、コーディネータの構成を素早く変えることを可能にし得る。
いくつかの例では、サービスプロバイダ環境は、コーディネータの機能性と同様のまたは同一の機能性を提供し得る。例えば、コーディネータは、コードのポータブルセグメントまたは「タスク」の実行に少なくとも部分的に基づいて機能し得る。同様に、サーバプロバイダ環境は、同一または同様のタスクを実行するように機能するオンデマンドコード実行環境を含み得る。係るオンデマンドコード実行環境に関する更なる詳細は、「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つ以上のコンテナ内でユーザコードを実行することによって)要求を扱うことができる発見計算能力(finding compute capacity)と関連付けられる遅延は、かなり短くなる。
オンデマンドコード実行環境は、「556特許」において更に詳細に説明されるように、ユーザコード(様々なプログラミング言語のいずれかにおいて構成されたスレッド、プログラム等)を受信し、仮想マシンインスタンスのユーザ構成を必要とすることなく、高度にスケーラブルな、低遅延の方式でコードを実行するように構成されている仮想マシンインスタンスマネージャを含み得る。具体的には、仮想マシンインスタンスマネージャは、ユーザコードを受信する前に、およびいずれかの特定の仮想マシンインスタンス構成に関するユーザから任意の情報を受信する前に、それぞれが様々なランタイム環境のうちのいずれか1つ以上に対応する、構成の事前に定義されたセットに従って仮想マシンインスタンスを作成および構成することができる。その後、仮想マシンインスタンスマネージャは、コードを実行するユーザによって開始された要求を受信し、要求と関連付けられる構成情報に基づいて、コードを実行するように事前構成された仮想マシンインスタンスを識別する。仮想マシンインスタンスマネージャはさらに、少なくとも部分的に割り当てられた仮想マシンインスタンスの内部でコンテナを作成および構成することによって、ユーザのコードを実行するために、識別された仮想マシンインスタンスを割り当てることができる。仮想マシンインスタンスマネージャを実装し、仮想マシンインスタンス上でユーザコードを実行するための様々な実施形態は、「556特許」において、さらに詳細に説明されている。
上記に説明したように、コーディネータは、いくつかの例では、ローカルに(例えば、コーディネータ上で)、またはサービスプロバイダネットワーク内でオンデマンドコード実行環境の使用によってタスクを実行するかどうかを選択するように構成され得る。例えば、コーディネータは、処理サービスコンポーネントとして機能し、タスクに関連する受信された通信の範囲内で埋め込みコードを処理し、係る通信を受信するために登録された異なる被調整デバイスにどのように転送するかを判定し得る。さらなる例として、コーディネータおよびサービスプロバイダ環境の両方は、被調整デバイスに対応するデバイスシャドウを提供し得、ユーザは、コーディネータによってホストされたデバイスシャドウまたはサービスプロバイダ環境内でホストされたデバイスシャドウのいずれかまたは両方を変更する要求をサブミットし得る。係る例では、コーディネータは、所与の被調整デバイスに対応する様々なデバイスシャドウと共に、被調整デバイス自体を同期するように機能し得る。
本出願のまたさらなる態様に従って、1つ以上の被調整関係を含む通信環境は、1つ以上のメッセージ処理サービスを提供するサービスプロバイダと通信する。メッセージ処理サービスは、標準メッセージングプロトコルを活用することによって、被調整デバイスネットワークとの通信の交換を容易にする。一実施形態では、メッセージ処理サービスは、MQTTメッセージングプロトコルを利用することができる。例示として、メッセージングプロトコルは、指定トピックに従って発行されたメッセージに関連するコンテンツを受信するために、個々の被調整ネットワークにおけるコーディネータに関する能力を含み得る。一般的に説明されるように、メッセージ処理サービスがトピックに関連するコンテンツを受信するとき、メッセージ処理サービスは、一般的に、コンテンツを全ての登録済デバイスに転送または発行するであろう。
引き続き前述の例を参照すると、コンテンツの配信を容易にするために、メッセージ処理サービスによって受信される通信は、コーディネータの登録されたセットのどのセットがメッセージを受信するべきかを判定するために追加情報を利用することができる。本出願に従って、通信のトピック部は、通信の主題を定義するテキストの1つ以上のラベルまたはレベルで構成される。次に、メッセージ処理サービスは、ルーティングテーブルおよびビジネスルールを利用して、コーディネータのサブセットに発行されおよびそれに向けられた別個のトピックを識別することができる。
本開示に説明されるいくつかの実施形態の態様が例示の目的のために、MQTTメッセージングプロトコルおよびデバイスの他の構成に重点を置いているが、当業者は、例は、例示だけにすぎず、必ずしも限定することを意図しないことを認識するであろう。本開示を考慮して当業者によって認識されるように、本明細書に開示される実施形態は、コンピューティングシステム、特に、外部デバイスによって調整および管理される、制限された局所化されたユーザインタフェースを伴うコンピューティングシステムの能力を改善する。
本開示の上述した態様および付随する利点の多くは、添付図面と併用するとき、以下の説明を参照することによって、それらがより良好に理解されるように、さらに容易に認識されるようになるであろう。本開示の様々な実施形態および態様が、図1〜図24に関して説明される。本開示は、任意の指定の組み合わせの実施形態または例を必要とする方式で解釈するべきではない。加えて、当業者は、本出願の1つ以上の態様または実施形態が、容易に組み合わされ得、本出願の追加の発明の関する態様をもたらし得ることを認識するであろう。
図1は、コーディネータ114が被調整デバイス112を制御するように動作し得る1つ以上の被調整環境110と、(例えば、被調整デバイス112の状態の変更を要求するために)被調整環境110と相互作用し得るクライアントデバイス102と、様々な被調整環境110内でコーディネータ114との通信またはコーディネータ114の構成を支援し得るサービスプロバイダ環境120とを含む、例示的動作環境100のブロック図である。
被調整環境110、クライアントデバイス、およびサービスプロバイダ環境120は、ネットワーク104を介して通信し得、ネットワーク104は、いずれかの有線ネットワーク、無線ネットワーク、またはそれらの組み合わせを含み得る。例えば、ネットワーク104は、パーソナルエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、無線ブロードキャストネットワーク(例えば、ラジオまたはテレビのためのもの)、ケーブルネットワーク、衛星ネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであり得る。さらなる例として、ネットワーク104は、インターネット等の様々な異なった関係者によって運営される可能性がある、リンクされたネットワークの公然にアクセス可能なネットワークであり得る。いくつかの実施形態では、ネットワーク104は、企業または大学のイントラネット等のプライベートまたはセミプライベートネットワークであり得る。ネットワーク104は、グローバルシステムフォーモバイルコミュニケーションズ(GSM)ネットワーク、符号分割多元接続(CDMA)ネットワーク、ロングタームエボリューション(LTE)ネットワーク、または他の種類の無線ネットワークを含み得る。ネットワーク104は、インターネットまたは他の上述した種類のネットワークのいずれかを介して通信するためのプロトコルおよびコンポーネントを使用することができる。例えば、ネットワーク104によって使用されるプロトコルは、ハイパーテキスト転送プロトコル(HTTP)、HTTPセキュア(HTTPS)、MQTT、およびコンストレイントアプリケーションプロトコル(CoAP)等を含み得る。インターネットまたは他の上述した種類の通信ネットワークのいずれかを介して通信するためのプロトコルおよびコンポーネントは、当業者に十分に既知であり、ひいては、本明細書でさらに詳細に説明されない。ネットワーク104の全てのコンポーネントが図1に示されているが、ルータ等の1つ以上のコンポーネントは、メッセージ処理サービスとして機能し得る。
被調整環境110のそれぞれは、実行環境110のネットワーク(ネットワークは図1に示されない)を介して通信する、コーディネータ114および任意の数の被調整デバイス112を含み得る。被調整環境110内のそれらの関連付けのために、所与の環境110内の被調整デバイス112およびコーディネータ114は、通信ネットワークの点で、相互に「ローカル」であると考えられ得る。例えば、所与の環境110内の被調整デバイス112およびコーディネータ114は、LANまたは他の局所化された通信ネットワークを介して接続され得る。
被調整デバイス112のそれぞれは、コーディネータ114と通信して、被調整デバイス112の機能性を管理するように構成されているコンピューティングデバイスに対応することができる。いくつかの例では、被調整デバイス112は、ロバストな局所化されたユーザインタフェース能力を伴う、ラップトップ、デスクトップ、スタンドアロンメディアプレイヤ等の十分に特徴付けられたコンピューティングデバイスに対応することができる。他の例では、被調整デバイス112は、家庭用器具またはデバイス(冷蔵庫、洗濯機、湯沸し器、加熱炉、ドアロック、照明バルブ、電気コンセント、電気スイッチ等)内に埋め込まれた、またはそれらに付属品として取り付けられたデバイス等の別の主要機能と関連付けられるシンデバイスまたは埋め込みデバイスに対応することができる。係る器具またはデバイスは、いくつかのコンテキストでは、「スマート」デバイス、IoTデバイス、または「接続」デバイスと称される。したがって、被調整デバイス112は、制限されたローカルユーザインタフェースを含み、リモート管理のために構成され得る。いくつかの例では、被調整デバイス112は、ステートフルであり得、命令に応答してそれらの状態を変えるように動作し得る(例えば、「オフ」から「オン」に変化させること等によって変わる)。
さらに下記に詳細に説明されるように(例えば、図2に関して)、コーディネータ114は、被調整デバイス112に伝達された命令が被調整環境110の外側に伝わることを要求することなく(従って、係る命令のセキュリティが強化され、その伝達速度が速くなる)、被調整デバイス112の動作を調整、管理、または制御する命令を実行するコンピューティングデバイスに対応することができる。具体的には、コーディネータ114は、被調整デバイス112、クライアントデバイス102、およびサービスプロバイダネットワーク120のデバイスの任意の組み合わせの間の通信を管理するように集合的に構成されているプロセッサおよびメモリを含み得る。コーディネータは、さらに、サービスプロバイダ環境120のオンデマンドコード実行環境150と同様の方式で、タスクの実行を可能にするように構成され得る。これらのタスクは、被調整デバイス112、クライアントデバイス102、およびサービスプロバイダネットワーク120のデバイスと通信することを含む、様々なユーザにより定義された機能性またはユーザにより定義されていない機能性を実施し得る。したがって、コーディネータ114は、被調整デバイス112の手動制御、自動制御、または半自動制御を可能にするように構成され得る。例えば、コーディネータ114は、クライアントデバイス102が、被調整デバイス112の状態を変更する要求を伝達することを可能にし、状態の係る変更を発生させ得る。さらなる例として、コーディネータ114は、被調整デバイス112の状態を変更するべき基準をユーザが指定することを可能にし、次に、基準が満たされるときに被調整デバイス112の状態を自動的に変更するように動作し得る。下記に説明されるように、コーディネータ114の多くの機能は、タスクによって確立され得、ユーザによって所望されるように、これらの機能の即時の変更を可能にする。
クライアントデバイス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上のオンデマンドな動的実行と共に、コーディネータ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)、テープドライブ、または任意のそれらの組み合わせ等の任意の永続的データストアまたは実質的に永続的データストアに対応することができる。デバイスシャドウの使用に関するさらなる詳細は、「Device Representation Management Using Representation Types」と題し、2016年6月29日に出願された米国特許出願第15/196,700号(「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上で実行するために「トリガ」され得る。一実施形態では、クライアントデバイス102または他のコンピューティングデバイスは、タスクを実行する要求を伝達し得、それは、一般的に、タスクを実行する「呼び出し」と称され得る。係る呼び出しは、実行されるユーザコード(または、その場所)と、ユーザコードを実行するために使用される1つ以上の引数とを含み得る。例えば、呼び出しは、タスクを実行する要求と一緒にタスクのユーザコードを提供し得る。別の例では、呼び出しは、その名前または識別子によって事前にアップロードされたタスクを識別し得る。さらなる別の例では、タスクに対応するコードは、タスクに関する呼び出しに含まれ得、要求がコーディネータ114またはオンデマンドコード実行システム150によって受信される前に、別個の場所(例えば、コーディネータ114のストレージ、ネットワークアクセス可能なストレージサービス、またはタスクデータストア154)にアップロードされる。コーディネータ114またはオンデマンドコード実行システム150の要求インタフェースは、ユーザから、ハイパーテキスト転送プロトコルセキュア(HTTPS)要求としてタスクを実行する呼び出しを受信し得る。また、HTTPS要求に含まれる任意の情報(例えば、ヘッダおよびパラメータ)も、タスクを実行するときに処理および利用され得る。上記に説明したように、例えば、HTTP、MQTT、およびCoAPを含む任意の他のプロトコルは、要求インタフェース122にタスク呼び出しを含有するメッセージを転送するために使用され得る。
タスクを実行する呼び出しは、タスクに対応するユーザコードと一緒に使用される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は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ250は、プロセスマネージャ254、スケジューラ256、配置エージェント258、および通信マネージャ260を含む。
スケジューラ256および配置エージェント258は、プロセシングユニット204による実行のためのタスクを選択し、係るタスク実行を管理するようにプロセシングユニット204によって実行され得る。具体的には、スケジューラ256は、(例えば、コーディネータ114において制約されたリソースのインスタンスの下で)所与の時点における実行のためのタスクを選択し、タスクの実行を中断する命令を含み得る。配置エージェント258は、タスクを実行するための適切な実行環境270を選択し、当該実行環境270に、タスク実行中に必要なリソースへの適切なアクセスをプロビジョニングし、実行環境270内でタスクの実行を生じさせる命令を含み得る。本明細書で使用されるような実行環境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によって実行されるタスクは、タスクメモリ空間280内で論理的にグループ化されるものとして示され、タスクメモリ空間280は、各タスクに対応するコードを記憶するように構成されているメモリ250の論理ユニットに対応し得る。図2に示されるように、タスクメモリ空間280は、ルータタスク282、1つ以上の通信マネージャタスク286、シャドウサービスタスク288、および1つ以上のクライアントにより提供されるタスク290を含む、コーディネータ114の機能性を実施するようにプロセシングユニット204によって実行可能ないくつかのタスクを含み得る。
ルータタスク282は、コーディネータ内での、コーディネータへの、およびコーディネータからのメッセージのルーティングを支援するように実行可能なコードの一部に対応し得る。一実施形態では、ルータタスク282は、メッセージに関する適切な宛先を判定するために「ルーティングテーブル」を実装する。例えば、通信マネージャ260は、(例えば、タスク実行による生成、または入力/出力インタフェース208における受信に起因して)ルータタスク282に、コーディネータ114において取得されたメッセージを転送し得、ルータタスク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は、コーディネータ114に対してローカルにデバイスシャドウサービス140によって提供されるものと同様の機能性を実施することができる。したがって、シャドウサービスタスク288は、被調整デバイス112のシャドウ状態(所望の状態を表すデータ)を維持し、係るデータへの読み出しまたは書き込みを可能にし得る。シャドウサービスタスク288は、さらに、被調整デバイス112に関するデバイスシャドウとの被調整デバイス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を修正するように実行可能なコードに対応することができる。
図3Aは、本出願に従った、例示的な被調整デバイス112Aのアーキテクチャの一実施形態を示す。図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つ以上の実施形態を実装するために、プロセシングユニット304が実行するコンピュータプログラム命令を含み得る。メモリ310は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。メモリ310は、被調整デバイス112Aの一般管理および動作においてプロセシングユニット304による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム314を記憶し得る。メモリ310は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ310は、コンテンツにアクセスするためのブラウザアプリケーション316を含む。例示として、ブラウザアプリケーション316は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を包含し得る、または単に、データ接続性を提供するソフトウェアアプリケーション(または実行可能命令)であり得る。
図3Bは、本出願に従った、例示的な被調整デバイス112Bの代替アーキテクチャの一実施形態を示す。図3Bに示される被調整デバイス112Bの一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアコンポーネントの配列を含む。しかしながら、被調整デバイス112Bは、被調整デバイス112Bの計算機能および動作を制限し得る少なくなったコンポーネントと関連付けられ得る。例示として、被調整デバイス112Bは、通信バスと通信する、プロセシングユニット350およびネットワークインタフェース352を含む。図3Aの被調整デバイス112BAとは異なり、被調整デバイス112Bは、コンピュータ可読媒体ドライブ、入力/出力デバイスインタフェース、任意選択のディスプレイ、または入力デバイスを有さない場合がある。
ネットワークインタフェース352は、図1のネットワーク104等の1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット350は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。メモリ354は、1つ以上の実施形態を実装するために、プロセシングユニット350が実行するコンピュータプログラム命令を含み得る。メモリ354は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。本実施形態では、メモリ354は、被調整デバイス112Bの一般管理および動作においてプロセシングユニット350による使用のためのコンピュータプログラム命令を提供する完全なオペレーティングシステムを必ず記憶し得る。むしろ、一実施形態では、メモリ354は、命令にアクセスし、命令を受信し、命令を処理するためのインタフェースソフトウェアコンポーネント356を含む。
図4は、本出願に従った、例示的なクライアントデバイス102のアーキテクチャの一実施形態を示す。図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つ以上の実施形態を実装するために、プロセシングユニット404が実行するコンピュータプログラム命令を含み得る。メモリ410は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。メモリ410は、クライアントデバイス102の一般管理および動作においてプロセシングユニット404による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム414を記憶し得る。メモリ410は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ410は、コンテンツにアクセスするためのブラウザアプリケーション416を含む。例示として、ブラウザアプリケーション416は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を包含し得る、または単に、データ接続性を提供するソフトウェアアプリケーション(または実行可能命令)であり得る。
図5は、本明細書に説明されるメッセージ処理サービスコンポーネントを実装するための例示的コンピューティングデバイスのアーキテクチャの一実施形態を示す。前述に説明したように、当該環境内の1つ以上のコンピューティングデバイスは、MQTTブローカー等のメッセージ処理サービスとして機能し得る。他の実施形態では、メッセージ処理サービスは、ネットワークコンポーネントに実装され得る。したがって、図5に示されるメッセージ処理サービスの一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアコンポーネントの配列を含む。例示されるように、リモートコマンドサービス114は、プロセシングユニット504、ネットワークインタフェース506、コンピュータ可読媒体ドライブ507、入力/出力デバイスインタフェース520、任意選択のディスプレイ502、および入力デバイス524を含み、それらの全ては、通信バスによって相互に通信し得る。リモートコマンドサービス114のコンポーネントは、物理ハードウェアコンポーネントであり得る、または仮想環境内で実装され得る。
ネットワークインタフェース506は、図1のネットワーク150等の1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット504は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。プロセシングユニット504はまた、メモリ510におよびメモリ510から通信し、さらに、入力/出力デバイスインタフェース520を介して、任意選択のディスプレイ502に出力情報を提供し得る。入力/出力デバイスインタフェース520は、また、キーボード、マウス、デジタルペン等の任意選択の入力デバイス524から入力を受け得る。いくつかの実施形態では、リモートコマンドサービス114は、図5に示されるものよりも多い(または、少ない)コンポーネントを含み得る。例えば、リモートコマンドサービス114のいくつかの実施形態は、ディスプレイ202および入力デバイス224を省略し得る一方、1つ以上の代替通信チャネルを経由して(例えば、ネットワークインタフェース506を介して)入力/出力能力を提供する。
メモリ510は、1つ以上の実施形態を実装するために、プロセシングユニット504が実行するコンピュータプログラム命令を含み得る。メモリ510は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。メモリ510は、中間サーバ114の一般管理および動作において、プロセシングユニット504による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム514を記憶し得る。メモリ510は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ510は、クライアントデバイス102からコンテンツ要求を受信および処理するためのクライアントインタフェースソフトウェア512を含む。加えて、メモリ510は、通信において受信される埋め込みコードを処理するための埋め込みコード処理コンポーネント516を含む。例示として、埋め込みコード処理コンポーネント516は、埋め込みコードをパースするためにトピック部通信を処理するための命令と、指定コードのために構成されているアクションまたは機能を実施するための命令とを含み得る。
ここで、図6A〜図6Dを参照して、コンテンツメッセージを処理するコンテンツ管理システム110のコンポーネント間の相互作用の例を説明する。より具体的には、図6A〜図6Cは、被調整デバイス112、クライアントデバイス102、およびメッセージ処理サービス600の間の相互作用に関して説明される。前述に示したように、メッセージ処理サービス600は、コーディネータ114または他のネットワーク機器を含む、様々なデバイスによって実施されることができる。加えて、被調整デバイス112は、被調整デバイス112(図3A)、被調整デバイス112(図3B)、またはそれらの組み合わせに対応することができる。しかしながら、相互作用の参照は、例示の目的のために使用される場合でも、任意の特定のデバイスまたはデバイスの組み合わせに限定されるべきではない。
図6Aを参照して、メッセージ処理サービス600の初期構成を説明する。例示として、クライアントまたはシステムアドミニストレータは、受信された通信のトピック部の埋め込みコードの解釈を容易にする情報を伴うメッセージ処理サービス600を構成する。例示的環境に従って、通信ネットワーク104にわたってメッセージを伝達するために利用される実際の通信プロトコルに関わらず、MQTTメッセージングプロトコルに従って、通信を形成することができる。MQTTプロトコルに特有であるように、各メッセージは、通信を定義する1つ以上のレベルを有するトピック部と関連付けられる、またはそれ以外の場合、当該通信と関連付けられる。下記の例は、第1のレベル「基本レベル」、次に、一連の追加レベル「レベル1」〜「レベルn」を含む。各追加レベルは、トピックセパレータによって示される。
基本レベル/レベル1/レベル2/レベル3..../レベルnのように示される。
前述に説明したように、従来のMQTTプロトコルでは、メッセージを受信するメッセージ処理サービス600は、トピックごとに発行されるメッセージを受信するために登録している1つ以上の受信側デバイスと、トピックを一致させることを試みる。メッセージ処理サービス600は、全てのレベルの完全一致または1つ以上のレベルの部分一致に対する判定を限定し得る。
本出願に従って、通信の主題を記載する複数のレベルの従来の識別に加えて、通信のトピック部は、1つ以上の埋め込みコードまたは命令を含む。埋め込みコードまたは命令は、トピックセパレータによって示されるトピック部のレベルの形式であり得る。埋め込みコードは、それを追加レベルよりもむしろ埋め込みコードとして識別するキーワードまたは文字を含み得る。他の実施形態では、埋め込みコードは、トピック部の特定の場所(例えば、第1のレベル)に割り当てられることができる。係るトピック部の例は、限定ではないが、以下のものを含み得る。
コード/基本レベル/レベル1/レベル2/レベル3..../レベルn
コード....コード/基本レベル/レベル1/レベル2/レベル3..../レベルn
特殊文字_コード/基本レベル/レベル1/レベル2/レベル3..../レベルn
ここで、図6Aを参照すると、(1)において、アドミニストレータまたはカスタマに対応するクライアンデバイス102は、構成情報をメッセージ処理サービス600に伝達することができる。例示として、構成情報は1つ以上の命令、論理ルール、またはアクションのセットを定義する処理ステップに対応し、メッセージ処理サービス600は受信済メッセージのトピック部の埋め込みコードまたは識別子の一致に基づいてメッセージを引き受けることができる。例えば、メッセージ処理サービス600の1つの構成は、ネットワーク接続性が利用可能ではない場合、あてがわれたタスクに対応する通信がローカル被調整デバイス112によって実施されるべきかどうかの定義、または、ネットワーク接続性が利用可能である場合、あてがわれたタスクをネットワークデバイスによって実施するべきであるかどうかの定義を含み得る。この例では、両方のデバイスは、対応するトピックを伴うコンテンツメッセージを受信するためにサブスクライブされ得るが、メッセージを受信する当該デバイスは、埋め込みコードによって識別されるルールの評価に依存し得る。
別の例では、メッセージ処理サービス600は、以下の情報を取得するための命令に対応する1つ以上の埋め込みコードの識別に基づいて、コスト情報、ルーティング情報、仕事量、サービスレベル情報等の追加情報を取得するように構成され得る。またさらなる例では、メッセージ処理サービス600は、係る修正を遂行するために実行可能コードまたは命令を実行することをメッセージ処理サービス600に命令する埋め込みコードの取得に基づいて、受信済メッセージのペイロード部の部分を修正するように構成され得る。例示として、ペイロード部の修正は、基準の評価または実行可能コードの追加/除外に基づいて、実行可能コードの特定部分の選択を含み得る。例えば、メッセージ処理サービス600は、時間的基準(例えば、正午前)に基づいて、または同じ停止条件(例えば、別のデバイスがコードの実行を完了したなど)に基づいて、コードの第1の部を実行し得る。この点では、メッセージングプロトコルの従来の実施におけるメッセージ処理サービス600は、受信済メッセージの任意の追加処理を行わない。加えて、本出願の態様に従って、メッセージ処理サービス600は、クライアントデバイス102を介してアドミニストレータによって指定されるような多様な追加機能で構成され得る。
(2)において、メッセージ処理サービス600は、構成情報を処理し、後続処理に関する構成を記録する。この点では、メッセージ処理サービス600は、一致のために埋め込みコードのデータベースまたはマトリックスを維持することができる。加えて、メッセージ処理サービス600は、一致する埋め込みコードが識別されるときに実行される追加処理命令または実行可能コードを維持することができる。他の実施形態では、メッセージ処理サービス600は、埋め込みコードが識別されるときに、係るAPI等のインタフェースを利用する追加命令または実行可能コードを取得することができる。
図6Bを参照して、受信側デバイスの初期構成、被調整デバイス112’および112’’を説明する。(1)において、被調整デバイス112’および112’’は、デバイス接続要求を生成し、要求をメッセージ処理サービス600に伝達する。例示として、デバイス接続要求は、メッセージ処理サービス600で、被調整デバイス112’および112’’の認証および承認と関連付けられる手順を確立するように対応する。またさらに、いくつかの実施形態では、論理ネットワーク100は、独立して、またはコンテンツ管理システム110の一部として、メッセージ処理サービス600へのメッセージの伝達を管理する追加ゲートウェイコンポーネントを含み得る。係るゲートウェイコンポーネントは、セキュリティ機能、ロードバランシング、または他のネットワーク処理サービスを実装することができる。
(2)において、メッセージ処理サービス600は、例えば、セキュリティ情報を有効にすることによって、追加情報を要求することによって、または要求を行っているクライアントコンピューティングデバイス102の特徴を判定すること等によって、接続要求を処理する。(3)において、接続要求が受け入れ可能で承認された場合、メッセージ処理サービス600は、接続確認を、要求を行っているメッセージ処理サービス600に伝達する。この点では、いったん承認されると、クライアントコンピューティングデバイスおよびメッセージ処理サービス600は、MQTT等のメッセージングプロトコルに定義される手順の範囲内で通信を始めることができる。
ここで、図6Cを参照すると、接続確認を受信した後、(1)において、被調整デバイス112’および112’’は、1つ以上のトピック登録要求をメッセージ処理サービス600に伝達する。例示として、トピック登録は、メッセージングプロトコルに従って定義され、その結果、被調整デバイス112’および112’’は、任意の数のコンテンツプロバイダによる指定トピックに従って発行されたコンテンツを受信するために登録することができる。本出願に適用されるように、被調整デバイス112’および112’’は、1つ以上のトピックを登録する。例示の目的のために、登録済被調整デバイス112’および112’’へのメッセージの転送がメッセージの埋め込みコードに基づいて異なるように、例を提供する。
登録後のある時点で、(2)において、別個のコンピューティングデバイス602は、1つ以上の部分的コンテンツをメッセージ処理サービス600に発行する。例示として、コンピューティングデバイス600は、被調整デバイス、ネットワークベースデバイス等に対応することができる。コンテンツのそれぞれの発行された部分は、トピックと関連付けられる。例示的な例の目的のために、少なくとも1つの発行済コンテンツは、コンテンツ/メッセージのトピック部の埋め込みコードと関連付けられる。
(3)において、メッセージ処理サービス600は、クライアントコンピューティングデバイス102が更新トピックを伴う発行済コンテンツを受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させる。(4)において、メッセージ処理サービス600は、通信のトピック部をパースし、1つ以上の埋め込みコードを識別する。いくつかの実施形態では、メッセージ処理サービス600は、トピック部をパースする機能性を含み得る。他の実施形態では、メッセージ処理サービス600は、追加サービスまたは追加コンポーネントを利用して、パースを容易にすることができる。
(5)において、メッセージ処理サービス600は、パースされた埋め込みコードを処理する。上記に説明したように、メッセージ処理サービス600は、埋め込みコードを一致させ、次に、一致した埋め込みコードに基づいて構成されているコードまたは命令を実行することができる。メッセージルーティング機能に関する埋め込みコードを利用する例示の目的のために、図6Dを参照すると、(6)において、メッセージ処理サービス600は、メッセージを調整デバイス112’’に転送することができ、被調整デバイス112’に転送することができない。例えば、埋め込みコードが、ネットワーク接続性が被調整デバイス112’および112’’において利用可能であるかどうかの判定に対応する場合、メッセージ処理サービス600として機能するコーディネータコンポーネント114は、ネットワークベースのタスクプロセッサよりもむしろ、タスクに対応するメッセージは、ローカル被調整デバイスに送信されるべきであると判定することができる。
前述に説明したように、他の実施形態では、受信側デバイスは、また、メッセージのトピック部で埋め込みコードまたは他の情報を処理するように構成され得る。上記に説明した処理と同様に、この点では、調整デバイス112’’は、メッセージ処理サービス600として機能し、(6)においてメッセージのトピック部をパースし、(7)においてパース済埋め込みコードを処理することができる。上記に説明したように、メッセージ処理サービス600は、埋め込みコードを一致させ、次に、一致した埋め込みコードに基づいて構成されているコードまたは命令を実行することができる。加えて、例示的な例のこの箇所では、被調整デバイス112’’は、例えば、実行可能コード部を修正することによって、指定の実行可能コード部を除外または選択することによって、タイミング考察を実行可能部の実行に適用することによって、前提条件として論理ルールを適用しまたは追加基準を検討し、コード部を実行すること等によって、メッセージのペイロード部を処理する埋め込みコードを利用することができる。図6Dがメッセージのルーティングに影響を及ぼす埋め込みコードの処理と、埋め込みコードを利用するペイロードの処理とを示すが、両方の実施形態が一緒に実施される必要がないことを、当業者は認識するであろう。したがって、ルーティングに影響を及ぼす埋め込みコードの処理は、受信側デバイスによって埋め込みコードの追加処理なしで実施され得る。同様に、受信側デバイスによる埋め込みコード情報の処理は、ルーティングに影響を及ぼす埋め込みコードの利用を要求することなく実施され得る。図7は、例示的環境に従って、メッセージ処理サービス600によって実施されるリモート実行メッセージングルーチン700を示すフロー図である。ルーチン700は、メッセージルーティング中、メッセージングプロトコルの埋め込みコード情報の利用を示す。ブロック702において、メッセージ処理サービス600は、被調整デバイス112または任意の他のコンピューティングデバイス102等のデバイスによるコンテンツのリモート実行に関連する少なくとも1つのトピックを含む登録情報を取得する。先に説明したように、本デバイスは、1つ以上のトピック登録要求をメッセージ処理サービス600に伝達する。例示として、トピック登録は、メッセージングプロトコルに従って定義され、その結果、本デバイスは、任意の数のコンテンツプロバイダによる指定トピックに従って発行されたコンテンツを受信するために登録することができる。
登録後のある時点で、ブロック704において、メッセージ処理サービス600は、トピック部を有する1つ以上の発行を取得する。例示として、いくつかのコンピューティングデバイス602(図6C)は、1つ以上の部分的コンテンツをメッセージ処理サービス600に発行する。コンテンツのそれぞれの発行された部分は、トピックと関連付けられる。例示的な例の目的のために、少なくとも1つの発行済コンテンツは、クライアントコンピューティングデバイス102の登録済トピックに対応する埋め込みコードと関連付けられる。加えて、トピックと関連付けられるコンテンツのそれぞれの発行された部分は、コンテンツのペイロード部を含む。係るペイロード部の例は、被調整デバイスまたはネットワークデバイスによって実行されるタスクを含み得る。
ブロック706において、メッセージ処理サービス600は、1つ以上のデバイスが発行済トピックを受信するべきクライアントデバイスのセットを形成するトピックを伴う発行済コンテンツを受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させる。例示として、メッセージ処理サービス600がMQTT等のメッセージングプロトコルに従って構成されているため、トピック発行に対する登録の一致は、メッセージングプロトコルによって指図される方式で達成することができる。
ブロック708において、メッセージ処理サービス600は、メッセージのトピック部の1つ以上の埋め込みコードを識別する。例示として、メッセージ処理サービス600は、通信のトピック部をパースし、1つ以上の埋め込みコードを識別する。いくつかの実施形態では、メッセージ処理サービス600は、トピック部をパースする機能性を含み得る。例えば、メッセージ処理サービス600は、ルックアップテーブルを利用して、対応する埋め込みコードを識別することができる。他の実施形態では、メッセージ処理サービス600は、追加サービスまたは追加コンポーネントを利用して、パースを容易にすることができる。
ブロック710において、メッセージ処理サービス600は、パースされた埋め込みコードを処理する。上記に説明したように、メッセージ処理サービス600は、埋め込みコードを一致させ、次に、一致した埋め込みコードに基づいて構成されているコードまたは命令を実行することができる。様々な例は、限定ではないが、メッセージを受信する登録済デバイスの選択、メッセージの伝達に関連するタイミング、メッセージの修正、追加基準の検討等を含む、埋め込みコードの処理の結果の点で識別されている。
ブロック712において、メッセージ処理サービス600は、発行済コンテンツを伝達する。同様に、発行済コンテンツの伝達は、MQTT等のメッセージングプロトコルの手順および能力に従って行われ、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。他の例では、メッセージ処理サービス600は、別個のトランスポートプロトコルを利用することができる。受信側デバイスは、受信された発行済コンテンツを処理する。
ブロック714において、メッセージ処理サービス600は、メッセージの処理に対応する処理結果を取得する。例示として、クライアントコンピューティングデバイスは、メッセージングプロトコルを介して、コードの処理結果を示す情報に関連するコンテンツを生成および発行する。いくつかの実施形態では、処理結果は、コードの実行が行われたことが成功したかどうかのバイナリ判定に対応することができる。別の実施形態では、処理結果は、コード/命令の実行を示す1つ以上の値、またはコード/命令の実行についての情報を詳述するログを含み得る。更新トピックの発行とともに説明したものと同様の様式で、処理結果(複数可)の発行は、特定のトピック(概して「処理結果トピック」と称される)と関連付けられ得る。
ブロック716において、メッセージ処理サービス600は、管理デバイス104が処理結果トピックを伴う発行済コンテンツを受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させ、発行済コンテンツを伝達する。例示として、発行済コンテンツの伝達は、また、MQTT等のメッセージングプロトコルの手順および能力に従って行われ、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。ブロック720において、ルーチン600は終了する。
図8は、例示的環境に従って、被調整デバイス112または他のコンピューティングデバイスによって実施されるリモート実行メッセージングルーチン800を示すフロー図である。前述に説明したように、本出願では、被調整デバイス112または他のコンピューティングデバイスは、他のコンポーネントがまたメッセージのルーティングで埋め込みコード情報を利用したかどうかに関係なく、メッセージの処理において埋め込みコード情報を利用するようなメッセージ処理サービス600として考えられ得る。しかしながら、この例の被調整デバイス112の識別は、ルーチン800の適用を限定するものとして解釈されるべきではない。ブロック802において、被調整デバイス112は、1つ以上のトピック登録要求をメッセージ処理サービス600に伝達する。上記に説明したように、トピック登録は、メッセージングプロトコルに従って定義され、その結果、被調整デバイス112は、任意の数のコンテンツプロバイダによる指定トピックに従って発行されたコンテンツを受信するために登録することができる。
発行済コンテンツを受信したことに応答して、メッセージ処理サービス600は、クライアント被調整デバイス112が更新トピックを伴う発行済コンテンツを受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させる。前述に説明したように、メッセージ処理サービス600は、また、トピック部の任意の埋め込みコードを処理する。ブロック804において、被調整デバイス112は、メッセージ処理サービス600から発行済コンテンツを受信する。例示として、発行済コンテンツの伝達は、MQTT等のメッセージングプロトコルの手順および能力に従って行われ、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。
コンテンツの実行のうちの実行の一部として、またはコンテンツの実行の後に、ブロック806において、被調整デバイス112は、埋め込みコードを処理し、リモート実行の結果を取得する。いくつかの実施形態では、処理結果は、コードの実行が行われたことが成功したかどうかのバイナリ判定に対応することができる。別の実施形態では、処理結果は、コード/命令の実行を示す1つ以上の値、またはコード/命令の実行についての情報を詳述するログを含み得る。いくつかの実施形態では、被調整デバイス112は、また、埋め込みコードを利用して、メッセージのペイロード部をどのように処理するかを修正することができる。係る例では、被調整デバイス112は、メッセージ処理サービス600に起因する機能性と同様の機能性を実施し、埋め込みコードをパースし、結果を実施することができる。例えば、被調整デバイス112は、例えば、実行可能コード部を修正することによって、指定の実行可能コード部を除外または選択することによって、タイミング検討を実行可能部の実行に適用することによって、前提条件として論理ルールを適用しまたは追加基準を検討し、コード部を実行すること等によって、メッセージのペイロード部を処理する埋め込みコードを利用することができる。
ブロック808において、被調整デバイス112は、メッセージングプロトコルを介して、コードの処理結果を示す情報に関連するコンテンツを発行する。例示として、発行済コンテンツの伝達は、MQTT等のメッセージングプロトコルの手順および能力に従って行われ、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。ブロック810において、ルーチン800は終了する。
図9は、コーディネータ914が被調整デバイス912を制御するように動作し得る1つ以上の被調整環境910と、(例えば、被調整デバイス912の状態の変更を要求するために)被調整環境910と相互作用し得るクライアントデバイス902と、様々な被調整環境910内でコーディネータ914との通信またはコーディネータ914の構成を支援し得るサービスプロバイダ環境920とを含む、例示的動作環境900のブロック図である。
被調整環境910、クライアントデバイス、およびサービスプロバイダ環境920は、ネットワーク904を介して通信し得、ネットワーク904は、いずれかの有線ネットワーク、無線ネットワーク、またはそれらの組み合わせを含み得る。例えば、ネットワーク904は、パーソナルエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、無線ブロードキャストネットワーク(例えば、ラジオまたはテレビのためのもの)、ケーブルネットワーク、衛星ネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであり得る。さらなる例として、ネットワーク904は、インターネット等の様々な異なった関係者によって運営される可能性がある、リンクされたネットワークの公然にアクセス可能なネットワークであり得る。いくつかの実施形態では、ネットワーク904は、企業または大学のイントラネット等のプライベートまたはセミプライベートネットワークであり得る。ネットワーク904は、グローバルシステムフォーモバイルコミュニケーションズ(GSM)ネットワーク、符号分割多重アクセス(CDMA)ネットワーク、ロングタームエボリューション(LTE)ネットワーク、または任意の他の種類の無線ネットワーク等の1つ以上の無線ネットワークを含み得る。ネットワーク904は、インターネットまたは他の上述した種類のネットワークのいずれかを介して通信するためのプロトコルおよびコンポーネントを使用することができる。例えば、ネットワーク904によって使用されるプロトコルは、ハイパーテキスト転送プロトコル(HTTP)、HTTPセキュア(HTTPS)、MQTT、およびコンストレイントアプリケーションプロトコル(CoAP)等を含み得る。インターネットまたは他の上述した種類の通信ネットワークのいずれかを介して通信するためのプロトコルおよびコンポーネントは、当業者に十分に既知であり、ひいては、本明細書でさらに詳細に説明されない。ネットワーク904の全てのコンポーネントが図9に示されているが、ルータ等の1つ以上のコンポーネントは、メッセージ処理サービスとして機能し得る。
被調整環境910のそれぞれは、実行環境910のネットワーク(ネットワークは図9に示されない)を介して通信する、コーディネータ914および任意の数の被調整デバイス912を含み得る。被調整環境910内のそれらの関連付けのために、所与の環境910内の被調整デバイス912およびコーディネータ914は、通信ネットワークの点で、相互に「ローカル」であると考えられ得る。例えば、所与の環境910内の被調整デバイス912およびコーディネータ914は、LANまたは他の局所化された通信ネットワークを介して接続され得る。
被調整デバイス912のそれぞれは、コーディネータ914と通信して、被調整デバイス912の機能性を管理するように構成されているコンピューティングデバイスに対応することができる。いくつかの例では、被調整デバイス912は、ロバストな局所化されたユーザインタフェース能力を伴う、ラップトップ、デスクトップ、スタンドアロンメディアプレイヤ等の十分に特徴付けられたコンピューティングデバイスに対応することができる。他の例では、被調整デバイス912は、家庭用器具またはデバイス(冷蔵庫、洗濯機、湯沸し器、加熱炉、ドアロック、照明バルブ、電気コンセント、電気スイッチ等)内に埋め込まれた、またはそれらに付属品として取り付けられたデバイス等の別の主要機能と関連付けられるシンデバイスまたは埋め込みデバイスに対応することができる。係る器具またはデバイスは、いくつかのコンテキストでは、「スマート」デバイス、IoTデバイス、または「接続」デバイスと称される。したがって、被調整デバイス912は、制限されたローカルユーザインタフェースを含み、リモート管理のために構成され得る。いくつかの例では、被調整デバイス912は、ステートフルであり得、命令に応答してそれらの状態を変えるように動作し得る(例えば、「オフ」から「オン」に変化させること等によって変わる)。
さらに下記に詳細に説明されるように(例えば、図10に関して)、コーディネータ914は、被調整デバイス912に伝達された命令が被調整環境910の外側に伝わることを要求することなく(従って、係る命令のセキュリティが強化され、その伝達速度が速くなる)、被調整デバイス912の動作を調整、管理、または制御する命令を実行するコンピューティングデバイスに対応することができる。具体的には、コーディネータ914は、被調整デバイス912、クライアントデバイス902、およびサービスプロバイダネットワーク920のデバイスの任意の組み合わせの間の通信を管理するように集合的に構成されているプロセッサおよびメモリを含み得る。コーディネータは、さらに、サービスプロバイダ環境920のオンデマンドコード実行環境920と同様の方式で、タスクの実行を可能にするように構成され得る。これらのタスクは、被調整デバイス912、クライアントデバイス902、およびサービスプロバイダネットワーク920のデバイスと通信することを含む、様々なユーザにより定義された機能性またはユーザにより定義されていない機能性を実施し得る。したがって、コーディネータ914は、被調整デバイス912の手動制御、自動制御、または半自動制御を可能にするように構成され得る。例えば、コーディネータ914は、クライアントデバイス902が、被調整デバイス912の状態を変更する要求を伝達することを可能にし、状態の係る変更を発生させ得る。さらなる例として、コーディネータ914は、被調整デバイス912の状態を変更するべき基準をユーザが指定することを可能にし、次に、基準が満たされるときに被調整デバイス912の状態を自動的に変更するように動作し得る。下記に説明されるように、コーディネータ914の多くの機能は、タスクによって確立され得、ユーザによって所望されるように、これらの機能の即時の変更を可能にする。
クライアントデバイス902は、ユーザが被調整環境910、サービスプロバイダ環境920、またはそれらの両方と通信することを可能にする、様々なコンピューティングデバイスを含み得る。概して、クライアントデバイス902は、デスクトップ、ラップトップもしくはタブレットコンピュータ、パーソナルコンピュータ、ウェアラブルコンピュータ、サーバ、携帯情報端末(PDA)、ハイブリッドPDA/携帯電話、携帯電話、電子ブックリーダ、セットトップボックス、ボイスコマンドデバイス、カメラ、およびデジタルメディアプレイヤ等の任意のコンピューティングデバイスであり得る。サービスプロバイダ環境920は、コーディネータ914に関する構成をサブミットし、当該構成の配置を制御し、コーディネータ914上またはサービスプロバイダ環境920のオンデマンドコード実行環境950上で実行されるタスクに対応するコードをサブミットし、コーディネータ914に関連する情報のロギングまたは監視を参照する等のために、サービスプロバイダ環境920と相互作用するための1つ以上のユーザインタフェース、コマンドラインインタフェース(CLI)、アプリケーションプログラミングインタフェース(API)、および/または他のプログラムインタフェースをクライアントデバイス902に提供し得る。同様に、コーディネータ914は、被調整デバイス912の状態を読み出し、被調整デバイス912の状態の変更を要求し、コーディネータ914がタスクの実行を生じさせることを要求する等のために、コーディネータ914と相互作用するための1つ以上のユーザインタフェース、コマンドラインインタフェース(CLI)、アプリケーションプログラミングインタフェース(API)、および/または他のプログラムインタフェースをクライアントデバイス902に提供し得る。1つ以上の実施形態がユーザインタフェースを使用するとして本明細書に説明され得るが、係る実施形態は、加えてまたは代わりに、任意のCLI、API、または他のプログラムインタフェースを使用し得ることを認識されたい。
サービスプロバイダ環境920は、コーディネータ914の構成、コーディネータ914の管理、およびコーディネータ914との通信を可能にするいくつかの要素を含み得る。具体的には、サービスプロバイダ環境920は、サービスプロバイダ環境920へのコーディネータ914の登録および係るコーディネータ914の構成を可能にする管理および配置サービス930と、コーディネータ914および被調整デバイス912の状態へのロバストな変更を可能にするデバイスシャドウサービス940と、コーディネータ914上のタスクのオンデマンドな動的実行と共に、コーディネータ914上のタスクの配置およびプロビジョニングを提供するオンデマンドコード実行環境950とを含む。
図9に示されるように、管理および配置サービス930は、管理および配置サービス930へのコーディネータ914の登録、コーディネータ914に関する構成の生成、およびコーディネータ914への構成データの伝送を可能にするように集合的に動作し得る、クライアントおよびデータインタフェース932と、構成データストア934とを含む。例示として、クライアントおよびデータインタフェース932は、1つ以上のユーザインタフェース(例えば、API、CLI、GUI等)を提供し得、1つ以上のユーザインタフェースを経由して、ユーザは、クライアントデバイス902を介して、構成データストア934に記憶するために、コーディネータ914の構成を生成またはサブミットし得る。クライアントおよびデータインタフェース932は、さらに、1つ以上のインタフェースを提供し得、1つ以上のインタフェースを経由して、コーディネータ914は構成を取得し得、その結果、コーディネータ914は、取得された構成に従って再構成される。構成データストア934は、ハードドライブ(HDD)、ソリッドステートドライブ(SDD)、ネットワーク接続ストレージ(NAS)、テープドライブ、または任意のそれらの組み合わせ等の任意の永続的データストアまたは実質的に永続的データストアに対応することができる。
デバイスシャドウサービス940は、コーディネータ914または被調整デバイス912等のデバイスの「シャドウ状態」を作成し、維持し、読み取り、変え、または削除することを可能にする要素を含み得る。上記に説明したように、シャドウ状態は、対応するデバイスの所望の状態を表すデータに対応し得、対応するデバイスは、デバイスの現在の状態を反映し得る、または反映しない場合がある。例えば、コーディネータ914に関して、シャドウ状態は、コーディネータ914に関する所望の構成バージョンを含み得る。被調整デバイス912に関して、シャドウ状態は、被調整デバイス912の所望の状態(例えば、スイッチまたはバルブに関するオンまたはオフ、ロックに対してロックされまたはロックされていない、温度調節器に関する所望の温度等)を含み得る。デバイスシャドウサービス940は、ユーザまたは他のエンティティが、クライアントデバイス902を介して、デバイスに関するシャドウ状態から読み出す、またはデバイスに関するシャドウ状態を修正することを可能にし得、さらに、デバイスをシャドウ状態に同期するように当該デバイスと相互作用し得る。例示として、デバイスシャドウサービス940は、インタフェース942(例えば、API、CLI、GUI等を含み得る)を含み得、インタフェース942を経由して、シャドウ状態から読み出し、シャドウ状態に記述し、シャドウ状態を作成または削除する要求が受信され得、シャドウデータストア944は、シャドウ状態を記憶するように構成され得る。シャドウデータストア934は、ハードドライブ(HDD)、ソリッドステートドライブ(SDD)、ネットワークアタッチドストレージ(NAS)、テープドライブ、または任意のそれらの組み合わせ等の任意の永続的データストアまたは実質的に永続的データストアに対応することができる。デバイスシャドウの使用に関するさらなる詳細は、「Device Representation Management Using Representation Types」と題し、2016年6月29日に出願された米国特許出願第15/196,700号(「700出願」)の中に見ることができ、その全体が参照によって本明細書に組み込まれる。
オンデマンドコード実行環境950は、タスク(例えば、ポータブルコードセグメント)のオンデマンド実行を提供するいくつかのデバイスを含み得る。具体的には、オンデマンドコード実行環境950は、フロントエンド952を含み得、フロントエンド952を経由して、ユーザは、クライアントデバイス902を介して、オンデマンドコード実行環境950にタスクをサブミットし、オンデマンドコード実行環境950上でタスクの実行を呼び出し得る。係るタスクは、例えば、タスクデータストア954に記憶され得、タスクデータストア954は、ハードドライブ(HDD)、ソリッドステートドライブ(SDD)、ネットワーク接続ストレージ(NAS)、テープドライブ、または任意のそれらの組み合わせ等の任意の永続的データストアまたは実質的に永続的データストアに対応することができる。図9に示されていないが、オンデマンドコード実行システム950は、いくつかの実行環境等のタスクの実行を可能にする様々な追加コンポーネント(例えば、オンデマンドコード実行環境950の物理ホストデバイス上で実行するコンテナまたは仮想マシン)、係る実行環境を管理するワーカマネージャ、および即時ベースで(例えば、10ミリ秒を下回る時間で)ワーカマネージャに、実行環境を利用可能にすることを支援するウォーミングプールマネージャを含み得る。オンデマンドコード実行環境に関するさらなる詳細は、上記の参照によって組み込まれる「556特許」の中に見ることができる。
上記に述べられたように、タスクは、オンデマンドコード実行環境950およびコーディネータ914の両方において利用され得る。上記に述べられたように、タスクは、(例えば、特定の機能を達成するための)ユーザコードの個々の集合に対応する。本明細書に使用されるようなユーザコードへの参照は、特定のプログラム言語で記述された任意のプログラムコード(例えば、プログラム、ルーチン、サブルーチン、スレッド等)を指し得る。本開示では、用語「コード」、「ユーザコード」、および「プログラムコード」は、交換可能に使用され得る。係るユーザコードは、例えば、ユーザによって開発された特定のウェブアプリケーションまたはモバイルアプリケーションに関連して、特定の機能を達成するように実行され得る。当該コードの指定の実行は、本明細書で「タスク実行」または単に「実行」と称される。タスクは、非限定的な例として、JavaScript(例えば、node.js)、Java、Python、および/またはRuby(および/または別のプログラミング言語)で記述され得る。タスクは、様々な方式でオンデマンドコード実行システム950またはコーディネータ914上で実行するために「トリガ」され得る。一実施形態では、クライアントデバイス902または他のコンピューティングデバイスは、タスクを実行する要求を伝達し得、それは、一般的に、タスクを実行する「呼び出し」と称され得る。係る呼び出しは、実行されるユーザコード(または、その場所)と、ユーザコードを実行するために使用される1つ以上の引数とを含み得る。例えば、呼び出しは、タスクを実行する要求と一緒にタスクのユーザコードを提供し得る。別の例では、呼び出しは、その名前または識別子によって事前にアップロードされたタスクを識別し得る。さらなる別の例では、タスクに対応するコードは、タスクに関する呼び出しに含まれ得、要求がコーディネータ914またはオンデマンドコード実行システム950によって受信される前に、別個の場所(例えば、コーディネータ914のストレージ、ネットワークアクセス可能なストレージサービス、またはタスクデータストア954)にアップロードされる。コーディネータ914またはオンデマンドコード実行システム950の要求インタフェースは、ユーザから、ハイパーテキスト転送プロトコルセキュア(HTTPS)要求としてタスクを実行する呼び出しを受信し得る。また、HTTPS要求に含まれる任意の情報(例えば、ヘッダおよびパラメータ)も、タスクを実行するときに処理および利用され得る。上記に説明したように、例えば、HTTP、MQTT、およびCoAPを含む任意の他のプロトコルは、要求インタフェース922にタスク呼び出しを含有するメッセージを転送するために使用され得る。
タスクを実行する呼び出しは、タスクに対応するユーザコードと一緒に使用される1つ以上の第三者ライブラリ(ネイティブライブラリを含む)を指定し得る。一実施形態では、呼び出しは、コーディネータ914またはオンデマンドコード実行システム950に、実行のために要求されたタスクに対応するユーザコードおよび任意のライブラリ(および/または、その記憶場所の識別)を含有するZIPファイルを提供し得る。いくつかの実施形態では、呼び出しは、実行されるタスクのプログラムコード、プログラムコードが記述された言語、呼び出しと関連付けられたユーザ、および/またはプログラムコードを実行するために保存されるコンピューティングリソース(例えば、メモリ等)を示すメタデータを含む。例えば、タスクのプログラムコードは、呼び出しとともに提供され得る、ユーザによって事前にアップロードされ得る、コーディネータ914もしくはオンデマンドコード実行システム950(例えば、標準ルーチン)によって提供され得る、および/または第三者によって提供され得る。いくつかの実施形態では、係るリソースレベルの制約(例えば、どの程度のメモリが特定のユーザコードを実行するために割り当てられるか)は、特定のタスクのために指定され、タスクの各実行を通じて変化しない場合がある。係る場合、コーディネータ940またはオンデマンドコード実行システム950は、個々の呼び出しのそれぞれが受信される前に、係るリソースレベルの制約へのアクセスを有し得、個々の呼び出しは、係るリソースレベルの制約を指定しない場合がある。いくつかの実施形態では、呼び出しは、どの種類のパーミッションまたは権限が、呼び出しがタスクを実行することを引き起こすかを示すパーミッションデータ等の他の制約を指定し得る。係るパーミッションデータは、(例えば、プライベートネットワーク上の)プライベートリソースにアクセスするためにオンデマンドコード実行システム910によって使用され得る。
いくつかの実施形態では、呼び出しは、呼び出しを扱うために採用されるべきである挙動を指定し得る。係る実施形態では、呼び出しは、呼び出しで参照されるタスクを実行するための1つ以上の実行モードを可能にするためのインジケータを含み得る。例えば、呼び出しは、デバッグモードでタスクが実行されるべきかどうかを示すためのフラグまたはヘッダを含み得、デバッグモードでは、タスクの実行と関連して生成され得るデバッギングおよび/またはロギング出力がユーザに(例えば、コンソールユーザインタフェースを介して)再度提供される。係る例では、コーディネータ914またはオンデマンドコード実行システム950は、呼び出しを検査し、フラグまたはヘッダを探索し得、それが存在する場合、コーディネータ914またはオンデマンドコード実行システム950は、タスクが実行される実行環境の挙動(例えば、ロギング機能)を修正し、出力データをユーザに再度提供させ得る。いくつかの実施形態では、挙動/モードインジケータは、コーディネータ914またはオンデマンドコード実行システム950によってユーザに提供されるユーザインタフェースによって呼び出しに追加される。ソースコードプロファイリング、リモートデバッギング等の他の特徴は、また、呼び出しにおいて提供されるインジケーションに基づいて、有効または無効にされ得る。
サービスプロバイダ環境920は、1つ以上のコンピュータネットワーク(図9に示されない)を使用して相互接続された、いくつかのコンピュータシステムを含む分散コンピューティング環境において動作するものとして図9に示される。サービスプロバイダ環境920は、また、図9に示されるデバイスよりも少ない数または多い数のデバイスを有するコンピューティング環境内で動作し得る。したがって、図9のサービスプロバイダ環境920の表現は、例示的であると見なされ、本開示を限定するものと見なすべきではない。例えば、サービスプロバイダ環境920またはその様々な構成は、本明細書に説明されるプロセスの少なくとも一部を実施するために、様々なウェブサービスコンポーネント、ホストされたコンピューティング環境もしくは「クラウド」コンピューティング環境、および/またはピアツーピアネットワーク構成を実装し得る。
さらに、サービスプロバイダ環境920は、ハードウェア、またはハードウェアデバイスによって実行されるソフトウェアに直接実装され得、例えば、本明細書に説明される様々な特徴を行うためのコンピュータ実行可能命令を実行するように構成されている物理コンピュータハードウェア上で実装された1つ以上の物理サーバまたは仮想サーバを含み得る。1つ以上のサーバは、例えば、1つ以上のデータセンター内で、地理的に分散され得る、または地理的に同一場所に配置され得る。いくつかの例では、1つ以上のサーバは、多くの場合「クラウドコンピューティング環境」と称される、即時にプロビジョニングされ、解放されるコンピューティングリソースのシステムの一部として動作し得る。
図10は、所与の被調整環境910内で被調整デバイス912を管理するコンピューティングシステム(コーディネータ914と称される)の一般的アーキテクチャを示す。図10に示されるワーカマネージャ940の一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアモジュールの配列を含む。ハードウェアモジュールは、下記にさらに詳細に説明されるように、物理電子デバイスが実装され得る。コーディネータ914は、図10に示される要素よりもさらに多くの(または、少ない)要素を含み得る。しかしながら、開示を可能にすることをもたらすために、それらの一般的な従来の要素の全てが示される必要はない。加えて、図10に示される一般的アーキテクチャは、図9に示される他のコンポーネントのうちの1つ以上を実装するために使用され得る。示されるように、コーディネータ914は、プロセシングユニット1004、ネットワークインタフェース1006、コンピュータ可読媒体ドライブ1007、および入力/出力デバイスインタフェース1008を含み、それらの全ては、通信バスによって相互に通信し得る。ネットワークインタフェース1006は、1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット1004は、ネットワーク904を介して、他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。プロセシングユニット1004は、また、メモリ1050におよびメモリ1050から通信し、さらに、入力/出力デバイスインタフェース1008を介して、任意選択のディスプレイ(図示しない)に出力情報を提供し得る。入力/出力デバイスインタフェース1008は、また、任意選択の入力デバイス(図示しない)から入力を受け得る。
メモリ1050は、本開示の1つ以上の態様を実装するために、プロセシングユニット1004が実行するコンピュータプログラム命令(いくつかの実施形態では、モジュールとしてグループ化される)を含有し得る。メモリ1050は、一般的に、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、および/または他の永続的な、補助的もしくは非一時的コンピュータ可読媒体を含む。メモリ1050は、コーディネータ914の一般管理および動作において、プロセシングユニット1004による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム1052を記憶し得る。メモリ1050は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ1050は、プロセスマネージャ1054、スケジューラ1056、配置エージェント1058、および通信マネージャ1060を含む。
スケジューラ1056および配置エージェント1058は、プロセシングユニット1004による実行のためのタスクを選択し、係るタスク実行を管理するようにプロセシングユニット1004によって実行され得る。具体的には、スケジューラ1056は、(例えば、コーディネータ914において制約されたリソースのインスタンスの下で)所与の時点における実行のためのタスクを選択し、タスクの実行を中断する命令を含み得る。配置エージェント1058は、タスクを実行するための適切な実行環境1070を選択し、当該実行環境1070に、タスク実行中に必要なリソースへの適切なアクセスをプロビジョニングし、実行環境1070内でタスクの実行を生じさせる命令を含み得る。本明細書で使用されるような実行環境1070は、タスクを実行するためのメモリ1050の論理部分を指す。一実施形態では、実行環境1070は、プログラム的に分離され、その結果、第1の実行環境1070内でのコードの実行は、別の実行環境1070と関連付けられたメモリを修正することが防止される。例示として、実行環境1070は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「chroot jail」もしくはPython仮想環境「virtualenv」等の「サンドボックス」環境に対応し得る。他の例では、実行環境1070は、仮想マシン環境(例えば、JAVA仮想マシン、異なったオペレーティングシステムを伴う仮想化されたハードウェアデバイス等)に対応し得る。さらなる他の例では、実行環境1070は、仮想化を必ずしも利用することなく、タスクの実行に割り当てられたメモリ空間であり得る。
コーディネータ上で実行するタスクの間の通信と共に、コーディネータ914と他のデバイス(例えば、クライアントデバイス902および被調整デバイス912)との間の通信は、通信マネージャ1060によって容易にされ得る。具体的には、通信マネージャ1060は、コーディネータ914に向けられたメッセージを取得し、適切な宛先にメッセージを転送するように構成され得る。例えば、通信マネージャ260は、タスク、被調整デバイス912、クライアントデバイス902、およびサービスプロバイダ実行環境920のデバイスのいずれかの組み合わせの間でメッセージを送り得る。下記にさらに詳細に説明されるように、通信マネージャ260は、指定トピックと関連付けられるメッセージを変換することができ、その結果、当該メッセージは、デバイスのより少ないサブセットにサブスクライブされるトピックに向けられる。
コーディネータ914によって実行されるタスクは、タスクメモリ空間1080内で論理的にグループ化されるものとして示され、タスクメモリ空間1080は、各タスクに対応するコードを記憶するように構成されているメモリ1050の論理ユニットに対応し得る。図10に示されるように、タスクメモリ空間1080は、ルータタスク1082、1つ以上の通信マネージャタスク1086、シャドウサービスタスク1088、および1つ以上のクライアントにより提供されるタスク1090を含む、コーディネータ914の機能性を実施するようにプロセシングユニット1004によって実行可能ないくつかのタスクを含み得る。
ルータタスク1082は、コーディネータ内での、コーディネータへの、およびコーディネータからのメッセージのルーティングを支援するように実行可能なコードの一部に対応し得る。一実施形態では、ルータタスク1082は、メッセージに関する適切な宛先を判定するために「ルーティングテーブル」を実装する。例えば、通信マネージャ1060は、(例えば、タスク実行による生成、または入力/出力インタフェース1008における受信に起因して)ルータタスク1082に、コーディネータ914において取得されたメッセージを転送し得、ルータタスク1082は、ある識別子にアドレス指定されたメッセージが所与のタスク、所与のクライアントデバイス902、または所与の被調整デバイス902に送られるべきであると判定するためにルーティングテーブルを利用し得る。ルーティングテーブルはさらに、識別子にアドレス指定されたメッセージがサービスプロバイダ環境920に(例えば、デバイスシャドウサービス940またはオンデマンドコード実行システム950に)伝達されるべきであることを示し得る。一実施形態では、ルーティングテーブルは、識別子として「トピック」を利用し得、その結果、特定のトピックと関連付けられたメッセージは、当該トピックに関して指定されたルーティングに従って送られる。ルーティングテーブルは、さらに、メッセージのソースに基づいて、そのメッセージをどのように送るかに関する情報を含み得る。例えば、所与のトピックにアドレス指定されたメッセージは、メッセージが第1のタスク、第2のタスク、第1の被調整デバイス912等から受信されるかどうかに基づいて、異なって送られ得る。ルーティングテーブルの利用によって、ルータタスク282は、メッセージの送信側の動作の変更なしに(例えば、メッセージを生成したタスクに関するコードを再記述することなく、メッセージを生成した被調整デバイス912のソフトウェアを修正すること等なく)、係るメッセージをリダイレクトすることを可能にし得る。
通信マネージャタスク1086は、通信のプロトコルに従って、コーディネータ914と、いくつかの異なる外部デバイス(例えば、被調整デバイス902)との間の係る通信を可能にし得る。例えば、第1の通信マネージャタスク1086は、BLUETOOTH(商標)プロトコルを使用して通信を管理するように構成され得、第2の通信マネージャは、HTTPプロトコルを使用して通信を管理するように構成され得る等のことがある。いくつかの例では、複数の通信マネージャタスク1086は、通信を実施するように集合的に作用し得る。例えば、第1の通信マネージャタスク1086は、TCPプロトコルを介した通信を可能にし得る一方、第2の通信マネージャタスク1086は、MQTTプロトコル(TCPプロトコルを利用し、ひいては、第1の通信マネージャタスク1086を利用し得る)を介した通信を可能にし得る。異なる通信マネージャタスク1086が異なるプロトコルを介して通信するコーディネータ914の能力を変化させることができるために、およびコーディネータ914のタスクがコーディネータ914の再構成によって変わり得るために、コーディネータ914は、様々な異なる通信プロトコルを利用するように即時に再構成され得る。
シャドウサービスタスク1088は、コーディネータ914において維持されたデバイスシャドウの管理と、およびデバイスシャドウとの相互作用とを容易にすることができる。例示として、シャドウサービスタスク1088は、コーディネータ914に対してローカルにデバイスシャドウサービス940によって提供されるものと同様の機能性を実施することができる。したがって、シャドウサービスタスク1088は、被調整デバイス912のシャドウ状態(所望の状態を表すデータ)を維持し、係るデータへの読み出しまたは書き込みを可能にし得る。シャドウサービスタスク1088は、さらに、被調整デバイス912に関するデバイスシャドウとの被調整デバイス912の同期を可能にし得る。したがって、被調整デバイス912に関するデバイスシャドウを修正することによって、被調整デバイス912の状態が変わり得る。被調整デバイス912に関するデバイスシャドウを読み出すことによって、被調整デバイス912の状態を判定することができる。いくつかの例では、シャドウサービスタスク1088は、さらに、デバイスシャドウサービス940によって維持されるデバイスシャドウ等の所与のデバイスに関する別のデバイスシャドウに合わせて調整し得る。例えば、シャドウサービスタスク1088は、ローカルデバイスシャドウを、デバイスシャドウサービス940に記憶されたデバイスシャドウと同期し、ローカルデバイスシャドウと、デバイスシャドウサービス940に記憶されたデバイスシャドウとの間の不一致を解決し得る等を行う。
上記に説明したタスク(それらのそれぞれが、例示として、サービスプロバイダ環境920と関連付けられたエンティティによって提供され得る)に加えて、タスクメモリ空間1080は、任意の数のクライアントにより提供されるタスク1090を含み得、クライアントにより提供されるタスク1090は、クライアントデバイス902によって生成され、コーディネータ914への配置のためにサービスプロバイダ環境920にサブミットされる実行可能なコードに対応し得る。したがって、クライアントにより提供されるタスク1090によって提供される機能性は、サブミットするユーザの要望に従って変化し得る。いくつかの例では、クライアントにより提供されるタスク1090は、メモリ1050が言語ランタイムを含むコーディング言語で記述され得る。例えば、コーディネータ914がnode.js、Go、JAVA、およびPython等の言語をサポートする場合、クライアントにより提供されるタスク290は、それらの言語のいずれかで記述された実行可能なコードを含み得る。
加えて、メモリ1050は、コーディネータ914の構成データが記憶されたメモリ1050の論理部分を表す、構成データ部1052を含む。構成データは、例えば、コーディネータ914の現在の配置バージョン、タスクメモリ空間1080のタスクによって記憶されたデータ、またはコーディネータ914の動作において使用される他のデータを含み得る。
コーディネータ914の構成(および再構成)を可能にするために、メモリ1050は、さらに、配置エージェント1058を含む。配置エージェント1058は、サービスプロバイダ環境920にコーディネータを登録し、コーディネータ914の所望の構成を判定し、コーディネータ914の現在の構成が所望の構成と一致しない例では、コーディネータ914に関する構成データを取得し、所望の構成を実装するためにメモリ1050を修正するように実行可能なコードに対応することができる。
図11Aは、本出願に従った、例示的な被調整デバイス912Aのアーキテクチャの一実施形態を示す。図11Aに示される被調整デバイス912Aの一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアコンポーネントの配列を含む。例示されるように、被調整デバイス912Aは、プロセシングユニット1104、ネットワークインタフェース1106、コンピュータ可読媒体ドライブ1107、入力/出力デバイスインタフェース1120、任意選択のディスプレイ1102、および入力デバイス1124を含み、それらの全ては、通信バスによって相互に通信し得る。例示として、被調整デバイス912Aは、埋め込みデバイスとして、入力または出力等のより制限された機能性およびコンポーネントを有し得る。
ネットワークインタフェース1106は、図9のネットワーク904等の1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット1104は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。プロセシングユニット1104はまた、メモリ1110におよびメモリ1110から通信し、さらに、入力/出力デバイスインタフェース1120を介して、任意選択のディスプレイ1102に出力情報を提供し得る。入力/出力デバイスインタフェース1120は、また、キーボード、マウス、デジタルペン等の任意選択の入力デバイス1124から入力を受け得る。いくつかの実施形態では、被調整デバイス912Aは、図11Aに示されるものよりも多い(または、少ない)コンポーネントを含み得る。例えば、被調整デバイス912のいくつかの実施形態は、ディスプレイ1102および入力デバイス1124を省略し得る一方、1つ以上の代替通信チャネルを経由して(例えば、ネットワークインタフェース1106を介して)入力/出力能力を提供する。加えて、被調整デバイス912Aは、同様に、入力および出力インタフェース1120を完全に省略し得る。
メモリ1110は、1つ以上の実施形態を実装するために、プロセシングユニット1104が実行するコンピュータプログラム命令を含み得る。メモリ1110は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。メモリ1110は、被調整デバイス912Aの一般管理および動作においてプロセシングユニット1104による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム1114を記憶し得る。メモリ1110は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ1110は、コンテンツにアクセスするためのブラウザアプリケーション1116を含む。例示として、ブラウザアプリケーション1116は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を包含し得る、または単に、データ接続性を提供するソフトウェアアプリケーション(または実行可能命令)であり得る。
図11Bは、本出願に従った、例示的な被調整デバイス912Bの代替アーキテクチャの一実施形態を示す。図11Bに示される被調整デバイス912Bの一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアコンポーネントの配列を含む。しかしながら、被調整デバイス912Bは、被調整デバイス912Bの計算機能および動作を制限し得る少なくなったコンポーネントと関連付けられ得る。例示として、被調整デバイス912Bは、通信バスと通信する、プロセシングユニット1150およびネットワークインタフェース1152を含む。図11Aの被調整デバイス912Aとは異なり、被調整デバイス912Bは、コンピュータ可読媒体ドライブ、入力/出力デバイスインタフェース、任意選択のディスプレイ、または入力デバイスを有さない場合がある。
ネットワークインタフェース1152は、図9のネットワーク904等の1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット1150は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。メモリ1154は、1つ以上の実施形態を実装するために、プロセシングユニット1150が実行するコンピュータプログラム命令を含み得る。メモリ1154は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。本実施形態では、メモリ1154は、被調整デバイス912Bの一般管理および動作においてプロセシングユニット1150による使用のためのコンピュータプログラム命令を提供する完全なオペレーティングシステムを必ず記憶し得る。むしろ、一実施形態では、メモリ1154は、命令にアクセスし、命令を受信し、命令を処理するためのインタフェースソフトウェアコンポーネント1156を含む。
図12は、本出願に従った、例示的なクライアントデバイス902のアーキテクチャの一実施形態を示す。図12に示されるクライアントデバイス902の一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアコンポーネントの配列を含む。例示されるように、クライアントデバイス902は、プロセシングユニット1204、ネットワークインタフェース1206、コンピュータ可読媒体ドライブ1207、入力/出力デバイスインタフェース1208、任意選択のディスプレイ1202、および入力デバイス1224を含み、それらの全ては、通信バスによって相互に通信し得る。
ネットワークインタフェース1206は、図9のネットワーク904等の1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット1204は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。プロセシングユニット1204はまた、メモリ1210におよびメモリ1210から通信し、さらに、入力/出力デバイスインタフェース1220を介して、任意選択のディスプレイ1202に出力情報を提供し得る。入力/出力デバイスインタフェース1208は、また、キーボード、マウス、デジタルペン等の任意選択の入力デバイス1224から入力を受け得る。いくつかの実施形態では、クライアントデバイス902は、図12に示されるものよりも多い(または、少ない)コンポーネントを含み得る。例えば、被調整デバイス912のいくつかの実施形態は、ディスプレイ1202および入力デバイス1224を省略し得る一方、1つ以上の代替通信チャネルを経由して(例えば、ネットワークインタフェース1206を介して)入力/出力能力を提供する。加えて、クライアントデバイス902は、同様に、入力および出力インタフェース1208を完全に省略し得る。
メモリ1210は、1つ以上の実施形態を実装するために、プロセシングユニット1204が実行するコンピュータプログラム命令を含み得る。メモリ1210は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。メモリ1210は、クライアントデバイス902の一般管理および動作においてプロセシングユニット1204による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム1214を記憶し得る。メモリ1210は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ1210は、コンテンツにアクセスするためのブラウザアプリケーション1216を含む。例示として、ブラウザアプリケーション1216は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を包含し得る、または単に、データ接続性を提供するソフトウェアアプリケーション(または実行可能命令)であり得る。
図13は、本明細書に説明されるメッセージ処理サービスコンポーネントを実装するための例示的コンピューティングデバイスのアーキテクチャの一実施形態を示す。前述に説明したように、当該環境内の1つ以上のコンピューティングデバイスは、MQTTブローカー等のメッセージ処理サービスとして機能し得る。他の実施形態では、メッセージ処理サービスは、ネットワークコンポーネントに実装され得る。したがって、図13に示されるメッセージ処理サービスの一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアコンポーネントの配列を含む。例示されるように、リモートコマンドサービス914は、プロセシングユニット1304、ネットワークインタフェース1306、コンピュータ可読媒体ドライブ1307、入力/出力デバイスインタフェース1350、任意選択のディスプレイ1302、および入力デバイス1324を含み、それらの全ては、通信バスによって相互に通信し得る。リモートコマンドサービス914のコンポーネントは、物理ハードウェアコンポーネントであり得る、または仮想環境内で実装され得る。
ネットワークインタフェース1306は、図9のネットワーク950等の1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット1304は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。プロセシングユニット1304はまた、メモリ1310におよびメモリ1310から通信し、さらに、入力/出力デバイスインタフェース1350を介して、任意選択のディスプレイ1302に出力情報を提供し得る。入力/出力デバイスインタフェース1350は、また、キーボード、マウス、デジタルペン等の任意選択の入力デバイス1324から入力を受け得る。いくつかの実施形態では、リモートコマンドサービス914は、図13に示されるものよりも多い(または、少ない)コンポーネントを含み得る。例えば、リモートコマンドサービス914のいくつかの実施形態は、ディスプレイ1202および入力デバイス1324を省略し得る一方、1つ以上の代替通信チャネルを経由して(例えば、ネットワークインタフェース1306を介して)入力/出力能力を提供する。
メモリ1310は、1つ以上の実施形態を実装するために、プロセシングユニット1304が実行するコンピュータプログラム命令を含み得る。メモリ1310は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。メモリ1310は、中間サーバ914の一般管理および動作において、プロセシングユニット1304による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム1314を記憶し得る。メモリ1310は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ1310は、クライアントデバイス902からコンテンツ要求を受信および処理するためのクライアントインタフェースソフトウェア1312を含む。加えて、メモリ1310は、受信された通信を処理するための通信マネージャコンポーネント1316を含む。例示として、通信マネージャ1316は、指定トピックと関連付けられるメッセージを変換することができ、その結果、当該メッセージは、デバイスのより少ないサブセットにサブスクライブされるトピックに向けられる。
ここで、図14A〜図14Dを参照して、コンテンツメッセージを処理するコンテンツ管理システム910のコンポーネント間の相互作用の例を説明する。より具体的には、図14A〜図14Dは、被調整デバイス912、クライアントデバイス902、およびメッセージ処理サービスの間の相互作用に関して説明される。前述に示したように、メッセージ処理サービスは、コーディネータ914または他のネットワーク機器を含む、様々なデバイスによって実施されることができる。加えて、被調整デバイス912は、被調整デバイス912(図11A)、被調整デバイス912(図11B)、またはそれらの組み合わせに対応することができる。しかしながら、相互作用の参照は、例示の目的のために使用される場合でも、任意の特定のデバイスまたはデバイスの組み合わせに限定されるべきではない。
図14Aを参照して、メッセージ処理サービスの初期構成を説明する。例示として、クライアントまたはシステムアドミニストレータは、受信された通信の解釈を容易にする情報を伴うメッセージ処理サービスを構成する。一実施形態では、メッセージ処理サービスは、いくつかの潜在的被調整環境910の1つに通信を提供するために、サービスプロバイダ環境920によって実施されることができる。別の実施形態では、メッセージ処理サービスは、いくつかの被調整デバイス912の1つに通信を提供するために、コーディネータ914によって実施されることができる。したがって、図14A〜図14Dでは、単独で、いずかの実施形態または他の変形例における実装に限定するべきではない。しかしながら、例示の目的のために、図14A〜図14Dは、コーディネータ914と被調整デバイスのセットとの間の相互作用に関して説明される。
例示的環境に従って、通信ネットワーク904にわたってメッセージを伝達するために利用される実際の通信プロトコルに関わらず、MQTTメッセージングプロトコルに従って、通信を形成することができる。MQTTプロトコルに特有であるように、各メッセージは、通信を定義する1つ以上のワードのグループを有するトピック部と関連付けられる、またはそれ以外の場合、当該通信と関連付けられる。分離可能なワードのグループのそれぞれは、概して、レベルと称され得、トピック部は、複数のレベルを有し得る。下記の例は、第1のレベル「基本レベル」、次に、一連の追加レベル「レベル1」〜「レベルn」を含む。各レベルは、トピックセパレータによって示される。
基本レベル/レベル1/レベル2/レベル3..../レベルnのように示される。
前述に説明したように、従来のMQTTプロトコルでは、メッセージを受信するメッセージコーディネータ914は、トピックごとに発行されるメッセージを受信するために登録している1つ以上の受信側デバイスと、トピックを一致させることを試みる。例えば、メッセージコーディネータ914は、メッセージの1つ以上のトピック部を探索し、(全体的または部分的に)トピック登録と一致させる。コーディネータ914は、全てのレベルの完全一致または1つ以上のレベルの部分一致に対する判定を限定し得る。
ここで、図14Aを参照すると、(1)において、アドミニストレータまたはカスタマに対応するクライアンデバイス902は、構成情報をコーディネータ914に伝達することができる。例示として、構成情報は1つ以上の命令、論理ルール、またはアクションのセットを定義する処理ステップに対応し、コーディネータ914のメッセージ処理サービスは受信済メッセージのトピック部の一致、メッセージのソース等に基づいてメッセージを引き受けることができる。例えば、コーディネータ914のメッセージ処理サービスの1つの構成は、あてがわれたタスクに対応する通信を指定の被調整デバイス912によって実施するべきであるかどうかの定義を含み得る。この例では、被調整デバイス912のセットは、対応するトピックを伴うコンテンツメッセージを受信するためにサブスクライブされ得るが、メッセージを受信する当該デバイスは、コーディネータ914によって識別されるルールの評価に依存し得る。
別の例では、コーディネータ914は、受信済メッセージの処理に基づいて、コスト情報、ルーティング情報、仕事量、サービスレベル情報、セキュリティ情報等の追加情報を取得するように構成され得る。この点では、メッセージングプロトコルの従来の実施におけるコーディネータ914のメッセージ処理サービスは、受信済メッセージの任意の追加処理を行わない、または、ルーティング決定を行うために、追加外部ネットワーク通信もしくはコンポーネントを必要とし得る。加えて、本出願の態様に従って、コーディネータ914は、クライアントデバイス902を介してアドミニストレータによって指定されるような多様な追加ルーティングおよび選択機能で構成され得る。コーディネータ914を構成する直接通信として示されているが、いくつかの実施形態では、クライアントコンピューティングデバイス902は、メッセージ処理システム920を介して、コーディネータ914と間接的に相互作用するであろう。
(2)において、コーディネータ914は、構成情報を処理し、後続処理に関する構成を記録する。この点では、コーディネータ914は、受信済メッセージが潜在的受信側にどのように発行されるべきかを判定する際に使用されるためのルーティングおよび選択情報を維持することができる。例示として、記憶された構成情報は、ビジネスルール、論理ルール、またはルーティングテーブルの形式であり得、それらは、コーディネータ914が、入力または情報のセットを取得し、ルールまたは論理に基づいて入力のセットを評価し、発行メッセージを受信するべき潜在的受信側のサブセットまたは有限セットを判定することを可能にする。この点では、ルールまたは論理の評価は、潜在的受信側の異なるサブセットへのメッセージの発行を除外もしくは保留することを容易にする、または全ての潜在的受信側がメッセージを受信するべきことを有効にする。他の実施形態では、コーディネータ914は、情報が処理されるときに、係るAPI等のインタフェースを利用する追加命令または実行可能コードを取得することができる。例えば、コーディネータ914は第三者セキュリティ情報プロバイダにアクセスすることができ、第三者セキュリティ情報プロバイダは、コーディネータ914の構成を容易にすることができる、または発行済メッセージを評価するためにコーディネータ914によって利用される情報を提供することができる。
図14Bを参照して、受信側デバイスの初期構成、被調整デバイス912’および912’’を説明する。(1)において、被調整デバイス912’および912’’は、デバイス接続要求を生成し、要求をコーディネータ914に伝達する。例示として、デバイス接続要求は、コーディネータ914で、被調整デバイス912’および912’’の認証および承認と関連付けられる手順を確立するように対応する。またさらに、いくつかの実施形態では、論理ネットワーク100は、独立して、またはコンテンツ管理システム910の一部として、コーディネータ914へのメッセージの伝達を管理する追加ゲートウェイコンポーネントを含み得る。係るゲートウェイコンポーネントは、セキュリティ機能、ロードバランシング、または他のネットワーク処理サービスを実装することができる。
(2)において、コーディネータ914は、例えば、セキュリティ情報を有効にすることによって、追加情報を要求することによって、または要求を行っているクライアントコンピューティングデバイス902の特徴を判定すること等によって、接続要求を処理する。(3)において、接続要求が受け入れ可能で承認された場合、メッセージ処理サービス1400は、接続確認を、要求を行っているコーディネータ914に伝達する。この点では、いったん承認されると、調整デバイス912および912’ならびにコーディネータ914は、MQTT等のメッセージングプロトコルに定義される手順の範囲内で通信を始めることができる。加えて、調整デバイス912および912’は、上記に説明したルーティングプロセスを容易にする追加セキュリティ情報を提供することができる。
ここで、図14Cを参照すると、接続確認を受信した後、(1)において、被調整デバイス912’および912’’は、1つ以上のトピック登録要求をコーディネータ914に伝達する。例示として、トピック登録は、メッセージングプロトコルに従って定義され、その結果、被調整デバイス912’および912’’は、任意の数のコンテンツプロバイダによる指定トピックに従って発行されたコンテンツを受信するために登録することができる。本出願に適用されるように、被調整デバイス912’および912’’は、1つ以上のトピックを登録する。例示の目的のために、登録済被調整デバイス912’および912’’へのメッセージの転送がメッセージの埋め込みコードに基づいて異なるように、例を提供する。
登録後のある時点で、(2)において、別個のコンピューティングデバイス1402は、1つ以上の部分的コンテンツをコーディネータ914に発行する。例示として、メッセージを受信することができるコーディネータ914は、サービスプロバイダ環境920から伝達された通信に対応することができる。コンテンツのそれぞれの発行された部分は、トピックと関連付けられる。例示的な例の目的のために、少なくとも1つの発行済コンテンツは、コーディネータ914で、被調整デバイス912’および912’’によって登録されるトピックに対応するコンテンツ/メッセージのトピック部と関連付けられる。この点では、メッセージは、受信済メッセージを登録された調整デバイスと一致させるために利用することができるトピック部の1つ以上のレベルを含み得る。
(3)において、コーディネータ914は、被調整デバイス912が受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させる。この点では、コーディネータ914は、メッセージを受信するために登録している被調整デバイス912のセットを判定することができる。当業者は、MQTTメッセージングプロトコルまたは他のメッセージングプロトコルの従来の実装では、コーディネータ914は受信済メッセージを全ての登録済被調整デバイスに送信するであろうことを認識している。(4)において、コーディネータ914は、通信のトピック部を処理し、発行済メッセージを受信するべき登録済被調整デバイスの識別されたセットから1つ以上の被調整デバイスを識別する。いくつかの実施形態では、コーディネータ914は、通信マネージャコンポーネント1316等のトピック部を処理する機能性を含み得る。他の実施形態では、コーディネータ914は、追加サービスまたは追加コンポーネントを利用して、パースを容易にすることができる。より具体的には、コーディネータ914は、ビジネスルールまたはルーティングテーブルを利用して、メッセージを受信する登録済被調整デバイス912のサブセットを識別することができる。したがって、コーディネータ914は、ビジネスルールまたはルーティングテーブルを評価して、どの登録済被調整デバイス912が発行済メッセージを受信しないかを識別することができる。
(5)において、コーディネータ914のメッセージ処理サービスは、メッセージを選択された登録済デバイスのサブセットに向けさせることができる。一実施形態では、コーディネータ914は、選択された登録済デバイスにメッセージを直接伝達するように構成され得る。本実施形態では、コーディネータ914は、ビジネスルールまたは論理で指定されるような同じメッセージングプロトコルまたは異なる通信プロトコルを利用することができる。別の実施形態では、コーディネータ914は、選択された登録済デバイスに適用可能であるであるか、または、それに一致するであろう1つ以上の2次トピック発行を関連付けることができる。本実施形態では、2次トピック発行は、個々のデバイスに関する2次トピック発行等の非選択デバイスに登録されないであろう。2次トピック発行を利用する例示の目的のために、図14Dを参照すると、(6)において、メッセージ処理サービスは、調整デバイス912’’にメッセージの転送をさせることができ、被調整デバイス912’にメッセージの転送をさせることができない。加えて、いくつかの実施形態では、コーディネータ914は、オリジナルのトピックに従ってメッセージを受信するように登録していない場合があるが、それにも関わらずコーディネータ914によって選択される、被調整デバイス912を選択することができる。
図15は、例示的環境に従って、メッセージ処理サービスによって実施されるリモート実行メッセージングルーチン1500を示すフロー図である。ルーチン1500は、メッセージルーティング中、メッセージングプロトコルのビジネスルール、ルーティングテーブル、または他の論理情報を示す。ブロック1502において、メッセージ処理サービスは、被調整デバイス912または任意の他のコンピューティングデバイス902等のデバイスによるコンテンツのリモート実行に関連する少なくとも1つのトピックを含む登録情報を取得する。前述に説明したように、本デバイスは、1つ以上のトピック登録要求をメッセージ処理サービスに伝達する。例示として、トピック登録は、メッセージングプロトコルに従って定義され、その結果、本デバイスは、任意の数のコンテンツプロバイダによる指定トピックに従って発行されたコンテンツを受信するために登録することができる。前述に記述したように、トピック登録は、個々のデバイスまたはデバイスのセットに対応することができる。
登録後のある時点で、ブロック1504において、メッセージ処理サービスは、トピック部を有する1つ以上の発行を取得する。例示として、いくつかのコンピューティングデバイス1402(図14C)は、1つ以上の部分的コンテンツをメッセージ処理サービスに発行する。コンテンツのそれぞれの発行された部分は、トピックと関連付けられる。例示的な例の目的のために、少なくとも1つの発行済コンテンツは、クライアントコンピューティングデバイス902の登録済トピックに対応する埋め込みコードと関連付けられる。加えて、トピックと関連付けられるコンテンツのそれぞれの発行された部分は、コンテンツのペイロード部を含む。係るペイロード部の例は、被調整デバイスまたはネットワークデバイスによって実行されるタスクを含み得る。
ブロック1506において、メッセージ処理サービスは、1つ以上のデバイスが発行済トピックを受信するべきクライアントデバイスのセットを形成するトピックを伴う発行済コンテンツを受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させる。例示として、メッセージ処理サービスがMQTT等のメッセージングプロトコルに従って構成されているため、トピック発行に対する登録の一致は、メッセージングプロトコルによって指図される方式で達成することができる。例示として、トピック部の一致は、トピック部の全てのレベルの一致、または少なくとも1つのレベルの部分一致に対応することができる。またさらに、当該一致はベースレベルの一致に対応することができる一方、他のレベルは2次一致に関して無視または利用され得る。
ブロック1508において、コーディネータ914は、メッセージを受信するべきデバイスのサブセットを選択するためにトピック部を処理する。いくつかの実施形態では、メッセージ処理サービスは、登録済デバイスのサブセットを選択するために、ビジネスルール、ルーティングテーブル、論理ルール等の機能性を含み得る。一態様では、コーディネータ914は、受信済メッセージを受信するべき被調整デバイス912のサブセットを識別するビジネスルールまたはルーティングテーブルを評価することができる。例示として、ビジネスルールまたはルーティングテーブルは、発信元のソースアドレス、トピック部の1つ以上のレベルの識別情報、識別された受信側デバイス912のセキュリティ構成情報、タイムスタンプ情報、被調整デバイスに関する利用情報、財務コスト情報等の情報を組み込むことができる。他の例では、ビジネスルールは、1つ以上の受信側デバイス912が他の方法でメッセージを受信することに適格であり得るか、または利用可能であり得る場合、ランダム選択アルゴリズムまたは加重選択アルゴリズムを含み得る。例えば、コーディネータ914は、メッセージのソースのネットワークアドレス等のソース識別子を、1つ以上の選択済受信側デバイス912と関連付けるビジネスルールで構成され得る。別の例では、コーディネータ914は、最小のセキュリティ構成を判定する、または受信済メッセージに関するセキュリティ仕様の種類を指定するセキュリティ仕様情報で構成され得る。この例では、次に、コーディネータ914は、1つ以上の登録済セキュリティデバイスのセキュリティ情報を利用して、どの受信側デバイスが指定されたセキュリティ仕様を満たすのかを判定することができる。またさらなる例では、コーディネータ914は、時刻、メッセージ種類、もしくは他の情報に基づく全ての利用可能な受信側デバイスを識別するホワイトリスト、または除外するべき1つ以上の受信側デバイスを識別するブラックリストで構成され得る。
他の態様では、コーディネータ914は、情報を個々の被調整デバイス912から受信することができ、被調整デバイス912は、メッセージを受信するその可用性を示す、またはそれ以外の場合、上記の識別された情報を提供することができる。他の実施形態では、メッセージ処理サービスは、追加サービスまたは追加コンポーネントを利用して、処理を容易にすることができる。加えて、ブロック1508において、次に、メッセージ処理サービスは、選択済受信側デバイスと関連付けられている、非選択済受信側デバイスと関連付けられていない2次トピックを選択する。
ブロック1510において、コーディネータ914は、トピックのサブセットの選択に従って発行済コンテンツを伝達する。同様に、発行済コンテンツの伝達は、MQTT等のメッセージングプロトコルの手順および能力に従って行われ、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。他の例では、メッセージ処理サービスは、別個のトランスポートプロトコルを利用することができる。受信側デバイスは、受信された発行済コンテンツを処理する。さらに他の例では、コーディネータ914は、メッセージを、選択された被調整デバイス912のサブセットに発行させる1つ以上の2次トピック発行を利用することができる。
ブロック1512において、メッセージ処理サービスは、メッセージの処理に対応する処理結果を取得する。例示として、クライアントコンピューティングデバイスは、メッセージングプロトコルを介して、コードの処理結果を示す情報に関連するコンテンツを生成および発行する。いくつかの実施形態では、処理結果は、コードの実行が行われたことが成功したかどうかのバイナリ判定に対応することができる。別の実施形態では、処理結果は、コード/命令の実行を示す1つ以上の値、またはコード/命令の実行についての情報を詳述するログを含み得る。更新トピックの発行とともに説明したものと同様の様式で、処理結果(複数可)の発行は、特定のトピック(概して「処理結果トピック」と称される)と関連付けられ得る。
ブロック1514において、メッセージ処理サービスは、管理デバイス904が処理結果トピックを伴う発行済コンテンツを受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させ、発行済コンテンツを伝達する。例示として、発行済コンテンツの伝達は、また、MQTT等のメッセージングプロトコルの手順および能力に従って行われ、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。ブロック1516において、ルーチン1500は終了する。
図16は、例示的環境に従って、被調整デバイス912または他のコンピューティングデバイスによって実施されるリモート実行メッセージングルーチン1600を示すフロー図である。前述に説明したように、本出願では、被調整デバイス912または他のコンピューティングデバイスは、他のコンポーネントがまたメッセージのルーティングで埋め込みコード情報を利用したかどうかに関係なく、メッセージの処理において埋め込みコード情報を利用するようなメッセージ処理サービスとして考えられ得る。しかしながら、この例の被調整デバイス912の識別は、ルーチン1600の適用を限定するものとして解釈されるべきではない。ブロック1602において、被調整デバイス912は、1つ以上のトピック登録要求をメッセージ処理サービス1400に伝達する。上記に説明したように、トピック登録は、メッセージングプロトコルに従って定義され、その結果、被調整デバイス912は、任意の数のコンテンツプロバイダによる指定トピックに従って発行されたコンテンツを受信するために登録することができる。
発行済コンテンツを受信したことに応答して、メッセージ処理サービス1400は、クライアント被調整デバイス912が発行済コンテンツを受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させる。前述に説明したように、メッセージ処理サービスは、オリジナル登録を伴うコンテンツを処理し、次に、メッセージを選択された被調整デバイス912に転送する。ブロック1604において、被調整デバイス912は、コーディネータ914から発行済コンテンツを受信する。例示として、発行済コンテンツの伝達は、MQTT等のメッセージングプロトコルの手順および能力に従って行われ、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。
コンテンツの実行のうちの実行の一部として、またはコンテンツの実行の後に、ブロック1606において、被調整デバイス912は、埋め込みコードを処理し、リモート実行の結果を取得する。いくつかの実施形態では、処理結果は、コードの実行が行われたことが成功したかどうかのバイナリ判定に対応することができる。別の実施形態では、処理結果は、コード/命令の実行を示す1つ以上の値、またはコード/命令の実行についての情報を詳述するログを含み得る。
ブロック1608において、被調整デバイス912は、メッセージングプロトコルを介して、コードの処理結果を示す情報に関連するコンテンツを発行する。例示として、発行済コンテンツの伝達は、MQTT等のメッセージングプロトコルの手順および能力に従って行われ、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。ブロック1610において、ルーチン1600は終了する。
図17は、コーディネータ1714が被調整デバイス1712を制御するように動作し得る1つ以上の被調整環境1710と、(例えば、被調整デバイス1712の状態の変更を要求するために)被調整環境1710と相互作用し得るクライアントデバイス1702と、様々な被調整環境1710内でコーディネータ1714との通信またはコーディネータ1714の構成を支援し得るサービスプロバイダ環境1720とを含む、例示的動作環境1700のブロック図である。
被調整環境1710、クライアントデバイス、およびサービスプロバイダ環境1720は、ネットワーク1704を介して通信し得、ネットワーク1704は、いずれかの有線ネットワーク、無線ネットワーク、またはそれらの組み合わせを含み得る。例えば、ネットワーク1704は、パーソナルエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、無線ブロードキャストネットワーク(例えば、ラジオまたはテレビのためのもの)、ケーブルネットワーク、衛星ネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであり得る。さらなる例として、ネットワーク1704は、インターネット等の様々な異なった関係者によって運営される可能性がある、リンクされたネットワークの公然にアクセス可能なネットワークであり得る。いくつかの実施形態では、ネットワーク1704は、企業または大学のイントラネット等のプライベートまたはセミプライベートネットワークであり得る。ネットワーク1704は、グローバルシステムフォーモバイルコミュニケーションズ(GSM)ネットワーク、符号分割多重アクセス(CDMA)ネットワーク、ロングタームエボリューション(LTE)ネットワーク、または任意の他の種類の無線ネットワーク等の1つ以上の無線ネットワークを含み得る。ネットワーク1704は、インターネットまたは他の上述した種類のネットワークのいずれかを介して通信するためのプロトコルおよびコンポーネントを使用することができる。例えば、ネットワーク1704によって使用されるプロトコルは、ハイパーテキスト転送プロトコル(HTTP)、HTTPセキュア(HTTPS)、MQTT、およびコンストレイントアプリケーションプロトコル(CoAP)等を含み得る。インターネットまたは他の上述した種類の通信ネットワークのいずれかを介して通信するためのプロトコルおよびコンポーネントは、当業者に十分に既知であり、ひいては、本明細書でさらに詳細に説明されない。ネットワーク1704の全てのコンポーネントが図17に示されているが、ルータ等の1つ以上のコンポーネントは、メッセージ処理サービスとして機能し得る。
被調整環境1710のそれぞれは、実行環境1710のネットワーク(ネットワークは図17に示されない)を介して通信する、コーディネータ1714および任意の数の被調整デバイス1712を含み得る。被調整環境1710内のそれらの関連付けのために、所与の環境1710内の被調整デバイス1712およびコーディネータ1714は、通信ネットワークの点で、相互に「ローカル」であると考えられ得る。例えば、所与の環境1710内の被調整デバイス1712およびコーディネータ1714は、LANまたは他の局所化された通信ネットワークを介して接続され得る。
被調整デバイス1712のそれぞれは、コーディネータ1714と通信して、被調整デバイス1712の機能性を管理するように構成されているコンピューティングデバイスに対応することができる。いくつかの例では、被調整デバイス1712は、ロバストな局所化されたユーザインタフェース能力を伴う、ラップトップ、デスクトップ、スタンドアロンメディアプレイヤ等の十分に特徴付けられたコンピューティングデバイスに対応することができる。他の例では、被調整デバイス1712は、家庭用器具またはデバイス(冷蔵庫、洗濯機、湯沸し器、加熱炉、ドアロック、照明バルブ、電気コンセント、電気スイッチ等)内に埋め込まれた、またはそれらに付属品として取り付けられたデバイス等の別の主要機能と関連付けられるシンデバイスまたは埋め込みデバイスに対応することができる。係る器具またはデバイスは、いくつかのコンテキストでは、「スマート」デバイス、IoTデバイス、または「接続」デバイスと称される。したがって、被調整デバイス1712は、制限されたローカルユーザインタフェースを含み、リモート管理のために構成され得る。いくつかの例では、被調整デバイス1712は、ステートフルであり得、命令に応答してそれらの状態を変えるように動作し得る(例えば、「オフ」から「オン」に変化させること等によって変わる)。
さらに下記に詳細に説明されるように(例えば、図18に関して)、コーディネータ1714は、被調整デバイス1712に伝達された命令が被調整環境1710の外側に伝わることを要求することなく(従って、係る命令のセキュリティが強化され、その伝達速度が速くなる)、被調整デバイス1712の動作を調整、管理、または制御する命令を実行するコンピューティングデバイスに対応することができる。具体的には、コーディネータ1714は、被調整デバイス1712、クライアントデバイス1702、およびサービスプロバイダネットワーク1720のデバイスの任意の組み合わせの間の通信を管理するように集合的に構成されているプロセッサおよびメモリを含み得る。コーディネータは、さらに、サービスプロバイダ環境1720のオンデマンドコード実行環境1720と同様の方式で、タスクの実行を可能にするように構成され得る。これらのタスクは、被調整デバイス1712、クライアントデバイス1702、およびサービスプロバイダネットワーク1720のデバイスと通信することを含む、様々なユーザにより定義された機能性またはユーザにより定義されていない機能性を実施し得る。したがって、コーディネータ1714は、被調整デバイス1712の手動制御、自動制御、または半自動制御を可能にするように構成され得る。例えば、コーディネータ1714は、クライアントデバイス1702が、被調整デバイス1712の状態を変更する要求を伝達することを可能にし、状態の係る変更を発生させ得る。さらなる例として、コーディネータ1714は、被調整デバイス1712の状態を変更するべき基準をユーザが指定することを可能にし、次に、基準が満たされるときに被調整デバイス1712の状態を自動的に変更するように動作し得る。下記に説明されるように、コーディネータ1714の多くの機能は、タスクによって確立され得、ユーザによって所望されるように、これらの機能の即時の変更を可能にする。
クライアントデバイス1702は、ユーザが被調整環境1710、サービスプロバイダ環境1720、またはそれらの両方と通信することを可能にする、様々なコンピューティングデバイスを含み得る。概して、クライアントデバイス1702は、デスクトップ、ラップトップもしくはタブレットコンピュータ、パーソナルコンピュータ、ウェアラブルコンピュータ、サーバ、携帯情報端末(PDA)、ハイブリッドPDA/携帯電話、携帯電話、電子ブックリーダ、セットトップボックス、ボイスコマンドデバイス、カメラ、およびデジタルメディアプレイヤ等の任意のコンピューティングデバイスであり得る。サービスプロバイダ環境1720は、コーディネータ1714に関する構成をサブミットし、当該構成の配置を制御し、コーディネータ1714上またはサービスプロバイダ環境1720のオンデマンドコード実行環境1750上で実行されるタスクに対応するコードをサブミットし、コーディネータ1714に関連する情報のロギングまたは監視を参照する等のために、サービスプロバイダ環境1720と相互作用するための1つ以上のユーザインタフェース、コマンドラインインタフェース(CLI)、アプリケーションプログラミングインタフェース(API)、および/または他のプログラムインタフェースをクライアントデバイス1702に提供し得る。同様に、コーディネータ1714は、被調整デバイス1712の状態を読み出し、被調整デバイス1712の状態の変更を要求し、コーディネータ1714がタスクの実行を生じさせることを要求する等のために、コーディネータ1714と相互作用するための1つ以上のユーザインタフェース、コマンドラインインタフェース(CLI)、アプリケーションプログラミングインタフェース(API)、および/または他のプログラムインタフェースをクライアントデバイス1702に提供し得る。1つ以上の実施形態がユーザインタフェースを使用するとして本明細書に説明され得るが、係る実施形態は、加えてまたは代わりに、任意のCLI、API、または他のプログラムインタフェースを使用し得ることを認識されたい。
サービスプロバイダ環境1720は、コーディネータ1714の構成、コーディネータ1714の管理、およびコーディネータ1714との通信を可能にするいくつかの要素を含み得る。具体的には、サービスプロバイダ環境1720は、サービスプロバイダ環境1720へのコーディネータ1714の登録および係るコーディネータ1714の構成を可能にする管理および配置サービス1730と、コーディネータ1714および被調整デバイス1712の状態へのロバストな変更を可能にするデバイスシャドウサービス1740と、コーディネータ1714上のタスクのオンデマンドな動的実行と共に、コーディネータ1714上のタスクの配置およびプロビジョニングを提供するオンデマンドコード実行環境1750とを含む。
図17に示されるように、管理および配置サービス1730は、クライアントおよびデータインタフェース1732と、構成データストア1734とを含み、これらは管理および配置サービス1730へのコーディネータ1714の登録、コーディネータ1714に関する構成の生成、およびコーディネータ1714への構成データの伝送を可能にするように集合的に動作し得る。例示として、クライアントおよびデータインタフェース1732は、1つ以上のユーザインタフェース(例えば、API、CLI、GUI等)を提供し得、1つ以上のユーザインタフェースを経由して、ユーザは、クライアントデバイス1702を介して、構成データストア1734に記憶するために、コーディネータ1714の構成を生成またはサブミットし得る。クライアントおよびデータインタフェース1732は、さらに、1つ以上のインタフェースを提供し得、1つ以上のインタフェースを経由して、コーディネータ1714は構成を取得し得、その結果、コーディネータ1714は、取得された構成に従って再構成される。構成データストア1734は、ハードドライブ(HDD)、ソリッドステートドライブ(SDD)、ネットワーク接続ストレージ(NAS)、テープドライブ、または任意のそれらの組み合わせ等の任意の永続的データストアまたは実質的に永続的データストアに対応することができる。
デバイスシャドウサービス1740は、コーディネータ1714または被調整デバイス1712等のデバイスの「シャドウ状態」を作成し、維持し、読み取り、変え、または削除することを可能にする要素を含み得る。上記に説明したように、シャドウ状態は、対応するデバイスの所望の状態を表すデータに対応し得、対応するデバイスは、デバイスの現在の状態を反映し得る、または反映しない場合がある。例えば、コーディネータ1714に関して、シャドウ状態は、コーディネータ1714に関する所望の構成バージョンを含み得る。被調整デバイス1712に関して、シャドウ状態は、被調整デバイス1712の所望の状態(例えば、スイッチまたはバルブに関するオンまたはオフ、ロックに対してロックされまたはロックされていない、温度調節器に関する所望の温度等)を含み得る。デバイスシャドウサービス1740は、ユーザまたは他のエンティティが、クライアントデバイス1702を介して、デバイスに関するシャドウ状態から読み出す、またはデバイスに関するシャドウ状態を修正することを可能にし得、さらに、デバイスをシャドウ状態に同期するように当該デバイスと相互作用し得る。例示として、デバイスシャドウサービス1740は、インタフェース1742(例えば、API、CLI、GUI等を含み得る)を含み得、インタフェース1742を経由して、シャドウ状態から読み出し、シャドウ状態に記述し、シャドウ状態を作成または削除する要求が受信され得、シャドウデータストア1744は、シャドウ状態を記憶するように構成され得る。シャドウデータストア1734は、ハードドライブ(HDD)、ソリッドステートドライブ(SDD)、ネットワークアタッチドストレージ(NAS)、テープドライブ、または任意のそれらの組み合わせ等の任意の永続的データストアまたは実質的に永続的データストアに対応することができる。デバイスシャドウの使用に関するさらなる詳細は、「Device Representation Management Using Representation Types」と題し、2016年6月29日に出願された米国特許出願第15/196,700号(「700出願」)の中に見ることができ、その全体が参照によって本明細書に組み込まれる。
オンデマンドコード実行環境1750は、タスク(例えば、ポータブルコードセグメント)のオンデマンド実行を提供するいくつかのデバイスを含み得る。具体的には、オンデマンドコード実行環境1750は、フロントエンド1752を含み得、フロントエンド1752を経由して、ユーザは、クライアントデバイス1702を介して、オンデマンドコード実行環境1750にタスクをサブミットし、オンデマンドコード実行環境1750上でタスクの実行を呼び出し得る。係るタスクは、例えば、タスクデータストア1754に記憶され得、タスクデータストア1754は、ハードドライブ(HDD)、ソリッドステートドライブ(SDD)、ネットワーク接続ストレージ(NAS)、テープドライブ、または任意のそれらの組み合わせ等の任意の永続的データストアまたは実質的に永続的データストアに対応することができる。図17に示されていないが、オンデマンドコード実行システム1750は、いくつかの実行環境等のタスクの実行を可能にする様々な追加コンポーネント(例えば、オンデマンドコード実行環境1750の物理ホストデバイス上で実行するコンテナまたは仮想マシン)、係る実行環境を管理するワーカマネージャ、および即時ベースで(例えば、10ミリ秒を下回る時間で)ワーカマネージャに、実行環境を利用可能にすることを支援するウォーミングプールマネージャを含み得る。オンデマンドコード実行環境に関するさらなる詳細は、上記の参照によって組み込まれる「556特許」の中に見ることができる。
上記に述べられたように、タスクは、オンデマンドコード実行環境1750およびコーディネータ1714の両方において利用され得る。上記に述べられたように、タスクは、(例えば、特定の機能を達成するための)ユーザコードの個々の集合に対応する。本明細書に使用されるようなユーザコードへの参照は、特定のプログラム言語で記述された任意のプログラムコード(例えば、プログラム、ルーチン、サブルーチン、スレッド等)を指し得る。本開示では、用語「コード」、「ユーザコード」、および「プログラムコード」は、交換可能に使用され得る。係るユーザコードは、例えば、ユーザによって開発された特定のウェブアプリケーションまたはモバイルアプリケーションに関連して、特定の機能を達成するように実行され得る。当該コードの指定の実行は、本明細書で「タスク実行」または単に「実行」と称される。タスクは、非限定的な例として、JavaScript(例えば、node.js)、Java、Python、および/またはRuby(および/または別のプログラミング言語)で記述され得る。タスクは、様々な方式でオンデマンドコード実行システム1750またはコーディネータ1714上で実行するために「トリガ」され得る。一実施形態では、クライアントデバイス1702または他のコンピューティングデバイスは、タスクを実行する要求を伝達し得、それは、一般的に、タスクを実行する「呼び出し」と称され得る。係る呼び出しは、実行されるユーザコード(または、その場所)と、ユーザコードを実行するために使用される1つ以上の引数とを含み得る。例えば、呼び出しは、タスクを実行する要求と一緒にタスクのユーザコードを提供し得る。別の例では、呼び出しは、その名前または識別子によって事前にアップロードされたタスクを識別し得る。さらなる別の例では、タスクに対応するコードは、タスクに関する呼び出しに含まれ得、要求がコーディネータ1714またはオンデマンドコード実行システム1750によって受信される前に、別個の場所(例えば、コーディネータ1714のストレージ、ネットワークアクセス可能なストレージサービス、またはタスクデータストア1754)にアップロードされる。コーディネータ1714またはオンデマンドコード実行システム1750の要求インタフェースは、ユーザから、ハイパーテキスト転送プロトコルセキュア(HTTPS)要求としてタスクを実行する呼び出しを受信し得る。また、HTTPS要求に含まれる任意の情報(例えば、ヘッダおよびパラメータ)も、タスクを実行するときに処理および利用され得る。上記に説明されたように、例えば、HTTP、MQTT、およびCoAPを含む任意の他のプロトコルは、要求インタフェース1722にタスク呼び出しを含有するメッセージを転送するために使用され得る。
タスクを実行する呼び出しは、タスクに対応するユーザコードと一緒に使用される1つ以上の第三者ライブラリ(ネイティブライブラリを含む)を指定し得る。一実施形態では、呼び出しは、コーディネータ1714またはオンデマンドコード実行システム1750に、実行のために要求されたタスクに対応するユーザコードおよび任意のライブラリ(および/または、その記憶場所の識別)を含有するZIPファイルを提供し得る。いくつかの実施形態では、呼び出しは、実行されるタスクのプログラムコード、プログラムコードが記述された言語、呼び出しと関連付けられたユーザ、および/またはプログラムコードを実行するために保存されるコンピューティングリソース(例えば、メモリ等)を示すメタデータを含む。例えば、タスクのプログラムコードは、呼び出しとともに提供され得る、ユーザによって事前にアップロードされ得る、コーディネータ1714もしくはオンデマンドコード実行システム1750(例えば、標準ルーチン)によって提供され得る、および/または第三者によって提供され得る。いくつかの実施形態では、係るリソースレベルの制約(例えば、どの程度のメモリが特定のユーザコードを実行するために割り当てられるか)は、特定のタスクのために指定され、タスクの各実行を通じて変化しない場合がある。係る場合、コーディネータ1740またはオンデマンドコード実行システム1750は、個々の呼び出しのそれぞれが受信される前に、係るリソースレベルの制約へのアクセスを有し得、個々の呼び出しは、係るリソースレベルの制約を指定しない場合がある。いくつかの実施形態では、呼び出しは、どの種類のパーミッションまたは権限が、呼び出しがタスクを実行することを引き起こすかを示すパーミッションデータ等の他の制約を指定し得る。係るパーミッションデータは、(例えば、プライベートネットワーク上の)プライベートリソースにアクセスするためにオンデマンドコード実行システム1710によって使用され得る。
いくつかの実施形態では、呼び出しは、呼び出しを扱うために採用されるべきである挙動を指定し得る。係る実施形態では、呼び出しは、呼び出しで参照されるタスクを実行するための1つ以上の実行モードを可能にするためのインジケータを含み得る。例えば、呼び出しは、デバッグモードでタスクが実行されるべきかどうかを示すためのフラグまたはヘッダを含み得、デバッグモードでは、タスクの実行と関連して生成され得るデバッギングおよび/またはロギング出力がユーザに(例えば、コンソールユーザインタフェースを介して)再度提供される。係る例では、コーディネータ1714またはオンデマンドコード実行システム1750は、呼び出しを検査し、フラグまたはヘッダを探索し得、それが存在する場合、コーディネータ1714またはオンデマンドコード実行システム1750は、タスクが実行される実行環境の挙動(例えば、ロギング機能)を修正し、出力データをユーザに再度提供させ得る。いくつかの実施形態では、挙動/モードインジケータは、コーディネータ1714またはオンデマンドコード実行システム1750によってユーザに提供されるユーザインタフェースによって呼び出しに追加される。ソースコードプロファイリング、リモートデバッギング等の他の特徴は、また、呼び出しにおいて提供されるインジケーションに基づいて、有効または無効にされ得る。
サービスプロバイダ環境1720は、1つ以上のコンピュータネットワーク(図17に示されない)を使用して相互接続された、いくつかのコンピュータシステムを含む分散コンピューティング環境において動作するものとして図17に示される。サービスプロバイダ環境1720は、また、図17に示されるデバイスよりも少ない数または多い数のデバイスを有するコンピューティング環境内で動作し得る。したがって、図17のサービスプロバイダ環境1720の表現は、例示的であると見なされ、本開示を限定するものと見なすべきではない。例えば、サービスプロバイダ環境1720またはその様々な構成は、本明細書に説明されるプロセスの少なくとも一部を実施するために、様々なウェブサービスコンポーネント、ホストされたコンピューティング環境もしくは「クラウド」コンピューティング環境、および/またはピアツーピアネットワーク構成を実装し得る。
さらに、サービスプロバイダ環境1720は、ハードウェア、またはハードウェアデバイスによって実行されるソフトウェアに直接実装され得、例えば、本明細書に説明される様々な特徴を行うためのコンピュータ実行可能命令を実行するように構成されている物理コンピュータハードウェア上で実装された1つ以上の物理サーバまたは仮想サーバを含み得る。1つ以上のサーバは、例えば、1つ以上のデータセンター内で、地理的に分散され得る、または地理的に同一場所に配置され得る。いくつかの例では、1つ以上のサーバは、多くの場合「クラウドコンピューティング環境」と称される、即時にプロビジョニングされ、解放されるコンピューティングリソースのシステムの一部として動作し得る。
図18は、所与の被調整環境1710内で被調整デバイス1712を管理するコンピューティングシステム(コーディネータ1714と称される)の一般的アーキテクチャを示す。図18に示されるワーカマネージャ1740の一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアモジュールの配列を含む。ハードウェアモジュールは、下記にさらに詳細に説明されるように、物理電子デバイスが実装され得る。コーディネータ1714は、図18に示される要素よりもさらに多くの(または、少ない)要素を含み得る。しかしながら、開示を可能にすることをもたらすために、それらの一般的な従来の要素の全てが示される必要はない。加えて、図18に示される一般的アーキテクチャは、図17に示される他のコンポーネントうちの1つ以上を実装するために使用され得る。示されるように、コーディネータ1714は、プロセシングユニット1804、ネットワークインタフェース1806、コンピュータ可読媒体ドライブ1807、および入力/出力デバイスインタフェース1808を含み、それらの全ては、通信バスによって相互に通信し得る。ネットワークインタフェース1806は、1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット1804は、ネットワーク1704を介して、他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。プロセシングユニット1804は、また、メモリ1850との間で通信し、さらに、入力/出力デバイスインタフェース1808を介して、任意選択のディスプレイ(図示しない)に出力情報を提供し得る。入力/出力デバイスインタフェース1808は、また、任意選択の入力デバイス(図示しない)から入力を受け得る。
メモリ1850は、本開示の1つ以上の態様を実装するために、プロセシングユニット1804が実行するコンピュータプログラム命令(いくつかの実施形態では、モジュールとしてグループ化される)を含有し得る。メモリ1850は、一般的に、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、および/または他の永続的な、補助的もしくは非一時的コンピュータ可読媒体を含む。メモリ1850は、コーディネータ1714の一般管理および動作において、プロセシングユニット1804による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム1852を記憶し得る。メモリ1850は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ1850は、プロセスマネージャ1854、スケジューラ1856、配置エージェント1858、および通信マネージャ1860を含む。
スケジューラ1856および配置エージェント1858は、プロセシングユニット1804による実行のためのタスクを選択し、係るタスク実行を管理するようにプロセシングユニット1804によって実行され得る。具体的には、スケジューラ1856は、(例えば、コーディネータ1714において制約されたリソースのインスタンスの下で)所与の時点における実行のためのタスクを選択し、タスクの実行を中断する命令を含み得る。配置エージェント1858は、タスクを実行するための適切な実行環境1870を選択し、当該実行環境1870に、タスク実行中に必要なリソースへの適切なアクセスをプロビジョニングし、実行環境1870内でタスクの実行を生じさせる命令を含み得る。本明細書で使用されるような実行環境1870は、タスクを実行するためのメモリ1850の論理部分を指す。一実施形態では、実行環境1870は、プログラム的に分離され、その結果、第1の実行環境1870内でのコードの実行は、別の実行環境1870と関連付けられたメモリを修正することが防止される。例示として、実行環境1870は、「コンテナ」、オペレーティングシステムレベルの仮想化環境、または「chroot jail」もしくはPython仮想環境「virtualenv」等の「サンドボックス」環境に対応し得る。他の例では、実行環境1870は、仮想マシン環境(例えば、JAVA仮想マシン、異なったオペレーティングシステムを伴う仮想化されたハードウェアデバイス等)に対応し得る。さらなる他の例では、実行環境1870は、仮想化を必ずしも利用することなく、タスクの実行に割り当てられたメモリ空間であり得る。
コーディネータ上で実行するタスクの間の通信と共に、コーディネータ1714と他のデバイス(例えば、クライアントデバイス1702および被調整デバイス1712)との間の通信は、通信マネージャ1860によって容易にされ得る。具体的には、通信マネージャ1860は、コーディネータ1714に向けられたメッセージを取得し、適切な宛先にメッセージを転送するように構成され得る。例えば、通信マネージャ1860は、タスク、被調整デバイス1712、クライアントデバイス1702、およびサービスプロバイダ実行環境1720のデバイスのいずれかの組み合わせの間でメッセージを送り得る。下記にさらに詳細に説明されるように、通信マネージャ1860は、指定トピックと関連付けられるメッセージを変換することができ、その結果、当該メッセージは、デバイスのより少ないサブセットにサブスクライブされるトピックに向けられる。
コーディネータ1714によって実行されるタスクは、タスクメモリ空間1880内で論理的にグループ化されるものとして示され、タスクメモリ空間1880は、各タスクに対応するコードを記憶するように構成されているメモリ250の論理ユニットに対応し得る。図18に示されるように、タスクメモリ空間1880は、ルータタスク1882、1つ以上の通信マネージャタスク1886、シャドウサービスタスク1888、および1つ以上のクライアントにより提供されるタスク1890を含む、コーディネータ1714の機能性を実施するようにプロセシングユニット1804によって実行可能ないくつかのタスクを含み得る。
ルータタスク1882は、コーディネータ内での、コーディネータへの、およびコーディネータからのメッセージのルーティングを支援するように実行可能なコードの一部に対応し得る。一実施形態では、ルータタスク1882は、メッセージに関する適切な宛先を判定するために「ルーティングテーブル」を実装する。例えば、通信マネージャ1860は、(例えば、タスク実行による生成、または入力/出力インタフェース208における受信に起因して)ルータタスク1882に、コーディネータ1714において取得されたメッセージを転送し得、ルータタスク1882は、ある識別子にアドレス指定されたメッセージが所与のタスク、所与のクライアントデバイス1702、または所与の被調整デバイス1702に送られるべきであると判定するためにルーティングテーブルを利用し得る。ルーティングテーブルはさらに、識別子にアドレス指定されたメッセージがサービスプロバイダ環境1720に(例えば、デバイスシャドウサービス1740またはオンデマンドコード実行システム1750に)伝達されるべきであることを示し得る。一実施形態では、ルーティングテーブルは、識別子として「トピック」を利用し得、その結果、特定のトピックと関連付けられたメッセージは、当該トピックに関して指定されたルーティングに従って送られる。ルーティングテーブルは、さらに、メッセージのソースに基づいて、そのメッセージをどのように送るかに関する情報を含み得る。例えば、所与のトピックにアドレス指定されたメッセージは、メッセージが第1のタスク、第2のタスク、第1の被調整デバイス1712等から受信されるかどうかに基づいて、異なって送られ得る。ルーティングテーブルの利用によって、ルータタスク1882は、メッセージの送信側の動作の変更なしに(例えば、メッセージを生成したタスクに関するコードを再記述することなく、メッセージを生成した被調整デバイス1712のソフトウェアを修正すること等なく)、係るメッセージをリダイレクトすることを可能にし得る。
通信マネージャタスク1886は、通信のプロトコルに従って、コーディネータ1714と、いくつかの異なる外部デバイス(例えば、被調整デバイス1702)との間の係る通信を可能にし得る。例えば、第1の通信マネージャタスク1886は、BLUETOOTH(商標)プロトコルを使用して通信を管理するように構成され得、第2の通信マネージャは、HTTPプロトコルを使用して通信を管理するように構成され得る等のことがある。いくつかの例では、複数の通信マネージャタスク1886は、通信を実施するように集合的に作用し得る。例えば、第1の通信マネージャタスク1886は、TCPプロトコルを介した通信を可能にし得る一方、第2の通信マネージャタスク1886は、MQTTプロトコル(TCPプロトコルを利用し、ひいては、第1の通信マネージャタスク1886を利用し得る)を介した通信を可能にし得る。異なる通信マネージャタスク1886が異なるプロトコルを介して通信するコーディネータ1714の能力を変化させることができるために、およびコーディネータ1714のタスクがコーディネータ1714の再構成によって変わり得るために、コーディネータ1714は、様々な異なる通信プロトコルを利用するように即時に再構成され得る。
シャドウサービスタスク1888は、コーディネータ1714において維持されたデバイスシャドウの管理と、デバイスシャドウとの相互作用とを容易にすることができる。例示として、シャドウサービスタスク1888は、コーディネータ1714に対してローカルにデバイスシャドウサービス1740によって提供されるものと同様の機能性を実施することができる。したがって、シャドウサービスタスク1888は、被調整デバイス1712のシャドウ状態(所望の状態を表すデータ)を維持し、係るデータへの読み出しまたは書き込みを可能にし得る。シャドウサービスタスク1888は、さらに、被調整デバイス1712に関するデバイスシャドウとの被調整デバイス1712の同期を可能にし得る。したがって、被調整デバイス1712に関するデバイスシャドウを修正することによって、被調整デバイス1712の状態が変わり得る。被調整デバイス1712に関するデバイスシャドウを読み出すことによって、被調整デバイス1712の状態を判定することができる。いくつかの例では、シャドウサービスタスク1888は、さらに、デバイスシャドウサービス1740によって維持されるデバイスシャドウ等の所与のデバイスに関する別のデバイスシャドウに合わせて調整し得る。例えば、シャドウサービスタスク1888は、ローカルデバイスシャドウを、デバイスシャドウサービス1740に記憶されたデバイスシャドウと同期し、ローカルデバイスシャドウと、デバイスシャドウサービス1740に記憶されたデバイスシャドウとの間の不一致を解決し得る等を行う。
上記に説明したタスク(それらのそれぞれが、例示として、サービスプロバイダ環境1720と関連付けられたエンティティによって提供され得る)に加えて、タスクメモリ空間1880は、任意の数のクライアントにより提供されるタスク1890を含み得、クライアントにより提供されるタスク1890は、クライアントデバイス1702によって生成され、コーディネータ1714への配置のためにサービスプロバイダ環境1720にサブミットされる実行可能なコードに対応し得る。したがって、クライアントにより提供されるタスク1890によって提供される機能性は、サブミットするユーザの要望に従って変化し得る。いくつかの例では、クライアントにより提供されるタスク1890は、メモリ1850が言語ランタイムを含むコーディング言語で記述され得る。例えば、コーディネータ1714がnode.js、Go、JAVA、およびPython等の言語をサポートする場合、クライアントにより提供されるタスク1890は、それらの言語のいずれかで記述された実行可能なコードを含み得る。
加えて、メモリ1850は、コーディネータ1714の構成データが記憶されたメモリ1850の論理部分を表す、構成データ部1872を含む。構成データは、例えば、コーディネータ1714の現在の配置バージョン、タスクメモリ空間1880のタスクによって記憶されたデータ、またはコーディネータ1714の動作において使用される他のデータを含み得る。
コーディネータ1714の構成(および再構成)を可能にするために、メモリ1850は、さらに、配置エージェント1858を含む。配置エージェント1858は、サービスプロバイダ環境1720にコーディネータを登録し、コーディネータ1714の所望の構成を判定し、コーディネータ1714の現在の構成が所望の構成と一致しない例では、コーディネータ1714に関する構成データを取得し、所望の構成を実装するためにメモリ1850を修正するように実行可能なコードに対応することができる。
図19Aは、本出願に従った、例示的な被調整デバイス1712Aのアーキテクチャの一実施形態を示す。図19Aに示される被調整デバイス1712Aの一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアコンポーネントの配列を含む。例示されるように、被調整デバイス1712Aは、プロセシングユニット1904、ネットワークインタフェース1906、コンピュータ可読媒体ドライブ1907、入力/出力デバイスインタフェース1920、任意選択のディスプレイ1902、および入力デバイス1924を含み、それらの全ては、通信バスによって相互に通信し得る。例示として、被調整デバイス1712Aは、埋め込みデバイスとして、入力または出力等のより制限された機能性およびコンポーネントを有し得る。
ネットワークインタフェース1906は、図17のネットワーク1704等の1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット1904は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。プロセシングユニット1904はまた、メモリ1910におよびメモリ1910から通信し、さらに、入力/出力デバイスインタフェース1920を介して、任意選択のディスプレイ1902に出力情報を提供し得る。入力/出力デバイスインタフェース1920は、また、キーボード、マウス、デジタルペン等の任意選択の入力デバイス1924から入力を受け得る。いくつかの実施形態では、被調整デバイス1712Aは、図19Aに示されるものよりも多い(または、少ない)コンポーネントを含み得る。例えば、被調整デバイス1712のいくつかの実施形態は、ディスプレイ1902および入力デバイス1924を省略し得る一方、1つ以上の代替通信チャネルを経由して(例えば、ネットワークインタフェース1906を介して)入力/出力能力を提供する。加えて、被調整デバイス1712Aは、同様に、入力および出力インタフェース1920を完全に省略し得る。
メモリ1910は、1つ以上の実施形態を実装するために、プロセシングユニット1904が実行するコンピュータプログラム命令を含み得る。メモリ1910は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。メモリ1910は、被調整デバイス1712Aの一般管理および動作においてプロセシングユニット1904による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム1914を記憶し得る。メモリ1910は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ1910は、コンテンツにアクセスするためのブラウザアプリケーション1916を含む。例示として、ブラウザアプリケーション1916は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を包含し得る、または単に、データ接続性を提供するソフトウェアアプリケーション(または実行可能命令)であり得る。
図19Bは、本出願に従った、例示的な被調整デバイス1712Bの代替アーキテクチャの一実施形態を示す。図19Bに示される被調整デバイス1712Bの一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアコンポーネントの配列を含む。しかしながら、被調整デバイス1712Bは、被調整デバイス1712Bの計算機能および動作を制限し得る少なくなったコンポーネントと関連付けられ得る。例示として、被調整デバイス1712Bは、通信バスと通信する、プロセシングユニット1950およびネットワークインタフェース1952を含む。図19Aの被調整デバイス1712Aとは異なり、被調整デバイス1712Bは、コンピュータ可読媒体ドライブ、入力/出力デバイスインタフェース、任意選択のディスプレイ、または入力デバイスを有さない場合がある。
ネットワークインタフェース1952は、図17のネットワーク1704等の1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット1950は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。メモリ1954は、1つ以上の実施形態を実装するために、プロセシングユニット1950が実行するコンピュータプログラム命令を含み得る。メモリ1954は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。本実施形態では、メモリ1954は、被調整デバイス1712Bの一般管理および動作においてプロセシングユニット1950による使用のためのコンピュータプログラム命令を提供する完全なオペレーティングシステムを必ず記憶し得る。むしろ、一実施形態では、メモリ1954は、命令にアクセスし、命令を受信し、命令を処理するためのインタフェースソフトウェアコンポーネント1956を含む。
図20は、本出願に従った、例示的なクライアントデバイス1702のアーキテクチャの一実施形態を示す。図20に示されるクライアントデバイス1702の一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアコンポーネントの配列を含む。例示されるように、クライアントデバイス1702は、プロセシングユニット2004、ネットワークインタフェース2006、コンピュータ可読媒体ドライブ407、入力/出力デバイスインタフェース2020、任意選択のディスプレイ2002、および入力デバイス2024を含み、それらの全ては、通信バスによって相互に通信し得る。
ネットワークインタフェース2006は、図17のネットワーク1704等の1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット2004は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。プロセシングユニット2004はまた、メモリ2010におよびメモリ2010から通信し、さらに、入力/出力デバイスインタフェース2020を介して、任意選択のディスプレイ2002に出力情報を提供し得る。入力/出力デバイスインタフェース2020は、また、キーボード、マウス、デジタルペン等の任意選択の入力デバイス2024から入力を受け得る。いくつかの実施形態では、クライアントデバイス1702は、図20に示されるものよりも多い(または、少ない)コンポーネントを含み得る。例えば、被調整デバイス1712のいくつかの実施形態は、ディスプレイ2002および入力デバイス2024を省略し得る一方、1つ以上の代替通信チャネルを経由して(例えば、ネットワークインタフェース2006を介して)入力/出力能力を提供する。加えて、クライアントデバイス1702は、同様に、入力および出力インタフェース2020を完全に省略し得る。
メモリ2010は、1つ以上の実施形態を実装するために、プロセシングユニット2004が実行するコンピュータプログラム命令を含み得る。メモリ2010は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。メモリ2010は、クライアントデバイス1702の一般管理および動作においてプロセシングユニット2004による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム2014を記憶し得る。メモリ2010は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ2010は、コンテンツにアクセスするためのブラウザアプリケーション2016を含む。例示として、ブラウザアプリケーション2016は、完全なソフトウェアブラウザアプリケーション、ブラウザアプリケーションの一部を包含し得る、または単に、データ接続性を提供するソフトウェアアプリケーション(または実行可能命令)であり得る。
図21は、本明細書に説明されるメッセージ処理サービスコンポーネントを実装するための例示的コンピューティングデバイスのアーキテクチャの一実施形態を示す。前述に説明したように、当該環境内の1つ以上のコンピューティングデバイスは、MQTTブローカー等のメッセージ処理サービスとして機能し得る。他の実施形態では、メッセージ処理サービスは、ネットワークコンポーネントに実装され得る。したがって、図21に示されるメッセージ処理サービスの一般的アーキテクチャは、本開示の態様を実装するために使用され得るコンピュータハードウェアおよびソフトウェアコンポーネントの配列を含む。例示されるように、リモートコマンドサービス1714は、プロセシングユニット2104、ネットワークインタフェース2106、コンピュータ可読媒体ドライブ2107、入力/出力デバイスインタフェース2108、任意選択のディスプレイ2102、および入力デバイス2124を含み、それらの全ては、通信バスによって相互に通信し得る。リモートコマンドサービス1714のコンポーネントは、物理ハードウェアコンポーネントであり得る、または仮想環境内で実装され得る。
ネットワークインタフェース2106は、図17のネットワーク1750等の1つ以上のネットワークまたはコンピューティングシステムに接続性を提供し得る。したがって、プロセシングユニット2104は、ネットワークを介して他のコンピューティングシステムまたはサービスから情報および命令を受信し得る。プロセシングユニット2104はまた、メモリ2110におよびメモリ2110から通信し、さらに、入力/出力デバイスインタフェース2108を介して、任意選択のディスプレイ2102に出力情報を提供し得る。入力/出力デバイスインタフェース2108は、また、キーボード、マウス、デジタルペン等の任意選択の入力デバイス2124から入力を受け得る。いくつかの実施形態では、リモートコマンドサービス1714は、図21に示されるものよりも多い(または、少ない)コンポーネントを含み得る。例えば、リモートコマンドサービス1714のいくつかの実施形態は、ディスプレイ2002および入力デバイス2024を省略し得る一方、1つ以上の代替通信チャネルを経由して(例えば、ネットワークインタフェース2106を介して)入力/出力能力を提供する。
メモリ2110は、1つ以上の実施形態を実装するために、プロセシングユニット2104が実行するコンピュータプログラム命令を含み得る。メモリ2110は、一般的に、RAM、ROM、または他の永続的メモリもしくは非一時的メモリを含む。メモリ2110は、中間サーバ1714の一般管理および動作において、プロセシングユニット2104による使用のためのコンピュータプログラム命令を提供するオペレーティングシステム2114を記憶し得る。メモリ2110は、さらに、本開示の態様を実装するためのコンピュータプログラム命令および他の情報を含み得る。例えば、一実施形態では、メモリ2110は、クライアントデバイス1702からコンテンツ要求を受信および処理するためのクライアントインタフェースソフトウェア2112を含む。加えて、メモリ2110は、受信された通信を処理するための通信マネージャコンポーネント2116を含む。例示として、通信マネージャ2116は、指定トピックと関連付けられるメッセージを変換することができ、その結果、当該メッセージは、デバイスのより少ないサブセットにサブスクライブされるトピックに向けられる。
ここで、図22A〜図22Dを参照して、コンテンツメッセージを処理するコンテンツ管理システム1710のコンポーネント間の相互作用の例を説明する。より具体的には、図22A〜図22Dは、被調整デバイス1712、クライアントデバイス1702、およびメッセージ処理サービスの間の相互作用に関して説明される。前述に示したように、メッセージ処理サービスは、コーディネータ1714または他のネットワーク機器を含む、様々なデバイスによって実施されることができる。加えて、被調整デバイス1712は、被調整デバイス1712(図19A)、被調整デバイス1712(図19B)、またはそれらの組み合わせに対応することができる。しかしながら、相互作用の参照は、例示の目的のために使用される場合でも、任意の特定のデバイスまたはデバイスの組み合わせに限定されるべきではない。
図22Aを参照して、メッセージ処理サービスの初期構成を説明する。例示として、クライアントまたはシステムアドミニストレータは、受信された通信の解釈を容易にする情報を伴うメッセージ処理サービスを構成する。一実施形態では、メッセージ処理サービスは、いくつかの潜在的被調整環境1710の1つに通信を提供するために、サービスプロバイダ環境1720によって実施されることができる。別の実施形態では、メッセージ処理サービスは、いくつかの被調整デバイス1712の1つに通信を提供するために、コーディネータ1714によって実施されることができる。したがって、図22A〜図22Dでは、単独で、いずかの実施形態または他の変形例における実装に限定するべきではない。しかしながら、例示の目的のために、図22A〜図22Dは、コーディネータ1714と被調整デバイスのセットとの間の相互作用に関して説明される。
例示的環境に従って、通信ネットワーク1704にわたってメッセージを伝達するために利用される実際の通信プロトコルに関わらず、MQTTメッセージングプロトコルに従って、通信を形成することができる。MQTTプロトコルに特有であるように、各メッセージは、通信を定義する1つ以上のワードのグループを有するトピック部と関連付けられる、またはそれ以外の場合、当該通信と関連付けられる。分離可能なワードのグループのそれぞれは、概して、レベルと称され得、トピック部は、複数のレベルを有し得る。下記の例は、第1のレベル「基本レベル」、次に、一連の追加レベル「レベル1」〜「レベルn」を含む。各追加レベルは、トピックセパレータによって示される。
基本レベル/レベル1/レベル2/レベル3..../レベルnのように示される。
前述に説明されたように、従来のMQTTプロトコルでは、メッセージを受信するメッセージコーディネータ1714は、トピックごとに発行されるメッセージを受信するために登録している1つ以上の受信側デバイスと、トピックを一致させることを試みる。例えば、メッセージコーディネータ1714は、メッセージの1つ以上のトピック部を探索し、(全体的または部分的に)トピック登録と一致させる。コーディネータ1714は、全てのレベルの完全一致または1つ以上のレベルの部分一致に対する判定を限定し得る。
ここで、図22Aを参照すると、(1)において、アドミニストレータまたはカスタマに対応するクライアンデバイス1702は、構成情報をコーディネータ1714に伝達することができる。例示として、構成情報は1つ以上の命令、論理ルール、またはアクションのセットを定義する処理ステップに対応し、コーディネータ1714のメッセージ処理サービスは受信済メッセージのトピック部の一致、メッセージのソース等に基づいてメッセージを引き受けることができる。例えば、コーディネータ1714のメッセージ処理サービスの1つの構成は、あてがわれたタスクに対応する通信を指定の被調整デバイス1712によって実施するべきであるかどうかの定義を含み得る。この例では、被調整デバイス1712のセットは、対応するトピックを伴うコンテンツメッセージを受信するためにサブスクライブされ得るが、メッセージを受信する当該デバイスは、コーディネータ1714によって識別されるルールの評価に依存し得る。
別の例では、コーディネータ1714のメッセージ処理サービスは、以下の情報を取得するための命令に対応する1つ以上の埋め込みコードの識別に基づいて、コスト情報、ルーティング情報、仕事量、サービスレベル情報、セキュリティ情報等の追加情報を取得するように構成され得る。この点では、メッセージングプロトコルの従来の実施におけるコーディネータ1714のメッセージ処理サービスは、受信済メッセージの任意の追加処理を行わない、または、ルーティング決定を行うために、追加外部ネットワーク通信もしくはコンポーネントを必要とし得る。加えて、本出願の態様に従って、コーディネータ1714は、クライアントデバイス1702を介してアドミニストレータによって指定されるような多様な追加機能で構成され得る。コーディネータ1714を構成する直接通信として示されているが、いくつかの実施形態では、クライアントコンピューティングデバイス1702は、メッセージ処理システム1720を介して、コーディネータ1714と間接的に相互作用するであろう。
(2)において、コーディネータ1714は、構成情報を処理し、後続処理に関する構成を記録する。この点では、例示として、コーディネータ1714は、受信済メッセージに含まれるセキュリティ情報を一致させるためのデータベースまたはマトリックスを維持することができる。加えて、コーディネータ1714は、一致が識別されるときにまたは要求済セキュリティ情報が受信済メッセージに含まれないときに実行される追加処理命令または実行可能コードを維持することができる。他の実施形態では、コーディネータ1714は、埋め込みコードが識別されるときに、API等のインタフェースを利用する追加命令または実行可能コードを取得することができる。例えば、コーディネータ1714は第三者セキュリティ情報プロバイダにアクセスすることができる。第三者セキュリティ情報プロバイダは、コーディネータ1714の構成を容易にすることができる、または発行済メッセージに提供されるセキュリティ情報を評価するためにコーディネータ1714によって利用される情報を提供することができる。例示として、コーディネータ1714の構成は、外部ネットワークを有する必要がなく、メッセージルーティングの処理を容易にする。
図22Bを参照して、受信側デバイスの初期構成、被調整デバイス1712’および1712’’を説明する。(1)において、被調整デバイス1712’および1712’’は、デバイス接続要求を生成し、要求をコーディネータ1714に伝達する。例示として、デバイス接続要求は、コーディネータ1714で、被調整デバイス1712’および1712’’の認証および承認と関連付けられる手順を確立するように対応する。またさらに、いくつかの実施形態では、論理ネットワーク100は、独立して、またはコンテンツ管理システム1710の一部として、コーディネータ1714へのメッセージの伝達を管理する追加ゲートウェイコンポーネントを含み得る。係るゲートウェイコンポーネントは、セキュリティ機能、ロードバランシング、または他のネットワーク処理サービスを実装することができる。
(2)において、コーディネータ1714は、例えば、セキュリティ情報を有効にすることによって、追加情報を要求することによって、または要求を行っているクライアントコンピューティングデバイス1702の特徴を判定すること等によって、接続要求を処理する。(3)において、コーディネータ1714は、認証された被調整デバイスに基づいて、ルーティングテーブル、ビジネスロジック、またはビジネスルールを更新することによって接続要求を処理する。例えば、被調整デバイス1712は、入力メッセージを一致させるためにコーディネータ1714によって利用されることができる様々なパーミッションまたはセキュリティコードを含み得る。加えて、コーディネータ1714は、セキュリティ情報を評価するためのセキュリティ情報またはコード等の追加情報を受信することができる。(4)において、接続要求が受け入れ可能で承認された場合、メッセージ処理サービス2200は、接続確認を、要求を行っているコーディネータ1714に伝達する。この点では、いったん承認されると、調整デバイス1712および1712’ならびにコーディネータ1714は、MQTT等のメッセージングプロトコルに定義される手順の範囲内で通信を始めることができる。加えて、調整デバイス1712および1712’は、上記に説明したルーティングプロセスを容易にする追加セキュリティ情報を提供することができる。
ここで、図22Cを参照すると、接続確認を受信した後、(1)において、被調整デバイス1712’および1712’’は、1つ以上のトピック登録要求をコーディネータ1714に伝達する。例示として、トピック登録は、メッセージングプロトコルに従って定義され、その結果、被調整デバイス1712’および1712’’は、任意の数のコンテンツプロバイダによる指定トピックに従って発行されたコンテンツを受信するために登録することができる。本出願に適用されるように、被調整デバイス1712’および1712’’は、1つ以上のトピックを登録する。例示の目的のために、登録済被調整デバイス1712’および1712’’へのメッセージの転送がメッセージのセキュリティ情報に基づいて異なり得るように、例を提供する。
登録後のある時点で、(2)において、別個のコンピューティングデバイス2202は、1つ以上の部分的コンテンツをコーディネータ1714に発行する。例示として、メッセージを受信することができるコーディネータ1714は、サービスプロバイダ環境1720から伝達された通信に対応することができる。コンテンツのそれぞれの発行された部分は、トピックと関連付けられる。例示的な例の目的のために、少なくとも1つの発行済コンテンツは、コーディネータ1714で、被調整デバイス1712’および1712’’によって登録されるトピックに対応するコンテンツ/メッセージのトピック部と関連付けられる。この点では、メッセージは、受信済メッセージを登録された調整デバイスと一致させるために利用することができるトピック部の1つ以上のレベルを含み得る。加えて、受信済メッセージは、グループ識別子、ソース識別子、およびパスワード、証明書または他のトークン等のセキュリティ情報を含み得る、またはそれらと関連付けられ得る。
(3)において、コーディネータ1714は、被調整デバイスが受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させる。この点では、コーディネータ1714は、メッセージを受信するために登録している被調整デバイス1712のセットを判定することができる。当業者は、MQTTメッセージングプロトコルまたは他のメッセージングプロトコルの従来の実装では、コーディネータ1714は受信済メッセージを全ての登録済被調整デバイスに送信するであろうことを認識する。(4)において、コーディネータ1714は、通信のトピック部を処理し、発行済メッセージを受信するべき1つ以上の被調整デバイスを識別する。いくつかの実施形態では、コーディネータ1714は、通信マネージャコンポーネント1860等のトピック部を処理する機能性を含み得る。他の実施形態では、コーディネータ1714は、追加サービスまたは追加コンポーネントを利用して、パースを容易にすることができる。より具体的には、コーディネータ1714は、ビジネスルールまたはルーティングテーブルを利用して、メッセージを受信する登録済被調整デバイス1712のサブセットを識別することができる。したがって、コーディネータ1714は、ビジネスルールまたはルーティングテーブルを評価して、どの登録済被調整デバイス1712が発行済メッセージを受信しないかを識別することができる。例示として、コーディネータ1714は、ルーティングテーブルおよびビジネスルールを利用して、メッセージを可能性のある受信側デバイスのセットに発行するためにセキュリティ情報をパーミッションと関連付けることができる。
(5)において、コーディネータ1714は、メッセージを登録済デバイスの選択されたサブセットに向けさせる2次トピック発行を関連付けることができる。一実施形態では、コーディネータ1714は、選択された登録済デバイスにメッセージを直接伝達するように構成され得る。本実施形態では、コーディネータ1714は、ビジネスルールまたは論理で指定されるような同じメッセージングプロトコルまたは異なる通信プロトコルを利用することができる。別の実施形態では、コーディネータ1714は、選択された登録済デバイスに適用可能であるであろう、それに一致するであろう1つ以上の2次トピック発行を関連付けることができる。本実施形態では、2次トピック発行は、個々のデバイスに関する2次トピック発行等の非選択デバイスに登録されないであろう。指示された発行を利用する例示の目的のために、図22Dを参照すると、(6)において、メッセージ処理サービスは、調整デバイス1712’’にメッセージの転送をさせることができ、被調整デバイス1712’にメッセージの転送をさせることができない。加えて、いくつかの実施形態では、コーディネータ1714は、オリジナルのトピックに従ってメッセージを受信するように登録していない場合があるが、それにも関わらずコーディネータ1714によって選択される、被調整デバイス1712を選択することができる。
図23は、例示的環境に従って、メッセージ処理サービスによって実施されるリモート実行メッセージングルーチン2300を示すフロー図である。ルーチン2300は、メッセージルーティング中、メッセージングプロトコルのビジネスルール、ルーティングテーブル、または他の論理情報を示す。ブロック2302において、メッセージ処理サービスは、被調整デバイス1712または任意の他のコンピューティングデバイス1702等のデバイスによるコンテンツのリモート実行に関連する少なくとも1つのトピックを含む登録情報を取得する。前述に説明したように、本デバイスは、1つ以上のトピック登録要求をメッセージ処理サービスに伝達する。例示として、トピック登録は、メッセージングプロトコルに従って定義され、その結果、本デバイスは、任意の数のコンテンツプロバイダによる指定トピックに従って発行されたコンテンツを受信するために登録することができる。前述に記述したように、トピック登録は、個々のデバイスまたはデバイスのセットに対応することができる。
登録後のある時点で、ブロック2304において、メッセージ処理サービスは、トピック部を有する1つ以上の発行を取得する。例示として、いくつかのコンピューティングデバイス2202(図22C)は、1つ以上の部分的コンテンツをメッセージ処理サービスに発行する。コンテンツのそれぞれの発行された部分は、トピックと関連付けられる。例示的な例の目的のために、少なくとも1つの発行済コンテンツは、クライアントコンピューティングデバイス1702の登録済トピックと関連付けられる。加えて、トピックと関連付けられるコンテンツのそれぞれの発行された部分は、コンテンツのペイロード部を含む。係るペイロード部の例は、被調整デバイスまたはネットワークデバイスによって実行されるタスクを含み得る。加えて、メッセージは、メッセージがメッセージ発行サービスによって発行されるべきかどうかを評価するために利用されるセキュリティ情報を含み得る。
ブロック2306において、メッセージ処理サービスは、1つ以上のデバイスが発行済トピックを受信するべきクライアントデバイスのセットを形成するトピックを伴う発行済コンテンツを受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させる。例示として、メッセージ処理サービスがMQTT等のメッセージングプロトコルに従って構成されているため、トピック発行に対する登録の一致は、メッセージングプロトコルによって指図される方式で達成することができる。例示として、トピック部の一致は、トピック部の全てのレベルの一致、または少なくとも1つのレベルの部分一致に対応することができる。またさらに、当該一致はベースレベルの一致に対応することができる一方、他のレベルは2次一致に関して無視または利用され得る。
ブロック2308において、メッセージ処理サービスは、メッセージのトピック部または他の部分のセキュリティ情報を識別する。例示として、メッセージ処理サービスは、メッセージを受信するべきデバイスのサブセットを選択するために通信のトピック部を処理する。いくつかの実施形態では、メッセージ処理サービスは、登録済デバイスのサブセットを選択するために、ビジネスルール、ルーティングテーブル、論理ルール等の機能性を含み得る。他の実施形態では、メッセージ処理サービスは、追加サービスまたは追加コンポーネントを利用して、処理を容易にすることができる。加えて、ブロック2308において、次に、メッセージ処理サービスは、発行済メッセージを受信しおよび非選択済受信側デバイスではない、受信側デバイスのセットを選択する。いくつかの実施形態では、メッセージ処理サービスは、登録済デバイスのサブセットを選択するために、ビジネスルール、ルーティングテーブル、論理ルール等の機能性を含み得る。一態様では、コーディネータ1714は、受信済メッセージを受信するべき被調整デバイス1712のサブセットを識別するビジネスルールまたはルーティングテーブルを評価することができる。例示として、ビジネスルールまたはルーティングテーブルは、発信元のソースアドレス、トピック部の1つ以上のレベルの識別情報、識別された受信側デバイス1712のセキュリティ構成情報、タイムスタンプ情報、被調整デバイスに関する利用情報、財務コスト情報等の情報を組み込むことができる。他の例では、ビジネスルールは、1つ以上の受信側デバイス1712が他の方法でメッセージを受信することに適格であり得る、または利用可能であり得る場合、ランダム選択アルゴリズムまたは加重選択アルゴリズムを含み得る。例えば、コーディネータ1714は、メッセージのソースのネットワークアドレス等のソース識別子を、1つ以上の選択済受信側デバイス1712と関連付けるビジネスルールで構成され得る。別の例では、コーディネータ1714は、最小のセキュリティ構成を判定する、または受信済メッセージに関するセキュリティ仕様の種類を指定するセキュリティ仕様情報で構成され得る。この例では、次に、コーディネータ1714は、1つ以上の登録済セキュリティデバイスのセキュリティ情報を利用して、どの受信側デバイスが指定されたセキュリティ仕様を満たすのかを判定することができる。またさらなる例では、コーディネータ1714は、時刻、メッセージ種類、もしくは他の情報に基づく全ての利用可能な受信側デバイスを識別するホワイトリスト、または除外するべき1つ以上の受信側デバイスを識別するブラックリストで構成され得る。
ブロック2310において、メッセージ処理サービスは、MQTT等のメッセージングプロトコルの手順および能力に従って行われる発行済コンテンツを伝達し、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。他の例では、メッセージ処理サービスは、別個のトランスポートプロトコルを利用することができる。受信側デバイスは、受信された発行済コンテンツを処理する。
ブロック2312において、メッセージ処理サービスは、メッセージの処理に対応する処理結果を取得する。例示として、クライアントコンピューティングデバイスは、メッセージングプロトコルを介して、コードの処理結果を示す情報に関連するコンテンツを生成および発行する。いくつかの実施形態では、処理結果は、コードの実行が行われたことが成功したかどうかのバイナリ判定に対応することができる。別の実施形態では、処理結果は、コード/命令の実行を示す1つ以上の値、またはコード/命令の実行についての情報を詳述するログを含み得る。更新トピックの発行とともに説明したものと同様の様式で、処理結果(複数可)の発行は、特定のトピック(概して「処理結果トピック」と称される)と関連付けられ得る。
ブロック2314において、メッセージ処理サービスは、管理デバイス1704が処理結果トピックを伴う発行済コンテンツを受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させ、発行済コンテンツを伝達する。例示として、発行済コンテンツの伝達は、また、MQTT等のメッセージングプロトコルの手順および能力に従って行われ、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。ブロック2316において、ルーチン2300は終了する。
図24は、例示的環境に従って、被調整デバイス1712または他のコンピューティングデバイスによって実施されるリモート実行メッセージングルーチン2400を示すフロー図である。前述に説明したように、本出願では、被調整デバイス1712または他のコンピューティングデバイスは、他のコンポーネントがまたメッセージのルーティングでセキュリティ情報を利用したかどうかに関係なく、メッセージの処理においてセキュリティ情報を利用するようなメッセージ処理サービスとして考えられ得る。しかしながら、この例の被調整デバイス1712の識別は、ルーチン2400の適用を限定するものとして解釈されるべきではない。ブロック2402において、被調整デバイス1712は、1つ以上のトピック登録要求をメッセージ処理サービス2200に伝達する。上記に説明したように、トピック登録は、メッセージングプロトコルに従って定義され、その結果、被調整デバイス1712は、任意の数のコンテンツプロバイダによる指定トピックに従って発行されたコンテンツを受信するために登録することができる。
発行済コンテンツを受信したことに応答して、メッセージ処理サービス2200は、クライアント被調整デバイス1712が発行済コンテンツを受信するべきであることを判定するために、登録済トピックを発行済トピックと一致させる。前述に説明したように、メッセージ処理サービスは、オリジナル登録を伴うコンテンツを処理し、次に、ルーティングテーブルを利用して、メッセージを被調整デバイスに転送する。ブロック2404において、被調整デバイス1712は、メッセージ処理サービス2200から発行済コンテンツを受信する。例示として、発行済コンテンツの伝達は、MQTT等のメッセージングプロトコルの手順および能力に従って行われ、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。
コンテンツの実行のうちの実行の一部として、またはコンテンツの実行の後に、ブロック2406において、被調整デバイス1712は、リモート実行の結果を取得する。いくつかの実施形態では、処理結果は、コードの実行が行われたことが成功したかどうかのバイナリ判定に対応することができる。別の実施形態では、処理結果は、コード/命令の実行を示す1つ以上の値、またはコード/命令の実行についての情報を詳述するログを含み得る。
ブロック2408において、被調整デバイス1712は、メッセージングプロトコルを介して、コードの処理結果を示す情報に関連するコンテンツを発行する。例示として、発行済コンテンツの伝達は、MQTT等のメッセージングプロトコルの手順および能力に従って行われ、実行可能コードの伝達を生じさせる追加通信または代替通信を必要としない。ブロック2410において、ルーチン2400は終了する。
本出願の態様に従って、以下を考慮されたい。
1.メッセージングプロトコルを利用してコンピューティングデバイス上のコマンドの実行を管理するためのコンピュータ実施方法であって、
メッセージ処理サービスにおいて、管理クライアントデバイスから、メッセージ処理機能の構成に関連する情報を受信し、受信済メッセージのトピック部に埋め込まれたコードのセットを識別し、識別されたコードと関連付けられる命令に従って前記受信済メッセージを処理することであって、前記メッセージはMQテレメトリトランスポートプロトコルに従って形成される、前記処理することと、
前記メッセージ処理サービスによって、受信済メッセージをデバイスから受信することであって、前記受信済メッセージは、主題記述子と関連付けられる1つ以上のレベルと、1つ以上の埋め込みコードを識別する1つ以上のレベルとを含むトピック部を含む、前記受信することと、
前記メッセージ処理サービスによって、前記メッセージの前記トピック部に基づいて、メッセージを受信するために登録された受信側デバイスのセットを識別することと、
前記メッセージ処理サービスによって、前記受信済メッセージの前記トピック部をパースし、少なくとも1つの埋め込みコードを識別することと、
前記メッセージ処理サービスによって、前記メッセージ処理機能の前記構成を利用して、前記識別された少なくとも1つの埋め込みコードに従って前記受信済メッセージを処理することであって、前記受信済メッセージの前記処理は、前記受信済メッセージを受信する前記受信側デバイスの識別されたセットのサブセットの識別を含む、前記処理することと、
前記メッセージ処理サービスによって、前記処理された受信済メッセージを前記受信側デバイスのセットにおける前記受信側デバイスのサブセットに発行することと、
を含む、前記コンピュータ実施方法。
2.前記メッセージ処理サービスによって、前記メッセージ処理機能の前記構成を利用して、前記識別された少なくとも1つの埋め込みコードに従って前記受信済メッセージを処理することは、少なくとも1つの基準の評価に基づいて、前記少なくとも1つの受信側デバイスの選択を含む、請求項1に記載の方法。
3.前記受信側デバイスのサブセットは被調整デバイスに対応し、
前記受信済メッセージは被調整デバイスによってタスクを実行する命令に対応する、請求項1に記載の方法。
4.前記メッセージ処理サービスは、被調整デバイスに関するコーディネータに対応する、請求項1に記載の方法。
5.メッセージプロトコルを利用する通信を管理するためのシステムであって、
プロセッサおよびメモリを有する少なくとも1つのコンピューティングデバイスに実装されるメッセージ処理サービスであって、前記リモートコマンドサービスは、メッセージングプロトコルに従って形成されるメッセージを受信および発行するように構成される、前記メッセージ処理サービスを備え、
前記メッセージ処理サービスは、
トピック部に対応する入力メッセージを受信することであって、前記トピック部は、少なくとも1つの埋め込みコードと、前記入力メッセージの主題を記述する少なくとも1つのレベルとを含む、前記受信すること、
前記メッセージ処理構成に従って前記埋め込みコードを処理すること、
前記処理された入力メッセージを発行すること、
を行うように構成される、前記システム。
6.1つ以上のアクションを埋め込みコードのセットと関連付けることによって、前記メッセージ処理サービスを構成するように設定される管理クライアントデバイスをさらに備える、請求項5に記載のシステム。
7.前記メッセージ処理サービスは、前記トピック部をパースし、前記埋め込みコードを識別する、請求項5に記載のシステム。
8.前記メッセージ処理サービスは、前記入力メッセージに関する可能である受信側のサブセットを選択することによって、前記埋め込みコードを処理する、請求項5に記載のシステム。
9.前記メッセージ処理サービスは、前記入力メッセージに含まれる実行可能コードを修正することによって、前記埋め込みコードを処理する、請求項5に記載のシステム。
10.前記メッセージ処理サービスは、前記処理された入力メッセージを発行することに関連付けられた時間を修正することによって、前記埋め込みコードを処理する、請求項5に記載のシステム。
11.前記メッセージはタスクに関する割り当てを含み、
前記メッセージ処理サービスは、前記タスクを処理する受信側デバイスを選択することによって、前記埋め込みコードを処理する、請求項5に記載のシステム。
12.前記メッセージングプロトコルは、MQテレメトリトランスポートプロトコルを含む、請求項5に記載のシステム。
13.メッセージプロトコルを利用してメッセージを管理するためのコンピュータ実施方法であって、
前記メッセージングプロトコルに従って形成されるメッセージを受信することであって、前記メッセージはトピックに対応し、前記トピックは少なくとも1つの埋め込みコードおよび主題記述子を含む、前記受信することと、
メッセージ処理構成に従って前記埋め込みコードを処理することと、
を含む、前記コンピュータ実施方法。
14.前記トピックをパースし前記埋め込みコードを識別することをさらに含む、請求項13に記載のコンピュータ実施方法。
15.前記埋め込みコードを処理することは、前記メッセージに関する可能である受信側のサブセットを選択することを含む、請求項13に記載のコンピュータ実施方法。
16.前記メッセージは1つ以上の実行可能部を含み、
前記埋め込みコードを処理することは、前記1つ以上の実行可能部の実行を修正することを含む、請求項13に記載のコンピュータ実施方法。
17.前記埋め込みコードを処理することは、前記1つ以上の実行可能部を実行することと関連付けられるタイミングを修正することを含む、請求項16に記載のコンピュータ実施方法。
18.少なくとも1つのメッセージは2つ以上の実行可能コード部を含み、
前記埋め込みコードを処理することは、前記2つ以上の実行可能部から選択することを含む、請求項16に記載のコンピュータ実施方法。
19.少なくとも1つのメッセージは2つ以上の実行可能コード部を含み、
前記埋め込みコードを処理することは、前記2つ以上の実行可能部のうちの1つを削除することを含む、請求項16に記載のコンピュータ実施方法。
20.前記メッセージングプロトコルは、MQテレメトリトランスポートプロトコルを含む、請求項13に記載のコンピュータ実施方法。
本出願の別の態様に従って、以下を考慮されたい。
1.メッセージングプロトコルを利用してコンピューティングデバイス上のコマンドの実行を管理するためのコンピュータ実施方法であって、
メッセージ処理サービスにおいて、管理クライアントデバイスから、メッセージ処理機能の構成に関連する情報を受信し、トピックに従って発行されたメッセージを受信する登録済デバイスのサブセットを選択することであって、前記メッセージはMQテレメトリトランスポートプロトコルに従って形成される、前記選択することと、
前記メッセージ処理サービスによって、受信済メッセージをデバイスから受信することであって、前記受信済メッセージは主題記述子と関連付けられる1つ以上のレベルを含むトピック部を含む、前記受信することと、
前記メッセージ処理サービスによって、メッセージの前記トピック部に基づいて、前記メッセージを受信するために登録された受信側デバイスのセットを識別することと、
前記メッセージ処理サービスによって、前記受信済メッセージの前記トピック部を処理し、ビジネスルールまたはルーティングテーブルのセットの少なくとも1つの評価に基づいて、前記受信側デバイスのサブセットを選択することと、
前記メッセージ処理サービスによって、前記処理された受信済メッセージを発行することと、
を含む、前記コンピュータ実施方法。
2.前記メッセージ処理サービスによって前記受信済メッセージを処理することは、追加情報の少なくとも一部分を取得することを含む、請求項1に記載の方法。
3.前記受信側デバイスのサブセットは被調整デバイスに対応し、
前記受信済メッセージは、被調整デバイスによってタスクを実行する命令に対応する、請求項1に記載の方法。
4.前記メッセージ処理サービスによって、前記受信側デバイスの選択されたサブセットに対応する2次トピックを識別するために、前記受信済メッセージを処理することをさらに含む、請求項1に記載の方法。
5.メッセージプロトコルを利用する通信を管理するためのシステムであって、
プロセッサおよびメモリを有する少なくとも1つのコンピューティングデバイスに実装されるメッセージ処理サービスであって、前記リモートコマンドサービスは、メッセージングプロトコルに従って形成されるメッセージを受信および発行するように構成される、前記メッセージ処理サービスを備え、
前記メッセージ処理サービスは、
トピック部に対応する入力メッセージを受信することであって、前記トピック部は前記入力メッセージの主題を記述する少なくとも1つのレベルを含み、受信側デバイスのセットは前記入力メッセージの前記トピックと関連付けられるメッセージを受信するために登録される、前記受信すること、
メッセージ処理構成に従って前記入力メッセージを処理し、前記受信側デバイスのサブセットを識別すること、
前記処理された入力メッセージを発行すること、
を行うように構成される、前記システム。
6.1つ以上のビジネスルールまたはルーティングテーブルを関連付けることによって、前記メッセージ処理サービスを構成するように設定される管理クライアントデバイスをさらに備える、請求項5に記載のシステム。
7.前記メッセージ処理サービスは、前記受信側デバイスのセットと関連付けられるセキュリティ基準を評価すること、および前記セキュリティ基準の評価に基づいて少なくとも1つの受信側デバイスを除外することによって、前記入力メッセージを処理する、請求項5に記載のシステム。
8.前記メッセージ処理サービスプロセスは、論理ルールの評価に基づいて、前記入力メッセージに関する可能である受信側のサブセットを選択する、請求項5に記載のシステム。
9.前記メッセージ処理サービスは、前記入力メッセージを受信する単一の受信側デバイスを選択する、請求項8に記載のシステム。
10.前記メッセージ処理サービスは、ネットワーク処理サービスに対応する、請求項5に記載のシステム。
11.前記受信側デバイスのセットは、被調整デバイスネットワークのセットの個々のデバイスに対応する、請求項10に記載のシステム。
12.前記メッセージングプロトコルは、MQテレメトリトランスポートプロトコルを含む、請求項5に記載のシステム。
13.メッセージプロトコルを利用してメッセージを管理するためのコンピュータ実施方法であって、
メッセージングプロトコルに従って形成されるメッセージを受信することであって、前記メッセージはトピックに対応し、前記トピックは主題記述子を含み、受信側デバイスのセットは前記トピックと関連付けられるメッセージを受信するために登録される、前記受信することと、
メッセージ処理構成に対する前記受信済メッセージを処理し、前記受信側デバイスのセットのサブセットを識別することと、
を含む、前記コンピュータ実施方法。
14.前記受信済メッセージを処理することは、個々のメッセージに関する可能である受信側のサブセットを選択することを含む、請求項13に記載のコンピュータ実施方法。
15.前記メッセージ処理構成は少なくとも1つのビジネスルールを含み、
前記受信済メッセージを処理することは前記少なくとも1つのビジネスルールを評価することを含む、請求項13に記載のコンピュータ実施方法。
16.前記少なくとも1つのビジネスルールを評価することは、ソースを元のメッセージに関連付ける情報を取得することを含む、請求項15に記載のコンピュータ実施方法。
17.前記メッセージ処理構成はルーティングテーブルを含み、
前記受信済メッセージを処理することは、前記ルーティングテーブルを評価することを含む、請求項13に記載のコンピュータ実施方法。
18.前記メッセージ処理構成を管理コンポーネントから取得することをさらに含む、請求項13に記載のコンピュータ実施方法。
19.前記メッセージングプロトコルは、MQテレメトリトランスポートプロトコルを含む、請求項13に記載のコンピュータ実施方法。
20.前記受信側デバイスのサブセットは、2つ以上の受信側デバイスを含む、請求項13に記載のコンピュータ実施方法。
本出願の別の態様に従って、以下を考慮されたい。
1.メッセージングプロトコルを利用してコンピューティングデバイス上のコマンドの実行を管理するためのコンピュータ実施方法であって、
メッセージ処理サービスにおいて、管理クライアントデバイスから、メッセージ処理機能の構成に関連する情報を受信し、メッセージを、トピックに従って発行されたメッセージを受信する登録済デバイスのサブセットに発行することであって、前記メッセージはMQテレメトリトランスポートプロトコルに従って形成される、前記発行することと、
前記メッセージ処理サービスによって、受信済メッセージをデバイスから受信することであって、前記受信済メッセージは主題記述子と関連付けられる1つ以上のレベルを含むトピック部を含む、前記受信することと、
前記メッセージ処理サービスによって、前記メッセージの前記トピック部に基づいて、メッセージを受信するために登録された受信側デバイスのセットを識別することと、
前記メッセージ処理サービスによって、前記受信済メッセージを処理し、セキュリティ識別子および追加情報を識別し、ビジネスルールまたはルーティングテーブルのセットのうちの少なくとも1つの評価に基づいて、前記受信側デバイスのサブセットを選択することと、
前記メッセージ処理サービスによって、前記受信済メッセージの前記処理に少なくとも部分的に基づいて、前記処理された受信済メッセージを発行することと、
を含む、前記コンピュータ実施方法。
2.前記メッセージ処理サービスによって前記受信済メッセージを処理することは、追加情報の少なくとも一部分を取得することを含む、請求項1に記載の方法。
3.前記受信側デバイスのサブセットは被調整デバイスに対応し、前記受信済メッセージは被調整デバイスによってタスクを実行する命令に対応する、請求項1に記載の方法。
4.前記メッセージ処理情報によって前記メッセージをパースし、前記セキュリティ識別子および前記追加情報を取得することをさらに含む、請求項1に記載の方法。
5.メッセージプロトコルを利用する通信を管理するためのシステムであって、
プロセッサおよびメモリを有する少なくとも1つのコンピューティングデバイスに実装されるメッセージ処理サービスであって、前記リモートコマンドサービスは、メッセージングプロトコルに従って形成されるメッセージを受信および発行するように構成される、前記メッセージ処理サービスを備え、
前記メッセージ処理サービスは、
トピック部に対応する入力メッセージを受信することであって、前記トピック部は前記入力メッセージの主題を識別し、受信側デバイスのセットは前記入力メッセージの前記トピックと関連付けられるメッセージを受信するために登録される、前記受信すること、
メッセージセキュリティ構成に従って前記入力メッセージを処理し、前記受信側デバイスのサブセットを識別することであって、前記メッセージセキュリティ構成は前記入力メッセージに含まれるセキュリティ情報の評価に対応する、前記識別すること、
前記処理された入力メッセージを、前記受信側デバイスの前記識別されたサブセットに発行すること、
を行うように構成される、前記システム。
6.前記メッセージセキュリティ情報の一部として1つ以上のルーティングテーブルを関連付けることによって、前記メッセージ処理サービスを構成するように設定される管理クライアントデバイスをさらに備える、請求項5に記載のシステム。
7.前記メッセージ処理サービスは、前記受信側デバイスのセットと関連付けられるセキュリティ基準を評価すること、および前記セキュリティ基準の評価に基づいて少なくとも1つの受信側デバイスを除外することによって、前記入力メッセージを処理する、請求項5に記載のシステム。
8.前記メッセージ処理サービスは、前記受信側デバイスのセットと関連付けられるセキュリティ基準を評価すること、および前記セキュリティ基準の評価に基づいて少なくとも1つの受信側デバイスを選択することによって、前記入力メッセージを処理する、請求項5に記載のシステム。
9.前記メッセージ処理サービスは、前記入力メッセージを受信する単一の受信側デバイスを選択する、請求項8に記載のシステム。
10.前記入力メッセージは、ネットワーク処理サービスに対応する、請求項5に記載のシステム。
11.前記受信側デバイスのセットは、被調整デバイスネットワークのセットの個々のデバイスに対応する、請求項10に記載のシステム。
12.前記メッセージングプロトコルは、MQテレメトリトランスポートプロトコルを含む、請求項5に記載のシステム。
13.メッセージプロトコルを利用してメッセージを管理するためのコンピュータ実施方法であって、
メッセージングプロトコルに従って形成されるメッセージを受信することであって、前記メッセージはトピックに対応し、前記トピックは主題記述子を含み、受信側デバイスのセットは前記トピックと関連付けられるメッセージを受信するために登録される、前記受信することと、
セキュリティ処理構成に従って前記受信済メッセージに含まれるセキュリティ情報を処理し、前記受信側デバイスのセットのサブセットへのアクセスを管理することと、
を含む、前記コンピュータ実施方法。
14.前記受信済メッセージを処理することは、個々のメッセージに関する可能である受信側のサブセットを選択することを含む、請求項13に記載のコンピュータ実施方法。
15.前記メッセージ処理構成はビジネスルールまたはルーティングテーブルのうちの少なくとも1つを含み、
前記受信済メッセージを処理することは、前記少なくとも1つのビジネスルールまたは前記ルーティングテーブルを評価することを含む、請求項13に記載のコンピュータ実施方法。
16.前記ビジネスルールまたは前記ルーティングテーブルのうちの少なくとも1つを評価することは、前記少なくとも1つのビジネスルールまたは前記ルーティングテーブルに従って、前記受信済メッセージに含まれる前記セキュリティ情報を評価することを含む、請求項15に記載のコンピュータ実施方法。
17.前記セキュリティ情報は、前記受信済メッセージに埋め込まれる識別子およびパスワードを含む、請求項16に記載のコンピュータ実施方法。
18.前記セキュリティ処理構成を管理コンポーネントから取得することをさらに含む、請求項13に記載のコンピュータ実施方法。
19.セキュリティ処理構成に従って前記受信済メッセージに含まれる前記セキュリティ情報を処理することは、外部ネットワーク通信アクセスなしで、前記受信済メッセージに含まれる前記セキュリティ情報を処理することを含む、請求項13に記載のコンピュータ実施方法。
20.前記受信側デバイスのサブセットは、2つ以上の受信側デバイスを含む、請求項13に記載のコンピュータ実施方法。
上記に説明された方法およびプロセスの全ては、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つ以上の実行可能な命令を含むモジュール、セグメント、またはコードの部分を潜在的に表すものとして理解されたい。代替の実施態様は、本明細書に説明する実施形態の範囲内に含まれ、その中で要素または機能は、当業者によって理解されるであろうように、関係する機能性に応じて、実質的に同時または逆の順序を含む、示されるもの、または説明されるものとは異なる順序で削除または実行され得る。
多くの変形および修正が上記の実施形態に対して行われ得、それらの要素が他の許容される例の中にあるものとして理解されることを強調されたい。全ての係る修正および変形が、本開示の範囲内で本明細書に含有され、以下の特許請求の範囲によって保護されることが意図される。