JP2019521576A - メッセージングシステムの持続性の維持 - Google Patents

メッセージングシステムの持続性の維持 Download PDF

Info

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
Application number
JP2018560134A
Other languages
English (en)
Inventor
アンドレイ クシュニール
アンドレイ クシュニール
マクシム テレキン
マクシム テレキン
Original Assignee
サトリ ワールドワイド リミテッド ライアビリティ カンパニー
サトリ ワールドワイド リミテッド ライアビリティ カンパニー
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 サトリ ワールドワイド リミテッド ライアビリティ カンパニー, サトリ ワールドワイド リミテッド ライアビリティ カンパニー filed Critical サトリ ワールドワイド リミテッド ライアビリティ カンパニー
Publication of JP2019521576A publication Critical patent/JP2019521576A/ja
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/04Real-time or near real-time messaging, e.g. instant messaging [IM]
    • H04L51/046Interoperability with other network applications or services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/21Monitoring or handling of messages
    • H04L51/216Handling conversation history, e.g. grouping of messages in sessions or threads
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Administration; Management
    • G06Q10/10Office automation; Time management
    • G06Q10/107Computer-aided management of electronic mailing [e-mailing]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0852Delays
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/07User-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/10Multimedia information
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/07User-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/18Commands or executable codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/21Monitoring or handling of messages
    • H04L51/214Monitoring or handling of messages using selective forwarding
    • 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/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching
    • H04L67/5682Policies 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号に対する優先権を主張するものである。
