JP2019521576A - メッセージングシステムの持続性の維持 - Google Patents
メッセージングシステムの持続性の維持 Download PDFInfo
- Publication number
- JP2019521576A JP2019521576A JP2018560134A JP2018560134A JP2019521576A JP 2019521576 A JP2019521576 A JP 2019521576A JP 2018560134 A JP2018560134 A JP 2018560134A JP 2018560134 A JP2018560134 A JP 2018560134A JP 2019521576 A JP2019521576 A JP 2019521576A
- Authority
- JP
- Japan
- Prior art keywords
- channel
- message
- node
- messages
- streamlet
- 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
Links
- 230000002688 persistence Effects 0.000 title description 6
- 230000004044 response Effects 0.000 claims abstract description 47
- 239000000872 buffer Substances 0.000 claims abstract description 40
- 238000000034 method Methods 0.000 claims abstract description 38
- 238000004519 manufacturing process Methods 0.000 claims 4
- 238000004590 computer program Methods 0.000 abstract description 14
- 238000012545 processing Methods 0.000 description 35
- 230000009471 action Effects 0.000 description 22
- 238000004891 communication Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 14
- 239000010410 layer Substances 0.000 description 10
- 238000004422 calculation algorithm Methods 0.000 description 6
- 230000002085 persistent effect Effects 0.000 description 5
- 230000003993 interaction Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 101100264195 Caenorhabditis elegans app-1 gene Proteins 0.000 description 2
- 238000013475 authorization Methods 0.000 description 2
- 239000002346 layers by function Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000012447 hatching Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000000153 supplemental effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/04—Real-time or near real-time messaging, e.g. instant messaging [IM]
- H04L51/046—Interoperability with other network applications or services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/21—Monitoring or handling of messages
- H04L51/216—Handling conversation history, e.g. grouping of messages in sessions or threads
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/10—Office automation; Time management
- G06Q10/107—Computer-aided management of electronic mailing [e-mailing]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
- H04L43/0852—Delays
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/07—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail characterised by the inclusion of specific contents
- H04L51/10—Multimedia information
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/07—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail characterised by the inclusion of specific contents
- H04L51/18—Commands or executable codes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/21—Monitoring or handling of messages
- H04L51/214—Monitoring or handling of messages using selective forwarding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
- H04L67/5682—Policies or rules for updating, deleting or replacing the stored data
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Business, Economics & Management (AREA)
- Human Resources & Organizations (AREA)
- Entrepreneurship & Innovation (AREA)
- Strategic Management (AREA)
- Economics (AREA)
- Tourism & Hospitality (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Marketing (AREA)
- Operations Research (AREA)
- Quality & Reliability (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Environmental & Geological Engineering (AREA)
- Information Transfer Between Computers (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
第1のチャネル内の位置で始まる複数のチャネルの第1のチャネルのメッセージに対する要求を第1のクライアントデバイスから受信する段階であって、各チャネルが、順序に従って1又は2以上のそれぞれのバッファに格納されたそれぞれの順序付けられた複数のメッセージを含み、各バッファが、それぞれの有効期間を有する上記受信する段階と、順序における位置での又はその後でのものである第1のチャネルの1又は2以上のメッセージを含む応答メッセージを第2のクライアントデバイスのうちの1つから受信する段階と、このメッセージを第1のクライアントデバイスに送信する段階とのためのコンピュータプログラムを含む方法、システム、及び装置。【選択図】図6
Description
〔関連出願への相互参照〕
この出願は、本明細書に引用によってその内容全体が組み込まれている2016年5月16日出願の米国特許出願第15/155,384号に対する優先権を主張するものである。
この出願は、本明細書に引用によってその内容全体が組み込まれている2016年5月16日出願の米国特許出願第15/155,384号に対する優先権を主張するものである。
本明細書は、データ通信システム、特に、リアルタイム拡張可能発行−購読メッセージングを実施するシステムに関する。
発行−購読パターン(又は「PubSub」)は、いわゆる発行者が、トピックに対するメッセージを発行し、いわゆる購読者が、彼らが購読している特定のトピックに関するメッセージを受信するソフトウエアシステムによって実施されるデータ通信メッセージング取り決めである。トピック毎に1又は2以上の発行者が存在する可能性があり、発行者は、一般的に、どの購読者が、もし居れば、発行されたメッセージを受信するかの知識を持っていない。一部のPubSubシステムは、メッセージをキャッシュに入れず、又は小さいキャッシュを有し、購読者が、特定のトピックに対する購読予約の時点の前で発行されたメッセージを受信しない場合があることを意味する。PubSubシステムは、メッセージ発行のサージ中又は特定のトピックに対する購読者の数が増加する時に性能不安定を受け易い可能性がある。
一般的に、本明細書に説明する主題の一態様は、第1のチャネル内の位置で始まる複数のチャネルの第1のチャネルのメッセージに対する要求を第1のクライアントデバイスから受信するアクションであって、各チャネルが、順序に従って1又は2以上のそれぞれのバッファに格納されたそれぞれの順序付けられた複数のメッセージを含み、各バッファが、それぞれの有効期間を有する上記アクションと、順序における位置に対応する第1のチャネル内の第1のメッセージを識別するアクションであって、第1のメッセージが、満了した有効期間を有するバッファに格納されている上記アクションと、順序における位置で開始するメッセージに対する要求を第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに送信するアクションと、順序における位置又はその後でのものである第1のチャネルの1又は2以上のメッセージを含む応答メッセージを第2のクライアントデバイスのうちの1つから受信するアクションと、満了していない有効期間を有する第1のチャネルの1又は2以上のバッファからかつ順序に従って第1のチャネルのためのメッセージを取り出すアクションと、取り出されたメッセージと応答メッセージからのメッセージとを順序に従って組み合わせるアクションと、組み合わせたメッセージを第1のクライアントデバイスに送信するアクションとを含む方法に具現化することができる。この態様の他の実施形態は、対応するシステム、装置、及びコンピュータプログラムを含む。
これら及び他の態様は、任意的に以下の特徴の1又は2以上を含むことができる。第1のチャネルを購読している第2のクライアントデバイスのうちの1又は2以上に対して、第1のチャネルに対するそれぞれの接続待ち時間を決定すること、及び最短の接続待ち時間を有する第2のクライアントデバイスのうちの1つを識別すること。第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに対して、第1のチャネルとのそれぞれの現在の接続セッションの持続時間を決定すること、及び1又は2以上の第2のクライアントデバイスの中で最長の現在の接続セッションを有する第2のクライアントデバイスのうちの1つを識別すること。取り出されたメッセージと応答メッセージからのメッセージとを順序に従って組み合わせることは、組み合わせたメッセージから1又は2以上の複製メッセージを取り除くことを更に含む。
本明細書に説明する主題の特定の実施形態は、以下の利点の1又は2以上を実現するように実施することができる。メッセージングシステムは、メッセージのチャネルを維持する。各チャネルに対して、チャネルに対して発行されたメッセージは、チャネルのチャネルストリームに格納される。チャネルストリームは、ストリームレットのシーケンスを含み、各ストリームレットは、それぞれの有効期間を有する。メッセージは、特定の順序でそれぞれのストリームレットに格納される。ストリームレットの有効期間が満了した時に、満了したストリームレットに格納されたメッセージは、チャネルの購読者に対してそれ以上利用可能ではなく、満了したストリームレットのためのコンピュータリソースは、メッセージングシステム内の他のコンピュータ作業に対して開放することができる。特定の購読者が、そのチャネルのチャネルストリームの満了したストリームレット内のチャネルのメッセージを要求した時に、メッセージングシステムは、そのチャネルのチャネルストリームの既に満了したストリームレットに以前に格納したメッセージを含むメッセージの履歴をチャネルの別の購読者に要求する。メッセージングシステムは、他方の購読者からのメッセージ履歴とそのチャネルのチャネルストリームのアクティブ(満了していない)ストリームレットに現在格納されているメッセージとを組み合わせることができ、かつ組み合わせたメッセージを特定の購読者に提供する。このようにして、特定の購読者は、そのチャネルのチャネルストリームの満了したストリームレットに格納されていたメッセージを失うことなく、そのチャネルの連続メッセージを受信することができる。
本明細書に説明する主題の1又は2以上の実施形態の詳細は、添付図面及び以下の説明に示している。本発明の主題の他の特徴、態様、及び利点は、説明、図面、及び特許請求の範囲から明らかになるであろう。
様々な図面における同じ参照番号及び指定は、同じ要素を示している。
図1Aは、PubSub通信パターンをサポートする例示的システム100を示している。発行者クライアント(例えば、発行者1)は、システム100によってメッセージを指名チャネル(例えば、「チャネル1」)に発行することができる。メッセージは、テキスト、画像コンテンツ、音声コンテンツ、マルチメディアコンテンツ、ビデオコンテンツ、及びバイナリデータなどの1又は2以上を含むあらゆるタイプの情報を含むことができる。メッセージデータの他のタイプも可能である。購読者クライアント(例えば、購読者2)は、システム100を使用して指名チャネルを購読予約し、かつ購読要求後に又は所与の位置(例えば、メッセージ番号又は時間オフセット)から発生するメッセージの受信を開始することができる。クライアントは、発行者及び購読者の両方とすることができる。
構成に応じて、PubSubシステムは、以下のように分類することができる。
・1対1(1:1)。この構成では、チャネル毎に1人の発行者及び1人の購読者がいる。典型的な使用事例は、プライベートメッセージングである。
・1対多数(1:N)。この構成では、チャネル毎に1人の発行者と複数の購読者がいる。典型的な使用事例は、放送メッセージ(例えば、株価)である。
・多数対多数(M:N)。この構成では、単一チャネルに発行する多くの発行者がいる。
メッセージは、次に、複数の購読者に配信される。典型的な使用事例は、地図アプリケーションである。
・1対1(1:1)。この構成では、チャネル毎に1人の発行者及び1人の購読者がいる。典型的な使用事例は、プライベートメッセージングである。
・1対多数(1:N)。この構成では、チャネル毎に1人の発行者と複数の購読者がいる。典型的な使用事例は、放送メッセージ(例えば、株価)である。
・多数対多数(M:N)。この構成では、単一チャネルに発行する多くの発行者がいる。
メッセージは、次に、複数の購読者に配信される。典型的な使用事例は、地図アプリケーションである。
指名チャネルを生成するのに必要な個別の作動はない。チャネルが購読された時又はメッセージがチャネルに対して発行された時にチャネルが暗黙的に生成される。一部の実施では、チャネル名は、名前空間によって限定することができる。名前空間は、1又は2以上のチャネル名を含む。異なる名前空間は、曖昧さを生じることなく同じチャネル名を有することができる。名前空間名は、名前空間及びチャネネームがドットによって分けられる場合のチャネル名の接頭辞とすることができる。一部の実施では、チャネル許可設定を指定する時に名前空間を使用することができる。例えば、メッセージングシステム100は、app1.foo及びapp1.system.notificationsチャネルを有することができ、ここで「appl」は、名前空間の名称である。本発明のシステムは、クライアントがappl.fooチャネルを購読及び発行することを可能にすることができる。しかし、クライアントは、appl.system.notificationsチャネルを発行しないが購読のみとすることができる。
図1Bは、例示的クライアントデバイス上のソフトウエアの機能層を示している。クライアントデバイス(例えば、クライアント102)は、例えば、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、スマートウォッチ、又はサーバコンピュータのようなデータ処理装置である。他のタイプのクライアントデバイスも可能である。アプリケーション層104は、PubSubシステム100に統合することになるエンド−ユーザアプリケーションを含む。メッセージング層106は、アプリケーション層104がチャネル購読、メッセージ発行、メッセージ取り出し、ユーザ認証、及びユーザ許可のようなシステム100のサービスを利用するプログラミングインタフェースである。一部の実施では、メッセージング層106との間で送られるメッセージは、JavaScript(登録商標)オブジェクト表記(JSON)オブジェクトとして符号化される。他のメッセージ符号化方式も可能である。
オペレーティングシステム108層は、クライアント102のオペレーティングシステムソフトウエアを含む。様々な実施では、持続的又は非持続的接続を使用してシステム100にメッセージを送信する及びシステム100からメッセージを受信することができる。持続的接続は、例えば、ネットワークソケットを使用して生成することができる。TCP/IP層112のようなトランスポートプロトコルは、メッセージング層106によって使用されるシステム100とのトランスポート制御プロトコル/インターネットプロトコル通信を実施し、接続を通じてシステム100にメッセージを送信する。例えば、ユーザデータグラムプロトコル(UDP)を含む他の通信プロトコルも可能である。更に別の実施では、任意的なトランスポート層セキュリティ(TLS)層110を利用してメッセージの機密性を保証することができる。
図2は、例示的メッセージングシステム100の図である。システム100は、PubSub通信パターンを実施するための機能性を提供する。本発明のシステムは、例えば、1又は2以上の地理的な場所で1又は2以上のデータセンター122に配備することができるソフトウエア構成要素及びストレージを含む。本発明のシステムは、MXノード(例えば、MXノード又は多重化ノード202、204、及び206)、Qノード(例えば、Qノード又は待ち行列ノード208、210、及び212)、1又は2以上のチャネルマネージャノード(例えば、チャネルマネージャ214、215)、及び任意的に1又は2以上のCノード(例えば、Cノード又はキャッシュノード220及び222)を含む。各ノードは、仮想機械又は物理機械(例えば、データ処理装置)で実行することができる。各MXノードは、外部ネットワーク216を通じた1又は2以上の発行者及び/又は購読者接続の終端ポイントとして機能する。MXノード、Qノード、Cノード、及びチャネルマネージャ間の内部通信は、例えば、内部ネットワーク218を通じて行われる。例示的に、MXノード204をクライアント102からの購読者接続の終端とすることができる。各Qノードは、MXノードによって消費するチャネルデータをバッファに入れる。チャネルに対して発行されたメッセージの順序付けられたシーケンスが論理的チャネルストリームである。例えば、3つのクライアントが所与のチャネルにメッセージを発行する場合に、クライアントによって発行された複合メッセージは、チャネルストリームを含む。メッセージは、チャネルストリーム内でクライアントによる発行の時間により、MXノードによる受信の時間により、又はQノードによる受信の時間によって順序付けることができる。チャネルストリームのメッセージを順序付けるための他の方法も可能である。1よりも多いメッセージが順序の同じ位置に割り当てられる場合に、順序の後ろのシーケンスを有するメッセージの1つを(例えば、ランダムに)選択することができる。各チャネルマネージャノードは、チャネルストリームをいわゆるストリームレットに分割することによってQノードの負荷を管理する役割を果たす。ストリームレットは以下に詳しく説明する。任意的Cノードは、キャッシュ及びQノードからの負荷除去を提供する。
例示的メッセージングシステム100では、1又は2以上のクライアントデバイス(発行者及び/又は購読者)は、MXノード(例えば、MXノード204)へのそれぞれの持続的接続(例えば、TCP接続)を設定する。MXノードは、これらの接続の終端ポイントとして機能する。例えば、これらの接続によって運ばれた外部メッセージ(例えば、それぞれのクライアントデバイスとMXノード間)は、外部プロトコル(例えば、JSON)に基づいて符号化することができる。MXノードは、外部プロトコルを終了して外部メッセージを内部通信に翻訳し、逆も同様である。MXノードは、クライアントの代わりにストリームレットを発行及び購読する。従って、MXノードは、同じチャネルを購読又は発行するクライアントデバイスの要求を多重化及び融合することができ、従って、1つずつの代わりに1つとして複数のクライアントデバイスを表している。
例示的メッセージングシステム100では、Qノード(例えば、Qノード208)は、1又は2以上のチャネルストリームの1又は2以上のストリームレットを格納することができる。ストリームレットは、チャネルストリームの一部分のためのデータバッファである。ストリームレットは、そのストレージが満杯である時に書込に対して閉じることになる。ストリームレットは、ストリームレットの有効期間(TTL)が満了した時に読取及び書込に対して閉じて割り当てを解除する。例示的に、ストリームレットは、1MBの最大サイズ及び3分のTTLを有することができる。異なるチャネルが異なるTTLによって制限されるストリームレットを有することができる。例えば、1つのチャネル内のストリームレットは、3分まで存在することができる一方、別のチャネル内のストリームレットは、10分まで存在することができる。様々な実施では、ストリームレットは、Qノードで実行されるコンピュータ処理に対応する。コンピュータ処理は、ストリームレットのTTLが満了した後に終了することができ、従って、例えば、Qノードに戻るコンピュータリソース(ストリームレット)を解放する。
クライアントデバイスから発行要求を受信した時に、MXノード(例えば、MXノード204)は、チャネルマネージャ(例えば、チャネルマネージャ214)に要求してストリームレットへのアクセスを許可し、発行されるメッセージを書き込む。しかし、MXノードがチャネル内のストリームレットへの書込アクセスを予め許可される(かつチャネルが書込に対して閉じていない)場合に、MXノードは、ストリームレットにアクセスする許可を要求する必要なくこのストリームレットにメッセージを書き込むことができることに注意されたい。メッセージがチャネル内のストリームレットに書き込まれた状態で、メッセージは、MXノードによって読み取られ、このチャネルの購読者に提供することができる。
同様に、クライアントデバイスからチャネル購読要求を受信した時に、MXノードは、チャネル内のストリームレットへのアクセスの許可をチャネルマネージャに要求してストリームレットからメッセージが読み取られる。MXノードがチャネル内のストリームレットへの読取アクセスを予め許可されている(かつチャネルのTTLが読取に対して閉じていない)場合に、MXノードは、ストリームレットにアクセスする許可を要求する必要なくストリームレットからメッセージを読み取ることができる。読取メッセージは、チャネルに購読予約したクライアントデバイスに転送することができる。様々な実施では、ストリームレットから読み取られたメッセージは、MXノードによってキャッシュに入れられ、それによってMXノードは、ストリームレットから読み取るのに必要な時間数を低減することができる。
例示的に、MXノードは、MXノードが特定のチャネル内のストリームレットを格納する特定のQノードのストリームレットにデータのブロックを格納することを可能にするチャネルマネージャからの許可を要求することができる。例示的ストリームレット許可要求及び許可データ構造は以下の通りである。
StreamletGrantRequestデータ構造は、ストリームchannelの名前及びMXノードがストリームレットからの読取又はストリームレットへの書込を意図するか否かを示すモードを格納する。MXノードは、StreamletGrantRequestをチャネルマネージャノードに送信する。チャネルマネージャノードは、相応にMXノードにStreamletGrantResponseデータ構造を送信する。StreamletGrantResponseは、ストリームレットの識別子(streamlet−id)、ストリームレットの最大サイズ(limit−size)、ストリームレットが格納することができるメッセージの最大数(limit−msgs)、TTL(limit−life)、及びストリームレットが存在するQノードの識別子(q−node)を含有する。StreamletGrantRequest及びStreamletGrantResponseはまた、ストリームレットから読み取るためのストリームレットの位置(又はチャネルの位置)を示す位置フィールドを有することができる。
許可は、ストリームレットが閉じた状態で無効になる。例えば、ストリームレットは、ストリームレットのTTLが満了した状態で読取及び書込に対して閉じ、ストリームレットのストレージが満杯の時はストリームレットが書込に対して閉じる。許可が無効になった時に、MXノードは、ストリームレットから読み取る又はストリームレットに書き込むためのチャネルマネージャからの新しい許可を要求することができる。新しい許可は、異なるストリームレットを参照することになり、かつ新しいストリームレットが存在する場所に応じて同じか又は異なるQノードを意味することになる。
図3Aは、様々な実施におけるデータをストリームレットに書き込む例示的方法のデータ流れ図である。図3Aでは、ストリームレットに書き込むためのMXノード(例えば、MXノード202)要求が、上述のようにチャネルマネージャ(例えば、チャネルマネージャ214)によって許可された時に、MXノードは、チャネルマネージャ(302)から受信した許可応答で識別されたQノード(例えば、Qノード208)との送信制御プロトコル(TCP)接続を確立する。ストリームレットは、複数の書込許可(例えば、複数の発行者クライアントによって発行されたメッセージに対する)によって同時に書き込むことができる。MXノードとQノード間の接続プロトコルの他のタイプも可能である。
MXノードは、次に、MXノードがQノードに書き込みたいストリームレットの識別子を備えた準備−発行メッセージを送信する(304)。ストリームレット識別子及びQノード識別子は、上述のように書込許可でチャネルマネージャによって提供することができる。Qノードは、識別されたストリームレットのハンドラ処理301(例えば、Qノードで実行されるコンピュータ処理)にメッセージを渡す(306)。ハンドラ処理は、MXノードに肯定応答を送信することができる(308)。肯定応答を受信した後に、MXノードは、識別されたストリームレットに受信したデータを格納するハンドラ処理へのメッセージの書込(発行)(例えば、310、312、314、及び318)を開始する。ハンドラ処理はまた、受信したデータの肯定応答(316、320)をMXノードに送信することができる。一部の実施では、肯定応答は、抱き合わせ又は累積的とすることができる。例えば、ハンドラ処理は、予め決められたデータ量が受信される毎に(例えば、100メッセージが受信される毎に)、又は予め決められた時間毎に(例えば、1ミリ秒毎に)MXノードに肯定応答を送信することができる。ネーグルのアルゴリズムのような他の肯定応答スケジューリングアルゴリズムを使用することもできる。
ストリームレットが、発行されたデータをそれ以上受け入れられない場合(例えば、ストリームレットが満杯の時)、ハンドラ処理は、問題を示す否定応答(NAK)メッセージ(330)、次に、EOF(ファイルの終わり)メッセージ(332)を送信する。従って、ハンドラ処理は、発行許可のためのMXノードとのアソシエーションを閉じる。MXノードが格納する追加のメッセージを有する場合に、MXノードは、チャネルマネージャから別のストリームレットの書込許可を要求することができる。
図3Bは、様々な実施におけるストリームレットからデータを読み取る例示的方法のデータ流れ図である。図3Bでは、MXノード(例えば、MXノード204)は、チャネルマネージャ(例えば、チャネルマネージャ214)に特定のメッセージから始まる特定のチャネル又はチャネルの時間オフセットを読み取るための要求を送信する。チャネルマネージャは、特定のメッセージを含有するストリームレットの識別子、特定のメッセージに対応するストリームレットにおける位置、及び特定のストリームレットを含有するQノード(例えば、Qノード208)の識別子を含む読取許可をMXノードに戻す。MXノードは、QノードとのTCP接続を確立する(352)。MXノードとQノード間の接続プロトコルの他のタイプも可能である。
MXノードは、ストリームレットの識別子(Qノード内)及びMXノードがそこから読み取りたいストリームレットの位置を備えた購読メッセージ(354)をQノードに送信する(356)。Qノードは、購読メッセージをストリームレットのハンドラ処理351に渡す(356)。ハンドラ処理は、MXノードに肯定応答を送信することができる(358)。ハンドラ処理は、ストリームレットの位置で開始されるメッセージ(360、364、366)をMXノードに送信する。一部の実施では、ハンドラ処理は、ストリームレットのメッセージの全てをMXノードに送信することができる。特定のストリームレット内の最後のメッセージを送信した後に、ハンドラ処理は、最後のメッセージの通知をMXノードに送信することができる。MXノードは、特定のチャネル内の次のメッセージを含有する別のストリームレットに対する別の要求をチャネルマネージャに送信することができる。
特定のストリームレットが閉じた場合(例えば、特定のストリームレットのTTLが満了した後)、ハンドラ処理は、非購読メッセージ(390)、次に、EOFメッセージ(392)を送信して読取許可のためのMXノードとのアソシエーションを閉じることができる。MXノードは、MXノードが特定のチャネル内のメッセージのために別のストリームレットに移る(例えば、チャネルマネージャによって示されたように)時にハンドラ処理とのアソシエーションを閉じることができる。MXノードは、MXノードが、対応するクライアントデバイスから非購読メッセージを受信した場合に、ハンドラ処理とのアソシエーションを閉じることができる。
様々な実施では、ストリームレットは、同じ時間インスタンスに書き込み、かつ読み取ることができる。例えば、同じ時間インスタンスに有効読取許可及び有効書込許可を存在させることができる。様々な実施では、複数の読取許可(例えば、複数の発行者クライアントによって購読されるチャネルに対する)によって同時にストリームレットを読み取ることができる。ストリームレットのハンドラ処理は、例えば、到着時間に基づいて同時書込許可からのメッセージを順序付けし、その順序に基づいてメッセージを格納することができる。従って、複数の発行者クライアントからチャネルに対して発行されたメッセージは、チャネル内のストリームレットにシリアル化して格納することができる。
メッセージングシステム100では、1又は2以上のCノード(例えば、Cノード220)は、1又は2以上のQノードからのデータ転送をアンロードすることができる。例えば、特定のチャネルのためのストリームレットをQノードから要求する多くのMXノードが存在する場合に、ストリームレットをアンロードして1又は2以上のCノードをキャッシュに入れることができる。MXノード(例えば、チャネルマネージャから読取許可によって命令される)は、代わりにCノードからストリームレットを読み取ることができる。
上述のように、メッセージングシステム100内のチャネルのためのメッセージは、チャネルストリームで順序付けされる。チャネルマネージャ(例えば、チャネルマネージャ214)は、それぞれのQノードに各々が存在する固定サイズストリームレットにチャネルストリームを分割する。従って、チャネルストリームの格納は、多くのQノード間で共有することができ、各Qノードは、チャネルストリームの一部分(1又は2以上のストリームレット)を格納する。特に、ストリームレットは、Qノード上のコンピュータ処理に関連付けられたレジスタ及び動的メモリ要素に格納することができ、従って、ハードディスクのような持続性低速ストレージデバイスにアクセスする必要性を回避する。これは高速のメッセージアクセスをもたらす。チャネルマネージャは、Qノードのそれぞれのワークロードをモニタし、いかなる1つのQノードの過負荷も回避する方法でストリームレットを割り当てることにより、メッセージングシステム100のQノード間の負荷の均衡を取ることができる。
様々な実施では、チャネルマネージャは、各アクティブストリームレット、ストリームレットが存在するそれぞれのQノード、ストリームレットの第1のメッセージの位置の識別、及びストリームレットが書込に対して閉じているか否かを識別するリストを維持する。一部の実施では、Qノードは、満杯であるために又はストリームレットのTTLが満了した時にストリームレットが閉じていることをストリームレットに発行しているチャネルマネージャ及びあらゆるMXノードに通知する。ストリームレットが閉じている時に、MXノードがストリームレットからメッセージの取り出しを継続することができるようにストリームレットのTTLが満了するまでアクティブストリームレットのチャネルマネージャのリストにストリームレットが残る。
MXノードが所与のチャネルに対する書込許可を要求して書き込むことができるチャネルのためのストリームレットがない時に、チャネルマネージャは、Qノードの1つに新しいストリームレットを割り当て、ストリームレットのアイデンティティ及びStreamletGrantResponseのQノードを戻す。そうでなければ、チャネルマネージャは、ストリームレット及び対応するQノードをStreamletGrantResponseに書き込むために現在開いているというアイデンティティを戻す。MXノードは、ストリームレットが満杯になるか又はストリームレットのTTLが満了するまでストリームレットにメッセージを発行することができ、この後で新しいストリームレットをチャネルマネージャによって割り当てることができる。
MXノードが所与のチャネルの読取許可を要求して読み取ることができるチャネルのためのストリームレットがない時に、チャネルマネージャは、Qノードの1つに新しいストリームレットを割り当て、ストリームレットのアイデンティティ及びStreamletGrantResponseのQノードを戻す。そうでなければ、チャネルマネージャは、ストリームレットのアイデンティティ及びMXノードが読み取りたい位置を含有するQノードを戻す。Qノードは、送信するストリームレットのメッセージがなくなるまで指定された位置で始まるストリームレットからMXノードへのメッセージの送信を開始することができる。新しいメッセージがストリームレットに発行された時に、このストリームレットを購読しているMXノードは、新しいメッセージを受信する。ストリームレットのTTLが満了した場合に、ハンドラ処理351は、EOFメッセージ(392)をストリームレットを購読するいずれのMXノードにも送信する。
図2に関して上述したように、メッセージングシステム100は、複数のチャネルマネージャ(例えば、チャネルマネージャ214、215)を含むことができる。複数のチャネルマネージャは、弾力性を提供して単一障害点を回避する。例えば、1つのチャネルマネージャは、それが維持するストリームレットと現在の許可のリストとを別の「スレーブ」チャネルマネージャに複製することができる。別の例として、複数のチャネルマネージャは、Paxos又はRaftプロトコルのような分散コンセンサスプロトコルを使用して複数のチャネルマネージャ間で作動を調整することができる。
図4Aは、メッセージングシステムのチャネルにメッセージを発行する例示的方法のデータ流れ図である。図4Aでは、発行者(例えば、発行者クライアント402、404、406)が、図2に関して上述したメッセージングシステム100にメッセージを発行する。例えば、発行者402は、接続411をそれぞれ確立して発行要求をMXノード202に送信する。発行者404は、接続413をそれぞれ確立して発行要求をMXノード206に送信する。発行者406は、接続415をそれぞれ確立して発行要求をMXノード204に送信する。ここでMXノードは、内部ネットワーク218を通じてメッセージングシステム100のチャネルマネージャ(例えば、チャネルマネージャ214)及び1又は2以上のQノード(例えば、Qノード212及び208)と通信することができる(417)。
例証として、発行者からMXノードへの各発行要求(例えば、JSON鍵/値ペアにおける)は、チャネル名及びメッセージを含む。MXノード(例えば、MXノード202)は、発行要求のメッセージを発行要求のチャネル名(例えば、「foo」)に基づいてメッセージングシステム100の別々のチャネルに割り当てることができる。MXノードは、チャネルマネージャ214によって割り当てられたチャネルを確認することができる。チャネル(購読要求で指定)がメッセージングシステム100にまだ存在しない場合、チャネルマネージャは、メッセージングシステム100内で新しいチャネルを生成かつ維持することができる。例えば、チャネルマネージャは、チャネルのストリームの各アクティブストリームレットを識別するリスト、ストリームレットが存在するそれぞれのQノード、及び上述のようなストリームレットの最初と最後のメッセージの位置の識別を維持することによって新しいチャネルを維持することができる。
特定のチャネルのメッセージに関して、MXノードは、メッセージングシステム100の1又は2以上のバッファ又はストリームレットにメッセージを格納することができる。例えば、MXノード202は、発行者402からチャネルfooへの発行要求メッセージM11、M12、M13、及びM14を受信する。MXノード206は、発行者404からチャネルfooへの発行要求メッセージM78及びM79を受信する。MXノード204は、発行者406からチャネルfooへの発行要求メッセージM26、M27、M28、M29、M30及びM31を受信する。
MXノードは、チャネルfooのためのメッセージを格納する1又は2以上のストリームレットを識別することができる。上述のように、各MXノードは、MXノードがチャネルfooのストリームレットにメッセージを格納するのを可能にするチャネルマネージャ214からの書込許可を要求することができる。例えば、MXノード202は、チャネルマネージャ214からQノード212上のストリームレット4101にメッセージM11、M12、M13、及びM14を書き込む許可を受信する。MXノード206は、チャネルマネージャ214からストリームレット4101にメッセージM78及びM79を書き込む許可を受信する。ここでストリームレット4101は、チャネルfooのメッセージを格納するチャネルストリーム430のストリームレットのシーケンスの最後のストリームレット(この時点で)である。ストリームレット4101は、ストリームレット4101に以前に格納したがまだ開いているチャネルfooのメッセージ(421)を有し、すなわち、ストリームレット4101は、メッセージを格納する空間をまだ有しており、かつストリームレットのTTLが満了していない。
MXノード202は、各メッセージがMXノード202によって受信されたそれぞれの時間に基づいてチャネルfooのためのメッセージを例えばM11、M13、M14、M12(422)のように並べ、受信したメッセージを並べられた通りにストリームレット4101に格納することができる。すなわち、MXノード202は、最初にM11、次に、M13、M14、及びM12を受信する。同様に、MXノード206は、各メッセージがMXノード206によって受信されたそれぞれの時間に基づいてチャネルfooのためのメッセージを例えばM78、M79(423)のように並べ、受信したメッセージを並べられた通りにストリームレット4101に格納することができる。
MXノード202(又はMXノード206)は、例えば図3Aに関して上述したストリームレットにデータを書き込む方法を使用して受信メッセージを格納することができる。様々な実施では、MXノード202(又はMXノード206)は、チャネルfooのための受信メッセージをバッファに(例えばローカルデータバッファに)入れて、バッファメッセージが事前に決められたサイズ(例えば、100メッセージ)に達した時に、又は事前に決められた時間(例えば、50ミリ秒)が経過した時に、チャネルfooのストリームレット(例えば、ストリームレット4101)に受信メッセージを格納することができる。すなわち、MXノード202は、ある時間に又は50ミリ秒毎にストリームレットに100メッセージを格納することができる。ネーグルのアルゴリズムのような他の肯定応答スケジューリングアルゴリズムを使用することもできる。
様々な実施では、Qノード212(例えばハンドラ処理)は、チャネルfooのメッセージをMXノード202及びMXノード206によって並べられた順序でストリームレット4101に格納する。Qノード212は、Qノード212がメッセージを受信する順序でチャネルfooのメッセージをストリームレット4101に格納する。例えば、Qノード212は、最初に(MXノード206から)メッセージM78、次にメッセージM11及びM13(MXノード202から)、M79(MXノード206から)、及びM14及びM12(MXノード202から)を受信すると仮定する。Qノード212は、ストリームレット4101に以前に格納したメッセージ421の直後に、受信した順序、例えば、M78、M11、M13、M79、M14、及びM12でストリームレット4101にメッセージを格納する。従って、複数の発行者(例えば、402、404)からチャネルfooに発行されたメッセージは、特定の順序で並べてチャネルfooのストリームレット4101に格納することができる。チャネルfooを購読する異なる購読者は、図4Bに関して詳しく説明するように同じ特定の順序でチャネルfooのメッセージを受信することになる。
図4Aの例では、メッセージM12がストリームレット4101に格納された後の時間インスタンスで、MXノード204は、チャネルマネージャ214からチャネルfooに書き込む許可を要求する。チャネルマネージャ214は、ストリームレット4101が書込にまだ開いている場合にストリームレット4101へのメッセージの書込許可をMXノード204に提供する。MXノード204は、各メッセージがMXノード204によって受信されたそれぞれの時間に基づいてチャネルfooのためのメッセージを例えばM26、M27、M31、M29、M30,M28(424)のように並べ、チャネルfooのために並べられた通りにメッセージを格納する。
例証として、メッセージM26がストリームレット4101の最後の利用可能な位置に格納されると仮定する。ストリームレット4101が現在満杯であるので、Qノード212は、MXノード204にNAKメッセージ、次にEOFメッセージを送信し、図3Aに関して上述したように書込許可のためのMXノード204とのアソシエーションを閉じる。次に、MXノード204は、チャネルfooのための追加のメッセージ(例えば、M27、M31など)のためのチャネルマネージャ214からの別の書込許可を要求する。
チャネルマネージャ214は、メッセージングシステム100の利用可能なQノードのそれぞれの過負荷(例えばどのくらいのストリームレットが各Qノード上に存在しているか)をモニタすることができる。チャネルマネージャ214は、いずれの所与のQノードに対しても過負荷(例えば、ストリームレットが多すぎる又は読取又は書込許可が多すぎる)を回避できるようにMXノード204からの書込要求にストリームレットを割り当てることができる。例えば、チャネルマネージャ214は、メッセージングシステム100の最小負荷Qノードを識別してMXノード204からの書込要求に対して最小負荷Qノードに新しいストリームレットを割り当てることができる。図4Aの例では、チャネルマネージャ214は、Qノード208上の新しいストリームレット4102を割り当てて、ストリームレット4102へのチャネルfooの書込メッセージに対する書込許可をMXノード204に提供する。図4Aに示すように、Qノードは、MXノード204によって並べられた順序M27、M31、M29,M30、及びM28で(この時点でストリームレット4102に対して他の同時書込許可がないと仮定して)MXノード204からのメッセージをストリームレット4102に格納する。
チャネルマネージャ214が、MXノード(例えば、MXノード204)からのチャネル(例えば、foo)への書込許可の要求に対して新しいストリームレット(例えば、ストリームレット4102)を割り当てる時に、チャネルマネージャ214は、チャネルのストリームに既に存在する他のストリームレットのTTLの後に満了することになるTTLをストリームレットに割り当てる。例えば、チャネルマネージャ214は、ストリームレットを割り当てる時にチャネルfooのチャネルストリームの各ストリームレットに3分のTTLを割り当てることができる。すなわち、各ストリームレットは、チャネルマネージャ214によって割り当てられた(生成された)後に3分で満了することになる。前のストリームレットが閉じた(例えば、完全に満杯になった又は満了した)後に新しいストリームレットが割り当てられるので、チャネルfooのチャネルストリームは、従って、前のストリームレットが満了した後に各々が順次満了するストリームレットを含む。例えば、図4Aのチャネルfooの例示的チャネルストリーム430に示されるように、ストリームレット4098及び4098の前のストリームレットは満了している(点線の網掛けボックスによって表示)。これらの満了したストリームレットに格納されたメッセージは、チャネルfooの購読者が読み取ることはできない。ストリームレット4099、4100、4101、及び4102は、アクティブのままである(満了していない)。ストリームレット4099、4100、及び4101は、書込に対して閉じているが、読み取ることはできる。ストリームレット4102は、メッセージM28がストリームレット4102に格納された時点で読み取り、かつ書き込むことができる。後の時間にストリームレット4099が満了し、次にストリームレット4100、4101が満了することになる等々である。
図4Bは、メッセージングシステムのチャネルを購読する例示的方法のデータ流れ図である。図4Bでは、購読者480は、メッセージングシステム100のMXノード461との接続462を確立する。購読者482は、MXノード461との接続463を確立する。購読者485は、メッセージングシステム100のMXノード468との接続467を確立する。ここで、MXノード461及び468は、内部ネットワーク218を通じてメッセージングシステム100内のチャネルマネージャ214及び1又は2以上のQノードとそれぞれ通信することができる(464)。
購読者(例えば、購読者480)は、接続を確立する(例えば、462)及びチャネルfooのメッセージを購読する要求をMXノード(例えば、MXノード461)に送信することによってメッセージングシステム100のチャネルfooを購読することができる。要求(例えば、JSON鍵/値ペアにおける)は、チャネル名「foo」を含むことができる。購読要求を受信した時に、MXノード461は、チャネルマネージャ214にチャネルfooのチャネルストリーム内のストリームレットの読取許可に対する要求を送信することができる。
例証として、現時点でチャネルfooのチャネルストリーム431が図4Bに示すようにアクティブストリームレット4102、4103、及び4104を含むと仮定する。ストリームレット4102及び4103は各々が満杯である。ストリームレット4104は、位置47731に格納された最後のメッセージ(現時点で)を含むチャネルfooのメッセージを格納する。ストリームレット4101及び4101の以前のストリームレットは、このそれぞれのTTLが満了しているので無効である。ストリームレット4101のTTLが満了しているためにストリームレット4101はもう有効でないので、図4Aに関して上述したストリームレット4101に格納されたメッセージM78、M11、M13、M79、M14、M12、及びM26はチャネルfooの購読者に利用できない点に注意されたい。上述のように、チャネルfooのチャネルストリームの各ストリームレットは、3分のTTLを有し、従って、現在の時間から3分以内にチャネルfooに発行された(すなわち、チャネルのストリームレットに格納された)メッセージ(チャネルfooのストリームレットに格納されたもの)だけがチャネルfooの購読者に利用可能になる。
例えば、購読者480がチャネルfooの新しい購読者である時に、MXノード461は、チャネルfooの全ての利用可能なメッセージの読取許可を要求することができる。要求に基づいて、チャネルマネージャ214は、チャネルfooのアクティブストリームレットの最も早期のストリームレット(すなわち、アクティブストリームレットのシーケンスの第1)であるストリームレット4102(Qノード208上)の読取許可をMXノード461に提供する。MXノード461は、例えば図3Bに関して上述したストリームレットからデータを読み取る方法を使用して、Qノード208からのストリームレット4102内のメッセージを取り出すことができる。ストリームレット4102から取り出されたメッセージは、ストリームレット4102に格納されたのと同じ順序を維持する点に注意されたい。様々な実施では、ストリームレット4102に格納されたメッセージをMXノード461に提供する時に、Qノード208は、メッセージをバッファに(例えば、ローカルデータバッファに)入れて、バッファメッセージが事前に決められたサイズ(例えば、200メッセージ)に達した又は事前に決められた時間(例えば、50ミリ秒)が経過した時にMXノード461にメッセージを送信することができる。すなわち、Qノード208は、ある時間に又は50ミリ秒毎に200メッセージでチャネルfooのメッセージ(ストリームレット4102からの)をMXノード461に送信することができる。ネーグルのアルゴリズムのような他の肯定応答スケジューリングアルゴリズムを使用することもできる。
ストリームレット4102の最後のメッセージを受信した後で、MXノード461は、肯定応答をQノード208に送信し、チャネルマネージャ214にチャネルfooのチャネルストリームの次のストリームレットに対する別の要求(例えば、読取許可の要求)を送信することができる。要求に基づいて、チャネルマネージャ214は、チャネルfooのアクティブストリームレットのシーケンスでストリームレット4102に論理的に続くストリームレット4103(Qノード472上)の読取許可をMXノード461に提供する。MXノード461は、例えば、ストリームレット4103に格納された最後のメッセージを取り出すまで図3Bに関して上述したストリームレットからデータを読み取る方法を使用して、ストリームレット4103に格納されたメッセージを取り出すことができる。MXノード461は、次のストリームレット4104(Qノード474上)のメッセージに対する読取許可の別の要求をチャネルマネージャ214に送信することができる。読取許可を受信した後で、MXノード461は、位置47731の最後のメッセージまでストリームレット4104に格納されたチャネルfooのメッセージを取り出す。同様に、MXノード468は、ストリームレット4102、4103、及び4104からメッセージを取り出して(図4Bに点線の矢印で図示)、メッセージを購読者485に提供することができる。
MXノード461は、Qノード208、472、又は474からメッセージを受信すると共に購読者480に(接続462を通じて)チャネルfooの取り出されたメッセージを送信することができる。様々な実施では、MXノード461は、ローカルバッファに取り出されたメッセージを格納することができる。従って、取り出されたメッセージは、他の購読者がチャネルfooを購読してチャネルのメッセージを要求した時に別の購読者(例えば、購読者482)に提供することができる。MXノード461は、事前に決められた期間を超えた発行の時間を各々が有するローカルバッファに格納されたメッセージを取り除くことができる。例えば、MXノード461は、3分を超える発行のそれぞれの時間を有するメッセージ(ローカルバッファに格納された)を取り除くことができる。一部の実施では、MXノード461のローカルバッファにメッセージを維持する事前に決められた期間は、所与の時点でチャネルのストリームから取り出されたメッセージが既に満了しているそれぞれの有効期間を有するストリームレットに含まれないので、チャネルfooのチャネルストリーム内のストリームレットの有効持続時間と同じか又は類似とすることができる。
チャネルストリーム431から取り出されて購読者480に(MXノード461によって)送信されたメッセージは、メッセージがチャネルストリームに格納されたのと同じ順序で並べられる。例えば、チャネルfooに発行されたメッセージは、特定の順序(例えば、M27、M31、M29、M30など)で並べられてストリームレット4102に格納され、続いてストリームレット4103及びストリームレット4104に格納される。MXノードは、チャネルストリーム431からメッセージを取り出して、メッセージがチャネルストリームに格納されたのと同じ順序M27、M31、M29、M30などで取り出されたメッセージを購読者480に提供し、次にストリームレット4103の順序付けられたメッセージ、及び次にストリームレット4104の順序付けられたメッセージが続く。
チャネルストリーム431の全ての利用可能なメッセージを取り出す代わりに、MXノード461は、特定の位置、例えば位置47202のメッセージから開始するチャネルストリーム431に格納されたメッセージに対する読取許可を要求することができる。例えば、位置47202は、購読者480がチャネルfooを(例えば、メッセージングシステム100のMXノード461又は別のMXノードへの接続を通じて)最後に購読した時の早期のインスタンス(例えば、現在の時間の10秒前)に対応することができる。MXノード461は、位置47202で開始するメッセージに対する読取許可の要求をチャネルマネージャ214に送信することができる。要求に基づいて、チャネルマネージャ214は、ストリームレット4104(Qノード474上)の読取許可及びチャネルストリーム位置47202に対応するストリームレット4104上の位置をMXノード461に提供する。MXノード461は、提供された位置から開始するストリームレット4104のメッセージを取り出して、取り出されたメッセージを購読者480に送信することができる。
図4A及び4Bに関して上述したように、チャネルfooに発行されたメッセージは、特定の順序で並べられてチャネルのストリームレットに格納される。チャネルマネージャ214は、ストリームレットのそれぞれの有効期間を通して生成される場合のストリームレットの順序付けられたシーケンスを維持する。MXノード(例えば、MXノード461、又はMXノード468)によってストリームレットから取り出されて購読者に提供されたメッセージは、一部の実施では、メッセージがストリームレットの順序付けられたシーケンスで格納されるのと同じ順序にすることができる。従って、異なる購読者(例えば、購読者480、購読者482、又は購読者485)に送信されるメッセージは、購読者が接続されるMXノードに関わらず(メッセージがストリームレットに格納されるのと)同じ順序にすることができる。
様々な実施では、ストリームレットは、メッセージのブロックのセットにメッセージを格納する。各ブロックは、いくつかのメッセージを格納する。例えば、ブロックは、200キロバイトのメッセージを格納することができる。各ブロックは、ブロックを保持するストリームレットの有効期間よりも短い可能性がある固有の有効期間を有する。ブロックのTTLが満了した状態で、図4Cに関して以下に詳しく説明するように、ブロックを保持するストリームレットからこのブロックを廃棄することができる。
図4Cは、メッセージングシステムのチャネルのメッセージを格納するための例示的データ構造である。図4A及び4Bに関してチャネルfooで説明したように、現時点で、チャネルfooのチャネルストリーム432が図4Cに示すようにアクティブストリームレット4104及び4105を含むと仮定する。ストリームレット4103及び4103の以前のストリームレットは、このそれぞれのTTLが満了しているので無効である。ストリームレット4104はその容量の点で既に満杯であり(例えば、対応する書込許可によって決定されるように)、追加のメッセージ書込に対しては閉じられている。ストリームレット4104は、メッセージを読み取ることができる。ストリームレット4105は開かれており、メッセージ書込及び読取に利用可能である。
例証として、ストリームレット4104(例えば、図4Bに示したQノード474で実行されるコンピュータ処理)は、現在2ブロックのメッセージを保持する。ブロック494は、チャネル位置47301から47850のメッセージを保持する。ブロック495は、チャネル47851から48000のメッセージを保持する。ストリームレット4105(例えば、メッセージングシステム100の別のQノードで実行されるコンピュータ処理)は、現在2ブロックのメッセージを保持する。ブロック496は、チャネル位置48001から48200のメッセージを保持する。ブロック497は、チャネル位置48201から開始するメッセージを保持し、チャネルfooの追加のメッセージを依然として受け入れる。
ストリームレット4104が(例えば書込許可によって)生成された時に、第1のブロック(サブバッファ)492は、メッセージ、例えば、チャネル位置47010から47100のメッセージを格納するために生成される。その後に、ブロック492がその容量に達した後で、別のブロック493がメッセージ、例えば、チャネル位置47111から47300のメッセージを格納するために生成される。ブロック494及び495は、追加のメッセージを格納するために続けて生成される。その後に、ストリームレット4104は、追加のメッセージ書込に対して閉じられ、チャネルfooの追加のメッセージを格納するための追加のブロックを備えたストリームレット4105が生成される。
この例では、ブロック492及び493のそれぞれのTTLは満了している。これらの2つのブロックに格納されたメッセージ(チャネル位置47010から47300)は、チャネルfooの購読者によって読み取ることはできない。ストリームレット4104は、例えばブロック492及び493に対するメモリ空間の割り当てを解除することによって、これらの2つの満了したブロックを廃棄することができる。ブロック494又は495は満了になり、ストリームレット4104自体が無効になる前にストリームレット4104によって廃棄することができる。これに代えて、ストリームレット4104自体は、ブロック494又は495が満了する前に無効になることができる。従って、ストリームレットは、例えばストリームレット及びブロックのそれぞれのTTLに応じて、1又は2以上のメッセージのブロックを保持できるか又はメッセージのブロックを包含しなくてもよい。
ストリームレット、又はメッセージングシステム100のQノードで実行されるコンピュータ処理は、Qノードからメモリ空間の一定のサイズを割り当てることによってチャネルのメッセージを格納するためのブロックを生成することができる。ストリームレットは、ある時間の1つのメッセージをメッセージングシステム100のMXノードから受信し、受信したメッセージをブロックに格納することができる。これに代えて、MXノードは、メッセージのグループをアセンブルし(すなわちバッファに入れ)、メッセージのグループをQノードに送信することができる。ストリームレットは、メモリ空間のブロック(Qノードからの)を割り当てて、メッセージのグループをブロックに格納することができる。MXノードは、例えば各メッセージから共通ヘッダを取り除くことにより、メッセージのグループに圧縮を行うこともできる。
上述のように、メッセージングシステム100のチャネルのストリームレットは、それぞれのTTLを有する。ストリームレットのTTLが満了した時に、ストリームレットに以前に格納したメッセージは、チャネルの購読者に対してメッセージングシステム100からもはや利用可能ではない。これは、メッセージの喪失又は購読者がメッセージングシステム100から受信するメッセージにおけるギャップを起こす可能性がある。例えば、購読者は、そのチャネルから非購読にされている場合があり(例えばメッセージングシステムにアクセスするアプリケーションが閉じられている)、10分後に再度チャネルを購読する(例えば、再度アプリケーションを再開する)。購読者は、10分スパン中に満了したストリームレットに格納されたメッセージを(メッセージングシステム100から)受信することができないが、アクティブである(満了していない)ストリームレットに格納されたメッセージだけを受信する。従って、購読者は、購読者が10分前に又は10分前までに受信した最後のメッセージとチャネルのストリームの第1アクティブストリームレット(すなわち、満了前の最短アクティブ時間を有するストリームレット)の第1のメッセージとの間のチャネルのメッセージにおけるギャップを見ることになる。
本明細書で説明する特定の実施は、メッセージングシステム100から購読者が受信するチャネルのメッセージの連続性又は持続性を維持する方法を説明する。購読者がメッセージングシステム100のチャネルを購読してチャネルのチャネルストリームのアクティブストリームレットではもはや利用可能ではないチャネルのメッセージを要求する時に、様々な実施は、図5に関して以下に更に説明するように、別の購読者からチャネルのメッセージの履歴を要求し、かつ要求している購読者にチャネルストリームの最新のメッセージを有するメッセージの履歴を提供することができる。
図5は、メッセージングシステムのチャネルの購読者に対してメッセージの持続性を維持する例示的方法のデータ流れ図である。図5では、購読者582は、メッセージングシステム100のMXノード531との接続562を設定する。同様に、購読者584、586、588、及び589は、メッセージングシステム100のMXノード(例えば、MXノード531、533、535、537)とのそれぞれの接続564、566、568、及び569を設定する。ここで、MXノード531、533、535、及び537は、内部ネットワーク218を通じてメッセージングシステム100におけるチャネルマネージャ214及び1又は2以上のQノードとそれぞれ通信することができる(530)。
例示的に、現在の時点で、上述したチャネルfooのチャネルストリーム501は、アクティブストリームレット5127及び5128を含むと仮定する。ストリームレット5127は満杯である。ストリームレット5128は、位置54331に格納された最後のメッセージ(現時点で)を含むチャネルfooのメッセージを格納する。ストリームレット5126及び5126の前のストリームレットは、それぞれのTTLが満了しているので無効である。
購読者584、586、588、及び589は、現時点でチャネルfooを購読していると仮定する。購読者584、86、588、及び589の各々は、最後の(最新の)アクティブストリームレット5128における位置54431に格納された最後の(最新の)メッセージを含むチャネルfooのメッセージをメッセージングシステム100から取り出し終えている。購読者584、586、588、及び589は、例えば、チャネルfooの取り出されたメッセージをそれぞれローカルに格納することができる。例えば、購読者は、メッセージングシステム100のチャネルを購読及び発行するクライアントアプリケーションによってアクセス可能なローカルメモリにメッセージングシステム100から取り出されたメッセージを格納することができる。クライアントアプリケーションは、例えば、図1Bに関して上述したアプリケーション層104の一部とすることができる。クライアントアプリケーションは、クライアントアプリケーションがメッセージングシステム100からメッセージを受信したのと同じ順序で、すなわち、上述したように、メッセージがチャネルfooのチャネルストリーム501に格納されるのと同じ順序でチャネルfooの受信されたメッセージをローカルに格納することができる。
これに加えて、クライアントアプリケーションは、チャネルfooのチャネルストリーム501に各メッセージの対応するチャネルストリーム位置をローカルに格納することができる。ここで、メッセージのチャネルストリーム位置は、例えば、メッセージングシステム100によってメッセージと共に購読者に提供することができる。
チャネルfooとの各購読者の現在の購読セッションの持続時間に応じて、異なる購読者は、チャネルfooのメッセージの異なる量をローカルに格納することができる。例えば、図5では、購読者584は、チャネルストリーム位置53820(満了したストリームレット5125内)から54431までのチャネルfooのメッセージ(594)をローカルに格納する。購読者586は、チャネルストリーム位置53244(満了したストリームレット5123内)から54431までのチャネルfooのメッセージ(596)をローカルに格納する。購読者588は、チャネルストリーム位置54309(アクティブストリームレット5127内)から54431までのチャネルfooのメッセージ(598)をローカルに格納する。購読者589は、チャネルストリーム位置54005(満了したストリームレット5126内)から54431までのチャネルfooのメッセージ(599)をローカルに格納する。この例では、購読者586は、現時点でチャネルfooとの最長現在の購読セッションを有する。購読者588は、現時点でチャネルfooとの最短現在の購読セッションを有する。図5では、現在の購読者584、586、588、及び589は、チャネルfooの最新(最後の)メッセージ(チャネルストリーム位置54431)をローカルに受信及び格納し終えている。状況によっては、チャネルの現在の購読者は、メッセージングシステムとの同期から外れている可能性があり(例えば、MXノードへの接続を通じたメッセージ受信におけるタイムラグに起因して)、チャネルの最新メッセージを持たない可能性がある。
例示的に、現時点で、購読者582は、例えば鍵/値ペアを有するJSONメッセージでチャネルfooのメッセージに対する要求をMXノード531に送信する。購読者582が早期にチャネルfooを購読していたが、その後(しかし現時点の前)は購読しなかったと仮定する。購読者582は、チャネルストリーム位置52810(ストリームレット5123の前の満了したストリームレット)から53519(満了したストリームレット5124内)までのチャネルfooのメッセージ(592)をローカルに格納し終えている。要求に対するJSONメッセージは、以下の通りとすることができる。
ここで、要求のJSONメッセージは、チャネルfooに対して及び53520の次のチャネルストリーム位置で始まるメッセージに対して購読におけるアクションを示している。購読者582がチャネルfooの新しい購読者である場合に、チャネルfooのメッセージに対する要求は、「0」の開始チャネルストリーム位置又はチャネルストリーム501の第1の位置を有することができる。
チャネルfooのストリーム501のアクティブストリームレット5127及び5128は、54121からの位置(最も古いアクティブストリームレット5127の第1の位置)で開始するメッセージだけを有するので、チャネルfooのメッセージが、アクティブストリームレット5127及び5128から購読者582のためだけに取り出された場合に、購読者582は、メッセージのギャップ(例えば、位置53519と54121の間のメッセージ)を見ることができるであろう。
アクティブストリームレット(チャネルfooのストリーム501の)からだけ購読者582のためにチャネルfooのメッセージを取り出す代わりに、メッセージングシステム100は、例えば、チャネルfooの現在の購読者から古いメッセージを要求することができる。より具体的には、チャネルfooのメッセージに対する要求を購読者582から受信した後に、MXノード531は、最初に、要求の開始チャネルストリーム位置(すなわち、52520)がアクティブストリームレットに又はチャネルfooのチャネルストリームの満了したストリームレットにあるか否かを決定する。例えば、MXノード531は、要求の開始チャネルストリーム位置に対応する特定のメッセージを識別し、特定のメッセージがチャネルfooのストリームのアクティブストリームレットに格納されるか、又は現時点で満了しているストリームレットに格納されたか否かを決定することができる。この例では、MXノード531は、特定のメッセージが現時点で満了しているストリームレット5124に格納されていると決定し、購読者582がチャネルfooのチャネルストリーム501のアクティブストリームレットから(現時点で)利用できない1又は2以上のメッセージを要求していることを示す。
MXノード531は、例えば、チャネルfooのチャネルストリーム501の現時点で満了しているストリームレットに以前に格納したメッセージを含むことができるメッセージの履歴を他の現在の購読者(チャネルfooの)に要求する。例えば、MXノード531は、チャネルfooの1又は2以上の他の現在の購読者、例えば、購読者584、586、588、及び589に特別なメッセージを送信することができる。特別なメッセージは、チャネルストリーム位置53520で始まるメッセージを要求する購読者582からの元々の要求を含む。特別なメッセージは、メッセージの履歴(チャネルfooの別の現在の購読者からの)が後でMXノード531に戻されるようにMXノード531の識別子を含む。
MXノード531は、例えば、図3Aに関して上述した方法を使用して、チャネルfooのストリーム501のアクティブ及びオープンストリームレット(例えば、5128)に特別なメッセージ(542)を格納することによってチャネルfooの他の購読者に特別なメッセージを送信することができる(542)。チャネルfooの特別なメッセージ及び他の新しいメッセージ(例えば、チャネルストリーム位置54431の後でチャネルストリーム501に発行されたメッセージ)は、例えば図4Bに関して上述した方法を使用して、チャネルfooの他の購読者に提供することができる。
他の現在の購読者に提供される特別なメッセージは、以下のようなJSONメッセージとすることができる。
ここで、JSONメッセージは、チャネルfooのための及びチャネルストリーム位置53520で始まるメッセージのためのメッセージの履歴を要求するアクションを示している。「data/message_history_request」アクションは、このメッセージがクライアントアプリケーションのユーザインタフェースで表示されないことを購読者のクライアントアプリケーションに示している。すなわち、特別なメッセージは、エンドユーザには見えない。代わりに、「data/message_history_request」アクションは、購読者でローカルに格納されてチャネルストリーム位置53520で又はこの後で始まるチャネルfooの利用可能なメッセージを含む応答メッセージをメッセージングシステム100に提供するようにクライアントアプリケーションに命じるよう構成される。
現在の購読者でローカルに格納されたメッセージは、チャネルfooのチャネルストリーム501と同じ順序で格納されるので、応答におけるチャネルfooのメッセージは、要求の開始チャネルストリーム位置53520で又はこの後で始まるチャネルfooのチャネルストリーム501と同じ順序で並べることができる。応答メッセージは、応答メッセージ内のメッセージがMXノード531に経路指定されて戻されるようにMXノード531の識別子を含む。例えば、現在の購読者584からの応答メッセージは、以下のようなJSONメッセージとすることができる。
ここで、JSONメッセージは、チャネルfooのための及びチャネルストリーム位置53820で始まるメッセージの履歴に対する応答におけるアクションを示している。JSONメッセージは、チャネルストリーム位置53820で始まるメッセージを含む。購読者584は、ローカルに格納されたチャネルストリーム位置53820の前に起こるメッセージを持たない点に注意されたい。
同様に、購読者588は、チャネルストリーム位置54309で始まるローカルに格納されたメッセージの全てを含む応答メッセージを生成することができる(598)。購読者589は、チャネルストリーム位置54005で始まるローカルに格納されたメッセージの全てを含む応答メッセージを生成することができる(599)。ここで、購読者584は、特別なメッセージで要求されるもの以外であるローカルに格納されたメッセージ(594)を有する。購読者584は、特別なメッセージによって指定された開始チャネルストリーム位置53520で始まるローカルに格納されたメッセージを含む応答メッセージを生成することができる。
購読者584、586、588、及び589は、そのそれぞれの応答メッセージを対応するMXノードに送信することができる。応答メッセージをチャネルストリーム501に格納する代わりに、対応するMXノードは、応答メッセージで指定された「data/message_history_response」アクション及びMXノード531の識別子に基づいて内部ネットワーク218を通じて応答メッセージをMXノード531に送信することができる。例えば、MXノード533は、購読者586からの応答メッセージ(チャネルストリーム位置53520から54431までのメッセージを含む)をMXノード531に送信する(546)。MXノード535は、購読者588からの応答メッセージ(チャネルストリーム位置54309から54431までのメッセージを含む)をMXノード531に送信する(548)。MXノード537は、購読者589からの応答メッセージ(チャネルストリーム位置54005から54431までのメッセージを含む)をMXノード531に送信する(546)。一部の実施では、MXノードは、将来の使用のために応答メッセージを格納することができる。
応答メッセージを受信した後に、MXノード531は、例えば、特別なメッセージで要求されたメッセージの多くを含む特定の応答メッセージを選択する。例えば、MXノード531は、購読者586の応答メッセージが、要求されたチャネルメッセージの全て(すなわち、チャネルストリーム位置53520から始まるメッセージ)を含むので、購読者586からの応答メッセージを選択することができる。購読者586からの応答メッセージが存在しない場合に(例えば、購読者586への接続566が切断された場合)、MXノード581は、購読者584の応答メッセージが、他の購読者からの応答メッセージよりも多いメッセージ(特別なメッセージによって要求される)を含むので、購読者584からの応答メッセージを選択することができる。
一方で、MXノード531は、例えば図3Bに関して上述した方法を使用して、チャネルストリーム501からアクティブストリームレット(例えば、5127及び5128)からのメッセージを取り出すことができる。MXノード531は、アクティブストリームレットから取り出されたメッセージを選択された応答メッセージ(例えば、購読者586から)のチャネルメッセージと組み合わせて、組み合わせたメッセージを購読者582に送信することができる(チャネルストリーム501と同じ順序で)。MXノード531は、複製メッセージ(例えば、アクティブストリームレットに格納されたチャネルストリーム位置54121からのメッセージ)を取り除くことにより、取り出されたメッセージと特定の応答メッセージ内のメッセージとを組み合わせることができる。従って、購読者582は、チャネルストリーム位置53519の以前に受信されたメッセージ後のメッセージを喪失(又は複製)することなく、チャネルfooの連続メッセージストリームを見ることができる。
上述のように、MXノード531は、例えば、図5の矢印542によって示されるように特別なメッセージをチャネルストリーム501に格納することにより、チャネルfooの全ての他の現在の購読者にメッセージの履歴を要求する特別なメッセージを送信することができる。様々な実施では、メッセージングシステム100は、ほとんどのメッセージ履歴に応答する可能性があるチャネルfooの1又は2以上の購読者を選択し、選択した購読者に特別なメッセージを送信することができる。例えば、購読者582から初期要求を受信した後に、MXノード531は、他のMXノードに(内部ネットワーク218を通じて)又は固有の接続された購読者から問い合わせることができ、チャネルfooの1又は2以上の現在の購読者を選択することができる。MXノード531は、指定された値(例えば、10分)よりも長い、又は購読者582からの初期要求で開始チャネルストリーム位置53520に「さかのぼる」のに十分に長い期間のチャネルfooへのその現在の接続セッション(そのそれぞれのMXノードを通じた)を有する特定の現在の購読者を選択することができる。MXノード531は、特別なメッセージを特定の購読者に送信することができる。特定の購読者がMXノード531に直接に接続されていない場合、MXノード531は、内部ネットワーク218を通じて特別なメッセージを特定の購読者に送信することができる。
様々な実施では、チャネルマネージャ214(又はメッセージングシステム100の別のソフトウエア構成要素)は、チャネルfooとの(そのそれぞれのMXノードを通じた)最長の現在の接続セッションを有するチャネルfooの「リーダー」購読者を識別することができる。リーダー購読者は、チャネルfooとの短い現在の接続セッションを有する他の購読者と比較して多くのメッセージをローカルに格納しておくことができる。購読者582から初期要求を受信した時に、MXノード531は、リーダー購読者に関してチャネルマネージャ214に問い合わせることができる。MXノード531は、チャネルfooのメッセージの履歴を要求する特別なメッセージをリーダー購読者に(内部ネットワーク218を通じて)送信する。特別なメッセージに基づいて、リーダー購読者は、リーダー購読者でローカルに格納されて初期要求において開始チャネルストリーム位置53520で又はこの後で始まるメッセージを含む応答メッセージを(MXノード531に)戻すことができる。
MXノード531は、特定の購読者が適宜な方式で応答メッセージ(メッセージの履歴を備えた)を提供できるように閾値(例えば、20ミリ秒)よりも短いチャネルfooへの(そのそれぞれのMXノードを通じた)接続待ち時間を有する特定の購読者を選択することもできる。ここで、接続待ち時間は、MXノードとMXノードに接続された購読者との間の往復時間の半分とすることができる。他の接続待ち時間も可能である。MXノード531は、特別なメッセージをその固有の接続購読者の1人に送信し、その固有の接続購読者の1人から応答メッセージを受信することが、別のMXノードを通じたホッピングに関連付けられた追加の遅延を招くことはないので、チャネルfooのその固有の接続購読者からだけ特別なメッセージを送信するための特定の購読者を選択することもできる。
図6は、メッセージングシステム内のチャネルの購読者に対するメッセージの持続性を維持する別の例示的方法の流れ図である。本方法は、例えば、メッセージングシステム100及びその構成要素を使用して実施することができる。本方法は、複数の異なるチャネルを維持することによって開始され、各チャネルは、順序付けられた複数のメッセージを含み、チャネルの各々のメッセージは、順序に従って1又は2以上のそれぞれのバッファに格納され、各バッファは、それぞれの有効期間を有する(段階602、チャネルマネージャ214、Qノード522、524)。本方法は、第1のユーザ(例えば、購読者582)から特定のチャネルの順序における位置で始まる異なるチャネルの特定のチャネルのメッセージに対する要求を示す第1のメッセージを受信する(段階604、Mノード531)。本方法は、順序における位置に対応する特定のメッセージを識別し、特定のメッセージは、特定のチャネルの早期のバッファに格納されたものであり、早期のバッファは、満了した有効期間を有する(段階606、MXノード531)。特定のメッセージの識別に基づく本方法は、特定のチャネルを購読している1又は2以上の第2のユーザに要求のための第2のメッセージを送信する(段階608、MXノード531)。本方法は、第2のユーザのうちの特定のユーザ(例えば、購読者586)から順序における位置で又はこの位置の後での特定のチャネルの1又は2以上のメッセージを含む応答メッセージを受信する(段階610、MXノード531)。本方法は、満了していない有効期間を有する特定のチャネルの1又は2以上のバッファから特定のチャネルのためのメッセージを順序に従って取り出す(段階612、MXノード531)。本方法は、取り出されたメッセージと応答メッセージ内のメッセージとを順序に従って組み合わせる(段階614、MXノード531)。本方法は、組み合わせたメッセージを第1のユーザに送信する(段階616、MXノード531)。
本明細書に説明する主題及び作動の実施形態は、本明細書及び本明細書の構造的均等物又はこれらの1又は2以上の組合せで開示する構造を含むデジタル電子回路、又はコンピュータソフトウエア、ファームウエア、又はハードウエアを用いて実施することができる。本明細書に説明する主題の実施形態は、1又は2以上のコンピュータプログラムとして、すなわち、デジタル処理装置によって実行するために又はその作動を制御するためにコンピュータストレージ媒体上に符号化されるコンピュータプログラム命令の1又は2以上のモジュールとして実施することができる。これに代えて又はこれに加えて、プログラム命令は、人工的に生成された伝播信号、例えば、データ処理装置によって実行するのに適する受信装置に送信する情報を符号化するために生成される機械発生式電気、光学、又は電磁信号で符号化することができる。コンピュータストレージ媒体は、コンピュータ可読ストレージデバイス、コンピュータ可読ストレージ基板、ランダム又はシリアルアクセスメモリアレイ又はデバイス、又はこれらの1又は2以上の組合せとすることができ、又はこれらに含めることができる。更に、コンピュータストレージ媒体は伝播信号ではないが、コンピュータストレージ媒体は、人工的発生式伝播信号で符号化されたコンピュータプログラム命令のソース又は宛先とすることができる。コンピュータストレージ媒体は、1又は2以上の個別の物理的構成要素又は媒体(例えば、複数のCD、ディスク、又は他のストレージデバイス)とすることができ、又はこれらに含めることができる。
本明細書に説明する作動は、1又は2以上のコンピュータ可読ストレージデバイスに格納されたか又は他のソースから受信したデータにデータ処理装置によって実行される作動として実施することができる。
「データ処理装置」という語は、一例として、プログラマブルプロセッサ、コンピュータ、システムオンチップ、又はマルチプロセッサ、又は上述の組合せを含むデータを処理するための全ての種類の装置、デバイス、及び機械を網羅する。装置は、専用論理回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路)を含むことができる。装置は、ハードウエアに加えて、問題のコンピュータプログラムのための実行環境を生成するコード、例えば、プロセッサファームウエア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォーム実行時間環境、仮想機械、又はこれらの1又は2以上の組合せを構成するコードを含むことができる。装置及び実行環境は、ウェブサービス、分散コンピュータ及びグリッドコンピュータインフラストラクチャーのような様々な異なるコンピュータモデルインフラストラクチャーを実現することができる。
コンピュータプログラム(プログラム、ソフトウエア、ソフトウエアアプリケーション、スクリプト、又はコードとしても公知)は、コンパイル又は解釈言語、宣言、手順、又は機能言語を含むプログラミング言語のあらゆる形態で書くことができ、独立プログラムとして又はモジュール、構成要素、サブルーチン、オブジェクト、又はコンピュータ環境に使用するのに適する他のユニットとして含むいずれの形態でも配備することができる。コンピュータプログラムは、ファイルシステムのファイルに対応することができるが、対応する必要はない。プログラムは、他のプログラム又はデータ(例えば、マークアップ言語リソースに格納された1又は2以上のスクリプト)を保持するファイルの一部分に、問題のプログラム専用単一ファイルに、又は複数の調節されたファイル(例えば、1又は2以上のモジュール、サブプログラム、又はコードの一部分を格納するファイル)に格納することができる。コンピュータプログラムは、1つのコンピュータ又は1つのサイトに位置するか又は複数のサイトにわたって分散されて通信ネットワークによって相互接続された複数のコンピュータで実行されるように配備される。
本明細書に説明した処理及び論理フローは、1又は2以上のコンピュータプログラムを実行する1又は2以上のプログラマブルプロセッサによって実行され、入力データを演算して出力を生成することによってアクションを実行することができる。処理及び論理フローは、専用論理回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路)によって実行することができ、装置は、専用論理回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路)として実施することができる。
コンピュータプログラムの実行に適するプロセッサは、一例として、汎用及び専用マイクロプロセッサの両方、及びあらゆる種類のデジタルコンピュータのいずれか1つ又はそれよりも多いプロセッサを含む。一般的に、プロセッサは、読取専用メモリ又はランダムアクセスメモリ又はこれらの両方から命令及びデータを受信する。コンピュータの基本的な要素は、命令に従ってアクションを実行するためのプロセッサ、及び命令及びデータを格納するための1又は2以上のメモリデバイスである。一般的にコンピュータは、データを格納するための1又は2以上の大容量ストレージデバイス、例えば、磁気、磁気光学ディスク、又は光学ディスクを含むか、これらからデータを受信するか又はデータを転送し、又はこの両方のために作動的に結合される。しかし、コンピュータは、そのようなデバイスを有する必要はない。コンピュータは、別のデバイス、いくつか挙げると、例えば、スマートフォン、移動音声又は映像プレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、又は携帯式ストレージデバイス(例えば、ユニバーサルシリアルバス(USB)フラッシュドライブ)に組み込むことができる。コンピュータプログラム命令及びデータを格納するのに適するデバイスは、一例として、半導体メモリデバイス、例えば、EPROM、EEPROM、及びフラッシュメモリデバイス、磁気ディスク、例えば、内部ハードディスク又は着脱可能ディスク、磁気光学ディスク、及びCD−ROM及びDVD−ROMディスクを含む不揮発性メモリ、媒体、及びメモリデバイスの全ての形態を含む。プロセッサ及びメモリは、専用論理回路によって補足又は専用論理回路に組み込むことができる。
ユーザとの対話を提供するために、本明細書に説明する主題の実施形態は、ディスプレイデバイス、例えば、ユーザに情報を表示するためのディスプレイデバイス、例えば、CRT(ブラウン管)又はLCD(液晶ディスプレイ)モニタ、及びキーボード及びポインティングデバイス、例えば、ユーザがコンピュータに入力を与えることを可能にするマウス又はトラックボールを有するコンピュータを用いて実施することができる。他の種類のデバイスを使用して、同様にユーザとの対話を提供することができ、例えば、ユーザに提供されるフィードバックは、センサ式フィードバックのあらゆる形態、例えば、視覚フィードバック、聴覚フィードバック、又は触知フィードバックとすることができ、ユーザからの入力は、音響、音声、又は触知入力を含むあらゆる形態で受信することができる。コンピュータは、ユーザによって使用されるデバイスにリソースを送信し、デバイスからリソースを受信することにより、例えば、ウェブブラウザから受信した要求に応じてユーザのクライアントデバイスのウェブブラウザにウェブページを送信することによってユーザと対話することができる。
本明細書に説明する主題の実施形態は、バックエンド構成要素を例えばデータサーバとして含むか、又はミドルウェア構成要素、例えば、アプリケーションサーバを含むか、又はフロントエンド構成要素、例えば、ユーザが本明細書に説明する主題の実施と対話することを可能にするグラフィカルユーザインタフェース又はウェブブラウザを有するクライアントコンピュータ、又は1又は2以上のこれらのバックエンド、ミドルウェア、又はフロントエンド構成要素のあらゆる組合せを含むコンピュータシステムを用いて実施することができる。システムの構成要素は、デジタルデータ通信のあらゆる形態又は媒体、例えば、通信ネットワークによって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク(「LAN」)及びワイドエリアネットワーク(「WAN」)、インターネットワーク(例えば、インターネット)及びピアツーピアネットワーク(例えば、アドホックピアツープアネットワーク)を含む。
コンピュータシステムは、クライアント及びサーバを含むことができる。クライアント及びサーバは、一般的に互いから遠隔にあり、一般的に通信ネットワーク上で対話する。クライアントとサーバの関係は、それぞれのコンピュータで実行されて互いにクライアント−サーバ関係を有するコンピュータプログラムによって発生する。一部の実施形態では、サーバは、データ(例えば、HTMLページ)をクライアントデバイスに送信する(クライアントデバイスと対話するユーザにデータを表示してユーザからユーザ入力を受信するために)。クライアントデバイスで生成されたデータ(例えば、ユーザ対話の結果)は、サーバでクライアントデバイスから受信することができる。
1又は2以上のコンピュータのシステムは、作動中にシステムにアクションを実行させるシステム上にインストールされたソフトウエア、ファームウエア、ハードウエア、又はその組合せを有することによって特定の作動又はアクションを実行するように構成することができる。1又は2以上のコンピュータプログラムは、データ処理装置によって実行された時に装置にアクションを実行させる命令を含むことによって特定の作動又はアクションを実行するように構成することができる。
本明細書は多くの特定の実施の詳細を含有するが、これらは、いずれの発明又は主張することができる範囲の制限として解釈すべきではなく、逆に特定の発明の特定の実施形態に固有の特徴の説明として解釈しなければならない。個別の実施形態の関連で本明細書に説明するある一定の特徴は、単一実施形態に組み合わせて実施することができる。対照的に、単一実施形態の関連で説明する様々な特徴は、複数の実施形態で別々に又はあらゆる適切な部分組合せを用いて実施することができる。更に、特徴は、ある一定の組合せで作用するように上述し、更にそのように最初に主張したが、主張した組合せからの1又は2以上の特徴は、一部の事例では組合せから削除することができ、主張した組合せを部分組合せ又は部分組合せの変形に向けることができる。
同様に、作動は、特定の順序で図面に示されているが、これは、望ましい結果を達成するためにそのような作動を示された特定の順序又は連続的な順序で実行し、又は全ての例示された作動を実行することが望ましいとして理解すべきではない。ある状況では、マルチタスク及び並列処理が有利である場合がある。上述の実施形態における様々なシステム構成要素の分離は、全ての実施形態においてそのような分離を要求するものとして理解すべきではなく、説明したプログラム構成要素及びシステムは、一般的に単一ソフトウエア物品に互いに統合するか又は複数のソフトウエア物品にパッケージ化することができることを理解しなければならない。
すなわち、本主題の特定の実施形態を説明した。他の実施形態も特許請求の範囲内である。一部の事例では、特許請求の範囲に説明するアクションを異なる順序で実行して望ましい結果を達成することができる。更に、添付の図に示す処理は、望ましい結果を達成するために必ずしも示す特定の順序又は連続的な順序を必要としない。ある一定の実施では、マルチタスク及び並列処理が有利である場合がある。
602 異なるチャネルを維持する段階
606 位置に対応する特定のメッセージを識別する段階
608 第2のメッセージを第2のユーザに送信する段階
612 特定のチャネルのためのメッセージを取り出す段階
616 組み合わせたメッセージを第1のユーザに送信する段階
606 位置に対応する特定のメッセージを識別する段階
608 第2のメッセージを第2のユーザに送信する段階
612 特定のチャネルのためのメッセージを取り出す段階
616 組み合わせたメッセージを第1のユーザに送信する段階
Claims (12)
- 第1のチャネル内の位置で始まる複数のチャネルの該第1のチャネルのメッセージに対する要求を第1のクライアントデバイスから受信する段階であって、各チャネルが、順序に従って1又は2以上のそれぞれのバッファに格納されたそれぞれの該順序付けられた複数のメッセージを含み、各バッファが、それぞれの有効期間を有する前記受信する段階と、
前記順序における前記位置に対応する前記第1のチャネル内の第1のメッセージを識別する段階であって、該第1のメッセージが、満了した有効期間を有するバッファに格納される前記識別する段階と、
前記順序における前記位置で始まるメッセージに対する要求を前記第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに送信する段階と、
前記順序における前記位置での又はその後でのものである前記第1のチャネルの1又は2以上のメッセージを含む応答メッセージを前記第2のクライアントデバイスのうちの1つから受信する段階と、
満了していない有効期間を有する前記第1のチャネルの1又は2以上のバッファから前記順序に従って該第1のチャネルのためのメッセージを取り出す段階と、
前記取り出されたメッセージと前記応答メッセージからの前記メッセージとを前記順序に従って組み合わせる段階と、
前記組み合わせたメッセージを前記第1のクライアントデバイスに送信する段階と、
を1又は2以上のコンピュータによって実行する段階、
を含むことを特徴とする方法。 - 前記第1のチャネルを購読している前記第2のクライアントデバイスのうちの1又は2以上に対して、該第1のチャネルとのそれぞれの接続待ち時間を決定する段階と、
最短接続待ち時間を有する前記第2のクライアントデバイスのうちの1つを識別する段階と、
を更に含むことを特徴とする請求項1に記載の方法。 - 前記第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに対して、該第1のチャネルとのそれぞれの現在の接続セッションの持続時間を決定する段階と、
前記1又は2以上の第2のクライアントデバイスの中で最長の現在の接続セッションを有する該第2のクライアントデバイスのうちの1つを識別する段階と、
を更に含むことを特徴とする請求項1に記載の方法。 - 前記取り出されたメッセージと前記応答メッセージからの前記メッセージとを前記順序に従って組み合わせる段階は、
前記組み合わせたメッセージから1又は2以上の複製メッセージを取り除く段階、
を更に含む、
ことを特徴とする請求項1に記載の方法。 - 第1のチャネル内の位置で始まる複数のチャネルの該第1のチャネルのメッセージに対する要求を第1のクライアントデバイスから受信する段階であって、各チャネルが、順序に従って1又は2以上のそれぞれのバッファに格納されたそれぞれの該順序付けられた複数のメッセージを含み、各バッファが、それぞれの有効期間を有する前記受信する段階と、
前記順序における前記位置に対応する前記第1のチャネル内の第1のメッセージを識別する段階であって、該第1のメッセージが、満了した有効期間を有するバッファに格納される前記識別する段階と、
前記順序における前記位置で始まるメッセージに対する要求を前記第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに送信する段階と、
前記順序における前記位置での又はその後でのものである前記第1のチャネルの1又は2以上のメッセージを含む応答メッセージを前記第2のクライアントデバイスのうちの1つから受信する段階と、
満了していない有効期間を有する前記第1のチャネルの1又は2以上のバッファから前記順序に従って該第1のチャネルのためのメッセージを取り出す段階と、
前記取り出されたメッセージと前記応答メッセージからの前記メッセージとを前記順序に従って組み合わせる段階と、
前記組み合わせたメッセージを前記第1のクライアントデバイスに送信する段階と、
を含む作動を実行するようにプログラムされた1又は2以上のコンピュータ、
を含むことを特徴とするシステム。 - 前記作動は、
前記第1のチャネルを購読している前記第2のクライアントデバイスのうちの1又は2以上に対して、該第1のチャネルとのそれぞれの接続待ち時間を決定する段階と、
最短接続待ち時間を有する前記第2のクライアントデバイスのうちの1つを識別する段階と、
を更に含む、
ことを特徴とする請求項5に記載のシステム。 - 前記作動は、
前記第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに対して、該第1のチャネルとのそれぞれの現在の接続セッションの持続時間を決定する段階と、
前記1又は2以上の第2のクライアントデバイスの中で最長の現在の接続セッションを有する該第2のクライアントデバイスのうちの1つを識別する段階と、
を更に含む、
ことを特徴とする請求項5に記載のシステム。 - 前記取り出されたメッセージと前記応答メッセージからの前記メッセージとを前記順序に従って組み合わせる段階は、
前記組み合わせたメッセージから1又は2以上の複製メッセージを取り除く段階、
を更に含む、
ことを特徴とする請求項5に記載のシステム。 - 1又は2以上のコンピュータによって実行された時に、
第1のチャネル内の位置で始まる複数のチャネルの該第1のチャネルのメッセージに対する要求を第1のクライアントデバイスから受信する段階であって、各チャネルが、順序に従って1又は2以上のそれぞれのバッファに格納されたそれぞれの該順序付けられた複数のメッセージを含み、各バッファが、それぞれの有効期間を有する前記受信する段階と、
前記順序における前記位置に対応する前記第1のチャネル内の第1のメッセージを識別する段階であって、該第1のメッセージが、満了した有効期間を有するバッファに格納される前記識別する段階と、
前記順序における前記位置で始まるメッセージに対する要求を前記第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに送信する段階と、
前記順序における前記位置での又はその後でのものである前記第1のチャネルの1又は2以上のメッセージを含む応答メッセージを前記第2のクライアントデバイスのうちの1つから受信する段階と、
満了していない有効期間を有する前記第1のチャネルの1又は2以上のバッファから前記順序に従って該第1のチャネルのためのメッセージを取り出す段階と、
前記取り出されたメッセージと前記応答メッセージからの前記メッセージとを前記順序に従って組み合わせる段階と、
前記組み合わせたメッセージを前記第1のクライアントデバイスに送信する段階と、
を含む作動を前記コンピュータに実施させる命令が格納された非一時的コンピュータ可読媒体、
を含むことを特徴とする製造品。 - 前記作動は、
前記第1のチャネルを購読している前記第2のクライアントデバイスのうちの1又は2以上に対して、該第1のチャネルとのそれぞれの接続待ち時間を決定する段階と、
最短接続待ち時間を有する前記第2のクライアントデバイスのうちの1つを識別する段階と、
を更に含む、
ことを特徴とする請求項9に記載の製造品。 - 前記作動は、
前記第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに対して、該第1のチャネルとのそれぞれの現在の接続セッションの持続時間を決定する段階と、
前記1又は2以上の第2のクライアントデバイスの中で最長の現在の接続セッションを有する該第2のクライアントデバイスのうちの1つを識別する段階と、
を更に含む、
ことを特徴とする請求項9に記載の製造品。 - 前記取り出されたメッセージと前記応答メッセージからの前記メッセージとを前記順序に従って組み合わせる段階は、
前記組み合わせたメッセージから1又は2以上の複製メッセージを取り除く段階、
を更に含む、
ことを特徴とする請求項9に記載の製造品。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/155,384 | 2016-05-16 | ||
US15/155,384 US9602450B1 (en) | 2016-05-16 | 2016-05-16 | Maintaining persistence of a messaging system |
PCT/US2017/016903 WO2017200605A1 (en) | 2016-05-16 | 2017-02-08 | Maintaining persistence of a messaging system |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2019521576A true JP2019521576A (ja) | 2019-07-25 |
Family
ID=58228547
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018560134A Pending JP2019521576A (ja) | 2016-05-16 | 2017-02-08 | メッセージングシステムの持続性の維持 |
Country Status (6)
Country | Link |
---|---|
US (3) | US9602450B1 (ja) |
EP (1) | EP3459212A1 (ja) |
JP (1) | JP2019521576A (ja) |
CN (1) | CN109479025A (ja) |
AU (1) | AU2017266570A1 (ja) |
WO (1) | WO2017200605A1 (ja) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10659438B2 (en) * | 2015-07-09 | 2020-05-19 | International Business Machines Corporation | Policy based message cryptographic expiry |
US9602455B2 (en) | 2015-08-07 | 2017-03-21 | Machine Zone, Inc. | Scalable, real-time messaging system |
US9407585B1 (en) | 2015-08-07 | 2016-08-02 | Machine Zone, Inc. | Scalable, real-time messaging system |
US9602450B1 (en) * | 2016-05-16 | 2017-03-21 | Machine Zone, Inc. | Maintaining persistence of a messaging system |
US9608928B1 (en) | 2016-07-06 | 2017-03-28 | Machine Zone, Inc. | Multiple-speed message channel of messaging system |
US9967203B2 (en) | 2016-08-08 | 2018-05-08 | Satori Worldwide, Llc | Access control for message channels in a messaging system |
US10374986B2 (en) | 2016-08-23 | 2019-08-06 | Satori Worldwide, Llc | Scalable, real-time messaging system |
US10305981B2 (en) | 2016-08-31 | 2019-05-28 | Satori Worldwide, Llc | Data replication in scalable messaging system |
US9667681B1 (en) | 2016-09-23 | 2017-05-30 | Machine Zone, Inc. | Systems and methods for providing messages to multiple subscribers |
US10447623B2 (en) * | 2017-02-24 | 2019-10-15 | Satori Worldwide, Llc | Data storage systems and methods using a real-time messaging system |
JP7003846B2 (ja) * | 2018-06-13 | 2022-01-21 | 日本電信電話株式会社 | コミュニケーションサーバ装置、コミュニケーション制御方法及びプログラム |
US10613998B2 (en) * | 2018-07-30 | 2020-04-07 | EMC IP Holding Company LLC | Multi-level time decay storage queue |
Family Cites Families (152)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4264924A (en) | 1978-03-03 | 1981-04-28 | Freeman Michael J | Dedicated channel interactive cable television system |
US5404488A (en) | 1990-09-26 | 1995-04-04 | Lotus Development Corporation | Realtime data feed engine for updating an application with the most currently received data from multiple data feeds |
US5706331A (en) | 1995-08-22 | 1998-01-06 | Motorola, Inc. | System and method for selecting a subsystem for message traffic in an integrated communication network |
US5878228A (en) | 1996-11-15 | 1999-03-02 | Northern Telecom Limited | Data transfer server with time slots scheduling base on transfer rate and predetermined data |
US6704785B1 (en) | 1997-03-17 | 2004-03-09 | Vitria Technology, Inc. | Event driven communication system |
US5982436A (en) | 1997-03-28 | 1999-11-09 | Philips Electronics North America Corp. | Method for seamless splicing in a video encoder |
WO1999004589A1 (en) | 1997-07-17 | 1999-01-28 | Northern Telecom Limited | Method and system for solving cellular communications frequency planning problem |
US8065504B2 (en) | 1999-01-28 | 2011-11-22 | Ati International Srl | Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor |
US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
ATE414942T1 (de) | 1999-02-26 | 2008-12-15 | Henry Haugland | Massenerzeugung individualer virtueller servern, vertueller webseiten sowie virtueller webobjekten |
US7254806B1 (en) | 1999-08-30 | 2007-08-07 | Ati International Srl | Detecting reordered side-effects |
TW454120B (en) | 1999-11-11 | 2001-09-11 | Miralink Corp | Flexible remote data mirroring |
US20010029455A1 (en) | 2000-03-31 | 2001-10-11 | Chin Jeffrey J. | Method and apparatus for providing multilingual translation over a network |
KR100392879B1 (ko) | 2000-06-02 | 2003-08-06 | 주식회사 인터넷엑스퍼트시스템 | 전자 메일에 의한 기업비밀 유출 방지 및 바이러스 확산방지 기능을 갖는 전자 메일 보안 시스템 |
US8086672B2 (en) | 2000-06-17 | 2011-12-27 | Microsoft Corporation | When-free messaging |
US7219158B2 (en) | 2000-07-21 | 2007-05-15 | Hughes Network Systems Llc | Method and system for improving network performance using a performance enhancing proxy |
US20020138659A1 (en) | 2000-11-01 | 2002-09-26 | Zissis Trabaris | Method and system for application development and a data processing architecture utilizing destinationless messaging |
US7929562B2 (en) | 2000-11-08 | 2011-04-19 | Genesis Telecommunications Laboratories, Inc. | Method and apparatus for optimizing response time to events in queue |
US6718327B1 (en) | 2001-08-31 | 2004-04-06 | Openwave Systems Inc. | Fault-tolerant queue with autonomous client operation |
US7406537B2 (en) | 2002-11-26 | 2008-07-29 | Progress Software Corporation | Dynamic subscription and message routing on a topic between publishing nodes and subscribing nodes |
US8122118B2 (en) | 2001-12-14 | 2012-02-21 | International Business Machines Corporation | Selection of communication protocol for message transfer based on quality of service requirements |
US20030135556A1 (en) | 2001-12-14 | 2003-07-17 | International Business Machines Corporation | Selection of communication strategies for message brokers or publish/subscribe communications |
US7668908B2 (en) | 2001-12-14 | 2010-02-23 | Microsoft Corporation | System and method for generalized and distributed scalable eventing system |
US7376092B2 (en) | 2002-04-03 | 2008-05-20 | Precache Inc. | Method and apparatus for implementing persistent and reliable message delivery |
US7162628B2 (en) | 2002-07-23 | 2007-01-09 | Cisco Technology, Inc. | Method, system, apparatus and program product for temporary personalization of a computer terminal |
US7720910B2 (en) | 2002-07-26 | 2010-05-18 | International Business Machines Corporation | Interactive filtering electronic messages received from a publication/subscription service |
FR2843210B1 (fr) | 2002-08-02 | 2005-10-14 | Meiosys | Procede de migration de connexions dans une architecture multi-ordinateurs, procede pour realiser une continuite de fonctionnement mettant en oeuvre ce procede de migration, et systeme multi-ordinateurs ainsi equipe. |
US8176154B2 (en) | 2002-09-30 | 2012-05-08 | Avaya Inc. | Instantaneous user initiation voice quality feedback |
AU2003301374A1 (en) | 2002-10-17 | 2004-05-04 | Tibco Software Inc. | Method and system to communicate messages in a computer network |
US7657596B2 (en) | 2002-10-24 | 2010-02-02 | Sun Microsystems, Inc. | Distributed data sharing methods and systems |
US8711923B2 (en) | 2002-12-10 | 2014-04-29 | Ol2, Inc. | System and method for selecting a video encoding format based on feedback data |
US9077991B2 (en) | 2002-12-10 | 2015-07-07 | Sony Computer Entertainment America Llc | System and method for utilizing forward error correction with video compression |
US7616208B2 (en) | 2002-12-18 | 2009-11-10 | Genesys Conferencing Ltd. | Method and system for application broadcast |
US7676580B2 (en) | 2003-03-27 | 2010-03-09 | Microsoft Corporation | Message delivery with configurable assurances and features between two endpoints |
GB0308035D0 (en) | 2003-04-08 | 2003-05-14 | Ibm | Liveness monitoring in a publish/subscribe messaging system |
US20050047396A1 (en) | 2003-08-29 | 2005-03-03 | Helm David P. | System and method for selecting the size of dynamic voice jitter buffer for use in a packet switched communications system |
US7885901B2 (en) | 2004-01-29 | 2011-02-08 | Yahoo! Inc. | Method and system for seeding online social network contacts |
US7490083B2 (en) | 2004-02-27 | 2009-02-10 | International Business Machines Corporation | Parallel apply processing in data replication with preservation of transaction integrity and source ordering of dependent updates |
US7640357B2 (en) | 2004-04-30 | 2009-12-29 | Sap Ag | Transmitting enterprise messages based on buffer sizes |
US20050262205A1 (en) | 2004-04-30 | 2005-11-24 | Nikolov Radoslav I | Delivering messages in an enterprise messaging system using message selector hierarchy |
US7649937B2 (en) * | 2004-06-22 | 2010-01-19 | Auction Management Solutions, Inc. | Real-time and bandwidth efficient capture and delivery of live video to multiple destinations |
US7613813B2 (en) | 2004-09-10 | 2009-11-03 | Cavium Networks, Inc. | Method and apparatus for reducing host overhead in a socket server implementation |
US8065384B2 (en) | 2004-10-08 | 2011-11-22 | Sharp Laboratories Of America, Inc. | Methods and systems for imaging device event notification subscription |
US8051140B2 (en) | 2004-10-08 | 2011-11-01 | Sharp Laboratories Of America, Inc. | Methods and systems for imaging device control |
US7774720B1 (en) | 2004-10-15 | 2010-08-10 | Oracle America, Inc. | Connectivity map editor |
US20060106840A1 (en) | 2004-11-04 | 2006-05-18 | International Business Machines Corporation | System and method for tracking notifications in a publish subscribe system |
US7779418B2 (en) | 2004-12-30 | 2010-08-17 | Oracle International Corporation | Publisher flow control and bounded guaranteed delivery for message queues |
CA2594267C (en) | 2005-01-06 | 2012-02-07 | J. Barry Thompson | End-to-end publish/subscribe middleware architecture |
CA2594036A1 (en) | 2005-01-06 | 2006-07-13 | Tervela, Inc. | Intelligent messaging application programming interface |
US20060174431A1 (en) | 2005-02-09 | 2006-08-10 | Dr. Fresh, Inc. | Electric toothbrush |
WO2007003984A1 (en) | 2005-06-30 | 2007-01-11 | Freescale Semiconductor, Inc. | Device and method for arbitrating between direct memory access task requests |
US8788565B2 (en) | 2005-07-18 | 2014-07-22 | Wayne Bevan | Dynamic and distributed queueing and processing system |
US8042140B2 (en) | 2005-07-22 | 2011-10-18 | Kangaroo Media, Inc. | Buffering content on a handheld electronic device |
US7941448B2 (en) | 2005-08-26 | 2011-05-10 | At&T Intellectual Property Ii, Lp | System and method for event driven publish-subscribe communications |
US7917124B2 (en) | 2005-09-20 | 2011-03-29 | Accenture Global Services Limited | Third party access gateway for telecommunications services |
JP4658142B2 (ja) | 2005-11-30 | 2011-03-23 | 富士通株式会社 | 通信装置およびフレーム制御方法 |
US8965409B2 (en) | 2006-03-17 | 2015-02-24 | Fatdoor, Inc. | User-generated community publication in an online neighborhood social network |
US8281026B2 (en) | 2006-03-18 | 2012-10-02 | Metafluent, Llc | System and method for integration of streaming and static data |
WO2007144611A1 (en) | 2006-06-12 | 2007-12-21 | Enigmatec Corporation | Self-managed distributed mediation networks |
US8429702B2 (en) | 2006-09-11 | 2013-04-23 | At&T Intellectual Property I, L.P. | Methods and apparatus for selecting and pushing customized electronic media content |
US9270944B2 (en) | 2007-02-14 | 2016-02-23 | Time Warner Cable Enterprises Llc | Methods and apparatus for content delivery notification and management |
US8396959B2 (en) | 2007-03-21 | 2013-03-12 | Inetco Systems Limited | Method and system for monitoring messages passed over a network |
US8068901B2 (en) | 2007-05-01 | 2011-11-29 | Medtronic, Inc. | Method and apparatus for adjusting a sensing parameter |
US8774203B2 (en) | 2007-06-07 | 2014-07-08 | Intel Corporation | One-way message notification with out-of-order packet delivery |
US8145704B2 (en) | 2007-06-13 | 2012-03-27 | Ntech Properties, Inc. | Method and system for providing media programming |
US8799213B2 (en) | 2007-07-31 | 2014-08-05 | Oracle International Corporation | Combining capture and apply in a distributed information sharing system |
JP5017013B2 (ja) | 2007-08-08 | 2012-09-05 | 株式会社コナミデジタルエンタテインメント | ネットワークゲームシステム、ネットワークゲームシステムの制御方法及びプログラム |
US9224150B2 (en) | 2007-12-18 | 2015-12-29 | Napo Enterprises, Llc | Identifying highly valued recommendations of users in a media recommendation network |
US8234193B2 (en) | 2008-03-03 | 2012-07-31 | Wildfire Interactive, Inc. | Method and system for providing online promotions through a social network-based platform |
US20090259756A1 (en) | 2008-04-11 | 2009-10-15 | Mobitv, Inc. | Transmitting media stream bursts |
US8452833B2 (en) | 2008-05-13 | 2013-05-28 | International Business Machines Corporation | Cached message distribution via HTTP redirects |
US8898293B2 (en) | 2009-01-28 | 2014-11-25 | Headwater Partners I Llc | Service offer set publishing to device agent with on-device service selection |
US7913024B2 (en) | 2008-12-09 | 2011-03-22 | International Business Machines Corporation | Differentiating traffic types in a multi-root PCI express environment |
JP5146548B2 (ja) | 2009-02-06 | 2013-02-20 | 富士通株式会社 | パケットバッファ装置及びパケット廃棄方法 |
US8539359B2 (en) | 2009-02-11 | 2013-09-17 | Jeffrey A. Rapaport | Social network driven indexing system for instantly clustering people with concurrent focus on same topic into on-topic chat rooms and/or for generating on-topic search results tailored to user preferences regarding topic |
US8301687B2 (en) | 2009-03-31 | 2012-10-30 | Software Ag | Systems and/or methods for standards-based messaging |
US20130254314A1 (en) | 2009-06-09 | 2013-09-26 | Edmond K. Chow | Digital content delivery |
US8392555B2 (en) | 2009-06-01 | 2013-03-05 | International Business Machines Corporation | Push-back mechanism for pub/sub brokers |
US20110060812A1 (en) | 2009-09-10 | 2011-03-10 | Level 3 Communications, Llc | Cache server with extensible programming framework |
US8375095B2 (en) | 2009-12-22 | 2013-02-12 | Microsoft Corporation | Out of order durable message processing |
US8346935B2 (en) | 2010-01-15 | 2013-01-01 | Joyent, Inc. | Managing hardware resources by sending messages amongst servers in a data center |
JP5340186B2 (ja) | 2010-01-21 | 2013-11-13 | アラクサラネットワークス株式会社 | パケット中継装置及びパケットを中継する方法 |
US8850015B2 (en) | 2010-01-26 | 2014-09-30 | Cisco Technology, Inc. | Network-network interface |
US8489674B2 (en) | 2010-03-11 | 2013-07-16 | Yahoo! Inc. | Distributed publish/subscribe system |
US8996563B2 (en) | 2010-04-06 | 2015-03-31 | Tokutek, Inc. | High-performance streaming dictionary |
WO2011146742A2 (en) | 2010-05-19 | 2011-11-24 | Akamai Technologies Inc. | Edge server http post message processing |
US9338064B2 (en) | 2010-06-23 | 2016-05-10 | Twilio, Inc. | System and method for managing a computing cluster |
US8626778B2 (en) | 2010-07-23 | 2014-01-07 | Oracle International Corporation | System and method for conversion of JMS message data into database transactions for application to multiple heterogeneous databases |
US8441965B2 (en) | 2010-08-05 | 2013-05-14 | Apple Inc. | Methods and apparatus for reducing data transmission overhead |
US8589732B2 (en) | 2010-10-25 | 2013-11-19 | Microsoft Corporation | Consistent messaging with replication |
CN102469032B (zh) | 2010-10-29 | 2015-03-25 | 国际商业机器公司 | 发布-订阅消息传递的方法和系统 |
EP3125637A1 (en) * | 2010-11-12 | 2017-02-01 | InterDigital Patent Holdings, Inc. | Method and apparatus for performing channel aggregation and medium access control retransmission |
WO2012078971A2 (en) | 2010-12-10 | 2012-06-14 | Rockefeller Consulting Technology Integration, Inc. | Systems and methods for integrating personal social networks within an organization |
US20120150960A1 (en) | 2010-12-13 | 2012-06-14 | Gargi Nalawade | Social Networking |
US9740762B2 (en) | 2011-04-01 | 2017-08-22 | Mongodb, Inc. | System and method for optimizing data migration in a partitioned database |
US9805108B2 (en) | 2010-12-23 | 2017-10-31 | Mongodb, Inc. | Large distributed database clustering systems and methods |
US8908814B2 (en) | 2011-01-07 | 2014-12-09 | Marvell World Trade Ltd. | Low latency SIMD architecture for iterative decoders |
US8909719B2 (en) | 2011-03-24 | 2014-12-09 | Yammer, Inc. | Method of managing feeds based on classifications |
US20120278728A1 (en) | 2011-04-29 | 2012-11-01 | Sling Media Inc. | Download monitoring in a media distribution system |
US8719876B2 (en) | 2011-05-06 | 2014-05-06 | Verizon Patent And Licensing Inc. | Video on demand architecture |
US9760414B2 (en) | 2011-05-18 | 2017-09-12 | International Business Machines Corporation | Preserving event data for lazily-loaded macro components in a publish/subscribe system |
GB2509390B (en) * | 2011-05-18 | 2018-02-21 | Ibm | Managing a message subscription in a publish/subscribe messaging system |
US8886731B2 (en) | 2011-06-01 | 2014-11-11 | Microsoft Corporation | Decentralized relaying algorithm for mobile devices |
US20130031216A1 (en) | 2011-07-29 | 2013-01-31 | Myxer, Inc. | Systems and methods for generation of customized media playlists |
US9177336B2 (en) | 2011-09-08 | 2015-11-03 | Telefonaktiebolaget L M Ericsson (Publ) | Apparatuses and methods for recommending a path through an information space |
US20130066967A1 (en) | 2011-09-12 | 2013-03-14 | Vizibility Inc. | System and method for discovering and interacting with common connections |
US9191355B2 (en) | 2011-09-12 | 2015-11-17 | Crytek Gmbh | Computer-implemented method for posting messages about future events to users of a social network, computer system and computer-readable medium thereof |
US8607249B2 (en) | 2011-09-22 | 2013-12-10 | Oracle International Corporation | System and method for efficient concurrent queue implementation |
JP2013093735A (ja) | 2011-10-25 | 2013-05-16 | Fujitsu Ltd | データサンプリング装置、方法、及び、プログラム |
CN103946804B (zh) | 2011-11-18 | 2017-11-21 | 汤姆逊许可公司 | 包括用于终端用户装置的远程管理的发布/订阅代理及相应的终端用户装置的系统 |
EP3249546B1 (en) | 2011-12-14 | 2022-02-09 | Level 3 Communications, LLC | Content delivery network |
US10051038B2 (en) | 2011-12-23 | 2018-08-14 | Intel Corporation | Shared send queue |
US20130290449A1 (en) | 2012-04-25 | 2013-10-31 | Origami Labs, Inc. | Privacy-based social content broadcast systems and methods |
US9451298B2 (en) | 2012-07-02 | 2016-09-20 | Sony Corporation | Transmission device, transmission method, and network apparatus |
US8850263B1 (en) | 2012-09-14 | 2014-09-30 | Amazon Technologies, Inc. | Streaming and sampling in real-time log analysis |
US20140114738A1 (en) | 2012-10-24 | 2014-04-24 | Erick Tseng | Automatic Check-In Using Social-Networking Information |
US9141681B2 (en) | 2012-11-29 | 2015-09-22 | Red Hat, Inc. | Creating a column family in a database |
US9037556B2 (en) | 2012-12-03 | 2015-05-19 | Vmware, Inc. | Distributed, transactional key-value store |
US20140237057A1 (en) | 2013-02-21 | 2014-08-21 | Genesys Telecommunications Laboratories, Inc. | System and method for processing private messages in a contact center |
US9043822B1 (en) * | 2013-03-14 | 2015-05-26 | Cox Communications, Inc. | Remote time shift buffering with shadow tuning |
US20140279944A1 (en) | 2013-03-15 | 2014-09-18 | University Of Southern California | Sql query to trigger translation for maintaining consistency of cache augmented sql systems |
US8850490B1 (en) | 2013-05-07 | 2014-09-30 | Google Inc. | Consuming paid media in an internet-based content platform |
US9767138B2 (en) | 2013-06-12 | 2017-09-19 | Oracle International Corporation | In-database sharded queue for a shared-disk database |
US8824664B1 (en) | 2013-06-13 | 2014-09-02 | Genesys Telecommunications Laboratories, Inc. | System and method for controlling lifespan of interaction requests |
US9342554B2 (en) | 2013-07-05 | 2016-05-17 | Facebook, Inc. | Techniques to generate mass push notifications |
US9813515B2 (en) | 2013-10-04 | 2017-11-07 | Akamai Technologies, Inc. | Systems and methods for caching content with notification-based invalidation with extension to clients |
US9729653B2 (en) | 2014-01-23 | 2017-08-08 | Software Ag | Systems and/or methods for automatically tuning a delivery system for transmission of large, volatile data |
US20150262151A1 (en) | 2014-03-11 | 2015-09-17 | Nibl, Inc. | Access Control System for Online Content |
US9450895B2 (en) | 2014-03-28 | 2016-09-20 | Futurewei Technologies, Inc. | Context-aware dynamic policy selection for messaging behavior |
US20150317676A1 (en) | 2014-05-01 | 2015-11-05 | Vibe-It LLC | Systems and methods for monitoring and responding to customer feedback |
US20150379160A1 (en) | 2014-06-29 | 2015-12-31 | Yaniv AVRAHAM | Apparatus and methods for transferring focus control and related return content within a graphical user interface |
US10033784B2 (en) | 2014-07-14 | 2018-07-24 | International Business Machines Corporation | Predictive management of offline storage content for mobile applications and optimized network usage for mobile devices |
US9703675B2 (en) | 2014-08-11 | 2017-07-11 | Microsoft Technology Licensing, Llc | Structured logging and instrumentation framework |
US20160179855A1 (en) | 2014-12-23 | 2016-06-23 | Yahoo! Inc. | Ubiquitous content access and management |
US20160219089A1 (en) | 2015-01-23 | 2016-07-28 | Ebay Inc. | Systems and methods for messaging and processing high volume data over networks |
US9742651B2 (en) | 2015-03-05 | 2017-08-22 | International Business Machines Corporation | Client-side fault tolerance in a publish-subscribe system |
US10432741B2 (en) | 2015-03-25 | 2019-10-01 | Open Access Technology International, Inc. | Systems and methods for guaranteeing delivery of pushed data to remote clients |
US9672238B2 (en) | 2015-05-14 | 2017-06-06 | Walleye Software, LLC | Dynamic filter processing |
US9602455B2 (en) * | 2015-08-07 | 2017-03-21 | Machine Zone, Inc. | Scalable, real-time messaging system |
US9407585B1 (en) * | 2015-08-07 | 2016-08-02 | Machine Zone, Inc. | Scalable, real-time messaging system |
US9319363B1 (en) * | 2015-08-07 | 2016-04-19 | Machine Zone, Inc. | Scalable, real-time messaging system |
US9385976B1 (en) * | 2015-10-09 | 2016-07-05 | Machine Zone, Inc. | Systems and methods for storing message data |
US9319365B1 (en) | 2015-10-09 | 2016-04-19 | Machine Zone, Inc. | Systems and methods for storing and transferring message data |
US9450944B1 (en) | 2015-10-14 | 2016-09-20 | FullArmor Corporation | System and method for pass-through authentication |
US9762563B2 (en) | 2015-10-14 | 2017-09-12 | FullArmor Corporation | Resource access system and method |
US9509684B1 (en) | 2015-10-14 | 2016-11-29 | FullArmor Corporation | System and method for resource access with identity impersonation |
US9397973B1 (en) | 2015-10-16 | 2016-07-19 | Machine Zone, Inc. | Systems and methods for transferring message data |
US9577911B1 (en) | 2016-03-21 | 2017-02-21 | Black Cloud Analytics, Inc. | Distributed computation system incorporating agent network, paths and associated probes |
US9602450B1 (en) * | 2016-05-16 | 2017-03-21 | Machine Zone, Inc. | Maintaining persistence of a messaging system |
US9608928B1 (en) | 2016-07-06 | 2017-03-28 | Machine Zone, Inc. | Multiple-speed message channel of messaging system |
US9667681B1 (en) | 2016-09-23 | 2017-05-30 | Machine Zone, Inc. | Systems and methods for providing messages to multiple subscribers |
-
2016
- 2016-05-16 US US15/155,384 patent/US9602450B1/en not_active Expired - Fee Related
-
2017
- 2017-02-08 EP EP17708909.1A patent/EP3459212A1/en not_active Withdrawn
- 2017-02-08 AU AU2017266570A patent/AU2017266570A1/en not_active Abandoned
- 2017-02-08 JP JP2018560134A patent/JP2019521576A/ja active Pending
- 2017-02-08 CN CN201780043736.9A patent/CN109479025A/zh active Pending
- 2017-02-08 WO PCT/US2017/016903 patent/WO2017200605A1/en unknown
- 2017-02-15 US US15/433,550 patent/US9871750B2/en not_active Expired - Fee Related
- 2017-12-28 US US15/857,348 patent/US20180123989A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
WO2017200605A1 (en) | 2017-11-23 |
US20170331771A1 (en) | 2017-11-16 |
EP3459212A1 (en) | 2019-03-27 |
CN109479025A (zh) | 2019-03-15 |
US9871750B2 (en) | 2018-01-16 |
US9602450B1 (en) | 2017-03-21 |
AU2017266570A1 (en) | 2018-12-06 |
US20180123989A1 (en) | 2018-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10637947B2 (en) | Scalable, real-time messaging system | |
JP6678742B2 (ja) | スケーラブルなリアルタイムメッセージングシステム | |
JP2019521576A (ja) | メッセージングシステムの持続性の維持 | |
US9319363B1 (en) | Scalable, real-time messaging system | |
US20190268293A1 (en) | Scalable, real-time messaging system | |
JP2018531472A6 (ja) | スケーラブルなリアルタイムメッセージングシステム | |
JP2019519841A (ja) | 効率的メッセージ交換システム |