(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-03-18
(54)【発明の名称】非同期イベントベースの分散型メッセージングサービス
(51)【国際特許分類】
G06F 9/54 20060101AFI20240311BHJP
【FI】
G06F9/54 C
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023560109
(86)(22)【出願日】2022-03-28
(85)【翻訳文提出日】2023-11-21
(86)【国際出願番号】 US2022022102
(87)【国際公開番号】W WO2022212235
(87)【国際公開日】2022-10-06
(32)【優先日】2021-03-29
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ミストリー,ショウナク
(72)【発明者】
【氏名】ペラレズ,フィリップ・ウェイン
(57)【要約】
応答プロセス(170b)からの応答(164、164r)のための要求(164、164R)を発行する要求プロセス(170a)をインスタンス化する際、イベントベースの分散型メッセージングサービスを実装する方法は、分散型メッセージングサービス(160)の応答トピック(166、166r)を識別するステップと、応答トピックのためのサブスクリプション(212)を生成するステップであって、各サブスクリプションがサブスクリプション識別子(214)を含む、ステップとを含む。要求プロセスのためのランタイム中に、方法は、応答プロセスによってサブスクライブされた要求トピック(166、166R)に対して要求メッセージ(164、164R)を発行し、該要求メッセージは、固有のメッセージ識別子(UMI)を含むとともに、サブスクリプションから選択されたそれぞれのサブスクリプションのそれぞれのサブスクリプション識別子を使用してサブスクライバ(168)を生成し、サブスクライバが固有のメッセージ識別子を含む。
【特許請求の範囲】
【請求項1】
データ処理ハードウェア(132)によって実行されるときに前記データ処理ハードウェア(132)に動作を実行させる、コンピュータが実行する方法(300)であって、
応答プロセス(170b)からの応答(164、164r)のための要求(164、164R)を発行する要求プロセス(170a)をインスタンス化する際、
前記動作は、前記応答プロセス(170b)からの前記要求(164、164R)のための前記応答(164、164r)を受信する分散型メッセージングサービス(160)の応答トピック(166、166r)を識別するステップを含み、前記応答プロセス(170b)は、前記応答トピック(166、166r)のための発行者(162)として構成され、
前記応答トピック(166、166r)のための複数のサブスクリプション(212、212a~n)を生成するステップを含み、各サブスクリプション(212)は、サブスクリプション識別子(214)を含み、
前記要求プロセス(170a)のためのランタイム中に、
前記応答プロセス(170b)によってサブスクライブされた要求トピック(166、166R)に対して要求メッセージ(164、164R)を発行するステップを含み、前記要求メッセージ(164、164R)は、固有のメッセージ識別子(UMI)含み、
前記複数のサブスクリプション(212、212a~n)から選択されたそれぞれのサブスクリプション(212)のそれぞれのサブスクリプション識別子(214)を使用してサブスクライバ(168)を生成するステップを含み、前記サブスクライバ(168)は、前記固有のメッセージ識別子(UMI)を含み、
前記応答トピック(166、166r)に対して発行された前記要求メッセージ(164、164R)に応答して、前記応答プロセス(170b)からフィルタリングされた応答メッセージ(164、164r)を前記サブスクライバ(168)で受信するステップを含み、前記フィルタリングされた応答メッセージ(164、164r)は、前記要求プロセス(170a)のための前記複数のサブスクリプション(212、212a~n)と関連付けられる1つ以上のサブスクリプション識別子(214)に基づいてフィルタリングされる、
コンピュータが実行する方法(300)。
【請求項2】
前記動作は、前記要求プロセス(170a)のためのランタイム中に、前記複数のサブスクリプション(212、212a~n)から前記それぞれのサブスクリプション(212)をランダムに選択するステップをさらに含む、請求項1に記載の方法。
【請求項3】
前記動作は、
前記応答プロセス(170b)からの応答(164、164r)のための前記要求(164、164R)を発行する前記要求プロセス(170a)をインスタンス化するときに、前記応答トピック(166、166r)のための前記複数のサブスクリプション(212、212a~n)の各サブスクリプション識別子(214)をハッシュマップに記憶するステップと、
前記要求プロセス(170a)のためのランタイム中に、前記応答トピック(166、166r)のための前記複数のサブスクリプション(212、212a~n)の各サブスクリプション識別子(214)を記憶する前記ハッシュマップから前記それぞれのサブスクリプション識別子(214)をランダムに選択するステップと、
をさらに含む、請求項1または請求項2に記載の方法。
【請求項4】
前記動作は、前記要求プロセス(170a)のためのランタイム中に、前記要求トピック(166、166R)のための前記要求メッセージ(164、164R)を生成するステップをさらに含む、請求項1~請求項3のいずれかに記載の方法。
【請求項5】
前記動作は、
前記要求トピック(166、166R)の発行者(162)による1つ以上のメッセージ(164)が前記固有のメッセージ識別子(UMI)を含むかどうかを判断することによって、および
前記要求トピック(166、166R)の前記発行者(162)による前記1つ以上のメッセージ(164)のそれぞれのメッセージ(164)が前記固有のメッセージ識別子(UMI)を含まないときに、前記それぞれのメッセージ(164)が前記サブスクライバ(168)によって受信されないようにすることによって、
前記要求プロセス(170a)のためのランタイム中に、前記要求トピック(166、166R)の前記発行者(162)によって前記1つ以上のメッセージ(164)をフィルタリングするステップをさらに含む、請求項1~請求項4のいずれかに記載の方法。
【請求項6】
前記要求トピック(166、166R)の前記発行者(162)による前記1つ以上のメッセージ(164)は、前記フィルタリングされた応答メッセージ(164、164r)を含み、
前記動作は、前記要求プロセス(170a)のためのランタイム中に、前記フィルタリングされた応答メッセージ(164、164r)が前記固有のメッセージ識別子(UMI)を含むときに、確認応答メッセージを生成するステップをさらに含む、
請求項5に記載の方法。
【請求項7】
前記要求プロセス(170a)は、コンピューティングタスクを実行するための最初の要求を受信することに応答してインスタンス化され、
前記要求プロセス(170a)のためのランタイム中の前記動作は、前記要求トピック(166、166R)に対して発行される前記要求メッセージ(164、164R)に応答して前記応答プロセス(170b)から前記フィルタリングされた応答メッセージ(164、164r)を受信する際に、前記コンピューティングタスクを実行するための前記最初の要求に対する最初の応答を生成するステップをさらに含む、
請求項1~請求項6のいずれかに記載の方法。
【請求項8】
前記サブスクリプション識別子(214)は、前記要求プロセス(170a)の複数のインスタンスの中で固有のものである、請求項1~請求項7のいずれかに記載の方法。
【請求項9】
前記サブスクリプション識別子(214)は固有のフィルタ値を含み、
前記フィルタリングされた応答メッセージ(164、164r)は、前記サブスクライバ(168)を生成するために使用される前記それぞれのサブスクリプション(212)の前記固有のフィルタ値に基づいてフィルタリングされる、
請求項1~請求項8のいずれかに記載の方法。
【請求項10】
前記分散型メッセージサービス(160)のそれぞれのトピック(166)の各それぞれのサブスクライバ(168)は、前記それぞれのトピック(166)で通信される全てのメッセージ(164)を検索するマルチキャストサブスクリプションとして機能する、請求項1~請求項9のいずれかに記載の方法。
【請求項11】
データ処理ハードウェア(132)と、
前記データ処理ハードウェア(132)と通信するメモリハードウェア(134)を備えるシステム(100)であって、
前記メモリハードウェア(134)は、前記データ処理ハードウェア(132)で実行されるときに前記データ処理ハードウェア(132)に動作を実行させる命令を記憶し、
応答プロセス(170b)からの応答(164、164r)のための要求(164、164R)を発行する要求プロセス(170a)をインスタンス化する際、
前記動作は、前記応答プロセス(170b)からの前記要求(164、164R)のための前記応答(164、164r)を受信する分散型メッセージングサービス(160)の応答トピック(166、166r)を識別するステップを含み、前記応答プロセス(170b)は、前記応答トピック(166、166r)のための発行者(162)として構成され、
前記応答トピック(166、166r)のための複数のサブスクリプション(212、212a~n)を生成するステップを含み、各サブスクリプション(212)は、サブスクリプション識別子(214)を含み、
前記要求プロセス(170a)のためのランタイム中に、
前記応答プロセス(170b)によってサブスクライブされた要求トピック(166、166R)に対して要求メッセージ(164、164R)を発行するステップを含み、前記要求メッセージ(164、164R)は、固有のメッセージ識別子(UMI)を含み、
前記複数のサブスクリプション(212、212a~n)から選択されたそれぞれのサブスクリプション(212)のそれぞれのサブスクリプション識別子(214)を使用してサブスクライバ(168)を生成するステップを含み、前記サブスクライバ(168)は、前記固有のメッセージ識別子(UMI)を含み、
前記応答トピック(166、166r)に対して発行された前記要求メッセージ(164、164R)に応答して、前記応答プロセス(170b)からフィルタリングされた応答メッセージ(164、164r)を前記サブスクライバ(168)で受信するステップを含み、前記フィルタリングされた応答メッセージ(164、164r)は、前記要求プロセス(170a)のための前記複数のサブスクリプション(212、212a~n)と関連付けられる1つ以上のサブスクリプション識別子(214)に基づいてフィルタリングされる、
システム(100)。
【請求項12】
前記動作は、前記要求プロセス(170a)のためのランタイム中に、前記複数のサブスクリプション(212、212a~n)から前記それぞれのサブスクリプション(212)をランダムに選択するステップをさらに含む、請求項11に記載のシステム。
【請求項13】
前記動作は、
前記応答プロセス(170b)からの前記応答(164、164r)のための前記要求(164、164R)を発行する前記要求プロセス(170a)をインスタンス化するときに、前記応答トピック(166、166r)のための前記複数のサブスクリプション(212、212a~n)の各サブスクリプション識別子(214)をハッシュマップに記憶するステップと、
前記要求プロセス(170a)のためのランタイム中に、前記応答トピック(166、166r)のための前記複数のサブスクリプション(212、212a~n)の各サブスクリプション識別子(214)を記憶する前記ハッシュマップから前記それぞれのサブスクリプション識別子(214)をランダムに選択するステップと、
をさらに含む、請求項11または請求項12に記載のシステム。
【請求項14】
前記動作は、前記要求プロセス(170a)のためのランタイム中に、前記要求トピック(166、166R)のための前記要求メッセージ(164、164R)を生成するステップをさらに含む、請求項11~請求項13のいずれかに記載のシステム。
【請求項15】
前記動作は、
前記要求トピック(166、166R)の発行者(162)による1つ以上のメッセージ(164)が前記固有のメッセージ識別子(UMI)を含むかどうかを判断することによって、および
前記要求トピック(166、166R)の前記発行者(162)による前記1つ以上のメッセージ(164)のそれぞれのメッセージ(164)が前記固有のメッセージ識別子(UMI)を含まないときに、前記それぞれのメッセージ(164)が前記サブスクライバ(168)によって受信されないようにすることによって、
前記要求プロセス(170a)のためのランタイム中に、前記要求トピック(166、166R)の前記発行者(162)によって前記1つ以上のメッセージ(164)をフィルタリングするステップをさらに含む、請求項11~請求項14のいずれかに記載のシステム。
【請求項16】
前記要求トピック(166、166R)の前記発行者(162)による前記1つ以上のメッセージ(164)は、前記フィルタリングされる応答メッセージ(164、164r)を含み、
前記動作は、前記要求プロセス(170a)のためのランタイム中に、前記フィルタリングされる応答メッセージ(164、164r)が前記固有のメッセージ識別子(UMI)を含むときに、確認応答メッセージを生成するステップをさらに含む、
請求項15に記載のシステム。
【請求項17】
前記要求プロセス(170a)は、コンピューティングタスクを実行するための最初の要求を受信することに応答してインスタンス化され、
前記要求プロセス(170a)のためのランタイム中の前記動作は、前記要求トピック(166、166R)に対して発行された前記要求メッセージ(164、164R)に応答して前記応答プロセス(170b)から前記フィルタリングされた応答メッセージ(164、164r)を受信する際に、前記コンピューティングタスクを実行するための前記最初の要求に対する最初の応答を生成するステップをさらに含む、
請求項11~請求項16のいずれかに記載のシステム。
【請求項18】
前記サブスクリプション識別子(214)は、前記要求プロセス(170a)の複数のインスタンスの中で固有のものである、請求項11~請求項17のいずれかに記載のシステム。
【請求項19】
前記サブスクリプション識別子(214)は固有のフィルタ値を含み、
前記フィルタリングされた応答メッセージ(164、164r)は、前記サブスクライバ(168)を生成するために使用される前記それぞれのサブスクリプション(212)の前記固有のフィルタ値に基づいてフィルタリングされる、
請求項11~請求項18のいずれかに記載のシステム。
【請求項20】
前記分散型メッセージサービス(160)のそれぞれのトピック(166)の各それぞれのサブスクライバ(168)は、前記それぞれのトピック(166)で通信される全てのメッセージ(164)を検索するマルチキャストサブスクリプションとして機能する、請求項11~請求項19のいずれかに記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本開示は、非同期イベントベースの分散型メッセージングサービスに関する。
【背景技術】
【0002】
背景
クラウドコンピューティング環境などの分散型システムは、数々のソフトウェアサービスを提供するために広く使用されるようになってきている。これらのソフトウェアサービスが成長し、企業が複数のサービスをワークフローに統合するにつれて、これらのサービス間の調整がますます重要になり得る。つまり、クライアントがサービス間の互換性に依存するためには、これらのサービスのプロセス間の堅牢な通信が必要になる。さらに、クライアントは、コンピューティングコストと財務コストの両方からコスト効率の高い態様で動作するためにプロセス間の堅牢な協調を好む。これは、メッセージングシステムがプロセス間の動作を調整する場合、これらのプロセス間の通信で無駄な待ち時間を引き起こす操作を回避する必要があるという事実に置き換わる。
【発明の概要】
【0003】
概要
本開示の一態様は、イベントベースの分散型メッセージングサービスを実装するコンピュータが実行する方法を提供する。コンピュータが実行する方法は、データ処理ハードウェアによって実行されるときに、データ処理ハードウェアに動作を実行させる。応答プロセスからの応答のための要求を発行する要求プロセスをインスタンス化する際、動作は、応答プロセスからの要求のための応答を受信する分散型メッセージングサービスの応答トピックを識別するステップを含み、応答プロセスは、応答トピックのための発行者として構成される。また、応答プロセスからの応答のための要求を発行する要求プロセスをインスタンス化する際、動作は、応答トピックのための複数のサブスクリプションを生成するステップを含み、各サブスクリプションはサブスクリプション識別子を含む。要求プロセスのためのランタイム中、動作は、応答プロセスによってサブスクライブされた要求トピックに対して要求メッセージを発行するステップをさらに含み、要求メッセージは、固有のメッセージ識別子を含み、複数のサブスクリプションから選択されたそれぞれのサブスクリプションのそれぞれのサブスクリプション識別子を使用してサブスクライバを生成するステップをさらに含み、サブスクライバは、固有のメッセージ識別子を含む。さらに、要求プロセスのためのランタイム中、動作は、応答トピックに対して発行された要求メッセージに応答して応答プロセスからフィルタリングされた応答メッセージをサブスクライバで受信するステップも含む。ここで、フィルタリングされた応答メッセージは、要求プロセスのための複数のサブスクリプションと関連付けられる1つ以上のサブスクリプション識別子に基づいてフィルタリングされる。
【0004】
本開示の他の態様は、イベントベースの分散型メッセージングサービスを実装するためのシステムを提供する。システムは、データ処理ハードウェアと、データ処理ハードウェアと通信するメモリハードウェアとを含む。メモリハードウェアは、データ処理ハードウェアで実行されるときにデータ処理ハードウェアに動作を実行させる命令を記憶する。応答プロセスからの応答のための要求を発行する要求プロセスをインスタンス化する際、動作は、応答プロセスからの要求のための応答を受信する分散型メッセージングサービスの応答トピックを識別するステップを含み、応答プロセスは、応答トピックのための発行者として構成される。また、応答プロセスからの応答のための要求を発行する要求プロセスをインスタンス化する際、動作は、応答トピックのための複数のサブスクリプションを生成するステップを含み、各サブスクリプションはサブスクリプション識別子を含む。要求プロセスのためのランタイム中に、動作は、応答プロセスによってサブスクライブされる要求トピックに対して要求メッセージを発行するステップをさらに含み、要求メッセージは固有のメッセージ識別子を含む。動作は、複数のサブスクリプションから選択されるそれぞれのサブスクリプションのそれぞれのサブスクリプション識別子を使用してサブスクライバを生成するステップをさらに含み、サブスクライバは固有のメッセージ識別子を含む。さらに、要求プロセスのためのランタイム中に、動作は、応答トピックに対して発行される要求メッセージに応答して応答プロセスからフィルタリングされる応答メッセージをサブスクライバで受信するステップも含む。ここで、フィルタリングされる応答メッセージは、要求プロセスのための複数のサブスクリプションと関連付けられる1つ以上のサブスクリプション識別子に基づいてフィルタリングされる。
【0005】
本開示のコンピュータが実行する方法またはシステムの実施形態は、以下の任意選択的な特徴のうちの1つ以上を含むことができる。幾つかの実施形態において、動作は、要求プロセスのためのランタイム中に、複数のサブスクリプションからそれぞれのサブスクリプションをランダムに選択するステップも含む。幾つかの例において、要求プロセスのためのランタイム中の動作は、要求トピックのための要求メッセージを生成するステップをさらに含む。サブスクリプション識別子は、要求プロセスの複数のインスタンスの中で固有のものであってもよい。サブスクリプション識別子は固有のフィルタ値を含むことができ、フィルタリングされる応答メッセージは、サブスクライバを生成するために使用されるそれぞれのサブスクリプションの固有のフィルタ値に基づいてフィルタリングされる。幾つかの例において、分散型メッセージシステムのそれぞれのトピックの各それぞれのサブスクライバは、それぞれのトピックで通信される全てのメッセージを検索するマルチキャストサブスクリプションとして機能する。
【0006】
一部の構成では、応答プロセスからの応答のための要求を発行する要求プロセスをインスタンス化するとき、動作は、応答トピックのための複数のサブスクリプションの各サブスクリプション識別子をハッシュマップに記憶するステップも含む。これらの構成では、要求プロセスのためのランタイム中に、動作は、応答トピックのための複数のサブスクリプションの各サブスクリプション識別子を記憶するハッシュマップからそれぞれのサブスクリプション識別子をランダムに選択するステップを含む。
【0007】
幾つかの実施形態において、要求プロセスのためのランタイム中に、動作は、要求トピックの発行者による1つ以上のメッセージをフィルタリングするステップも含む。ここで、フィルタリングは、要求トピックの発行者による1つ以上のメッセージが固有のメッセージ識別子を含むかどうかを判断することによって行われる。要求トピックの発行者による1つ以上のメッセージのそれぞれのメッセージが固有のメッセージ識別子を含まない場合、動作は、それぞれのメッセージがサブスクライバによって受信されないようにするステップを含む。これらの実施形態において、要求トピックの発行者による1つ以上のメッセージは、フィルタリングされた応答メッセージを含む。フィルタリングされた応答メッセージが固有のメッセージ識別子を含む場合、要求プロセスのためのランタイム中の動作は、確認応答メッセージを生成するステップをさらに含む。
【0008】
任意選択的に、コンピューティングタスクを実行するための最初の要求を受信することに応答して、要求プロセスがインスタンス化されてもよい。コンピューティングタスクを実行するための最初の要求の受信に応答して要求プロセスがインスタンス化される場合、要求プロセスのためのランタイム中の動作は、要求トピックに対して発行される要求メッセージに応答して応答プロセスからフィルタリングされた応答メッセージを受信する際に、コンピューティングタスクを実行するための最初の要求に対する最初の応答を生成するステップをさらに含む。
【0009】
本開示の1つ以上の実施形態の詳細は、添付図面および以下の説明に記載される。他の態様、特徴、および利点は、説明および図面から、ならびに特許請求の範囲から明らかになる。
【図面の簡単な説明】
【0010】
【
図1A】イベントサービサーを伴うクラウドコンピューティング環境の一例の概略図である。
【
図1B】マルチ-インスタンス発行者-サブスクリプションシステムにおけるデータ流出の一例のフロー図である。
【
図1C】イベントサービサーを使用するマルチ-インスタンス発行者-サブスクリプションシステムにおけるデータ流出を防止する一例のフロー図である。
【
図2A】
図1Aのクラウドコンピューティング環境のイベントサービサーの例の概略図である。
【
図2B】
図1Aのクラウドコンピューティング環境のイベントサービサーの例の概略図である。
【
図2C】
図1Aのクラウドコンピューティング環境のイベントサービサーの例の概略図である。
【
図3】イベントベースの分散型メッセージングサービスを実施する方法における動作の構成例を示すフローチャートである。
【
図4】本明細書で説明されるシステムおよび方法を実施するために使用され得るコンピューティングデバイスの一例の概略図である。
【発明を実施するための形態】
【0011】
様々な図面における同様の符号は同様の要素を示す。
詳細な説明
より多くの企業および個人が分散型コンピューティングシステム(すなわち、クラウドベースのコンピューティングシステム)を使用するにつれて、これらの分散型コンピューティングシステムは、分散型システムによって提供される1つ以上のサービスに関連する様々なプロセスにおけるタスクを実行するために、ある種のクライアント側メカニズムを使用する場合がある。例えば、クライアント(すなわち、企業および/または個人ユーザ)は、クライアントデータに対してデータ分析を実行する分析プラットフォーム(すなわち、データ分析サービス)を使用することができる。一種のクライアント側メカニズムとして機能するアクションハブは、分析プラットフォームの一部であり、分析プラットフォームによって分析されているデータに対してクライアントがアクションを実行できるようにし得る。ここでは、分析プラットフォーム(例えばデータ分析システムなど)と統合された、例えばアクションハブなどのクライアント側メカニズムを有することにより、クライアントは、タスクを調整するために1つのシステムを使用し、データ分析を実行するために他の別個のシステムを使用する必要がなくなる。
【0012】
さらに、クライアントは、あるソフトウェアサービスの構成要素を別のソフトウェアサービスの機能と統合することがよくある。分析プラットフォームの例を続けると、分析プラットフォームにおけるアクションハブのクライアントは、クライアントのユーザに電子メールを送信したい場合がある。この例では、クライアントは、分析プラットフォームを使用して、クライアントのデータに基づいてクライアント用の視覚的な財務レポートを生成することができ、クライアントは、その視覚的な財務レポートをクライアントの複数のユーザ(例えば、クライアントである企業の従業員など)に通信したい場合がある。この視覚的な財務レポートの電子メールを作成するには、クライアントはアクションハブを使用してアクションをスケジュールし、アクションは、財務レポートを電子メールとして目的の受信者に通信することである。アクションハブは視覚的な財務レポートを検索する要求を生成し、財務レポートが検索されると、アクションハブはトリガされたアクションを実行して財務レポートを目的の受信者に送信する。ここで、視覚的な財務レポートを送信するアクションは、検索要求に応答して視覚的な財務レポートを受信するイベントによってトリガされるため、送信アクションはトリガされたアクションまたはイベントベースのアクションである。つまり、イベントベースのアクションとは、特定のイベントまたは一連のイベントに応答して発生するアクションを指す。
【0013】
アクションハブのようなクライアント側メカニズムで発生する問題の1つは、アクションハブを通じて調整されるタスクがクライアントにとって重要な、または重大なワークロードになる場合があることである。言い換えれば、クライアントは、アクションハブから調整されるアクションに依存して動作する企業である場合がある。例えば、金融クライアントまたはクライアントのチームは、財務データ管理またはその財務データにおけるデータ分析と組み合わせた財務データストレージに依存する場合がある。例えば、クライアントの財務チームは、財務投資を評価するために視覚的な財務レポートを含む電子メールに依存する。全てのクライアントにわたるワークロードまたは幾つかの他の理由によりアクションハブに何らかの障害が発生した場合、この障害によって、クライアントとの関係が損なわれる可能性があり、クライアントがフェイルセーフとして独自のバージョンのアクションハブを制御またはホストすることになる可能性もある。
【0014】
障害は様々な理由で発生する場合があるが、障害につながる可能性のある問題の1つは、特定のタスクを実行するためにイベントが調整される方法である。タスクが生じ得るようにする特定の一連のイベントを調整するために、アクションハブなどのクライアント側メカニズムは分散型メッセージングシステムを使用する。分散型メッセージングシステムは、特定のトピックに関するメッセージを発行できるようにし、そのトピックのサブスクライバがそのトピックに関して発行されるメッセージを受信できるようにする。トピックは、一般に、分散型メッセージングシステムによって発行とサブスクリプションとの関係のために構成される、指名されるリソースを指す。この意味で、アクションハブのようなクライアント側メカニズムは、分散型メッセージングシステムと連携して動作して、特定のアクションの実行を要求し、その特定のアクションが実行されたときに通信する。
【0015】
視覚的な財務レポートの電子メールで説明すると、アクションハブは分散型メッセージングシステムを使用して、視覚的な財務レポートを検索するトピックにおける視覚的な財務レポートの検索のための要求メッセージを生成する。そのトピックのサブスクライバは、視覚的な財務レポートを生成するまたは検索できるアプリケーションまたはサービスであってもよい。サブスクライバは、その後、発行者として機能して、視覚的な財務レポートを含むメッセージを生成し、そのメッセージを検索された視覚的な財務レポートのトピックに対して発行することができる。次いで、アクションハブは、分散型メッセージングシステムを使用して、電子メールを生成するトピックに対してレポートを電子メールとして送信するための要求メッセージを生成することができる。電子メールの生成に関するトピックのサブスクライバは、視覚的な財務レポートを伴う要求メッセージを受信し、電子メールサービスまたは電子メールアプリケーションを使用して、視覚的な財務レポートを目的の受信者に送信できる。電子メールを送信するアクションが実行されると、そのサブスクライバは発行者として動作し、レポートを伴う電子メールが送信されたことを伝える、通信された電子メールのトピックに対して応答メッセージを発行する。通信された電子メールのトピックのサブスクライバは、応答メッセージを受信する。この段階で、アクションハブは、視覚的な財務レポートを指定された受信者に電子メールで送信するアクションが完了し、そのタスクに関してそれ以上のアクションを実行できないことを示すことができる。
【0016】
このメッセージングシーケンスはクライアントのアクションに関して成功しているように見えるが、このプロセスのスケーリングに問題が生じる場合がある。例えば、発行者-サブスクライバメッセージングシステムにおいて、サブスクライバは、一般に、クライアントのアクションに関連する関連メッセージを受信するだけではなく、むしろサブスクライバは、トピックをサブスクライブし、その特定のトピックにおける全てのメッセージを受信するように構成される。発行者-サブスクライバシステムにより、分散型メッセージングシステムは、サブスクライバがサブスクライブしている特定のトピックでメッセージが受信されるときに、サブスクライバにメッセージをプッシュすることができ、あるいは、サブスクライバは、自発的にサブスクライバがサブスクライブするトピックからメッセージをプル(つまり、検索)したりすることができる。しかし残念なことに、どちらのシナリオでも、サブスクライバはトピックに関するメッセージを受信するが、多くの場合、受信前にメッセージのコンテキストを理解できない(メッセージがトピックに関連しているという一般的なコンテキスト以外)。複数の発行者(例えば、数千の発行者)が無数のアクションに関連する様々なメッセージを生成する大規模なシステムでは、サブスクライバが特定のメッセージを識別するのは、面倒になり、大量のデータ流出が発生する。例えば、レポート電子メールの場合、通信される電子メールのトピックの最後のサブスクライバは、アクションコンテナと関連付けられた発行者が視覚的な財務レポートを含む電子メールが送信されたことを示すのを待っている。しかし、通信される電子メールのトピックは、電子メール通信に関する何千ものメッセージを受信する可能性があり、最後のサブスクライバは、これらの何千ものメッセージのいずれかが視覚的な財務レポートの電子メールに特に関連しているかを識別しようとするままである。
【0017】
これらの数千のメッセージのいずれかが視覚的な財務レポートの電子メールに関連しているかを識別しようとする1つのアプローチは、最後のサブスクライバがそのトピックに関して受信した全てのメッセージをプルし、最後のサブスクライバが対象の1つのメッセージを識別するまで1,000のメッセージをふるい分けることである。このプロセスは大量のデータ流出をもたらす。これは、分散型メッセージングシステムが、1,000メッセージの場合、さらに999個の追加メッセージをサブスクライバに送信する必要があるからである。これにより、追加のコンピューティングコストが発生し、プロセス中に誤ったイベントがトリガされる可能性がある。また、企業自体としても、クラウドサービスプロバイダは、一般に、データの流出料金をクライアントに請求するため、このプロセスは、当事者ごとにコストがかかる。
【0018】
この例をさらに拡張すると、トピックに関して複数のサブスクライバが存在する可能性があり、各サブスクライバがアクションの完了を確認するメッセージを識別しようとしている可能性がある。したがって、1人のサブスクライバが999個の追加メッセージを持つのではなく、全てのサブスクライバにわたって流出が増加する。つまり、100人のサブスクライバがいる場合、100人のサブスクライバはそれぞれ1つのメッセージに関心があるため、これらの100人のサブスクライバは、合計99,900の追加メッセージを受信することになる。さらに、分散型コンピューティングインフラストラクチャプロバイダは、一般に、特定の呼び出しに対する要求のレートを制限するレート制限を有する。つまり、クラウドプロバイダは、呼び出しごとに1秒あたり200要求のレート制限を有する場合があり、それにより、サブスクライバは、トピックに関する1,000のメッセージに対して1,000の要求を生成するために、呼び出しに応答して5秒待機することになる。レート制限がある場合、クライアントは、特に複数のイベント(複数のサブスクリプション呼び出しなど)を伴うアクションに関して高い遅延を経験することを余儀なくされる場合がある。
【0019】
これらの流出問題を解決する1つのアプローチは、特定のアクション要求が発生するたびにフィルタまたは固有の要求識別子を生成することである。このことは、視覚的な財務レポートの電子メールを生成する要求により、その特定のアクションに関する固有の要求識別子を使用してインスタンスが作成されることを意味する。このインスタンスは、アクションが実行されるために必要なトピックへのサブスクリプションを生成するが、そのサブスクリプションは、大量の流出の可能性を防ぐために応答メッセージをフィルタリングする手段として固有の要求識別子を含む。このアプローチは、流出を低減できるが、システムが他のタスクに利用できない固有のインスタンスも生成する。言い換えれば、固有の要求識別子を使用すると、インスタンスは、要求に対して完全に固有となり、その構造を他の要求に再利用できない。残念ながら、クライアントの財務チームは視覚的な財務レポートの電子メールを毎週生成する場合がある。これは、レポートが動的である可能性があり、固有の要求識別子によりシステムによって1週間生成されるインスタンスは翌週には再度使用できないからである。言い換えれば、この固有の要求識別子のアプローチにより、システムによるインスタンス化が頻繁に行われる可能性がある。
【0020】
インスタンス化にも配慮しながらこれらの流出の問題に対処するために、ここで説明するアプローチは、プロセスのインスタンス化にフィルタが含まれるようにプロセスのインスタンス化方法を変更するが、そのフィルタは特定のアクション要求に固有ではない。むしろ、プロセスのインスタンス化中に、システムはプロセスのためのトピックに対するN個のサブスクリプションを生成し、この場合、各サブスクリプションには固有の値(例えば、固有のフィルタ値)が含まれる。作成(すなわち、プロセスのインスタンス化)中にこれらの固有の値を特定の要求に結び付けて、目的が限定されるサブスクリプションを生成する代わりに、システムは、アクション要求を受信するときに、これらのサブスクリプションに基づいてサブスクライバを生成する。つまり、N個のサブスクリプションによるプロセスのインスタンス化後のランタイム中に、システムは、プロセスの要求を受信し、以前にインスタンス化されている特定のサブスクリプションと関連付けられた固有の値を使用するサブスクライバを作成する。この意味で、固有の値は特定の要求のためのフィルタとして機能するが、このフィルタの作成はその特定の要求へのサブスクリプションを制限しない。このことは、最初の要求の場合、システムがインスタンス化されたサブスクリプションの固有の値を使用してインスタンス化されたサブスクリプションに基づきサブスクライバを作成する場合があるが、将来2番目の要求が発生するときに、そのフィルタに関してインスタンス化されたサブスクリプションの同じ固有の値を使用する別のサブスクライバが生成される場合があることを意味する。したがって、最初の要求が完了すると、最初の要求に固有のサブスクライバは廃止される可能性があるが、そのフィルタ値として機能する値は、プロセス上の後の要求に使用される可能性がある。さらに、N個のサブスクリプションをインスタンス化することにより、N個の同時要求を操作するようにプロセスをスケーリングできる。例えば、各同時要求は、N個のサブスクリプションの固有の値の1つを使用してサブスクライバを形成できる。
【0021】
図1Aは、クラウドコンピューティング環境100の一例である。環境100は、ネットワーク120を介してリモートシステム130と通信する1人以上のクライアント10を含む。クライアント10は、リモートシステム130と通信して、様々なコンピューティングプラットフォームにアクセスして実行する。換言すれば、クラウドコンピューティング環境などのリモートシステム130は、クラウド環境130の顧客がクライアント10である様々なサービスとしてのソフトウェア(SaaS)プラットフォームを提供することができる。この点において、クライアント10は、ビジネスまたは企業からクラウド環境130の個人ユーザまでの範囲におよぶことができる。
【0022】
クライアント10は、一般に、リモートシステム130の任意のユーザを指すことができる。クライアント10は、クライアント10と関連付けられた任意のコンピューティングデバイスに対応し得るクライアントデバイス110を使用してリモートシステム130と通信する。クライアントデバイス110の幾つかの例としては、モバイルデバイス(例えば、携帯電話、タブレット、ラップトップ、電子書籍リーダなど)、コンピュータ、ウェアラブルデバイス(例えば、スマートウォッチ)、音楽プレーヤ、キャストデバイス、スマート家電(例えば、スマートテレビ)およびモノのインターネット(IoT)デバイス、リモコン、スマートスピーカーなどを挙げることができるが、これらに限定されない。リモートシステム130は、リモートデータ処理ハードウェア132(例えば、リモートサーバまたはCPU)および/またはリモートメモリハードウェア134(例えば、リモートデータベースや他のストレージハードウェア)などのリモートリソースを含むことができる。クライアントデバイス110は、リモートリソースを利用して、リモートシステム130のサービスのプロセスに関連する様々な機能を果たすことができる。これらのプロセスは、リモートシステム130によってホストされるか、またはクライアントデバイス110のローカルリソースと統合することができる。
【0023】
クライアント10は(例えば、クライアントデバイス110を介して)アクションシステム140(例えば、アクションハブ140とも呼ばれる)と対話して、クライアント10によってアクション要求150として提出される特定のアクションをアクションハブ140に実行させる。ここで、アクションとは、リモートシステム130と関連付けられた様々なサービスの一部の機能を利用する任意のコンピューティングタスクを指すことができる。多くの場合、クライアント110は、別のサービスによって統合または使用されるリモートシステム130の特定のサービスによって処理または分析されるクライアントデータを有するようにアクション要求150を生成することができる。例えば、クライアント110は、電子メールサービスを使用してリモートシステム130の分析サービスによって生成されるクライアントデータに関する財務レポートを含む電子メールを送信するためのアクション150を要求する。
【0024】
アクション要求150と関連付けられたアクションが完了するか、完了しようとすると、アクションハブ140は、アクション要求150からのアクションのステータスをクライアント10(例えば、クライアントデバイス110)に通知するための応答180を生成することができる。応答180が、アクションが完了したことである場合(例えば、応答メッセージ164は、プロセス170がアクションを実行したことを示す)、アクションハブ140は、実際のメッセージまたは何らかの他の形式の通信をクライアント10に通信して、アクションの完了を示すことができる。幾つかの例において、アクションハブ140は、アクションが完了したことを、クライアント側インタフェースにおけるアクションに関するステータスとして表示する。幾つかの構成において、要求150および/または応答180は、ハイパーテキスト転送プロトコルセキュア(HTTPS)またはハイパーテキスト転送プロトコル(HTTP)を使用するメッセージである。
【0025】
図1Aに示されるように、アクションハブ140は、メッセージングシステム160およびイベントサービサー200と関連付けられるか、またはそれらを含むことができる。アクションハブ140は、メッセージングシステム160およびイベントサービサー200の周囲の点線のボックスとして示される。これは、これらの構成要素が、アクションハブ140自体の一部であってもよく、アクションハブ140とは別個であっても、アクションハブ140と通信していてもよいからである。ここで、メッセージングシステム160は、非同期イベントを調整することによって動作する分散型メッセージングシステムを指し得る。ここで、非同期とは、イベントが同時に発生する必要がないという事実を指す。一般に、非同期メッセージングについても同じことが当てはまる。メッセージは、例えば、2つのプロセス(例えば、第1のプロセス170、170aと第2のプロセス170、170b)の間で、プロセス170間で現在の会話(すなわち、直接の接触)が行われる必要なく交換され得る。
【0026】
要求150が視覚的な財務レポートを伴う電子メールを送信することであり、視覚的な財務レポートがすでに取得されている場合、その要求を満たすためのイベントは、電子メールを送信できる何らかのサービスに要求を通信し、アクションが完了したという応答を求めることになる。ここで、アクションを実行できるサービスを一般にアクションコンテナと呼ぶ。アクションコンテナは、指定されるアクションを実行できるプロセス170のインスタンスを指す。分散型システムは、アクションコンテナで実行される動作が分散型システムの他のサービスやワークロードに不必要に影響を与えないように、アクションコンテナが分散型システムに含まれる(つまり、分離される)可能性があるため、アクションコンテナの使用をしばしば好む場合がある。この意味において、アクションコンテナは、リモートシステム130のリソース上の現在のワークロードまたは予想されるワークロードに適応するためにリモートシステム130がインスタンスの数を調整できるように、特定のサービスまたはアプリケーションのインスタンスを含むことができる。
【0027】
アクションコンテナを使用して特定のアクションの一部または全てを実行する場合、アクションハブ140は、一般に、アクションが処理されたという何らかのフィードバックがない限り、要求されるアクション150が実行されたかどうかを知ることができない。つまり、アクションコンテナ内のプロセス170は、指定されるアクションを実行することができるが、アクションハブ140は、さらなる情報がなければ、プロセスの性能を認識しない。この点において、プロセス170は、メッセージングシステム160も活用して、アクションが完了したことを通信する。
【0028】
幾つかの例では、非同期で機能するために、メッセージングシステム160は発行者-サブスクライバ構成で動作する。発行者-サブスクライバ構成は、特定のプロセス170が、特定のトピック166に関するメッセージ164を発行する発行者162として機能する一方で、そのトピック166のサブスクライバ168が、メッセージ164がトピック166に関して生成されたことを認識させるトピック166へのサブスクリプションを有するようなものである。例えば、メッセージングシステム160は、トピック166を構成し、各トピック166は、メッセージ164がその特定のトピック166に関して記憶される記憶空間を含む。サブスクライバ168がサブスクライブしているトピック166にメッセージ164があるという表示をサブスクライバ168が受信すると、サブスクライバ168は、対応する記憶場所からメッセージ164を検索する(例えば、プルする)ことができる。幾つかの実施形態において、メッセージングシステム160は、1つ以上のトピック166に関するメッセージ164をそのトピック166のサブスクライバ168にプッシュするように構成され、それにより、トピック166に関するメッセージ164が受信されると、メッセージングシステム160は、そのメッセージ164を、そのトピック166へのサブスクリプションを持つ全てのサブスクライバ168に通信する。発行者-サブスクライバ関係は、複数のサブスクライブ168がサブスクライブするトピック166についてのメッセージ164を1人の発行者162が発行することを意味する1対多であってよく、トピック166に関するメッセージ164を1人のサブスクライバ168に複数の発行者162が発行することを意味する多対1であってもよく、またはその変形であってもよい。さらに、この形式の分散型メッセージングでは、所与のトピック166に関する発行者162および/またはサブスクライバ168の数は、分散型システムのメッセージングのニーズに基づいて動的に変化する可能性がある。これが意味することは、リモートシステム130が、電子メールを生成するプロセス170のアクションコンテナの複数のインスタンスをインスタンス化できるということである。
【0029】
発行者-サブスクライバモデルでは、インスタンス化されているプロセス170は、発行者162、サブスクライバ168、またはその両方であり得る。例えば、プロセス170は、第1のトピック166、166aに対する発行者162であり、第2のトピック166、166bに対するサブスクライバ168である。これは、プロセス170が第1のトピック166aに関する1つ以上のメッセージ164を生成し、第2のトピック166bに関する1つ以上のメッセージ164を聴取/受信できることを意味する。例示すると、アプリケーションコンテナのインスタンスに含まれるプロセス170は、プロセス170が実行するように要求されているアクションについてプロセス170に通知する第1のトピック166aにおけるサブスクライバ168であり、また、要求されたアクションが実行されたことを示すトピックとして機能する第2のトピック166bにおける発行者162でもあり得る。電子メールの例では、プロセス170は、視覚的な財務レポートを添付する電子メールを生成できる電子メールアプリケーションである。電子メールアプリケーションは、電子メール要求に関する第1のトピック166aに対するサブスクライバ168であり、通信された電子メールに関する第2のトピック166bに対する発行者162として機能する。
【0030】
イベントサービサー200は、リモートシステム130を使用してアクションを実行するときに大量のデータの流出を防止するように構成されるシステムである。
図1Bは、発行者-サブスクライバメッセージングシステム160を使用するときにデータの流出がどのように発生するかを示す。この図では、プロセスAおよびプロセスBの両方が5回インスタンス化されている。プロセスAの各インスタンスは、第1のトピック166aに対する発行者162、162a~e、および第2のトピック166bのサブスクライバ168、168f~jとして構成されている。トピック166は関与するアクションに基づいて変化するが、現在の例を維持するために、第1のトピック166aは電子メール要求に関するトピック166であり、第2のトピック166bは通信された電子メールに関するものである。補足的に、プロセスBの各インスタンスは、第1のトピック166aに関するサブスクライバ168a~eとして、第2トピック166bにおける発行者162a~eとして構成されている。プロセスAの各インスタンスは、プロセスBによって実行される特定のアクションを要求する発行者162としてメッセージ要求164、164a~eを生成する。ここで、各メッセージ要求164はプロセスAの特定のインスタンスに固有のものである。例えば、プロセスBは電子メールアプリケーションであってもよく、各メッセージ要求164は、プロセスBに、異なるパラメータ(例えば、内容、受信者、添付ファイルなど)を備えた電子メールを生成するよう要求する。各メッセージ164は、メッセージ要求164として指定された円要素内の異なる塗りつぶしパターンによって固有であることが示されている。この例では、プロセスAの第1のインスタンスからの灰色で塗りつぶされたメッセージ要求164、164a(または最初のメッセージ要求164a)は、プロセスBに対する視覚的な財務レポートを伴う電子メールを生成する要求である。プロセスBの各インスタンスは、サブスクライバ168として、第1のトピック166aに関するメッセージ要求164を受信する。プロセスBのインスタンスがメッセージ要求164を受信すると、該インスタンスはメッセージ164で要求されたそれぞれのアクションを実行する。プロセスBの各インスタンスが要求に応じてパラメータ化された電子メールを通信すると、プロセスBの各インスタンスは、応答メッセージ164f~jを、第2のトピック166bについて(すなわち、それぞれの電子メールが送信されたことについて)発行者162f~jとして発行する。プロセスAの各インスタンスは、要求された電子メールがいつ送信されたかを理解できるように、電子メール通信に関する第2のトピック166bにサブスクライバ168f~jとしてもサブスクライブする。
【0031】
前述したように、トピック166のサブスクライバ168は、任意の追加のシステムがなければ、トピック166に関するメッセージ164の内容を伝えることが伝統的に不可能である。この点において、
図1Bは、プロセスAの各インスタンスを、第2のトピック166bのための記憶場所から全ての応答メッセージ164f~jをプルするものとして示している。ここで、電子メールが視覚的な財務レポート(つまり、最初のメッセージ164a)とともに生成されたことをプロセスAの第1のインスタンスが判断するために、プロセスAの第1のインスタンスは、全ての応答メッセージ164f~jを受信し、電子メールが視覚的な財務レポートとともに生成されたという確認を応答メッセージ164gが与えることを決定する。この決定を実行するために、プロセスAの第1のインスタンスは、第2のトピック166bからプルした他の応答メッセージ164f、h、~jを受信した後、破棄または無視する。この例では、確認のために単一のメッセージ164のみが必要だったため、流出が発生するが、第1のサブスクライバ168fは、対象となる実際のメッセージ164(すなわち、メッセージ164g)を識別するために5つのメッセージ164をプルする必要があった。
【0032】
対照的に、
図1Cは、イベントサービス200がデータ流出の問題をどのように回避するかを示している。
図1Cは、応答メッセージ164f~jがフィルタリングされる(例えば、フィルタ層として示される)ことを除いて、
図1Bと同様である。すなわち、それぞれのアクションが実行されたというプロセスBからの応答メッセージ164を待っているプロセスAの各インスタンスにおける第2のトピック166bのサブスクライバ168は、応答メッセージ164f~jの全てをプルする必要はない。むしろ、応答メッセージ164f~jは、プロセスAによって発行される元の各要求メッセージ164a~eに含まれる固有のメッセージ識別子UMIに基づいてフィルタリングされる。応答メッセージ164f~jをフィルタリングすることにより、プロセスAのインスタンスと関連付けられる各サブスクライバ168f~jは、プロセスAのその特定のインスタンスに関連するメッセージ164を受信する。この例では、プロセスAの各インスタンスに関連する応答メッセージ164が1つだけであるため、プロセスAの各サブスクライバ168は単一の応答メッセージ168を受信する(例えば、これは、要求メッセージ164のアクションがプロセスBによって完了したことを示す)。
【0033】
引き続き
図1Aを参照すると、イベントサービサー200は、プロセス170をインスタンス化し、特定のアクションを実行するために発行者162/サブスクライバ168の関係をセットアップするように構成される。発行者162/サブスクライバ168の関係をセットアップするために、イベントサービサー200は、特定のプロセス170に関係する対象のトピック166を識別することができる。例えば、
図1Aは、第1のプロセス170aおよび第2のプロセス170bを示す。第1のプロセス170aは、第1のトピック166aに関して要求メッセージ164、164Rを生成する発行者162として示され、第2のプロセス170bは、第1のトピック166aのサブスクライバ168であり、要求メッセージ164Rを受信する。次に、第2のプロセス170bは、要求メッセージ164Rに応答して応答メッセージ164、164rを生成することによって、第2のトピック166bのための発行者162として機能する。第1のプロセス170aは、要求メッセージ164Rに関連するアクションを第1のプロセス170aに通知する応答メッセージ164rを受信する第2のトピック166bのサブスクライバである。
【0034】
図2A~
図2Cを参照すると、プロセス170に関してこれらの発行者/サブスクライバ関係を設定するために、イベントサービサー200は、イベントサービス200がプロセス170をインスタンス化しているかまたはランタイム中にプロセス170を実装しているかに応じて、異なる動作を実行する。この点において、イベントサービサー200は、イニシエータ210およびランタイムジェネレータ220を含む。イニシエータ210は、要求メッセージ164Rを発行する(例えば、応答プロセス170bによって何らかのアクションが実行されるように要求する)プロセス170におけるインスタンス化中に発生する動作を実行する。この点において、イニシエータ210は、要求プロセス170をインスタンス化する。イニシエータ210が要求プロセス170をインスタンス化するとき、イニシエータ210は、メッセージングシステム150のトピック166を識別し、メッセージングシステム150は、要求プロセス170Aの要求メッセージ164Rに応答する別のプロセス170bから応答メッセージ164rを受信する。ここで、この他のプロセス170bは、要求メッセージ164Rに応答するため、応答プロセス170と呼ばれる。イニシエータ210によって識別されるトピック166は、応答プロセス170bがその応答メッセージ164rを通信するトピック166であるため、応答トピック164、166rと呼ばれる。換言すれば、要求メッセージ164Rは、応答プロセス170bが特定のアクションを実行することを要求するため、応答トピック166rは、応答プロセス170bがアクションのステータス(例えば、アクションが完了したか、失敗したか、または中間状態にあること)を示す応答メッセージ164rを発行するトピック166である。幾つかの例において、イニシエータ210は、要求メッセージ164Rのアクションを実行する応答プロセス170bを識別し、次いで、この特定の応答プロセス170bが発行者162として発行する先のトピック166を決定することによって、応答トピック166rを識別する。
【0035】
イニシエータ210が要求プロセス170aのインスタンス化中に応答トピック166rを識別すると、イニシエータ210は、要求プロセス170aのこの特定のインスタンスにおける識別された応答トピック166rに対してN個のサブスクリプション212、212a~n(複数のサブスクリプション212とも呼ばれる)を生成する。要求プロセス170aの特定のインスタンスに関してイニシエータ210によって生成される各サブスクリプション212は、サブスクリプション識別子214(SIDとして示される)を含む。幾つかの例において、サブスクリプション識別子214は、複数のサブスクリプション212の中から単一のサブスクリプション212を識別する固有の識別子を指す。換言すると、1つのサブスクリプション212は、別のサブスクリプション212と共通のサブスクリプション識別子214を共有していなくてもよくまたは有していなくてもよい(例えば、要求プロセス170aの特定のインスタンスにおいて)。
【0036】
幾つかの実施形態において、イニシエータ210は、フィルタ値216(Fvとして示される)を待機するフィルタで各サブスクリプション212を生成する。ここで、フィルタ値216は、他のサブスクリプション212と同じフィルタ値216を有するサブスクリプション212が存在しないという点で固有であってもよい。フィルタ値216は、サブスクリプション識別子214に関連していてもよく、またはサブスクリプション識別子214とは完全に別個であってもよい。例えば、
図2Bにおいて、各サブスクリプション212a~nは、サブスクリプション識別子214およびフィルタ値216とともに示されている。さらに、特定のサブスクリプション212におけるサブスクリプション識別子214およびフィルタ値216の一方または両方も、要求プロセス170aにおける全てのインスタンスの全てのサブスクリプション212の中で固有である。このことは、サブスクリプション識別子214および/またはフィルタ値216が、要求プロセス170aの任意の他のインスタンスと共有されないことを意味し、それにより、例えば、サブスクリプション識別子214およびフィルタ値216の1つまたは組み合わせは、要求プロセス170aの特定のインスタンスに固有のものである。これらの要素を固有にすることによって、要求プロセス170aによってサブスクライブされるメッセージ164をフィルタリングして、要求プロセス170aの特定のインスタンスのサブスクライバ168によって受信されるメッセージ164が、要求プロセス170aのその特定のインスタンスを対象としたものであるように確保することができる。換言すれば、サブスクリプション識別子214および/またはフィルタ値216により、イベントサービサー200は、要求プロセス170aのランタイム中にデータの流出を防止することができる。
【0037】
幾つかの構成において、各サブスクリプション212に対応するサブスクリプション識別子214および/またはフィルタ値216は、ハッシュマップなどの記憶要素に記憶される。例えば、記憶要素がハッシュマップである場合、ハッシュマップは、キーがフィルタでありかつ値がサブスクリプション212であるキーと値との対を伴うエントリを含む。ここで、キーに対応するフィルタは、サブスクリプション識別子214、フィルタ値216、および/または両方の幾つかの組み合わせであってもよい。記憶要素(例えば、ハッシュマップ)のサイズは、要求プロセス170aのインスタンスが処理できる同時要求の数に対応し得る。これは、サービサー200が応答トピック166rで受信したメッセージ164をフィルタ値216および/またはサブスクリプション識別子214によってフィルタリングすることができるからである。これが当てはまる場合であって、これらの要素214、216が単一のサブスクリプション212に固有である場合、サービサー200は、使用されているフィルタ値が共有されていない場合にのみ、データの流出を完全に防ぐことができる。
【0038】
図2Bを参照すると、イニシエータ210は、要求プロセス170aが無数にインスタンス化され得る(例えば、インスタンス1~iとして示される)という事実を示しており、この場合、要求プロセス170aの各インスタンスは、サブスクリプション212、212a~nのセット212、212
sを含む。例えば、第1のインスタンスは、サブスクリプション212a~nの第1のセット212、212
s1を含む。第2のインスタンスは、サブスクリプション212a~nの第2のセット212、212
s2を含む。i番目のインスタンスは、サブスクリプション212a~nのi番目のセット212、212
siを含む。複数のインスタンスがある場合、各インスタンスは、サブスクリプション212のそれぞれのインスタンスのセット212sに対応するサブスクリプション識別子214および/またはフィルタ値216における独自の記憶要素を有してもよい。あるいは、サービサー200は、サブスクリプション212の全てのセット212sに対応する(すなわち、全てのインスタンスに関して)サブスクリプション識別子214および/またはフィルタ値216の全てを記憶するグローバル記憶要素を含んでもよい。
【0039】
図2Aおよび
図2Cを参照すると、イニシエータ210が要求プロセス170aにおけるインスタンス化を実行した後、イベントサービサー200のランタイムジェネレータ220は、要求プロセス170aのためのランタイム中にサブスクリプション212がどのように使用されるかを管理する。要求プロセス170aのためのランタイム中に、ランタイムジェネレータ220は、応答プロセス170bによってサブスクライブされる要求トピック166Rに対して要求メッセージ164Rを発行するように構成される。幾つかの例において、要求メッセージ164Rは、要求150を生成することによってアクションハブ140が実行することをクライアント10が要求するアクションに対応する。アクションハブ140が要求150を受信すると、アクションハブ140は、イベントサービサー200が要求150を満たし得る1つ以上のアクション(例えば、イベントベースのアクション)を識別できるようにするために要求150をイベントサービサー200に提供することができる。イベントサービサー200によって識別されるアクションごとに、イベントサービサー200は、要求メッセージ164Rと関連付けられたアクションを実行できるプロセス170がそのアクションを実行することを要求する要求メッセージ164Rを生成することができる。ここで、プロセス170(例えば、応答プロセス170bと呼ばれる)がアクションを実行することを要求するために、要求プロセス170aは、応答プロセス170bがサブスクライバ168aとしてサブスクライブする要求トピック166Rに対して要求メッセージ164Rを発行する。サブスクライバ168aとして、応答プロセス170bのインスタンスは、要求メッセージ164Rを受信するとともに、要求メッセージ164Rによって識別される、または要求メッセージ164Rと関連付けられたアクションを実行する。応答プロセス170bは、応答メッセージ164rを発行者162bとして応答トピック166rに発行することに対応して、アクションが完了したこと(またはアクションに関連する何らかのステータス)を要求プロセス170aに通知する。
【0040】
イベントサービサー200は、データ流出(例えば、サブスクリプションコールに関して)を防止または低減することを意図しているため、ランタイムジェネレータ170aは、応答メッセージ164rが要求プロセス170aの特定のインスタンスを真に意図したものであるようにランタイムジェネレータ170aが保証した後に応答メッセージ164rを受信する要求プロセス170aにおけるサブスクライバ168bを生成するように構成される。要求プロセス170aの特定のインスタンスを意図した応答メッセージ164rのみを受信するサブスクライバ168bを生成するために、ランタイムジェネレータ220は、イニシエータ210によってインスタンス化されるそれぞれのサブスクリプション212のサブスクリプション識別子214および/またはフィルタ値216を使用してサブスクライバ162bを生成する。幾つかの例において、ランタイムジェネレータ220は、要求プロセス170aの特定のインスタンスにおけるサブスクリプション212のセット212sからサブスクリプション212を選択し(例えば、ランダムに選択し)、その選択されたサブスクリプション212からのサブスクリプション識別子214(および/またはフィルタ値216)により要求プロセス170aのインスタンスにおけるサブスクライバ162bを生成する。例えば、
図2Cは、イニシエータ210がすでにインスタンス化した要求プロセス170aの第1のインスタンスから第2のサブスクリプション212bを選択するランタイムジェネレータ220を示す。この手法により、サブスクリプション212が要求メッセージ164Rおよびその関連アクションに特定のフィルタ目的の固有の識別子を潜在的に有するランタイム中にサブスクリプション212を生成する代わりに、要求プロセス170aにおけるサブスクライバ168がランタイム中に生成され、これらのサブスクライバ168は、特定の要求メッセージ164Rおよび要求メッセージ164Rの特定のアクションにとらわれない識別子(例えば、サブスクリプション識別子214および/またはフィルタ値216)を使用して生成される。さらに、要求メッセージ164の特定のアクションが完了し、サブスクライバの目的(特定のアクションが発生したと決定する)がなされると、クラウドコンピューティング環境130は、プロセス170の廃止されるインスタンス全体を含まず、むしろ、1つの廃止されるサブスクライバ168bのみを含む。廃止されるサブスクライバ168bを生成した要求プロセス170aのインスタンスは、引き続き存在し、廃止されるサブスクライバ168bの(複数の)識別子214、216を再利用することによって、または、イニシエータ210が要求プロセス170aのそのインスタンスに関してインスタンス化したという他のサブスクリプション212に基づいてサブスクライバ168を生成することによって、他の要求を処理し続ける。
【0041】
幾つかの構成において、ランタイムジェネレータ220は、固有のメッセージ識別子UMIを要求メッセージ164Rと関連付ける。例えば、ランタイムジェネレータ220は、(例えば、要求150から)要求メッセージ164Rを生成するときに、要求メッセージ164Rに含まれる固有のメッセージ識別子UMIも作成する。幾つかの例では、UMIを要求メッセージ164Rと関連付けることに加えて、ランタイムジェネレータ220も、応答メッセージ164rを受信するためにランタイムジェネレータ220が生成するサブスクライバ168にUMIを関連付けまたは追加する。サブスクライバ168bもUMIを含む場合、ランタイムジェネレータ220は、応答プロセス170bからの所望の応答(すなわち、応答メッセージ164r)が初期の要求150と関連付けられた基礎となるメッセージインフラストラクチャによって配信されるようにすることを保証する別の方法を有する。ある方法では、UMIを含めることはフェイルセーフとして機能する。つまり、サブスクライバ168bは、サブスクリプション識別子214またはフィルタ値216の一方または両方を使用して応答トピック166rにおけるあらゆるメッセージをフィルタリングするようにすでに構成される。この点において、サブスクライバ168bは、要求メッセージ164R内の要求プロセス170aの特定のインスタンスによって要求される特定のアクションに関連しない応答メッセージ164rを受信すべきではない。さらに、フェイルセーフとして、ランタイムジェネレータ220は、サブスクライバ168bで受信される応答メッセージ164rと関連付けられたUMIが要求メッセージ164Rにおける要求150に基づいて作成されるUMIであることを確認するためにUMIを含むように構成され得る。したがって、UMIを含めることにより、ランタイムジェネレータ220は、応答メッセージ164r(例えば、フィルタリング後の応答メッセージ164r)がUMIを含むことを確認するための確認応答メッセージを生成することができる。
【0042】
幾つかの実施形態において、要求プロセス170aはエッジサーバを指す。ここで、エッジサーバは、着信要求(例えば、要求150)の聴取に関与する。したがって、エッジサーバは、アクションコンテナの特定のインスタンスなど、応答プロセス170bにおける要求150に基づいて要求メッセージ164Rを発行する。このシナリオでは、要求プロセス170aおよび応答プロセス170bの両方が、リモートシステム130のステートレスかつシングルスレッドプロセスであり得る。これらのプロセス170は両方とも、各インスタンスが同時に動作できるように、複数のインスタンスとして複製されることによってスケーリングされ得る。このことは、第1の要求150によって要求プロセス170aの第1のインスタンスが応答プロセス170bの第3のインスタンスからのアクションを要求する一方、第2の要求150によって要求プロセス170aの第6のインスタンスが応答プロセス170bの第1のインスタンスからのアクションを要求することを意味する。
【0043】
図3は、イベントベースの分散型メッセージングシステムを実装する方法300の動作の構成例のフローチャートである。動作302および304は、応答プロセス170bからの応答164、164rに関する要求164、164Rを発行する要求プロセス170aを方法300がインスタンス化するときに行われる。動作302において、方法300は、応答プロセス170bから要求164、164Rに対する応答164、164rを受信する分散型メッセージングサービス160の応答トピック166、166rを識別する。応答プロセス170bは、応答トピック166、166rにおける発行者162として構成される。動作304において、方法300は、応答トピック166rに関して複数のサブスクリプション212、212a~nを生成し、各サブスクリプション212はサブスクリプション識別子214を含む。動作306~310は、要求プロセス170aにおけるランタイム中に行われる。動作306において、方法300は、応答プロセス170bによってサブスクライブされる要求トピック166、166Rに対して要求メッセージ164、164Rを発行する。要求メッセージ164、164Rは、固有のメッセージ識別子UMIを含む。動作308において、方法300は、複数のサブスクリプション212、212a~nから選択されたそれぞれのサブスクリプション212のそれぞれのサブスクリプション識別子214を使用してサブスクライバ168を生成する。サブスクライバ168は固有のメッセージ識別子UMIを含む。動作310において、方法300は、応答トピック166、166Rに対して発行される要求メッセージ164、164Rに応答して、応答プロセス170bからフィルタリングされた応答メッセージ164、164rをサブスクライバ168で受信する。ここで、フィルタリングされた応答メッセージ164、164rは、要求プロセス170aにおける複数のサブスクリプション212、212a~nと関連付けられた1つ以上のサブスクリプション識別子214に基づいてフィルタリングされる。
【0044】
図4は、本文書で説明されるシステムおよび方法を実施するために使用され得るコンピューティングデバイス400の一例の概略図である。コンピューティングデバイス400は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、および他の適切なコンピュータなど、様々な形式のデジタルコンピュータを表わすことを意図している。ここに示される構成要素、それらの接続と関係、およびそれらの機能は、例示のみを目的としており、本文書で説明および/または特許請求される発明の実施形態を限定することを意図するものではない。
【0045】
コンピューティングデバイス400は、プロセッサ410(例えば、データ処理ハードウェア)、メモリ420(例えば、メモリハードウェア)、記憶デバイス430、メモリ420および高速拡張ポート450に接続する高速インタフェース/コントローラ440、および低速バス470および記憶デバイス430に接続する低速インタフェース/コントローラ460を含む。構成要素410、420、430、440、450、および460のそれぞれは、様々なバスを使用して相互接続されており、一般的なマザーボード上にまたは必要に応じて他の態様で実装され得る。プロセッサ410は、高速インタフェース440に結合されるディスプレイ480などの外部入出力デバイス上のグラフィカルユーザインタフェース(GUI)用のグラフィック情報を表示するために、メモリ420または記憶デバイス430に記憶される命令を含む、コンピューティングデバイス400内で実行するための命令を処理することができる。他の実施形態において、複数のプロセッサおよび/または複数のバスが、複数のメモリならびにメモリのタイプとともに、必要に応じて使用され得る。また、複数のコンピューティングデバイス400が接続されてもよく、その場合、各デバイスは必要な動作の一部を提供する(例えば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステムとして)。
【0046】
メモリ420は、コンピューティングデバイス400内に情報を非一時的に記憶する。メモリ420は、コンピュータ可読媒体、(複数の)揮発性メモリユニット、または(複数の)不揮発性メモリユニットであってもよい。非一時的メモリ420は、コンピューティングデバイス400によって使用されるためのプログラム(例えば、一連の命令)またはデータ(例えば、プログラム状態情報)を一時的または永続的に記憶するために使用される物理デバイスであってもよい。不揮発性メモリの例としては、フラッシュメモリおよびリードオンリーメモリ(ROM)/プログラマブルリードオンリーメモリ(PROM)/消去可能なプログラマブルリードオンリーメモリ(EPROM)/電子的に消去可能なプログラマブルリードオンリーメモリ(EEPROM)(例えば、ブートプログラムなどのファームウェアに典型的に使用される)が挙げられるが、これらに限定されない。揮発性メモリの例としては、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、相変化メモリ(PCM)、およびディスクやテープが挙げられるが、これらに限定されない。
【0047】
記憶デバイス430は、コンピューティングデバイス400に大容量記憶をもたらすことができる。幾つかの実施形態において、記憶デバイス430はコンピュータ可読媒体である。様々な異なる実施形態において、記憶デバイス430は、フロッピー(登録商標)ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリまたは他の同様のソリッドステートメモリデバイス、あるいはストレージエリアネットワークまたはその他の構成のデバイスを含むデバイスのアレイであってもよい。さらなる実施形態において、コンピュータプログラムプロダクトは情報担体に具体的に組み込まれる。コンピュータプログラムプロダクトは、実行時に例えば上記で説明したような1つ以上の方法を実行する命令を含む。情報担体は、メモリ420、記憶デバイス430、またはプロセッサ410上のメモリなどのコンピュータ可読媒体または機械可読媒体である。
【0048】
高速コントローラ440は、コンピューティングデバイス400のための、帯域幅を大量に消費する動作を管理し、一方、低速コントローラ460は、帯域幅をあまり消費しない動作を管理する。そのような責務の割り当ては単なる例にすぎない。幾つかの実施形態において、高速コントローラ440は、メモリ420、ディスプレイ480(例えば、グラフィックプロセッサまたはアクセラレータを介して)、および様々な拡張カード(図示せず)を受け入れることができる高速拡張ポート450に結合される。幾つかの実施形態において、低速コントローラ460は、記憶デバイス430および低速拡張ポート490に結合される。様々な通信ポート(例えば、USB、Bluetooth(登録商標)、イーサネット(登録商標)、無線イーサネットなど)を含み得る低速拡張ポート490は、例えばネットワークアダプタを介して、キーボード、ポインティングデバイス、スキャナ、あるいはスイッチまたはルータなどのネットワーキングデバイスなどの1つ以上の入出力デバイスに結合され得る。
【0049】
コンピューティングデバイス400は、図示のように、いくつかの異なる形式で実施することができる。例えば、コンピューティングデバイスは、標準サーバ400aとして、またはそのようなサーバ400aのグループ内で複数回、ラップトップコンピュータ400bとして、またはラックサーバシステム400cの一部として実施され得る。
【0050】
本明細書に記載されるシステムおよび技術の様々な実施形態は、デジタル電子回路および/または光回路、集積回路、特別に設計されるASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはそれらの組み合わせにおいて実現することができる。これらの様々な実施形態は、記憶システム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスに対してデータおよび命令を送受信するように結合される専用目的または汎用目的であり得る少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステムで実行可能および/または解釈可能な1つ以上のコンピュータプログラムでの実施形態を含み得る。
【0051】
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、またはコードとしても知られている)は、プログラマブルプロセッサ用の機械命令を含み、高レベルの手続き型および/またはオブジェクト指向プログラミング言語、ならびに/あるいはアセンブリ/マシン言語で実施され得る。本明細書で使用される場合、「機械可読媒体」および「コンピュータ可読媒体」という用語は、機械命令を機械可読信号として受信する機械可読媒体を含めて、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される任意のコンピュータプログラムプロダクト、非一時的なコンピュータ可読媒体、装置および/またはデバイス(例えば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス(PLD))を指す。「機械可読信号」という用語は、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される任意の信号を指す。
【0052】
本明細書で説明するプロセスおよび論理フローは、入力データを操作して出力を生成することによって機能を果たす1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブルプロセッサによって行われ得る。プロセスおよび論理フローは、例えば、FPGA(フィールドプログラマブルゲートアレイ)やASIC(特定用途向け集積回路)などの特殊目的の論理回路によって実行することもできる。コンピュータプログラムの実行に適したプロセッサとしては、例として、汎用マイクロプロセッサと専用マイクロプロセッサの両方、および任意の種類のデジタルコンピュータの任意の1つ以上のプロセッサが挙げられる。一般に、プロセッサは、リードオンリーメモリ、ランダムアクセスメモリ、あるいはその両方から命令およびデータを受ける。コンピュータの必須要素は、命令を実行するプロセッサ、および命令とデータとを記憶する1つ以上のメモリデバイスである。一般に、コンピュータは、データを記憶するための1つ以上の大容量記憶デバイス、例えば、磁気、光磁気ディスク、または光ディスクをも含む、もしくはこれらからデータを受信する、またはそれらにデータを転送する、あるいはこれらの両方を行うように動作可能に結合される。しかしながら、コンピュータがそのようなデバイスを有する必要はない。コンピュータプログラム命令およびデータを記憶するのに適したコンピュータ可読媒体としては、一例として例えばEPROM、EEPROM、およびフラッシュメモリデバイスなどの半導体メモリデバイス、例えば内蔵ハードディスクやリムーバブルディスクなどの磁気ディスク、光磁気ディスク、CDROMおよびDVD-ROMディスクを含めて、あらゆる形態の不揮発性メモリ、媒体およびメモリデバイスが挙げられる。プロセッサおよびメモリは、特殊目的の論理回路によって補ったり、特殊目的の論理回路に組み込んだりすることができる。
【0053】
ユーザとの対話を提供するために、本開示の1つ以上の態様は、情報をユーザに表示するための表示デバイス、例えばCRT(陰極線管)、LCD(液晶ディスプレイ)モニタ、またはタッチスクリーン、および任意選択的に、ユーザがコンピュータに入力を行うことができるキーボードおよびポインティングデバイス、例えばマウスやトラックボール、を有するコンピュータ上で実施することができる。他の種類のデバイスを使用して、ユーザとの対話を提供することもでき、例えば、ユーザに提供されるフィードバックは、視覚的フィードバック、聴覚的フィードバック、触覚的フィードバックなど、任意の形式の感覚的フィードバックとすることができ、また、ユーザからの入力は、音響、音声、触覚入力を含むあらゆる形式で受け取ることができる。さらに、コンピュータは、ユーザが使用するデバイスとの間でドキュメントを送受信することにより、例えば、Webブラウザから受信した要求に応じてユーザのクライアントデバイス上のWebブラウザにWebページを送信することにより、ユーザと対話できる。
【0054】
いくつかの実施形態を説明してきた。それにも関わらず、本開示の思想および範囲から逸脱することなく、様々な修正を行うことができることが理解され得る。したがって、他の実施形態も特許請求の範囲内である。
【手続補正書】
【提出日】2024-01-09
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
データ処理ハードウェアによって実行されるときに前記データ処理ハードウェアに動作を実行させる、コンピュータが実行する方法であって、
応答プロセスからの応答のための要求を発行する要求プロセスをインスタンス化する際、
前記動作は、前記応答プロセスからの前記要求のための前記応答を受信する分散型メッセージングサービスの応答トピックを識別するステップを含み、前記応答プロセスは、前記応答トピックのための発行者として構成され、
前記応答トピックのための複数のサブスクリプションを生成するステップを含み、各サブスクリプションは、サブスクリプション識別子を含み、
前記要求プロセスのためのランタイム中に、
前記応答プロセスによってサブスクライブされた要求トピックに対して要求メッセージを発行するステップを含み、前記要求メッセージは、固有のメッセージ識別子含み、
前記複数のサブスクリプションから選択されたそれぞれのサブスクリプションのそれぞれのサブスクリプション識別子を使用してサブスクライバを生成するステップを含み、前記サブスクライバは、前記固有のメッセージ識別子を含み、
前記応答トピックに対して発行された前記要求メッセージに応答して、前記応答プロセスからフィルタリングされた応答メッセージを前記サブスクライバで受信するステップを含み、前記フィルタリングされた応答メッセージは、前記要求プロセスのための前記複数のサブスクリプションと関連付けられる1つ以上のサブスクリプション識別子に基づいてフィルタリングされる、
コンピュータが実行する方法。
【請求項2】
前記動作は、前記要求プロセスのためのランタイム中に、前記複数のサブスクリプションから前記それぞれのサブスクリプションをランダムに選択するステップをさらに含む、請求項1に記載の方法。
【請求項3】
前記動作は、
前記応答プロセスからの応答のための前記要求を発行する前記要求プロセスをインスタンス化するときに、前記応答トピックのための前記複数のサブスクリプションの各サブスクリプション識別子をハッシュマップに記憶するステップと、
前記要求プロセスのためのランタイム中に、前記応答トピックのための前記複数のサブスクリプションの各サブスクリプション識別子を記憶する前記ハッシュマップから前記それぞれのサブスクリプション識別子をランダムに選択するステップと、
をさらに含む、請求項1または請求項2に記載の方法。
【請求項4】
前記動作は、前記要求プロセスのためのランタイム中に、前記要求トピックのための前記要求メッセージを生成するステップをさらに含む、請求項1~請求項3のいずれかに記載の方法。
【請求項5】
前記動作は、
前記要求トピックの発行者による1つ以上のメッセージが前記固有のメッセージ識別子を含むかどうかを判断することによって、および
前記要求トピックの前記発行者による前記1つ以上のメッセージのそれぞれのメッセージが前記固有のメッセージ識別子を含まないときに、前記それぞれのメッセージが前記サブスクライバによって受信されないようにすることによって、
前記要求プロセスのためのランタイム中に、前記要求トピックの前記発行者によって前記1つ以上のメッセージをフィルタリングするステップをさらに含む、請求項1~請求項4のいずれかに記載の方法。
【請求項6】
前記要求トピックの前記発行者による前記1つ以上のメッセージは、前記フィルタリングされた応答メッセージを含み、
前記動作は、前記要求プロセスのためのランタイム中に、前記フィルタリングされた応答メッセージが前記固有のメッセージ識別子を含むときに、確認応答メッセージを生成するステップをさらに含む、
請求項5に記載の方法。
【請求項7】
前記要求プロセスは、コンピューティングタスクを実行するための最初の要求を受信することに応答してインスタンス化され、
前記要求プロセスのためのランタイム中の前記動作は、前記要求トピックに対して発行される前記要求メッセージに応答して前記応答プロセスから前記フィルタリングされた応答メッセージを受信する際に、前記コンピューティングタスクを実行するための前記最初の要求に対する最初の応答を生成するステップをさらに含む、
請求項1~請求項6のいずれかに記載の方法。
【請求項8】
前記サブスクリプション識別子は、前記要求プロセスの複数のインスタンスの中で固有のものである、請求項1~請求項7のいずれかに記載の方法。
【請求項9】
前記サブスクリプション識別子は固有のフィルタ値を含み、
前記フィルタリングされた応答メッセージは、前記サブスクライバを生成するために使用される前記それぞれのサブスクリプションの前記固有のフィルタ値に基づいてフィルタリングされる、
請求項1~請求項8のいずれかに記載の方法。
【請求項10】
前記分散型メッセージ
ングサービスのそれぞれのトピックの各それぞれのサブスクライバは、前記それぞれのトピックで通信される全てのメッセージを検索するマルチキャストサブスクリプションとして機能する、請求項1~請求項9のいずれかに記載の方法。
【請求項11】
データ処理ハードウェアと、
前記データ処理ハードウェアと通信するメモリハードウェアを備えるシステムであって、
前記メモリハードウェアは、前記データ処理ハードウェアで実行されるときに前記データ処理ハードウェアに動作を実行させる命令を記憶し、
応答プロセスからの応答のための要求を発行する要求プロセスをインスタンス化する際、
前記動作は、前記応答プロセスからの前記要求のための前記応答を受信する分散型メッセージングサービスの応答トピックを識別するステップを含み、前記応答プロセスは、前記応答トピックのための発行者として構成され、
前記応答トピックのための複数のサブスクリプションを生成するステップを含み、各サブスクリプションは、サブスクリプション識別子を含み、
前記要求プロセスのためのランタイム中に、
前記応答プロセスによってサブスクライブされた要求トピックに対して要求メッセージを発行するステップを含み、前記要求メッセージは、固有のメッセージ識別子を含み、
前記複数のサブスクリプションから選択されたそれぞれのサブスクリプションのそれぞれのサブスクリプション識別子を使用してサブスクライバを生成するステップを含み、前記サブスクライバは、前記固有のメッセージ識別子を含み、
前記応答トピックに対して発行された前記要求メッセージに応答して、前記応答プロセスからフィルタリングされた応答メッセージを前記サブスクライバで受信するステップを含み、前記フィルタリングされた応答メッセージは、前記要求プロセスのための前記複数のサブスクリプションと関連付けられる1つ以上のサブスクリプション識別子に基づいてフィルタリングされる、
システム。
【請求項12】
前記動作は、前記要求プロセスのためのランタイム中に、前記複数のサブスクリプションから前記それぞれのサブスクリプションをランダムに選択するステップをさらに含む、請求項11に記載のシステム。
【請求項13】
前記動作は、
前記応答プロセスからの前記応答のための前記要求を発行する前記要求プロセスをインスタンス化するときに、前記応答トピックのための前記複数のサブスクリプションの各サブスクリプション識別子をハッシュマップに記憶するステップと、
前記要求プロセスのためのランタイム中に、前記応答トピックのための前記複数のサブスクリプションの各サブスクリプション識別子を記憶する前記ハッシュマップから前記それぞれのサブスクリプション識別子をランダムに選択するステップと、
をさらに含む、請求項11または請求項12に記載のシステム。
【請求項14】
前記動作は、前記要求プロセスのためのランタイム中に、前記要求トピックのための前記要求メッセージを生成するステップをさらに含む、請求項11~請求項13のいずれかに記載のシステム。
【請求項15】
前記動作は、
前記要求トピックの発行者による1つ以上のメッセージが前記固有のメッセージ識別子を含むかどうかを判断することによって、および
前記要求トピックの前記発行者による前記1つ以上のメッセージのそれぞれのメッセージが前記固有のメッセージ識別子を含まないときに、前記それぞれのメッセージが前記サブスクライバによって受信されないようにすることによって、
前記要求プロセスのためのランタイム中に、前記要求トピックの前記発行者によって前記1つ以上のメッセージをフィルタリングするステップをさらに含む、請求項11~請求項14のいずれかに記載のシステム。
【請求項16】
前記要求トピックの前記発行者による前記1つ以上のメッセージは、前記フィルタリングされる応答メッセージを含み、
前記動作は、前記要求プロセスのためのランタイム中に、前記フィルタリングされる応答メッセージが前記固有のメッセージ識別子を含むときに、確認応答メッセージを生成するステップをさらに含む、
請求項15に記載のシステム。
【請求項17】
前記要求プロセスは、コンピューティングタスクを実行するための最初の要求を受信することに応答してインスタンス化され、
前記要求プロセスのためのランタイム中の前記動作は、前記要求トピックに対して発行された前記要求メッセージに応答して前記応答プロセスから前記フィルタリングされた応答メッセージを受信する際に、前記コンピューティングタスクを実行するための前記最初の要求に対する最初の応答を生成するステップをさらに含む、
請求項11~請求項16のいずれかに記載のシステム。
【請求項18】
前記サブスクリプション識別子は、前記要求プロセスの複数のインスタンスの中で固有のものである、請求項11~請求項17のいずれかに記載のシステム。
【請求項19】
前記サブスクリプション識別子は固有のフィルタ値を含み、
前記フィルタリングされた応答メッセージは、前記サブスクライバを生成するために使用される前記それぞれのサブスクリプションの前記固有のフィルタ値に基づいてフィルタリングされる、
請求項11~請求項18のいずれかに記載のシステム。
【請求項20】
前記分散型メッセージ
ングサービスのそれぞれのトピックの各それぞれのサブスクライバは、前記それぞれのトピックで通信される全てのメッセージを検索するマルチキャストサブスクリプションとして機能する、請求項11~請求項19のいずれかに記載のシステム。
【請求項21】
請求項1~請求項10のいずれかに記載の方法をデータ処理ハードウェアに実行させる、プログラム。
【国際調査報告】