本明細書は、データ通信システム、特に、リアルタイム拡張可能発行−購読メッセージングを実施するシステムに関する。
発行−購読パターン(又は「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以上の実施形態の詳細は、添付図面及び以下の説明に示している。本発明の主題の他の特徴、態様、及び利点は、説明、図面、及び特許請求の範囲から明らかになるであろう。
PubSub通信パターンをサポートする例示的システムを示す図である。 例示的クライアントデバイス上のソフトウエアの機能層を示す図である。 例示的メッセージングシステムの図である。 データをストリームレットに書き込む例示的方法のデータ流れ図である。 ストリームレットからデータを読み取る例示的方法のデータ流れ図である。 メッセージをメッセージングシステムのチャネルに発行する例示的方法のデータ流れ図である。 メッセージングシステムのチャネルを購読する例示的方法のデータ流れ図である。 メッセージングシステムのチャネルのメッセージを格納するための例示的データ構造の図である。 メッセージングシステム内のチャネルの購読者に対してメッセージの持続性を維持する例示的方法のデータ流れ図である。 メッセージングシステム内のチャネルの購読者に対してメッセージの持続性を維持する別の例示的方法の流れ図である。
様々な図面における同じ参照番号及び指定は、同じ要素を示している。
図1Aは、PubSub通信パターンをサポートする例示的システム100を示している。発行者クライアント(例えば、発行者1)は、システム100によってメッセージを指名チャネル(例えば、「チャネル1」)に発行することができる。メッセージは、テキスト、画像コンテンツ、音声コンテンツ、マルチメディアコンテンツ、ビデオコンテンツ、及びバイナリデータなどの1又は2以上を含むあらゆるタイプの情報を含むことができる。メッセージデータの他のタイプも可能である。購読者クライアント(例えば、購読者2)は、システム100を使用して指名チャネルを購読予約し、かつ購読要求後に又は所与の位置(例えば、メッセージ番号又は時間オフセット)から発生するメッセージの受信を開始することができる。クライアントは、発行者及び購読者の両方とすることができる。
構成に応じて、PubSubシステムは、以下のように分類することができる。
・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のユーザに送信する段階

Claims (12)

  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以上のコンピュータによって実行する段階、
    を含むことを特徴とする方法。
  2. 前記第1のチャネルを購読している前記第2のクライアントデバイスのうちの1又は2以上に対して、該第1のチャネルとのそれぞれの接続待ち時間を決定する段階と、
    最短接続待ち時間を有する前記第2のクライアントデバイスのうちの1つを識別する段階と、
    を更に含むことを特徴とする請求項1に記載の方法。
  3. 前記第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに対して、該第1のチャネルとのそれぞれの現在の接続セッションの持続時間を決定する段階と、
    前記1又は2以上の第2のクライアントデバイスの中で最長の現在の接続セッションを有する該第2のクライアントデバイスのうちの1つを識別する段階と、
    を更に含むことを特徴とする請求項1に記載の方法。
  4. 前記取り出されたメッセージと前記応答メッセージからの前記メッセージとを前記順序に従って組み合わせる段階は、
    前記組み合わせたメッセージから1又は2以上の複製メッセージを取り除く段階、
    を更に含む、
    ことを特徴とする請求項1に記載の方法。
  5. 第1のチャネル内の位置で始まる複数のチャネルの該第1のチャネルのメッセージに対する要求を第1のクライアントデバイスから受信する段階であって、各チャネルが、順序に従って1又は2以上のそれぞれのバッファに格納されたそれぞれの該順序付けられた複数のメッセージを含み、各バッファが、それぞれの有効期間を有する前記受信する段階と、
    前記順序における前記位置に対応する前記第1のチャネル内の第1のメッセージを識別する段階であって、該第1のメッセージが、満了した有効期間を有するバッファに格納される前記識別する段階と、
    前記順序における前記位置で始まるメッセージに対する要求を前記第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに送信する段階と、
    前記順序における前記位置での又はその後でのものである前記第1のチャネルの1又は2以上のメッセージを含む応答メッセージを前記第2のクライアントデバイスのうちの1つから受信する段階と、
    満了していない有効期間を有する前記第1のチャネルの1又は2以上のバッファから前記順序に従って該第1のチャネルのためのメッセージを取り出す段階と、
    前記取り出されたメッセージと前記応答メッセージからの前記メッセージとを前記順序に従って組み合わせる段階と、
    前記組み合わせたメッセージを前記第1のクライアントデバイスに送信する段階と、
    を含む作動を実行するようにプログラムされた1又は2以上のコンピュータ、
    を含むことを特徴とするシステム。
  6. 前記作動は、
    前記第1のチャネルを購読している前記第2のクライアントデバイスのうちの1又は2以上に対して、該第1のチャネルとのそれぞれの接続待ち時間を決定する段階と、
    最短接続待ち時間を有する前記第2のクライアントデバイスのうちの1つを識別する段階と、
    を更に含む、
    ことを特徴とする請求項5に記載のシステム。
  7. 前記作動は、
    前記第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに対して、該第1のチャネルとのそれぞれの現在の接続セッションの持続時間を決定する段階と、
    前記1又は2以上の第2のクライアントデバイスの中で最長の現在の接続セッションを有する該第2のクライアントデバイスのうちの1つを識別する段階と、
    を更に含む、
    ことを特徴とする請求項5に記載のシステム。
  8. 前記取り出されたメッセージと前記応答メッセージからの前記メッセージとを前記順序に従って組み合わせる段階は、
    前記組み合わせたメッセージから1又は2以上の複製メッセージを取り除く段階、
    を更に含む、
    ことを特徴とする請求項5に記載のシステム。
  9. 1又は2以上のコンピュータによって実行された時に、
    第1のチャネル内の位置で始まる複数のチャネルの該第1のチャネルのメッセージに対する要求を第1のクライアントデバイスから受信する段階であって、各チャネルが、順序に従って1又は2以上のそれぞれのバッファに格納されたそれぞれの該順序付けられた複数のメッセージを含み、各バッファが、それぞれの有効期間を有する前記受信する段階と、
    前記順序における前記位置に対応する前記第1のチャネル内の第1のメッセージを識別する段階であって、該第1のメッセージが、満了した有効期間を有するバッファに格納される前記識別する段階と、
    前記順序における前記位置で始まるメッセージに対する要求を前記第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに送信する段階と、
    前記順序における前記位置での又はその後でのものである前記第1のチャネルの1又は2以上のメッセージを含む応答メッセージを前記第2のクライアントデバイスのうちの1つから受信する段階と、
    満了していない有効期間を有する前記第1のチャネルの1又は2以上のバッファから前記順序に従って該第1のチャネルのためのメッセージを取り出す段階と、
    前記取り出されたメッセージと前記応答メッセージからの前記メッセージとを前記順序に従って組み合わせる段階と、
    前記組み合わせたメッセージを前記第1のクライアントデバイスに送信する段階と、
    を含む作動を前記コンピュータに実施させる命令が格納された非一時的コンピュータ可読媒体、
    を含むことを特徴とする製造品。
  10. 前記作動は、
    前記第1のチャネルを購読している前記第2のクライアントデバイスのうちの1又は2以上に対して、該第1のチャネルとのそれぞれの接続待ち時間を決定する段階と、
    最短接続待ち時間を有する前記第2のクライアントデバイスのうちの1つを識別する段階と、
    を更に含む、
    ことを特徴とする請求項9に記載の製造品。
  11. 前記作動は、
    前記第1のチャネルを購読している1又は2以上の第2のクライアントデバイスに対して、該第1のチャネルとのそれぞれの現在の接続セッションの持続時間を決定する段階と、
    前記1又は2以上の第2のクライアントデバイスの中で最長の現在の接続セッションを有する該第2のクライアントデバイスのうちの1つを識別する段階と、
    を更に含む、
    ことを特徴とする請求項9に記載の製造品。
  12. 前記取り出されたメッセージと前記応答メッセージからの前記メッセージとを前記順序に従って組み合わせる段階は、
    前記組み合わせたメッセージから1又は2以上の複製メッセージを取り除く段階、
    を更に含む、
    ことを特徴とする請求項9に記載の製造品。
JP2018560134A 2016-05-16 2017-02-08 メッセージングシステムの持続性の維持 Pending JP2019521576A (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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) 効率的メッセージ交換システム