JP2021535515A - イベントコンテンツ配信 - Google Patents

イベントコンテンツ配信 Download PDF

Info

Publication number
JP2021535515A
JP2021535515A JP2021511659A JP2021511659A JP2021535515A JP 2021535515 A JP2021535515 A JP 2021535515A JP 2021511659 A JP2021511659 A JP 2021511659A JP 2021511659 A JP2021511659 A JP 2021511659A JP 2021535515 A JP2021535515 A JP 2021535515A
Authority
JP
Japan
Prior art keywords
topic
event
subscription
client devices
channel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2021511659A
Other languages
English (en)
Inventor
ジン ジエ
ノーランダー ダスティン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Twitter Inc
Original Assignee
Twitter Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Twitter Inc filed Critical Twitter Inc
Publication of JP2021535515A publication Critical patent/JP2021535515A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/70Admission control; Resource allocation
    • H04L47/82Miscellaneous aspects
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • H04L67/30Profiles
    • H04L67/303Terminal profiles
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1031Controlling of the operation of servers by a load balancer, e.g. adding or removing servers that serve requests
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/146Markers for unambiguous identification of a particular session, e.g. session cookie or URL-encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/54Presence management, e.g. monitoring or registration for receipt of user log-on information, or the connection status of the users
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/55Push-based network services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/62Establishing a time schedule for servicing the requests
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/63Routing a service request depending on the request content or context
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/28Timers or timing mechanisms used in protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Transfer Between Computers (AREA)
  • Medicines Containing Material From Animals Or Micro-Organisms (AREA)

Abstract

イベントコンテンツを配信するための、方法、システム、及び、コンピュータ記憶媒体上にエンコードされたコンピュータプログラムを含む装置。方法の1つは、1つ又は複数のクライアントデバイスについて、トピックへのサブスクリプションを開始するステップと、トピックに関するイベントを受信するステップと、トピックに対応するチャンネルサーバの数を決定するステップであって、各チャンネルサーバは、1つ又は複数のクライアントデバイスに関連付けられている、ステップと、トピックに対応するチャンネルサーバの数がチャンネルサーバの閾値数より大きいと決定するステップと、トピックに対応するチャンネルサーバの数がチャンネルサーバの閾値数より大きいとの決定に応じて、イベントプロセッサからの受信されたイベントをイベントファンアウトキューに書き込むステップと、イベントファンアウトキューからの受信されたイベントを読み出すステップと、受信されたイベントを、各チャンネルサーバそれぞれに関連する1つ又は複数のクライアントデバイスに送信するステップと、を含む。

Description

