JP2018537756A - メッセージデータを格納かつ転送するためのシステム及び方法 - Google Patents
メッセージデータを格納かつ転送するためのシステム及び方法 Download PDFInfo
- Publication number
- JP2018537756A JP2018537756A JP2018518525A JP2018518525A JP2018537756A JP 2018537756 A JP2018537756 A JP 2018537756A JP 2018518525 A JP2018518525 A JP 2018518525A JP 2018518525 A JP2018518525 A JP 2018518525A JP 2018537756 A JP2018537756 A JP 2018537756A
- Authority
- JP
- Japan
- Prior art keywords
- queue
- time
- messages
- message
- issuer
- 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
Images
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/21—Monitoring or handling of messages
- H04L51/226—Delivery according to priorities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
-
- 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
-
- 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/21—Monitoring or handling of messages
- H04L51/216—Handling conversation history, e.g. grouping of messages in sessions or threads
-
- 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/234—Monitoring or handling of messages for tracking messages
-
- 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/48—Message addressing, e.g. address format or anonymous messages, aliases
-
- 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/55—Push-based network services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/10—Streamlined, light-weight or high-speed protocols, e.g. express transfer protocol [XTP] or byte stream
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/28—Timers or timing mechanisms used in protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
- H04L69/329—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/40—Network security protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/40—Support for services or applications
- H04L65/403—Arrangements for multi-party communication, e.g. for conferences
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
メッセージを格納及び転送するためにコンピュータストレージ媒体上に符号化されたコンピュータプログラムを含む方法、システム、及び装置。例示的方法は、順序付けられた複数のストレージブロックを有する待ち行列を提供する段階を含む。各ストレージブロックは、1又は2以上のそれぞれのメッセージを格納し、かつそれぞれの時間に関連付けられる。この時間は、待ち行列のヘッドを指定するブロックから待ち行列のテイルを指定するブロックに向けて増える。本方法はまた、複数の第1送信者処理の各々により、待ち行列のヘッドで始まる待ち行列内の1又は2以上のブロックからメッセージを読み取る段階を含む。読み取られたメッセージは、複数の第1送信者処理の各々により、それぞれの受信者に送信される。ブロックの1又は2以上は、それらが第1時間よりも早期である関連付けられた時間を有する時に古いとして指定される。ブロックは、そのブロックが第1時間よりも遅いか又はそれに等しい時間に関連付けられる時に待ち行列の新しいヘッドとして指定される。第1送信者処理の1又は2以上は、第1時間よりも遅い第2時間まで古いブロックからメッセージを読み取ることを許可される。古いブロックの1又は2以上は、第2時間よりも遅いか又はそれに等しい時間に削除される。
【選択図】 図7
【選択図】 図7
Description
〔関連出願への相互参照〕
この出願は、2016年3月7日に出願された米国特許出願第15/063,390号及び2015年10月9日に出願された米国特許出願第14/879,689号に対する優先権及びその利益を主張し、引用によって本明細書にそれらの全体が組み込まれている。
この出願は、2016年3月7日に出願された米国特許出願第15/063,390号及び2015年10月9日に出願された米国特許出願第14/879,689号に対する優先権及びその利益を主張し、引用によって本明細書にそれらの全体が組み込まれている。
本明細書は、データ通信システム、特に、リアルタイムのスケーラブル発行(出版)−購読(publish-subscribe)メッセージングを実施するシステムに関する。
発行−購読パターン(又は「PubSub」)は、いわゆる発行者が、トピックに対するメッセージを発行し、いわゆる購読者が、購読している特定のトピックに関するメッセージを受信するソフトウエアシステムによって実施されるデータ通信メッセージング取り決めである。トピック毎に1又は2以上の発行者が存在する可能性があり、発行者は、一般的に、どの購読者が、もし居れば、発行されたメッセージを受信するかの知識を持っていない。一部のPubSubシステムは、メッセージをキャッシュに入れず、又は小さいキャッシュを有し、購読者が、特定のトピックに対する購読予約の時点の前で発行されたメッセージを受信しない場合があることを意味する。PubSubシステムは、メッセージ発行のサージ中又は特定のトピックに対する購読者の数が増加する時に性能不安定を受け易い可能性がある。
一般的に、PubSubシステム内でメッセージを送る2つの方法がある。1つの方法は、購読者に関する情報を発行者に与え、かつあらゆる受信者へのあらゆるメッセージの配信を発行者が行えるようにすることである。購読者の数Nに基づいて単一のメッセージ配信に行われる作業の線形(例えばO(N))依存性があるので、この方法はスケーリングに深刻な問題を有する。第2の方法は、共通ストレージ(例えばERLANG ETSを使用する)に全てを格納してあらゆる消費者又は購読者に共通ストレージからのメッセージを独立に取り出させることである。この場合には、発行者に対して直接のO(N)依存性はないが、別々の通知システムが使用されて新しいメッセージに関して消費者に通知する。この第2の方法は、多くの相互に排他的なロックを使用して共通ストレージの修正がユーザの全てにわたって安全であることを保証する。
ある一定の例では、本明細書で説明するシステム及び方法は、第2の方法の変形であり、複数の最適化を組み込んでいる。本発明のシステム及び方法は、好ましくは、データ操作セクションにおける相互排除(例えば、比較及び交換作動)を持たず、発行者又は購読者が別の当事者を待つことを要求するロックがない。一般的に、各作動は、コア間キャッシュ干渉性に関して独立に処理される。データは、好ましくは、約64kBのブロック毎に読み取られ、これは、上述した第1の手法よりも速い性能を提供する。一部の事例では、頻繁に発行されるチャネルが頻繁に発行されないチャネルの優位に立つのを阻止する購読者協働のための追加の最適化がある。本発明のシステム及び方法は、何れの速度のチャネルでも待ち時間を低く維持するチャネル速度特定の手法を備えた最適化された通知機構を使用することもできる。
以前の手法と比べて、本明細書に説明するシステム及び方法は多くの利点を有する。例えば、発行者の性能及び購読者の数の間の眼に見える依存性がほとんど又は全くない。データは、チャンクで有利に集約及び配信され、処理過負荷を低減する。チャンクサイズは、待ち時間を低く維持するために動的とすることができ、発行者と購読者の間及び購読者間にロックがないことが好ましい。通知機構はまた、待ち時間とCPU利用の間の優良な均衡を提供するチャネル速度特定のアルゴリズムを有する。また本発明のシステム及び方法は、ロックを伴わずに要件に従ってメモリを解放する自動メモリ利用論理部を有する。1つの試験では、以前の手法は、上述の第2の方法に基づいて、単一の物理的サーバで1秒につき500万までの100バイトメッセージを配信し、本明細書で説明する改良されたシステム及び方法は、同じ単一の物理的サーバによって1秒につき8億3千万の100バイトメッセージを配信する。
一般的に、本明細書に説明する主題の一態様は、方法に関する。本方法は、各々が1又は2以上のそれぞれのメッセージを格納してそれぞれの時間に関連付けられた順序付けられた複数のストレージブロックを含む待ち行列を提供する段階であって、この時間が、待ち行列のヘッドを指定するブロックから待ち行列のテイルを指定するブロックに向けて増える上記提供する段階、複数の第1送信者処理の各々により、待ち行列のヘッドで始まる待ち行列内の1又は2以上のブロックからメッセージを読み取る段階、複数の第2送信者処理の各々により、読み取られたメッセージをそれぞれの受信者に送信する段階、第1時間よりも早期である関連付けられた時間を有するブロックの1又は2以上を古いとして指定する段階、第1時間よりも遅いか又はそれに等しい時間に関連付けられたブロックを待ち行列の新しいヘッドとして指定する段階、第1時間よりも遅い第2時間まで古いブロックからのメッセージを第1送信者処理の1又は2以上が読み取ることを可能にする段階、及び古いブロックの1又は2以上を第2時間よりも遅いか又はそれに等しい時間に待ち行列から削除する段階を1又は2以上のコンピュータによって行う段階を含む。
ある一定の例では、本方法はまた、1又は2以上の第2送信者処理のための待ち行列に読み取られることになる1又は2以上のメッセージがあると決定する段階、及びこれに基づいて第2送信者処理に気付かせる段階を含む。1又は2以上の送信者処理のための待ち行列に読み取られることになる1又は2以上のメッセージがあると決定する段階は、1又は2以上の発行者処理に対して、発行者処理が前の時間から新しいメッセージを待ち行列に挿入したかを決定する段階、及び待ち行列から新しいメッセージの1つを読み取らなかった処理として第2送信者処理を識別する段階を含むことができる。1又は2以上の第2処理は、少なくとも1つの多重待ち行列発行者を含むことができる。
一部の例では、待ち行列は、単一チャネルのメッセージのためのものであり、受信者の各々は、チャネルに購読済みである。待ち行列は、単一発行者からのメッセージのためのものである場合がある。特定の受信者は、MXノード又はQノードとすることができる。一部の実施では、本方法は、1又は2以上の発行者処理により、1又は2以上のメッセージを待ち行列のテイルを指定するブロックに挿入する段階を含む。特定の発行者処理は、MXノード、Qノード、又は多重待ち行列発行者とすることができる。
本方法はまた、待ち行列に読み取るメッセージを持たない1又は2以上の第1送信者処理をスリープに入れる段階を含むこともできる。待ち行列は、チャネル待ち行列を含むことができるか又はチャネル待ち行列とすることができる。1又は2以上の第1送信者処理は、少なくとも1つの購読者又は多重待ち行列消費者を含むことができる。様々な例では、待ち行列は、発行者及び多重待ち行列発行者のうちの少なくとも1つからのメッセージのためのものである。ブロックの1又は2以上を古いとして指定する段階は、読取段階中に行うことができる。
別の態様では、本開示の主題は、命令をそこに格納した非一時的コンピュータ可読媒体を含むシステムに関する。システムはまた、各々が1又は2以上のそれぞれのメッセージを格納してそれぞれの時間に関連付けられた順序付けられた複数のストレージブロックを含む待ち行列を提供する段階であって、この時間が、待ち行列のヘッドを指定するブロックから待ち行列のテイルを指定するブロックに向けて増える上記提供する段階、複数の第1送信者処理の各々により、待ち行列のヘッドで始まる待ち行列内の1又は2以上のブロックからメッセージを読み取る段階、複数の第1送信者処理の各々により、読み取られたメッセージをそれぞれの受信者に送信する段階、第1時間よりも早期である関連付けられた時間を有するブロックの1又は2以上を古いとして指定する段階、第1時間よりも遅いか又はそれに等しい時間に関連付けられたブロックを待ち行列の新しいヘッドとして指定する段階、第1時間よりも遅い第2時間まで第1送信者処理の1又は2以上が古いブロックからメッセージを読み取ることを可能にする段階、及び古いブロックの1又は2以上を第2時間よりも遅いか又はそれに等しい時間に待ち行列から削除する段階を含む作動を行うために命令を実行するように構成されたデータ処理装置を含む。
ある一定の例では、作動はまた、1又は2以上の第2送信者処理のための待ち行列に読み取られることになる1又は2以上のメッセージがあると決定する段階、及びこれに基づいて第2送信者処理に気付かせる段階を含む。1又は2以上の送信者処理のための待ち行列に読み取られることになる1又は2以上のメッセージがあると決定する段階は、1又は2以上の発行者処理に対して、発行者処理が前の時間から待ち行列に新しいメッセージを挿入したかを決定する段階、及び待ち行列から新しいメッセージの1つを読み取らなかった処理として第2送信者処理を識別する段階を含むことができる。1又は2以上の第2処理は、少なくとも1つの多重待ち行列発行者を含むことができる。
一部の例では、待ち行列は、単一チャネルのメッセージのためのものであり、受信者の各々は、チャネルを購読済みである。待ち行列は、単一発行者からのメッセージのためのものでもある。特定の受信者は、MXノード又はQノードとすることができる。一部の実施では、作動は、1又は2以上の発行者処理により、1又は2以上のメッセージを待ち行列のテイルを指定するブロックに挿入する段階を含む。特定の発行者処理は、MXノード、Qノード、又は多重待ち行列発行者とすることができる。
作動はまた、待ち行列で読み取るメッセージをそれ以上持たない1又は2以上の送信者処理をスリープに入れる段階を含むことができる。待ち行列は、チャネル待ち行列を含むことができるか又はチャネル待ち行列とすることができる。1又は2以上の第1送信者処理は、少なくとも1つの購読者又は多重待ち行列消費者を含むことができる。様々な例では、待ち行列は、発行者及び多重待ち行列発行者のうちの少なくとも1つからのメッセージのためのものである。ブロックの1又は2以上を古いとして指定する段階は、読取中に行うことができる。
別の態様では、本開示の主題は、データ処理装置の処理モードを制御するための1又は2以上の非一時的ストレージ媒体に格納されたコンピュータプログラム製品に関する。本発明のコンピュータプログラム製品は、各々が1又は2以上のそれぞれのメッセージを格納してそれぞれの時間に関連付けられた順序付けられた複数のストレージブロックを含む待ち行列を提供する段階であって、この時間が、待ち行列のヘッドを指定するブロックから待ち行列のテイルを指定するブロックに向けて増える上記提供する段階、複数の第1送信者処理の各々により、待ち行列のヘッドで始まる待ち行列内の1又は2以上のブロックからメッセージを読み取る段階、複数の第1送信者処理の各々により、読み取られたメッセージをそれぞれの受信者に送信する段階、第1時間よりも早期である関連付けられた時間を有するブロックの1又は2以上を古いとして指定する段階、第1時間よりも遅いか又はそれに等しい時間に関連付けられたブロックを待ち行列の新しいヘッドとして指定する段階、第1時間よりも遅い第2時間まで第1送信者処理の1又は2以上が古いブロックからメッセージを読み取ることを可能にする段階、及び古いブロックの1又は2以上を第2時間よりも遅いか又はそれに等しい時間に待ち行列から削除する段階を含む作動をデータ処理装置に行わせるためにデータ処理装置によって実行可能である。
ある一定の例では、作動は、1又は2以上の第2送信者処理のための待ち行列に読み取られることになる1又は2以上のメッセージがあると決定する段階、及びこの決定に基づいて第2送信者処理に気付かせる段階を含む。1又は2以上の第2送信者処理のための待ち行列に読み取られることになる1又は2以上のメッセージがあると決定する段階は、1又は2以上の発行者処理に対して、発行者処理が前の時間から待ち行列に新しいメッセージを挿入したかを決定する段階、及び待ち行列から新しいメッセージの1つを読み取らなかった処理として第2送信者処理を識別する段階を含むことができる。1又は2以上の第2処理は、少なくとも1つの多重待ち行列発行者を含むことができる。
一部の例では、待ち行列は、単一チャネルのメッセージのためのものであり、受信者の各々は、チャネルを購読済みである。待ち行列は、単一発行者からのメッセージのためのものである場合がある。特定の受信者は、MXノード又はQノードとすることができる。一部の実施では、作動は、1又は2以上の発行者処理により、1又は2以上のメッセージを待ち行列のテイルを指定するブロックに挿入する段階を含む。特定の発行者処理は、MXノード、Qノード、又は多重待ち行列発行者とすることができる。
作動はまた、待ち行列に読み取るメッセージがそれ以上ない1又は2以上の第1送信者処理をスリープに入れる段階を含むことができる。待ち行列は、チャネル待ち行列を含むことができるか又はチャネル待ち行列とすることができる。1又は2以上の第1送信者処理は、少なくとも1つの購読者又は多重待ち行列消費者を含むことができる。様々な例では、待ち行列は、発行者と多重待ち行列発行者のうちの少なくとも1つからのメッセージのためのものである。ブロックの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ノード(MX204など)へのそれぞれの持続的接続(例えば、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ノード(例えば、MX204)は、チャネルマネージャ(例えば、チャネルマネージャ214)に要求してストリームレットへのアクセスを許可し、発行されるメッセージを書き込む。しかし、MXノードがチャネル内のストリームレットへの書込アクセスを予め許可される(かつチャネルが書込に対して閉じていない)場合に、MXノードは、ストリームレットにアクセスする許可を要求する必要なくこのストリームレットにメッセージを書き込むことができることに注意されたい。メッセージがチャネル内のストリームレットに書き込まれた状態で、メッセージは、MXノードによって読み取られ、このチャネルの購読者に提供することができる。
同様に、クライアントデバイスからチャネル購読要求を受信した時に、MXノードは、チャネル内のストリームレットへのアクセスの許可をチャネルマネージャに要求してメッセージを読み取る。MXノードがチャネル内のストリームレットへの読取アクセスを予め許可されている(かつチャネルのTTLが読取に対して閉じていない)場合に、MXノードは、ストリームレットにアクセスする許可を要求する必要なくストリームレットからメッセージを読み取ることができる。読取メッセージは、チャネルに購読予約したクライアントデバイスに転送することができる。様々な実施では、ストリームレットから読み取られたメッセージは、MXノードによってキャッシュに入れられ、それによってMXノードは、ストリームレットから読み取るのに必要な時間数を低減することができる。
例示的に、MXノードは、MXノードが特定のチャネル内のストリームレットを格納する特定のQノードのストリームレットにデータのブロックを格納することを可能にするチャネルマネージャからの許可を要求することができる。例示的ストリームレット許可要求及び許可データ構造は以下の通りである。
StreamletGrantRequestデータ構造は、ストリームchannelの名前及びMXノードがストリームレットからの読取又はストリームレットへの書込を意図するか否かを示すモードを格納する。MXノードは、StreamletGrantRequestをチャネルマネージャノードに送信する。チャネルマネージャノードは、相応にMXノードにStreamletGrantRequestデータ構造を送信する。StreamletGrantResponseは、ストリームレットの識別子(streamlet−id)、ストリームレットの最大サイズ(limit−size)、ストリームレットが格納することができるメッセージの最大数(limit−msgs)、TTL(limit−life)、及びストリームレットが存在するQノードの識別子(q−node)を含有する。StreamletGrantRequest及びStreamletGrantResponseはまた、ストリームレットから読み取るためのストリームレットの位置(又はチャネルの位置)を示す位置フィールドを有することができる。
許可は、ストリームレットが閉じた状態で無効になる。例えば、ストリームレットは、ストリームレットのTTLが満了した状態で読取及び書込に対して閉じ、ストリームレットのストレージが満杯の時はストリームレットが書込に対して閉じる。許可が無効になった時に、MXノードは、ストリームレットから読み取る又はストリームレットに書き込むためのチャネルマネージャからの新しい許可を要求することができる。新しい許可は、異なるストリームレットを参照することになり、かつ新しいストリームレットが存在する場所に応じて同じか又は異なるQノードを意味することになる。
図3Aは、様々な実施形態でデータをストリームレットに書き込む例示的方法のデータ流れ図である。図3Aでは、ストリームレットに書き込むためのMXノード(例えば、MX202)要求が、上述のようにチャネルマネージャ(例えば、チャネルマネージャ214)によって許可された時に、MXノードは、チャネルマネージャ(302)から受信した許可応答で識別されたQノードとの送信制御プロトコル(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ノード(例えば、MX202)は、チャネルマネージャ(例えば、チャネルマネージャ214)に特定のメッセージから始まる特定のチャネル又はチャネルの時間オフセットを読み取るための要求を送信する。チャネルマネージャは、特定のメッセージを含有するストリームレットの識別子、特定のメッセージに対応するストリームレットにおける位置、及び特定のストリームレットを含有するQノード(例えば、Qノード208)の識別子を含む読取許可をMXノードに戻す。MXノードは、QノードとのTCP接続を確立する(352)。MXノードとQノード間の接続プロトコルの他のタイプも可能である。
MXノードは、ストリームレットの識別子(Qノード内)及びMXノードが読み取りたいストリームレットの位置を備えた購読メッセージを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つに新しいストリームレットを割り当て、ストリームレットのアイデンティティ及びStreamletGrantのQノードを戻す。そうでなければ、チャネルマネージャは、ストリームレット及び対応するQノードをStreamletGrantに書き込むために現在開いているというアイデンティティを戻す。MXノードは、ストリームレットが満杯になるか又はストリームレットのTTLが満了するまでストリームレットにメッセージを発行することができ、この後で新しいストリームレットをチャネルマネージャによって割り当てることができる。
MXノードが所与のチャネルの読取許可を要求して読み取ることができるチャネルのためのストリームレットがない時に、チャネルマネージャは、Qノードの1つに新しいストリームレットを割り当て、ストリームレットのアイデンティティ及びStreamletGrantのQノードを戻す。そうでなければ、チャネルマネージャは、ストリームレットのアイデンティティ及びMXノードが読み取りたい位置を含有するQノードを戻す。Qノードは、送信するストリームレットのメッセージがなくなるまで指定された位置で始まるストリームレットからMXノードへのメッセージの送信を開始することができる。新しいメッセージがストリームレットに発行された時に、このストリームレットを購読しているMXノードは、新しいメッセージを受信する。ストリームレットのTTLが満了した場合に、ハンドラ351は、EOFメッセージ(392)をストリームレットを購読するいずれのMXノードにも送信する。
図2に関して上述したように、メッセージングシステム100は、複数のチャネルマネージャ(例えば、チャネルマネージャ214、215)を含むことができる。複数のチャネルマネージャは、弾力性を提供して単一障害点を回避する。例えば、1つのチャネルマネージャは、それが維持するストリームレットと現在の許可のリストとを別の「スレーブ」チャネルマネージャに複製することができる。別の例として、複数のチャネルマネージャは、Paxos又はRaftプロトコルのような分散コンセンサスプロトコルを使用して複数のチャネルマネージャ間で作動を調整することができる。
図4を参照すると、ある一定の実施では、システム100は、高速バッファシステム400を利用してメッセージデータを受信、格納、及び配信する。高速バッファシステム400は、複数の多重待ち行列発行者402、複数のチャネル待ち行列404、及び複数の多重待ち行列消費者406を含む。一般的に、多重待ち行列発行者402は、メッセージを(例えば1又は2以上のQノード又はMXノードから)受信してこのメッセージをチャネル待ち行列404に提供する。各多重待ち行列発行者402は、図4に示すようにメッセージを単一チャネル待ち行列404又は1より多いチャネル待ち行列404に提供することができる。各チャネル待ち行列404は、ただ1つの多重待ち行列発行者402からメッセージを受信するように構成される。各待ち行列発行者402及び待ち行列消費者406は、1又は2以上の実行のスレッド又は処理を含むソフトウエア構成要素である。
一般的に、各チャネル待ち行列404は、システム100に所与のチャネルのためのメッセージを格納する。チャネル待ち行列404は、多重待ち行列発行者402からメッセージが受信される順序を追跡する。各チャネル待ち行列404は、メモリデバイスを含むか又は利用してメッセージを格納する。チャネル待ち行列404は、それに固有のメモリデバイスを有することができ、及び/又は他のチャネル待ち行列404又はQノードなどの他のシステム構成要素によって使用される1又は2以上の他のメモリデバイスに格納された情報を調べることができる。チャネル待ち行列404は、メモリポインタを使用してメモリデバイス内の格納された情報を調べる。
多重待ち行列消費者406は、チャネル待ち行列404からメッセージを取り出してこのメッセージをダウンストリーム受信者に(例えば、1又は2以上のMXノード又は購読者デバイスに)配信又は発行する。例えば、新しいメッセージが多重待ち行列発行者402によって受信され、チャネル待ち行列404に配信される時に、多重待ち行列消費者406は、チャネル待ち行列404から新しいメッセージを取り出すことができる。メッセージは、常にメッセージが多重待ち行列発行者402によって受信された順序でチャネル待ち行列404から多重待ち行列消費者406に配信される。
一部の事例では、多重待ち行列消費者406は、新しいメッセージが取り出されない時にスリープに入れられるように構成することができる。多重待ち行列消費者406は、新しいメッセージが利用可能である時に気付かせることができる(例えば、多重待ち行列発行者402により)。例えば、多重待ち行列発行者402の通知構成要素は、新しいメッセージデータが到着した時に対応する多重待ち行列消費者406に気付かせることができる。メッセージが取り出されない時に多重待ち行列消費者406をスリープに入れる段階は、システムリソースの効率的な利用を可能にする。例えば、多重待ち行列消費者406が必要とされず、かつスリープに入れられている時に、他のシステム構成要素及び/又は処理にプロセッサ時間を割り当てることができる。図4に示すように、多重待ち行列消費者406は、単一チャネル待ち行列404から又は1より多いチャネル待ち行列404からメッセージを取り出すことができる。好ましい実施では、多重待ち行列消費者406は、多重チャネル待ち行列404から同時にメッセージを受信するように構成される。
高速バッファシステム400の構成要素は、一時的であることが好ましく、及び/又は高速バッファシステム400に出入りするメッセージデータの流れに従って必要に応じて生成及び/又は破壊することができる。1つの例では、新しいチャネルの新しい購読者がMXノードに接続された時に、MXノードは、Qノードからチャネルデータを受信するための新しい多重待ち行列発行者402及び新しいチャネル待ち行列404を自動的に生成する。追加のメッセージデータが新しいチャネルのために利用されない時に、新しい多重待ち行列発行者402及び/又は新しいチャネル待ち行列404は、スリープに入れることができ、システムリソースの他の場所での使用を可能にする。別の例では、関連の多重待ち行列消費者406が存在しないか又は閾値期間よりも長くアクティブである時に、多重待ち行列発行者402及び/又は多重チャネル待ち行列404(例えば、MXノード内)は削除することができる。多重待ち行列発行者402を削除するために、多重待ち行列発行者402に関連付けられた処理は終了することができる。削除されたチャネル待ち行列404に割り当てられたメモリは、必要に応じて、他のチャネル待ち行列404又は他のシステム構成要素又は解放物に再割り当てすることができる。
ある一定の実施では、各多重待ち行列発行者402及び/又は多重待ち行列消費者406に固有の処理識別子(PID)が関連付けられる。PIDは、システム100が、多重待ち行列発行者402、チャネル待ち行列404、及び多重待ち行列消費者406のステータスをモニタすることを可能にする。PIDは、システム100が、必要に応じて、多重待ち行列発行者402、チャネル待ち行列404、及び多重待ち行列消費者406のうちの1又は2以上の優先順位を調節(又は終了)することを可能にする。これに代えて又はこれに加えて、PIDは、システム100が1つの発行者から別の発行者にチャネル待ち行列404を転送する又は採用することを可能にすることができる。
一部の例では、システム100は、通知テーブルを使用して新しいデータを待っている構成要素を発見する。例えば、多重待ち行列消費者は、利用可能なデータの最後に達して新しいデータが追加されるか又は読み取ることができるようになったことを通知して欲しい時に通知テーブルに自らを追加することができる。新しいデータが利用できるようになった時に、通知構成要素は、通知テーブルを使用して新しいデータを待っている多重待ち行列消費者のPIDを取得することができる。通知構成要素は、通知を送信して新しいデータが利用できることを多重待ち行列消費者に通知することができる。同様に、多重待ち行列発行者402がメッセージデータを多重チャネル待ち行列404に追加した時に、多重待ち行列発行者402の通知構成要素は、通知テーブルを更新してメッセージデータが多重チャネル待ち行列404に追加されたことを示すことができる。一部の例では、チャネル待ち行列404は、多重待ち行列消費者406がスリープに入る前に自らのPIDを追加できる追加チャネル毎通知テーブルを有するか又はそれを利用し、それによって多重待ち行列消費者406は、新しいメッセージを取り出すことができるようになった時に気付かされることができる。1つの実施では、多重待ち行列消費者406がスリープ中であり、かつ新しいメッセージの取り出しに利用可能であるチャネルを購読したことを通知テーブルが示す場合、通知子(例えば、多重待ち行列発行者402の付属構成要素)は、その多重待ち行列消費者406に気付かせることができる。多重待ち行列消費者406が気付いていることを示すために、通知テーブルは、次に、更新することができる。新しいメッセージを多重待ち行列消費者406が取り出すことができない時に、多重待ち行列消費者406は、そのPIDが通知テーブルに追加された後に再度スリープに入ることができる。
図5は、高速バッファシステム400がQノード及び/又はMXノードに組み込まれる例示的PubSubシステム500を示している。発行者502からのメッセージは、入力MXノード504によって受信され、メッセージを格納のためのQノード506に転送する。メッセージは、メッセージを購読者510に転送する出力MXノード508によってQノード506から取り出される。図示した例では、別々の高速バッファシステム400がQノード506及び出力MXノード508に組み込まれる。Qノード506は、それに固有の高速バッファシステム400を含むか又は利用して入力MXノード504からメッセージを受信し、メッセージを格納し、かつメッセージを出力MXノード508に送信する。同様に、各出力MXノード508は、それに固有の高速バッファシステム400を含むか又は利用してQノード506からメッセージを受信し、メッセージを格納し、かつメッセージを購読者510に送信する。制限された時間だけ出力MXノード508にメッセージを格納することによって、MXノード508は、他のシステム構成要素からメッセージを取得する必要はなく、これによって内部ネットワークトラフィックを最小化する。
有利なことに、高速バッファシステム400の使用は、チャネルデータが一度だけコピーされることを可能にする。例えば、メッセージデータが発行者からシステム100によって受信された時に、メッセージデータをメモリデバイスに格納又はコピーすることができる。好ましくはメッセージデータが、バイトの閾値数(例えば64バイト)未満のデータチャンクにだけコピーされ、それ以外はメッセージデータがコピーされず、メッセデータの参照を代わりに生成することができる。メッセージデータへのアクセスを要求する高速バッファシステム400の全ての構成要素は、更なるコピーをすることなくメモリデバイスのメッセージデータにアクセスすることができる。例えば、Qノード内又はMXノード内の高速バッファシステム構成要素は、メモリデバイスのメッセージデータを調べることができる。メッセージデータの単一コピーは、高速バッファシステム400の全ての構成要素(例えば単一のサーバ内の)にアクセス可能であることが好ましく、これによって構成要素がメッセージデータにアクセスするのに更なるコピーは必要ではない。メッセージデータを格納及び取り出すために、システム構成要素は、メッセージデータがメモリデバイスに格納された場所を示すポインタ又は他のインジケータを使用することができる。高速バッファシステム400の全ての構成要素に対して一度だけチャネルデータをコピーすることにより、高速バッファシステム400は、チャネルデータを書き込みかつ取り除く時間を浪費せず、チャネルデータを格納するためのメモリ空間をより少なく充てる。これは、効率的かつ正確に発行者からメッセージを受信する及びメッセージを購読者に配信するなどの他の活動にシステムリソースを割り当てることを可能にする。
図6Aは、メッセージデータを格納するために使用される例示的待ち行列600の略図である。待ち行列600は、本明細書で説明するチャネル待ち行列404と同じか又は類似とすることができる。図示した例では、待ち行列600は、各々が1又は2以上のメッセージを含むブロックB1、B2、B3、及びB4を格納している。ブロックは、B1、B2、B3、及びB4の順序で待ち行列600によって生成されたものである。従って、ブロックB1は、最も長く待ち行列600によって格納されており、ヘッド境界602によって示されるように待ち行列600のヘッドを定めるものである。ブロックB4は、待ち行列600に最も新しく追加されており、テイル境界604によって示されるように待ち行列600のテイルを定めるものである。ヘッド境界602及びテイル境界604は、待ち行列600のためのアクティブゾーン606を定めるものである。アクティブゾーン606内で、ブロックは、システム構成要素及び処理(例えば、Qノード及び/又はMXノードに関連付けられた送信者処理)にアクセス可能である。一般的に、これらのシステム構成要素及び処理は、ブロックが待ち行列600によって作成された順序(すなわち、ヘッドからテイル)でブロックにアクセスする又はブロックを読み取る。
待ち行列600の各ブロックは、ブロックが待ち行列600に到着した時間に関連付けられる。待ち行列600に最初に到着したブロックB1は、より早い時間に関連付けられる。同様に、待ち行列600に最後に到着したブロックB4は、例えばQノードによって設定することができるより遅い時間に関連付けられる。MXノードのための時間は、例えばネットワーク時間プロトコル(NTP)機構を使用してQノードのための時間に同期させることができる。一般的に、待ち行列600のブロックに関連付けられた時間は、待ち行列600のヘッドから待ち行列600のテイルに向けて増える。これらの時間の各々は、例えば時刻又は経時的に(例えば1秒毎又は1秒分)増分するカウンタとすることができるか又はこれに基づくことができる。
図6Bは、新しいブロックB5及びB6が待ち行列600に追加されたより遅い時間の待ち行列600を示している。待ち行列600に最も新しく追加されたブロックB6は、ブロックB6の後の新しい位置に移されたテイル境界604によって示されるように待ち行列600のテイルに現時点で存在する。この時間に、ブロックB1及びB2は、もはやアクティブゾーン606にはなく、代わりに待ち行列600の非アクティブゾーン608に移動している。ヘッド境界602は、待ち行列600のヘッドに位置するブロックB2の後及びブロックB3の前に現時点で位置付けられる。一般的に、各ブロックは、待ち行列600のアクティブゾーン606のタイム・ツー・リザイド(TTR)を割り当てられる。ブロックのTTRが満了した状態で、ヘッド境界602は、ブロックが現時点で非アクティブゾーン608にあることを示すために移される。図示した例では、ブロックB1及びB2のTTRが満了しており、ブロックB1及びB2は、現時点で非アクティブゾーン608にある。非アクティブゾーン608のブロックは、一般的にはシステム構成要素及び処理にアクセスできない。しかし、一部の実施では、アクティブゾーン606のブロックにアクセスした処理には、TTRが満了してブロックが非アクティブゾーン608に移動した後にブロックにアクセスする追加の時間を与えることができる。TTRが満了する前に処理が読取を完了できなかった場合に、これは、このような処理(例えば非同期処理)にブロックからの読取を終了するための追加の時間を与える。
図6Cは、新しいブロックB7及びB8が待ち行列600に追加されたより遅い時間の待ち行列600を示している。待ち行列600に最も新しく追加されたブロックB8は、現時点でブロックB8の後の新しい位置に移されているテイル境界604によって示されるように待ち行列600のテイルにある。この時間に、ブロックB3及びB4のTTRは満了しており、ブロックB3及びB4は、アクティブゾーン606から非アクティブゾーン608に移動している。ヘッド境界602は、現時点で、待ち行列600のヘッドにあるブロックB4の後及びブロックB5の前に位置付けられる。ヘッド境界602及び非アクティブゾーン境界610は、非アクティブゾーン608を定めるものである。非アクティブゾーン境界610に先行してデッドゾーン612があり、ブロックB1及びB2が現時点で位置付けられている。一般的に、各ブロックには、有効期間(TTL)が割り当てられ、この後にブロックは、非アクティブゾーン608からデッドゾーン612に移動する。デッドゾーン612に移動した後に、ブロックはデッドであると見なされ、それ以上は全てのシステム構成要素又は処理にアクセスできない。これによって、追加のブロック及び/又はメッセージデータを格納するためのシステムメモリを解放することができる。
アクティブゾーン606から非アクティブゾーン608へ、及びデッドゾーン612へブロックが進んでいくと、ブロックのTTLは、ブロックのTTRよりも長くなる。ブロックのTTRは、システム構成要素及び処理がアクティブゾーン606のブロックにアクセスするのに十分な時間を有する程度に十分に長いが、アクセスする必要がないブロックを格納するのにメモリが停止するほど長くはないことが好ましい。TTRは、例えば、約1秒、約10秒、約30秒、又は約60秒とすることができる。好ましい実施では、TTRは約30秒である。ブロックのTTLは、一般的にはTTRよりも長く、非アクティブゾーン608に残る時間をブロックに与える。これは、システム構成要素及び処理(例えば、非同期処理)に対して、ブロックが削除される又はアクセスできなくなる前にブロックにアクセスする追加の時間を与える。1つの例では、TTL=C*TTRであり、ここで、Cは、1よりも大きいか又はそれに等しい定数である。例えば、Cは、約1.1、約1.2、又は約1.3とすることができる。特定の例では、TTR=30秒及びC=1.2である時に、TTL=36秒である。
一般的に、待ち行列600は、1又は2以上のチャネルのための発行者(例えば、多重待ち行列発行者402、MXノード、又はQノード)からのメッセージを受信する。1又は2以上の送信者処理(例えば、購読者、Qノード、MXノード、及び/又は多重待ち行列消費者404に関連付けられた)は待ち行列600からメッセージを受信し、メッセージを他のシステム構成要素に(例えば、購読者TCP/IP接続に)送信する。
様々な実施では、待ち行列600は、1つの発行者だけからメッセージのブロックを受信する。ブロックは、ある順序で発行者によって生成され、ブロックは同じ順序で待ち行列600によって受信される。これは、システム構成要素及び処理が待ち行列600のブロックの順序を知ってブロックからメッセージにアクセスすることを容易にする。発行者は、例えば、ユーザのクライアントデバイス、MXノード、Qノード、及び/又は多重待ち行列発行者とすることができる。一般的に、全てのメッセージは、ある順序で維持され、全てのクライアント購読者は、同じ順序でメッセージを受信する。
一部の例では、待ち行列600は、単一チャネルのためだけのメッセージを受信及び格納する。単一発行者からの又は例えばユーザのクライアントデバイス、MXノード、Qノード、及び/又は多重待ち行列発行者を含むことができる多重発行者からのメッセージは、待ち行列600によって受信することができる。
図7は、待ち行列にメッセージを格納する方法700の流れ図である。方法700は、順序付けられた複数のストレージブロックを含む待ち行列(例えば、待ち行列600又はチャネル待ち行列404)を提供する段階(段階702)を含む。各ストレージブロックは、1又は2以上のそれぞれのメッセージを格納し、かつそれぞれの時間(例えば、ブロックが待ち行列によって受信された時間)に関連付けられる。ストレージブロックに対する時間は、待ち行列のヘッドを指定するブロックから待ち行列のテイルを指定するブロックに向けて(例えばより早い時間からより遅い時間に)増える。複数の第1送信者処理の各々は、待ち行列のヘッドで始まる待ち行列内の1又は2以上のブロックからメッセージを読み取り(段階704)、読み取ったメッセージをそれぞれの受信者に送信する(段階706)。第1時間よりも早期である関連付けられた時間(例えばTTRに基づいて)を有するブロックの1又は2以上は古いとして指定される(段階708)。第1時間よりも遅いか又はそれに等しい時間に関連付けられたブロックは、待ち行列の新しいヘッドとして指定される(段階710)。指定段階708及び/又は指定段階710は、読取段階704の前、読取段階704中、及び/又は読取段階704の後に発生することができる。古いとして指定されたブロックの前のブロックからメッセージの読取を開始した第1送信者処理の1又は2以上は、第1時間よりも遅い第2時間(例えばTTLに基づいて)までブロックの読取作動(段階712)を継続させることができる。これは、非同期とすることができる第1送信者処理に対して、読取作動を完了する追加の時間を与える。読取作動は、TTLタイムアウトよりも早く完了するように設計される(例えば、数桁早期に)。古いブロックの1又は2以上は、第2時間よりも遅いか又はそれに等しい時間に削除される(段階714)。
本明細書に説明する主題及び作動の実施形態は、本明細書及び本明細書の構造的均等物又はこれらの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以上の特徴は、一部の事例では組合せから削除することができ、主張した組合せを部分組合せ又は部分組合せの変形に向けることができる。
同様に、作動は、特定の順序で図面に示されているが、これは、望ましい結果を達成するためにそのような作動を示された特定の順序又は連続的な順序で実行し、又は全ての例示された作動を実行することが望ましいとして理解すべきではない。ある状況では、マルチタスク及び並列処理が有利である場合がある。上述の実施形態における様々なシステム構成要素の分離は、全ての実施形態においてそのような分離を要求するものとして理解すべきではなく、説明したプログラム構成要素及びシステムは、一般的に単一ソフトウエア製品に互いに統合するか又は複数のソフトウエア製品にパッケージ化することができることを理解しなければならない。
すなわち、本主題の特定の実施形態を説明した。他の実施形態も特許請求の範囲内である。一部の事例では、特許請求の範囲に説明するアクションを異なる順序で実行して望ましい結果を達成することができる。更に、添付の図に示す処理は、望ましい結果を達成するために必ずしも示す特定の順序又は連続的な順序を必要としない。ある一定の実施では、マルチタスク及び並列処理が有利である場合がある。
700 待ち行列にメッセージを格納する方法
702 順序付けられた複数のストレージブロックを有する待ち行列を提供する段階
706 読み取られたメッセージをそれぞれの受信者に送信する段階
708 第1時間よりも早期である関連付けられた時間を有するブロックの1又は2以上を古いとして指定する段階
714 古いブロックの1又は2以上を第2時間よりも遅いか又はそれに等しい時間に削除する段階
702 順序付けられた複数のストレージブロックを有する待ち行列を提供する段階
706 読み取られたメッセージをそれぞれの受信者に送信する段階
708 第1時間よりも早期である関連付けられた時間を有するブロックの1又は2以上を古いとして指定する段階
714 古いブロックの1又は2以上を第2時間よりも遅いか又はそれに等しい時間に削除する段階
Claims (29)
- 各々が1又は2以上のそれぞれのメッセージを格納してそれぞれの時間に関連付けられた順序付けられた複数のストレージブロックを含む待ち行列を提供する段階であって、該時間が、該待ち行列のヘッドを指定するブロックから該待ち行列のテイルを指定するブロックに向けて増える前記提供する段階と、
複数の第1送信者処理の各々により、前記待ち行列の前記ヘッドで始まる該待ち行列内の1又は2以上のブロックからメッセージを読み取る段階と、
前記複数の第1送信者処理の各々により、前記読み取られたメッセージをそれぞれの受信者に送信する段階と、
第1時間よりも早期である関連付けられた時間を有する前記ブロックの1又は2以上を古いとして指定する段階と、
前記第1時間よりも遅いか又はそれに等しい時間に関連付けられたブロックを前記待ち行列の新しいヘッドとして指定する段階と、
前記第1時間よりも遅い第2時間まで前記第1送信者処理の1又は2以上が前記古いブロックからメッセージを読み取ることを許可する段階と、
前記古いブロックの1又は2以上を前記第2時間よりも遅いか又はそれに等しい時間に前記待ち行列から削除する段階と、
を1又は2以上のコンピュータによって行う段階、
を含むことを特徴とする方法。 - 1又は2以上の第2送信者処理のための前記待ち行列に読み取られることになる1又は2以上のメッセージがあると決定し、それに基づいて、該第2送信者処理に気付かせる段階、
を更に含むことを特徴とする請求項1に記載の方法。 - 1又は2以上の第2送信者処理のための前記待ち行列に読み取られることになる1又は2以上のメッセージがあると決定する段階は、
1又は2以上の発行者処理に関して、該発行者処理が前の時間から新しいメッセージを前記待ち行列内に挿入したかを決定する段階と、
前記第2送信者処理を前記待ち行列から前記新しいメッセージの1つを読み取らなかった処理として識別する段階と、
を含む、
ことを特徴とする請求項2に記載の方法。 - 前記1又は2以上の第2処理は、少なくとも1つの多重待ち行列発行者を含むことを特徴とする請求項2に記載の方法。
- 前記待ち行列は、単一チャネルのメッセージのためのものであり、
前記受信者の各々が、前記チャネルに購読済みである、
ことを特徴とする請求項1に記載の方法。 - 前記待ち行列は、単一発行者からのメッセージのためのものであることを特徴とする請求項1に記載の方法。
- 特定の受信者が、MXノード又はQノードであることを特徴とする請求項1に記載の方法。
- 1又は2以上の発行者処理により、1又は2以上のメッセージを前記待ち行列の前記テイルを指定する前記ブロック内に挿入する段階、
を更に含むことを特徴とする請求項1に記載の方法。 - 特定の発行者処理が、MXノード、Qノード、及び多重待ち行列発行者から構成される群から選択されることを特徴とする請求項8に記載の方法。
- 前記待ち行列内にそれ以上読み取るべきメッセージを持たない1又は2以上の第1送信者処理をスリープに入れる段階を更に含むことを特徴とする請求項1に記載の方法。
- 前記待ち行列は、チャネル待ち行列を含むことを特徴とする請求項1に記載の方法。
- 前記1又は2以上の第1送信者処理は、少なくとも1つの購読者又は多重待ち行列消費者を含むことを特徴とする請求項1に記載の方法。
- 前記待ち行列は、発行者及び多重待ち行列発行者のうちの少なくとも1つからのメッセージのためのものであることを特徴とする請求項1に記載の方法。
- 前記ブロックの1又は2以上を古いとして指定する段階は、前記読み取る段階中に行われることを特徴とする請求項1に記載の方法。
- 命令をそこに格納した非一時的コンピュータ可読媒体と、
各々が1又は2以上のそれぞれのメッセージを格納してそれぞれの時間に関連付けられた順序付けられた複数のストレージブロックを含む待ち行列を提供する段階であって、該時間が、該待ち行列のヘッドを指定するブロックから該待ち行列のテイルを指定するブロックに向けて増える前記提供する段階、
複数の第1送信者処理の各々により、前記待ち行列の前記ヘッドで始まる該待ち行列内の1又は2以上のブロックからメッセージを読み取る段階、
前記複数の第1送信者処理の各々により、前記読み取られたメッセージをそれぞれの受信者に送信する段階、
第1時間よりも早期である関連付けられた時間を有する前記ブロックの1又は2以上を古いとして指定する段階、
前記第1時間よりも遅いか又はそれに等しい時間に関連付けられたブロックを前記待ち行列の新しいヘッドとして指定する段階、
前記第1時間よりも遅い第2時間まで前記第1送信者処理の1又は2以上が前記古いブロックからメッセージを読み取ることを許可する段階、及び
前記古いブロックの1又は2以上を前記第2時間よりも遅いか又はそれに等しい時間に前記待ち行列から削除する段階、
を含む作動を行うために前記命令を実行するように構成されたデータ処理装置と、
を含むことを特徴とするシステム。 - 前記作動は、
1又は2以上の第2送信者処理のための前記待ち行列に読み取られることになる1又は2以上のメッセージがあると決定する段階、及びそれに基づいて該第2送信者処理に気付かせる段階、
を更に含む、
ことを特徴とする請求項15に記載のシステム。 - 1又は2以上の第2送信者処理のための前記待ち行列に読み取られることになる1又は2以上のメッセージがあると決定する段階は、
1又は2以上の発行者処理に関して、該発行者処理が前の時間から新しいメッセージを前記待ち行列内に挿入したかを決定する段階と、
前記第2送信者処理を前記待ち行列から前記新しいメッセージの1つを読み取らなかった処理として識別する段階と、
を含む、
ことを特徴とする請求項16に記載のシステム。 - 前記1又は2以上の第2処理は、少なくとも1つの多重待ち行列発行者を含むことを特徴とする請求項16に記載のシステム。
- 前記待ち行列は、単一チャネルのメッセージのためのものであり、
前記受信者の各々が、前記チャネルに購読済みである、
ことを特徴とする請求項15に記載のシステム。 - 前記待ち行列は、単一発行者からのメッセージのためのものであることを特徴とする請求項15に記載のシステム。
- 特定の受信者が、MXノード又はQノードであることを特徴とする請求項15に記載のシステム。
- 前記作動は、
1又は2以上の発行者処理により、1又は2以上のメッセージを前記待ち行列の前記テイルを指定する前記ブロック内に挿入する段階、
を更に含む、
ことを特徴とする請求項15に記載のシステム。 - 特定の発行者処理が、MXノード、Qノード、及び多重待ち行列発行者から構成される群から選択されることを特徴とする請求項22に記載のシステム。
- 前記作動は、前記待ち行列内にそれ以上読み取るべきメッセージを持たない1又は2以上の第1送信者処理をスリープに入れる段階を更に含むことを特徴とする請求項15に記載のシステム。
- 前記待ち行列は、チャネル待ち行列を含むことを特徴とする請求項15に記載のシステム。
- 前記1又は2以上の第1送信者処理は、少なくとも1つの購読者又は多重待ち行列消費者を含むことを特徴とする請求項15に記載のシステム。
- 前記待ち行列は、発行者及び多重待ち行列発行者のうちの少なくとも1つからのメッセージのためのものであることを特徴とする請求項15に記載のシステム。
- 前記ブロックの1又は2以上を古いとして指定する段階は、前記読み取る段階中に行われることを特徴とする請求項15に記載のシステム。
- データ処理装置の処理モードを制御するために1又は2以上の非一時的ストレージ媒体に格納されたコンピュータプログラム製品であって、
各々が1又は2以上のそれぞれのメッセージを格納してそれぞれの時間に関連付けられた順序付けられた複数のストレージブロックを含む待ち行列を提供する段階であって、該時間が、該待ち行列のヘッドを指定するブロックから該待ち行列のテイルを指定するブロックに向けて増える前記提供する段階、
複数の第1送信者処理の各々により、前記待ち行列の前記ヘッドで始まる該待ち行列内の1又は2以上のブロックからメッセージを読み取る段階、
前記複数の第1送信者処理の各々により、前記読み取られたメッセージをそれぞれの受信者に送信する段階、
第1時間よりも早期である関連付けられた時間を有する前記ブロックの1又は2以上を古いとして指定する段階、
前記第1時間よりも遅いか又はそれに等しい時間に関連付けられたブロックを前記待ち行列の新しいヘッドとして指定する段階、
前記第1時間よりも遅い第2時間まで前記第1送信者処理の1又は2以上が前記古いブロックからメッセージを読み取ることを許可する段階、及び
前記古いブロックの1又は2以上を前記第2時間よりも遅いか又はそれに等しい時間に前記待ち行列から削除する段階、
を含む作動を前記データ処理装置に行わせるために該データ処理装置によって実行可能である、
ことを特徴とする製品。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/879,689 | 2015-10-09 | ||
US14/879,689 US9319365B1 (en) | 2015-10-09 | 2015-10-09 | Systems and methods for storing and transferring message data |
US15/063,390 US9407593B1 (en) | 2015-10-09 | 2016-03-07 | Systems and methods for storing and transferring message data |
US15/063,390 | 2016-03-07 | ||
PCT/US2016/023164 WO2017062059A1 (en) | 2015-10-09 | 2016-03-18 | Systems and methods for storing and transferring message data |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2018537756A true JP2018537756A (ja) | 2018-12-20 |
Family
ID=55700150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018518525A Pending JP2018537756A (ja) | 2015-10-09 | 2016-03-18 | メッセージデータを格納かつ転送するためのシステム及び方法 |
Country Status (6)
Country | Link |
---|---|
US (6) | US9319365B1 (ja) |
EP (1) | EP3360296A1 (ja) |
JP (1) | JP2018537756A (ja) |
CN (1) | CN108370346A (ja) |
AU (1) | AU2016335746A1 (ja) |
WO (1) | WO2017062059A1 (ja) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US9319365B1 (en) | 2015-10-09 | 2016-04-19 | Machine Zone, Inc. | Systems and methods for storing and transferring message data |
US9385976B1 (en) | 2015-10-09 | 2016-07-05 | Machine Zone, Inc. | Systems and methods for storing message data |
US9397973B1 (en) | 2015-10-16 | 2016-07-19 | Machine Zone, Inc. | Systems and methods for transferring message data |
US9602450B1 (en) | 2016-05-16 | 2017-03-21 | Machine Zone, Inc. | Maintaining persistence of a messaging system |
US10223179B2 (en) | 2016-05-17 | 2019-03-05 | International Business Machines Corporation | Timeout processing for messages |
US10404647B2 (en) * | 2016-06-07 | 2019-09-03 | Satori Worldwide, Llc | Message compression in scalable 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 |
US10216782B2 (en) * | 2016-08-12 | 2019-02-26 | Sap Se | Processing of updates in a database system using different scenarios |
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 |
WO2018044334A1 (en) * | 2016-09-02 | 2018-03-08 | Iex Group. Inc. | System and method for creating time-accurate event streams |
US9667681B1 (en) | 2016-09-23 | 2017-05-30 | Machine Zone, Inc. | Systems and methods for providing messages to multiple subscribers |
US10862965B2 (en) * | 2017-10-01 | 2020-12-08 | Oracle International Corporation | System and method for topics implementation in a distributed data computing environment |
CN108874560B (zh) * | 2018-06-05 | 2022-09-09 | 腾讯音乐娱乐科技(深圳)有限公司 | 进行通信的方法和通信设备 |
CN109376020B (zh) * | 2018-09-18 | 2021-02-12 | 中国银行股份有限公司 | 多区块链交互并发下的数据处理方法、装置及存储介质 |
CN110231997A (zh) * | 2019-06-11 | 2019-09-13 | 浪潮软件集团有限公司 | 一种快速创建消息队列文件的方法及系统 |
CN110351355B (zh) * | 2019-07-04 | 2022-02-25 | 苏宁云计算有限公司 | 消息处理系统 |
CN111190727B (zh) * | 2019-11-19 | 2023-06-09 | 腾讯科技(深圳)有限公司 | 内存的异步析构方法、装置、计算机设备及存储介质 |
CN111245897B (zh) * | 2019-12-30 | 2022-08-26 | 深圳物缘科技有限公司 | 数据处理方法、装置、系统、存储介质及处理器 |
US11507314B2 (en) * | 2020-06-24 | 2022-11-22 | Samsung Electronics Co., Ltd. | Systems and methods for message queue storage |
Family Cites Families (127)
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 |
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 |
US5982436A (en) | 1997-03-28 | 1999-11-09 | Philips Electronics North America Corp. | Method for seamless splicing in a video encoder |
US7185266B2 (en) * | 2003-02-12 | 2007-02-27 | Alacritech, Inc. | Network interface device for error detection using partial CRCS of variable length message portions |
US7111290B1 (en) * | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
US8121828B2 (en) * | 1999-01-28 | 2012-02-21 | Ati Technologies Ulc | Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions |
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 |
DE60040846D1 (de) | 1999-02-26 | 2009-01-02 | Henry Haugland | Massenerzeugung individualer virtueller servern, vertueller webseiten sowie virtueller webobjekten |
US6549959B1 (en) * | 1999-08-30 | 2003-04-15 | Ati International Srl | Detecting modification to computer memory by a DMA device |
TW454120B (en) | 1999-11-11 | 2001-09-11 | Miralink Corp | Flexible remote data mirroring |
US8086672B2 (en) | 2000-06-17 | 2011-12-27 | Microsoft Corporation | When-free messaging |
US20020038373A1 (en) | 2000-07-21 | 2002-03-28 | John Border | Method and system for improving network performance enhancing proxy architecture with gateway redundancy |
US6621827B1 (en) * | 2000-09-06 | 2003-09-16 | Xanboo, Inc. | Adaptive method for polling |
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 |
US7668908B2 (en) | 2001-12-14 | 2010-02-23 | Microsoft Corporation | System and method for generalized and distributed scalable eventing system |
US7177853B1 (en) * | 2002-02-21 | 2007-02-13 | Emc Corporation | Cache management via statistically adjusted time stamp queue |
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 |
US8176154B2 (en) | 2002-09-30 | 2012-05-08 | Avaya Inc. | Instantaneous user initiation voice quality feedback |
US8606859B2 (en) | 2002-10-17 | 2013-12-10 | 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 |
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 |
US20050262205A1 (en) | 2004-04-30 | 2005-11-24 | Nikolov Radoslav I | Delivering messages in an enterprise messaging system using message selector hierarchy |
US7640357B2 (en) | 2004-04-30 | 2009-12-29 | Sap Ag | Transmitting enterprise messages based on buffer sizes |
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 |
US8051140B2 (en) | 2004-10-08 | 2011-11-01 | Sharp Laboratories Of America, Inc. | Methods and systems for imaging device control |
US8065384B2 (en) | 2004-10-08 | 2011-11-22 | Sharp Laboratories Of America, Inc. | Methods and systems for imaging device event notification subscription |
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 |
CA2594036A1 (en) | 2005-01-06 | 2006-07-13 | Tervela, Inc. | Intelligent messaging application programming interface |
US8788565B2 (en) | 2005-07-18 | 2014-07-22 | Wayne Bevan | Dynamic and distributed queueing and processing system |
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 |
WO2007063585A1 (ja) | 2005-11-30 | 2007-06-07 | Fujitsu Limited | 通信装置およびフレーム制御方法 |
US8965409B2 (en) | 2006-03-17 | 2015-02-24 | Fatdoor, Inc. | User-generated community publication in an online neighborhood social network |
US8127021B2 (en) | 2006-03-18 | 2012-02-28 | Metafluent, Llc | Content aware routing of subscriptions for streaming and static data |
GB2439195B8 (en) | 2006-06-12 | 2011-01-19 | Enigmatec Corp Ltd | 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 |
CN101849228B (zh) * | 2007-01-16 | 2013-05-08 | 吉兹莫克斯有限公司 | 用于创建面向IT的基于服务器的Web应用的方法和系统 |
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 |
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 |
CN101150354B (zh) * | 2007-10-29 | 2012-03-21 | 华为技术有限公司 | 消息调度方法和消息调度装置 |
CN101159711B (zh) * | 2007-11-27 | 2010-06-02 | 航天东方红卫星有限公司 | 自适应的实时消息订阅与发布系统及方法 |
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 |
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 |
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 |
US8786876B2 (en) * | 2009-11-27 | 2014-07-22 | Canon Kabushiki Kaisha | Peripheral apparatus control system, peripheral apparatus, information processing apparatus, peripheral apparatus control method, and program |
US8375095B2 (en) | 2009-12-22 | 2013-02-12 | Microsoft Corporation | Out of order durable message processing |
US9021046B2 (en) | 2010-01-15 | 2015-04-28 | Joyent, Inc | Provisioning server resources in a cloud resource |
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 |
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 | 国际商业机器公司 | 发布-订阅消息传递的方法和系统 |
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 |
US9407543B2 (en) * | 2011-02-22 | 2016-08-02 | Theatrolabs, Inc. | Observation platform for using structured communications with cloud computing |
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 |
US8886731B2 (en) | 2011-06-01 | 2014-11-11 | Microsoft Corporation | Decentralized relaying algorithm for mobile devices |
US20130031177A1 (en) | 2011-07-29 | 2013-01-31 | Myxer, Inc. | Systems and methods for dynamic media selection |
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 |
CN103077179B (zh) | 2011-09-12 | 2016-08-31 | 克利特股份有限公司 | 用于显示社交网络的用户的个人时间线的计算机实现方法,计算机系统及其计算机可读介质 |
US8607249B2 (en) | 2011-09-22 | 2013-12-10 | Oracle International Corporation | System and method for efficient concurrent queue implementation |
EP2780806A1 (en) | 2011-11-18 | 2014-09-24 | Thomson Licensing | System comprising a publish/subscribe broker for a remote management of end-user devices, and respective end-user device |
US9456053B2 (en) | 2011-12-14 | 2016-09-27 | Level 3 Communications, Llc | Content delivery network |
DE112011106016T5 (de) | 2011-12-23 | 2014-09-11 | Intel Corporation | Gemeinsame Sendeschlange |
US9843554B2 (en) * | 2012-02-15 | 2017-12-12 | F5 Networks, Inc. | Methods for dynamic DNS implementation and systems thereof |
US20130290449A1 (en) | 2012-04-25 | 2013-10-31 | Origami Labs, Inc. | Privacy-based social content broadcast systems and methods |
CN102710517A (zh) * | 2012-05-31 | 2012-10-03 | 苏州阔地网络科技有限公司 | 一种消息调度控制方法及系统 |
BR112014004057A2 (pt) | 2012-07-02 | 2017-03-07 | Sony Corp | dispositivo e método de transmissão, e, aparelho de rede |
US20140114738A1 (en) | 2012-10-24 | 2014-04-24 | Erick Tseng | Automatic Check-In Using Social-Networking Information |
US9686201B2 (en) * | 2013-01-25 | 2017-06-20 | Cable Television Laboratories, Inc. | Predictive management of a network buffer |
US20140237057A1 (en) | 2013-02-21 | 2014-08-21 | Genesys Telecommunications Laboratories, Inc. | System and method for processing private messages in a contact center |
US9454548B1 (en) * | 2013-02-25 | 2016-09-27 | Emc Corporation | Pluggable storage system for distributed file systems |
US9043822B1 (en) | 2013-03-14 | 2015-05-26 | Cox Communications, Inc. | Remote time shift buffering with shadow tuning |
US20150095555A1 (en) * | 2013-09-27 | 2015-04-02 | Avalanche Technology, Inc. | Method of thin provisioning in a solid state disk array |
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 |
US9330565B2 (en) * | 2013-09-18 | 2016-05-03 | Iteris, Inc. | Traffic bottleneck detection and classification on a transportation network graph |
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 |
US9888047B2 (en) * | 2014-04-03 | 2018-02-06 | Cisco Technology, Inc. | Efficient on-demand generation of ABR manifests |
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 |
US9635148B2 (en) * | 2014-10-31 | 2017-04-25 | Aruba Networks, Inc. | Partitioning data sets for transmission on multiple physical links |
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 |
CN104753769A (zh) * | 2015-03-24 | 2015-07-01 | 新余兴邦信息产业有限公司 | 用于消息队列下发消息的方法和消息下发装置 |
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 |
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 |
US9319365B1 (en) * | 2015-10-09 | 2016-04-19 | Machine Zone, Inc. | Systems and methods for storing and transferring message data |
US9385976B1 (en) | 2015-10-09 | 2016-07-05 | Machine Zone, Inc. | Systems and methods for storing message data |
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 |
US9667681B1 (en) * | 2016-09-23 | 2017-05-30 | Machine Zone, Inc. | Systems and methods for providing messages to multiple subscribers |
-
2015
- 2015-10-09 US US14/879,689 patent/US9319365B1/en not_active Expired - Fee Related
-
2016
- 2016-03-07 US US15/063,390 patent/US9407593B1/en active Active
- 2016-03-18 JP JP2018518525A patent/JP2018537756A/ja active Pending
- 2016-03-18 WO PCT/US2016/023164 patent/WO2017062059A1/en active Application Filing
- 2016-03-18 CN CN201680072293.1A patent/CN108370346A/zh active Pending
- 2016-03-18 EP EP16716725.3A patent/EP3360296A1/en not_active Withdrawn
- 2016-03-18 AU AU2016335746A patent/AU2016335746A1/en not_active Abandoned
- 2016-10-12 US US15/291,633 patent/US9843551B2/en not_active Expired - Fee Related
-
2017
- 2017-11-16 US US15/815,595 patent/US10038661B2/en not_active Expired - Fee Related
-
2018
- 2018-06-27 US US16/020,455 patent/US10389674B2/en not_active Expired - Fee Related
-
2019
- 2019-07-10 US US16/508,214 patent/US20190334850A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20180331992A1 (en) | 2018-11-15 |
CN108370346A (zh) | 2018-08-03 |
US9843551B2 (en) | 2017-12-12 |
AU2016335746A1 (en) | 2018-05-10 |
US9319365B1 (en) | 2016-04-19 |
US10389674B2 (en) | 2019-08-20 |
US20190334850A1 (en) | 2019-10-31 |
US20180077104A1 (en) | 2018-03-15 |
US20170118160A1 (en) | 2017-04-27 |
EP3360296A1 (en) | 2018-08-15 |
WO2017062059A1 (en) | 2017-04-13 |
US9407593B1 (en) | 2016-08-02 |
US10038661B2 (en) | 2018-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10389674B2 (en) | Systems and methods for storing and transferring message data | |
JP6732899B2 (ja) | メッセージデータを格納するためのシステム及び方法 | |
JP2018531465A6 (ja) | メッセージデータを格納するためのシステム及び方法 | |
JP6678742B2 (ja) | スケーラブルなリアルタイムメッセージングシステム | |
JP2018525761A (ja) | スケーラブルなリアルタイムメッセージングシステム | |
JP2018532201A (ja) | メッセージデータを転送するためのシステム及び方法 | |
JP2019535072A (ja) | 複数の購読者にメッセージを提供するためのシステム及び方法 | |
US9319363B1 (en) | Scalable, real-time messaging system | |
JP2018531472A6 (ja) | スケーラブルなリアルタイムメッセージングシステム | |
JP2018531472A (ja) | スケーラブルなリアルタイムメッセージングシステム | |
JP2019526118A (ja) | メッセージングシステムの多重速度メッセージチャネル | |
JP2019521576A (ja) | メッセージングシステムの持続性の維持 | |
JP2019532399A (ja) | スケーラブルメッセージングシステムにおけるデータ複製 | |
JP2019526860A (ja) | スケーラブルなリアルタイムメッセージングシステム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20190308 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20191120 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20191209 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20200629 |