CN108370346A - 用于存储和传送消息数据的系统和方法 - Google Patents
用于存储和传送消息数据的系统和方法 Download PDFInfo
- Publication number
- CN108370346A CN108370346A CN201680072293.1A CN201680072293A CN108370346A CN 108370346 A CN108370346 A CN 108370346A CN 201680072293 A CN201680072293 A CN 201680072293A CN 108370346 A CN108370346 A CN 108370346A
- Authority
- CN
- China
- Prior art keywords
- queue
- message
- time
- block
- nodes
- 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
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)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
包括编码在计算机存储介质上的计算机程序,用于存储和传送消息的方法、系统、和装置。示例方法包括提供具有有序的多个存储块的队列。每个存储块存储一个或多个相应的消息并且与相应的时间相关联。时间从指定队列头部的块增加到指定队列尾部的块。该方法还包括由多个第一发送者进程中的每一个从队列头部开始读取来自队列中的一个或多个块的消息。读取的消息由多个第一发送者进程中的每一个发送给相应的接收者。当一个或多个块具有早于第一时间的相关联的时间时,这些块被指定为旧的。当块关联的时间晚于或等于第一时间时,该块被指定为队列的新头部。允许一个或多个第一发送者进程从旧块中读取消息,直到晚于第一时间的第二时间。在晚于或等于第二时间的时间处删除一个或多个旧块。
Description
相关申请交叉引用
本申请要求于2016年3月7日提交的美国专利申请No.15/063,390以及于2015年10月9日提交的美国专利申请No.14/879,689的优先权,并且其全部内容通过引用结合于此。
背景技术
本说明书涉及数据通信系统,特别涉及实现实时的、可扩展的发布-订阅消息传送的系统。
发布-订阅模式(或“PubSub”)是由软件系统实现的数据通信消息传送布置,其中所谓的发布者将消息发布到主题,并且所谓的订户接收与订阅的特定主题有关的消息。每个主题可以有一个或多个发布者,并且发布者通常不知道什么订户(如果有的话)将会收到发布的消息。某些PubSub系统不会缓存消息或具有小缓存,这意味着订户可能不会接收到在订阅特定主题之前发布的消息。PubSub系统在消息发布的浪潮(surge)期间或随着特定主题的订户量增加而容易受到性能不稳定的影响。
发明内容
通常,在PubSub系统中有两种调度消息的方式。一种方法是向发布者提供关于订户的信息,并使发布者负责将每个消息传递给每个接收者。该方法在缩放方面存在严重问题,因为基于订户数量N,存在对于单个消息传递要完成的工作的线性(例如,O(N))依赖。第二种方法是将所有内容存储在公共存储中(例如,使用ERLANG ETS),并且让每个消费者或订户独立地从该公共存储取回消息。在这种情况下,发布者没有直接的O(N)依赖,但使用单独的通知系统来向消费者通知有关新消息。第二种方法还使用许多互斥锁,以确保对公共存储的修改对所有用户都是安全的。
在某些示例中,本文描述的系统和方法是第二种方法的变体并包含多种优化。该系统和方法优选地在数据操作部分(例如,比较和交换操作)中不互斥,因此不存在需要发布者或订户等待另一方的锁定。通常,每个操作都是相对于核心间高速缓存一致性而独立处理的。数据优选地由约64kB的块读取,这提供了比上述第一种方法更快的性能。在一些情况下,存在对订户合作的额外优化,这可以防止频繁发布的信道比不频繁发布的信道更占主导。该系统和方法还可以使用具有特定于信道速度的方法的经优化的通知机制,其中该特定于信道速度的方法在任何速度的信道中将延迟保持在低水平。
与先前的方法相比,本文描述的系统和方法具有许多益处。例如,发布者性能和订户数量之间几乎没有可见的依赖关系。而且,数据有利地以大块(chunk)的形式被集合和传递,这减少了处理开销。大块大小可以是动态的以保持低延迟,并且优选地不存在在发布者与订户之间以及在订户之间的锁定。通知机制还具有在延迟和CPU利用率之间提供更好的平衡的特定于信道速度的算法。此外,这些系统和方法具有根据需要释放内存而不涉及锁定的自动存储器使用逻辑。在一个测试中,基于上述第二种方法的现有方法在单个物理服务器上每秒传递500万个100字节的消息,而本文描述的改进的系统和方法使用相同的单个物理服务器每秒传递8.3亿个100字节的消息。
通常,本说明书中描述的主题的一个方面涉及一种方法。该方法包括由一个或多个计算机执行以下步骤:提供包括有序的多个存储块的队列,每个存储块存储一个或多个相应的消息并且与相应的时间相关联,其中该时间从指定该队列头部的块增加到指定该队列尾部的块;由多个第一发送者进程中的每一个从该队列头部开始读取来自该队列中的一个或多个块的消息;由该多个第一发送者进程中的每一个发送所读取的消息到相应的接收者;将具有早于第一时间的相关联的时间的一个或多个块指定为旧的;将与晚于或等于该第一时间的时间相关联的块指定为该队列的新头部;允许该第一发送者进程中的一个或多个从旧块中读取消息,直到晚于该第一时间的第二时间;以及在晚于或等于该第二时间的时间处从该队列中删除该一个或多个旧块。
在某些示例中,该方法还包括确定该队列中存在一个或多个消息要被读取用于一个或多个第二发送者进程,并且基于此,唤醒该第二发送者进程。确定该队列中存在一个或多个消息要被读取用于一个或多个该第二发送者进程包括:对于一个或多个发布者进程,确定自上一时间以来,该发布者进程是否已将新消息插入到该队列中;以及将该第二发送者进程标识为没有从该队列中读取该新消息之一的进程。该一个或多个第二进程可以包括至少一个多队列发布者。
在一些示例中,队列用于单个信道的消息,并且每个接收者已经订阅该信道。该队列可以用于来自单个发布者的消息。特定的接收者可以是MX节点或Q节点。在一些实现中,该方法包括由一个或多个发布者进程将一个或多个消息插入到指定队列尾部的块中。特定的发布者进程可以是MX节点、Q节点或多队列发布者。
该方法还可以包括将在该队列中没有更多要读取的消息的一个或多个第一发送者进程设为休眠。队列可以包括信道队列或可以是信道队列。一个或多个第一发送者进程可以包括至少一个订户或多队列消费者。在各种示例中,队列用于来自发布者和多队列发布者中的至少一个的消息。将一个或多个块指定为旧的可以在读取期间进行。
另一方面,本公开的主题涉及包括其上存储有指令的非暂态计算机可读介质的系统。该系统还包括被配置为执行该指令以执行操作的数据处理装置,这些操作包括:提供包括有序的多个存储块的队列,每个存储块存储一个或多个相应的消息并且与相应的时间相关联,其中,该时间从指定该队列头部的块增加到指定该队列尾部的块;由多个第一发送者进程中的每一个从该队列头部开始读取来自该队列中的一个或多个块的消息;由该多个第一发送者进程中的每一个发送所读取的消息到相应的接收者;将具有早于第一时间的相关联的时间的一个或多个块指定为旧的;将与晚于或等于该第一时间的时间相关联的块指定为该队列的新头部;允许该第一发送者进程中的一个或多个从旧块中读取消息,直到晚于该第一时间的第二时间;以及在晚于或等于该第二时间的时间处从该队列中删除一个或多个旧块。
在某些示例中,操作还包括确定该队列中存在一个或多个消息要被读取用于一个或多个第二发送者进程,并且基于此,唤醒该第二发送者进程。确定在该队列中存在一个或多个消息要被读取用于一个或多个第二发送者进程包括:对于一个或多个发布者进程,确定自上一时间以来,该发布者进程是否已将新消息插入到该队列中;以及将该第二发送者进程标识为没有从该队列中读取新消息之一的进程。该一个或多个第二进程可以包括至少一个多队列发布者。
在一些示例中,队列用于单个信道的消息,并且每个接收者已经订阅该信道。该队列可以用于来自单个发布者的消息。特定的接收者可以是MX节点或Q节点。在一些实现中,这些操作包括由一个或多个发布者进程将一个或多个消息插入到指定队列尾部的块中。特定的发布者进程可以是MX节点、Q节点或多队列发布者。
这些操作还可以包括将在队列中没有更多要读取的消息的一个或多个第一发送者进程设为休眠。队列可以包括信道队列或可以是信道队列。一个或多个第一发送者进程可以包括至少一个订户或多队列消费者。在各种示例中,队列用于来自发布者和多队列发布者中的至少一个的消息。将一个或多个块指定为旧的可以在读取期间进行。
另一方面,本公开的主题涉及一种存储在一个或多个非暂态存储介质中的计算机程序产品,用于控制数据处理装置的处理模式。该计算机程序产品可由该数据处理装置执行以使得该数据处理装置执行操作,该操作包括:提供包括有序的多个存储块的队列,每个存储块存储一个或多个相应的消息并且与相应的时间相关联,其中,该时间从指定该队列头部的块增加到指定该队列尾部的块;由多个第一发送者进程中的每一个从该队列头部开始读取来自该队列中的一个或多个块的消息;由该多个第一发送者进程中的每一个向相应的接收者发送所读取的消息;将具有早于第一时间的相关联的时间的一个或多个块指定为旧的;将与晚于或等于该第一时间的时间相关联的块指定为队列的新头部;允许该第一发送者进程中的一个或多个从旧块中读取消息,直到晚于该第一时间的第二时间;以及在晚于或等于该第二时间的时间处从该队列中删除一个或多个旧块。
在某些示例中,操作还包括确定队列中存在一个或多个消息要被读取用于一个或多个第二发送者进程,并且基于此,唤醒第二发送者进程。确定在队列中存在一个或多个消息要被读取用于一个或多个第二发送者进程可以包括:对于一个或多个发布者进程,确定自上一时间以来,发布者进程是否已将新消息插入到队列中;并且将第二发送者进程标识为没有从队列中读取新消息之一的进程。该一个或多个第二进程可以包括至少一个多队列发布者。
在一些示例中,队列用于单个信道的消息,并且每个接收者已经订阅该信道。该队列可以用于来自单个发布者的消息。特定的接收者可以是MX节点或Q节点。在一些实现中,该操作包括由一个或多个发布者进程将一个或多个消息插入到指定队列尾部的块中。特定的发布者进程可以是MX节点、Q节点或多队列发布者
这些操作还可以包括将在队列中没有更多要读取的消息的一个或多个第一发送者进程设为休眠。队列可以包括信道队列或可以是信道队列。一个或多个第一发送者进程可以包括至少一个订户或多个队列消费者。在各种示例中,队列用于来自发布者和多队列发布者中的至少一个的消息。将一个或多个块指定为旧的可以在读取期间进行。
在本说明书中描述的主题的一个或多个实施例的细节在附图说明和下面的说明书中阐述。主题的其他特征、方面和优点将从说明书、附图说明和权利要求中变得明显。
附图说明
图1A示出了支持PubSub通信模式的示例系统。
图1B示出了示例客户端设备上的软件的功能层。
图2是示例消息传送系统的图。
图3A是用于将数据写入到小流(streamlet)的示例方法的数据流程图。
图3B是用于从小流读取数据的示例方法的数据流程图。
图4是用于处理消息数据的示例快速缓冲器系统的示意图。
图5是结合图4的快速缓冲器系统的示例PubSub系统的示意图。
图6A、6B和6C是用于存储消息的块的示例队列的示意图。
图7是存储和访问队列中的消息的示例方法的流程图。
具体实施方式
图1A示出了支持PubSub通信模式的示例系统100。发布者客户端(例如,发布者1)可以通过系统100将消息发布到指定信道(例如,“信道1”)。消息可以包括任何类型的信息,包括以下各项中的一种或多种:文本、图像内容、声音内容、多媒体内容、视频内容、二进制数据等等。其他类型的消息数据是可能的。订户客户端(例如,订户2)可以使用系统100订阅指定的信道,并开始接收在订阅请求之后或自给定位置(例如,消息号或时间偏移)起发生的消息。客户端既可以是发布者又可以是订户。
根据配置,可以将PubSub系统分类如下:
·一对一(1:1)。在这种配置中,每个信道有一个发布者和一个订户。典型的用例是私人消息传送。
·一对多(1:N)。在这种配置中,每个信道有一个发布者和多个订户。典型的用例是广播消息(例如,股票价格)。
·多对多(M:N)。在这种配置中,有许多发布者发布到单个信道。消息然后被传递给多个订户。典型的用例是地图应用。
创建指定信道不需要单独的操作。信道是在信道被订阅时或消息被发布到信道时隐式创建的。在某些实现中,信道名称可以通过命名空间来限定。命名空间包括一个或多个信道名称。不同的命名空间可以具有相同的信道名称,而不会造成混淆。命名空间名称可以是信道名称的前缀,其中命名空间和信道名称由点分隔。在某些实现中,在指定信道授权设置时可以使用命名空间。例如,消息传送系统100可以具有app1.foo和app1.system.notifications信道,其中“app1”是命名空间的名称。该系统可以允许客户端订阅并发布到app1.foo信道。但是,客户端只能订阅,而不能发布到app1.system.notifications信道。
图1B示出了示例客户端设备上的软件的功能层。客户端设备(例如,客户端102)是数据处理装置,例如,个人计算机、膝上型计算机、平板电脑、智能手机、智能手表、或服务器计算机。其他类型的客户端设备也是可能的。应用层104包括将与PubSub系统100集成的(一个或多个)终端用户应用。消息传送层106是针对应用层104的编程接口,用于利用系统100的服务,例如,信道订阅、消息发布、消息取回、用户认证、和用户授权。在一些实现中,传递到消息传送层106和从消息传送层106传递的消息被编码为JavaScript对象表示法(JSON)对象。其他消息编码方案是可能的。
操作系统108层包括客户端102上的操作系统软件。在各种实现中,可以使用持久或非持久连接来向/从系统100发送和接收消息。持久连接可以使用例如网络套接字来创建。诸如TCP/IP层112之类的传输协议实现与系统100的传输控制协议/互联网协议通信,该传输控制协议/互联网协议通信可被消息传送层106用来通过到系统100的连接发送消息。其他通信协议是可能的,包括例如用户数据报协议(UDP)。在进一步的实现方式中,可以采用可选的传输层安全(TLS)层110来确保消息的机密性。
图2是示例消息传送系统100的图。系统100提供用于实现PubSub通信模式的功能。例如,该系统包括可以部署在一个或多个地理位置中的一个或多个数据中心122处的软件组件和存储装置。该系统包括MX节点(例如,MX节点或多路复用器节点202、204和206)、Q节点(例如,Q节点或队列节点208、210和212)、一个或多个信道管理器节点(例如,信道管理器214、215)、以及可选地一个或多个C节点(例如,C节点或缓存节点220和222)。每个节点可以在虚拟机或物理机器(例如,数据处理装置)上执行。每个MX节点通过外部网络216充当用于一个或多个发布者和/或订户连接的端点。例如,MX节点、Q节点、C节点、和信道管理器之间的内部通信通过内部网络218进行。作为说明,MX节点204可以是来自客户端102的订户连接的终点。每个Q节点缓冲供MX节点消费的信道数据。发布到信道的有序消息序列是逻辑信道流。例如,如果三个客户端将消息发布到给定信道,则由客户端发布的组合消息包括信道流。可以按客户端发布的时间、MX节点接收的时间、或Q节点接收的时间来对信道流中的消息进行排序。用于对信道流中的消息进行排序的其他方式也是可能的。在不止一个消息将按顺序被分配给同一位置的情况下,可以选择一个消息(例如,随机地)以具有该顺序中较晚的序列。每个信道管理器节点负责通过将信道流分割成所谓的小流来管理Q节点负载。小流将在下面进一步讨论。可选的C节点提供缓存并加载来自Q节点的移除。
在示例消息传送系统100中,一个或多个客户端设备(发布者和/或订户)建立到MX节点(例如,MX 204)的相应持久连接(例如,TCP连接)。MX节点充当这些连接的端点。例如,可以基于外部协议(例如,JSON)对这些连接所承载的外部消息(例如,在相应客户端设备和MX节点之间的)进行编码。MX节点终止外部协议并将外部消息转换为内部通信,反之亦然。MX节点代表客户端发布和订阅小流。这样,MX节点可以复用并且合并订阅同一信道或发布到同一信道的客户端设备的请求,从而将多个客户端设备作为一个来表示而非逐个表示。
在示例消息传送系统100中,Q节点(例如,Q节点208)可以存储一个或多个信道流的一个或多个小流。小流是针对信道流的一部分的数据缓冲器。当存储装置已满时,小流将关闭写入。在小流的生存时间(TTL)到期时,小流将关闭读取和写入并解除分配。作为说明,小流可以具有1MB的最大大小和3分钟的TTL。不同的信道可以具有由不同的TTL限制的小流。例如,一个信道中的小流最多可以存在三分钟,而另一个信道中的小流最多可以存在10分钟。在各种实现方式中,小流对应于在Q节点上运行的计算进程。例如,计算进程可以在小流的TTL到期之后终止,从而将计算资源(针对小流的)释放回Q节点。
当从客户端设备接收到发布请求时,MX节点(例如,MX 204)向信道管理器(例如,信道管理器214)发出请求以授权对小流的访问以写入正在发布的消息。但是,请注意,如果MX节点已被授权对该信道的小流的写入访问(并且该信道尚未关闭写入),则MX节点可以将该消息写入该小流,而无需请求授权对小流的访问。一旦消息被写入信道的小流,消息就可以被MX节点读取并提供给该信道的订户。
类似地,在接收到来自客户端设备的信道订阅请求时,MX节点向信道管理器发出请求以授权对信道的小流的访问以从其读取消息。如果MX节点已被授权对信道的小流的读取访问(并且信道的TTL尚未关闭读取),则MX节点可以从小流读取消息,而无需请求授权对该小流的访问。读取的消息然后可以被转发到订阅了该信道的客户端设备。在各种实现方式中,从小流读取的消息由MX节点缓存,使得MX节点可以减少需要从小流读取的次数。
作为说明,MX节点可以请求来自信道管理器的授权,该授权允许MX节点将数据块存储到存储特定信道的小流的特定Q节点上的小流中。示例小流授权请求和授权数据结构如下:
StreamletGrantRequest数据结构存储流信道的名称和模式,该模式指示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节点建立与Q节点的传输控制协议(TCP)连接(302),其中Q节点在从信道管理器接收的授权响应中被标识。可以通过多个写入授权(例如,由多个发布者客户端发布的消息)同时写入一个小流。MX节点和Q节点之间的其他类型的连接协议也是可能的。
然后,MX节点发送准备发布消息(304),其具有MX节点想要写入Q节点的小流的标识符。如前所述,小流标识符和Q节点标识符可以由信道管理器在写授权中提供。Q节点将消息移交给所标识的小流的处理机(handler)进程301(例如,在Q节点上运行的计算进程)(306)。处理机进程可以向MX节点发送确认(308)。在接收到确认之后,MX节点开始将消息写入(发布)到处理机进程(例如,310、312、314、和318),该处理机进程又将接收到的数据存储在所标识的小流中。处理机进程还可以向MX节点发送确认(316、320)以用于接收到的数据。在一些实现方式中,确认可以是捎带的(piggy-backed)或累积的。例如,处理机进程可以针对接收到的每预定量的数据(例如,对于接收的每100个消息)或者每预定时间段(例如,每一毫秒)向MX节点发送确认。可以使用其他确认调度算法(如Nagle算法)。
如果小流不再接受发布的数据(例如,当小流满时),则处理机进程发送指示问题的否定确认(NAK)消息(330),接着是EOF(文件结束)消息(332)。通过这种方式,处理机进程针对发布授权关闭与MX节点的关联。如果MX节点有额外的消息要存储,则MX节点可以请求来自信道管理器的另一个小流的写入授权。
图3B是在各种实施例中用于从小流读取数据的示例方法的数据流程图。在图3B中,MX节点(例如,MX 202)向信道管理器(例如,信道管理器214)发送从信道中的特定消息或时间偏移开始读取特定信道的请求。信道管理器向MX节点返回包括以下各项的读取授权:包含特定消息的小流的标识符、与特定消息相对应的小流中的位置、以及包含特定小流的Q节点(例如,Q节点208)的标识符。MX节点然后建立与Q节点的TCP连接(352)。MX节点和Q节点之间的其他类型的连接协议也是可能的。
然后,MX节点向Q节点发送具有小流的标识符(在Q节点中)以及MX节点想要从其读取的小流中的位置的订阅消息(356)。Q节点将该订阅消息移交给小流的处理机进程351(356)。处理机进程可以向MX节点发送确认(358)。处理机进程然后将从小流中的位置开始的消息发送到MX节点(360、364、366)。在一些实现方式中,处理机进程可以将小流中的所有消息发送到MX节点。在发送完特定小流中的最后一个消息之后,处理机进程可以将最后一个消息的通知发送给MX节点。MX节点可以向信道管理器发送针对包含特定信道中下一个消息的另一个小流的另一个请求。
如果特定小流关闭(例如,在其TTL已经到期之后),则处理机进程可以发送取消订阅消息(390),随后是EOF消息(392),以关闭针对读取授权的与MX节点的关联。当MX节点移动到特定信道中的消息的另一小流(例如,如信道管理器所指示的)时,MX节点可以关闭与处理机进程的关联。如果MX节点收到来自对应客户端设备的取消订阅消息,MX节点也可以关闭与处理机进程的关联。
在各种实现方式中,可以在同一时刻写入和读取小流。例如,在同一时刻可以有有效读取授权和有效写入授权。在各种实现方式中,可以通过多个读取授权(例如,针对由多个发布者客户端所订阅的信道)来同时读取小流。小流的处理机进程可以基于例如到达时间来对来自同时写入授权的消息进行排序,并基于该顺序存储消息。通过这种方式,发布到来自多个发布者客户端的信道的消息可以被序列化并存储在信道的小流中。
在消息传送系统100中,一个或多个C节点(例如,C节点220)可以卸载来自一个或多个Q节点的数据传输。例如,如果有许多MX节点从Q节点请求针对特定信道的小流,则小流可以被卸载并缓存在一个或多个C节点中。替代地,MX节点(例如,如来自信道管理器的读取授权所指示的)可以从C节点读取小流。
如上所述,消息传送系统100中的信道的消息在信道流中被排序。信道管理器(例如,信道管理器214)将信道流分割成固定大小的小流,其中每个小流驻留在相应的Q节点上。以这种方式,存储信道流可以在许多Q节点之间共享;每个Q节点存储信道流的一部分(一个或多个小流)。更具体地,可以将小流存储在与Q节点上的计算进程相关联的寄存器和动态存储器元件中,从而避免需要访问诸如硬盘之类的持久且较慢的存储设备。这导致更快的消息访问。信道管理器还可以通过监控Q节点的相应工作负载并以避免过载任何一个Q节点的方式分配小流来平衡消息传送系统100中的Q节点之间的负载。
在各种实现方式中,信道管理器维护标识了每个活动小流的列表、小流所在的相应Q节点、以及小流中第一消息的位置的标识、以及流程是否关闭写入。在一些实现方式中,Q节点通知信道管理器以及发布到小流的任何MX节点:由于小流已满或小流的TTL已到期,小流被关闭。当小流关闭时,小流会保留在信道管理器的活动小流列表中,直到小流的TTL已到期,使得MX节点可以继续从小流中取回消息。
当MX节点请求针对给定信道的写入授权并且不存在可写入的针对该信道的小流时,信道管理器在Q节点中的一个上分配新小流并在StreamletGrant中返回小流和Q节点的标识。否则,信道管理器在StreamletGrant中返回当前打开写入的小流和对应的Q节点的标识。MX节点可以将消息发布到小流,直到小流已满或小流的TTL已到期,在此之后信道管理器可以分配新的小流。
当MX节点请求针对给定信道的读取授权并且不存在可读的针对该信道的小流时,信道管理器在Q节点中的一个上分配新的小流,并在StreamletGrant中返回小流和Q节点的标识。否则,信道管理器将返回包含MX节点希望从其读取的位置的小流和Q节点的标识。然后,Q节点可以开始从指定位置处开始的小流向MX节点发送消息,直到小流中没有更多消息要发送。当新消息被发布到小流时,订阅该小流的MX节点将收到新消息。如果小流的TTL已经到期,则处理机351将EOF消息发送到订阅该小流的任何MX节点(392)。
如前面参照图2所述,消息传送系统100可以包括多个信道管理器(例如,信道管理器214、215)。多个信道管理器提供弹性并防止单点故障。例如,一个信道管理器可以将它维护的小流列表和当前授权复制给另一个“从属”信道管理器。至于另一个示例,多信道管理器可以通过使用诸如Paxos或Raft协议之类的分布式共识协议来协调它们之间的操作。
参考图4,在某些实现中,系统100利用快速缓冲器系统400来接收、存储和传递消息数据。快速缓冲器系统400包括多个多队列发布者402、多个信道队列404和多个多队列消费者406。通常,多队列发布者402(例如,从一个或多个Q节点或MX节点)接收消息并将消息提供给信道队列404。如图4所示,每个多队列发布者402可以将消息提供给单个信道队列404或不止一个信道队列404。每个信道队列404被配置为仅从一个多队列发布者402接收消息。每个队列发布者402和队列消费者406是包括一个或多个执行线程或进程的软件组件。
通常,每个信道队列404存储系统100中给定信道的消息。信道队列404跟踪从多队列发布者402接收消息的顺序。每个信道队列404包括或利用存储器设备来存储消息。信道队列404可以具有其自己的存储器设备和/或可以查找在由其他系统组件(例如其他信道队列404或Q节点)使用的一个或多个其他存储器设备中存储的信息。信道队列404使用存储器指针来查找存储器设备中存储的信息。
多队列消费者406从信道队列404中取回消息并将消息传递或发布到下游接收者(例如,到一个或多个MX节点或订户设备)。例如,当多队列发布者402接收到新消息并将其传递到信道队列404时,多队列消费者406可从信道队列404中取回新消息。消息总是按多队列发布者402接收这些消息的顺序,从信道队列404传递到多队列消费者406。
在一些情况下,当没有新的消息可用于取回时,多队列消费者406可以被配置为休眠。当新消息可用时,多队列消费者406可以被(例如,被多队列发布者402)唤醒。例如,当新消息数据到达时,多队列发布者402的通知者组件可以唤醒相应的多队列消费者406。在没有消息可用于取回时允许多队列消费者406休眠允许更好地利用系统资源。例如,当多队列消费者406不被需要并休眠时,可以将处理器时间分配给其他系统组件和/或进程。如图4所示,多队列消费者406可以从单个信道队列404或从不止一个信道队列404中取回消息。在优选的实现中,多队列消费者406被配置为同时从多个信道队列404接收消息。
快速缓冲器系统400的组件优选地是短暂的和/或可根据需要根据进入和离开快速缓冲器系统400的消息数据的流来创建和/或销毁。在一个示例中,当对新信道的新订户连接到MX节点时,MX节点自动创建新的多队列发布者402和新的信道队列404,用于从Q节点接收信道数据。当没有额外的消息数据可用于新信道时,新的多队列发布者402和/或新的信道队列404可以进入休眠,以允许系统资源在别处被使用。在另一示例中,当没有相关联的多队列消费者406已经存在或已经活动了超过阈值时间段时,多队列发布者402和/或多信道队列404(例如,在MX节点中)可以被删除。为了删除多队列发布者402,可以终止与多队列发布者402相关联的进程。分配给被删除的信道队列404的存储器可以根据需要重新分配给其他信道队列404或其他系统组件或被释放。
在某些实现中,每个多队列发布者402和/或多队列消费者406与唯一进程标识符(PID)相关联。PID允许系统100监控多队列发布者402、信道队列404、和多队列消费者406的状态。PID还允许系统100按需要调整以下各项中的一个或多个的优先权(或终止以下各项中的一个或多个):多队列发布者402、信道队列404和多队列消费者406。替代地或另外地,PID可以允许系统100从一个发布者向另一发布者传送或采用信道队列404。
在一些示例中,系统100使用通知表来查找等待新数据的组件。例如,多队列消费者可以在其达到可用数据末尾并希望在新数据被添加或变为可用于读取时被通知时将其自身添加到通知表中。当新数据变为可用时,通知者组件可以使用通知表来获取正在等待新数据的多队列消费者的PID。通知者组件然后可以发送通知以向多队列消费者通知新数据可用。类似地,当多队列发布者402将消息数据添加到多信道队列404时,多队列发布者402的通知者组件可以更新通知表以指示消息数据已被添加到多信道队列404。在一些示例中,信道队列404具有或利用每信道附加的通知表,其中,多队列消费者406可以在进入休眠之前添加其PID,使得当新消息可用于取回时多队列消费者406可以被唤醒。在一个实现中,如果通知表指示多队列消费者406正休眠并订阅了其中新消息可用于取回的信道,则通知者(例如,多队列发布者402的辅助(auxiliary)组件)可以唤醒多个队列消费者406。然后可以更新通知表以指示多队列消费者406被唤醒。当没有新的消息可被多队列消费者406用于取回时,多队列消费者406可以在其PID被添加到通知表之后再次进入休眠。
图5示出了其中快速缓冲器系统400被并入Q节点和/或MX节点的示例PubSub系统500。输入MX节点504接收来自发布者502的消息,该输入MX节点504将消息传送到Q节点506以供存储。然后输出MX节点508从Q节点506取回消息,该输出MX节点508将消息传送给订户510。在所描述的示例中,单独的快速缓冲器系统400被并入到Q节点506和输出MX节点508中。Q节点506包括快速缓冲器系统400或利用其自己的快速缓冲器系统400来接收来自输入MX节点504的消息,存储该消息,并将该消息发送到输出MX节点508。同样,每个输出MX节点508包括快速缓冲器系统400或利用其自己的快速缓冲器系统400来从Q节点506接收消息,存储该消息,并将该消息发送给订户510。通过将消息存储在输出MX节点508上有限的时间,MX节点508不需要从其他系统组件获得消息,从而最小化内部网络流量。
有利地,使用快速缓冲器系统400允许信道数据仅被复制一次。例如,当系统100从发布者接收到消息数据时,可以将消息数据存储或复制到存储器设备。优选地,消息数据仅被复制用于小于阈值字节数(例如,64字节)的数据大块;否则,可能不会复制消息数据,而是可能会创建对消息数据的引用。需要访问消息数据的快速缓冲器系统400的所有组件可以访问存储器设备上的消息数据而无需其他复制。例如,Q节点或MX节点中的快速缓冲器系统组件可以在存储器设备上查找消息数据。消息数据的单个副本优选地可被快速缓冲器系统400的所有组件访问(例如,在单个服务器内),使得组件不需要其他复制来访问消息数据。为了存储和取回消息数据,系统组件可以使用显示消息数据被存储在存储器设备上什么位置的指示器或其他指示符。通过仅为快速缓冲器系统400的所有组件复制信道数据一次,快速缓冲器系统400花费较少的时间来写入和移除信道数据,并将较少的存储器空间用于存储信道数据。这使得系统资源能够被分配给其他活动,诸如高效并准确地从发布者接收消息并且向订户传递该消息。
图6A是用于存储消息数据的示例队列600的示意图。本文描述的队列600可以与信道队列404相同或相似。在所描绘的示例中,队列600正在存储块B1、B2、B3和B4,每个块包括一个或多个消息。这些块是按照以下顺序由队列600创建的:B1、B2、B3和B4。因此,块B1已经由队列600最长地存储并且块B1定义队列600的头部,如由头部边界602所指示。块B4被最近添加到队列600并且定义队列600的尾部,如由尾部边界604所指示。头部边界602和尾部边界604为队列600定义活动区域606。在活动区域606内,块可以访问系统组件和进程(例如,与Q节点和/或MX节点相关联的发送者进程)。通常,这些系统组件和进程以队列600创建块的顺序(即,从头部到尾部)对块进行访问或读取。
队列600中的每个块与块到达队列600的时间相关联。首先到达队列600的块B1与较早的时间相关联。类似地,最后到达队列600的块B4与较晚的时间相关联,该时间可以由例如Q节点设置。通过使用例如网络时间协议(NTP)机制,MX节点的时间可以与Q节点的时间同步。通常,与队列600中的块相关联的时间从队列600的头部增加到队列600的尾部。这些时间中的每一个可以是以下各项或可以基于以下各项:例如一天中的时间或随着时间(例如,每秒或其一部分)增加的计数器。
图6B示出了当新的块B5和B6已经被添加到队列600时的较晚时间处的队列600。最近添加到队列600的块B6现驻留在队列600的尾部,如已被重新定位到块B6之后的新位置的尾部边界604所指示的。此时,块B1和B2不再驻留在活动区域606中,而是已经移动到队列600的非活动区域608。头部边界602现在位于块B2之后和块B3之前,块B3驻留在队列600的头部。通常,每个块在队列600的活动区域606中被分配驻留时间(TTR)。一旦块的TTR已到期,头部边界602被移动以指示该块现在驻留在非活动区域608中。在描述的示例中,块B1和B2的TTR已到期,并且块B1和B2现驻留在非活动区域608中。非活动区608中的块通常对于系统组件和进程是不可访问的。然而,在一些实现中,正在访问活动区域606中的块的进程可以在TTR到期并且该块已经移动到非活动区域608之后,被给予额外的时间来访问该块。这给予此进程(例如,异步进程)额外的时间来完成从块的读取,以防该进程在TTR到期之前无法完成读取。
图6C示出了在新的块B7和B8已经被添加到队列600时的较晚时间处的队列600。最近添加到队列600的块B8现驻留在队列600的尾部,如已被重新定位到块B8之后的新位置的尾部边界604所指示的。此时,块B3和B4的TTR已经到期,并且块B3和B4已经从活动区域606移动到非活动区域608。头部边界602现位于块B4之后和块B5之前,该块B5留驻在队列600的头部。头部边界602和非活动区域边界610定义非活动区域608。在非活动区域边界610之前是消亡(dead)区域612,块B1和B2现处于该消亡区域。通常,每个块被分配生存时间(TTL),在此之后,块从非活动区域608移动到消亡区域612。在移动到消亡区域612之后,块被认为是消亡的并且不再可由任何系统组件或进程访问。这可释放系统存储器以存储附加的块和/或消息数据。
考虑到块从活动区域606到非活动区域608以及到消亡区域612的进展,块的TTL大于块的TTR。块的TTR优选地足够长以使得系统组件和进程具有足够的时间来访问活动区域606中的块,但不会太长以至于存储器被捆绑存储不再需要被访问的块。TTR可以是例如约1秒、约10秒、约30秒、或约60秒。在优选的实施方式中,TTR约为30秒。块的TTL通常比TTR长,以使块有时间驻留在非活动区608中。这给予系统组件和进程(例如,异步进程)额外的时间以在块被删除或不再可访问之前访问块。在一个示例中,TTL=C*TTR,其中C是大于或等于1的常数。例如,C可以是约1.1、约1.2或约1.3。在具体的示例中,当TTR=30秒并且C=1.2时,TTL=36秒。
通常,队列600从一个或多个信道的发布者(例如,多队列发布者402、MX节点或Q节点)接收消息。(例如,与订户、Q节点、MX节点和/或多个队列消费者404相关联的)一个或多个发送者进程从队列600接收消息并将消息发送到其他系统组件(例如,到订户TCP/IP连接)。
在各种实现中,队列600仅接收来自一个发布者的消息的块。这些块由发布者按顺序生成,并且这些块以相同顺序被队列600接收。这使得系统组件和进程更容易得知队列600中的块的顺序并且访问来自这些块的消息。发布者可以是例如用户的客户端设备、MX节点、Q节点和/或多队列发布者。通常,所有消息均按顺序维护,并且所有客户端订户都以相同顺序接收消息。
在一些示例中,队列600仅接收并且存储单个信道的消息。消息可以由队列600从单个发布者或从多个发布者(其可以包括,例如用户的客户端设备、MX节点、Q节点和/或多队列发布者)接收。
图7是将消息存储在队列中的方法700的流程图。方法700包括提供包括有序的多个存储块的队列(例如,队列600或信道队列404)(步骤702)。每个存储块存储一个或多个相应的消息并且与相应的时间(例如,该块被队列接收的时间)相关联。存储块的时间从指定队列头部的块增加到指定队列尾部的块(例如,从较早到较晚)。多个第一发送者进程中的每一个从队列头部开始读取来自队列中的一个或多个块的消息(步骤704),并且将读取的消息发送到相应的接收者(步骤706)。将具有早于第一时间的相关联的时间(例如,基于TTR)的一个或多个块被指定为旧的(步骤708)。将与晚于或等于第一时间的时间相关联的块被指定为队列的新头部(步骤710)。指定步骤708和/或指定步骤710可以在读取步骤704之前、期间和/或之后发生。在块被指定为旧的之前开始读取来自块的消息的一个或多个第一发送者进程可以被允许继续块上的读取操作直到晚于第一时间的第二时间(例如基于TTL)(步骤712)。这可以为第一发送者进程(其可以是异步的)提供了额外的时间来完成读取操作。读取操作被设计为比TTL超时早很多地被完成(例如,早几个数量级)。在晚于或等于第二时间的时间处删除一个或多个旧块(步骤714)。
本说明书中描述的主题和操作的实施例可以以数字电子电路或者计算机软件、固件、或硬件(包括本说明书中公开的结构及其结构等同物),或者以它们中的一个或多个的组合来实现。本说明书中描述的主题的实施例可以被实现为编码在计算机存储介质上的一个或多个计算机程序(即,计算机程序指令的一个或多个模块),用于由数据处理装置执行或控制数据处理装置的操作。替代地或附加地,可以将程序指令编码在人工生成的传播信号上,例如,机器生成的电信号、光信号、或电磁信号,该信号被生成以对信息进行编码以便传输给合适的接收机装置以供数据处理装置执行。计算机存储介质可以是或者可以被包括在计算机可读存储设备、计算机可读存储基板、随机或串行存取存储器阵列或设备、或者它们中的一个或多个的组合。此外,尽管计算机存储介质不是传播信号,但计算机存储介质可以是在人工生成的传播信号中编码的计算机程序指令的源或目的地。计算机存储介质也可以是或可以被包括在一个或多个单独的物理组件或介质(例如,多个CD、磁盘、或其他存储设备)。
本说明书中描述的操作可以被实现为由数据处理装置对存储在一个或多个计算机可读存储设备上的数据或从其他源接收的数据执行的操作。
术语“数据处理装置”涵盖用于处理数据的所有类型的装置、设备、和机器,包括例如可编程处理器、计算机、片上系统、或多个、或前述各项的组合。该装置可以包括专用逻辑电路,例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除了硬件之外,该装置还可以包括为所涉及的计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统、跨平台运行时间环境、虚拟机、或它们中的一个或多个的组合的代码。装置和执行环境可以实现各种不同的计算模型基础设施,如Web服务、分布式计算、和网格计算基础设施。
计算机程序(也被称为程序、软件、软件应用、脚本、或代码)可以以任何形式的编程语言来编写,包括编译或解释语言、声明性、过程性、或功能性语言,并且可以以任何形式来部署,包括作为独立程序或作为模块、组件、子程序、对象、或适用于计算环境的其他单元。计算机程序可能(但不一定)对应于文件系统中的文件。程序可以被存储在保存其他程序或数据(例如,存储在标记语言资源中的一个或多个脚本)的文件的一部分、专用于所涉及的程序的单个文件、或者多个协调文件(例如,存储一个或多个模块、子程序、或部分代码的文件)中。计算机程序可以被部署为在一个计算机上执行或在位于一个站点或跨多个站点分布并通过通信网络互连的多个计算机上执行。
本说明书中描述的过程和逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程处理器执行,以通过对输入数据进行操作并生成输出来执行动作。过程和逻辑流程也可以由专用逻辑电路(例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路))执行,并且装置也可以被实现为专用逻辑电路。
作为示例,适用于执行计算机程序的处理器包括通用和专用微处理器两者,以及任何类型的数字计算机的任何一个或多个处理器。通常,处理器将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于根据指令来执行动作的处理器和用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备(例如,磁盘、磁光盘、或光盘),或者可操作地耦接到一个或多个大容量存储设备以从一个或多个大容量存储设备接收数据或将数据传送到一个或多个大容量存储设备或两者。但是,计算机不需要具有这种设备。此外,计算机可以嵌入到另一个设备中,例如,智能手机、移动音频、或视频播放器、游戏机、全球定位系统(GPS)接收器、或便携式存储设备(例如,通用串行总线(USB)闪存驱动器),仅举几例。适用于存储计算机程序指令和数据的设备包括所有形式的非易失性存储器、介质、和存储器设备,例如包括半导体存储器设备(例如,EPROM、EEPROM、和闪存设备);磁盘(例如,内部硬盘或可移动磁盘);磁光盘;以及CD ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路补充或并入其中。
为了提供与用户的交互,本说明书中描述的主题的实施例可以在具有以下各项的计算机上实现:用于向用户显示信息的显示设备(例如,CRT(阴极射线管)或LCD(液晶显示器)监视器)以及用户可以通过其向计算机提供输入的键盘和定点设备(例如,鼠标或轨迹球)。其他类型的设备也可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感官反馈,例如,视觉反馈、听觉反馈、或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声学、语音、或触觉输入。另外,计算机可以通过向用户所使用的设备发送资源和从该设备接收资源来与用户交互;例如,通过响应于从web浏览器接收到的请求而将网页发送到用户的客户端设备上的web浏览器。
本说明书中描述的主题的实施例可以在计算系统中实现,该计算系统包括后端组件(例如,作为数据服务器),或者包括中间件组件(例如,应用服务器),或者包括前端组件(例如,具有图形用户界面或Web浏览器的客户端计算机,用户可以通过该图形用户界面或Web浏览器与本说明书中描述的主题的实现方式交互),或者包括一个或多个这样的后端、中间件、或前端组件的任意组合。系统的组件可以通过数字数据通信的任何形式或介质(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”)和广域网(“WAN”)、网间网络(例如,互联网)、和对等网络(例如,自组(ad hoc)对等网络)。
计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离并且通常通过通信网络进行交互。客户端和服务器之间的关系是通过运行在各个计算机上并且彼此具有客户端-服务器关系的计算机程序来实现的。在一些实施例中,服务器(例如,出于向与客户端设备交互的用户显示数据和从这些用户接收用户输入的目的)向客户端设备发送数据(例如,HTML页面)。(例如,作为用户交互的结果)在客户端设备处生成的数据可以在服务器处从客户端设备接收。
一个或多个计算机的系统可以被配置为通过在系统上安装软件、固件、硬件或它们的组合来执行特定操作或动作,这些软件、固件、硬件或它们的组合在操作中使得系统执行这些动作。一个或多个计算机程序可以被配置为通过包括在由数据处理装置执行时使得该装置执行动作的指令来执行特定操作或动作。
尽管本说明书包含许多具体的实现细节,但这些不应该被解释为对任何发明或可能要求保护的内容的范围的限制,而是作为对特定于特定发明的特定实施例的特征的描述。本说明书中在单独实施例的上下文中描述的某些特征也可以在单个实施例中组合实现。相反地,在单个实施例的上下文中描述的各种特征也可以在多个实施例中分开地或以任何合适的子组合来实现。此外,尽管上文可以将特征描述为以某些组合起作用并且甚至最初如此被要求保护,但是来自所要求保护的组合的一个或多个特征在一些情况下可以从组合中删除,并且所要求保护的组合可以针对子组合或子组合的变形。
类似地,尽管在附图中以特定顺序描述了操作,但是这不应被理解为要求以所示的特定顺序或按连续顺序执行这样的操作,或者执行所有示出的操作以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统组件的分离不应被理解为在所有实施例中都需要这种分离,并且应理解的是,所描述的程序组件和系统通常可以一起集成在单个软件产品中或者封装到多个软件产品。
因此,已经描述了主题的特定实施例。其他实施例在以下权利要求的范围内。在一些情况下,权利要求中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。另外,附图中描绘的过程不一定需要所示的特定顺序或连续顺序来实现期望的结果。在某些实现方式中,多任务和并行处理可能是有利的。
Claims (29)
1.一种方法,包括:
由一台或多台计算机执行:
提供包括有序的多个存储块的队列,每个存储块存储一个或多个相应的消息并且与相应的时间相关联,其中所述时间从指定所述队列的头部的块增加到指定所述队列的尾部的块;
由多个第一发送者进程中的每一个从所述队列的所述头部开始读取来自所述队列中的一个或多个块的消息;
由所述多个第一发送者进程中的每一个发送读取的消息到相应的接收者;
将具有早于第一时间的相关联的时间的所述块中的一个或多个指定为旧的;
将与晚于或等于所述第一时间的时间相关联的块指定为所述队列的新头部;
允许所述第一发送者进程中的一个或多个从所述旧块中读取消息,直到晚于所述第一时间的第二时间;以及
在晚于或等于所述第二时间的时间处从所述队列中删除所述旧块中的一个或多个。
2.根据权利要求1所述的方法,还包括:
确定所述队列中存在一个或多个消息要被读取用于一个或多个第二发送者进程,并且基于此,唤醒所述第二发送者进程。
3.根据权利要求2所述的方法,其中,确定所述队列中存在一个或多个消息要被读取用于一个或多个所述第二发送者进程包括:
对于一个或多个发布者进程,确定自上一时间以来,所述发布者进程是否已将新消息插入到所述队列中;以及
将所述第二发送者进程标识为没有从所述队列中读取所述新消息之一的进程。
4.根据权利要求2所述的方法,其中,所述一个或多个第二进程包括至少一个多队列发布者。
5.根据权利要求1所述的方法,其中,所述队列用于单个信道的消息,并且其中所述接收者中的每一个已经订阅所述信道。
6.根据权利要求1所述的方法,其中,所述队列用于来自单个发布者的消息。
7.根据权利要求1所述的方法,其中,特定的接收者可以是MX节点或Q节点。
8.根据权利要求1所述的方法,还包括:
由一个或多个发布者进程将一个或多个消息插入到指定所述队列的所述尾部的所述块中。
9.根据权利要求8所述的方法,其中,特定的发布者进程可以从包括MX节点、Q节点、和多队列发布者的组中选择。
10.根据权利要求1所述的方法,还包括将在所述队列中没有更多要读取的消息的一个或多个第一发送者进程设为休眠。
11.根据权利要求1所述的方法,其中,所述队列包括信道队列。
12.根据权利要求1所述的方法,其中,所述一个或多个第一发送者进程包括至少一个订户或多队列消费者。
13.根据权利要求1所述的方法,其中,所述队列用于来自发布者和多队列发布者中的至少一个的消息。
14.根据权利要求1所述的方法,其中,将所述块中的一个或多个指定为旧的在所述读取期间进行。
15.一种系统,包括:
其上存储有指令的非暂态计算机可读介质;以及
被配置为执行所述指令以执行操作的数据处理装置,该操作包括:
提供包括有序的多个存储块的队列,每个存储块存储一个或多个相应的消息并且与相应的时间相关联,其中,所述时间从指定所述队列的头部的块增加到指定所述队列的尾部的块;
由多个第一发送者进程中的每一个从所述队列的所述头部开始读取来自所述队列中的一个或多个块的消息;
由所述多个第一发送者进程中的每一个发送读取的消息到相应的接收者;
将具有早于第一时间的相关联的时间的所述块中的一个或多个指定为旧的;
将与晚于或等于所述第一时间的时间相关联的块指定为所述队列的新头部;
允许所述第一发送者进程中的一个或多个从所述旧块中读取消息,直到晚于所述第一时间的第二时间;以及
在晚于或等于所述第二时间的时间处从所述队列中删除所述旧块中的一个或多个。
16.根据权利要求15所述的系统,所述操作还包括:
确定所述队列中存在一个或多个消息要被读取用于一个或多个第二发送者进程,并且基于此,唤醒所述第二发送者进程。
17.根据权利要求16所述的系统,其中,确定在所述队列中存在一个或多个消息要被读取用于一个或多个第二发送者进程包括:
对于一个或多个发布者进程,确定自上一时间以来,所述发布者进程是否已将新消息插入到所述队列中;以及
将所述第二发送者进程标识为没有从所述队列中读取所述新消息之一的进程。
18.根据权利要求16所述的系统,其中,所述一个或多个第二进程包括至少一个多队列发布者。
19.根据权利要求15所述的系统,其中,所述队列用于单个信道的消息,并且其中,所述接收者中的每一个已经订阅所述信道。
20.根据权利要求15所述的系统,其中,所述队列用于来自单个发布者的消息。
21.根据权利要求15所述的系统,其中,特定的接收者是MX节点或Q节点。
22.根据权利要求15所述的系统,所述操作还包括:
由一个或多个发布者进程将一个或多个消息插入到指定所述队列的所述尾部的所述块中。
23.根据权利要求22所述的系统,其中,特定的发布者进程可以从包括MX节点、Q节点、和多队列发布者的组中选择。
24.根据权利要求15所述的系统,所述操作还包括将在所述队列中没有更多要读取的消息的一个或多个第一发送者进程设为休眠。
25.根据权利要求15所述的系统,其中,所述队列包括信道队列。
26.根据权利要求15所述的系统,其中,所述一个或多个第一发送者进程包括至少一个订户或多队列消费者。
27.根据权利要求15所述的系统,其中,所述队列用于来自发布者和多队列发布者中的至少一个的消息。
28.根据权利要求15所述的系统,其中,将所述块中的一个或多个指定为旧的在所述读取期间进行。
29.一种存储在一个或多个非暂态存储介质中的计算机程序产品,用于控制数据处理装置的处理模式,所述计算机程序产品可由所述数据处理装置执行以使得所述数据处理装置执行操作,该操作包括:
提供包括有序的多个存储块的队列,每个存储块存储一个或多个相应的消息并且与相应的时间相关联,其中,所述时间从指定所述队列的头部的块增加到指定所述队列的尾部的块;
由多个第一发送者进程中的每一个从所述队列的所述头部开始读取来自所述队列中的一个或多个块的消息;
由所述多个第一发送者进程中的每一个向相应的接收者发送读取的消息;
将具有早于第一时间的相关联的时间的所述块中的一个或多个指定为旧的;
将与晚于或等于所述第一时间的时间相关联的块指定为所述队列的新头部;
允许所述第一发送者进程中的一个或多个从所述旧块中读取消息,直到晚于所述第一时间的第二时间;以及
在晚于或等于所述第二时间的时间处从所述队列中删除所述旧块中的一个或多个。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/879,689 US9319365B1 (en) | 2015-10-09 | 2015-10-09 | Systems and methods for storing and transferring message data |
US14/879,689 | 2015-10-09 | ||
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 |
---|---|
CN108370346A true CN108370346A (zh) | 2018-08-03 |
Family
ID=55700150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680072293.1A Pending CN108370346A (zh) | 2015-10-09 | 2016-03-18 | 用于存储和传送消息数据的系统和方法 |
Country Status (6)
Country | Link |
---|---|
US (6) | US9319365B1 (zh) |
EP (1) | EP3360296A1 (zh) |
JP (1) | JP2018537756A (zh) |
CN (1) | CN108370346A (zh) |
AU (1) | AU2016335746A1 (zh) |
WO (1) | WO2017062059A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110231997A (zh) * | 2019-06-11 | 2019-09-13 | 浪潮软件集团有限公司 | 一种快速创建消息队列文件的方法及系统 |
CN110351355A (zh) * | 2019-07-04 | 2019-10-18 | 苏宁云计算有限公司 | 消息处理系统 |
CN111190727A (zh) * | 2019-11-19 | 2020-05-22 | 腾讯科技(深圳)有限公司 | 内存的异步析构方法、装置、计算机设备及存储介质 |
CN113836057A (zh) * | 2020-06-24 | 2021-12-24 | 三星电子株式会社 | 用于闪存存储控制器的消息队列存储装置和接口 |
Families Citing this family (19)
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 |
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 |
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 |
US10191930B2 (en) * | 2016-08-12 | 2019-01-29 | Sap Se | Priority queuing for updates in a database 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 |
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 | 中国银行股份有限公司 | 多区块链交互并发下的数据处理方法、装置及存储介质 |
CN111245897B (zh) * | 2019-12-30 | 2022-08-26 | 深圳物缘科技有限公司 | 数据处理方法、装置、系统、存储介质及处理器 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6621827B1 (en) * | 2000-09-06 | 2003-09-16 | Xanboo, Inc. | Adaptive method for polling |
CN101150354A (zh) * | 2007-10-29 | 2008-03-26 | 华为技术有限公司 | 消息调度方法和消息调度装置 |
CN101159711A (zh) * | 2007-11-27 | 2008-04-09 | 航天东方红卫星有限公司 | 自适应的实时消息订阅与发布系统及方法 |
CN102710517A (zh) * | 2012-05-31 | 2012-10-03 | 苏州阔地网络科技有限公司 | 一种消息调度控制方法及系统 |
CN104753769A (zh) * | 2015-03-24 | 2015-07-01 | 新余兴邦信息产业有限公司 | 用于消息队列下发消息的方法和消息下发装置 |
Family Cites Families (122)
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 |
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 |
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 |
US7111290B1 (en) * | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
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 |
WO2000050969A2 (en) | 1999-02-26 | 2000-08-31 | Henry Haugland | Mass generation of individual virtual servers, virtual web sites and virtual web objects |
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 |
US7219158B2 (en) | 2000-07-21 | 2007-05-15 | Hughes Network Systems Llc | Method and system for improving network performance using a performance enhancing proxy |
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 |
WO2004036382A2 (en) | 2002-10-17 | 2004-04-29 | 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 |
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 |
AU2005322959A1 (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 |
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 |
EP2126716A4 (en) * | 2007-01-16 | 2011-03-16 | Gizmox Ltd | METHOD AND SYSTEM FOR PRODUCING IT-ORIENTED SERVER-BASED WEB APPLICATIONS |
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 |
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 |
WO2010089886A1 (ja) * | 2009-02-06 | 2010-08-12 | 富士通株式会社 | パケットバッファ装置及びパケット廃棄方法 |
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 |
US8959217B2 (en) | 2010-01-15 | 2015-02-17 | Joyent, Inc. | Managing workloads and hardware 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 |
US20130212491A1 (en) | 2011-09-12 | 2013-08-15 | Gface Gmbh | Computer-implemented method for displaying an individual timeline of a user of a social network, computer system and computer-readable medium thereof |
US20130066967A1 (en) | 2011-09-12 | 2013-03-14 | Vizibility Inc. | System and method for discovering and interacting with common connections |
US8607249B2 (en) | 2011-09-22 | 2013-12-10 | Oracle International Corporation | System and method for efficient concurrent queue implementation |
BR112014012030A2 (pt) | 2011-11-18 | 2017-05-30 | Thomson Licensing | sistema compreendendo um intermediário de publicação/assinatura para o gerenciamento remoto de dispositivos do usuário final, e respectivo dispositivo do usuário final |
CA2859163C (en) | 2011-12-14 | 2020-03-31 | Level 3 Communications, Llc | Content delivery network |
WO2013095654A1 (en) | 2011-12-23 | 2013-06-27 | Intel Corporation | Shared send queue |
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 |
EP2869579B1 (en) | 2012-07-02 | 2017-04-26 | Sony Corporation | Transmission apparatus, transmission method, and network apparatus for multi-view video streaming using a meta file including cache priority or expiry time information of said video streams |
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 |
US9805053B1 (en) * | 2013-02-25 | 2017-10-31 | EMC IP Holding Company LLC | Pluggable storage system for parallel query engines |
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 |
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 |
US9319363B1 (en) | 2015-08-07 | 2016-04-19 | 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 |
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 CN CN201680072293.1A patent/CN108370346A/zh active Pending
- 2016-03-18 WO PCT/US2016/023164 patent/WO2017062059A1/en active Application Filing
- 2016-03-18 JP JP2018518525A patent/JP2018537756A/ja 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
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6621827B1 (en) * | 2000-09-06 | 2003-09-16 | Xanboo, Inc. | Adaptive method for polling |
CN101150354A (zh) * | 2007-10-29 | 2008-03-26 | 华为技术有限公司 | 消息调度方法和消息调度装置 |
CN101159711A (zh) * | 2007-11-27 | 2008-04-09 | 航天东方红卫星有限公司 | 自适应的实时消息订阅与发布系统及方法 |
CN102710517A (zh) * | 2012-05-31 | 2012-10-03 | 苏州阔地网络科技有限公司 | 一种消息调度控制方法及系统 |
CN104753769A (zh) * | 2015-03-24 | 2015-07-01 | 新余兴邦信息产业有限公司 | 用于消息队列下发消息的方法和消息下发装置 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110231997A (zh) * | 2019-06-11 | 2019-09-13 | 浪潮软件集团有限公司 | 一种快速创建消息队列文件的方法及系统 |
CN110351355A (zh) * | 2019-07-04 | 2019-10-18 | 苏宁云计算有限公司 | 消息处理系统 |
CN110351355B (zh) * | 2019-07-04 | 2022-02-25 | 苏宁云计算有限公司 | 消息处理系统 |
CN111190727A (zh) * | 2019-11-19 | 2020-05-22 | 腾讯科技(深圳)有限公司 | 内存的异步析构方法、装置、计算机设备及存储介质 |
CN111190727B (zh) * | 2019-11-19 | 2023-06-09 | 腾讯科技(深圳)有限公司 | 内存的异步析构方法、装置、计算机设备及存储介质 |
CN113836057A (zh) * | 2020-06-24 | 2021-12-24 | 三星电子株式会社 | 用于闪存存储控制器的消息队列存储装置和接口 |
Also Published As
Publication number | Publication date |
---|---|
US10038661B2 (en) | 2018-07-31 |
JP2018537756A (ja) | 2018-12-20 |
US20170118160A1 (en) | 2017-04-27 |
AU2016335746A1 (en) | 2018-05-10 |
EP3360296A1 (en) | 2018-08-15 |
US20190334850A1 (en) | 2019-10-31 |
US20180331992A1 (en) | 2018-11-15 |
US9843551B2 (en) | 2017-12-12 |
US9319365B1 (en) | 2016-04-19 |
US20180077104A1 (en) | 2018-03-15 |
US9407593B1 (en) | 2016-08-02 |
WO2017062059A1 (en) | 2017-04-13 |
US10389674B2 (en) | 2019-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108370346A (zh) | 用于存储和传送消息数据的系统和方法 | |
CN108370345A (zh) | 用于存储消息数据的系统和方法 | |
CN108353020A (zh) | 用于传送消息数据的系统和方法 | |
JP4560513B2 (ja) | ハンドセット端末を介してリソースを共有する方法、及び装置 | |
US9843640B2 (en) | Scalable, real-time messaging system | |
CN108141404A (zh) | 可扩展的实时消息传递系统 | |
JP2018531472A (ja) | スケーラブルなリアルタイムメッセージングシステム | |
JP2018531472A6 (ja) | スケーラブルなリアルタイムメッセージングシステム | |
CN109479025A (zh) | 维护消息传送系统的持久性 | |
CA2943128A1 (en) | Computer system to support failover in an event stream processing system | |
CN106657314A (zh) | 跨数据中心数据同步系统及方法 | |
US20050210109A1 (en) | Load balancing mechanism for publish/subscribe broker messaging system | |
CN114827171A (zh) | 信息同步方法、装置、计算机设备和存储介质 | |
JP2019532399A (ja) | スケーラブルメッセージングシステムにおけるデータ複製 | |
Nikolopoulos et al. | Enhancing context-awareness in autonomous fog nodes for IoT systems | |
CN109417503A (zh) | 可扩展消息传送系统中的消息压缩 | |
JP2022549076A (ja) | シングル・ページ・アプリケーションのキャッシャビリティの改善方法、システム、プログラム | |
Ivan | A web based Publish-Subscribe framework for mobile computing | |
Lee et al. | Fast and Flexible Communication Support for Social Networking Services | |
JP2024509718A (ja) | アプリケーションプログラムにおいて情報を表示する方法および装置 | |
CN109417563A (zh) | 高效消息交换系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180803 |
|
WD01 | Invention patent application deemed withdrawn after publication |