本明細書は、イベントコンテンツを1つ又は複数のユーザデバイスに提供することに関する。
従来の要求−応答モデルは、第1のコンピューティングデバイスが、情報を求める要求を第2のコンピューティングデバイスに送信すること、次いで要求に対する応答を第2のコンピューティングデバイスから受信することを含む。
対して、従来のトピックベースのパブリッシュ−サブスクライブモデルにおいては、コンピューティングデバイスのユーザが、特定のトピックにサブスクライブすることができる。トピックについてパブリッシュされたコンテンツは、トピックにサブスクライブされた全てのユーザに提供される。例えば、サブスクリプションは、トピックに関連付けられているとして識別されたメッセージを、トピックにサブスクライブされた各コンピューティングデバイスに送信するように構成されたサーバによってホストされ得る。一旦トピックにサブスクライブされると、コンピューティングデバイスは、通常、サーバへの個々の要求を実施することなく、進行中のサブスクリプションコンテンツを受信する。
本明細書は、トピックにサブスクライブし、トピックに関係したコンテンツを受信するための技術を説明する。
これらの技術は、概して、ユーザからのサブスクリプション要求を受信するシステムに関する。各サブスクリプション要求は、ユーザがそれについての情報を受信したいトピックを識別する。サブスクリプション要求に応答して、システムは、システムのチャンネルサーバによってホストされるトピックへのサブスクリプションセッションを開始する。サブスクリプションセッションは、ユーザがサブスクリプション要求を行うために使用したクライアントに対して一意である。チャンネルサーバは、イベントと呼ばれる、特に定義された、トピックに関係した情報をクライアントに送信する。
トピックについてのイベントが受信されるとき、イベント情報が、トピックへのサブスクリプションをホストするチャンネルサーバに対応する1つ又は複数のイベントキューに追加される。システムが同じトピックへのサブスクリプションをホストするチャンネルサーバの数が閾値を上回ることを判定した場合、ファンアウトキュー(fan-out queue)が使用されて、個々のイベントキューへのイベント情報の過度の書き込みを制限する。とりわけ、ファンアウトキューに書き込まれたイベントは、トピックのサブスクリプションをホストするチャンネルサーバの全てに提供され得る。例えば、チャンネルサーバは、ファンアウトキューから周期的に読み出して、イベントを取得することができる。
概して、本明細書において説明される主題の1つの革新的な態様は、1つ又は複数のクライアントデバイスの各々のためにトピックへのサブスクリプションを開始するアクションと、イベントプロセッサ上で、トピックに該当したイベントを受信するアクションと、いくつのチャンネルサーバがトピックを扱っているのかを判定するアクションであって、ここで、各チャンネルサーバは1つ又は複数のクライアントデバイスによってサブスクライブされたトピックを扱う(handle)、アクションと、トピックを扱っているチャンネルサーバの数がチャンネルサーバの閾値数よりも大きいことを判定するアクションと、トピックに対応するチャンネルサーバの数がチャンネルサーバの閾値数よりも大きいという判定に応答して、イベントプロセッサから受信されたイベントをイベントファンアウトキューに書き込むアクションと、チャンネルサーバによって、受信されたイベントをイベントファンアウトキューから読み出すアクションと、トピックを扱っている各チャンネルサーバそれぞれから受信されたイベントを、トピックにサブスクライブされた1つ又は複数のクライアントデバイスに送信するアクションとを含む方法において具現化されてよい。
この態様の他の実施形態は、方法のアクションを実施するように各々構成された、対応するコンピュータシステム、装置、及び1つ又は複数のコンピュータストレージデバイス上に記録されたコンピュータプログラムを含む。特定の動作又はアクションを実施するように構成されることになる1つ又は複数のコンピュータのシステムの場合、システムは、動作においてシステムに動作又はアクションを実施させる、ソフトウェア、ファームウェア、ハードウェア、又はそれらの組合せをそれにインストールしていることを意味する。特定の動作又はアクションを実施するように構成されることになる1つ又は複数のコンピュータプログラムの場合、1つ又は複数のプログラムは、データ処理装置によって実行されるときに、装置に動作又はアクションを実施させる命令を含むことを意味する。
上述の、及び他の実施形態は、各々、オプションで、以下の特徴のうちの1つ又は複数を、単独で、又は組み合わせて含むことができる。とりわけ、一実施形態は、全ての以下の特徴を組み合わせて含む。1つ又は複数のクライアントデバイスの各々のためにトピックへのサブスクリプションを開始することは、1つ又は複数のクライアントデバイスの各々から、1つ又は複数のクライアントデバイスからの1つ又は複数のサブスクリプション要求を受信することであって、ここで、1つ又は複数のサブスクリプション要求はトピックを含む、ことと、1つ又は複数の受信されたサブスクリプション要求に応答して、開始されるサブスクリプションごとに、クライアントデバイスに関連付けられたセッション識別子をトピックへのセッション識別子のマッピングに追加することを含む、1つ又は複数のクライアントデバイスのためにトピックへの1つ又は複数のサブスクリプションを開始することとを含む。
サブスクリプションを開始することは、クライアントデバイスに構成パケットを送信することを含み、ここで、構成パケットは、クライアントデバイスに対して一意の(unique)1つ又は複数のサブスクリプションタイマーを含む。1つ又は複数のサブスクリプションタイマーは、クライアントデバイスに関連付けられたユーザがアイドルであることを示し、ここで、アイドルであることは、ユーザが閾値量の時間よりも長い間それらのクライアントデバイスと対話(interact)していないことを含むことができる。判定された数のチャンネルサーバから受信されたイベントを、各チャンネルサーバそれぞれに関連付けられた1つ又は複数のクライアントデバイスに送信することは、1つ又は複数のクライアントデバイスがアイドルではないことを判定することと、判定された数のチャンネルサーバから受信されたイベントを、各チャンネルサーバそれぞれに関連付けられた1つ又は複数のクライアントデバイスに送信することとをさらに含む。方法は、1つ又は複数のクライアントデバイスがアイドルであることを判定することと、1つ又は複数のチャンネルサーバを1つ又は複数のアイドルクライアントデバイスから切り離すこととをさらに含む。方法は、1つ又は複数のクライアントデバイスがもはやアイドルではないことを判定することと、1つ又は複数のチャンネルサーバを1つ又は複数のクライアントデバイスに再び関連付けることとをさらに含む。1つ又は複数のサブスクリプション要求は、ブロードキャストに関係した1つ又は複数のエンゲージメント(engagements)を受信するための要求であり、1つ又は複数のエンゲージメントは、ライク(likes)及び再ブロードキャストを含み、ここで、トピックは、ブロードキャストに関係した情報を含むことができる。1つ又は複数のサブスクリプション要求は、1人又は複数の参加者との会話(conversation)に関係した1つ又は複数のエンゲージメントを受信するための要求であり、エンゲージメントは、参加者のうちの1人又は複数がメッセージを作成しているというインジケーション(Indication)を含み、ここで、トピックは、会話に関係した情報を含むことができる。
本明細書で説明される主題は、以下の利点のうちの1つ又は複数を実現するように、特定の実施形態において実装されてよい。
開示されたシステム及び方法は、例えば、要求−応答モデルによって要されるように、クライアントのデバイスがデータを求める多数の要求を送信する必要なしに、クライアントが該当したデータを受信することを可能にする。従って、本主題は、要求−応答モデルを使用するシステムと比べて、コンピューティングリソース及びネットワーク使用量の低減を特徴とする。
システム及び方法は、特定のサブスクライブされたトピックについてのイベントを多くの個々のキューに書き込む冗長化を制限するために、指定された基準下でイベントファンアウトキューを使用することによって、イベントの効率的な分配を考慮する。多くの数のチャンネルサーバに関連付けられたイベントに対して単一のイベントファンアウトキューを使用することは、イベントプロセッサが単一のイベントファンアウトキューに書き込むことを可能にすることによって、個々のチャンネルサーバイベントキューへの書き込み動作の数を低減する。それに応じて、イベントは、多くの数のチャンネルサーバにファンアウトすることができ、チャンネルサーバの各々は、イベントを、多くの数のホストされるクライアントに送信することができる。結果として、イベントは、例えば、何百万ものサブスクライブされたクライアントに同時に配信され得る。非アクティブであると判定しているユーザのサブスクリプションを維持することを回避するために、システムは、サブスクリプションごとに生存時間(TTL)を課すことができる。これは、システムが、非アクティブであると判定されたユーザのサブスクリプションを終了して、アクティブなユーザのためにコンピューティングリソースを温存することを可能にする。
クライアントに通信可能に結合された例示的なメッセージングプラットフォームのブロック図である。 クライアントに通信可能に結合された例示的なサブスクリプションモジュールのブロック図である。 サブスクリプションモジュールにサブスクライブされたクライアントにイベントを送信するための例示的なプロセスの流れ図である。
様々な図面において、同様の参照番号及び呼称は、同様の要素を示す。
多くのモバイルデバイスのためのネットワークアクティビティは、要求−応答モデルに基づいている。しかし、特定のタイプのアクティビティは、要求−応答モデルによってうまく機能が果たされない。例えば、メッセージングプラットフォームは、例えば、第1のユーザと第2のユーザとの間の会話の一部として別のユーザがメッセージをタイピングしていることを示す、クライアントデバイスに提供されるアラートを含むことがある。しかし、要求−応答モデルを使用するとき、第1のユーザのコンピューティングデバイスは、メッセージングプラットフォームに、第2のユーザがタイピングしているのかどうかをそれに「尋ねる(ask)」ために、継続して要求を送信しなければならないことになる。次いで、メッセージングプラットフォームもまた、受信された要求ごとに応答を送信しなければならないことになる。
継続して要求及び応答を送信することは、コンピューティングデバイスのCPUによる著しい量の計算を要することがある。これのために、ユーザは、電池寿命の低減、データ使用量の増加、及びコンピューティングデバイスの速度の減少を経験することがある。
これらの影響のいくつかは、パブリッシュ−サブスクライブモデルを使用して緩和され得る。しかし、大量のイベント及びサブスクライバのためのイベント配布をスケーリングするメッセージングシステムの場合、他の課題を持ち込むことがある。
本明細書は、要求−応答モデル及び従来のパブリッシュ−サブスクライブモデルの欠点なしに、適時なやり方で、特定のイベントについての情報を提供するための技法を説明する。
図1は、多くのクライアントデバイス、例えば、クライアントデバイス102に通信可能に結合された例示的なメッセージングプラットフォーム100のブロック図である。メッセージングプラットフォームは、メッセージングシステム110と、サブスクリプションシステム120と、接続グラフリポジトリ132と、アカウントリポジトリ134とを含む。
メッセージングプラットフォーム100は、例えば、アカウントリポジトリ134を使用して、何百もの個人の、ビジネスの、及び/又は他のエンティティのアカウント、例えば、仮名アカウント、ノベルティアカウント、その他を記憶することができる。
クライアントは、メッセージングプラットフォームを使用して、メッセージングプラットフォームの内部及び/又は外部の他のアカウントにメッセージを送信することができる。いくつかの実装において、メッセージングプラットフォームは、クライアントが、「実時間」で通信すること、即ち、最小の遅延で他のクライアントと会話すること、及び同時セッションの間に1つ又は複数の他のクライアントと会話を行うことができるように構成されてよい。
メッセージングシステムは、クライアントが、メッセージをブロードキャストすることを可能にすることができる。クライアントはまた、メッセージングシステムのユーザ間の実時間対話を提供するのに十分短い時間フレーム内で、メッセージングシステムによってブロードキャストされたメッセージを表示することができる。メッセージの受信者は、メッセージをブロードキャストするクライアントのアカウントと、予め定義された関係を有することができる。予め定義された関係は、接続グラフリポジトリ132において表されてよい。
サブスクリプションシステム120は、クライアントからのサブスクリプション要求を受信するように構成される。サブスクリプション要求は、トピックを識別する。サブスクリプション要求に応答して、サブスクリプションシステムは、クライアントをトピックにサブスクライブする。サブスクリプションシステムは、クライアントがトピックに該当した情報を求める要求を継続して送信することを要することなく、サブスクライブされたクライアントに情報を送信する。
クライアントは、最初にイベント要求をサブスクリプションシステムに送信することによって、サブスクリプションを開始することができる。イベント要求は、クライアントのデバイスとサブスクリプションシステムとの間にネットワーク接続を確立するHTTP GET要求であってよい。イベント要求に応答して、サブスクリプションシステムのチャンネルサーバは、構成パケットをクライアントに送信することができる。構成パケットは、ユーザに対して一意の識別子であるセッション識別子(ID)を含むことができる。ネットワーク接続を確立し、構成パケットを受信した後で、クライアントは、サブスクリプション要求をサブスクリプションシステムに送信することができる。サブスクリプション要求は、クライアントのセッションIDと、クライアントがサブスクライブされたいものに対応したトピックとを含むHTTP POST要求であってよい。サブスクリプションシステムは次いで、サブスクリプション要求によって指定されたトピックへの、クライアントのためのサブスクリプションセッションを開始する。一旦クライアントがトピックにサブスクライブされると、サブスクリプションシステムは、トピックに関係したイベントをクライアントに送信することができる。例えば、サブスクリプションは、イベント要求によって確立されたネットワーク接続を使用して、トピックに関係したイベントを、サブスクライブするクライアントデバイスに送信することができる。
図2は、クライアント202に通信可能に結合された例示的なサブスクリプションシステム200のブロック図である。クライアント202は、代表的なクライアントである。多くの異なるクライアントデバイスが、サブスクリプションシステム200に通信可能に結合されてよい。
サブスクリプションシステム200は、フロントエンド210と、チャンネルサーバ212、222、及び224と、サブスクリプションリポジトリ226と、イベントキュー232、233、及び234と、ファンアウトキュー228と、イベントプロセッサ240と、キューイングエンジン245と、パブリッシュサービス252及び254とを含む。サブスクリプションシステムのコンポーネント間の接続は、例えば、ローカルエリアネットワーク(LAN)、インターネット、その他のネットワーク接続であってよい。
フロントエンド210は、クライアント202からの通信、例えば、サブスクリプション要求を受信し、イベントをクライアント202に送信するように構成された、サブスクリプションシステム200のエンドポイントを表す。いくつかの実装において、フロントエンド210は、エッジサーバと、1つ又は複数のルーティングエンジンとの両方を含む。エッジサーバは、外部ネットワークからサブスクリプションシステムへのゲートウェイを提供する。エッジサーバは、クライアントからのHTTPトラフィックを受信し、イベントをクライアントに送信するように構成される。HTTPトラフィックは、サブスクリプション要求を含むことができる。サブスクリプション要求は、サブスクリプション要求を特定のチャンネルサーバにルーティングする1つ又は複数のルーティングエンジンのうちの1つに送信されてよい。特定のチャンネルサーバは、任意の好適な技法を使用して選択されてよく、例えば、受信されたサブスクリプション要求を個々のチャンネルサーバに分配するためにラウンドロビン技法が使用されてもよい。イベント要求を受信するチャンネルサーバは、イベント要求を送信したクライアントのためのサブスクリプションセッションをホストする。
サブスクリプションシステム200は、3つのチャンネルサーバを含むように示されているが、他の実装において、サブスクリプションモジュールは、はるかに多いチャンネルサーバ、例えば、数百のチャンネルサーバをメッセージングプラットフォームのために含むことができる。各チャンネルサーバ212、222、及び224は、一意のチャンネルサーバ識別子(ID)に関連付けられている。各チャンネルサーバIDは、チャンネルサーバの具体的なイベントキューを識別するために使用されてよい。
サブスクリプションパス
サブスクリプション要求を受信することに応答して、特定のチャンネルサーバは、フロントエンド210を通して、クライアントに構成パケットを送信することができる。構成パケットは、クライアントサブスクリプションに対して一意の識別子であるセッション識別子(ID)を含む。構成パケットには、サブスクライブされたトピックのためのサブスクリプションタイマーもまた含まれる。サブスクリプションタイマーは、サブスクリプションの生存時間、即ちTTLを示すことができ、これは、チャンネルサーバがTTLの間にクライアントが非アクティブであったことを判定した場合に、チャンネルサーバがサブスクライブされたクライアントをトピックからサブスクライブ解除することになるまでの時間期間に対応する。
サブスクリプションプロセスの一部として、クライアントは、クライアントをサブスクライブするための具体的なトピックで構成パケットに応答することができる。いくつかの実装において、応答は、クライアントのセッションIDとトピックとを含むHTTP POST要求である。例えば、トピックは、メッセージングプラットフォームの特定のメッセージ又は会話であってもよい。トピックは、特定の識別子、例えば、メッセージングプラットフォームによって使用されるメッセージ識別子又は会話識別子によって識別され得る。トピックは、メッセージであってもよく、ここで、トピックに関連付けられたイベントは、例えば、エンゲージメントアクティビティなどの、メッセージとの任意の対話を含む。別の例として、トピックは、例えば、識別された会話に関するタイピングなど、会話についてより具体的であってもよく、ここで、トピックについてのイベントは、ユーザがタイピングしているという通知を含む。
サブスクリプション要求を受信するチャンネルサーバは、セッションIDをローカルマッピングに追加することを含むサブスクリプションを確立し、ローカルマッピングは、セッションIDをサブスクリプショントピックに関係付ける。こうして、各チャンネルサーバは、チャンネルサーバによってホストされるトピックごとにクライアントセッションを識別するマッピングを有する。結果として、チャンネルサーバによってホストされるトピックについて特定のイベント情報を受信すると、チャンネルサーバは、マッピングを使用して各サブスクライブされたクライアントを識別して、セッション識別子へのトピックのマッピングに基づいて、イベントを提供することができる。
サブスクリプションセッションを確立することはまた、サブスクリプションリポジトリ226に記憶されたマップにおいて、チャンネルサーバをトピックに関連付けることを含む。具体的には、サブスクリプションリポジトリ226は、チャンネルサーバへのトピックのマッピングを含み、その結果、トピックごとに、そのトピックへのクライアントサブスクリプションをホストする1つ又は複数のチャンネルサーバが識別され得る。
いくつかの事例において、チャンネルサーバは、チャンネルサーバが既に扱っているトピックへのサブスクリプション要求を受信する。例えば、チャンネルサーバは、1つ又は複数の他のクライアントセッションIDのためのトピックについてサブスクリプションセッションを既にホストしていることがある。そのような事例において、チャンネルサーバIDは、サブスクリプションリポジトリ226において、チャンネルサーバIDへのトピックのマッピングに既に記憶されている。その結果、チャンネルサーバは、マップにおける冗長なエントリを回避するために、そのチャンネルサーバIDをマッピングに追加しない。
トピックへの各クライアントサブスクリプションは、TTLと呼ばれる、予め決められた時間の量の間持続する。TTLはまた、チャンネルサーバがセッションIDへのトピックのローカルマッピングにおいてクライアントのセッションIDを維持することになる時間の期間として考えられてもよい。チャンネルサーバがトピックへのサブスクリプションを開始するとき、それは、サブスクリプションに関連付けられたサブスクリプションタイマーを、TTLによって指定された時間の量に設定する。サブスクリプションタイマーが満了した場合、クライアントをホストするチャンネルサーバは、セッションIDへのトピックのローカルマッピングからクライアントのセッションIDを取り除くことによって、クライアントをトピックからサブスクライブ解除することになる。サブスクリプションタイマーを維持する1つの利点は、それが、サブスクリプションシステムに、アイドルである、又は反応しないクライアントのサブスクリプションを終了させることを可能にすることである。TTLについての好適な値は、2分、5分である。さらに、チャンネルサーバのいずれの他のセッションIDもトピックにサブスクライブされていない場合、チャンネルサーバIDが、サブスクリプションリポジトリマッピングから取り除かれてもよい。
この実装において、中断されないサブスクリプションを維持するためには、サブスクライブされたクライアントは、TTLの満了に先立って、トピックを求める新しいサブスクリプション要求をサブスクリプションシステムに送信しなければならない。新しいサブスクリプション要求を受信することに応答して、チャンネルサーバは、TTLに対してクライアントのサブスクリプションに関連付けられたサブスクリプションタイマーをリセットする、即ち、TTLに対応する時間の量をサブスクリプションタイマーに再割り当てすることができる。
サブスクリプションシステムはまた、クライアントが一度に有することができるサブスクリプションの数を制限することができる。いくつかの実装において、サブスクリプションシステムは、各クライアントを、サブスクリプションの最大数、例えば、10又は25のサブスクリプションに制限する。
イベント配信パス
メッセージングプラットフォーム、例えば、メッセージングプラットフォーム100の異なるサービスが、イベントをサブスクリプションシステム200にパブリッシュすることができる。例えば、パブリッシュサービス252、254は、メッセージングプラットフォームの他のサービスが、例えば、Thrift APIを使用してイベントをパブリッシュすることを可能にするアプリケーションプログラミングインターフェース(API)を提供することができる。パブリッシュサービスはまた、例えば、イベントの妥当性検査又はレート制限などのイベントへの処理を、それらをイベントプロセッサ240に提供することに先立って、実施することができる。この例において、サブスクリプションシステム200は、2つのパブリッシュサービス252及び254を含んでいるが、他の実装において、サブスクリプションモジュールは、サブスクリプションシステム200の具体的な要件に応じて、より多い、又はより少ないパブリッシュサービスを含むことができる。
パブリッシュサービス252、254は、イベントをイベントプロセッサ240に渡す。イベントプロセッサ240は、各イベントを、イベントのトピックへのサブスクリプションを収容する対応するチャンネルサーバへとルーティングする。
イベントプロセッサ240は、イベントを、イベントキュー230、232、234に送信する。この実装において、サブスクリプションシステムは、単一のイベントプロセッサ240を含んでいるが、他の実装において、サブスクリプションモジュールは、多数のイベントプロセッサを含むことができる。
各イベントは、トピックに関連付けられている。イベントコンテンツは、1つ又は複数のトピックに対応する識別子を含むことができる。例えば、エンゲージメントカウンタがメッセージについてインクリメントされていることを示すイベントは、対応するメッセージ識別子を使用して、そのメッセージを識別することになる。サブスクライブされたトピックはまた、メッセージ識別子であることがある。従って、イベントコンテンツは、どのトピックにイベントが関連付けられているのかを判定するために使用されてもよい。
イベントプロセッサ240は、サブスクリプションリポジトリ226におけるトピックへのチャンネルサーバIDのマッピングを使用して、どのチャンネルサーバが所与のトピックを扱っているのかを判定する。マッピングを使用して、イベントプロセッサ240は、イベントを受信するための1つ又は複数のチャンネルサーバを判定する。イベントプロセッサは次いで、トピックを扱うチャンネルサーバに対応する1つ又は複数のイベントキューに、イベントを送信することができる。とりわけ、各チャンネルサーバ212、222、224は、対応するイベントキュー230、232、234に関連付けられている。いくつかの実装において、イベントプロセッサ240は、トピックを求めるルックアップ要求を、サブスクリプションリポジトリ226に送信する。サブスクリプションリポジトリ226は次いで、トピックを扱っているチャンネルサーバIDのセットを返す。
例えば、所与のイベントが、トピック1に関連付けられることがある。サブスクリプションリポジトリ226におけるマッピングを使用して、イベントプロセッサ240は、トピック1がチャンネルサーバ212及び224によって扱われていることを判定することができる。その結果、イベントは、チャンネルサーバ212及び224にそれぞれ対応するイベントキュー230及び234に送信される。
チャンネルサーバ212、222、224は、それらのそれぞれのイベントキューを通して、イベントプロセッサ240からイベントを受信する。いくつかの実装において、各チャンネルサーバ212、222、224は、対応するイベントキュー230、232、234から周期的にイベントを読み出す。例えば、チャンネルサーバは各々、それらのそれぞれのイベントキューから、50msごとに読み出すことができる。いくつかの他の実装において、イベントプロセッサ240は、イベントキューを使用して、例えば、周期的な時間間隔に基づいて、イベントがキューに追加されるときに基づいて、又はキューにおける待ち状態のイベントのボリュームに基づいて、対応するチャンネルサーバにイベントをプッシュする。
チャンネルサーバがイベントキューからイベントを受信した後、チャンネルサーバは、どのクライアントが受信されたイベントのトピックにサブスクライブされているのかを判定するために、チャンネルサーバがオープンな接続を有するクライアントのセッションIDへのトピックのそのローカルマッピングに照会することができ、それらのクライアントにイベントを送信する。
こうして、イベントは、イベントプロセッサによって、イベントのトピックをホストするチャンネルサーバにファンアウトされる。各チャンネルサーバは次いで、イベントを、トピックにサブスクライブされたクライアントにファンアウトする。
ファンアウトキュー
上で説明されたように、イベントプロセッサ240は、イベントのトピックへのサブスクライバを扱うチャンネルサーバごとに、それぞれのイベントキューにイベントを送信する。しかし、いくつかの状況において、これは、多くの個々のイベントキューにイベントを書き込むことを意味することがある。個々のキューへの多くの冗長な書き込みから生じる非効率性を回避するために、イベントプロセッサは、いくつのチャンネルサーバがイベントのトピックへのサブスクリプションを扱っているのかを最初に判定する。チャンネルサーバの数が指定された閾値数を超えるという判定に応答して、イベントプロセッサ240は、イベントを、代わりにイベントファンアウトキュー228に送信し、個々のチャンネルサーバキューには送信しない。いくつかの実装において、イベントファンアウトキュー228は、必要に応じて動的に生成されて、イベントをチャンネルサーバにルーティングする。
イベントファンアウトキュー228は、イベントを多数のチャンネルサーバに提供することができる。いくつかの実装において、各チャンネルサーバは、ファンアウトキュー228から周期的に読み出す。いくつかの他の実装においては、ファンアウトキュー228が、チャンネルサーバにイベントを周期的にプッシュする。チャンネルサーバの閾値数は、ゼロよりも大きく、所与のサブスクリプションモジュールに含まれるチャンネルサーバの合計数よりも小さい、又は合計数に等しい任意の好適な数であってよい。例えば、1000のチャンネルサーバが存在する場合、イベントファンアウトキュー228は、サブスクリプショントピックを扱うチャンネルサーバの数がチャンネルサーバの合計数の半分を超えるときに使用されてもよい。特定の閾値数は、様々な基準に基づいて判定されてもよく、いくつかの事例において、イベントプロセッサのリソース使用量、イベントのボリューム、チャンネルサーバの数、その他に経験的に基づいて判定されてもよい。
失敗挙動
いくつかの事例において、クライアントのデバイスがネットワーク接続性を喪失することがある。クライアントがチャンネルサーバへの接続を確立している場合、サブスクリプションシステムは、多数のやり方で、クライアントネットワーク喪失を検出することができる。
第1の例として、チャンネルサーバがイベントをフロントエンド210に送信する場合、フロントエンド210は、イベントをクライアント202に送信するように試行することになる。クライアント202がネットワーク接続性を喪失している場合、フロンドエンド210は、それを通してイベントを送信するためのネットワーク接続が存在しないことを検出することができる。この検出に続いて、フロントエンド210は、ネットワーク接続の喪失を、クライアント202をホストするチャンネルサーバに通信することができる。チャンネルサーバは次いで、クライアントをサブスクライブ解除することができ、これは、トピックにサブスクライブされたクライアントのセッションIDにトピックを関係付けるマップから、クライアントのセッションIDを取り除くことを含むことができる。
第2の例として、クライアントのサブスクリプションに関連付けられたTTLが、クライアントがネットワーク接続性を喪失していることを示すことができる。TTLが満了した後で、サブスクリプションシステムは、クライアントを自動的にサブスクライブ解除することになる。
図3は、サブスクリプションモジュールにサブスクライブされたクライアントにイベントを送信するための例示的なプロセス300の流れ図である。便宜上、プロセスは、1つ又は複数の位置に位置付けられ、本明細書に従って適正にプログラムされた、1つ又は複数のコンピュータのシステムによって実施されるものとして説明されることになる。例えば、サブスクリプションシステム200は、適切にプログラムされるとき、例示的なプロセスを実施することができる。
システムは、1つ又は複数のクライアントデバイスのためのトピックへのサブスクリプションを開始する(305)。より具体的には、システムは、システムとの通信を確立するためのイベント要求を受信する。各イベント要求に応答して、システムのチャンネルサーバが、対応するクライアントデバイスに、セッション識別子を含む構成パケットを送信する。応答して、クライアントは、ユーザがサブスクライブすることを望むトピックを識別するサブスクリプション要求を送信する。サブスクリプション要求に応答して、チャンネルサーバは、クライアントデバイスサブスクライバのセッションIDにトピックをマップするサブスクリプションリポジトリにおいて、クライアントサブスクリプションのためのセッションIDをトピックに関連付けることを含む、クライアントデバイスのためのトピックへのサブスクリプションを開始する。
システムは、イベントプロセッサ上で、それぞれのトピックに概ね該当したイベントを受信する(310)。イベントプロセッサは、システムのクライアントを含む1つ又は複数のソースからイベントを受信するパブリッシュサービスから、イベントを受信することができる。
システムは、いくつのチャンネルサーバが特定のトピックを扱っているのかを判定する(315)。イベントプロセッサは、それが受信する各イベントに関係付けられたトピックを判定する。イベントプロセッサはまた、例えば、トピックを扱うチャンネルサーバにトピックを関係付けるマッピングにアクセスすることによって、どのチャンネルサーバがトピックを扱っているのかを判定することができる。
システムは、トピックに対応するチャンネルサーバの数が、チャンネルサーバの閾値数よりも大きいかどうかを判定する(320)。
チャンネルサーバの数が閾値数よりも大きいという判定に応答して、システムは、イベントプロセッサから受信されたイベントを、イベントファンアウトキューに送信する、例えば、書き込む(325、即ち、「Yes」分岐)。いくつかの実装において、システムは、判定に応答して、イベントファンアウトキューを動的に生成する。イベントファンアウトキューは、イベントプロセッサを、トピックを扱っているチャンネルサーバに通信可能に結合する。
それぞれのチャンネルサーバは、受信されたイベントを、イベントファンアウトキューから読み出す(330)。とりわけ、各チャンネルサーバは、チャンネルサーバによって扱われるトピックについてのイベントを、イベントファンアウトキューにおいて取得する。
システムは、各チャンネルサーバにおいて、どのクライアントデバイスが受信されたイベントのトピックにサブスクライブされているのかを判定し、それらのクライアントデバイスにイベントを送信する(335)。トピックにサブスクライブされたクライアントデバイスのセッションIDにトピックを関係付けるマッピングを使用して、イベントのトピックにサブスクライブされたクライアントデバイスが識別される。トピックにサブスクライブされたクライアントをホストする各チャンネルサーバは、受信されたイベントを、ホストされるクライアントに送信する。
チャンネルサーバの数が閾値数よりも大きくないという判定に応答して、システムは、イベントプロセッサから受信されたイベントを、1つ又は複数のイベントキューに送信する、例えば、書き込む(440、即ち、「No」分岐)。イベントキューの各々は、イベントに該当したトピックへのサブスクリプションを扱うチャンネルサーバのうちの1つに対応する。イベントプロセッサは、トピックを扱っているチャンネルサーバのチャンネルサーバIDにトピックを関係付けるマッピングを使用して、イベントを送信するための適正なイベントキューを判定することができる。追加として、各イベントキューは、対応するチャンネルサーバIDに関連付けられる。
それぞれのチャンネルサーバは、受信されたイベントを、対応するイベントキューから読み出す(345)。1つ又は複数のイベントキューから読み出した後で、各チャンネルサーバは、例えば、イベントに含まれた、対応するトピックを識別する識別子を使用して、イベントが対応するトピックを判定することができる。
段階345に続いて、「No」分岐は、上で説明された段階335を実施することによって継続することができる。
例として、ユーザは、メッセージングプラットフォーム上でブロードキャストされた特定のメッセージなどのコンテンツにサブスクライブしたいことがある。サブスクリプションは、例えば、メッセージ「ライク(likes)」の更新されたカウントなどの、メッセージに関係した1つ又は複数のエンゲージメントについての更新を受信するユーザの所望を表すことができる。サブスクリプションのトピックは、メッセージを識別する情報を含むことができる。1つ又は複数のエンゲージメントは、1人又は複数の他のユーザが、例えば、特定のエンゲージメントタイプについてのエンゲージメントカウントをインクリメントすることによって、メッセージと対話しているというインジケーションであってもよい。例えば、1つ又は複数のエンゲージメントは、1人又は複数の他のユーザがメッセージを、ライクしている、又は再ブロードキャストしていることを示すことができる。1人又は複数の他のユーザのデバイスは、メッセージシステムに1つ又は複数のエンゲージメントを通知することができる。メッセージングシステムは、この情報をサブスクリプションシステムに通信することができ、サブスクリプションシステムは、応答して、イベントとしてのエンゲージメントを、サブスクライブされたユーザのデバイスに送信することができる。ユーザは、従って、エンゲージメントのインクリメントインジケーションを実時間で見ることができる。トピックにサブスクライブされたユーザは、ユーザがトピックからサブスクライブ解除することを選ぶまで、サブスクリプションシステムからイベントを受信することを継続する。クライアントは、サブスクライブ解除要求をサブスクリプションモジュールに送信することによって、トピックからサブスクライブ解除することができる。例えば、サブスクライブ解除要求は、HTTP POST要求であってよい。HTTP POST要求は、クライアントのセッションIDと、ユーザがサブスクライブ解除したいトピックとを含むことができる。エッジサーバが、サブスクライブ解除要求をルーティングエンジンのうちの1つに送信することができ、ルーティングエンジンのうちの1つが次いで、それを、トピックへのクライアントのサブスクリプションをホストしているチャンネルサーバに送信することができる。サブスクリプション解除要求に応答して、トピックを扱うチャンネルサーバは、クライアントをサブスクライブ解除する、即ち、クライアントのサブスクリプションセッションを終了することができる。
クライアントをサブスクライブ解除することは、クライアントがサブスクライブされていたトピックから、クライアントのセッションIDを切り離すことを含む。言い換えれば、チャンネルサーバは、セッションIDへのトピックのローカルマッピングから、クライアントのセッションIDを削除する。チャンネルサーバがトピックについての別のクライアントセッションをホストしていない場合、サブスクリプションリポジトリは、トピックからトピックを扱うチャンネルサーバIDへのローカルマッピングにおいて、トピックからチャンネルサーバIDを切り離す。
トピックから手動でサブスクライブ解除することに加えて、クライアントはまた、サブスクリプションシステムによって、トピックから自動的にサブスクライブ解除されてもよい。ユーザが、例えば、クライアントのサブスクリプションセッションのTTLなどの閾値量の時間よりも長い間アイドルであると判定された場合、サブスクリプションシステムは、クライアントのサブスクリプションセッションを自動的に終了することができる。例えば、クライアントは、コンピューティングデバイスを使用して、ブロードキャストにサブスクライブすることができる。サブスクリプションシステムは、コンピューティングデバイスがスリープモードに入ったかどうかを検出し、ユーザがアイドルであることを判定することができる。コンピューティングデバイスが閾値量の時間よりも長い間スリープモードにとどまる場合、サブスクリプションモジュールは、ブロードキャストへのコンピューティングデバイスのサブスクリプションを終了することができる。
いくつかの実施形態において、ユーザが閾値量の時間の間アイドルであるという検出に応答して、サブスクリプションシステムは、サブスクライブ解除通知をクライアントに送信して、サブスクリプションシステムが一定の時間枠の後にクライアントのサブスクリプションを終了することになることを示すことができる。例えば、ユーザは、コンピューティングデバイスを使用して、トピックにサブスクライブすることができる。サブスクリプションシステムは、閾値量の時間の間、ユーザがコンピューティングデバイスと対話していないことを判定することができる。サブスクリプションモジュールは次いで、サブスクライブ解除通知をコンピューティングデバイスに送信することができる。サブスクライブ解除通知は、トピックからサブスクライブ解除されることを回避するために、ユーザがコンピューティングデバイスと対話しなければならない時間枠を含むことができる。
クライアントは、ユーザがアイドルでない限り、ユーザのサブスクリプションがアクティブのままであることを保証する。即ち、ユーザがアイドルでない限り、クライアントは、再サブスクリプション要求をサブスクリプションシステムに発行することができる。従って、サブスクリプションシステムは、サブスクリプションを維持するために、非アイドルユーザが継続して再サブスクライブすることは要さない。
ユーザのサブスクリプションはまた、サブスクリプションシステムに接続されたコンピューティングデバイス上でユーザが現在見ているものに基づいていてもよい。例えば、ユーザは、ユーザのデバイスによって現在ディスプレイされている投稿にサブスクライブすることができる。投稿がもはやデバイス上に見えない場合(例えば、ユーザが投稿から離れて移動する場合)、サブスクリプションモジュールは、投稿からユーザを自動的にサブスクライブ解除することができる。
本明細書で説明された主題の実施形態ならびにアクション及び動作は、本明細書で開示された構造及びそれらの構造的等価物を含む、デジタル電子回路で、有形に具現化されたコンピュータソフトウェア若しくはファームウェアで、コンピュータハードウェアで、又はそれらの1つ又は複数の組合せで実装されてよい。本明細書で説明された主題の実施形態は、1つ又は複数のコンピュータプログラムとして、即ち、データ処理装置による実行のために、又はデータ処理装置の動作を制御するために、有形の非一時的な記憶媒体上で符号化されたコンピュータプログラム命令の1つ又は複数のモジュールとして実装されてよい。代替的に、又は加えて、プログラム命令は、人工的に生成された伝播信号上で、例えば、データ処理装置による実行のために好適な受信機装置への伝送用に情報を符号化するために生成される、マシン生成された電気信号、光学信号、又は電磁信号上で符号化されてもよい。コンピュータ記憶媒体は、マシン可読ストレージデバイス、マシン可読ストレージ基板、ランダム若しくはシリアルアクセスメモリデバイスであっても、又はそれらの一部であっても、又はそれらのうちの1つ又は複数の組合せであってもよい。コンピュータ記憶媒体は、伝播信号ではない。
用語「データ処理装置」は、プログラマブルプロセッサ、コンピュータ、又は多数のプロセッサ若しくはコンピュータを例として含む、データを処理するための全ての種類の装置、デバイス、及びマシンを包含する。データ処理装置は、特殊目的論理回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、又はGPU(グラフィックス処理ユニット)を含むことができる。装置はまた、ハードウェアに加えて、コンピュータプログラムのための実行環境を作り出すコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、又はそれらのうちの1つ又は複数の組合せを組成するコードを含むことができる。
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、若しくはコードとも称される、又はそれらとして説明されることがあるコンピュータプログラムは、コンパイル型若しくはインタープリタ型言語、又は宣言型若しくは手続き型言語を含む任意の形式のプログラミング言語で書かれてよく、それは、スタンドアロンプログラムとして、又はモジュール、コンポーネント、エンジン、サブルーチン、若しくはコンピューティング環境における実行に好適な他のユニットとして含む任意の形式で配置されてよく、その環境は、1つ又は複数の位置におけるデータ通信ネットワークによって相互接続された1つ又は複数のコンピュータを含むことができる。
コンピュータプログラムは、必須ではないものの、ファイルシステムにおけるファイルに対応してよい。コンピュータプログラムは、例えば、マークアップ言語ドキュメントに、問題となるプログラムに専用の単一のファイルに、又は、例えば1つ又は複数のモジュール、サブプログラム、若しくはコードの部分を記憶するファイルなどの多数の調整されたファイルに、記憶される1つ又は複数のスクリプトなどの、他のプログラム又はデータを保持するファイルの部分に記憶されてもよい。
本明細書で説明されるプロセス及び論理フローは、入力データに操作し、出力を生成することによって動作を実施するように1つ又は複数のコンピュータプログラムを実行する1つ又は複数のコンピュータによって実施されてよい。プロセス及び論理フローはまた、特殊目的論理回路、例えば、FPGA、ASIC、若しくはGPUによって、又は特殊目的論理回路と1つ又は複数のプログラムされたコンピュータとの組合せによって実施されてもよい。
コンピュータプログラムの実行に好適なコンピュータは、汎用若しくは特殊目的マイクロプロセッサ、又は両方、又は任意の他の種類の中央処理ユニットに基づいていてよい。概して、中央処理ユニットは、読み出し専用メモリ若しくはランダムアクセスメモリ、又は両方から、命令及びデータを受信することになる。コンピュータの不可欠な要素は、命令を実行するための中央処理ユニット、ならびに命令及びデータを記憶するための1つ又は複数のメモリデバイスである。中央処理ユニット及びメモリは、特殊目的論理回路によって補われても、又は特殊目的論理回路に組み込まれてもよい。
概して、コンピュータはまた、1つ又は複数の大容量ストレージデバイスを含む、又は1つ又は複数の大容量ストレージデバイスに動作可能に結合されて、そこからデータを受信する、又はそこにデータを転送することになる。大容量ストレージデバイスは、例えば、磁気的な、磁気光学的な、若しくは光学的なディスク、又はソリッドステートドライブであってよい。しかし、コンピュータは、そのようなデバイスを有する必要はない。その上、コンピュータは、別のデバイス、例えば、数例を挙げれば、モバイル電話、パーソナルデジタルアシスタント(PDA)、モバイルオーディオ若しくはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、又はポータブルストレージデバイス、例えば、ユニバーサルシリアルバス(USB)フラッシュドライブに埋め込まれていてもよい。
ユーザとの対話を提供するために、本明細書で説明される主題の実施形態は、例えば、LCD(液晶ディスプレイ)モニタなどの、ユーザに情報をディスプレイするためのディスプレイデバイスと、例えば、キーボード、及びマウス、トラックボール、又はタッチパッドなどのポインティングデバイスなどの、ユーザがそれによってコンピュータに入力を提供することができる入力デバイスとを有するコンピュータ上で実装されても、又はそれらを有するコンピュータと通信するように構成されてもよい。他の種類のデバイスも同様にユーザとの対話を提供するために使用されてよく、例えば、ユーザに提供されるフィードバックは、例えば、視覚フィードバック、聴覚フィードバック、又は触覚フィードバックなどの任意の形式の感覚フィードバックであってもよく、ユーザからの入力は、音響、スピーチ、又は触覚入力を含む任意の形式で受信されてもよい。加えて、ユーザによって使用されるデバイスにドキュメントを送信し、デバイスからドキュメントを受信することによって、例えば、ウェブブラウザから受信された要求に応答して、ユーザのデバイス上でウェブブラウザにウェブページを送信することによって、又は、例えば、スマートフォン若しくは電子タブレットなどのユーザデバイス上で稼働するアプリと対話することによって、コンピュータは、ユーザと対話することができる。また、テキストメッセージ又は他の形式のメッセージを、例えば、メッセージングアプリケーションを稼働しているスマートフォンなどのパーソナルデバイスに送信し、返信としてユーザから応答メッセージを受信することによって、コンピュータは、ユーザと対話することができる。
本明細書で説明された主題の実施形態は、例えば、データサーバとしてのバックエンドコンポーネントを含むコンピューティングシステムにおいて、又は、例えば、アプリケーションサーバなどのミドルウェアコンポーネントを含むコンピューティングシステムにおいて、又は、ユーザがそれを通して本明細書で説明された主題の実装と対話することができる、例えば、グラフィカルユーザインターフェース、ウェブブラウザ、若しくはアプリを有するクライアントコンピュータなどのフロントエンドコンポーネントを含むコンピューティングシステムにおいて、又は、1つ又は複数のそのようなバックエンド、ミドルウェア、若しくはフロントエンドコンポーネントの任意の組合せにおいて実装されてよい。システムのコンポーネントは、例えば、通信ネットワークなどのデジタルデータ通信の任意の形式又は媒体によって相互接続されていてよい。通信ネットワークの例は、ローカルエリアネットワーク(LAN)、及びワイドエリアネットワーク(WAN)、例えば、インターネットを含む。
コンピューティングシステムは、クライアントとサーバとを含むことができる。クライアントとサーバとは、概して互いにリモートであり、通常、通信ネットワークを通して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で稼働し、互いにクライアント−サーバ関係を有する、コンピュータプログラムのおかげで生まれる。いくつかの実施形態において、サーバは、例えば、クライアントとして働くデバイスと対話するユーザにデータをディスプレイし、ユーザからユーザ入力を受信する目的のために、データ、例えば、HTMLページをユーザデバイスに伝送する。ユーザデバイスで生成されたデータ、例えば、ユーザ対話の結果は、デバイスからサーバで受信されてもよい。
本明細書は多くの具体的な実装の詳細を収めているが、これらは、開示されるものの範囲、又は特許請求される、若しくは特許請求され得るものの範囲への制限として解釈されるべきではなく、むしろ、特定の実施形態に具体的であり得る特徴の説明として解釈されるべきである。別々の実施形態のコンテキストにおいて本明細書で説明された一定の特徴はまた、単一の実施形態において組み合わせて実装されてもよい。逆に言えば、単一の実施形態のコンテキストにおいて説明された様々な特徴はまた、多数の実施形態において別々に、又は任意の好適な下位組合せにおいて実装されてもよい。その上、特徴が一定の組合せにおいて作用するものとして上で説明され、最初にそのように特許請求され得るとしても、特許請求された組合せからの1つ又は複数の特徴は、いくつかの事例において、組合せから削られることがあり、請求は、下位組合せ又は下位組合せの変形に向けられることがある。
同様に、動作は、特定の順序で、図面に描かれ、特許請求の範囲に記載されるが、これは、そのような動作が、所望の結果を達成するために、示された特定の順序若しくはシーケンシャルな順序で実施されること、又は全ての例証された動作が実施されることを要するものとして理解されるべきではない。一定の事情においては、マルチタスキング及び並列処理が有利であることがある。その上、上で説明された実施形態における様々なシステムモジュール及びコンポーネントの分離は、全ての実施形態においてそのような分離を要するものとして理解されるべきではなく、説明されたプログラムコンポーネント及びシステムは、概して、単一のソフトウェア製品において一緒に統合されても、又は多数のソフトウェア製品の中にパッケージされてもよいことが理解されるべきである。
本主題の特定の実施形態が説明された。他の実施形態は、以下の請求項の範囲内にある。例えば、請求項に記載されたアクションは、異なる順序で実施されてもよく、なおも所望の結果を達成することができる。一例として、付属する図面に描かれたプロセスは、所望の結果を達成するために、示された特定の順序又はシーケンシャルな順序を必ずしも要さない。いくつかの事例においては、マルチタスキング及び並列処理が有利であることがある。

