IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ツイッター インコーポレイテッドの特許一覧

特開2022-159310リアルタイムメッセージ配信用メッセージングプラットフォーム
<>
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図1
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図2
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図3
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図4
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図5
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図6
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図7
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図8
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図9
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図10A
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図10B
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図11
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図12
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図13
  • 特開-リアルタイムメッセージ配信用メッセージングプラットフォーム 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022159310
(43)【公開日】2022-10-17
(54)【発明の名称】リアルタイムメッセージ配信用メッセージングプラットフォーム
(51)【国際特許分類】
   H04L 51/21 20220101AFI20221006BHJP
   H04L 51/04 20220101ALI20221006BHJP
【FI】
H04L51/21
H04L51/04
【審査請求】有
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022115637
(22)【出願日】2022-07-20
(62)【分割の表示】P 2022507357の分割
【原出願日】2020-07-28
(31)【優先権主張番号】62/883,633
(32)【優先日】2019-08-06
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/668,811
(32)【優先日】2019-10-30
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/669,044
(32)【優先日】2019-10-30
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】515202036
【氏名又は名称】ツイッター インコーポレイテッド
【氏名又は名称原語表記】Twitter, Inc.
【住所又は居所原語表記】1355 Market Street, Suite 900, San Francisco CA 94103 U.S.A.
(74)【代理人】
【識別番号】100116322
【弁理士】
【氏名又は名称】桑垣 衛
(72)【発明者】
【氏名】レンジット、リシ
(72)【発明者】
【氏名】アンゲル、ミレラ
(72)【発明者】
【氏名】グーディア、ケビン
(72)【発明者】
【氏名】レオンチェフ、ジョージ
(72)【発明者】
【氏名】オ クルアリーシュ、ダヒ
(72)【発明者】
【氏名】アシュワース、トム
(72)【発明者】
【氏名】プラント、ソル
(72)【発明者】
【氏名】サビデス、アンドレス
(72)【発明者】
【氏名】マーティ、ギヨーム
(72)【発明者】
【氏名】カウリング、ラルフ
(72)【発明者】
【氏名】アンドレス ガルシア クレスポ、レオナルド
(57)【要約】
【課題】本開示は、メッセージングプラットフォームで交換される大きなストリームからコンテンツをマッチするクエリサブスクリプションに従ってリアルタイムメッセージをクライアントアプリケーションに時間経過に従ってストリーミングすることに関して、メッセージ配信の速度を向上させ、アクティブなクエリサブスクリプションの数の変動を処理するべくコンピュータリソースの管理を効果的に制御する。
【解決手段】クエリサブスクリプションを開始したユーザの観点からリアルタイムでそれらのメッセージを配信しながら、作成者(著者)の観点から生成されたメッセージに対してクエリサブスクリプションをマッチングするセキュリティを向上させる。
【選択図】図1
【特許請求の範囲】
【請求項1】
リアルタイムメッセージを配信するためのメッセージングプラットフォームにおいてクエリサブスクリプションを処理するためのシステムであって、前記システムは、
サーバコンピュータによって実行可能である前記メッセージングプラットフォーム上で交換されるメッセージのストリームを備えているキューであって、前記メッセージングプラットフォームはコンピューティング装置によって実行可能であるクライアントアプリケーションのユーザインタフェースにメッセージをストリームするように構成されている、前記キューと、
複数のイベントプロデューサと、
クエリサブスクリプションを受け取るとともに、前記クエリサブスクリプションを前記複数のイベントプロデューサのうちの1つまたは複数に割り当てるように構成されたイベントプロデューサマネージャであって、各イベントプロデューサは、前記クエリサブスクリプションを満たすメッセージの前記ストリームからのメッセージに応答して応答イベントを生成するように構成されている、前記イベントプロデューサマネージャと、および
前記複数のイベントプロデューサから前記応答イベントを受け取るとともに、前記クライアントアプリケーションに配信されるように前記応答イベントを応答イベントバス上に発行するように構成されたコレクタサービスと、
を備えている、システム。
【請求項2】
前記コレクタサービスは前記複数のイベントプロデューサからステータス応答を受け取るとともに前記ステータス応答をメモリキャッシュに格納するように構成されており、前記コレクタサービスは前記メモリキャッシュ内の前記ステータス応答を照会することで前記クエリサブスクリプションの健全性ステータスを定期的に判定するように構成されており、
前記健全性ステータスが修復可能であると判定されることに応答して、前記コレクタサービスは、前記メモリキャッシュからサブスクリプションクエリに関連するサブスクリプションデータを取得するとともに、前記クエリサブスクリプションを再開するべく前記サブスクリプションデータを1つまたは複数のイベントプロデューサに提供するように構成されている、
請求項1に記載のシステム。
【請求項3】
前記イベントプロデューサマネージャは、スリフトコールを介して前記クエリサブスクリプションを受け取るように構成されたアプリケーションプログラミングインタフェース(API)を備えており、
前記アプリケーションプログラミングインタフェースは、前記クエリサブスクリプションに関連付けられたユーザ識別子に基づき、前記クエリサブスクリプションを1つまたは複数の前記イベントプロデューサに割り当てるように構成されている、
請求項1~2のいずれか一項に記載のシステム。
【請求項4】
前記イベントプロデューサマネージャは、前記複数のイベントプロデューサにおいて処理されるクエリサブスクリプションの数およびメッセージストリームのサイズを監視するとともに、前記クエリサブスクリプションの数および前記メッセージストリームのサイズに基づき前記複数のイベントプロデューサの数を調節するように構成されている、
請求項1~3のいずれか一項に記載のシステム。
【請求項5】
前記複数のイベントプロデューサはイベントプロデューサグループにアレンジされており、
前記イベントプロデューサマネージャは、個々のクエリサブスクリプションを第1イベントプロデューサグループおよび第2イベントプロデューサグループに割り当てるように構成されている、
請求項1~4のいずれか一項に記載のシステム。
【請求項6】
新しい応答イベントの受け取りに応答して、前記コレクタサービスはメモリキャッシュに照会することで、前記クエリサブスクリプションに対する前記応答イベントがストリーミングレート閾値を超えたか否かを判定するように構成されており、
前記コレクタサービスは、前記ストリーミングレート閾値を超えたことに応答して、前記新しい応答イベントを破棄するように構成されている、
請求項1~5のいずれか一項に記載のシステム。
【請求項7】
新しい応答イベントの受け取りに応答して、前記コレクタサービスは、前記新しい応答イベントのメッセージ識別子がメモリキャッシュに格納されているか否かを判定するように構成されており、
前記コレクタサービスは、前記メッセージ識別子が前記メモリキャッシュに格納されていないことに応答して、前記新しい応答イベントを応答イベントバスに発行するとともに、前記新しい応答イベントを前記メモリキャッシュに格納するように構成されており、
前記コレクタサービスは、前記メッセージ識別子が前記メモリキャッシュに格納されていることに応答して、前記新しい応答イベントを破棄するように構成されている、
請求項1~6のいずれか一項に記載のシステム。
【請求項8】
前記システムはさらに、
前記クライアントアプリケーションからネットワークを介して受け取られたクエリサブスクリプション要求の受け取りに応答して、前記クエリサブスクリプションを前記イベントプロデューサマネージャに送信するように構成されたサブスクリプション実行器と、および
前記応答イベントによって識別されるメッセージが、配信チャンネルを介して、前記クエリサブスクリプションがアクティブである期間中に前記クライアントアプリケーションにストリーミングされるように、前記クライアントアプリケーションから前記ネットワークを介して受け取られたサブスクライブ要求の受け取りに応答して、トランスポートエンジンと前記クライアントアプリケーションとの間に配信チャンネルを作成するように構成されている前記トランスポートエンジンと、
を備えている、請求項1~7のいずれか一項に記載のシステム。
【請求項9】
前記サブスクリプション実行器は前記応答イベントバスにサブスクライブしており、
前記サブスクリプション実行器は、前記応答イベントが前記応答イベントバス上で発行されることに応答して、前記応答イベントによって識別されるメッセージの作成者が、前記クエリサブスクリプションのユーザ識別子に関連付けられたユーザを制限しているか否かを判定するように構成されており、
前記サブスクリプション実行器は、前記ユーザが前記作成者によって制限されていると判定されることに応答して、前記応答イベントによって識別される前記メッセージを破棄するように構成されている、
請求項8に記載のシステム。
【請求項10】
少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに動作を実行させるように構成された実行可能命令を格納する非一時的なコンピュータ可読媒体であって、前記動作は、
イベントプロデューサマネージャによって、サーバコンピュータによって実行可能であるメッセージングプラットフォーム上で交換されるメッセージのストリームを備えているキュー内のコンテンツにマッチするクエリサブスクリプションを受け取る工程であって、前記メッセージングプラットフォームは、コンピューティング装置によって実行可能であるクライアントアプリケーションのユーザインタフェースにメッセージを配信するように構成されている、前記クエリサブスクリプションを受け取る工程と、
前記イベントプロデューサマネージャによって、前記クエリサブスクリプションを複数のイベントプロデューサのうちの1つまたは複数に割り当てる工程と、
個々のイベントプロデューサによって、前記クエリサブスクリプションのクエリ用語を備えているメッセージの前記ストリームからのメッセージに応答して応答イベントを生成する工程と、
コレクタサービスによって、複数の前記イベントプロデューサから前記応答イベントを受け取る工程と、
前記コレクタサービスによって、前記応答イベントをメモリキャッシュに格納する工程と、
前記コレクタサービスによって、前記クライアントアプリケーションに配信されるように前記応答イベントを応答イベントバスに発行する工程と、
を備えている、非一時的なコンピュータ可読媒体。
【請求項11】
前記動作はさらに、
前記コレクタサービスによって、前記イベントプロデューサからステータス応答を受け取るとともに、前記メモリキャッシュに前記ステータス応答を格納する工程と、
前記コレクタサービスによって、前記メモリキャッシュ内の前記ステータス応答を照会することで、前記クエリサブスクリプションの健全性ステータスを定期的に判定する工程と、
前記健全性ステータスが修復可能であると判定されることに応答して、
サブスクリプションクエリに関連するサブスクリプションデータを、前記メモリキャッシュから取得する工程と、および
前記クエリサブスクリプションを再開させるべく、前記サブスクリプションデータを1つまたは複数のイベントプロデューサに提供する工程と、
を備えている、請求項10に記載の非一時的なコンピュータ可読媒体。
【請求項12】
前記複数のイベントプロデューサはイベントプロデューサグループにアレンジされており、
前記クエリサブスクリプションは、前記クエリサブスクリプションに関連付けられたユーザ識別子を用いたモジュロ操作の実行に基づき、前記イベントプロデューサグループに割り当てられる、
請求項10~11のいずれか一項に記載の非一時的なコンピュータ可読媒体。
【請求項13】
前記動作はさらに
前記コレクタサービスによって、期間内の前記応答イベントの数がストリーミングレート閾値を超えたか否かを判定する工程と、および
前記ストリーミングレート閾値を超えたことに応答して、前記コレクタサービスによって、1つまたは複数の前記応答イベントを破棄する工程と、
を備えている、請求項10~12のいずれか1項に記載の非一時的なコンピュータ可読媒体。
【請求項14】
前記動作はさらに、
前記コレクタサービスによって、前記応答イベントによって識別されるメッセージが既に応答イベントバスに発行されているか否かを判定する工程と、および
前記メッセージが前記応答イベントバスに既に発行されていると判定されたことに応答して、前記応答イベントを破棄する工程と、
を備えている、請求項10~13のいずれか一項に記載の非一時的なコンピュータ可読媒体。
【請求項15】
前記動作はさらに、
前記クライアントアプリケーションからネットワークを介して受け取られたクエリサブスクリプション要求の受け取りに応答して、サブスクリプション実行器によって、前記クエリサブスクリプションを前記イベントプロデューサマネージャに送信する工程と、
前記クライアントアプリケーションから前記ネットワークを介して受け取られたサブスクライブ要求の受け取りに応答して、トランスポートエンジンによって、前記トランスポートエンジンと前記クライアントアプリケーションとの間に配信チャンネルを作成する工程と、
前記サブスクリプション実行器によって、前記応答イベントからのメッセージ識別子と、前記クエリサブスクリプションに関連付けられたユーザ識別子とに基づき、メッセージを生成する工程と、および
前記トランスポートエンジンによって、前記クエリサブスクリプションがアクティブである期間中に、前記配信チャンネルを介して前記クライアントアプリケーションに前記メッセージをストリーミングする工程と、
を備えている、請求項10~14のいずれか1項に記載の非一時的なコンピュータ可読媒体。
【請求項16】
メッセージングプラットフォームにおけるクエリサブスクリプションを処理する方法であって、前記方法は、
イベントプロデューサマネージャによって、サーバコンピュータによって実行可能である前記メッセージングプラットフォーム上で交換されるメッセージのストリームを備えているキュー内のコンテンツにマッチするクエリサブスクリプションを受け取る工程と、
前記イベントプロデューサマネージャによって、複数のイベントプロデューサグループのうちの1つのイベントプロデューサグループに前記クエリサブスクリプションを割り当てる工程であって、各イベントプロデューサグループは複数のイベントプロデューサを備えており、各イベントプロデューサグループはメッセージの前記ストリームの別々の部分を受け取るように構成されている、前記クエリサブスクリプションを割り当てる工程と、
個々のイベントプロデューサによって、前記クエリサブスクリプションのクエリ用語を備えているメッセージの前記ストリームのそれぞれの部分からのメッセージに応答して、応答イベントを生成する工程と、
コレクタサービスによって、前記応答イベントを応答イベントバスに発行する工程と、を備えている、方法。
【請求項17】
前記方法はさらに、
前記コレクタサービスによって、イベントプロデューサからステータス応答を受け取るとともに、前記ステータス応答をメモリキャッシュに格納する工程と、
前記コレクタサービスによって、前記メモリキャッシュ内の前記ステータス応答を照会することで、前記クエリサブスクリプションの健全性ステータスを定期的に判定する工程と、
前記健全性ステータスが修復可能であると判定されたことに応答して、
サブスクリプションクエリに関連するサブスクリプションデータを、前記メモリキャッシュから取得する工程と、および
前記クエリサブスクリプションを再開させるべく、前記サブスクリプションデータを1つまたは複数のイベントプロデューサに提供する工程と、
を備えている、請求項16に記載の方法。
【請求項18】
前記クエリサブスクリプションは、一次イベントプロデューサグループおよび二次イベントプロデューサグループに割り当てられる、
請求項16~17のいずれか一項に記載の方法。
【請求項19】
前記方法はさらに、
前記コレクタサービスによって、期間内の前記応答イベントの数が、前記発行する工程の前にストリーミングレート閾値を超えたか否かを判定する工程と、
前記コレクタサービスによって、前記ストリーミングレート閾値を超えたことに応答して、前記応答イベントを破棄する工程と、
を備えている、請求項16~18のいずれか一項に記載の方法。
【請求項20】
前記方法はさらに、
前記コレクタサービスによって、前記応答イベントによって識別されるメッセージが、前記発行する工程の前に前記応答イベントバスに既に発行されているか否かを判定する工程と、および
前記メッセージが前記応答イベントバスに既に発行されていると判定されたことに応答して、前記コレクタサービスによって、前記応答イベントを破棄する工程と、
を備えている、請求項16~19のいずれか一項に記載の方法。
【請求項21】
メッセージングプラットフォームからリアルタイムメッセージをストリーミングするためのクエリサブスクリプションを処理する方法であって、前記方法は、
クライアントアプリケーションによって、ネットワークを介して、前記メッセージングプラットフォームのサブスクリプション実行器にクエリサブスクリプション要求を送信する工程であって、前記クエリサブスクリプション要求は、前記サブスクリプション実行器に、前記メッセージングプラットフォーム上で交換されるメッセージのキュー上で実行されるべきクエリサブスクリプションを生成させるように構成されている、前記サブスクリプション実行器に前記クエリサブスクリプション要求を送信する工程と、
前記クライアントアプリケーションによって、前記ネットワークを介して、サブスクライブ要求を前記メッセージングプラットフォームのトランスポートエンジンに送信する工程であって、前記サブスクライブ要求は、前記トランスポートエンジンに、前記トランスポートエンジンと前記クライアントアプリケーションとの間に配信チャンネルを作成させるように構成されている、前記サブスクライブ要求を前記トランスポートエンジンに送信する工程と、
前記クエリサブスクリプションがアクティブである間に前記クライアントアプリケーションのユーザインタフェース上にメッセージがストリーミングされるように、前記クライアントアプリケーションによって、前記配信チャンネルを介して、前記クエリサブスクリプションの基準を満たすメッセージのストリームを受け取る工程と、
前記クライアントアプリケーションによって、前記ネットワークを介して、サブスクライブ更新要求を前記トランスポートエンジンに定期的に送信する工程であって、前記サブスクライブ更新要求は、前記トランスポートエンジンに前記配信チャンネルを更新させるとともに、前記サブスクリプション実行器に前記クエリサブスクリプションを更新させるように構成されている、前記サブスクライブ更新要求を前記トランスポートエンジンに定期的に送信する工程と、
を備えている、方法。
【請求項22】
前記クエリサブスクリプション要求は、クエリ用語とユーザ識別子とを備えている、
請求項21記載の方法。
【請求項23】
前記クエリサブスクリプション要求は、前記クエリサブスクリプションがアクティブである期間を定義する有効期限を備えている、
請求項21~22のいずれか一項に記載の方法。
【請求項24】
前記サブスクライブ要求はトランスポートトピックを備えており、
前記トランスポートトピックは、前記クエリサブスクリプションに関連付けられた1つまたは複数のクエリ用語に対応する、
請求項21~23のいずれか一項に記載の方法。
【請求項25】
前記方法はさらに、
前記クライアントアプリケーションによって、前記ネットワークを介して、前記サブスクリプション実行器からサブスクリプションステータス応答を受け取る工程であって、前記サブスクリプションステータス応答はトランスポートトピックとサブスクリプション識別子とを備えている、前記サブスクリプションステータス応答を受け取る工程と、および
前記クライアントアプリケーションによって、前記トランスポートトピックと前記サブスクリプション識別子とを備えるように前記サブスクライブ要求を生成する工程と、
を備えている、請求項21~24のいずれか1項に記載の方法。
【請求項26】
前記クエリサブスクリプション要求および前記サブスクライブ要求は、互いに実質的に並行して送信される、
請求項21~25のいずれか一項に記載の方法。
【請求項27】
前記方法はさらに、前記クライアントアプリケーションによって、前記トランスポートエンジンからチャンネル識別子を受け取る工程を備えており、
前記チャンネル識別子は前記配信チャンネルを識別する、
請求項21~26のいずれか一項に記載の方法。
【請求項28】
メッセージの前記ストリームは、前記メッセージが経時的にタイムライン上に自動的にストリーミングされるように、前記クライアントアプリケーションの前記タイムライン上にレンダリングされる、
請求項21~27のいずれか1項に記載の方法。
【請求項29】
前記タイムラインは、前記クライアントアプリケーションの前記ユーザインタフェース上の検索列であり、
前記方法はさらに、前記クライアントアプリケーションによって、前記検索列の作成に応答して前記クエリサブスクリプション要求を生成する工程を備えている、
請求項28に記載の方法。
【請求項30】
前記タイムラインは、前記メッセージがユーザのホームタイムラインに自動的にストリーミングされるように、前記クライアントアプリケーションの前記ユーザの前記ホームタイムラインである、
請求項28に記載の方法。
【請求項31】
メッセージの前記ストリームは、前記メッセージングプラットフォーム上の会話に関連する会話グラフ内のメッセージを備えている、
請求項21~30のいずれか一項に記載の方法。
【請求項32】
少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに動作を実行させるように構成された実行可能命令を格納する非一時的なコンピュータ可読媒体であって、前記動作は、
コンピューティング装置によって実行可能であるクライアントアプリケーションによって、ネットワークを介して、サーバコンピュータによって実行可能であるメッセージングプラットフォームのサブスクリプション実行器にクエリサブスクリプション要求を送信する工程であって、前記クエリサブスクリプション要求は、前記サブスクリプション実行器に、前記メッセージングプラットフォーム上で交換されるメッセージのキュー上で実行されるべきクエリサブスクリプションを生成させるように構成されている、前記サブスクリプション実行器にクエリサブスクリプション要求を送信する工程と、
前記クライアントアプリケーションによって、前記ネットワークを介して、前記サブスクリプション実行器からステータスメッセージ応答を受け取る工程であって、前記ステータスメッセージ応答はトランスポートトピックを備えている、前記サブスクリプション実行器から前記ステータスメッセージ応答を受け取る工程と、
前記クライアントアプリケーションによって、前記ネットワークを介してサブスクライブ要求を前記メッセージングプラットフォームのトランスポートエンジンに送信する工程であって、前記サブスクライブ要求はトランスポートトピックを備えており、前記サブスクライブ要求は前記トランスポートエンジンに前記トランスポートエンジンと前記クライアントアプリケーションとの間に配信チャンネルを作成させるように構成されており、前記配信チャンネルは前記トランスポートトピックに割り当てられている、前記サブスクライブ要求を前記トランスポートエンジンに送信する工程と、
前記クエリサブスクリプションがアクティブである間、メッセージがストリーミングレート閾値以下のストリーミングレートで前記クライアントアプリケーションのユーザインタフェース上にストリーミングされるように、前記クライアントアプリケーションによって、前記クエリサブスクリプションの基準を満たすメッセージのストリームを前記配信チャンネルを介して受け取る工程と、および
前記クライアントアプリケーションによって、前記ネットワークを介して、前記トランスポートエンジンにサブスクライブ更新要求を定期的に送信する工程であって、前記サブスクライブ更新要求は、前記トランスポートエンジンに前記配信チャンネルを更新させるとともに、前記サブスクリプション実行器に前記クエリサブスクリプションを更新させるように構成されている、前記トランスポートエンジンにサブスクライブ更新要求を定期的に送信する工程と、
を備えている、非一時的なコンピュータ可読媒体。
【請求項33】
前記クエリサブスクリプション要求は、クエリ用語と、ユーザ識別子と、および前記クエリサブスクリプションがアクティブである期間を定義する有効期限とを備えている、
請求項32に記載の非一時的なコンピュータ可読媒体。
【請求項34】
前記クエリサブスクリプション要求は、GraphQLサブスクリプションクエリである、
請求項32~33のいずれか一項に記載の非一時的なコンピュータ可読媒体。
【請求項35】
前記動作はさらに、
前記クライアントアプリケーションによって、前記ネットワークを介して、前記配信チャンネルを介して、前記トランスポートエンジンからステータスメッセージを受け取る工程と、
前記クライアントアプリケーションによって、前記ステータスメッセージに基づき、前記クエリサブスクリプション要求と前記サブスクライブ要求とを再送信する工程と、
を備えている、請求項32~34のいずれか一項に記載の非一時的なコンピュータ可読媒体。
【請求項36】
メッセージングプラットフォームからリアルタイムメッセージをストリーミングするためのクエリサブスクリプションを処理するためのシステムであって、前記システムは、
サーバコンピュータによって実行可能であるメッセージングプラットフォームであって、前記メッセージングプラットフォームは前記メッセージングプラットフォーム上で交換されるメッセージのキューを生成するように構成されている、前記メッセージングプラットフォームと、
コンピューティング装置によって実行可能であるクライアントアプリケーションであって、前記クライアントアプリケーションは、前記クライアントアプリケーションのユーザインタフェース上にソーシャルコンテンツのタイムラインをレンダリングするように構成されている、前記クライアントアプリケーションと、を備えており、
前記クライアントアプリケーションは、
クエリサブスクリプション要求を、ネットワークを介して、前記メッセージングプラットフォームのサブスクリプション実行器に送信する工程であって、前記クエリサブスクリプション要求は、メッセージの前記キュー上で実行されるべきクエリサブスクリプションを前記サブスクリプション実行器に生成させるように構成されている、前記クエリサブスクリプション要求を前記サブスクリプション実行器に送信する工程と、
サブスクライブ要求を、前記ネットワークを介して、前記メッセージングプラットフォームのトランスポートエンジンに送信する工程であって、前記サブスクライブ要求は前記トランスポートエンジンに、前記トランスポートエンジンと前記クライアントアプリケーションとの間に配信チャンネルを作成させるように構成されている、前記サブスクライブ要求を前記トランスポートエンジンに送信する工程と、
前記クエリサブスクリプションがアクティブである間、前記メッセージがストリーミングレート閾値以下のストリーミングレートで前記クライアントアプリケーションのユーザインタフェース上にストリーミングされるように、前記クエリサブスクリプションの基準を満たすメッセージのストリームを前記配信チャンネルを介して受け取る工程と、
サブスクライブ更新要求を、前記ネットワークを介して、前記トランスポートエンジンに定期的に送信する工程であって、前記サブスクライブ更新要求は、前記トランスポートエンジンに前記配信チャンネルを更新させるとともに、前記サブスクリプション実行器に前記クエリサブスクリプションを更新させるように構成されている、前記サブスクライブ更新要求を前記トランスポートエンジンに定期的に送信する工程と、
を実行するように構成されている、システム。
【請求項37】
前記クエリサブスクリプション要求は、クエリ用語とユーザ識別子とを備えているGraphQLサブスクリプションクエリである、
請求項36に記載のシステム。
【請求項38】
前記サブスクライブ要求はトランスポートトピックを備えており、
前記トランスポートトピックはクエリ用語に対応しており、
前記トランスポートトピックは前記トランスポートエンジンとの互換性のあるフォーマットを有する、
請求項36~37のいずれか一項に記載のシステム。
【請求項39】
前記クエリサブスクリプション要求と前記サブスクライブ要求とは、互いに実質的に並行して送信される、
請求項36~38のいずれか1項に記載のシステム。
【請求項40】
前記クライアントアプリケーションは、前記クエリサブスクリプションがアクティブである間、前記タイムライン上のメッセージの前記ストリームを自動的にレンダリングするように構成されている、
請求項36~39のいずれか1項に記載のシステム。
【請求項41】
メッセージの前記ストリームは会話に関連するメッセージを備えており、
前記クライアントアプリケーションは、前記メッセージが前記メッセージングプラットフォームによって生成および共有されるときに前記会話に関連する前記メッセージを前記ユーザインタフェース上にプッシュするように構成されている、
請求項36~40のいずれか1項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、リアルタイムメッセージ配信用メッセージングプラットフォームに関する。
【背景技術】
【0002】
ソーシャルメディアメッセージングプラットフォームは、そのユーザ同士間で数百万から数億のソーシャルメディアメッセージの交換を促進することができる。プラットフォーム上で交換されるメッセージは、しばしば、プラットフォームのユーザに、最新のアップデートまたは現在のイベントに関する報告を提供することができる。いくつかの例では、ユーザは、プラットフォーム上で検索を送信するとともに、ユーザが1つまたは複数のキーワードにマッチング(一致)するメッセージを経時的に見ることができるように、結果のストリームを受け取ることができる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2011/258268号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、一定期間にわたる非常に大きなメッセージストリームのメッセージをマッチングさせながら、それらのメッセージをユーザにリアルタイムでレンダリングすることは、処理速度、コンピュータリソースの割り当て、およびセキュリティ問題などの複雑かつ技術的な課題を伴う。
【課題を解決するための手段】
【0005】
本開示は、メッセージ配信(delivery)の速度を高めるとともに、アクティブなクエリサブスクリプションの数の変動を処理するべくコンピュータリソースの管理を効果的に制御することに関連する。および/または本開示は、クエリサブスクリプションを開始したユーザの観点からリアルタイムでそれらのメッセージを配信しながら、作成者(auther。著者)の観点から生成されたメッセージに対してクエリサブスクリプションをマッチングするセキュリティを向上する方法で、メッセージングプラットフォーム上で交換される大きなストリームからのコンテンツにマッチするクエリサブスクリプションに従ってクライアントアプリケーションに対してリアルタイムメッセージを経時的にストリーミングすることに関連する。
【0006】
クライアントアプリケーションがアクティブクエリに関連するメッセージのストリームを受け取り始めるアクティブクエリを確立するべく、クライアントアプリケーションは、ネットワークを介して、クエリサブスクリプション要求(たとえば、GraphQLサブスクリプションクエリ)を生成してメッセージングプラットフォームのサブスクリプション実行器(たとえば、GraphQLエンジン)に送り、サブスクリプション実行器(executor)が、クエリスプションを生成してそのクエリスプションをメッセージングプラットフォームのイベントプロデューサシステムに提供できるようにしうる。また、クライアントアプリケーションは、クライアントアプリケーションとトランスポートエンジンとの間に配信チャンネルを作成するべく、サブスクライブ要求を生成するとともに、トランスポートエンジンに送信してもよい。イベントプロデューサシステムによってマッチングされたメッセージは、配信チャンネルを介して、クライアントアプリケーションにストリーミングされてもよい。この方法では、クエリのサブスクリプションの管理は、2つの別々のモジュール、例えば、サブスクリプション実行器、トランスポートエンジンを使用することで、メッセージの配信から分離されており、クエリの作成からマッチング、そしてクライアントへのリアルタイムメッセージのレンダリングまでの配信速度を増加させることができる。また、いくつかの例では、2つのサブスクリプションが生成されるので(例えば、サブスクリプション実行器で1つ、トランスポートエンジンで1つ)、これは、クライアントアプリケーションがサブスクリプション実行器とトランスポートモジュールとの両方で更新しなければならないことを示唆するかもしれない。しかしながら、本開示で後述するように、クライアントアプリケーションは、トランスポートエンジンで更新してもよく、メッセージングプラットフォームの構造は、クエリサブスクリプションをトランスポートエンジンおよびサブスクリプション実行器で更新させ、それによって、クエリサブスクリプションを維持するべくクライアントアプリケーションとメッセージングプラットフォームとの間で伝送される通信の量を減少させる可能性がある。さらに、メッセージングプラットフォームは、大きなメッセージストリーム(例えば、毎秒50kメッセージを超える)に対して数千のクライアントアプリケーションからのクエリサブスクリプションを実行するとともに、毎秒数万メッセージをクライアントアプリケーションに配信することが可能であってよい。
【0007】
ユーザは、ユーザインタフェースをリフレッシュすることまたはユーザインタフェース上で新しいメッセージを表示する別の要求を提出(送信)することを要求されない場合があり、むしろメッセージは、他のユーザがクエリサブスクリプションにマッチするメッセージをメッセージングプラットフォームに投稿することに応答してユーザのユーザインタフェースにプッシュされる。例えば、ユーザは、「犬」(dog)などの検索語(検索ターム)を入力してアクティブクエリを生成しつつ、その後、検索語「犬」を備えているメッセージのストリームを受け取るとともに、アクティブクエリが期限切れになるまで、新しいメッセージが作成されてメッセージングプラットフォームに投稿されると、検索語「犬」を備えているメッセージの受け取りを継続しうる。静的クエリを送信した頃に一度だけ結果が提供される(例えば、検索要求に応答してウェブ結果のリストを受け取る)静的クエリとは対照的に、ユーザは、アクティブクエリの提出後(およびアクティブクエリの期限が切れるまで)マッチしたコンテンツを引き続き閲覧することができる。
【0008】
イベントプロデューサシステムは、イベントプロデューサマネージャと、マッチするコンテンツを識別するためのクエリサブスクリプションとを同時に実行するように構成された複数のイベントプロデューサとを備えている。イベントプロデューサマネージャは、サブスクリプション実行器からクエリサブスクリプションを受け取るとともに、クエリサブスクリプションが割り当てられたイベントプロデューサに格納されるように、1つまたは複数のイベントプロデューサにそのクエリサブスクリプションを割り当てる。いくつかの例では、イベントプロデューサマネージャは、イベントプロデューサシステムにおけるコンピューティングリソースを制御するべく、イベントプロデューサの構成を管理しており、たとえば、クエリサブスクリプションの格納および削除を行わせてもよい。例えば、イベントプロデューサマネージャは、イベントプロデューサから期限切れの(または不具合のある)クエリサブスクリプションを削除するとともに、イベントプロデューサマネージャで受け取られた新しいクエリサブスクリプションを割り当ててもよい。割り当てられたイベントプロデューサは、クエリサブスクリプションにマッチするメッセージキューからのメッセージに応答して、応答イベントを生成する。応答イベントは、クエリサブスクリプションにマッチするコンテンツを有するメッセージを識別してもよい。
【0009】
サブスクリプション実行器は、応答イベントを受け取るとともに、応答イベントによって識別されるメッセージを、クエリサブスクリプションを開始したユーザの観点からのデータで生成しつつ、配信チャンネルを介して配信されるようにトランスポートエンジンにメッセージを提供する。例えば、メッセージキューにあるメッセージは、その作成者(auther。著者)の視点から生成されている。しかし、クライアントアプリケーションに配信されるメッセージは、要求を開始したユーザの観点からのデータを持つことが要求される場合がある。サブスクリプション実行器は、メッセージがイベントプロデューサシステムによってマッチングされた後、トランスポートエンジンによって配送される前に、メッセージを生成(例えば、メッセージに可視性ルールをハイドレートしつつ適用)してもよい。この方法では、マッチしたメッセージの作成者が、クエリのサブスクリプションを開始したユーザを制限(例えば、ブロックまたはミュート)している場合、サブスクリプション実行器はそのメッセージを破棄(破棄)してよく、それによってメッセージングプラットフォームのセキュリティが向上する。さらに、いくつかの例では、応答イベントは、ユーザがサブスクリプションのために要求していたデータのみを備えうるので、イベントバス上で発行(pulished。公開)されるデータの量は減少する。よって、1秒当たりより多くのイベントをストリームするための帯域幅の節約に役立ちうるようにクライアントに送られる余分なデータを引き起こさないことがある。
【0010】
いくつかの例では、イベントプロデューサは、複数のイベントプロデューサグループにグループ化されてもよく、各イベントプロデューサグループは、完全なメッセージストリームを受け取る。各プロデューサグループは、複数のイベントプロデューサを備えており、各イベントプロデューサは、完全なメッセージストリームの別々の部分を受け取る。各イベントプロデューサグループは、クエリサブスクリプションの別個の部分を割り当てられる。イベントプロデューサマネージャは、サブスクリプションクエリをイベントプロデューサグループに割り当ててもよく、グループ内の各イベントプロデューサは、クエリサブスクリプションを保存するとともに、実行する。いくつかの例では、イベントプロデューサマネージャは、イベントプロデューサグループのうちの1つでクエリサブスクリプションの処理にエラーがある場合にクエリサブスクリプションを維持することができるように、第1イベントプロデューサグループおよび第2イベントプロデューサグループにサブスクリプションを割り当ててもよい。このようにして、システムは、クエリサブスクリプションおよび応答イベントの変動する量を考慮して、イベントプロデューサグループの数を増減させ、および/または各グループ内のイベントプロデューサの数を増減させることによって、イベントプロデューサシステムにおける応答の量を容易に制御することができる。例えば、単一のイベントプロデューサグループ内のイベントプロデューサの数が増加することに対応して、個々のイベントプロデューサは、処理するべくメッセージストリームからより少ないメッセージを受け取るとともに、その結果、余分な検索を処理するべくより多くの計算能力を有する可能性がある。イベントプロデューサグループの数が増加されることに応答して、イベントプロデューサに割り当てられる検索語の数が減少されてもよい。
【0011】
いくつかの例では、イベントプロデューサシステムは、イベントプロデューサから応答イベントを受け取るとともに、応答イベントによって識別されるメッセージがストリーミングレート閾値と同じかそれ未満の方法でクライアントアプリケーションにストリーミングされるようにストリーミングレートを制御するべく1以上の応答イベントを破棄するコレクタサービスを備えている。例えば、メッセージが速いレートでストリーミングされると、ユーザはストリーミングされたメッセージを消費することができない可能性がある。そのため、コレクタサービスは、メッセージがストリーミングされるレートが閾値と等しいかまたはそれ未満であるように、ストリーミングレートをスロットルしてもよい。例えば、ストリーミングレートの閾値が1秒当たり10メッセージである場合、コレクタサービスは、1秒の時間間隔内に10を超える応答イベントを破棄してもよい。いくつかの例では、コレクタサービスは、応答イベントが生成された時間以外の他の属性に基づきメッセージを破棄してもよい。例えば、コレクタサービスは、閾値より小さいストリーミングレートでメッセージを提供するべく、低品質または虐待と述懐されたメッセージを破棄してもよい。いくつかの例では、コレクタサービスは、閾値より小さいストリーミングレートでメッセージを提供するべく、低いエンゲージメントを有すると予測されるメッセージを破棄してもよい。これらおよび他の特徴は、詳細な開示においてさらに議論される。
【0012】
いくつかの例では、コレクタサービスは、イベントプロデューサからステータス応答を受け取るとともに、ステータス応答をメモリキャッシュに格納する。コレクタサービスは、ステータス応答をメモリキャッシュに定期的に照会することによって、クエリサブスクリプションの健全性(ヘルス)を判定してもよい。コレクタサービスが、クエリサブスクリプションが修復可能であると判定する場合、コレクタサービスは、クエリサブスクリプションが修復されうるように、不具合として報告する1つまたは複数のイベントプロデューサにサブスクリプションデータを提供してもよい。
【0013】
態様(アスペクト。側面)によれば、メッセージングプラットフォームにおいてクエリサブスクリプションを処理するためのシステムは、サーバコンピュータによって実行可能であるメッセージングプラットフォーム上で交換されるメッセージのストリームを備えているキューを備えており、メッセージングプラットフォームは、コンピューティング装置によって実行可能であるクライアントアプリケーションのユーザインタフェースにメッセージをストリームするように構成されている。システムは、複数のイベントプロデューサと、クエリサブスクリプションを受け取るとともに、クエリサブスクリプションを複数のイベントプロデューサのうちの1つまたは複数に割り当てるように構成されたイベントプロデューサマネージャであって、各イベントプロデューサは、クエリサブスクリプションを満たすメッセージの蒸気からのメッセージに応答して応答イベントを生成するように構成されたイベントプロデューサマネージャとを備える。システムは、複数のイベントプロデューサからステータス応答を受け取るとともに、ステータス応答をメモリキャッシュに格納するように構成されたコレクタサービスを備えており、コレクタサービスは、メモリキャッシュ内のステータス応答を照会することでクエリサブスクリプションの健全性(ヘルス)ステータスを定期的に判定するように構成されている。健全性ステータスが修復可能であると判定されることに応答して、コレクタサービスは、メモリキャッシュからサブスクリプションクエリに関連するサブスクリプションデータを取得するとともに、サブスクリプションデータを1つまたは複数のイベントプロデューサに提供してクエリサブスクリプションを再開させるように構成されている。
【0014】
いくつかの態様によれば、システムは、以下の特徴のうちの1つまたは複数(またはそれらの任意の組み合わせ)を備えていることができる。イベントプロデューサマネージャは、スリフトコールを介してクエリサブスクリプションを受け取るように構成されたアプリケーションプログラミングインタフェース(API)を備えている。イベントプロデューサマネージャは、複数のイベントプロデューサにおいて処理されるクエリサブスクリプションの数およびメッセージストリームのサイズを監視するとともに、クエリサブスクリプションの数およびメッセージストリームのサイズに基づき複数のイベントプロデューサの数を調節するように構成されている。前記複数のイベントプロデューサは、イベントプロデューサグループにアレンジされており、前記イベントプロデューサマネージャは、前記クエリサブスクリプションを第1イベントプロデューサグループおよび第2イベントプロデューサグループに割り当てるように構成されていることを特徴とする。複数のイベントプロデューサは、イベントプロデューサグループにアレンジされており、イベントプロデューサマネージャは、クエリサブスクリプションに関連付けられたユーザ識別子に基づき、クエリサブスクリプションを少なくとも1つのイベントプロデューサグループに割り当てるように構成されている。コレクタサービスは、イベントプロデューサから応答イベントを受け取るとともに、応答イベントをメモリキャッシュに格納しつつ、応答イベントを応答イベントバスに発行するように構成されている。
【0015】
新しい応答イベントの受け取りに応答して、コレクタサービスは、メモリキャッシュに照会することによって、クエリサブスクリプションに対する応答イベントがストリーミングレート閾値を超えたか否かを判定するように構成されており、コレクタサービスは、ストリーミングレート閾値を超えたことに応答して、新しい応答イベントを破棄するように構成されている。新しい応答イベントの受け取りに応答して、コレクタサービスは、新しい応答イベントのメッセージ識別子がメモリキャッシュに格納されているか否かを判定するように構成されており、ここで、コレクタサービスは、メッセージ識別子がメモリキャッシュに格納(記憶)されていないことに応答して、応答イベントバス上で新しい応答イベントを発行するとともに、メモリキャッシュに新しい応答イベントを格納するように構成されている。コレクタサービスは、メッセージ識別子がメモリキャッシュに格納されていることに応答して、新しい応答イベントを破棄するように構成されている。複数のイベントプロデューサは、イベントプロデューサグループにアレンジされており、各イベントプロデューサグループは、メッセージストリームがそれぞれのグループのイベントプロデューサ同士間で割り当てられるような数のイベントプロデューサを備えている。
【0016】
システムは、クライアントアプリケーションからネットワークを介して受け取られたクエリサブスクリプション要求の受け取りに応答して、イベントプロデューサマネージャにクエリサブスクリプションを送信するように構成されたサブスクリプション実行器と、クエリサブスクリプションがアクティブである期間中に応答イベントによって識別されるメッセージが配信チャンネルを介してクライアントアプリケーションにストリーミングされるように、クライアントアプリケーションからネットワークを介して受け取られたサブスクリプション要求の受け取りに応答してトランスポートエンジンとクライアントアプリケーションとの間に配信チャンネルを作成するように構成されたトランスポートエンジンとを備えている。イベントプロデューサマネージャは、クエリサブスクリプションの期限切れに応答して、割り当てられたグループのための複数のイベントプロデューサのそれぞれにおいてクエリサブスクリプションを削除するように構成されている。
【0017】
態様によれば、非一時的なコンピュータ可読媒体は、少なくとも1つのプロセッサによって実行されると、少なくとも1つのプロセッサに、サーバコンピュータによって実行可能であるメッセージングプラットフォーム上で交換されるメッセージのストリームを備えているキュー内のコンテンツにマッチするクエリサブスクリプションを受け取るとともに、複数のイベントプロデューサの1以上に対してクエリサブスクリプションを割り当て、個々のイベントプロデューサによって、メッセージのストリームのそれぞれの部分からクエリサブスクリプションのクエリ用語を備えているメッセージに応答して応答イベントを生成させ、コレクタサービスによって、イベントプロデューサからステータス応答を受け取るとともに、ステータス応答をメモリキャッシュに格納しつつ、コレクタサービスによって、メモリキャッシュ内のステータス応答を照会することで、クエリサブスクリプションの健全性ステータスを定期的に判定するとともに、健全性ステータスが修復可能と判定されることに応答して、メモリキャッシュからサブスクリプションクエリに関するサブスクリプションデータを取得しつつ、1つまたは複数のイベントプロデューサに対して、クエリサブスクリプションを再開するようにサブスクリプションデータを提供することをさせるように構成されている実行可能命令を格納する。
【0018】
いくつかの態様によれば、非一時的なコンピュータ可読媒体は、上記/下記の特徴のうちの1つまたは複数(またはそれらの任意の組み合わせ)を提供または引き起こすように構成された命令を格納しうる。複数のイベントプロデューサは、イベントプロデューサグループにアレンジされており、クエリサブスクリプションは、イベントプロデューサグループに割り当てられる。クエリサブスクリプションは、クエリサブスクリプションに関連付けられたユーザ識別子を用いたモジュロ操作の実行に基づき、イベントプロデューサグループに割り振られる。操作は、応答イベントを応答イベントバスに発行する工程と、応答イベントをメモリキャッシュに格納する工程とをさらに備えてもよい。操作は、期間内の応答イベントの数がストリーミングレート閾値を超えたか否かを判定する工程と、ストリーミングレート閾値を超えたことに応答して応答イベントを破棄する工程とをさらに備えてもよい。動作(操作)は、応答イベントによって識別されるメッセージが応答イベントバスに既に発行されているか否かを判定する工程と、メッセージが応答イベントバスに既に発行されていると判定されたことに応答して、応答イベントを破棄する工程とをさらに備えてもよい。動作は、クエリサブスクリプションの健全性ステータスを示すステータスメッセージの送信を開始する工程をさらに備えてもよい。動作は、クライアントアプリケーションからネットワークを介して受け取られたクエリサブスクリプション要求の受け取りに応答して、サブスクリプション実行器によって、イベントプロデューサマネージャにクエリサブスクリプションを送信する工程、クライアントアプリケーションからネットワークを介して受け取られたサブスクライブ要求の受け取りに応答して、トランスポートエンジンとクライアントアプリケーションとの間に配信チャンネルを作成する工程、をさらに備えていることができる。動作はさらに、サブスクリプション実行器によって、応答イベントからのメッセージ識別子とクエリサブスクリプションに関連付けられたユーザ識別子とに基づきメッセージを生成する工程と、トランスポートエンジンによって、クエリサブスクリプションがアクティブである期間に、配信チャンネルを介してクライアントアプリケーションにメッセージをストリーミングする工程とを備えていることができる。
【0019】
態様によれば、メッセージングプラットフォームにおいてクエリサブスクリプションを処理する方法は、イベントプロデューサマネージャによって、サーバコンピュータによって実行可能であるメッセージングプラットフォーム上で交換されるメッセージのストリームを備えているキュー内のコンテンツにマッチするためのクエリスクリプションを受け取る工程と、イベントプロデューサマネージャによって、前記クエリサブスクリプションを、複数のイベントプロデューサグループのうちの1つのイベントプロデューサグループ(各イベントプロデューサグループは複数のイベントプロデューサを備えている)に割り当てる工程と、個々のイベントプロデューサによって、前記クエリサブスクリプションのクエリ用語を備えているメッセージの流れのそれぞれの部分からのメッセージに応答して応答イベントを発生させる工程と、コレクタサービスによって、応答イベントを応答イベントバスに発行する工程と、コレクタサービスによって、イベントプロデューサからステータス応答を受け取る工程と、ステータス応答をメモリキャッシュに格納するとともに、コレクタサービスによって、メモリキャッシュ内のステータス応答を照会してクエリサブスクリプションの健全性ステータスを定期的に判定する工程と、健全性ステータスが修復可能と判定されたことに応答して、メモリキャッシュからサブスクリプションクエリに関連するサブスクリプションデータを取得する工程と、サブスクリプションデータを1つまたは複数のイベントプロデューサに提供してクエリサブスクリプションを再開させる工程と、を備えうる。
【0020】
いくつかの態様によれば、本方法は、上記/下記の特徴のうちの1つまたは複数(またはその任意の組み合わせ)を備えていることができる。クエリサブスクリプションは、プライマリーイベントプロデューサグループとセカンダリーイベントプロデューサグループに割り当てられる。クエリサブスクリプションは、クエリサブスクリプションに関連付けられたユーザ識別子に基づき、イベントプロデューサグループに割り当てられる。方法は、発行する工程の前に、期間内の応答イベントの数がストリーミングレート閾値を超えたか否かをコレクタサービスによって判定する工程と、ストリーミングレート閾値を超えたことに応答して、コレクタサービスによって、応答イベントを破棄する工程とを備えてもよい。本方法は、コレクタサービスによって、応答イベントによって識別されるメッセージが、前記発行する工程の前に応答イベントバスに既に発行されているか否かを判定する工程と、コレクタサービスによって、メッセージが応答イベントバスに既に発行されていると判定されたことに応答して、応答イベントを破棄する工程とを備えてもよい。
【0021】
態様によれば、メッセージングプラットフォームにおいてクエリサブスクリプションを処理するシステムは、サーバコンピュータによって実行可能であるメッセージングプラットフォーム上で交換されるメッセージのストリームを備えているメッセージキューと、クエリサブスクリプションを受け取るとともに、クエリサブスクリプションのクエリ用語を備えているメッセージストリームのメッセージに応答して応答イベントを発生させるようにクエリサブスクリプションがアクティブの間応答イベントを発生するように構成されているイベントプロデューサと、応答イベントを受け取るとともに、応答イベントの1つまたは複数を破棄しつつ、応答イベントによって識別されるメッセージがクライアントアプリケーションに配信されるストリーミングレートを制御するように構成されたコレクタサービスと、ネットワークを介して、ストリーミングレートに従ってメッセージをクライアントアプリケーションに配信するように構成されたトランスポートエンジンとを備える。
【0022】
いくつかの態様によれば、システムは、上記/下記の特徴のうちの1つまたは複数(またはその任意の組み合わせ)を備えていることができる。コレクタサービスは、以前に受け取られた応答イベントの数がある期間にわたって閾値を超えたことに応答して、新しい応答イベントを破棄するように構成されている。コレクタサービスは、以前に発行された応答イベントの数が一定期間にわたって閾値以下であることに応答して、新しい応答イベントを応答イベントバスに発行するように構成されている。コレクタサービスは、応答イベントを応答イベントバスに発行するとともに、発行された応答イベントをメモリキャッシュに格納しつつ、新しい応答イベントに応答して、コレクタサービスは、メモリキャッシュに照会して、一定期間にわたってメモリキャッシュに格納された応答イベントの数を判定するとともに、一定期間にわたってメモリキャッシュに格納された応答イベントの数が閾値を超えたことに応答して、新しい応答イベントを破棄するように構成されている。各応答イベントは、メッセージ識別子と、クエリサブスクリプションに関する情報を備えているサブスクリプションデータとを備えている。システムは、応答イベントバスを介してコレクタサービスから応答イベントを受け取るように構成されたサブスクリプション実行器を備えてもよく、サブスクリプション実行器は、それぞれの応答イベントに備えられるメッセージ識別子とクエリサブスクリプションに関連付けられるユーザ識別子とに基づき、それぞれの応答イベントに対するメッセージを生成するように構成されている。コレクタサービスは、イベントプロデューサから第1クエリサブスクリプションのための第1応答イベントを受け取るとともに、イベントプロデューサから第2クエリサブスクリプションのための第2応答イベントを受け取る。さらにコレクタサービスは、第1応答イベントによって識別されるメッセージが、第1配信チャンネルを介して、ストリーミングレート閾値と同じかそれ未満である方法でトランスポートエンジンによってストリーミングされるように第1応答イベントのうちの1つまたは複数のイベントを破棄するように構成されている。およびコレクタサービスは、第2応答イベントによって識別されるメッセージが第2配信チャンネルを介してストリーミングレート閾値と等しいかそれ未満である方法でトランスポートエンジンによってストリーミングされるように、1つまたは複数の第2応答イベントを破棄するように構成されている。
【0023】
コレクタサービスは、複数のコレクタサービスインスタンスを備えてもよく、各コレクタサービスインスタンスは、応答イベントの別々の部分を受け取るとともに、各サブセットが個々のストリーミングレート閾値と同じかそれ未満の数の応答イベントを備えているように1つまたは複数の応答イベントを破棄して応答イベントのサブセットを取得するように構成されている。システムは、それぞれのコレクタサービスインスタンスから受け取られた応答イベントの各サブセットを格納するように構成されたメモリキャッシュを備えてもよく、複数のコレクタサービスインスタンスのうちの少なくとも1つは、サブセットを集約するとともに、集約されたサブセットがストリーミングレート閾値と同じかそれ未満の数の応答イベントを備えているように、集約されたサブセットから1つまたは複数の応答イベントを捨てるように構成されている。コレクタサービスは、応答イベントによって識別されるメッセージのエンゲージメント確率メトリクスを受け取るように構成されており、エンゲージメント確率メトリクスは、メッセージへのエンゲージメントの予測レベルを示しており、コレクタサービスは、エンゲージメント確率メトリクスに基づき1つまたは複数の応答イベントを破棄するように構成されている。コレクタサービスは、応答イベントによって識別されたメッセージのメッセージ健全性メトリクスを受け取るように構成されており、メッセージ健全性メトリクスは、メッセージングプラットフォームの1つまたは複数の条件に違反するリスクレベルを示しており、コレクタサービスは、メッセージ健全性メトリクスに基づき1つまたは複数の応答イベントを破棄するように構成されている。
【0024】
一態様によれば、非一時的なコンピュータ可読媒体は、少なくとも1つのプロセッサによって実行されたときに、少なくとも1つのプロセッサに、サーバコンピュータによって実行可能であるメッセージングプラットフォーム上で交換されるメッセージのストリームを受け取る工程と、メッセージングプラットフォームは、コンピューティング装置によって実行可能であるクライアントアプリケーションのユーザインタフェースにメッセージを配信するように構成されており、メッセージングプラットフォーム上のアクティブクエリについてクエリサブスクリプションを受け取る工程と、メッセージングアプリケーションは、クエリサブスクリプションを受け取るように構成されており、クエリサブスクリプションのクエリ用語を備えているメッセージのストリームのメッセージに応答して応答イベントが生成されるように、クエリサブスクリプションがアクティブである間に応答イベントを生成する工程と、応答イベントによって識別されるメッセージがクライアントアプリケーションに配信されるストリーミングレートを制御するべく1つまたはそれ以上を破棄する工程と、ストリーミングレートに従ってクライアントアプリケーションにネットワークを介して、メッセージを配信する工程と実行させるように構成されている実行可能命令を格納する。
【0025】
いくつかの態様によれば、非一時的なコンピュータ可読媒体は、上記/下記の特徴のうちの1つまたは複数(またはその任意の組み合わせ)を提供または引き起こす命令を備えていることができる。新たに受け取られた応答イベントは、以前に受け取られた応答イベントの数が一定期間にわたって閾値を超えたことに応答して破棄される。新たに受け取られた応答イベントは、以前に発行された応答イベントの数が一定期間にわたって閾値以下であることに応答して、応答イベントバスに発行される。動作は、応答イベントを応答イベントバスに発行する工程と、発行された応答イベントをメモリキャッシュに格納する工程と、一定期間にわたってメモリキャッシュに格納された応答イベントの数を判定するとともに、一定期間にわたってメモリキャッシュに格納された応答イベントの数が閾値を超えたことに応答して、新しい応答イベントを破棄する工程と、をさらに備えてもよい。動作は、応答イベントバスを介して応答イベントを受け取る工程であって、各応答イベントはメッセージ識別子を備えている、応答イベントを受け取る工程と、それぞれの応答イベントに備えられるメッセージ識別子とクエリサブスクリプションに関連付けられたユーザ識別子とに基づき、各応答イベントに対してメッセージが生成されるように、応答イベントに基づきメッセージを生成する工程とを備えてもよい。
【0026】
態様によれば、メッセージングプラットフォームにおけるクエリサブスクリプションを処理する方法は、サーバコンピュータによって実行可能であるメッセージングプラットフォーム上で交換されるメッセージのストリームを受け取る工程と、メッセージングプラットフォーム上のアクティブクエリのクエリサブスクリプションを受け取る工程と、クエリサブスクリプションのクエリ用語を備えているメッセージストリームのメッセージに応答して応答イベントを発生するように応答を生成する工程と、メッセージングのストリームはクエリサーバによって実行さるとともに、応答イベントによって識別されるメッセージがクライアントアプリケーションに配信されるストリーミングレートを制御するべく、応答イベントのうちの1つまたは複数を破棄する工程と、各応答イベントがメッセージング識別子を備えており、それぞれの応答イベント内に備えられるメッセージ識別子とサブスクリプションクエリに関連付けられるユーザ識別子とに基づきメッセージが生成されるように応答イベントに基づきメッセージを生成する工程と、ストリーミングレートに従って、ネットワークを介して、クライアントアプリケーションにメッセージを配信する工程とを備えている。
【0027】
いくつかの態様によれば、本方法は、上記/下記の特徴のうちの1つまたは複数(またはその任意の組み合わせ)を備えてもよい。新たに受け取られた応答イベントは、以前に受け取られた応答イベントの数がある期間にわたって閾値を超えたことに応答して破棄される。方法は、応答イベントを応答イベントバスに発行する工程と、発行された応答イベントをメモリキャッシュに格納する工程と、一定期間にわたってメモリキャッシュに格納された応答イベントの数を判定するとともに、一定期間にわたってメモリキャッシュに格納された応答イベントの数が閾値を超えたことに応答して、新たに応答イベントを破棄する工程とを備えてもよい。本方法は、応答イベントによって識別されるメッセージのエンゲージメント確率メトリクスを受け取るとともに、エンゲージメント確率メトリクスがメッセージとのエンゲージメントの予測レベルを示す工程と、エンゲージメント確率メトリクスに基づき1つまたは複数の応答イベントを破棄する工程とを備えてもよい。本方法は、応答イベントによって識別されたメッセージのメッセージ健全性メトリクスを受け取る工程であって、メッセージ健全性メトリクスはメッセージングプラットフォームの1つまたは複数の条件に違反するリスクレベルを示す、前記メッセージ健全性メトリクスを受け取る工程と、およびメッセージ健全性メトリクスに基づき1つまたは複数の応答イベントを破棄する工程とを備えてもよい。
【0028】
一態様によれば、クライアントアプリケーションにリアルタイムメッセージを配信するべくメッセージングプラットフォームにおいてクエリサブスクリプションを処理する方法は、クライアントアプリケーションからのクエリサブスクリプション要求の受け取りに応答して、イベントプロデューサシステムにサブスクリプション実行器によってクエリサブスクリプションを送信するとともに、クライアントアプリケーションからのサブスクリプション要求の受け取りに応答して、トランスポートエンジンによってクライアントアプリケーションとトランスポートエンジン間の配信チャンネルを作成しており、イベントプロデューサシステムにおいてクエリサブスクリプションを満たすコンテンツを有するメッセージの流れからのメッセージに応答して応答イベントを発生させ、応答イベントによって識別されるメッセージの作成者が、ユーザ識別子に関連付けられたユーザを制限しているか否かをサブスクリプション実行器によって判定しており、作成者によってユーザが制限されていると判定されることに応答して、サブスクリプション実行器によって、応答イベントによって識別されるメッセージを破棄しており、作成者によってユーザが制限されていないと判定されることに応答して、クエリサブスクリプションがアクティブである期間中にトランスポートエンジンによって、配信チャンネルを介して応答イベントによって識別されるメッセージをクライアントアプリケーションにストリーミングする、工程を備えている。
【0029】
いくつかの態様によれば、本方法は、上記/下記の特徴のうちの1つまたは複数(またはその任意の組み合わせ)を備えてもよい。クエリサブスクリプション要求は、クエリ期間と有効期限とを備えている。イベントプロデューサシステムは、複数のイベントプロデューサを備えており、方法は、ユーザ識別子に基づき複数のイベントプロデューサのうちの1つまたは複数にクエリサブスクリプションを割り当てることを備えている。サブスクライブ要求は、トランスポートトピックと、ユーザ識別子とを備えている。本方法は、サブスクリプション実行器が、クエリサブスクリプション要求の受け取りに応答してトランスポートトピックを識別する工程と、サブスクリプション実行器が、クエリサブスクリプション要求の受け取りに応答してサブスクリプション識別子を生成する工程と、ネットワークを介してサブスクリプション実行器が、クライアントアプリケーションにサブスクリプションステータス応答を送信しており、サブスクリプションステータス応答がトランスポートトピックとサブスクリプション識別子を備えており、サブスクリプション要求がトランスポートトピックとサブスクリプション識別子を備えている、ことを備えうる。この方法は、イベントプロデューサマネージャによって、クエリサブスクリプションを複数のイベントプロデューサに割り当てることと、複数のイベントプロデューサの各々にクエリサブスクリプションを格納する工程と、各イベントプロデューサによって、クエリサブスクリプションを満たすコンテンツを有するメッセージのストリームからのメッセージに応答して応答イベントを生成する工程と、を備えてもよい。
【0030】
一態様によれば、クライアントアプリケーションにリアルタイムメッセージを配信するべくクエリサブスクリプションを処理するメッセージングプラットフォームは、メッセージングプラットフォーム上で交換されるメッセージのストリームを受け取るとともに、クエリサブスクリプションを満たすコンテンツを有するメッセージのストリームからのメッセージに応答して応答イベントを生成するように構成されたイベントプロデューサシステム、応答イベントによって識別されるメッセージの作成者がクエリサブスクリプションに関連付けられたユーザを制限したか否かを判定しており、作成者によって制限されていると判定されるユーザに対して応答イベントによって識別されるメッセージを破棄するように構成されたサブスクリプション実行器、などを備える。ネットワークを介して、クライアントアプリケーションからサブスクライブ要求を受け取って、トランスポートエンジンとクライアントアプリケーションとの間に配信チャンネルを確立するように構成されたトランスポートエンジンであって、ユーザが作成者によって制限されていないと判定されることに応答して、クエリサブスクリプションがアクティブである期間中に配信チャンネルを介して応答イベントによって識別されるメッセージをクライアントアプリケーションにストリームするようにトランスポートエンジンが構成されていることを特徴とするトランスポートエンジンと、が備えられる。
【0031】
いくつかの態様によれば、メッセージングプラットフォームは、上記/下記の特徴のうちの1つまたは複数(またはそれらの任意の組み合わせ)を備えてもよい。サブスクリプション実行器は、クライアントアプリケーションからのクエリサブスクリプション要求の受け取りに応答して、イベントプロデューサシステムにクエリサブスクリプションを送信するように構成されている。サブスクリプション実行器は、クライアントアプリケーションからのクエリサブスクリプション要求の受け取りに応答して、トランスポートトピックを識別するように構成されており、サブスクリプション実行器は、ネットワークを介して、クライアントアプリケーションにサブスクリプションステータス応答を送信しており、サブスクリプションステータス応答は、トランスポートトピックを備えているように構成されている。サブスクリプション実行器は、クエリサブスクリプションを一意に識別するサブスクリプション識別子を生成しており、サブスクリプションステータス応答においてサブスクリプション識別子を送信するように構成されている。サブスクリプション要求は、トランスポートトピックとユーザ識別子を備えている。
【0032】
サブスクリプション実行器は、応答イベントがイベントプロデューサシステムによって生成されると、応答イベントを取得するべく応答イベントバスに接続されており、各応答イベントはメッセージ識別子を備えている。サブスクリプション実行器は、メッセージ識別子に基づきメッセージを生成するように構成されており、サブスクリプション実行器は、配信チャンネルを介してクライアントアプリケーションに配信するべく、メッセージをトランスポートエンジンに提供するように構成されている。サブスクリプション実行器は、GraphQLアプリケーションプログラミングインタフェース(API)とGraphQL実行器を備えている。GraphQL実行器は、各レスポンスイベントに対してJAVA(登録商標)Scriptオブジェクト表記法(JSON)メッセージを生成するべく、GraphQL_APIに通信するように構成されている。GraphQL実行器は、配信チャンネルを介してクライアントアプリケーションに配信するべく、JSONメッセージをトランスポートエンジンに提供するように構成されている。イベントプロデューサシステムは、イベントプロデューサマネージャと、複数のイベントプロデューサとを備えており、イベントプロデューサマネージャは、サブスクリプション実行器からクエリサブスクリプションを受け取るとともに、複数のイベントプロデューサのうちの1つまたは複数のイベントプロデューサにクエリサブスクリプションを割り当てるように構成されている。
【0033】
或る態様によれば、非一時的なコンピュータ可読媒体は、少なくとも1つのプロセッサによって実行されたときに、少なくとも1つのプロセッサに、イベントプロデューサシステムによって、クライアントアプリケーションからのクエリサブスクリプション要求の受け取りに応答して、サブスクリプション実行器によって、イベントプロデューサシステムにクエリサブスクリプションを送信しており、クライアントアプリケーションからのサブスクリプション要求の受け取りに応答して、トランスポートエンジンによって、クライアントアプリケーションとトランスポートエンジンとの間に配信チャンネルを作り、クエリサブスクリプションを満たすコンテンツを有するメッセージのストリームからのメッセージに応答する応答イベントと、応答イベントとによって識別されるメッセージの作成者がユーザ識別子に関連付けられたユーザを制限しているか否かをサブスクリプション実行器によって判定しており、作成者によってユーザが制限されていると判定されることに応答して、応答イベントによって識別されるメッセージをサブスクリプション実行器によって破棄しており、作成者によってユーザが制限されていないと判定されることに応答してクエリサブスクリプションがアクティブである期間にトランスポートエンジンによって、応答イベントによって識別されるメッセージを配信チャンネル経由でクライアントアプリケーションへストリームすることをさせるように構成されている実行可能命令を格納する。
【0034】
いくつかの態様によれば、非一時的なコンピュータ可読媒体は、上記/下記の特徴のうちの1つまたは複数(またはその任意の組み合わせ)を提供する命令を格納することができる。クエリサブスクライブ要求は、クエリ条件と有効期限とを備えており、サブスクライブ要求は、トランスポートトピックを備えており、配信チャンネルは、トランスポートトピックに対応するクライアントアプリケーションにメッセージがストリーミングされるようにトランスポートトピックに関連付けられる。動作は、サブスクリプション実行器によって、クエリサブスクリプション要求に備えられるサブスクリプションデータに基づきトランスポートトピックを識別する工程と、サブスクリプション実行器によって、サブスクリプションデータに基づきサブスクリプション識別子を生成する工程と、サブスクリプション実行器によって、ネットワークを介して、クライアントアプリケーションにサブスクリプションステータス応答を送信しており、サブスクリプションステータス応答がトランスポートトピックとサブスクリプション識別子を備えていることを備えうる。サブスクライブ要求は、トランスポートトピックとサブスクリプション識別子を備えている。動作は、イベントプロデューサシステムの1つまたは複数のイベントプロデューサにクエリサブスクリプションを割り当てる工程と、割り当てられた各イベントプロデューサにクエリサブスクリプションを格納する工程と、およびメッセージのストリームからのメッセージに対してクエリサブスクリプションのクエリ用語が照合されることに応答して、各イベントプロデューサによって応答イベントを生成する工程とを備えてもよい。
【0035】
或る態様によれば、メッセージングプラットフォームからリアルタイムメッセージをストリーミングするためのクエリサブスクリプションを処理する方法は、クライアントアプリケーションによって、ネットワークを介して、クエリサブスクリプション要求をメッセージングプラットフォームのサブスクリプション実行器に送信する工程と、ここでクエリサブスクリプション要求は、メッセージングプラットフォーム上で交換されるメッセージのキュー上で実行するためのクエリサブスクリプションをサブスクリプション実行器に生成させるように構成されており、クライアントアプリケーションによって、ネットワークを介してサブスクライブ要求を、メッセージングプラットフォームのトランスポートエンジンに送信する工程と、および、クライアントアプリケーションが、ネットワークを介しており、サブスクライブ要求を、メッセージを交換するキューに実行する工程と、ここで、サブスクライブ要求は、トランスポートエンジンに、トランスポートエンジンとクライアントアプリケーションとの間に配信チャンネルを作成させるように構成されており、クライアントアプリケーションによって、配信チャンネルを介して、クエリサブスクリプションの基準(クライテリア)を満たすメッセージのストリームを受け取る工程と、クエリサブスクリプションがアクティブである間に、クライアントアプリケーションのユーザインタフェース上にメッセージがストリームされるようにする工程と、クライアントアプリケーションによって、ネットワークを介して、サブスクリプション更新要求をトランスポートエンジンに周期的に送信する工程とを備えており、サブスクリプション更新要求は、トランスポートエンジンに配信チャンネルを更新させてスクリプト実行器にクエリサブスクリプションを更新させるように構成されている。
【0036】
いくつかの態様によれば、本方法は、上記/下記の特徴のうちの1つまたは複数(またはその任意の組み合わせ)を備えていることができる。クエリサブスクリプション要求は、クエリ用語とユーザ識別子を備えている。クエリサブスクリプション要求は、クエリサブスクリプションがアクティブである期間を定義する有効期限を備えている。サブスクライブ要求は、トランスポートトピックを備えており、トランスポートトピックは、クエリサブスクリプションに関連付けられた1つまたは複数のクエリ用語に対応する。この方法は、クライアントアプリケーションによって、サブスクリプション実行器からネットワークを介してサブスクリプションステータス応答を受け取る工程と、ここでサブスクリプションステータス応答はトランスポートトピックおよびサブスクリプション識別子を備えており、クライアントアプリケーションによって、トランスポートトピックおよびサブスクリプション識別子を備えているようにサブスクライブ要求を生成する工程とを備えうる。クエリサブスクリプション要求とサブスクライブ要求は、互いに実質的に並行して送信される。本方法は、クライアントアプリケーションによって、トランスポートエンジンからチャンネル識別子を受け取る工程と、チャンネル識別子が配信チャンネルを識別する工程とを備えてもよい。メッセージのストリームは、メッセージが経時的にタイムライン上に自動的にストリームされるように、クライアントアプリケーションのタイムライン上にレンダリングされる。前記タイムラインは、前記クライアントアプリケーションのユーザインタフェース上の検索列であり、前記方法は、前記検索列の作成に応答して、前記クライアントアプリケーションによって、前記クエリサブスクリプション要求を生成する工程をさらに備えている。タイムラインは、メッセージがユーザのホームタイムラインに自動的にストリーミングされるように、クライアントアプリケーションのユーザのホームタイムラインである。メッセージのストリームは、メッセージングプラットフォーム上の会話に関連する会話グラフ内のメッセージを備えている。
【0037】
一態様によれば、非一時的なコンピュータ可読媒体は、少なくとも1つのプロセッサによって実行されたときに、少なくとも1つのプロセッサに、コンピューティング装置によって実行可能であるクライアントアプリケーションによって、ネットワークを介して、サーバコンピュータによって実行可能であるメッセージングプラットフォームのサブスクリプション実行器にクエリサブスクリプション要求を送信させるように構成されている実行可能命令を格納する。クエリサブスクリプション要求は、サブスクリプション実行器に、メッセージングプラットフォーム上で交換されるメッセージのキュー上で実行されるクエリサブスクリプションを生成させるように構成されている。実行可能命令は少なくとも1つのプロセッサに、クライアントアプリケーションによって、ネットワークを介して、サブスクリプション実行器からステータスメッセージ応答を受け取ることを実行させる。ステータスメッセージ応答はトランスポートトピックを備えている。実行可能命令は、クライアントアプリケーションによって、ネットワークを介して、メッセージングプラットフォームのトランスポートエンジンに、サブスクライブ要求を送信させる。サブスクライブ要求はトランスポートトピックを備えている。サブスクライブ要求は、トランスポートエンジンとクライアントアプリケーションとの間に配信チャンネルを作成させる。実行可能命令は、クライアントアプリケーションによって、配信チャンネルを介してクエリサブスクリプションの基準を満たすメッセージのストリームを受け取るとともに、メッセージが、クエリサブスクリプションがアクティブな間にストリーミングレート閾値と同等かそれ未満でクライアントアプリケーションのユーザインタフェース上にストリーミングされるように構成されている。実行可能命令は、クライアントアプリケーションによって、ネットワークを介して、サブスクライブ更新要求をトランスポートエンジンに定期的に送信させる。サブスクライブ更新要求は、トランスポートエンジンに配信チャンネルを更新させるとともに、サブスクリプション実行器にクエリサブスクリプションを更新させるように構成されていることを特徴とする。
【0038】
いくつかの態様によれば、非一時的なコンピュータ可読媒体は、上記/下記の特徴のうちの1つまたは複数(またはその任意の組み合わせ)を提供する命令を格納してもよい。クエリサブスクリプション要求は、クエリ用語と、ユーザ識別子と、クエリサブスクリプションがアクティブである期間を定義する有効期限とを備えている。クエリサブスクリプション要求は、GraphQLサブスクリプションクエリである。動作は、クライアントアプリケーションによって、ネットワークを介して、配信チャンネルを介してトランスポートエンジンからステータスメッセージを受け取る工程と、クライアントアプリケーションによって、ステータスメッセージに基づき、クエリサブスクリプション要求およびサブスクライブ要求を再送信する工程とを備えてもよい。
【0039】
或る態様によれば、メッセージングプラットフォームからリアルタイムメッセージをストリーミングするためのクエリサブスクリプションを処理するシステムは、サーバコンピュータによって実行可能であり、メッセージングプラットフォーム上で交換されるメッセージのキューを生成するように構成されているメッセージングプラットフォームと、コンピュータ装置によって実行可能であるクライアントアプリケーションであって、クライアントアプリケーションのユーザインタフェース上にソーシャルコンテンツのタイムラインをレンダリングするように構成されているクライアントアプリケーションとを備えている。クライアントアプリケーションは、ネットワークを介して、クエリサブスクリプション要求をメッセージングプラットフォームのサブスクリプション実行器に送信しており、クエリサブスクリプション要求は、サブスクリプション実行器にメッセージのキュー上で実行されるべきクエリサブスクリプションを生成させるように構成されており、ネットワークを介して、サブスクライブ要求をメッセージングプラットフォームのトランスポートエンジンに送信しており、サブスクライブ要求は、トランスポートエンジンにトランスポートエンジンとクライアントアプリケーションとの間に配信チャンネルを作成するように構成されている。クライアントアプリケーションは、クエリサブスクリプションがアクティブである間、ストリーミングレート閾値以下のストリーミングレートでクライアントアプリケーションのユーザインタフェース上にメッセージがストリーミングされるように、配信チャンネルを介してクエリサブスクリプションの基準を満たすメッセージのストリームを受け取るとともに、ネットワークを介して、トランスポートエンジンにサブスクライブ更新要求を定期的に送信しており、サブスクライブ更新要求は、トランスポートエンジンに配信チャンネルを更新させて、サブスクリプション実行器にクエリサブスクリプションを更新させるように構成されている。
【0040】
いくつかの態様によれば、システムは、上記/下記の特徴のうちの1つまたは複数(またはそれらの任意の組み合わせ)を備えうる。クエリサブスクリプション要求は、クエリタームおよびユーザ識別子を備えているGraphQLサブスクリプションクエリである。サブスクライブ要求は、トランスポートトピックを備えており、トランスポートトピックはクエリ用語に対応しており、トランスポートトピックは、トランスポートエンジンとの互換性のあるフォーマット(形式)を有する。クエリサブスクリプション要求とサブスクライブ要求は、互いに実質的に並行して送信される。クライアントアプリケーションは、クエリサブスクリプションがアクティブである間、タイムライン上にメッセージのストリームを自動的にレンダリングするように構成されている。メッセージのストリームは、会話に関連するメッセージを備えており、クライアントアプリケーションは、メッセージがメッセージングプラットフォームによって生成および共有されると、会話に関連するメッセージをユーザインタフェース上にプッシュするように構成されている。
【図面の簡単な説明】
【0041】
図1】一態様によるメッセージングプラットフォーム上で交換されたメッセージを有するメッセージストリームからのコンテンツにマッチするクエリサブスクリプションに従って、クライアントアプリケーションにリアルタイムメッセージを経時的にストリーミングするためのシステムの概略図。
図2】一態様によるクエリサブスクリプションの生成のためのトランスポートエンジン、サブスクリプション実行器、およびクライアントアプリケーションを描いたシステムの一部分を示す図。
図3】一態様によるクエリサブスクリプションを実施しており、応答イベントを生成するためのイベントプロデューサシステムとサブスクリプション実行器とを描いたシステムの一部を示す図。
図4】一態様に従って、配信イベントをトランスポートエンジンに配信するためのサブスクリプション実行器とトランスポートエンジンとを描いたシステムの一部を示す図。
図5】一態様による、メッセージをストリーミングするためのトランスポートエンジンとクライアントアプリケーションとを描いたシステムの一部を示す図。
図6】一態様による、クエリサブスクリプションを更新するための、イベントプロデューサシステム、サブスクリプション実行器、トランスポートエンジン、およびクライアントアプリケーションを描いたシステムの一部を示す図。
図7】一態様による、ストリーミングコンテンツのための複数のタイムラインを提供するクライアントアプリケーションのユーザインタフェースの例を示す図。
図8】一態様によるクエリサブスクリプションに従ってメッセージをストリーミングするための、メッセージングプラットフォームの動作例を示すフローチャート。
図9】一態様によるクエリサブスクリプションに従ってメッセージをストリーミングするための、クライアントアプリケーションの例示的な動作を示すフローチャート。
図10A】一態様によるメッセージングプラットフォーム上で交換されたメッセージを有するメッセージストリームからのコンテンツにマッチするクエリサブスクリプションに従って、クライアントアプリケーションにリアルタイムメッセージを経時的にストリーミングするためのシステムの概略図。
図10B】一態様によるイベントプロデューサシステムの一例を示す図。
図11】一態様によるイベントプロデューサシステムのコレクタサービスの一例を示す図。
図12】一態様による複数のコレクタサービスインスタンスを有するコレクタサービスの一例を示す図。
図13】一態様によるイベントプロデューサシステムの動作例を示すフローチャート。
図14】一態様による、閾値レベル未満のメッセージをストリーミングするためのメッセージングプラットフォームの動作例を示すフローチャート。
【発明を実施するための形態】
【0042】
図1は、一態様による、1つまたは複数のサーバコンピュータ102によって実行可能であるメッセージングプラットフォーム104と、コンピューティング装置124によって実行可能であるクライアントアプリケーション126とを備えているシステム100の模式図である。メッセージングプラットフォーム104は、メッセージ配信の速度を高め、アクティブなクエリサブスクリプション141の数の変動を処理するべくコンピュータリソースの管理を効果的に制御しており、および/またはクエリサブスクリプション141を開始したユーザの観点から、クエリサブスクリプション141にマッチしそれらのメッセージ132をリアルタイムで配信するというセキュリティを高める方法でメッセージストリーム114からのコンテンツにマッチするクエリサブスクリプション141に従いリアルタイムメッセージ132を時間をかけてクライアントアプリケーション126にストリームするように構成されている。
【0043】
メッセージングプラットフォーム104は、ユーザ装置(そのうちの1つはコンピューティング装置124として示されている)同士間のリアルタイム通信を促進するためのプラットフォームである。メッセージングプラットフォーム104は、個人、企業、および/またはエンティティの数百万のアカウント(例えば、仮名アカウント、新規性(ノベルティ)アカウントなど)を格納してもよい。各アカウントの1人または複数のユーザは、メッセージングプラットフォーム104を用いて、メッセージングプラットフォーム104の内部および/または外部の他のアカウントにメッセージを送信することができる。メッセージングプラットフォーム104は、ユーザが「リアルタイム」で通信すること、すなわち、最小限の遅延で他のユーザと会話しており、同時セッション中に1人または複数の他のユーザと会話を行うことを可能にするように構成されてもよい。言い換えれば、メッセージングプラットフォーム104は、ユーザがメッセージ132をブロードキャストすることを可能にするとともに、ユーザ同士間のライブ会話を促進するべく、妥当な時間枠内でメッセージ132を1人または複数の他のユーザに表示してもよい。いくつかの例では、メッセージ132の受信者は、メッセージ132をブロードキャストするユーザのアカウントに接続グラフ169において予め定義されたグラフ関係を有していてもよい。
【0044】
クライアントアプリケーション126は、ネットワーク150を介してメッセージングプラットフォーム104に通信するように構成されている。クライアントアプリケーション126は、ユーザがメッセージ132を投稿するとともに、相互作用するソーシャルメディアメッセージングアプリケーションであってもよい。いくつかの例では、クライアントアプリケーション126は、コンピューティング装置124のオペレーティングシステム上で実行されるネイティブアプリケーションであるか、またはコンピューティング装置124のブラウザベースアプリケーションに連携してサーバコンピュータ102(または他のサーバ)上で実行されるウェブベースアプリケーションであってもよい。コンピューティング装置124は、クライアントアプリケーション126とメッセージングプラットフォーム104とが互いに通信することを可能にする方法で、任意のタイプのネットワーク接続および/またはアプリケーションプログラミングインタフェース(API)を用いて、ネットワーク150を介してメッセージングプラットフォーム104にアクセスしてもよい。
【0045】
メッセージ132は、メッセージングプラットフォーム104への新しいメッセージの作成および投稿などのメッセージ作成イベントを参照することができる。いくつかの例では、メッセージ132は、メッセージングプラットフォーム104上の以前に投稿されたメッセージの再共有などの再共有イベントを参照してもよい。いくつかの例では、メッセージ132は、メッセージングプラットフォーム104上の以前に投稿されたメッセージのお気に入り化または好感度付けなどのエンゲージメントイベントを参照してもよい。
【0046】
メッセージングプラットフォーム104は、サブスクリプション実行器116と、イベントプロデューサシステム106と、トランスポートエンジン122とを備えている。サブスクリプション実行器116は、ネットワーク150を介して、クライアントアプリケーション126からクエリサブスクリプション要求140を受け取るとともに、クエリサブスクリプション141の基準を満たすメッセージストリーム114からのメッセージに応答して応答イベント156が生成されるように、イベントプロデューサシステム106にクエリサブスクリプション141を送信する。トランスポートエンジン122は、ネットワーク150を介して、クライアントアプリケーション126からサブスクライブ要求154を受け取るとともに、クエリサブスクリプション141がアクティブである期間中に生成される応答イベント156に応答して、クライアントアプリケーション126に、クエリサブスクリプション141の基準を満たすメッセージ132が配信チャンネル125を介してストリームされるように、トランスポートエンジン122とクライアントアプリケーション126との間の配信チャンネル125を確立する。
【0047】
いくつかの例では、メッセージ132は、1つまたは複数のタイムライン130にストリーミングされる。いくつかの例では、メッセージ132は、タイムライン130上で時系列にストリーミングされる。いくつかの例では、メッセージ132は、タイムライン130上で逆時系列順にストリーミングされる。いくつかの例では、メッセージ132は、タイムライン130上で順位付けされる。いくつかの例では、メッセージ132は、タイムライン130上でランク付けされない。いくつかの例では、タイムライン130は、検索基準にマッチするメッセージ132をリアルタイムでストリーミングするユーザインタフェース128上の列(例えば、検索列)である。例えば、ユーザは、クライアントアプリケーション126を用いて、検索語「犬」(dog)を備えているメッセージ132を取得するべくアクティブクエリを送信してもよく、クライアントアプリケーション126は、アクティブクエリが期限切れになるまで(例えば、ユーザがクエリを閉じるアクションを実行するか、アクティブクエリがタイムアウトする)検索語「犬」を備えているタイムライン130上のメッセージ132をストリーミングする。
【0048】
いくつかの例では、タイムライン130は、クライアントアプリケーション126が、メッセージングプラットフォーム104に格納された接続グラフ169においてユーザアカウントにリンクされたユーザアカウントからリアルタイムでメッセージ132をストリーミングする、ユーザアカウントのホームタイムラインである。いくつかの例では、タイムライン130は、クライアントアプリケーション126が、ユーザに直接送信されたメッセージ132をストリーミングする、直接メッセージタイムラインである。いくつかの例では、メッセージ132のストリームは、メッセージングプラットフォーム104上の会話に関連する会話グラフ167内のメッセージを備えている。会話グラフ167は、会話に関連するメッセージ132の返信構造を定義してもよい。いくつかの例では、会話に関連するメッセージ132は、ユーザが会話グラフ167内のメッセージ132に返信しているときに、ユーザインタフェース128に自動的にプッシュされてもよい。
【0049】
本明細書で論じるように、クエリサブスクリプション141の管理は、2つの別々のモジュール、例えば、サブスクリプション実行器116およびトランスポートエンジン122を用いることによって、メッセージ132の配信から分離される。例えば、クライアントアプリケーション126は、リアルタイムメッセージ132の受信(受け取り)を開始するべく、メッセージングプラットフォーム104に2つの要求を送信しており、例えば、1つはクエリサブスクリプション生成のためにサブスクリプション実行器116に向けられるとともに、他方は、メッセージ132を受け取るべく配信チャンネル125を確立するべくトランスポートエンジン122に向けられる。サブスクリプション実行器116は、イベントプロデューサシステム106でクエリサブスクリプション141を実行するべくクライアントアプリケーション126からクエリサブスクリプション要求140を受け取るとともに、トランスポートエンジン122は、イベントプロデューサシステム106によって識別されるメッセージ132がクライアントアプリケーション126にストリーミングされる配信チャンネル125を確立するべくクライアントアプリケーション126からサブスクリプション要求(サブスクライブ要求)154を受け取る。
【0050】
サブスクリプション実行器116は、クエリ要求を受け取るとともに、JAVA(登録商標)Script Object Notation(JSON)応答などのクエリ応答を生成するように構成されたクエリ言語プロセッサであってよい。一般に、サブスクリプション実行器116は、ネットワーク150を介して、クライアントアプリケーション126からクエリサブスクリプション要求140を受け取るとともに、クエリサブスクリプション要求140に応答してクエリサブスクリプション141を生成してイベントプロデューサシステム106に送信する。サブスクリプション実行器116は、イベントプロデューサシステム106から応答イベント156を受け取るべく応答イベントバス123にサブスクライブするとともに、応答イベント156に基づきメッセージ132を生成し(例えば、ハイドレートおよび可視性ルールを適用し)(それによって、ユーザの視点を有するメッセージ132をうる)、クライアントアプリケーション126に配信するべくトランスポートエンジン122に提供される配信イベントバス121にメッセージ132を発行する。
【0051】
いくつかの例では、サブスクリプション実行器116は、データクエリアプリケーションプログラミングインタフェース(API)118と、データクエリ実行器120とを備えている。データクエリAPI_118は、データクエリ実行器120に通信可能に接続される。いくつかの例において、データクエリAPI_118は、GraphQL_APIである。いくつかの例では、データクエリ実行器120は、GraphQL実行器である。GraphQLは、クエリ、ミューテーション、およびサブスクリプションなどの3つの操作タイプを識別してもよい。いくつかの例では、データクエリAPI_118は、サブスクリプション操作をサポートするように構成されたライブラリ(例えば、GraphQLライブラリ)を備えている。データクエリAPI_118は、ネットワーク接続(例えば、HTTP接続)を介してクライアントアプリケーション126に通信するとともに、クエリサブスクリプション141の生成および管理に関連する情報を受信および送信する。いくつかの例では、データクエリAPI_118は、イベントプロデューサシステム106から受け取られた応答イベント156に対するクエリを実行するべくデータクエリ実行器120によって使用されるエンドポイント(例えば、スリフトエンドポイント)を備えている。
【0052】
データクエリ実行器120は、応答イベントバス123を介してイベントプロデューサシステム106から応答イベント156を監視および受け取るとともに、応答イベント156をエンドポイントを介してデータクエリAPI_118に配信するとともに、データクエリAPI_118からフルメッセージ132を受け取るとともに、クライアントアプリケーション126への配信のためにトランスポートエンジン122に提供するべくメッセージ132を有する配信イベント160を配信イベントバス121へ発行する。いくつかの例では、応答イベントバス123および配信イベントバス121は、サブスクライバがイベントを受け取るべくバスにサブスクライブする(例えば、トランスポートエンジン122は配信イベントバス121にサブスクライブするとともに、データクエリ実行器120は応答イベントバス123にサブスクライブする)別々の分散待ち合わせシステムである。また、本開示でさらに後述するように、データクエリ実行器120は、サブスクリプションの更新を管理してもよい。
【0053】
トランスポートエンジン122は、メッセージ132をクライアントアプリケーション126にストリーミングするための配信機構である。トランスポートエンジン122は、ネットワーク150を介してクライアントアプリケーション126に通信可能に接続されている。トランスポートエンジン122は、ネットワーク接続(例えば、HTTP接続)を介してクライアントアプリケーション126に通信するとともに、トランスポートエンジン122とクライアントアプリケーション126との間に確立された配信チャンネル125の生成に関連する情報を受信および送信する。トランスポートエンジン122が配信イベント160を受け取ると、トランスポートエンジン122は、配信イベント160に備えられるメッセージ132を配信チャンネル125上にストリーミングする。さらに、トランスポートエンジン122は、クライアントアプリケーション126からサブスクリプション更新要求を受け取ってクエリサブスクリプション141を更新するとともに、これをサブスクリプション実行器116に提供しており、さらにイベントプロデューサシステム106に提供してクエリサブスクリプション141を更新する。
【0054】
イベントプロデューサシステム106は、メッセージキュー112のメッセージストリーム114のメッセージに対してクエリをマッチングすることで、ストリーミング検索-クエリ-結果をサポートするように構成されている。イベントプロデューサシステム106は、イベントプロデューサマネージャ108、1つまたは複数のイベントプロデューサ110、およびコレクタサービス170を備えてもよい。いくつかの例では、イベントプロデューサマネージャ108は、APIである。イベントプロデューサマネージャ108は、サブスクリプション実行器116のデータクエリAPI_118に通信するとともに、新しいクエリサブスクリプション141を受け取るように構成されている。イベントプロデューサマネージャ108は、クエリサブスクリプション141を受け取るとともに、クエリサブスクリプション141をイベントプロデューサ110のうちの1つまたは複数に割り当ててもよい。例えば、イベントプロデューサマネージャ108は、クエリサブスクリプション141を受け取るとともに、クエリサブスクリプション141がイベントプロデューサ110(またはグループ内の各イベントプロデューサ110)に格納されるように、クエリサブスクリプション141をイベントプロデューサ110(またはイベントプロデューサ110のグループ)に割り当ててもよい。
【0055】
イベントプロデューサ(複数可)110は、メッセージキュー112からメッセージストリーム114を受け取るとともに、クエリサブスクリプション141の検索条件を満たすメッセージ132を識別する。いくつかの例では、メッセージストリーム114は、メッセージングプラットフォーム104上で生成されたすべてのメッセージ132の大きなストリームである。いくつかの例では、メッセージストリーム114は、1秒当たり10kメッセージを超える速度で配信されるメッセージを備えている。いくつかの例では、メッセージストリーム114は、1秒当たり25kメッセージを超えるレートで配信されるメッセージを備えている。いくつかの例では、メッセージストリーム114は、1秒当たり50kメッセージを超えるレートで配信されるメッセージを備えている。いくつかの例では、メッセージストリーム114は、メッセージングプラットフォーム104上で作成および投稿されたメッセージに対するメッセージ作成イベント、メッセージングプラットフォーム104上で再共有された既存のメッセージに対するメッセージ再共有イベント、および/またはメッセージングプラットフォーム104上でお気に入り化または好きになっている既存のメッセージに対するエンゲージメントイベントを備えている。
【0056】
図2は、一態様によるクエリサブスクリプション生成の動作をさらに詳細に描いたシステム100を示す図である。図1および図2を参照すると、クライアントアプリケーション126は、クエリサブスクリプション要求140を生成するとともに、ネットワークを介して、サブスクリプション実行器116のデータクエリAPI_118にクエリサブスクリプション要求140を送信しうる。いくつかの例では、ユーザは、クライアントアプリケーション126のユーザインタフェース128を用いて、アクティブクエリを送信してもよく、アクティブクエリの送信に応答して、クライアントアプリケーション126は、クエリサブスクリプション要求140を生成するとともに、送信してもよい。いくつかの例では、クエリサブスクリプション要求140は、新しいクエリサブスクリプション141を開始するとともに、イベントプロデューサシステム106におけるクエリサブスクリプション141の実装を開始するように構成されている。いくつかの例において、クエリサブスクリプション要求140は、ハイパーテキスト転送プロトコル(HTTP)上のGraphQLサブスクリプションクエリである。
【0057】
クエリサブスクリプション要求140は、サブスクリプションデータ142を備えていることができる。サブスクリプションデータ142は、1つまたは複数のクエリ用語144と、ユーザのユーザ識別子146とを備えている。いくつかの例では、クエリ用語144は、ユーザによって提供される検索語を備えている。いくつかの例では、サブスクリプションデータ142は、変数および1つまたは複数の操作名を備えている。いくつかの例では、サブスクリプションデータ142は、クライアントアプリケーション識別子、および認証されたユーザ識別子を備えている。いくつかの例では、クエリサブスクリプション要求140は、クエリサブスクリプション141がアクティブである時間値を示す有効期限148を備えている。時間量が有効期限148を超える場合、クエリサブスクリプション141は、(更新要求を受け取らない限り)タイムアウトしたと見なされてもよい。いくつかの例では、クライアントアプリケーション126は、有効期限(時間)148の値を判定しており、この値は、クライアントアプリケーション126によって送信された時間量および/または更新されたサブスクリプションの数に依存してもよい。
【0058】
クエリサブスクリプション要求140の受け取りに応答して、サブスクリプション実行器116は、サブスクリプションデータ142のクエリ用語(複数可)144に基づきトランスポートトピック134を識別する。トランスポートトピック134は、トランスポートエンジン122によって検出可能である記述的および/または数値的識別子であってよい。いくつかの例では、サブスクリプション実行器116は、複数のトランスポートトピックを定義するトピックライブラリ135を用いてトランスポートトピック134を識別する。例えば、サブスクリプション実行器116は、トピックライブラリ135内の複数のトランスポートトピックのうち、クエリ用語(複数可)144に対応する1つを識別してもよい。いくつかの例では、サブスクリプション実行器116が、クエリ用語(複数可)144を用いてトピックライブラリ135からトランスポートトピック134を識別できない場合、サブスクリプション実行器116は、クエリサブスクリプション141が失敗したことを示す応答を生成して送信してもよい。いくつかの例では、データクエリAPI_118は、サブスクリプションデータ142を用いてトランスポートトピック134を識別する。いくつかの例では、データクエリ実行器120は、サブスクリプションデータ142を用いてトランスポートトピック134を識別する。
【0059】
クエリサブスクリプション要求140の受け取りに応答して、サブスクリプション実行器116は、サブスクリプションデータ142に基づきサブスクリプション識別子136を生成しうる。サブスクリプション識別子136は、クエリサブスクリプション141を識別する識別子であってよい。いくつかの例では、データクエリAPI_118は、サブスクリプション識別子136を生成する。いくつかの例では、データクエリ実行器120は、サブスクリプション識別子136を生成する。いくつかの例では、サブスクリプション実行器116は、ユーザ識別子146、クエリ用語(複数可)144および/または変数、操作名(複数可)、認証済みユーザ識別子および/またはクライアントアプリケーション識別子などのサブスクリプションデータ142に備えられる他の情報に基づきサブスクリプション識別子136を生成しうる。いくつかの例では、サブスクリプション実行器116は、サブスクリプションデータ142をシリアライズおよびハッシュ化して、サブスクリプション識別子136を生成するように構成されている。
【0060】
データクエリAPI_118は、ネットワーク150を介して、サブスクリプションステータス応答152をクライアントアプリケーション126に送信するように構成されている。サブスクリプションステータス応答152は、トランスポートトピック134を備えている。いくつかの例では、サブスクリプションステータス応答152は、サブスクリプション識別子136を備えている。いくつかの例では、サブスクリプションステータス応答152は、クエリサブスクリプション要求140が成功したか否かを示すステータスメッセージも備えている。
【0061】
サブスクリプションステータス応答152を受け取ると、クライアントアプリケーション126は、ネットワーク150を介して、サブスクライブ要求154を生成するとともに、トランスポートエンジン122に送信することができる。サブスクライブ要求154は、トランスポートトピック134を備えている。いくつかの例では、クライアントアプリケーション126は、サブスクライブ要求154のために、サブスクリプションステータス応答152で識別されたトランスポートトピック134を使用する。いくつかの例では、クライアントアプリケーション126は、サブスクリプション実行器116と同じ方法でサブスクリプションデータ142を用いてトランスポートトピック134を識別する。いくつかの例では、サブスクライブ要求154は、サブスクリプション識別子136を備えている。いくつかの例では、サブスクライブ要求154は、ユーザ識別子146を備えている。いくつかの例では、クライアントアプリケーション126は、サブスクリプションステータス応答152の受け取りに応答してサブスクライブ要求154を送信する。いくつかの例では、クライアントアプリケーション126は、クエリサブスクリプション要求140の送信に実質的に並行してサブスクライブ要求154を送信する。いくつかの例では、クライアントアプリケーション126は、クエリサブスクリプション要求140を送信するとともに、その後、クエリサブスクリプション要求140の送信から500ミリ秒未満の期間内にサブスクライブ要求154を送信する。いくつかの例では、クライアントアプリケーション126は、クエリサブスクリプション要求140を送信するとともに、次に、クエリサブスクリプション要求140を送信してから100~200msの期間内にサブスクライブ要求154を送信する。
【0062】
サブスクライブ要求154に応答して、トランスポートエンジン122は、クライアントアプリケーション126との間に配信チャンネル125を確立して、クライアントアプリケーション126にメッセージ132をストリーミングする。配信チャンネル125は、配信チャンネル125を介して配信されるメッセージ132がトランスポートトピック134に対応するように、トランスポートトピック134に関連付けられる。いくつかの例では、トランスポートエンジン122は、クライアントアプリケーション126を、ユーザ識別子146およびクエリ用語144(および/または投稿者識別子)に対応するトランスポートトピック134にサブスクライブさせる。配信チャンネル125は、クエリサブスクリプション141がアクティブである間、開いたままであり、アクティブなままである。いくつかの例では、トランスポートエンジン122は、チャンネル識別子を配信チャンネル125に割り当てる。いくつかの例では、トランスポートエンジン122は、ネットワーク150を介して、チャンネル識別子をクライアントアプリケーション126に送信する。クライアントアプリケーション126は、配信チャンネル125に定期的に(例えば、2分ごとに)再サブスクライブしてもよい。クライアントアプリケーション126は、クエリがアクティブであること(例えば、可視検索列がユーザインタフェース128に表示されること)に応答して、再サブスクライブ要求を自動的に送信してもよい。クエリが終了する(例えば、列がユーザインタフェース128からスクロールされる)と、クライアントアプリケーション126は、トランスポートエンジン122にメッセージを送信してトランスポートトピック134からのサブスクリプションを解除(アンサブスクライブ)するとともに、それによって配信チャンネル125を閉じてもよい。
【0063】
図3は、或る態様による、イベントプロデューサシステム106においてクエリサブスクリプション141を構成するとともに、イベントプロデューサシステム106から応答イベント156を受け取る、イベントプロデューサシステム106およびサブスクリプション実行器116の動作例を描いたシステム100を示す図である。図4は、配信イベント160をトランスポートエンジン122に配信するためのサブスクリプション実行器116およびトランスポートエンジン122の動作例を描いたシステム100を示す図である。
【0064】
クエリサブスクリプション要求140の受け取りに応答して、データクエリAPI_118は、クエリサブスクリプション141を生成してイベントプロデューサマネージャ108に送信する。データクエリAPI_118は、クエリサブスクリプション141をイベントプロデューサマネージャ108へのスリフト要求として送信してもよい。スリフト要求は、メッセージングプラットフォーム104の様々な構成要素同士間で通信するべく使用されるリモートプロシージャコールシステムであってよい。クエリサブスクリプション141は、サブスクリプションデータ142(例えば、クエリ用語(複数可)144、およびユーザ識別子146を備えうる)を備えている。いくつかの例では、クエリサブスクリプション141は、サブスクリプション識別子136を備えている。いくつかの例では、クエリサブスクリプション141は、有効期限148を備えている。いくつかの例では、イベントプロデューサマネージャ108に送信されたクエリサブスクリプション141は、イベントプロデューサシステム106が応答イベント156でそれらを返すとともに、応答イベント156によって識別されるメッセージ132をハイドレートしルーティングするのに十分なコンテキストを提供できるように、ユーザ識別子146および他のサブスクリプション関連データを備えてもよい。イベントプロデューサマネージャ108は、有効期限148を用いて、クエリサブスクリプション141がタイムアウトしたか否かを判定してもよい。例えば、時間が有効期限148を超えた場合、イベントプロデューサマネージャ108は、イベントプロデューサ110にクエリサブスクリプション141を削除するように指示するとともに、それによって他のクエリサブスクリプション141のためのリソースを保存することができる。
【0065】
イベントプロデューサマネージャ108は、イベントプロデューサ110(またはイベントプロデューサ110のグループ)にクエリサブスクリプション141を割り当てる。いくつかの例では、イベントプロデューサマネージャ108は、ユーザ識別子146に基づきクエリサブスクリプション141を割り当てる。クエリサブスクリプション141は、イベントプロデューサ110(またはグループ内の各イベントプロデューサ110)に格納される。イベントプロデューサ110は、メッセージストリーム114からのメッセージがクエリサブスクリプション141のクエリ用語144を備えていると判定されたことに応答して応答イベント156を生成するように、応答イベント156を生成する。イベントプロデューサ110は、応答イベント156を応答イベントバス123に発行してもよい。
【0066】
いくつかの例では、コレクタサービス170は、応答イベント156を受け取るとともに、応答イベント156を応答イベントバス123(132)に発行する。いくつかの例では、本開示でより詳細に後述するように、コレクタサービス170は、同じメッセージ132に関連する応答イベント156の重複を解除するとともに、ストリーミングレートが閾値レベル未満になるように1つまたは複数の応答イベント156を破棄(破棄)するとともに、および/またはイベントプロデューサシステム106におけるクエリサブスクリプション141の健全性に関するステータスメッセージを定期的に生成しうる。各応答イベント156は、クエリサブスクリプション141にマッチするメッセージ132を一意的に識別するメッセージ識別子158を備えている。いくつかの例では、各応答イベント156は、サブスクリプションデータ142(例えば、クエリ用語(複数可)144、およびユーザ識別子146)を備えている。いくつかの例では、各応答イベント156は、サブスクリプション識別子136を備えている。いくつかの例では、各応答イベント156は、メッセージ識別子158のみを備えている。
【0067】
サブスクリプション実行器116は、イベントプロデューサシステム106によって発行された応答イベント156を取得するべく、応答イベントバス123にサブスクライブする。一般に、サブスクリプション実行器116は、メッセージ識別子158によって識別されるメッセージ132を生成し(例えば、ハイドレート)、完全なメッセージ132をトランスポートエンジン122に提供する前に可視性ルールを適用する。いくつかの例では、ハイドレート(水和)は、生成されたメッセージ132がクライアントアプリケーション126との互換性のあるフォーマットを有するとともに、ユーザ識別子146によって識別されるユーザの視点に対応するデータを備えているように、メッセージ識別子158およびユーザ識別子146からメッセージ132を生成することを指す場合がある。いくつかの例では、サブスクリプション実行器116は、メッセージ識別子158およびユーザ識別子146に基づき、JAVA(登録商標) script object no
tation(JSON)メッセージ(例えば、完全なJSONメッセージ)を生成するように構成されている。サブスクリプション実行器116がそれぞれの応答イベント156に対応する各メッセージ132を生成すると、サブスクリプション実行器116は、メッセージ132を備えている配信イベント160を配信イベントバス121に発行する。
【0068】
メッセージのハイドレート(水和)中に、サブスクリプション実行器116は、メッセージ識別子158によって識別されるメッセージ132が可視性規則に違反していると判定した場合、応答イベント156を破棄するとともに、それによって、クライアントアプリケーション126にリアルタイムメッセージ132を配信できる一方でメッセージングプラットフォーム104のセキュリティを向上させることができる。例えば、応答イベント156が、ユーザ識別子146によって識別されるユーザを制限(例えば、ブロックまたはミュート)したユーザによってオーサリングされたメッセージ132を識別する場合、サブスクリプション実行器116は、応答イベント156を破棄してもよい。
【0069】
データクエリ実行器120は、応答イベントバス123にサブスクライブする。データクエリ実行器120は、応答イベントバス123を監視して、イベントプロデューサ110によって応答イベントバス123に発行された任意の応答イベント156を取得してもよい。データクエリ実行器120は、データクエリAPI_118に通信して、応答イベントバス123から取得した各応答イベント156に応答して、メッセージ132を生成してもよい。いくつかの例では、データクエリAPI_118は、クエリとイベントの両方を受け取るとともに、クエリ実行のための基礎としてイベントを用いてもよい。
【0070】
例えば、応答イベント156について、データクエリ実行器120は、メッセージ識別子158およびサブスクリプションメタデータ(例えば、サブスクリプションデータ142および/またはサブスクリプション識別子136)をデータクエリAPI_118に配信することができる。いくつかの例では、データクエリ実行器120は、データクエリAPI_118にスリフト要求を実行して、メッセージ識別子158およびサブスクリプションメタデータを配信する。データクエリAPI_118は、メッセージ識別子158およびサブスクリプションメタデータからデータを抽出するとともに、応答イベント156に対してオリジナルのクエリサブスクリプション141を実行して、メッセージ132(例えば、完全なJSONメッセージ)を生成する。データクエリ実行器120は、データクエリAPI_118から実行結果(例えば、メッセージ132)を受け取るとともに、配信イベントバス121に配信イベント160を発行する。図4に示すように、配信イベント160は、メッセージ132を備えている。いくつかの例では、配信イベント160は、トランスポートトピック134を識別するトランスポートトピックデータ162を備えている。
【0071】
トランスポートエンジン122は、配信イベントバス121をサブスクライブして、データクエリ実行器120によって発行された配信イベント160を監視するとともに、取得する。例えば、配信イベント160が配信イベントバス121に発行されると、トランスポートエンジン122は、配信イベント160を取得するとともに、配信チャンネル125をトランスポートトピック134にマッピング(写像)するチャンネルトピックマッピング164に基づき、配信イベント160内に備えられるメッセージ132をストリームする配信チャンネル125を判定する。たとえば、トランスポートトピックデータ162は、メッセージ132に関連するトランスポートトピック134を識別してもよく、トランスポートエンジン122は、チャンネルトピックマッピング164に基づきメッセージ132をストリーミングするための適切な配信チャンネル125を識別してもよい。トランスポートエンジン122は、メッセージ132を配信チャンネル125を介してクライアントアプリケーション126にストリーミングするように構成されている。
【0072】
図5は、複数の配信チャンネル125に対するトランスポートエンジン122の例示的なオペレーションを描いたシステム100を示す図である。例えば、クライアントアプリケーション126が複数のクエリサブスクリプション141を確立した場合、トランスポートエンジン122は、各アクティブクエリサブスクリプション141に対して別々の配信チャンネル125を作成するとともに、そしてそれらのメッセージ132をそのそれぞれの配信チャンネル125上に配信する。例えば、検索語「犬」(dogs)に関連するクエリサブスクリプション141に応答して、トランスポートエンジン122は、ネットワーク150を介して、サブスクリプション実行器116から受け取られたメッセージ132を、第1配信チャンネル125-1(例えば、「犬」配信チャンネル)経由でクライアントアプリケーション126に送信する。検索語「猫」(cats)に関連するアクティブクエリサブスクリプション141に応答して、トランスポートエンジン122は、ネットワーク150を介して、サブスクリプション実行器116から受け取られたメッセージ132を、第2配信チャンネル125-2(例えば、「猫」通信チャンネル)を介してクライアントアプリケーション126に送信する。
【0073】
クライアントアプリケーション126は、メッセージングプラットフォーム104にメッセージ132を生成および受け取るための2つの要求(例えば、クエリサブスクリプション要求140およびサブスクライブ要求154)を送信するが、いくつかの例では、クライアントアプリケーション126はサブスクリプション実行器116またはトランスポートエンジン122の1つで更新しうる。いくつかの実施例では、クライアントアプリケーション126は、トランスポートエンジン122で更新する。例えば、トランスポートトピック134へのサブスクリプションは、クライアントアプリケーション126によって更新されない限り(例えば、クライアントアプリケーション126は、一定期間ごと(例えば、2分ごと)にトランスポートエンジン122で更新しなければならないか、またはクエリサブスクリプション141が失効する)時間間隔後に失効してもよい。
【0074】
図6は、一態様による更新操作の操作例を描いたシステム100を示す図である。いくつかの例では、サブスクリプション実行器116(例えば、データクエリ実行器120)は、サブスクリプションの更新を管理するように構成されている。たとえば、クライアントアプリケーション126は、ネットワーク150を介して、トランスポートトピック134へのサブスクリプションを更新するべく、トランスポートエンジン122にサブスクリプション更新要求161を送信することができる。サブスクライブ更新要求161に応答して、トランスポートエンジン122は、トランスポートトピックデータ162をデータクエリ実行器120に提供してもよい。トランスポートトピックデータ162は、トランスポートトピック134、サブスクリプション識別子136、および/または、どのイベントプロデューサ110がユーザ識別子146に対する応答イベント156を生成するべく割り当てられているかについての情報を備えてもよい。トランスポートトピックデータ162に応答して、データクエリ実行器120は、イベントプロデューサシステム106に更新コール171を送信してもよい。
【0075】
イベントプロデューサマネージャ108は、更新コール171を受け取るとともに、クエリサブスクリプション141がイベントプロデューサ110から削除されないように、有効期限148を更新してもよい。更新コール171に応答して、イベントプロデューサマネージャ108は、データクエリ実行器120によって受け取られる応答イベントバス123にステータスメッセージ166を発行してもよい。データクエリ実行器120は、トランスポートエンジン122がステータスメッセージ166をクライアントアプリケーション126に配信できるように、配信イベントバス121にステータスメッセージ166を発行してもよい。
【0076】
コンピューティング装置124は、モバイルコンピューティング装置(例えば、スマートフォン、PDA、タブレット、またはラップトップコンピュータ)または非モバイルコンピューティング装置(例えば、デスクトップコンピューティング装置)であってもよい。コンピューティング装置124はまた、例えば、コンピューティング装置124がセルラーネットワークに通信できるモバイルネットワークインタフェース、コンピューティング装置124がWi-Fi基地局に通信できるWi-Fiネットワークインタフェース、コンピューティング装置124が他のBluetooth(登録商標)装置に通信できるBluetooth(登録商標)ネットワークインタフェース、および/またはコンピューティング装置124がネットワーク150にアクセスすることを可能にするイーサネット(登録商標)接続または他の有線接続など、種々のネットワークインタフェース回路を備えている。
【0077】
サーバコンピュータ102は、単一のコンピューティング装置であってもよいし、作業負荷およびリソースを共有するべく通信可能に接続された2つ以上の分散コンピューティング装置の表現であってもよい。サーバコンピュータ102は、少なくとも1つのプロセッサと、少なくとも1つのプロセッサによって実行されたときに、少なくとも1つのプロセッサに本明細書で論じる動作を実行させる実行可能命令を格納する非一時的なコンピュータ可読媒体とを備えてもよい。
【0078】
図7は、一態様による図1のクライアントアプリケーション126のユーザインタフェース728の一例を示す図である。図7の説明は、図1図6を参照して説明された構成要素およびメッセージも参照する。いくつかの例では、クライアントアプリケーション126は、複数のタイムラインを別々の列として表示するように構成されている。例えば、ユーザは、列を追加または削除するとともに、それによってタイムラインを追加または削除することができる。いくつかの例では、検索を指定する列の追加は、クエリサブスクリプション141を開始させる。いくつかの例では、列の削除は、クエリサブスクリプション141を失効させる。いくつかの例では、ユーザは、第1タイムライン730-1を提供する第1列を追加してもよい。第1タイムライン730-1は、クエリサブスクリプション141がアクティブのままである間、特定のユーザ(例えば、ユーザA)によって生成されたメッセージ732を表示してもよい。例えば、第1列が表示されている間、ユーザAによって生成された任意のメッセージ732が第1タイムライン730-1上に表示される。例えば、ユーザAは、或る時間にメッセージングプラットフォーム104にメッセージ732を投稿してもよく、メッセージ732は、ユーザがリアルタイムまたはほぼリアルタイムでユーザAによって新たに作成されたメッセージ732を見ることができるように、メッセージ732が投稿された時間頃に第1タイムライン130-1にプッシュされうる。いくつかの例では、第1タイムライン730-1は、新しく作成されたメッセージ732が第1タイムライン730-1の最上部にプッシュされるように、時系列でレンダリングされる。
【0079】
いくつかの例では、ユーザは、ハッシュタグ#GraphQLにマッチするメッセージ732の第2タイムライン730-2を提供する第2列を追加してもよい。例えば、検索語「#GraphQL」を示す第2列の追加は、クエリサブスクリプション141を開始させる。第2タイムライン730-2は、検索語「#GraphQL」を有するコンテンツを備えているメッセージ732を表示しうる。例えば、第2列が表示されている間、検索語「#GraphQL」を備えているメッセージングプラットフォーム104上で交換された任意のメッセージ732は、第2タイムライン730-2にストリーミングされる。いくつかの例では、第2タイムライン730-2は、検索語「#GraphQL」を備えている新しく作成されたメッセージ732が第2タイムライン730-2の最上部にプッシュ(押し出)されるように、時系列でレンダリングされる。
【0080】
いくつかの例では、ユーザは、検索語「GraphQL Summit」(GraphQLサミット。GraphQL会議)を備えているメッセージ732の第3タイムライン730-3を提供する第3列を追加しうる。例えば、検索語「GraphQL Summit」を示す第3列の追加は、クエリサブスクリプション141を開始する。第3タイムライン730-3は、検索語「GraphQL Summit」にマッチするコンテンツを備えているメッセージ732を表示しうる。たとえば、第3列が表示されている間、検索語「GraphQL Summit」にマッチする任意のメッセージ732は、クエリサブスクリプション141がアクティブなまま、第3タイムライン730-3にストリーミングされる。いくつかの例では、第3タイムライン730-3は、検索語「GraphQL Summit」を備えている新しく作成されたメッセージ732が第3タイムライン730-3の最上部にプッシュ(押し出)されるように、時系列でレンダリングされる。
【0081】
図8は、一態様によるクエリサブスクリプション141に従ってリアルタイムメッセージ132をストリーミングするためのメッセージングプラットフォーム104の例示的な動作を示すフローチャート800を示す。フローチャート800は、図1図6のシステム100を参照しながら説明される。
【0082】
動作802は、クライアントアプリケーション126からのクエリサブスクリプション要求140の受け取りに応答して、サブスクリプション実行器116によって、イベントプロデューサシステム106にクエリサブスクリプション141を送信する工程を備えている。例えば、データクエリAPI_118は、クライアントアプリケーション126からネットワーク150を介してクエリサブスクリプション要求140を受け取ってもよく、データクエリAPI_118は、クエリサブスクリプション141を生成してもよい。データクエリAPI_118は、クエリサブスクリプション141をイベントプロデューサマネージャ108に送信してもよい。いくつかの例では、クエリサブスクリプション要求140は、GraphQLサブスクリプションクエリであり、データクエリAPI_118はGraphQL_APIであり、データクエリ実行器120はGraphQL実行器である。いくつかの例では、クエリサブスクリプション要求140は、クエリ用語144およびユーザ識別子146を備えている。いくつかの例では、データクエリAPI_118は、クエリサブスクリプション要求140に応答してトランスポートトピック134を識別しうる。
【0083】
動作804は、クライアントアプリケーション126からネットワーク150を介して受け取られたサブスクライブ要求154の受け取りに応答して、トランスポートエンジン122によって、クライアントアプリケーション126とトランスポートエンジン122との間に配信チャンネル125を作成する工程を備えている。たとえば、トランスポートエンジン122は、クライアントアプリケーション126からネットワーク150を介してサブスクライブ要求154を受け取るとともに、サブスクライブ要求154の受け取りに応答して配信チャンネル125を作成することができる。
【0084】
動作806は、イベントプロデューサシステム106において、クエリサブスクリプション141を満たすコンテンツを有するメッセージストリーム114からのメッセージに応答して、応答イベント156を生成する工程を備えている。例として、イベントプロデューサマネージャ108は、クエリサブスクリプション141を1つまたは複数のイベントプロデューサ110に割り当ててもよく、各イベントプロデューサ110は、メッセージストリーム114からのメッセージがクエリサブスクリプション141を満たすときに、応答イベント156を発生させる。
【0085】
動作808は、応答イベント156によって識別されるメッセージの作成者が、ユーザ識別子146に関連付けられたユーザを制限(たとえば、ブロックまたはミュート)しているか否かをサブスクリプション実行器116によって判定する工程を備えており、動作810は、作成者によってユーザが制限されていると判定されたことに応答して応答イベント156によって識別されるメッセージをサブスクリプション実行器116によって破棄する工程を備えている。たとえば、メッセージの水和(ハイドレーション。hydration)中に、サブスクリプション実行器116は、メッセージ識別子158によって識別されるメッセージ132が可視性規則に違反していると判定した場合、応答イベント156を破棄するとともに、それによって、クライアントアプリケーション126にリアルタイムメッセージ132を配信できる一方でメッセージングプラットフォーム104のセキュリティを向上させることができる。例えば、応答イベント156が、ユーザ識別子146によって識別されるユーザを制限(例えば、ブロックまたはミュート)したユーザによってオーサリングされたメッセージ132を識別する場合、サブスクリプション実行器116は、応答イベント156を破棄することができる。
【0086】
動作812は、トランスポートエンジン122によって、ユーザが作成者によって制限されていないと判定されたことに応答して、クエリサブスクリプション141がアクティブである期間中に、メッセージ132を配信チャンネル125を介してクライアントアプリケーション126のユーザインタフェース128にストリーミングする工程を備えている。例えば、トランスポートエンジン122が配信イベント160を受け取ると、トランスポートエンジン122は、ネットワーク150を介して、メッセージ132(可視性規則に違反しないもの)を、クライアントアプリケーション126にストリーミングする。
【0087】
図9は、或る態様による、メッセージングプラットフォーム104上でアクティブクエリを生成するとともに、アクティブクエリにマッチするメッセージ132のストリームを受け取るためのクライアントアプリケーション126の動作例を描いたフローチャート900を示す。フローチャート800は、図1図6のシステム100を参照しながら説明される。
【0088】
動作902は、クライアントアプリケーション126によって、ネットワーク150を介して、クエリサブスクリプション要求140をメッセージングプラットフォーム104のサブスクリプション実行器116に送信する工程を備えており、クエリサブスクリプション要求140はサブスクリプション実行器116に、メッセージングプラットフォーム104上で交換されるメッセージのメッセージキュー112上で実行されるクエリサブスクリプション141を生成させるように構成されている。
【0089】
動作904は、クライアントアプリケーション126によって、ネットワーク150を介して、サブスクライブ要求154をメッセージングプラットフォーム104のトランスポートエンジン122に送信する工程を備えており、サブスクライブ要求154はトランスポートエンジン122に、トランスポートエンジン122とクライアントアプリケーション126との間に配信チャンネル125を作成させるように構成されている。
【0090】
動作906は、クエリサブスクリプション141がアクティブである間、メッセージ132がクライアントアプリケーション126のユーザインタフェース128上に経時的にストリーミングされるように、クライアントアプリケーション126によって、配信チャンネル125を介してクエリサブスクリプション141の基準を満たすメッセージ132のストリームを受け取る工程を備えている。
【0091】
動作908は、クライアントアプリケーション126によって、ネットワーク150を介して、サブスクライブ更新要求161をトランスポートエンジン122に定期的に送信する工程を備えており、サブスクライブ更新要求161は、トランスポートエンジン122に配信チャンネル125を更新させるとともに、サブスクリプション実行器116にクエリサブスクリプション141を更新させるように構成されている。
【0092】
例えば、サブスクライブ更新要求161に応答して、トランスポートエンジン122は、トランスポートトピックデータ162をデータクエリ実行器120に提供することができる。トランスポートトピックデータ162に応答して、データクエリ実行器120は、更新コール171をイベントプロデューサシステム106に送信してもよい。イベントプロデューサマネージャ108は、更新コール171を受け取るとともに、クエリサブスクリプション141がイベントプロデューサ110から削除されないように、有効期限148を更新してもよい。更新コール171に応答して、イベントプロデューサマネージャ108は、データクエリ実行器120によって受け取られる応答イベントバス123にステータスメッセージ166を発行してもよい。データクエリ実行器120は、トランスポートエンジン122がステータスメッセージ166をクライアントアプリケーション126に配信できるように、配信イベントバス121にステータスメッセージ166を発行してもよい。このように、クライアントアプリケーション126は、トランスポートエンジン122のみで更新してもよく、後述するように、メッセージングプラットフォーム104の構造によって、トランスポートエンジン122とサブスクリプション実行器116とにおいてクエリサブスクリプション141を更新させ、クエリサブスクリプション141を維持するべくクライアントアプリケーション126とメッセージングプラットフォーム104との間で送信される通信量を低減させればよい。
【0093】
図10Aは、或る態様による、1つまたは複数のサーバコンピュータ1002によって実行可能であるメッセージングプラットフォーム1004と、コンピューティング装置1024によって実行可能であるクライアントアプリケーション1026とを備えているシステム1000の概略図である。メッセージングプラットフォーム1004は、ネットワーク1050を介して、メッセージングプラットフォーム1004上で交換されたメッセージの大きなメッセージストリーム1014からのコンテンツにマッチするクエリサブスクリプション1041に従って、クライアントアプリケーション1026にリアルタイムメッセージ1032をストリーミングするように構成されている。メッセージングプラットフォーム1004は、イベントプロデューサシステム1006と、メッセージストリーム114を有するメッセージキュー1012と、サブスクリプション実行器1016と、トランスポートエンジン1022とを備えている。図10Bは、イベントプロデューサシステム1006をより詳細に図示している。システム1000は、図1図6のシステム100の一例であってよく、前の図を参照して議論された特徴のいずれかを備えてよい。
【0094】
イベントプロデューサシステム1006は、イベントプロデューサマネージャ1008と、イベントプロデューサマネージャ1008に通信可能に接続されたイベントプロデューサ1010と、イベントプロデューサ1010に通信可能に接続されたコレクタサービス1070とを備えている。イベントプロデューサマネージャ1008は、クエリサブスクリプション1041を取得するとともに、クエリサブスクリプション1041の基準に従ってメッセージストリーム1014からコンテンツを照合(マッチ)するようにイベントプロデューサ1010を構成した。
【0095】
いくつかの例では、イベントプロデューサマネージャ1008は、倹約要求を介してクエリサブスクリプション1041を受け取るように構成されたAPIである。いくつかの例では、イベントプロデューサマネージャ1008は、サブスクリプション実行器1016からクエリサブスクリプション1041を受け取るように構成されている。クエリサブスクリプション1041は、メッセージストリーム1014からメッセージを識別するべく使用される基準を定義してもよい。いくつかの例では、クエリサブスクリプション1041は、GraphQLクエリサブスクリプションである。クエリサブスクリプション1041は、クエリサブスクリプション1041に関する情報を提供するサブスクリプションデータを備えている。いくつかの例では、クエリサブスクリプション1041は、1つまたは複数のクエリ用語、ユーザ識別子、有効期限、および/またはサブスクリプション識別子を備えている。
【0096】
イベントプロデューサ1010は、メッセージストリーム1014に対して比較的多数のクエリサブスクリプション1041を実行するべく、イベントプロデューサグループ1013にアレンジされる。例えば、イベントプロデューサシステム1006は、第1イベントプロデューサグループ1013-1、第2イベントプロデューサグループ1013-2、第3イベントプロデューサグループ1013-3、および第4イベントプロデューサグループ1013-4など、複数のイベントプロデューサグループ1013を備えてもよい。図10Bでは、4つのイベントプロデューサグループ1013が図示されているが、イベントプロデューサグループ1013は、任意の数のイベントプロデューサグループ1013を備えてもよい。各イベントプロデューサグループ1013は、完全なメッセージストリーム1014を受け取るように構成されている。言い換えれば、各イベントプロデューサグループ1013は、フルメッセージストリーム1014を独立して監視するように構成されている。各イベントプロデューサグループ1013は、複数のイベントプロデューサ1010を備えている。図10Bは、各イベントプロデューサグループ1013内の4つのイベントプロデューサ1010を図示しているが、各イベントプロデューサグループ1013は、任意の数のイベントプロデューサ1010を備えてもよく、それはイベントプロデューサグループ1013全体で同じ数でも異なる数であってもよい。
【0097】
それぞれのイベントプロデューサグループ1013内の各イベントプロデューサ1010は、メッセージストリーム1014の別個の部分を受け取ってもよい。例えば、メッセージストリーム1014は、特定のイベントプロデューサグループ1013内のイベントプロデューサ1010同士間で分割される(例えば、均等に分割される、または不等に分割される)。例えば、第1イベントプロデューサグループ1013-1内に4つのイベントプロデューサ1010がある場合、第1イベントプロデューサはメッセージストリーム1014の第1部分を受け取るとともに、第2イベントプロデューサはメッセージストリーム1014の第2部分を受け取るとともに、第3イベントプロデューサはメッセージストリーム1014の第3部分を受け取るとともに、第4イベントプロデューサはメッセージストリーム1014の第4部分を受け取るとともに、第1から第4部分はメッセージストリーム1014全体をカバーする。
【0098】
各イベントプロデューサグループ1013は、クエリサブスクリプション1041の一部を割り当てられている。例えば、100個のクエリサブスクリプション1041がある場合、25個のクエリサブスクリプション1041が第1イベントプロデューサグループ1013-1に割り当てられてもよく、25個のクエリサブスクリプション1041が第2イベントプロデューサグループ1013-2に割り当てられるとともに、25個のクエリサブスクリプション1041が第3イベントプロデューサグループ1013-3に割り当てられてもよく、25個のクエリサブスクリプション1041が第3イベントプロデューサグループ1013-3に割り当てられもする。しかしながら、クエリサブスクリプション1041の数は、数千または数百万であってもよいことに留意されたい。
【0099】
イベントプロデューサマネージャ1008は、クエリサブスクリプション1041を受け取るとともに、イベントプロデューサグループ1013のうちの少なくとも1つにクエリサブスクリプション1041を割り当ててもよい。いくつかの例では、イベントプロデューサマネージャ1008は、クエリサブスクリプション1041のユーザ識別子に基づき、クエリサブスクリプション1041をイベントプロデューサグループ1013に割り当てる。いくつかの例では、イベントプロデューサマネージャ1008は、ユーザ識別子を用いてモジュロ演算を実行するとともに、モジュロ演算の結果に基づきクエリサブスクリプション1041を割り当てるように構成されている。クエリサブスクリプション1041は、割り当てられたイベントプロデューサグループ1013内のイベントプロデューサ1010の各々に格納される。
【0100】
いくつかの例では、イベントプロデューサマネージャ1008は、クエリサブスクリプション1041を2つのイベントプロデューサグループ1013に、例えば、第1イベントプロデューサグループと第2イベントプロデューサグループとに割り当てる。例えば、イベントプロデューサマネージャ1008は、第1イベントプロデューサグループ1013-1と第3イベントプロデューサグループ1013-3とにクエリサブスクリプション1041を割り当ててもよく、第1イベントプロデューサグループ1013-1と第3イベントプロデューサグループ1013-3内のイベントプロデューサ1010の各々は、クエリサブスクリプション1041をメモリに格納する。このようにして、イベントプロデューサグループ1013の1つが故障した場合でも、クエリサブスクリプション1041に割り当てられた他のイベントプロデューサグループ1013によって、クエリサブスクリプション1041を実行することができる。
【0101】
いくつかの例では、イベントプロデューサマネージャ1008は、各イベントプロデューサグループ1013に対して割り当てられ実行されているクエリサブスクリプション1041の数を監視するとともに、イベントプロデューサグループ1013の数および/または各イベントプロデューサグループ1013内のイベントプロデューサ1010の数を増加および/または減少するように構成されている。例えば、特定のイベントプロデューサグループ1013内のイベントプロデューサ1010の数が増加されることに応答して、各個々のイベントプロデューサ1010は、処理するべくメッセージストリーム1014から受け取るメッセージが少なく、結果として余分な検索を処理するべくより多くの計算能力を有する可能性がある。イベントプロデューサグループ1013の数が増加されることに応答して、イベントプロデューサ1010に割り当てられる検索語の数は減少されてもよい。
【0102】
各イベントプロデューサ1010は、クエリサブスクリプション1041がメッセージストリーム1014のそれぞれの部分からのメッセージに照会されることに応答して、応答イベント1056を生成するように構成されている。先の図に関して示したように、各応答イベント1056は、メッセージ識別子と、クエリサブスクリプション1041に関する情報を提供するサブスクリプションデータとを備えている。また、各イベントプロデューサ1010は、それぞれのイベントプロデューサ1010におけるクエリサブスクリプション1041の健全性ステータスを示すステータス応答1075を定期的に生成するように構成されている。各ステータス応答1075は、クエリサブスクリプション1041の実行に関連するエラーがあるか否かを示しうる。例えば、ステータス応答1075は、特定のイベントプロデューサ1010におけるクエリサブスクリプション1041の処理にエラーがあることを示すfail(フェール)ステータスを示してもよく、またはステータス応答1075は、特定のイベントプロデューサ1010においてクエリサブスクリプション1041が適切に機能していることを示すokステータスを示してもよい。
【0103】
上記に示したように、いくつかの例では、クエリサブスクリプション1041は、有効期限に関連付けられている。いくつかの例では、イベントプロデューサマネージャ1008は、割り当てられたイベントプロデューサ1010においてクエリサブスクリプション1041がアクティブである時間の量を監視するように構成されており、時間が有効期限によって指定された値を超える場合、イベントプロデューサマネージャ1008は、割り当てられたイベントプロデューサ1010にメモリからクエリサブスクリプション1041を削除するよう命令してクエリサブスクリプション1041を不活性化するとともに、それによってイベントプロデューサシステム1006におけるリソースを保存しうる。しかしながら、イベントプロデューサマネージャ1008は、有効期限が切れる前に更新呼び出しを受け取って、有効期限を更新するとともに、それによってクエリサブスクリプション1041を更新してもよい。
【0104】
コレクタサービス1070は、イベントプロデューサ1010から応答イベント1056を受け取るとともに、応答イベント1056を応答イベントバス1023に発行するように構成されている。いくつかの例では、コレクタサービス1070は、応答イベントによって識別されるメッセージが応答イベントバス1023に既に発行されているか否かを判定するとともに、その後、クライアントアプリケーションに送信されるメッセージの重複を回避するべく、メッセージが応答イベントバス1023に既に発行されていると判定されることに応答して応答イベント1056を破棄することができる。いくつかの例では、コレクタサービス1070は、期間(例えば、1秒)内の応答イベント1056の数がストリーミングレート閾値を超えたか否かを判定するとともに、1つまたは複数の応答イベント1056を破棄する(例えば、応答イベントバス123に1つまたは複数の応答イベント1056を発行しない)ことができる。
【0105】
また、コレクタサービス1070は、イベントプロデューサ1010からステータス応答1075を受け取るとともに、応答イベントバス1023上でステータスメッセージを発行することで、ステータスメッセージ1066(例えば、fail(フェール。失敗)、ok(大丈夫)、および/または更新(renew))を定期的に送信するように構成されている。ステータスメッセージ1066がエラーを示す場合、クライアントアプリケーション1026は、クエリサブスクリプション1041を再開(再始動。再起動。restart)するべく、クエリサブスクリプション要求およびサブスクライブ要求を送信することが要求されうる。例えば、コレクタサービス1070は、イベントプロデューサ1010からステータス応答1075を受け取るとともに、ステータス応答1075に基づきクエリサブスクリプション1041の健全性ステータスを判定するとともに、クエリサブスクリプション1041の健全性ステータスを示すステータスメッセージの送信を開始することができる。
【0106】
図11は、或る態様によるコレクタサービス1170の一例を示す図である。コレクタサービス1170は、図10Bのコレクタサービス1070の一例であってもよく、前の図を参照して議論された特徴のいずれかを備えてもよい。コレクタサービス1170は、応答イベントバス1023に応答イベント1056を発行する前にメモリキャッシュ1180に連携して動作するとともに、応答イベント1056によって識別されるメッセージ1032の重複を解除するとともに、および/またはメッセージ1032がストリーミングレート閾値1173未満でクライアントアプリケーション1026に配信されるようにストリーミングレートを低下させることができる。さらに、コレクタサービス1170は、メモリキャッシュ1180に連携して動作するとともに、クライアントアプリケーション1026にステータスメッセージ1066を提供するべくクエリサブスクリプション1041の健全性ステータスを判定するか、またはクエリサブスクリプション1041を再開(再始動。再起動)する工程を試みてもよい。
【0107】
コレクタサービス1170は、クライアントアプリケーション1026に既に配信されたメッセージ1032を識別する応答イベント1056を重複解除するように構成された重複解除器(De-duplicator。デデュプリケータ)1172を備えてもよい。いくつかの例では、クエリサブスクリプション1041は、イベントプロデューサ1010が重複するメッセージ1032を識別する可能性があるイベントプロデューサの障害から保護するべく、2つのイベントプロデューサグループ1013(その各々が、完全メッセージストリーム1014を受け取る)に割り当てられる。しかしながら、重複排除器1172は、同じメッセージがクライアントアプリケーション1026に複数回提供されないように、重複を識別するように構成されている。
【0108】
コレクタサービス1170が応答イベントバス1023に応答イベント1056を発行すると、コレクタサービス1170は、応答イベント1056をメモリキャッシュ1180に格納する。新しい応答イベント1056の受け取りに応答して、重複排除器1172は、メモリキャッシュ1180に照会することによって、新しい応答イベント1056のメッセージ識別子がメモリキャッシュ1180に格納されているか否かを判定する。メッセージ識別子がメモリキャッシュ1180に格納されていない(例えば、重複でないことを示す)ことに応答して、コレクタサービス1170は、応答イベントバス1023上に新しい応答イベント1056を発行するとともに、メモリキャッシュ1180に新しい応答イベント1056を格納する。新しい応答イベント1056のメッセージ識別子がメモリキャッシュ1180に格納される(例えば、重複であることを示す)ことに応答して、重複排除器1172は、新しい応答イベント1056を破棄するように構成されている。
【0109】
コレクタサービス1170は、メモリキャッシュ1180内のステータス応答1075を照会することで、クエリサブスクリプション1041に対する健全性ステータスを判定するように構成されたステータスメッセージハンドラ1174を備えてもよい。例えば、コレクタサービス1170は、イベントプロデューサ1010から定期的にステータス応答1075を受け取るとともに、ステータス応答1075をメモリキャッシュ1180に格納してもよい。ステータスメッセージハンドラ1174は、定期的にメモリキャッシュ1180に照会するとともに、特定のクエリサブスクリプション1041について割り当てられたイベントプロデューサ1010からメモリキャッシュ1180からステータス応答1075を取得するとともに、ステータスメッセージ1066(10066)を応答イベントバス123に発行することで送信してもよい。いくつかの例では、ステータス応答1075のうちの1つまたは複数がfail(フェール)ステータスを示す場合、ステータスメッセージ1066は、クライアントアプリケーション1026がクエリサブスクリプション1041を再生成することを必要としうる(例えば、クエリサブスクリプション要求およびサブスクライブ要求を送信する工程が要求されうる)。ステータス応答1075のほとんどまたはすべてがokステータスを示す場合、ステータスメッセージ1066はokステータスを示すことができる。
【0110】
いくつかの例では、コレクタサービス1170は、イベントプロデューサ1010においてクエリサブスクリプション1041を再開するように構成されたサブスクリプション再開器1176を備えている。ステータス応答1075が、イベントプロデューサ1010のうちの1つまたは複数においてクエリサブスクリプション1041にエラーがあったことを示す場合、サブスクリプション再開器1176は、応答イベント1056に関連付けられたサブスクリプションデータに基づきクエリサブスクリプション1041が修復可能か否かを判定するとともに、もしそうなら、サブスクリプション再開器1176は、否定的なステータス応答1075を報告する1つまたは複数のイベントプロデューサ110にサブスクリプションデータを送信してもよい。
【0111】
いくつかの例では、コレクタサービス1170は、応答イベント1056によって識別されるメッセージ1032がクライアントアプリケーション1026に配信されるストリーミングレートをストリーミングレート閾値1173と同じかそれ未満に制御するべく、応答イベント1056の1つまたは複数を破棄するように構成されているクォータ(Quota)チェッカ1178を備えている。いくつかの例では、ストリーミングレート閾値1173は、1秒当たり3メッセージから1秒当たり20メッセージの範囲内の値である。いくつかの例では、ストリーミングレート閾値1173は、1秒当たり10メッセージである。いくつかの例では、クォータチェッカ1178は、以前に受け取られた応答イベント1056の数が一定期間にわたって閾値を超えたことに応答して、新しい応答イベント1056を破棄するように構成されている(例えば、新しい応答イベント1056は1秒間に11番目のメッセージであり、閾値は1秒間に10メッセージである)。しかしながら、以前に受け取られた応答イベント1056の数が一定期間にわたって閾値以下である場合、コレクタサービス1170は、新しい応答イベント1056を応答イベントバス1023に発行してもよい。
【0112】
上記に示したように、コレクタサービス1170は、応答イベント1056を応答イベントバス1023に発行するとともに、発行された応答イベント1056をメモリキャッシュ1180に格納してもよい。新しい応答イベント1056に応答して、クォータチェッカ1178は、メモリキャッシュ1180に照会して、一定期間にわたってメモリキャッシュ1180に格納された応答イベント1056の数を判定するとともに、一定期間にわたってメモリキャッシュ1180に格納された応答イベント1056の数が閾値を超えることに応答して、新しい応答イベント1056を破棄してもよい。
【0113】
いくつかの例では、クォータチェッカ1178は、応答イベント1056によって識別されたメッセージ1032に対するエンゲージメント確率メトリクス1177を受け取るように構成されており、エンゲージメント確率メトリクス1177は、メッセージ1032に対するエンゲージメントの予測されたレベルを示している。クォータチェッカ1178は、ストリーミングレートがストリーミングレート閾値1173以下になるように、エンゲージメント確率メトリクス1177に基づき1つまたは複数の応答イベント1056を破棄するように構成されている。例えば、ユーザは、メッセージ1032をお気に入りにする、再共有する、および/またはメッセージ1032にコメントすることでメッセージ1032に関与することができ、これは肯定的な結果と見なされることがある。いくつかの例では、メッセージングプラットフォーム1004は、ユーザに配信されるメッセージ1032との正のエンゲージメントのレベル(例えば、ユーザがメッセージ1032とエンゲージ(例えば、お気に入り登録、再共有、および/またはコメント)する確率)を予測する機械学習リソースを備え得ており、クォータチェッカ1178はそれらのエンゲージメント確率メトリクス(エンゲージ確率メトリック)1177を受け取りうる。特定のメッセージ1032に対するエンゲージメント確率メトリクス(メトリック)1177が閾値レベル以下である場合、クォータチェッカ1178は、ストリーミングレートを制御するべくそのメッセージ1032を破棄してもよい。いくつかの例では、エンゲージメント確率メトリクス(メトリック)1177は、予測された負の結果、例えば、ユーザがメッセージ1032を虐待的であると感じる可能性がある確率を備えている。これらの例では、エンゲージメント確率メトリクス1177に基づき、クォータチェッカ1178は、虐待と考えられる(例えば、虐待的なコンテンツを備えている)より高い確率を有するメッセージ1032を破棄してもよい。
【0114】
いくつかの例では、クォータチェッカ1178は、応答イベント1056によって識別されたメッセージ1032に対するメッセージ健全性メトリクス1179を受け取るように構成されており、メッセージ健全性メトリクス1179は、メッセージングプラットフォーム1004の1つまたは複数の条件(例えば、虐待行為、憎悪行為、脅威等)を侵害するリスクレベルを示す。クォータチェッカ1178は、ストリーミングレートがストリーミングレート閾値1173以下になるように、メッセージ健全性メトリクス1179に基づき1つまたは複数の応答イベント1056を破棄するように構成されている。
【0115】
図12は、一態様によるコレクタサービス1270の一例を示す図である。コレクタサービス1270は、図11のコレクタサービス1170の例であってもよく、前の図を参照して説明した特徴のいずれかを備えてもよい。コレクタサービス1270は、第1コレクタサービスインスタンス1271-1、第2コレクタサービスインスタンス1271-2、および第3コレクタサービスインスタンス1271-3などの複数のコレクタサービスインスタンス1271を備えてもよい。図12では3つのコレクタサービスインスタンス1271が図示されているが、コレクタサービス1270は、任意の数のコレクタサービスインスタンス1271を備えてもよい。各コレクタサービスインスタンス1271は、応答イベント1056および/またはステータス応答1075の別個の部分を受け取ってもよい。例えば、第1コレクタサービスインスタンス1271-1は、応答イベント1056および/またはステータス応答1075の第1部分を受け取ってもよく、第2コレクタサービスインスタンス1271-2は、応答イベント1056および/またはステータス応答1075の第2部分を受け取ってもよく、第3コレクタサービスインスタンス1271-3は、応答イベント1056および/またはステータス応答1075の第3部分を受け取ってもよい。各コレクタサービスインスタンス1271は、図11のコレクタサービス1170の別個のインスタンスであってよい。例えば、各コレクタサービスインスタンス1271は、図11のコレクタサービス1170の動作のいずれかを実行してもよい。例えば、コレクタサービスインスタンス1271の各々は、重複排除器1172、ステータスメッセージハンドラ1174、サブスクリプション再開器(リスタ)1176、および/またはクォータチェッカ1178の機能性を備えてもよい。
【0116】
いくつかの例では、コレクタサービス1270は、2層ストリーミングレート調整処理を実行するように構成されている。例えば、第1層に関して、各コレクタサービスインスタンス1271は、応答イベント1056の個別の部分を受け取るとともに、各サブセットが個別ストリーミングレート閾値1284と等しいかそれ未満である応答イベント1056の数を備えているように、1つまたは複数の応答イベント1056を破棄して応答イベント1056のサブセットを得てもよい。第2層に関して、各コレクタサービスインスタンス1271は、そのサブセットをメモリキャッシュ1180に格納しており、コレクタサービスインスタンス1271の少なくとも1つは、サブセットを集約するとともに、集約されたサブセットがストリーミングレート閾値1173と同じかそれよりも小さい数の応答イベント1056を備えているように、集約したサブセットから1つまたは複数の応答イベント1056を破棄する。
【0117】
さらに詳細には、第1層に関して、第1コレクタサービスインスタンス1271-1は、応答イベント1056の第1部分を受け取るとともに、(個々の)個別ストリーミングレート閾値1284と同じかそれ未満のストリーミングレートを提供するべく1つまたは複数の応答イベント1056を破棄してそれらの応答イベント1056の第1サブセットを取得することができる。個別ストリーミングレート閾値が1秒当たり4メッセージである場合、第1コレクタサービスインスタンス1271-1は、1秒以内に4を超えるメッセージを破棄するとともに、第1サブセットをメモリキャッシュ1180に格納する。第2コレクタサービスインスタンス1271-2は、応答イベント1056の第2部分を受け取るとともに、個別ストリーミングレート閾値1284と等しいかそれ未満のストリーミングレートを提供するべく、1つまたは複数の応答イベント1056を破棄するとともに、それらの応答イベント1056の第2サブセットを取得してもよい。個別ストリーミングレート閾値が1秒当たり4メッセージである場合、第2コレクタサービスインスタンス1271-2は、1秒以内に4を超えるメッセージを破棄するとともに、第2サブセットをメモリキャッシュ1180に保存する。同様に、第3コレクタサービスインスタンス1271-3は、応答イベント1056の第3部分を受け取るとともに、個別ストリーミングレート閾値1284と同じかそれ未満のストリーミングレートを提供するべく1つまたは複数の応答イベント1056を破棄してそれらの応答イベント1056の第3サブセットを得てもよい。個別ストリーミングレート閾値が1秒当たり4メッセージである場合、第3コレクタサービスインスタンス1271-3は、1秒以内に4を超えるメッセージを破棄するとともに、第3サブセットをメモリキャッシュ1180に保存する。
【0118】
この時点で、メッセージの総数は12であり、ストリーミングレート閾値1173は、1秒当たり10メッセージであってもよい。第2層に関して、コレクタサービスインスタンス1271の少なくとも1つは、第1、第2、および第3サブセットを集約するとともに、集約されたサブセットがストリーミングレート閾値1173と同じかそれ未満の数の応答イベント1056を備えているように、集約されたサブセットから1または複数の応答イベント1056を破棄する。ストリーミングレート閾値1173が1秒当たり10メッセージである場合、コレクタサービスインスタンス1271の少なくとも1つは、2つの応答イベント1056を破棄するとともに、10個の応答イベント1056を応答イベントバス1023に発行する。
【0119】
いくつかの例では、コレクタサービス1270は、2層の重複排除処理を実行するように構成されている。例えば、第1層に関して、各コレクタサービスインスタンス1271は、応答イベント1056の別々の部分を受け取るとともに、同じメッセージ1032を識別する任意の応答イベント1056を除去してもよい。各コレクタサービスインスタンス1271は、応答イベント1056のそれぞれのグループをメモリキャッシュ1180に格納してもよい。コレクタサービスインスタンス1271の少なくとも1つは、メモリキャッシュ1180に照会してグループを集約するとともに、集約されたグループから同じメッセージ1032を識別する任意の応答イベント1056を破棄してもよい。
【0120】
図13は、一態様によるシステム1000の例示的な動作を描いたフローチャート1300を示す。フローチャートは、図10Aおよび図10Bのシステム1000を参照して議論されているが、図13の動作は、本明細書で議論されるシステムのいずれにも適用可能でありうる。
【0121】
動作1302は、イベントプロデューサマネージャ1008によって、サーバコンピュータ1002によって実行可能であるメッセージングプラットフォーム1004上で交換されたメッセージストリーム114を備えているメッセージキュー1012内のコンテンツにマッチするクエリサブスクリプション1041を受け取る工程を備えており、ここで、コンピューティング装置によって実行可能であるクライアントアプリケーション1026のユーザインタフェースにメッセージ1032を配信するように構成されたメッセージングプラットフォーム1004は、このような動作を行うことが可能である(1024)。
【0122】
動作1304は、イベントプロデューサマネージャ1008によって、複数のイベントプロデューサグループ1013のうちのイベントプロデューサグループ1013にクエリサブスクリプション1041を割り当てる工程を備えており、各イベントプロデューサグループ1013はメッセージキュー1012からメッセージストリーム1014を受け取るように構成されており、各イベントプロデューサグループ1013は複数のイベントプロデューサ1010を備えており、各イベントプロデューサ1010はメッセージストリーム1014の別々の部分を受け取るように構成されている。
【0123】
動作1306は、個々のイベントプロデューサ1010によって、クエリサブスクリプション1041のクエリ用語を備えているメッセージのメッセージストリーム114のそれぞれの部分からのメッセージに応答して、応答イベント1056を生成する工程を備えている。
【0124】
動作1308は、コレクタサービス1070によって、応答イベント1056を応答イベントバス1023に発行する工程を備えており、応答イベント1056は、クライアントアプリケーション1026に配信されるべきメッセージ1032のためのメッセージ識別子を備えている。
【0125】
図14は、或る態様による、図11のコレクタサービス1170および/または図12のコレクタサービス1270を備えたシステム1000による図10Aおよび図10Bの例示的な動作を示すフローチャート1400を図示している。しかしながら、図14の動作は、本明細書で議論されるシステムのいずれにも適用されうる。
【0126】
動作1402は、サーバコンピュータ1002によって実行可能であるメッセージングプラットフォーム1004上で交換されるメッセージのメッセージストリーム1014を受け取る工程を備えており、メッセージングプラットフォーム1004は、メッセージ1032をコンピューティング装置1024によって実行可能であるクライアントアプリケーション1026のユーザインタフェースに配信するように構成されている。
【0127】
動作1404は、メッセージングプラットフォーム1004上のアクティブなクエリに対するクエリサブスクリプション1041を受け取る工程を備えている。
動作1406は、クエリサブスクリプション1041のクエリ用語を備えているメッセージのメッセージストリーム1014のメッセージに応答して応答イベント1056が生成されるように、クエリサブスクリプション1041がアクティブである間に応答イベント1056を生成する工程を備えている。
【0128】
動作1408は、応答イベント1056によって識別されるメッセージがクライアントアプリケーション1026に配信されるストリーミングレートをストリーミングレート閾値1173と同じかそれ未満に制御するべく、1つまたは複数の応答イベント1056を破棄する工程を備えている。
【0129】
動作1410は、ネットワーク1050を介して、メッセージ1032を、ストリーミングレート閾値1173と等しいかまたはそれ未満である方法で、クライアントアプリケーション1026に配信する工程を備えている。
【0130】
上記の説明では、多数の詳細が記載されている。しかしながら、本開示の利益を有する当業者には、本開示の実装は、これらの特定の詳細なしに実施されうることが明らかであろう。いくつかの例において、周知の構造および装置は、説明を不明瞭にしないようにするべく、詳細ではなく、ブロック図の形態で示されている。
【0131】
詳細な説明のいくつかの部分は、コンピュータメモリ内のデータビットに対する操作のアルゴリズムおよび記号表現の観点から提示されている。これらのアルゴリズム的な記述および表現は、データ処理技術の当業者が、当業者に自分の仕事の実質を最も効果的に伝えるべく使用する手段である。アルゴリズムとは、ここでは一般に、所望の結果に至る自己矛盾のない一連の工程であると考えられている。その工程は、物理量の物理的操作を必要とするものである。通常、必ずしもそうではないが、これらの量は、格納(記憶)、転送、結合、比較、およびその他の動作(操作)が可能である電気信号または磁気信号の形をとる。これらの信号をビット、値、要素、記号、文字、用語、数などと呼ぶことは、主に一般的な使用上の理由から、時として便利であることが証明されている。
【0132】
しかしながら、これらおよび類似の用語の全ては、適切な物理量に関連付けられるべきものであり、これらの量に適用される便利なラベルに過ぎないことを心に留めておく必要がある。上記の議論から明らかなように特に別段の記載がない限り、本明細書を通じて、「識別」、「判定」、「計算」、「更新」、「送信」、「受信」(受け取り)、「生成」、「変更」等の用語を利用する議論は、物理(例えば、電子的)として表されるデータを操作および変換するコンピュータシステム、または同様の電子コンピューティング装置の動作および処理を指すことが理解されよう。コンピュータシステムのレジスタおよびメモリ内の物理的(電子的)量として表されるデータを、コンピュータシステムのメモリまたはレジスタまたは他のそのような情報記憶、送信または表示装置内の物理的量として同様に表される他のデータに操作し変換する、コンピュータシステムまたは類似の電子コンピューティング装置の動作およびプロセスを指す。
【0133】
本開示の実施態様はまた、本明細書の操作を実行するための装置に関する。この装置は、必要な目的のために特別に構成されてもよいし、コンピュータに格納されたコンピュータプログラムによって選択的に始動(起動)または再構成されている汎用コンピュータで構成されてもよい。このようなコンピュータプログラムは、非一時的なコンピュータ可読記憶媒体、例えば、フロッピー(登録商標)ディスク、光ディスク、CD-ROMおよび光磁気ディスクを備えている任意のタイプのディスク、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、EPROM、EEPROM、磁気または光カード、フラッシュメモリ、または電子命令を格納(記憶)するべく適した任意のタイプの媒体に格納されてもよいが、これらに限定されない。
【0134】
本明細書において、「例」または「例示的」という語は、例、インスタンス、またはイラストレーションとして機能することを意味するべく使用される。本明細書において「例」または「例示的」として説明される任意の態様または設計は、必ずしも、他の態様または設計よりも好ましいまたは有利であると解釈されるものではない。むしろ、「例」または「例示的」という言葉の使用は、具体的な方法で概念を提示することを意図している。本願で使用されるように、用語「または」は、排他的な「または」ではなく、包括的な「または」を意味することが意図される。すなわち、他に指定されない限り、または文脈から明らかでない限り、「XはAまたはBを備えている」は、自然な包含的順列のいずれかを意味することが意図される。つまり、XがAを備えている、XがBを備えている、またはXがAとBの両方を備えている場合、「XはAまたはBを備えている」は前述の例のいずれかを満たすことになる。さらに、本願および添付の特許請求の範囲で使用される冠詞「a」および「an」は、他に指定されない限り、または文脈から単数形を指示することが明らかでない限り、一般に「1つまたは複数」を意味すると解釈されるべきである。さらに、全体を通して「実施形態」または「一実施形態」または「実装」または「一実装」という用語の使用は、そのように記述されない限り、同じ実施形態または実装を意味することを意図していない。さらに、本明細書で使用される「第1」、「第2」、「第3」、「第4」などの用語は、異なる要素間を区別するためのラベルとして意図されており、必ずしもその数値指定に従って序列的意味を有するとは限らない。
【0135】
本明細書で提示されるアルゴリズムおよび表示は、特定のコンピュータまたは他の装置に本質的に関連するものではない。様々な汎用システムが、本明細書の教示に従ったプログラムとともに使用されてもよいし、必要な方法工程を実行するべくより特殊な装置を構築することが便利であることが判明してもよい。これらの様々なシステムのための必要な構造は、以下の説明から現れる。さらに、本開示は、任意の特定のプログラミング言語を参照して説明されない。本明細書に記載される本開示の教示を実施するべく、様々なプログラミング言語が使用されうることが理解されよう。
【0136】
上記の説明は、本開示のいくつかの実装の良好な理解を提供するべく、特定のシステム、構成要素、方法などの例など、多数の具体的な詳細を示すものである。しかしながら、当業者には、本開示の少なくともいくつかの実装が、これらの具体的な詳細なしに実施されうることが明らかであろう。他の例では、本開示を不必要に不明瞭にしないようにするべく、周知の構成要素または方法は詳細に説明されないか、または単純なブロック図形式で提示される。したがって、上記に示された具体的な詳細は、単なる例示に過ぎない。特定の実装は、これらの例示的な詳細と異なっていてもよく、それでも本開示の範囲内であることが企図される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10A
図10B
図11
図12
図13
図14
【手続補正書】
【提出日】2022-08-18
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
メッセージングプラットフォームからリアルタイムメッセージをストリーミングするためのクエリサブスクリプションを処理する方法であって、前記方法は、
ユーザ装置のクライアントアプリケーションによって、ネットワークを介して、前記メッセージングプラットフォームのサブスクリプション実行器にクエリサブスクリプション要求を送信する工程であって、前記クエリサブスクリプション要求は、前記サブスクリプション実行器に、前記メッセージングプラットフォーム上で交換されるメッセージのキュー上で実行されるべき前記クエリサブスクリプションを生成させるように構成されている、前記サブスクリプション実行器に前記クエリサブスクリプション要求を送信する工程と、
記ネットワークを介して、サブスクライブ要求を前記メッセージングプラットフォームのトランスポートエンジンに送信する工程であって、前記サブスクライブ要求は、前記トランスポートエンジンに、前記トランスポートエンジンと前記クライアントアプリケーションとの間に配信チャンネルを作成させるように構成されている、前記サブスクライブ要求を前記トランスポートエンジンに送信する工程と、
前記配信チャンネルがアクティブに維持されるとともに前記クエリサブスクリプションがアクティブである間に、前記配信チャンネルを介して、前記クエリサブスクリプションの基準を満たすメッセージのストリームを受け取る工程と、
記ネットワークを介して、前記クエリサブスクリプションが非活性化されるまで更新要求を前記トランスポートエンジンに定期的に送信する工程であって、前記更新要求は前記クエリサブスクリプションの有効期限を延ばすことで前記クエリサブスクリプションを更新するように構成されているとともに、記更新要求は、更新された前記クエリサブスクリプションのために前記トランスポートエンジンに前記配信チャンネルを更新させるように構成されている、前記更新要求を前記トランスポートエンジンに定期的に送信する工程と、
を備えている、方法。
【請求項2】
前記クエリサブスクリプション要求は、クエリ用語とユーザ識別子とを備えている、
請求項記載の方法。
【請求項3】
前記クエリサブスクリプション要求は、ハイパーテキスト転送プロトコル(HTTP)上のGraphQLサブスクリプションクエリを備えている、
請求項に記載の方法。
【請求項4】
前記方法はさらに、
記ネットワークを介して、前記サブスクリプション実行器からサブスクリプションステータス応答を受け取る工程であって、前記サブスクリプションステータス応答はトランスポートトピック識別子とサブスクリプション識別子とを備えている、前記サブスクリプションステータス応答を受け取る工程と、および
記トランスポートトピック識別子と前記サブスクリプション識別子とを備えるように前記サブスクライブ要求を生成する工程であって、前記トランスポートトピック識別子と前記サブスクリプション識別子とは前記トランスポートエンジンによって前記配信チャンネルを生成するべく使用されるように構成されている、前記サブスクライブ要求を生成する工程と、
を備えている、請求項に記載の方法。
【請求項5】
前記クエリサブスクリプション要求および前記サブスクライブ要求は、互いに実質的に並行して送信される、
請求項に記載の方法。
【請求項6】
前記方法はさらに、
前記クライアントアプリケーションのユーザインタフェース上の表示列に前記メッセージのストリームを表示する工程を備えており、
前記表示列が予め定められた時間インスタンスで前記ユーザインタフェース上に表示されることに応答して、前記更新要求は送信される、
請求項1に記載の方法。
【請求項7】
前記メッセージのストリームは、ユーザが前記表示列をリフレッシュすることなく自動的に表示される1つまたは複数のメッセージを備えている、
請求項6に記載の方法。
【請求項8】
記方法はさらに、前記表示列の作成に応答して前記クエリサブスクリプション要求を生成する工程を備えている、
請求項6に記載の方法。
【請求項9】
前記表示列は、前記メッセージングプラットフォームの接続グラフにおいて前記クライアントアプリケーションのユーザアカウントに接続されたユーザアカウントによって投稿されたメッセージを表示する、
請求項6に記載の方法。
【請求項10】
前記表示列は、前記メッセージングプラットフォーム上の会話に関連する会話グラフ内のメッセージを表示する
請求項に記載の方法。
【請求項11】
少なくとも1つのプロセッサによって実行されたときに、前記少なくとも1つのプロセッサに動作を実行させるように構成された実行可能命令を格納する非一時的なコンピュータ可読媒体であって、前記動作は、
ユーザ装置によって実行可能であるクライアントアプリケーションによって、ネットワークを介して、サーバコンピュータによって実行可能であるメッセージングプラットフォームのサブスクリプション実行器にクエリサブスクリプション要求を送信する工程であって、前記クエリサブスクリプション要求は、前記サブスクリプション実行器に、前記メッセージングプラットフォーム上で交換されるメッセージのキュー上で実行されるべきクエリサブスクリプションを生成させるように構成されている、前記サブスクリプション実行器に前記クエリサブスクリプション要求を送信する工程と
記ネットワークを介してサブスクライブ要求を前記メッセージングプラットフォームのトランスポートエンジンに送信する工程であって、前記サブスクライブ要求は前記トランスポートエンジンに前記トランスポートエンジンと前記クライアントアプリケーションとの間に配信チャンネルを作成させるように構成されており、前記配信チャンネルは閾値期間内に更新されないと延びるように構成されている、前記サブスクライブ要求を前記トランスポートエンジンに送信する工程と、
前記配信チャンネルがアクティブに維持されているとともに前記クエリサブスクリプションがアクティブである間、前記クエリサブスクリプションの基準を満たすメッセージのストリームを前記配信チャンネルを介して受け取る工程と、
前記クライアントアプリケーションのユーザインタフェース上の表示列に、前記メッセージのストリームを表示する工程と、および
前記表示列が閾値期間内に前記ユーザインタフェース上に表示されることに応答して、前記ネットワークを介して、前記トランスポートエンジンに更新要求を送信する工程であって、前記更新要求は前記クエリサブスクリプションの有効期限を延ばすことで前記クエリサブスクリプションを更新するように構成されているとともに、記更新要求は、更新された前記クエリサブスクリプションのために前記トランスポートエンジンに前記配信チャンネルを更新させるように構成されている、前記トランスポートエンジンに前記更新要求を送信する工程と、
を備えている、非一時的なコンピュータ可読媒体。
【請求項12】
前記更新要求は、前記有効期限を更新するべく、1つまたは複数のイベントプロデューサによって受け取られる更新コールの生成を引き起こすように構成されている、
請求項11に記載の非一時的なコンピュータ可読媒体。
【請求項13】
前記クエリサブスクリプション要求は、ハイパーテキスト転送プロトコル(HTTP)上のGraphQLサブスクリプションクエリである、
請求項11に記載の非一時的なコンピュータ可読媒体。
【請求項14】
前記動作はさらに、
記ネットワークを介して、前記配信チャンネルを介して、前記トランスポートエンジンからステータスメッセージを受け取る工程と、
記ステータスメッセージに応答して、前記クエリサブスクリプション要求と前記サブスクライブ要求とを再送信する工程と、
を備えている、請求項11に記載の非一時的なコンピュータ可読媒体。
【請求項15】
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサによって実行されると前記少なくとも1つのプロセッサに動作を実行させる実行可能命令を格納する非一時的なコンピュータ可読媒体と、
を備えているシステムであって、前記動作
エリサブスクリプション要求を、ネットワークを介して、メッセージングプラットフォームのサブスクリプション実行器に送信する工程であって、前記クエリサブスクリプション要求は、前記メッセージングプラットフォームに投稿されたメッセージのキュー上で実行されるべきクエリサブスクリプションを前記サブスクリプション実行器に生成させるように構成されている、前記クエリサブスクリプション要求を前記サブスクリプション実行器に送信する工程と、
サブスクライブ要求を、前記ネットワークを介して、前記メッセージングプラットフォームのトランスポートエンジンに送信する工程であって、前記サブスクライブ要求は前記トランスポートエンジンに、前記トランスポートエンジンと、ユーザ装置のクライアントアプリケーションとの間に配信チャンネルを作成させるように構成されている、前記サブスクライブ要求を前記トランスポートエンジンに送信する工程と、
前記配信チャンネルがアクティブに維持されているとともに前記クエリサブスクリプションがアクティブである間、前記クエリサブスクリプションの基準を満たすメッセージのストリームを前記配信チャンネルを介して受け取る工程と、
前記クライアントアプリケーションのユーザインタフェース上の表示列に、前記メッセージのストリームを表示する工程と、
前記表示列が閾値期間内に前記ユーザインタフェース上に表示されることに応答して、更新要求を、前記ネットワークを介して、前記トランスポートエンジンに送信する工程であって、前記更新要求は前記クエリサブスクリプションの有効期限を延ばすことで前記クエリサブスクリプションを更新するように構成されているとともに、記更新要求は、更新された前記クエリサブスクリプションのために前記トランスポートエンジンに前記配信チャンネルを更新させるように構成されている、前記更新要求を前記トランスポートエンジンに送信する工程と、
備えている、システム。
【請求項16】
前記クエリサブスクリプション要求は、クエリ用語とユーザ識別子とを備えているGraphQLサブスクリプションクエリである、
請求項15に記載のシステム。
【請求項17】
前記クエリサブスクリプション要求と前記サブスクライブ要求とは、互いに実質的に並行して送信される、
請求項15に記載のシステム。
【請求項18】
前記メッセージのストリームは、ユーザが前記表示列をリフレッシュすることなく自動的に表示される1つまたは複数のメッセージを備えている、
請求項15に記載のシステム。
【請求項19】
前記メッセージのストリームは、前記メッセージングプラットフォームの会話グラフの1つまたは複数のメッセージを備えており、
前記会話グラフの前記1つまたは複数のメッセージは、ユーザが前記表示列をリフレッシュすることなく表示される、
請求項15に記載のシステム。
【請求項20】
少なくとも1つのプロセッサによって実行されると前記少なくとも1つのプロセッサに動作を実行させる実行可能命令を格納する非一時的なコンピュータ可読媒体であって、前記動作は、
ネットワークを介して、ユーザ装置からクエリサブスクリプションを作成するためのクエリサブスクリプション要求を受け取る工程と、
前記クエリサブスクリプションをメッセージングプラットフォームの1つまたは複数のイベントプロデューサに格納する工程と、
前記クエリサブスクリプションがアクティブである間に複数の応答イベントを生成する工程であって、前記複数の応答イベントのうちの前記各応答イベントは、前記クエリサブスクリプションにマッチする前記メッセージングプラットフォームに投稿されたメッセージに応答して生成される、前記応答イベントを生成する工程と、
前記ネットワークを介して、前記ユーザ装置からサブスクライブ要求を受け取る工程と、
前記サブスクライブ要求に応答して、トランスポートエンジンと前記ユーザ装置との間に配信チャンネルを生成する工程であって、前記クエリサブスクリプションがアクティブである間に前記配信チャンネルはアクティブに維持される、前記配信チャンネルを生成する工程と、
前記応答イベントによって識別されるメッセージを、前記配信チャンネルを介して前記ユーザ装置にストリーミングする工程と、および
前記クエリサブスクリプションが不活性化されるまで、前記ネットワークを介して、前記ユーザ装置から更新要求を定期的に受け取る工程であって、前記更新要求は前記クエリサブスクリプションの有効期限を延長することで前記クエリサブスクリプションを更新するように構成されており、前記更新要求は前記トランスポートエンジンに、更新された前記クエリサブスクリプションの前記配信チャンネルを更新させるように構成されている、前記更新要求を定期的に受け取る工程と、
を備えている、非一時的なコンピュータ可読媒体。
【外国語明細書】