Claims (20)

  1. 1つ又は複数のクライアントデバイスのそれぞれについて、トピックへのサブスクリプションを開始するステップと、
    イベントプロセッサ上で、前記トピックに関するイベントを受信するステップと、
    前記トピックを扱っているチャンネルサーバがいくつあるかを決定するステップであって、各チャンネルサーバは、1つ又は複数のクライアントデバイスによってサブスクライブされたトピックを扱う、ステップと、
    前記トピックを扱っているチャンネルサーバの数がチャンネルサーバの閾値数より大きいと決定するステップと、
    前記トピックに対応する前記チャンネルサーバの数が前記チャンネルサーバの閾値数より大きいとする前記決定に応じて、前記イベントプロセッサからの前記受信されたイベントをイベントファンアウトキューに書き込むステップと、
    前記チャンネルサーバによって、前記イベントファンアウトキューから前記受信されたイベントを読み出すステップと、
    前記トピックを扱っている各チャンネルサーバそれぞれからの前記受信されたイベントを、前記トピックをサブスクライブする前記1つ又は複数のクライアントデバイスに送信するステップと、
    を含む、方法。
  2. 前記1つ又は複数のクライアントデバイスのそれぞれについて、トピックへのサブスクリプションを開始するステップは、
    前記1つ又は複数のクライアントデバイスそれぞれから、前記1つ又は複数のクライアントデバイスからの1つ又は複数のサブスクリプション要求を受信するステップであって、前記1つ又は複数のサブスクリプション要求は、前記トピックを含む、ステップと、
    前記1つ又は複数のクライアントデバイスに対する、前記トピックへの1つ又は複数のサブスクリプションを、受信された前記1つ又は複数のサブスクリプション要求に応じて開始するステップであって、開始された各サブスクリプションについて、前記クライアントデバイスに関連するセッション識別子を、トピックへのセッション識別子をマッピングに追加することを含む、ステップと、
    を含む、
    請求項1に記載の方法。
  3. サブスクリプションを開始するステップは、構成パケットを前記クライアントデバイスに送信するステップであって、前記構成パケットは、前記クライアントデバイスに対して一意の1つ又は複数のサブスクリプションタイマーを含む、ステップを含む、
    請求項2に記載の方法。
  4. 前記1つ又は複数のサブスクリプションタイマーは、前記クライアントデバイスに関連するユーザがアイドルであることを示し、アイドルであることは、前記ユーザが、閾値量の時間より長い間、それらのクライアントデバイスと対話していないことを含むことができる、
    請求項3に記載の方法。
  5. 前記決定された数のチャンネルサーバからの前記受信されたイベントを、各チャンネルサーバそれぞれに関連する前記1つ又は複数のクライアントデバイスに送信するステップは、
    前記1つ又は複数のクライアントデバイスがアイドルでないと決定するステップと、
    前記決定された数のチャンネルサーバからの前記受信されたイベントを、各チャンネルサーバそれぞれに関連する前記1つ又は複数のクライアントデバイスに送信するステップと、
    をさらに含む、
    請求項1に記載の方法。
  6. 1つ又は複数のクライアントデバイスがアイドルであると決定するステップと、
    1つ又は複数のチャンネルサーバを前記1つ又は複数のクライアントデバイスから切り離すステップと、
    をさらに含む、
    請求項4に記載の方法。
  7. 前記1つ又は複数のクライアントデバイスがもはやアイドルではないと決定するステップと、
    前記1つ又は複数のチャンネルサーバを前記1つ又は複数のクライアントデバイスに再び関連付けるステップと、
    をさらに含む、請求項6に記載の方法。
  8. 前記1つ又は複数のサブスクリプション要求は、ブロードキャストに関する1つ又は複数のエンゲージメントを受信するための要求であり、前記1つ又は複数のエンゲージメントは、ライク又は再ブロードキャストを含み、前記トピックは、前記ブロードキャストに関する情報を含むことができる、
    請求項2に記載の方法。
  9. 前記1つ又は複数のサブスクリプション要求は、1又は複数の参加者との会話に関連する1つ又は複数のエンゲージメントを受信するための要求であり、前記エンゲージメントは、1又は複数の前記参加者がメッセージを作成しているというインジケーションを含み、前記トピックは、前記会話に関する情報を含むことができる、
    請求項2に記載の方法。
  10. 1つ又は複数のサブスクリプション要求を、1つ又は複数のクライアントデバイスから受信するように構成されたエッジサーバと、
    前記1つ又は複数のサブスクリプション要求を、前記エッジサーバから受信するように構成されたルーティングエンジンと、
    1つ又は複数のサブスクリプション要求の1つを前記ルーティングエンジンから受信し、前記1つ又は複数のサブスクリプション要求の1つに対応するサブスクリプションセッションを開始するようにそれぞれ構成された、複数のチャンネルサーバと、
    前記複数のチャンネルサーバのそれぞれとイベントを通信するように構成されたイベントファンアウトキューと、
    前記イベントを前記イベントファンアウトキューにルーティングするように構成されたイベントプロセッサと、を含み、
    前記イベントプロセッサは、前記イベントを記憶するように構成されたキューイングエンジンをさらに含む、
    システム。
  11. 第2のクライアントからインジケーションを受信し、前記インジケーションに対応する第2のイベントを前記キューイングエンジンに中継するように構成されたパブリッシュサービスをさらに含む、
    請求項10に記載のシステム。
  12. 1つ又は複数の非一時的なコンピュータ記憶媒体上でエンコードされ、1つ又は複数のコンピュータによって実行されたとき、前記1つ又は複数のコンピュータに、
    1つ又は複数のクライアントデバイスについて、トピックへのサブスクリプションを開始するステップと、
    イベントプロセッサ上で、前記トピックに関するイベントを受信するステップと、
    前記トピックに対応するチャンネルサーバの数を決定するステップであって、各チャンネルサーバは、1つ又は複数のクライアントデバイスに関連付けられている、ステップと、
    前記トピックに対応するチャンネルサーバの数がチャンネルサーバの閾値数より大きいと決定するステップと、
    前記トピックに対応する前記チャンネルサーバの数が前記チャンネルサーバの閾値数より大きいとする前記決定に応じて、前記イベントプロセッサからの前記受信されたイベントをイベントファンアウトキューに書き込むステップと、
    前記イベントファンアウトキューから前記受信されたイベントを読み出すステップと、
    前記決定された数のチャンネルサーバからの前記受信されたイベントを、各チャンネルサーバそれぞれに関連する前記1つ又は複数のクライアントデバイスに送信するステップと、
    を含む処理を実行させる命令を備える、コンピュータプログラム製品。
  13. 1つ又は複数のクライアントデバイスについて、トピックへのサブスクリプションを開始するステップは、を含む、
    1つ又は複数のクライアントデバイスから、1つ又は複数のイベント要求を受信するステップと、
    受信された前記1つ又は複数のイベント要求に応じて、1つ又は複数の構成パケットを前記1つ又は複数のクライアントデバイスに送信するステップと、
    1つ又は複数のサブスクリプション要求を、前記1つ又は複数のクライアントデバイスから受信するステップであって、前記1つ又は複数のサブスクリプション要求は、前記トピックを含む、ステップと、
    前記1つ又は複数のクライアントデバイスに対する、前記トピックへの1つ又は複数のサブスクリプションを、受信された前記1つ又は複数のサブスクリプション要求に応じて開始するステップと、
    請求項12に記載のコンピュータプログラム製品。
  14. 前記1つ又は複数のクライアントデバイスに送信された前記1つ又は複数の構成パケットは、前記1つ又は複数のクライアントデバイスに対して一意の1つ又は複数のサブスクリプションタイマーを含む、
    請求項13に記載のコンピュータプログラム製品。
  15. 前記1つ又は複数のサブスクリプションタイマーは、前記1つ又は複数のクライアントデバイスに関連付けられた前記1つ又は複数のクライアントそれぞれがアイドルであることを示し、アイドルであることは、前記1つ又は複数のクライアントが、閾値量の時間より長い間、それらのクライアントデバイスそれぞれと対話していないことを含むことができる、
    請求項14に記載のコンピュータプログラム製品。
  16. 前記決定された数のチャンネルサーバからの前記受信されたイベントを、各チャンネルサーバそれぞれに関連する前記1つ又は複数のクライアントデバイスに送信するステップは、をさらに含む、
    前記1つ又は複数のクライアントデバイスがアイドルでないと決定するステップと、
    前記決定された数のチャンネルサーバからの前記受信されたイベントを、各チャンネルサーバそれぞれに関連する前記1つ又は複数のクライアントデバイスに送信するステップと、
    請求項15に記載のコンピュータプログラム製品。
  17. 1つ又は複数のクライアントデバイスがアイドルであると決定するステップと、
    1つ又は複数のチャンネルサーバをアイドル状態にある前記1つ又は複数のクライアントデバイスから切り離すステップと、
    をさらに含む、
    請求項15に記載のコンピュータプログラム製品。
  18. 前記1つ又は複数のクライアントデバイスがもはやアイドルではないと決定するステップと、
    前記1つ又は複数のチャンネルサーバを前記1つ又は複数のクライアントデバイスに再び関連付けるステップと、
    をさらに含む、請求項17に記載のコンピュータプログラム製品。
  19. 前記1つ又は複数のサブスクリプション要求は、ブロードキャストに関する1つ又は複数のエンゲージメントを受信するための要求であり、前記1つ又は複数のエンゲージメントは、ライク又は再ブロードキャストを含み、前記トピックは、前記ブロードキャストに関する情報を含むことができる、
    請求項13に記載のコンピュータプログラム製品。
  20. 前記1つ又は複数のサブスクリプション要求は、1又は複数の参加者との会話に関連する1つ又は複数のエンゲージメントを受信するための要求であり、前記エンゲージメントは、1又は複数の前記参加者がメッセージを作成しているというインジケーションを含み、前記トピックは、前記会話に関する情報を含むことができる、
    請求項13に記載のコンピュータプログラム製品。
JP2021511659A 2018-08-31 2019-08-29 イベントコンテンツ配信 Pending JP2021535515A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/120,138 2018-08-31
US16/120,138 US10805236B2 (en) 2018-08-31 2018-08-31 Event content delivery
PCT/US2019/048932 WO2020047335A1 (en) 2018-08-31 2019-08-29 Event content delivery

Publications (1)

Publication Number Publication Date
JP2021535515A true JP2021535515A (ja) 2021-12-16

Family

ID=67982146

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021511659A Pending JP2021535515A (ja) 2018-08-31 2019-08-29 イベントコンテンツ配信

Country Status (7)

Country Link
US (2) US10805236B2 (ja)
EP (1) EP3831039A1 (ja)
JP (1) JP2021535515A (ja)
KR (1) KR102445806B1 (ja)
BR (1) BR112021003475A2 (ja)
DE (1) DE202019005789U1 (ja)
WO (1) WO2020047335A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021260969A1 (ja) * 2020-06-26 2021-12-30 ソニーグループ株式会社 ネットワークの制御方法、および、データ処理システム
CN113190778A (zh) * 2021-04-30 2021-07-30 深圳壹账通创配科技有限公司 业务数据推送方法、系统、计算机设备及计算机存储介质
JP7109638B1 (ja) * 2021-09-15 2022-07-29 Kddi株式会社 通知装置、通知方法及びプログラム
CN114328132A (zh) * 2022-03-15 2022-04-12 北京百度网讯科技有限公司 外部数据源的状态监控方法、装置、设备和介质

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5557798A (en) * 1989-07-27 1996-09-17 Tibco, Inc. Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes
EP0759591B1 (en) 1995-08-18 2003-01-08 International Business Machines Corporation Event management service
US20120296974A1 (en) * 1999-04-27 2012-11-22 Joseph Akwo Tabe Social network for media topics of information relating to the science of positivism
AUPR464601A0 (en) 2001-04-30 2001-05-24 Commonwealth Of Australia, The Shapes vector
US20030200548A1 (en) * 2001-12-27 2003-10-23 Paul Baran Method and apparatus for viewer control of digital TV program start time
US8028052B2 (en) 2004-07-09 2011-09-27 Alcatel Lucent NMS with multi-server change requests processing
US20150347600A1 (en) * 2005-10-21 2015-12-03 Joseph Akwo Tabe Broadband Centralized Transportation Communication Vehicle For Extracting Transportation Topics of Information and Monitoring Terrorist Data
US8341265B2 (en) * 2009-01-09 2012-12-25 Sonus Networks, Inc. Hybrid server overload control scheme for maximizing server throughput
GB2492258A (en) * 2010-04-19 2012-12-26 Ibm Controlling message delivery in publish/subscribe messaging
US20130066979A1 (en) * 2011-09-12 2013-03-14 Microsoft Corporation Distributing events to large numbers of devices
US20140297350A1 (en) 2013-03-27 2014-10-02 Hewlett-Packard Evelopment Company, L.P. Associating event templates with event objects
US10009394B2 (en) 2014-08-04 2018-06-26 Cbs Interactive Inc. Techniques to broadcast live event data in real-time
US9948739B2 (en) * 2014-08-04 2018-04-17 Cbs Interactive Inc. Techniques to aggregate and broadcast live event data in real-time
WO2017066804A1 (en) 2015-10-15 2017-04-20 Push Technology Limited Event driven subscription matching

Also Published As

Publication number Publication date
DE202019005789U1 (de) 2022-02-02
US11283725B2 (en) 2022-03-22
KR20210090612A (ko) 2021-07-20
US10805236B2 (en) 2020-10-13
WO2020047335A1 (en) 2020-03-05
BR112021003475A2 (pt) 2021-05-18
US20210029057A1 (en) 2021-01-28
KR102445806B1 (ko) 2022-09-20
US20200076743A1 (en) 2020-03-05
EP3831039A1 (en) 2021-06-09

Similar Documents

Publication Publication Date Title
JP2021535515A (ja) イベントコンテンツ配信
US8554855B1 (en) Push notification delivery system
US10736078B1 (en) Dynamic muting of communication notifications
US20200280591A1 (en) System and Method for Efficient Port and Bandwidth Utilization in Setting up Communication Sessions
JP2010533906A (ja) グループ内のトピックをソートするための方法、システム及び装置
US9621958B2 (en) Deferred, on-demand loading of user presence within a real-time collaborative service
US20090228944A1 (en) System and method for chat load management in a network chat environment
US20120297321A1 (en) Systems and methods for managing interactive communications
EP2736199A1 (en) Method and device for prompting dynamic information about contact person
US20130290418A1 (en) Client Assisted Multicasting for Audio and Video Streams
US20150026595A1 (en) Detection of shared content viewed by attendees in online meetings
US10063663B2 (en) Subscribing to multiple resources through a common connection
CN109446204B (zh) 一种即时通信的数据存储方法、装置、电子设备和介质
US20240179221A1 (en) Mitigating network resource contention
US8161113B2 (en) Rich signaling feedback mechanism for group communication
US9088629B2 (en) Managing an electronic conference session
CN116308671A (zh) 基于mqtt协议的在线竞价方法、电子设备及存储介质
US10834034B2 (en) Cognitively generating user group using optimal messaging queue lengths for collaborative messaging platforms
CN118056384A (zh) 用于主持电话会议的动态参与者设备管理
JP2023518780A (ja) インタラクション方法、装置及び電子機器
CN114584518A (zh) 基于资源池的websocket负载均衡方法及系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210430

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220614

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220823

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20221213