CN110546923A - 可扩展实时消息传送系统中的消息的选择性分发 - Google Patents
可扩展实时消息传送系统中的消息的选择性分发 Download PDFInfo
- Publication number
- CN110546923A CN110546923A CN201880026981.3A CN201880026981A CN110546923A CN 110546923 A CN110546923 A CN 110546923A CN 201880026981 A CN201880026981 A CN 201880026981A CN 110546923 A CN110546923 A CN 110546923A
- Authority
- CN
- China
- Prior art keywords
- channel
- messages
- node
- message
- query
- 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/214—Monitoring or handling of messages using selective forwarding
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/10—Office automation; Time management
- G06Q10/107—Computer-aided management of electronic mailing [e-mailing]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- 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/212—Monitoring or handling of messages using filtering or selective blocking
-
- 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
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/10—Architectures or entities
-
- 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/14—Session management
- H04L67/142—Managing session states for stateless protocols; Signalling session states; State transitions; Keeping-state mechanisms
-
- 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
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Human Resources & Organizations (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Strategic Management (AREA)
- Entrepreneurship & Innovation (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Marketing (AREA)
- Economics (AREA)
- Computer Hardware Design (AREA)
- Operations Research (AREA)
- Quality & Reliability (AREA)
- Tourism & Hospitality (AREA)
- General Business, Economics & Management (AREA)
- Multimedia (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明提供了包括编码在计算机存储介质上的计算机程序的方法、系统和设备,用于选择性地分发来自可扩展、实时消息传送系统的消息。示例性方法包括:从订户客户端接收查询指示,其中所述订户客户端订阅多个通道中的通道;从多个发布者客户端接收多个消息,其中各消息与所述多个通道中的特定通道相关联;在接收到所述通道的多个消息时对所述消息应用所述查询指示;以及将由应用所述查询指示得到的消息发送至所述订户客户端,其中由所述订户客户端从所述通道接收到的消息限于满足所述查询指示的消息。
Description
相关申请的交叉引用
本申请要求2017年2月24日提交的美国非临时专利申请15/442,036的优先权,其全部内容通过引用而并入于此。
背景技术
本申请涉及数据通信系统,特别地涉及用于实现实时可扩展发布-订阅消息传送的系统。
发布-订阅模式(或者“PubSub”)是利用软件系统实现的数据通信消息传送布置,其中,所谓的发布者将消息发布到主题,并且所谓的订户接收与他们所订阅的特定主题有关的消息。每个主题可以存在一个或多个发布者,并且发布者一般不知道什么样的订户(如果有的话)将接收到所发布的消息。由于发布者可以发布大量消息、并且订户可以订阅许多主题(或“通道”),因此引导至特定的通道和/或订户的消息的总量可能难以管理。
发明内容
一般来说,本说明书中所描述的主题的一个方面可以体现在如下的方法中,该方法包括如下的动作:从订户客户端接收查询指示,其中所述订户客户端订阅多个通道中的通道。所述方法还包括:从多个发布者客户端接收多个消息,其中各消息与所述多个通道中的特定通道相关联;在接收到所述通道的多个消息时对所述多个消息应用所述查询指示。将由应用所述查询指示得到的消息发送至所述订户客户端,其中由所述订户客户端从所述通道接收到的消息限于满足所述查询指示的消息。该方面的其它实施例包括相应的系统、设备和计算机程序。
这些和其它方面可以可选地包括以下特征中的一个或多个。消息节点可以与一个或多个消息发布者相关联,各发布者提供进入相应消息节点中的消息,并且在一些实施例中,所述查询指示的应用可以包括基于所述消息发布者来过滤所述消息。可以从诸如膝上型计算机、智能电话、机顶盒、web服务或虚拟客户端等的订户客户端上所运行的应用接收所述查询指示。在一些实现中,所述消息包括自描述数据(诸如时间元素、序列元素和地理元素等),并且选择性应用还可以包括过滤器的应用、函数的应用、和/或聚合。在一些实例中,可以基于所述查询指示来建立索引并且在接收到所述消息时对所述消息应用所述查询指示的情况下使用所述索引。可以计算查询频率以描述所述查询指示查阅所述消息内的特定数据元素的次数和/或频率,并且可以在查询频率超过阈值的情况下存储并重复使用该查询频率作为索引,否则在所述索引在定义时段内得到应用之后丢弃该索引。在一些情况下,可以对在接收到所述查询指示之前接收到的未索引消息应用所述查询指示,并且在一些实施例中,与在接收到所述消息时对所述消息应用所述查询指示的结果相组合。来自所述订户客户端的查询指示可以包括针对所述通道的消息的历史的请求。可以对所述通道的消息的历史应用过滤器、函数和/或聚合。
针对本发明的给定方面所描述的示例或实施例的元件可以用于本发明的另一方面的各个实施例中。例如,可以设想,依赖于一个独立权利要求的从属权利要求的特征可以用于任何其它独立权利要求的设备、系统和/或方法中。
在附图和以下的描述中详细阐述了本说明书中所描述的主题的一个或多个实施例。根据说明书、附图和权利要求,本主题的其它特征、方面和优点将变得明显。
附图说明
图1A示出支持PubSub通信模式的示例性系统。
图1B示出示例性客户端装置上的软件的功能层。
图2是示例性消息传送系统的图。
图3A是用于将数据写入通道细流(streamlet)的示例性方法的数据流程图。
图3B是用于从通道细流读取数据的示例性方法的数据流程图。
图4A是用于将消息发布到消息传送系统的通道的示例性方法的数据流程图。
图4B是用于订阅消息传送系统的通道的示例性方法的数据流程图。
图4C是用于存储消息传送系统的通道的消息的示例性数据结构。
图5A是用于发布和复制消息传送系统的消息的示例性方法的数据流程图。
图5B是用于检索消息传送系统中所存储的消息的示例性方法的数据流程图。
图5C和5D是用于修复消息传送系统中的数据副本链的示例性方法的数据流程图。
图6是用于在消息传送系统中应用过滤标准的示例性数据流程图。
图7A~7D是可以如何使用包括基于时段的参数的查询指示来处理消息的图示。
图8是消息传送系统的发布者和订户所用的、用于发布消息以及选择性地实现对消息的订阅的示例性方法的流程图。
具体实施方式
图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)、以及可选的一个或多个C节点(例如,C节点或缓存节点220和222)。各节点可以在虚拟机中或者在物理机(例如,数据处理设备)上执行。各MX节点可以用作通过外部网络216的一个或多个发布者和/或订户连接的终止点。例如,MX节点、Q节点、C节点和配置管理器之间的内部通信可以通过内部网络218进行。通过说明的方式,MX节点204可以是来自客户端102的订户连接的终点。各Q节点缓冲通道数据以供MX节点消耗。发布到通道的有序消息序列是逻辑通道流。例如,如果三个客户端向给定通道发布消息,则这些客户端所发布的组合消息包括通道流。可以例如按照客户端的发布时间、MX节点的接收时间、或Q节点的接收时间在通道流中对消息进行排序。用于在通道流中对消息进行排序的其它方式也是可以的。在多于一个消息将按照顺序被分配到同一位置的情况下,一个消息可被(例如,随机地)选择为具有顺序中的较晚序列。各配置管理器节点负责例如通过向Q节点分配通道以及/或者通过将通道流分割成所谓的通道细流来管理Q节点负载。以下进一步讨论通道细流。可选的C节点提供缓存以及Q节点中的负载移除。
在示例性消息传送系统100中,一个或多个客户端装置(发布者和/或订户)建立到MX节点(例如,MX节点204)的相应的持久性连接(例如,TCP连接)。MX节点用作这些连接的终止点。例如,可以基于外部协议(例如,JSON)来对这些连接所运载的(例如,相应的客户端装置和MX节点之间的)外部消息进行编码。MX节点终止外部协议并将外部消息转译为内部通信,并且反之亦然。MX节点代表客户端向通道细流进行发布和对通道细流进行订阅。以这种方式,MX节点可以对订阅同一通道或发布到同一通道的客户端装置的请求进行多路复用和合并,从而将多个客户端装置表示为一个,而不是一个接一个地表示。
在示例性消息传送系统100中,Q节点(例如,Q节点208)可以存储一个或多个通道流的一个或多个通道细流。通道细流是针对通道流的一部分的数据缓冲器。当通道细流的存储已满时,它将关闭写入。当通道细流的存活时间(TTL)期满时,它将关闭读取和写入并被解除分配。通过说明的方式,通道细流可以具有1MB的最大尺寸和三分钟的TTL。不同的通道可以具有由不同的尺寸和/或不同的TTL限定的通道细流。例如,一个通道中的通道细流最多可以存在三分钟,而另一通道中的通道细流最多可以存在10分钟。在各种实现中,通道细流与Q节点上运行的计算进程相对应。例如,可以在通道细流的TTL期满之后终止计算进程,从而将(用于通道细流的)计算资源释放回Q节点。
当从客户端装置接收到发布请求时,MX节点(例如,MX节点204)向配置管理器(例如,配置管理器214)作出请求以授权对通道细流的访问从而写入正被发布的消息。然而,注意,如果MX节点已被授权对通道的通道细流的写入访问(并且通道尚未关闭写入),则MX节点可以将消息写入该通道细流,而无需请求对访问通道细流的授权。一旦消息被写入通道的通道细流,则该消息可以由MX节点读取并被提供给该通道的订户。
类似地,当从客户端装置接收到通道订阅请求时,MX节点向配置管理器作出请求以授权对所读取消息的通道的通道细流的访问。如果MX节点已被授权对通道的通道细流的读取访问(并且通道的TTL尚未关闭读取),则MX节点可以从通道细流读取消息,而无需请求对访问通道细流的授权。读取的消息然后可被转发至已订阅该通道的客户端装置。在各种实现中,从通道细流读取的消息由MX节点缓存,以使得MX节点可以减少从通道细流读取所需的次数。
通过说明的方式,MX节点可以从配置管理器请求授权,其中该授权允许MX节点将数据块存储到用于存储特定通道的通道细流的特定Q节点上的通道细流中。示例性通道细流授权请求和授权数据结构如下:
StreamletGrantRequest数据结构存储流的名称channel,并且mode指示MX节点是意图从通道细流读取还是写入通道细流。MX节点将StreamletGrantRequest发送到配置管理器节点。作为响应,配置管理器节点向MX节点发送StreamletGrantResponse数据结构。StreamletGrantResponse包含通道细流的标识符(streamlet-id)、通道细流的最大尺寸(limit-size)、通道细流可以存储的消息的最大数量(limit-msgs)、TTL(limit-life)、以及通道细流驻留的Q节点(q-node)的标识符。StreamletGrantRequest和StreamletGrantResponse还可以具有指向用于从通道细流读取的通道细流中的位置(或通道中的位置)的position字段。
一旦通道细流关闭,则授权变为无效。例如,一旦通道细流的TTL已经期满,则该通道细流被关闭读取和写入,并且当通道细流的存储装置已满时,该通道细流被关闭写入。当授权变为无效时,MX节点可以从配置管理器请求新的授权以从通道细流读取或写入通道细流。新的授权将引用不同的通道细流,并且将根据新的通道细流驻留的位置来引用相同的或不同的Q节点。
图3A是各个实施例中的用于将数据写入通道细流的示例性方法的数据流程图。在图3A中,在MX节点(例如,MX节点202)请求写入通道细流被配置管理器(例如,配置管理器214)授权的情况下,如前所述,MX节点建立与从配置管理器(302)接收到的授权响应中所标识的Q节点(例如,Q节点208)的传输控制协议(TCP)连接。通道细流可以由(例如,用于由多个发布者客户端发布的消息的)多个写入授权并发写入。MX节点和Q节点之间的其它类型的连接协议也是可以的。
然后MX节点发送准备发布消息(304),其中该准备发布消息具有MX节点想要写入Q节点的通道细流的标识符。通道细流标识符和Q节点标识符可以由配置管理器在前面所述的写入授权中提供。Q节点将消息移交给所标识的通道细流的处理程序进程301(例如,Q节点上运行的计算进程)(306)。处理程序进程可以向MX节点发送确认(308)。在接收到确认之后,MX节点开始将消息(例如,310、312、314和318)写入(发布)到处理程序进程,该处理程序进程转而将所接收到的数据存储在所标识的通道细流中。处理程序进程还可以针对所接收到的数据向MX节点发送确认(316、320)。在一些实现中,确认可以是捎带式(piggy-backed)的或累积式的。例如,处理程序进程可以向MX节点发送针对所接收到的每预定量的数据(例如,针对接收到的每100个消息)、或者针对每预定时间段(例如,针对每毫秒)的确认。可以使用诸如Nagle算法等的其它确认调度算法。
如果通道细流不再接受发布的数据(例如,当通道细流已满时),则处理程序进程发送指示问题的否定确认(NAK)消息(330)、接着发送EOF(文件结束)消息(332)。以这种方式,处理程序进程关闭与用于发布授权的MX节点的关联。如果MX节点具有附加的消息要存储,则该MX节点可以从配置管理器请求对另一通道细流的写入授权。
图3B是各个实施例中的用于从通道细流读取数据的示例性方法的数据流程图。在图3B中,MX节点(例如,MX节点204)向配置管理器(例如,配置管理器214)发送用于读取从通道中的特定消息或时间偏移开始的特定通道的请求。配置管理器向MX节点返回读取授权,其包括包含特定消息的通道细流的标识符、通道细流中与特定消息相对应的位置、以及包含特定通道细流的Q节点(例如,Q节点208)的标识符。然后MX节点建立与Q节点的TCP连接(352)。MX节点和Q节点之间的其它类型的连接协议也是可以的。
然后MX节点向Q节点发送订阅消息(354),其中该订阅消息具有(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节点其中之一上的新的通道细流,并在StreamletGrantResponse中返回通道细流和Q节点的身份。否则,配置管理器在StreamletGrantResponse中返回当前开放用于写入的通道细流和相应Q节点的身份。MX节点可以向通道细流发布消息,直到通道细流已满或者通道细流的TTL期满为止,此后可以由配置管理器分配新的通道细流。
在MX节点针对给定通道请求读取授权、并且对于该通道不存在可以读取的通道细流的情况下,配置管理器分配Q节点其中之一上的新的通道细流,并在StreamletGrantResponse中返回通道细流和Q节点的身份。否则,配置管理器返回包含MX节点希望读取的位置的通道细流和Q节点的身份。然后Q节点可以开始向MX节点发送来自在指定位置处开始的通道细流的消息,直到通道细流中没有更多的消息要发送为止。当新消息被发布到通道细流时,已订阅该通道细流的MX节点将接收该新消息。如果通道细流的TTL已期满,则处理程序进程351可以向订阅该通道细流的任意MX节点发送EOF消息(392)。
在一些实现中,消息传送系统100可以包括多个配置管理器(例如,配置管理器214加上一个或多个其它配置管理器)。多个配置管理器可以提供弹性并防止单点故障。例如,一个配置管理器可以将其维护的通道细流和当前授权的列表复制给另一“从属”配置管理器。作为另一示例,多个配置管理器可以使用诸如Paxos或Raft协议等的分布式共识协议来协调它们之间的操作。
图4A是用于将消息发布到消息传送系统的通道的示例性方法的数据流程图。在图4A中,发布者(例如,发布者客户端402、404、406)将消息发布到前面参考图2所述的消息传送系统100。例如,发布者402分别建立连接411并向MX节点202发送发布请求。发布者404分别建立连接413并向MX节点206发送发布请求。发布者406分别建立连接415并向MX节点204发送发布请求。这里,MX节点可以经由内部网络218来与消息传送系统100中的配置管理器(例如,配置管理器214)以及一个或多个Q节点(例如,Q节点212和208)进行通信(417)。
通过说明的方式,从发布者到MX节点的各发布请求(例如,在JSON关键字/值对中)包括通道名称和消息。MX节点(例如,MX节点202)可以基于发布请求的通道名称(例如,“foo”)来将发布请求中的消息分配给消息传送系统100中的不同通道。MX节点可以向配置管理器214确认所分配的通道。如果(订阅请求中指定的)通道在消息传送系统100中尚不存在,则配置管理器可以在消息传送系统100中创建并维护新的通道。例如,配置管理器可以通过维护用于标识以下各项的列表来维护新的通道:通道流的各有效通道细流、通道细流驻留的相应Q节点、以及如前所述的通道细流中的第一个消息和最后一个消息的位置的标识。
对于特定通道的消息,MX节点可以将消息存储在消息传送系统100中的一个或多个缓冲器或通道细流中。例如,MX节点202从发布者402接收用以将消息M11、M12、M13和M14发布到通道foo的请求。MX节点206从发布者404接收用以将消息M78和M79发布到通道foo的请求。MX节点204从发布者406接收用以将消息M26、M27、M28、M29、M30和M31发布到通道foo的请求。
MX节点可以标识用于存储通道foo的消息的一个或多个通道细流。如前所述,各MX节点可以从配置管理器214请求写入授权,其中该写入授权允许MX节点将信息存储在通道foo的通道细流中。例如,MX节点202从配置管理器214接收用以将消息M11、M12、M13和M14写入Q节点212上的通道细流4101的授权。MX节点206从配置管理器214接收用以将消息M78和M79写入通道细流4101的授权。这里,通道细流4101是存储通道foo的消息的通道流430的通道细流序列的最后一个(在当时)。通道细流4101具有先前存储在通道细流4101中但仍然开放的通道foo的消息(421),即通道细流4101仍具有用于存储更多消息的空间并且通道细流的TTL尚未期满。
MX节点202可以基于MX节点202接收到各消息(例如,M11、M13、M14、M12)的相应时间来布置通道foo的消息(422),并且按照布置将所接收到的消息存储在通道细流4101中。也就是说,MX节点202首先接收M11,然后接收M13、M14和M12。类似地,MX节点206可以基于MX节点206接收到各消息(例如,M78、M79)的相应时间来布置通道foo的消息(423),并且按照布置将所接收到的消息存储在通道细流4101中。通道的消息的其它布置或排序也是可以的。
例如,MX节点202(或MX节点206)可以使用前面参考图3A所述的用于将数据写入通道细流的方法来存储所接收到的消息。在各种实现中,MX节点202(或MX节点206)可以(例如,在本地数据缓冲器中)缓冲所接收到的通道foo的消息,并在缓冲消息达到预定数量或大小(例如,100个消息)或者已经过去预定时间(例如,50毫秒)时将所接收到的消息存储在通道foo的通道细流(例如,通道细流4101)中。例如,MX节点202可以一次性将100个消息存储在通道细流中,或者每50毫秒进行存储。可以使用诸如Nagle算法等的其它适当算法和技术来管理缓冲消息。可以使用其它确认调度算法,诸如Nagle算法等。
在各种实现中,Q节点212(例如,处理程序进程)按照如MX节点202和MX节点206所布置的顺序来将通道foo的消息存储在通道细流4101中。Q节点212按照Q节点212接收消息的顺序来将通道foo的消息存储在通道细流4101中。例如,假设Q节点212首先接收到(来自MX节点206的)消息M78,然后是(来自MX节点202的)消息M11和M13、(来自MX节点206的)M79、以及(来自MX节点202的)M14和M12。Q节点212将这些消息(例如,M78、M11、M13、M79、M14和M12)按照被接收的顺序存储在通道细流4101中,紧跟在已存储在通道细流4101中的消息421之后。以这种方式,从多个发布者(例如,402、404)发布到通道foo的消息可以以特定顺序被序列化并被存储在通道foo的通道细流4101中。订阅通道foo的不同订户将以同一特定顺序接收通道foo的消息,如将参考图4B更详细所述。
在图4A的示例中,在消息M12被存储在通道细流4101中之后的某一时刻,MX节点204从配置管理器214请求写入通道foo的授权。由于通道细流4101仍开放写入,因此配置管理器214向MX节点204提供向通道细流4101写入消息的授权。MX节点204基于MX节点204接收到各消息(例如,M26、M27、M31、M29、M30、M28)的相应时间来布置通道foo的消息(424),并且按照针对通道foo的布置来存储这些消息。
通过说明的方式,假设消息M26被存储到通道细流4101的最后可用位置。由于通道细流4101现在已满,因此Q节点212向MX节点204发送NAK消息、接着发送EOF消息,以关闭与MX节点204的用于写入授权的关联,如前面参考图3A所述。然后MX节点204从配置管理器214请求用于通道foo的附加消息(例如,M27、M31等)的另一写入授权。
配置管理器214可以监视消息传送系统100中的可用Q节点的相应工作负载(例如,多少个通道细流驻留在各Q节点中)。配置管理器214可以为来自MX节点204的写入请求分配通道细流,使得可以针对任意给定Q节点避免过载(例如,太多的通道细流或太多的读取或写入授权)。例如,配置管理器214可以标识消息传送系统100中的最小负载Q节点,并将最小负载Q节点上的新的通道细流分配用于来自MX节点204的写入请求。在图4A的示例中,配置管理器214分配Q节点208上的新的通道细流4102,并且向MX节点204提供用以将通道foo的消息写入通道细流4102的写入授权。如图4A所示,Q节点按照如MX节点204所布置的如下顺序将来自MX节点204的消息存储在通道细流4102中:M27、M31、M29、M30和M28(假设此时不存在针对通道细流4102的其它并发写入授权)。
在配置管理器214为来自MX节点(例如,MX节点204)的授权请求分配用以写入通道(例如,foo)的新通道细流(例如,通道细流4102)的情况下,配置管理器214向通道细流分配将在已经位于通道流中的其它通道细流的TTL之后期满的TTL。例如,在分配通道细流时,配置管理器214可以向通道foo的通道流的各通道细流分配3分钟的TTL。也就是说,各通道细流将在其由配置管理器214分配(创建)3分钟之后期满。由于在先前的通道细流关闭(例如,完全填充或期满)之后分配新的通道细流,以这种方式,通道foo的通道流包括分别在其先前的通道细流期满之后依次期满的通道细流。例如,如图4A中的通道foo的示例性通道流430所示,通道细流4098和4098之前的通道细流已经期满(如虚线灰色框所示)。存储在这些期满通道细流中的消息不可用于通道foo的订户的读取。通道细流4099、4100、4101和4102仍然是有效的(未期满)。通道细流4099、4100和4101关闭写入,但仍可用于读取。在消息M28被存储在通道细流4102中的时刻,通道细流4102可用于读取和写入。在稍后的时间,通道细流4099将期满、接着是通道细流4100、4101,以此类推。
图4B是用于订阅消息传送系统的通道的示例性方法的数据流程图。在图4B中,订户480建立与消息传送系统100的MX节点461的连接462。订户482建立与MX节点461的连接463。订户485建立与消息传送系统100的MX节点468的连接467。这里,MX节点461和468可以经由内部网络218分别与消息传送系统100中的配置管理器214以及一个或多个Q节点进行通信(464)。
订户(例如,订户480)可以通过建立连接(例如,462)并向MX节点(例如,MX节点461)发送订阅通道foo的消息的请求,来订阅消息传送系统100的通道foo。该请求(例如,在JSON关键字/值对中)可以包括诸如“foo”等的通道名称。当接收到订阅请求时,MX节点461可以向配置管理器214发送针对通道foo的通道流中的通道细流的读取授权的请求。
通过说明的方式,假设在当前时刻,通道foo的通道流431包括有效通道细流4102、4103和4104,如图4B所示。通道细流4102和4103均已满。通道细流4104存储通道foo的消息,包括(在当前时刻)存储在位置47731处的最后消息。通道细流4101和4101之前的通道细流是无效的,这是因为它们各自的TTL已经期满。注意,前面参考图4A所述的存储在通道细流4101中的消息M78、M11、M13、M79、M14、M12和M26不再可用于通道foo的订户,这是因为通道细流4101由于其TTL已期满因而不再有效。如前所述,通道foo的通道流中的各通道细流具有3分钟的TTL,因此仅在距离当前时间不早于3分钟被发布到通道foo(即存储到通道的通道细流中)的消息(如存储在通道foo的通道细流中的消息)可用于通道foo的订户。
例如,当订户480是通道foo的新订户时,MX节点461可以请求用于通道foo中的所有可用消息的读取授权。基于该请求,配置管理器214向MX节点461提供针对作为通道foo的有效通道细流中的最早通道细流(即有效通道细流的序列中的第一个)的(Q节点208上的)通道细流4102的读取授权。MX节点461可以使用前面参考图3B所述的用于从通道细流读取数据的方法来检索来自Q节点208的通道细流4102中的消息。注意,从通道细流4102检索到的消息保持与通道细流4102中所存储的顺序相同的顺序。然而,通道细流中的消息的其它布置或排序也是可以的。在各种实现中,当将通道细流4102中所存储的消息提供给MX节点461时,Q节点208可以(例如,在本地数据缓冲器中)缓冲这些消息,并在缓冲消息达到预定数量或大小(例如,200个消息)或者已经过去预定时间(例如,50毫秒)时将这些消息发送到MX节点461。例如,Q节点208可以将通道foo的消息(来自通道细流4102)一次200个地发送到MX节点461,或每50毫秒发送到MX节点。可以使用其它确认调度算法,诸如Nagle算法等。
在接收到通道细流4102中的最后一个消息之后,MX节点461可以向Q节点208发送确认,并且向配置管理器214发送针对通道foo的通道流中的下一个通道细流的另一请求(例如,用于读取授权)。基于该请求,配置管理器214向MX节点461提供针对在通道foo的有效通道细流的序列中逻辑上跟在通道细流4102之后的(Q节点472上的)通道细流4013的读取授权。MX节点461可以例如使用前面参考图3B所述的用于从通道细流读取数据的方法来检索通道细流4013中所存储的消息,直到它检索到通道细流4013中所存储的最后一个消息为止。MX节点461可以向配置管理器214发送针对(Q节点474上的)下一个通道细流4104中的消息的读取授权的另一请求。在接收到读取授权之后,MX节点461检索通道细流4014中所存储的通道foo的消息,直到位置47731处的最后一个消息为止。类似地,MX节点468可以从通道细流4102、4103和4104检索消息(如图4B中的虚线箭头所示),并且将这些消息提供给订户485。
MX节点461可以(经由连接462)将检索到的通道foo的消息发送至订户480,同时从Q节点208、472或474接收消息。在各种实现中,MX节点461可以将检索到的消息存储在本地缓冲器中。以这种方式,当另一订户(例如,订户482)订阅通道foo并请求该通道的消息时,可以将检索到的消息提供给该另一订户。MX节点461可以移除本地缓冲器中所存储的、具有超过预定时间段的发布时间的消息。例如,MX节点461可以移除具有超过3分钟的相应的发布时间的(本地缓冲器中所存储的)消息。在一些实现中,用于将消息保持在MX节点461上的本地缓冲器中的预定时间段可以与通道foo的通道流中的通道细流的存活时间持续时间相同或相似,这是因为在给定时刻,从通道流检索到的消息不包括具有已期满的相应存活时间的通道细流中的那些消息。
从通道流431中检索到并被(MX节点461)发送至订户480的消息按照这些消息被存储在通道流中的相同顺序进行布置,但是消息的其它布置或排序也是可以的。例如,发布到通道foo的消息被序列化并且以特定顺序(例如,M27、M31、M29、M30以此类推)被存储在通道细流4102中,然后被依次存储在通道细流4103和通道细流4104中。MX节点从通道流431检索消息,并按照如下的这些消息被存储在通道流中的相同顺序来将这些消息提供给订户480:M27、M31、M29、M30以此类推,接着是通道细流4103中的有序消息,接着是通道细流4104中的有序消息。
代替检索通道流431中的所有可用消息,MX节点461可以请求用于通道流431中所存储的、从特定位置(例如,位置47202)处的消息开始的消息的读取授权。例如,位置47202可以与订户480(例如,经由到MX节点461或消息传送系统100的另一MX节点461的连接)最后订阅通道foo时的较早时刻(例如,在当前时间之前10秒)相对应。MX节点461可以向配置管理器214发送用于在位置47202开始的消息的读取授权的请求。基于该请求,配置管理器214向MX节点461提供对(Q节点474上的)通道细流4104、以及通道细流4104上的与通道流位置47202相对应的位置的读取授权。MX节点461可以检索通道细流4104中的从所提供的位置开始的消息,并将检索到的消息发送到订户480。
如以上参考图4A和图4B所述,发布到通道foo的消息被序列化并按照特定顺序被存储在通道的通道细流中。配置管理器214在通道细流被创建时对其有序序列进行维护,并贯穿它们相应的存活时间。在一些实现中,由MX节点(例如,MX节点461或MX节点468)从通道细流检索并提供给订户的消息可以按照与这些信息被存储在通道细流的有序序列中相同的顺序。以这种方式,被发送至不同订户(例如,订户480、订户482或订户485)的消息可以按照(与这些消息被存储在通道细流中)相同的顺序,而与订户连接到哪个MX节点无关。
在各种实现中,通道细流将消息存储在消息块集中。各个块存储多个消息。例如,块可以存储两百个千字节的消息。各个块具有其自己的存活时间,该存活时间可能比持有该块的通道细流的存活时间短。如以下参考图4C更详细所述,一旦块的TTL已经期满,则可以从持有该块的通道细流中丢弃该块。
图4C是用于存储消息传送系统的通道的消息的示例性数据结构。如参考图4A和图4B关于通道foo所述,假设在当前时刻,通道foo的通道流432包括有效通道细流4104和4105,如图4C所示。通道细流4103和4103之前的通道细流是无效的,因为它们各自的TTL已期满。通道细流4104对于其(例如,由相应的写入授权所确定的)容量已满并且关闭附加消息写入。通道细流4104仍可用于消息读取。通道细流4105开放并且可用于消息写入和读取。
通过说明的方式,通道细流4104(例如,在图4B所示的Q节点474上运行的计算进程)当前持有两个消息块。块494持有来自通道位置47301~47850的消息。块495持有来自通道位置47851~48000的消息。通道细流4105(例如,在消息传送系统100中的另一Q节点上运行的计算进程)当前持有两个消息块。块496持有来自通道位置48001~48200的消息。块497持有从通道位置48201开始的消息,并仍然接受通道foo的附加消息。
在(例如,通过写入授权)创建通道细流4104时,创建第一块(子缓冲器)492以存储例如来自通道位置47010~47100的消息。稍后,在块492已达到其容量之后,创建另一块493以存储例如来自通道位置47111~47300的消息。随后创建块494和495以存储附加消息。之后,通道细流4104关闭附加消息写入,并且利用附加块来创建通道细流4105以存储通道foo的附加消息。
在该示例中,块492和493各自的TTL已期满。这两个块中所存储的(来自通道位置47010~47300)的消息不再可用于通道foo的订户的读取。通道细流4104可以例如通过解除分配块492和493的存储器空间来丢弃这两个期满的块。在通道细流4104自身变为无效之前,块494或495可能变为期满并被通道细流4104丢弃。替代地,通道细流4104自身可能在块494或495变为期满之前变为无效。以这种方式,通道细流可以持有一个或多个消息块,或者不包含消息块,这取决于例如通道细流和块的相应的TTL。
在消息传送系统100中的Q节点上运行的通道细流或计算进程可以通过从Q节点分配特定大小的存储器空间来创建用于存储通道的消息的块。通道细流可以从消息传送系统100中的MX节点一次接收一个消息,并将接收到的消息存储在块中。替代地,MX节点可以汇集(即,缓冲)一组消息并将该组消息发送到Q节点。通道细流可以(从Q节点)分配存储器空间的块,并将该组消息存储在该块中。MX节点还可以例如通过从各消息中移除公共头部或者进行其它合适压缩技术来对该组消息进行压缩。
如上所述,驻留在Q节点上的通道细流(数据缓冲器)将通道的消息存储在消息传送系统100中。为了防止可能引起消息丢失的Q节点的故障(单点故障),消息传送系统100可以复制多个Q节点上的消息,如以下更详细所述。
图5A是用于发布和复制消息传送系统100的消息的示例性方法500的数据流程图。如前面参考图4A所述,MX节点204从发布者406接收(通道foo的)消息。配置管理器214可以指示(例如,具有写入授权的)MX节点204将消息存储在Q节点208上的通道细流4102中。在图5A中,代替将消息存储在单个节点(例如,Q节点208)上,配置管理器214分配多个Q节点以将通道细流4102的多个副本存储在这些Q节点上。
通过说明的方式,配置管理器214在消息传送系统100中分配Q节点208、502、504和506以存储通道细流4102的副本。配置管理器214指示MX节点204以将通道foo的消息(例如,消息M27、M31、M29、M30和M28)发送至Q节点208(512)。Q节点208上运行的计算进程将消息存储在通道细流4102的第一副本(副本#1)中。代替在存储消息之后向MX节点204发送确认消息,Q节点208将消息转发至Q节点502(514)。Q节点502上运行的计算进程将消息存储在通道细流4102的另一副本(副本#2)中。同时,Q节点502将消息转发至Q节点504(516)。Q节点504上运行的计算进程将消息存储在通道细流4102的又一副本(副本#3)中。Q节点504还将消息转发至Q节点506(518)。Q节点506上运行的计算进程将消息存储在通道细流4102的又一副本(副本#4)中。Q节点506可以向MX节点204发送确认消息,表明所有消息(M27、M31、M29、M30和M28)都已被成功存储在通道细流的副本#1、#2、#3和#4中。
在一些实现中,在成功存储最后一个副本(副本#4)之后,Q节点506可以向其上游Q节点(504)发送确认,其中上游Q节点(504)转而向其上游Q节点(502)发送确认,以此类推,直到向存储第一副本(副本#1)的Q节点208发送确认为止。Q节点208可以向MX节点204发送确认消息,表明所有消息都已被成功存储在通道细流4102中(即,存储在副本#1、#2、#3和#4中)。
以这种方式,将通道细流4102的四个副本(以及该通道细流中的各消息)存储在四个不同的Q节点上。通道细流的其它数量(例如,两个、三个、五个或其它合适数量)的副本也是可以的。在本说明中,四个副本形成副本链,其包括副本#1中的头部副本和副本#4中的尾部副本。在新消息被发布至通道细流4102的情况下,该消息首先被存储在Q节点208上的头部副本(副本#1)中。然后该消息沿下游被转发至Q节点502上的下一个相邻副本(副本#2)以供存储,然后被转发至Q节点504上的副本#3以供存储,直到该消息被存储在Q节点506上的尾部副本(副本#4)中为止。
除了按消息进行存储和转发之外,用于存储通道细流的副本的Q节点上运行的计算进程还可以按消息块存储和转发消息,如前面参考图4C所述。例如,将通道细流4102的副本#1存储在Q节点208上的计算进程可以分配存储器并存储例如200千字节的消息块(但是其它大小的消息块也是可以的),并且将消息块转发至链中的下一个相邻副本(副本#2)以供存储,以此类推,直到消息块被存储在Q节点506上的尾部副本(副本#4)中为止。
可以从通道细流4102的副本其中之一检索通道细流4102的消息并将其传递至通道foo的订户。图5B是用于检索消息传送系统100中所存储的消息的示例性方法550的数据流程图。例如,订户480可以将用于订阅通道的消息的请求发送至MX节点461,如前面参考图4B所述。配置管理器214可以向MX节点461提供针对通道细流4102的副本其中之一的读取授权。MX节点461可以从存储通道细流4102的副本的Q节点其中之一检索通道细流4102的消息,并将检索到的消息提供至订户480。例如,MX节点461可以从Q节点506上所存储的副本#4(尾部副本)检索消息(522)。作为另一示例,MX节点461可以从Q节点502上所存储的副本#2检索消息(524)。以这种方式,通道细流的多个副本(例如,通道细流4102的副本#1、#2、#3和#4)提供复制和冗余以防在通道细流的仅一个副本被存储在消息传送系统100中的情况下的故障。在各种实现中,配置管理器214可以通过将(例如,具有读取授权的)MX节点461定向至如下的特定Q节点来在存储通道细流4102的副本的Q节点之间平衡工作负载,其中该特定Q节点与存储通道细流4102的副本的其它Q节点相比,例如具有较少的当前读取和写入授权。
将特定副本存储在通道细流的副本链中的Q节点可能发生故障,例如,存储特定副本的Q节点上的计算进程可能冻结。Q节点的其它故障模式也是可能的。MX节点可以(例如,根据故障节点的无反应性来)检测故障节点,并将该故障节点报告给消息传送系统100中的配置管理器(例如,配置管理器214)。对等Q节点还可以检测故障的Q节点,并将该故障节点报告给配置管理器。例如,上游Q节点可以在下游Q节点无反应(例如,不能如前所述确认来自上游Q节点的消息存储请求)的情况下检测故障的下游Q节点。注意到,存储特定通道流的特定通道细流的副本的Q节点的故障不必针对特定通道细流或特定通道流的发布或订阅操作。源于另一通道细流或另一通道流的操作的故障也可以向配置管理器警告消息传送系统100中的Q节点的故障。
在将特定副本存储在通道细流的副本链中的Q节点发生故障的情况下,消息传送系统100中的配置管理器可以例如通过移除故障节点、或者通过将用于新副本的新节点插入链中来修复该链。图5C和5D是用于修复消息传送系统100中的通道细流的副本链的示例性方法的数据流程图。在图5C中,例如,在检测到Q节点504发生故障之后,配置管理器214可以通过将预期存储在Q节点502上的通道细流4102的副本#3中的消息重定向至Q节点506上的通道细流4102的副本#4,来修复副本链。在该示例中,消息(或消息块)首先从MX节点204发送至Q节点208以存储在通道细流4102的副本#1中(572)。然后消息被转发至Q节点502以存储在通道细流4102的副本#2中(574)。然后消息被转发至Q节点506以存储在通道细流4102的副本#4中(576)。Q节点506可以向配置管理器214发送指示消息已被成功存储的确认消息。
这里,故障节点还可能是存储副本链中的头部副本或尾部副本的节点。例如,如果Q节点208发生故障,则配置管理器214可以指示MX节点204首先向Q节点502发送消息以存储在通道细流4102的副本#2中。然后该消息被转发至链中的下一个相邻副本以供存储,直到该消息被存储在尾部副本中为止。
如果Q节点506发生故障,则配置管理器214可以修复通道细流4102的副本链,使得Q节点504上的副本#3变为链中的尾部副本。消息首先被存储在Q节点208上的副本#1中,随后被存储在Q节点502上的副本#2以及Q节点504上的副本#3中。然后Q节点504可以向配置管理器214发送指示消息已被成功存储的确认消息。
在图5D中,配置管理器214通过分配新的Q节点508来存储通道细流4102的副本链中的副本#5来替换故障节点Q 504。在该示例中,配置管理器214指示MX节点204将(来自发布者406的)消息发送至Q节点208以存储在通道细流4102的副本#1中(582)。然后消息被转发至Q节点502以存储在通道细流4102的副本#2中(584)。然后消息被转发至Q节点508以存储在通道细流4102的副本#5中(586)。然后消息被转发至Q节点506以存储在通道细流4102的副本#4中(588)。然后Q节点506可以向配置管理器214发送指示消息已被成功存储的确认消息。
图6是示出实时地对消息应用选择性过滤、搜索、变换、查询、聚合和变化以管理进入并通过各通道并去往各个订户的消息的传递的数据流程图600。在诸如智能电话、平板电脑和其它因特网连接装置等的客户端装置上操作应用的用户作为订户(例如,图4B中的订户480、图6中的订户602)。应用可以例如是消息的消费者,用于提供与新闻、交通、体育、天气、或依赖于归结到一个或多个主题和/或通道的发布消息的其它主题有关的实时信息。消息发布者604可以是任何因特网连接服务,其中因特网连接服务例如提供状态数据、事务数据、或订户602基于订阅而可用的其它信息。在一些版本中,发布者和通道之间的关系是1:1,即有且仅有一个发布者将消息提供到该特定通道中。在其它实例中,关系可以是多对一(多于一个发布者将消息提供到通道中)、一对多(发布者的消息被发送至多于一个通道)、或多对多(多于一个发布者将消息提供至多于一个通道)。通常,在订户订阅通道的情况下,他们会在所有消息数据一发布就接收到被发布至通道的所有消息和所有消息数据。然而,结果是许多订户可能接收到不仅仅是有用的数据(或需要进一步处理的数据)。针对数据的附加过滤或功能应用对订户应用提出了过度的处理要求,并且可能使优选格式的数据的呈现延迟。
可以通过例如在订户602订阅通道608时提供合适的查询指示来创建过滤器606。指定的过滤器606可以应用于发布到通道608的所有消息(例如,一次一个消息),并且可以在订户602接收到消息之前得到评价(例如,参见图6中的步骤2)。通过允许订户602先验地(即在订阅通道608时且在数据被接收到通道608中之前)创建查询指示,过滤和处理消息的负担移向数据源,并且可以在通道级别进行管理。作为结果,在消息被转发至订户602之前对该消息进行预过滤和/或预处理。再次地,查询指示无需基于传入消息的形式或实质的任何先验知识。查询指示可以用于预处理诸如(针对交通、健康护理、新闻、体育、天气等的)实时监视服务和仪表板(例如,工业监视应用、金融市场等)等的应用的数据,以过滤数据、汇总数据以及/或者检测异常。可以对各通道608应用一个或多个过滤器606。
查询指示可以实现实时搜索和查询,聚合或汇总数据,或者变换数据以供订户应用使用。在一些实施例(包括用于实现JSON格式化消息的实施例)中,可以使用查询指示来生成、解析和解释消息,并且预定义模式的缺少(与传统的基于RDBMS/SQL的应用不同)意味着查询指示可以适应变化的业务需求,而无需改变模式或应用层。这允许在通道内的消息级别选择性地应用查询指示,从而过滤和/或聚合通道内的消息。在一些实例中,可以在发布者级别应用查询——意味着从多于一个发布者接收消息的通道可以对来自特定发布者的消息应用特定过滤器。可以基于前向(即仅对新到达的消息)应用查询指示,以及/或者在一些情况下,可以对已经驻留在通道队列中的历史消息应用查询指示。
可以在PubSub服务的进入侧和外出侧中的任一个或两者处应用查询指示。在外出侧,查询指示用作针对消息通道的逐连接过滤器,并允许各订户管理其自己的独特的过滤器集。在进入侧,查询指示作为被应用于所有发布消息的集中式系统范围过滤器而操作。
为了说明而非限制的目的,可在消息进入期间应用的查询指示的示例包括:
·消息可以(例如,基于消息中的地理位置、或者基于消息中的某个值的散列函数而)被分发至多个通道或不同通道。
·消息可能由于垃圾邮件过滤或DoS规则(例如,限制发布者在给定时间段内可以发送的消息数)而被丢弃。
·可以在某一事件到达任意通道(例如,cpu_temp>阈值)时向admin通道发送警告消息。
为了说明而非限制的目的,可在消息外出期间应用的查询指示的示例包括:
·包含来自各种传感器的事件的通道,其中用户仅对数据源的子集感兴趣。
·简单聚合,其中系统报告诸如CPU使用、传感器温度等的实时事件,并且我们希望与装置报告次数或报告频率无关地(例如,按国家分组的average(cpu_load),max(温度),count(number_of_users)、count(number_of_messages))在短时间段内接收某种形式的聚合。
·变换,其中系统报告实时事件,并且元数据从主要是静态的外部表添加到实时事件中,例如,基于IP地址添加城市名称,将广告ID转换为营销活动ID或营销合作方ID。
·将默认值添加到事件流,其中这类值不存在于特定装置上。
·高级聚合,其中系统报告实时事件,并将一些主要是静态的外部表数据实时地组合到聚合中,例如,按合作方对广告点击进行分组并对事件的数量进行计数。
·对用户事件的数量进行计数,按a/b测试对小区分配进行分组。
在一些实施例中,查询指示可以用于定义索引或其它合适临时数据结构,然后可以在消息被接收到通道中时对其应用这些索引或临时数据结构,以允许重复使用数据元素作为可搜索元素。在这种情况下,可以保持查询频率以描述特定数据元素(一般情况下,或在给定时段内的)被查阅的次数或者如何使用该元素。如果在查询中使用数据元素的频率超过某个阈值,则可以存储索引以供随后在传入消息上使用,而在仅使用一次(或不经常使用)索引的其它实例中,可以丢弃该索引。在一些实例中,可以对创建索引之前已到达通道的消息应用查询指示。因此,消息不会根据查询指示中所描述的数据元素进行索引,而是无论如何都使用查询指示进行处理,而在创建索引之后到达的消息可以使用索引进行过滤和处理。对于跨越可能已经创建索引的时间的查询或其它订阅,在消息被接收到且利用索引进行处理时对消息应用查询指示的结果可以与对在接收到查询指示之前接收到的未索引消息应用查询指示的结果相组合。
为了说明而非限制的目的,这种过滤应用的一个使用实例是订阅了公共运输数据馈送(诸如跨城市的所有公交车的位置)的测绘应用。所发布的消息可以例如包括用于描述公交车的位置、状态、公交车代理商、ID号、路线号和路线名称的地理数据。如果不存在预定义查询指示,则客户端应用将接收所有公交车的单独消息。然而,可以提供用于过滤掉例如非活动路线和公交车、并且例如按代理商聚合公交车的计数的查询指示。订户应用实时接收过滤后的公交车数据,并且可以创建数据的报告、图表和其它用户定义呈现。当新数据被发布到通道时,可以基于(下面更详细地描述的)时段参数实时地更新报告。
可以以任何合适的格式或句法(例如,在订户订阅通道时)提供查询指示。例如,以下说明了样本订阅请求协议数据单元(PDU)的若干字段的结构,其中PDU关键字特定于向订阅请求添加过滤器:
在以上订阅请求PDU中,“channel”字段可以是订户想要订阅的通道的名称的值(例如,字符串或其它适当的值或指定)。“filter”字段可以提供查询指示或用于定义通道消息中的关键字/值的类型以返回给订户的其它合适过滤命令、语句或句法。“period”参数指定在将消息返回至订户之前保留这些消息的、例如以秒计量的时间段(例如,1~60的整数值,其默认值例如为1)。以下将详细讨论“period”参数。注意,订阅请求PDU可以包括任何其它合适的字段、参数或值。
查询指示的一个示例是“select”过滤器,该“select”过滤器针对所有(例如,“select.*”)或所选(例如,“select.name”)数据元素选择最新(或“顶部”)值。在以下的示例中,过滤器列示出作为订阅的一部分的查询指示中所发送的过滤器值,作为filter字段。消息数据列列出通道消息数据的输入以及作为输出被发送至客户端的消息数据。在该示例中,“extra”关键字的值不会出现在输出中,因为“select”过滤器只能返回第一级结果,而不返回任何嵌套的关键字值。
对于聚合函数,可以组合满足GROUP BY子句(clause)中所包含的查询指示的所有消息。然后,聚合值可以在聚合时段结束时作为单个消息发布到订户。聚合的消息的数量例如取决于在过滤器的时段值内在通道中接收到的消息的数量。例如,如果时段参数被设置为1、并且在一秒内接收到100个消息,则将所有100个消息聚合成单个消息以供发送至订户。作为示例,以下所示的查询指示包括用以在为1的时段内聚合按obj_id分组的对象的位置数据的过滤器:
SELECT*WHERE(<利用聚合函数的表达式>)GROUP BY obj_id在该示例中,对前一秒中发布的具有相同obj_id的所有消息进行分组并将其作为分批发送至订户。
在一些实施例中,MERGE(*)函数可以用于改变如何合并聚合消息数据。MERGE(*)函数可以返回一时间段内的传入消息的递归联合。合并功能可以例如用于跟踪对象的位置数据,并且订户对聚合消息集中所包含的所有关键字/值对的最新值感兴趣。以下语句示出MERGE(*)函数的示例性句法:
SELECT[expr][name,]MERGE(*)[.*][AS name][FROM expr][WHERE expr][HAVING expr]GROUP BY name
以下示例说明了可以如何在查询指示内将MERGE(*)函数应用于各种类型的通道消息。在以下示例中,过滤器列示出作为订阅请求的一部分包括在查询指示中的过滤器值,作为FILTER字段。消息数据列列出输入通道消息数据以及作为输出被发送至订户的结果消息数据。过滤器返回输入消息中所标识的关键字的最新值,其中字符串MERGE在输出消息数据中被标识为列名称。以下的第一个示例示出利用通配符的过滤器中的MERGE(*)函数,因为使用输入中的关键字在输出中作为列名称而返回消息数据。
下一个示例说明了使用通配符的过滤器中的MERGE(*)函数、以及值为MERGE的“AS”语句的使用。输出数据包括作为列名称的MERGE。
一般地,对于聚合函数以及仅包括SELECT(expr)语句的过滤器,只能存储和返回来自所接收到的上一个消息的消息数据中的任何JSON关键字的最新值。因此,如果所接收到的满足filter语句的最新消息缺失先前处理消息中所标识的关键字值,则该值不包括在聚合中,这可能导致数据丢失。然而,还包括MERGE(*)函数的过滤器可以将消息中出现的所有关键字的最新值保留至无限制的JSON对象深度。因此,可以在聚合中保留所有关键字值的最新版本。
MERGE(*)函数可用于确保在聚合时段期间出现在任何消息中的所有关键字的关联值也出现在最终聚合消息中。例如,通道可以在三个维度x、y和z中跟踪对象的物理位置。在一秒的聚合时段期间,向通道发布两个消息,其中一个消息仅具有两个参数:OBJ{x:1,y:2,z:3}和OBJ{x:2,y:3}。在第二个消息中,z值不变,并且不包括在第二个消息中。在不利用MERGE(*)函数的情况下,输出结果将是OBJ{x:2,y:3}。由于聚合时段期间的最后一个消息中不存在z值,因此z值不包括在最终聚合中。然而,在利用MERGE(*)函数的情况下,结果为OBJ{x:2,y:3,z:3}。
下表示出可用于根据数据的类型来聚合消息中的数据的一个规则集。对于数组,无需合并元素,而是可以针对聚合中的数组以所接收到的最后一个数组值重写JSON值。
查询指示可以包括一个或多个合适的过滤器命令、语句、函数或句法。为了说明而非限制的目的,除了SELECT和MERGE函数之外,查询指示还可以包括诸如ABS(expr)、AVG(expr)、COALESCE(a[,b…])、CONCAT(a[,b…])、COUNT(expr)、COUNT_DISTINCT(expr)、IFNULL(expr1,expr2)、JSON(expr)、MIN(expr[,expr1,…])、MAX(expr[,expr1,…])、SUBSTR(expr,expr1[,expr2])、SUM(expr)、MD5(expr)、SHA1(expr)、FIRST_VALUE(expr)OVER(ORDER BY expr1)、以及/或者LAST_VALUE(expr)OVER(ORDER BY expr1)等的过滤器语句或函数,其中“expr”可以是能够通过过滤器语句或函数进行处理的任何合适表达式,诸如SQL或类SQL表达式等。其它合适的过滤器命令、语句、函数或句法也可以用于查询指示。
根据本发明,未过滤查询可以在没有任何JSON或其它类似处理的情况下转译为至订户的消息的中间副本。包括SELECT过滤器命令(无聚合)的查询可以转译为中间过滤器。在使用JSON格式化消息的实例中,可以单独解析各消息,并且可以在各消息到达时直接对其执行任何WHERE子句,而无需创建索引或其它临时数据结构。如果消息通过WHERE子句过滤器,则SELECT子句将得到过滤后的消息,其中该过滤后的消息可被转换回其原始格式或结构(例如,JSON)并发送至订户。
诸如COUNT()、SUM()、AVG()等的聚合函数可以转译为中间聚合器。在使用JSON格式化消息的实例中,可以单独解析各消息,并且可以在单个消息到达时直接执行任何WHERE子句,而无需创建索引或其它临时数据结构。如果评价WHERE子句,则使用先前累积值和来自各消息的值来聚合传递这种标准的消息(例如,执行SELECT子句中的聚合,从而累积COUNT、SUM和AVG等)。针对各聚合时段(例如,每1秒)计算一次聚合(例如,AVG=SUM/COUNT),并且SELECT子句输出聚合消息,其中该聚合消息可被转换为其原始格式或结构(例如,JSON)并发送至订户。
可以将诸如GROUP BY、JOIN、HAVING等的更复杂聚合函数转译为散列表聚合器。与可以使用常量存储器的SELECT或其它类似函数不同,线性扩展的存储器需求可以取决于GROUP BY子句的结果。最多,按唯一值(例如,SSN等)进行分组可以得到针对各个消息的组,但是在大多数情况下,按公共数据元素(例如,user_id或其它重复值)进行分组可以得到少得多的组。实际上,对各消息(例如根据其JSON格式)进行解析。可以在各消息到达时直接对其执行WHERE子句,而不创建索引或其它临时结构。如果满足WHERE子句,则GROUP BY表达式可以直接计算并且用于构建针对组的散列关键字。可以执行SELECT子句中的聚合函数,使用特定于散列关键字(组)的先前累积值和来自各消息的值来累积COUNT、SUM、AVG或其它函数。对于各散列关键字(组),针对各聚合时段(例如,每1秒)计算一次聚合(例如,AVG=SUM/COUNT),并且SELECT子句可以输出针对各散列关键字的聚合消息,以转换回其原始格式或结构(例如,JSON)并发送至订户(例如,每个散列关键字(组)一个消息)。
在聚合时段受限(例如,1秒~60秒)并且网卡或其它硬件/吞吐速度可能受限(例如,10/gbps)的实施例中,整体最大存储器消耗可被计算为时间*速度(例如,每秒1GB,或者每分钟60GB)。因此,上限与订户数无关。在特定实现中,(例如,在多个客户端设置了多个过滤器的情况下)各消息仅需要解析一次并且仅在需要时基于查询指示进行解析,这是因为空过滤器无需解析消息。
参考图7A,订阅可以包括“时段”参数(一般例如以秒计量定义),并且在一些实施例中可以在1~60秒的范围内,但是其它时间增量和时间范围也是可以的。时段参数可以是纯顺序的(例如,有序的)和/或基于时间的(例如,时间的),并且包括在自描述的数据中,因此可用于查询和聚合等。例如,图7A示出在以1秒为时段的前三秒内根据本发明的过滤处理。在本示例中,订阅从t=0开始。针对各1秒时段期间接收到的所有消息应用根据查询指示创建的过滤器(例如,一次一个消息)。各时段的结果然后被分批并转发至订户。根据所使用的查询指示,可以在将消息数据发送至订户之前使用先前讨论的聚合函数来聚合消息。
在一些情况下,处理默认为仅将满足查询指示的新传入消息发送至订户。然而,订户可以用历史进行订阅并使用过滤器,使得被发送至订户的第一消息可以是应用了过滤器的历史消息。使用max_age和/或“下一个”参数的时段提供了允许检索和过滤历史消息的附加功能。
更特别地,随查询指示一起包括的max_age参数可以便于检索满足该参数的历史消息。图7B示出随查询指示一起提供的2秒(以1秒为时段)的max_age参数的示例。对在从t-2至t=0(t=0是订阅开始的时间)到达的来自通道的历史消息、以及在第一时段(从t=0至t+1)中到达的消息应用根据查询指示创建的过滤器。这些消息可以(作为组1)在单个分批中被发送至订户。针对各后续时段中的各消息(例如,从t+1至t+2内的消息,作为组2)应用过滤器,以对该时段内的满足查询指示的所有消息进行分批。各分批然后被转发至订户。
在订户利用过滤器用“下一个”参数订阅通道的情况下,对从下一个值直到该通道的当前消息流位置的所有消息应用过滤器,并且可以例如在单个分批中将结果发送至订户。例如,如图7C所示,随查询指示包括下一个参数(以1秒为时段)。下一个参数指示处理对从“下一个位置”直到当前流位置(例如,直到t=0)的各消息、以及第一时段中到达的消息(从t=0至t+1)应用根据查询指示创建的过滤器。这些消息可以(作为组1)在单个分批中被发送至订户。针对各后续时段中的各消息(例如,从t+1至t+2内的消息,作为组2)应用过滤器,以对该时段内的满足查询指示的所有消息进行分批。各分批然后被转发至订户。
在订户用下一个参数订阅、选择接收通道上的历史消息、并在订阅中包括过滤器的情况下,订户可以在多个分批中更新为当前消息流位置。图7D示出2秒的max_age参数(以1秒为时段)以及可组合为一个查询指示集的下一个参数的示例。对从历史结束到“下一个”订阅值(即,从下一个值之前的2秒直到下一个值)到达的通道中的历史消息、从下一个值到当前流位置(例如,直到t=0)的消息、以及在(从t=0至t+1的)第一时段内到达的消息应用根据查询指示创建的过滤器。这些消息可以(作为组1)在单个分批中被发送至订户。针对各后续时段中的各消息(例如,从t+1至t+2内的消息,作为组2)应用过滤器,以对该时段内的满足查询指示的所有消息进行分批。各分批然后被转发至订户。因此,历史消息可以与特定时段指示符处开始的消息相组合,并进行分批以供发送至订户。
查询指示可以定义可以如何以任何合适的方式对传入消息应用一个或多个过滤器。例如,可以对在各时段内到达的任何或所有消息、跨多个时段到达的任何或所有消息、在选定时段内到达的任何或所有消息、或者持续或基本上持续(即,不使用时段参数,使得在将消息返回给订户之前不保留消息)到达的任何或所有消息应用结果过滤器。这种过滤后的消息可以以任何合适的方式被分批,或者被单独地(例如,一次一个消息)发送至订户。特别地,过滤后的消息可以以任何合适的格式或句法被发送至订户。例如,以下说明了包含来自过滤请求的消息结果的样本通道PDU的多个字段的结构:
在以上通道PDU中,“channel”字段可以是订户已经订阅的通道名称的值(例如,字符串或其它适当的值或指定)。“next”字段可以提供在通道PDU中返回的消息分批的通道流位置。“messages”字段提供由指定过滤器的应用得到的消息的通道数据。可以在这种通道PDU中的“消息”字段内返回一个或多个消息。注意,通道PDU可以包括任何其它合适的字段、参数、值或数据。
图8是消息传送系统的发布者和订户所用的用于对所发布的消息应用查询指示的示例性方法的流程图。例如,该方法可以使用例如消息传送系统100的MX节点(例如,MX节点204、MX节点461)和Q节点(例如,Q节点212、Q节点208)来实现。该方法以从一个或多个订户接收查询指示(步骤802)开始。一个或多个订户订阅多个通道中的通道。查询指示可以实时地缓存和实现,或者在一些实例中存储在相应消息节点(例如,MX节点204)处。从一个或多个发布者接收消息(步骤804)。各消息与多个通道中的特定通道相关联。然后在接收到通道的消息时对该消息应用查询指示(步骤806)。将由查询指示的应用得到的消息发送至相应订户(步骤808)。由订户从通道接收到的消息因此限于满足查询指示的消息。
本说明书中所描述的主题和操作的实施例可以在数字电子电路中、或者在计算机软件、固件或硬件中实现,其中硬件包括本说明书中所公开的结构及其结构等同物、或者它们中的一个或多个的组合。本说明书中所描述的主题的实施例可被实现为一个或多个计算机程序,即计算机程序指令的一个或多个模块,其编码在计算机存储介质上以供数据处理设备执行或用于控制数据处理设备的操作。可选地或附加地,程序指令可被编码在人工生成的传播信号(例如,机器生成的电、光或电磁信号)上,其中该信号被生成用于对信息进行编码,从而传输到适当的接收器设备以供数据处理设备执行。计算机存储介质可以是计算机可读存储设备、计算机可读存储基板、随机或串行存取存储器阵列或装置、或者它们中的一个或多个的组合,或者被包括在其中。此外,虽然计算机存储介质不是传播信号,但是计算机存储介质可以是编码在人工生成的传播信号中的计算机程序指令的源或目的地。计算机存储介质也可以是一个或多个单独的物理组件或介质(例如,多个CD、磁盘、或其它存储装置),或者被包括在其中。
本说明中所描述的操作可被实现为数据处理设备对一个或多个计算机可读存储装置上所存储的或者从其它源接收到的数据所进行的操作。
术语“数据处理设备”包含用于处理数据的所有种类的设备、装置和机器,举例而言包括可编程处理器、计算机、片上系统或者前述的多个或组合。设备可以包括专用逻辑电路,例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除硬件以外,设备还可以包括为所考虑的计算机程序创建执行环境的代码,例如构成处理器固件、协议栈、数据库管理系统、操作系统、跨平台运行时环境、虚拟机或它们中的一个或多个的组合的代码。设备和执行环境可以实现各种不同的计算模型基础架构,诸如web服务、分布式计算和网格计算基础架构。
计算机程序(也称为程序、软件、软件应用、脚本或代码)可以以包括编译语言或解释语言、声明语言、过程语言或功能语言等的任何形式的编程语言来编写,并且其可以以任何形式进行部署,包括被部署为独立程序或者被部署为模块、组件、子例程、对象或者适合在计算环境中使用的其它单元。计算机程序可以但不必与文件系统中的文件相对应。程序可被存储在用于保存其它程序或数据(例如,标记语言资源中所存储的一个或多个脚本)的文件的一部分中,被存储在专用于所考虑的程序的单个文件中,或者被存储在多个协同文件(例如,用于存储一个或多个模块、子程序或代码的一部分的文件)中。计算机程序可被部署为在一个计算机上、或者在位于一个网站处或跨多个网站分布并且通过通信网络互连的多个计算机上执行。
本说明书中所描述的处理和逻辑流可以利用一个或多个可编程处理器来进行,其中这些一个或多个可编程处理器执行一个或多个计算机程序以通过对输入数据进行操作并生成输出来进行动作。处理和逻辑流也可以利用专用逻辑电路来进行,并且设备也可被实现为专用逻辑电路,其中该专用逻辑电路例如为FPGA(现场可编程门阵列)或ASIC(专用集成电路)。
举例而言,适合执行计算机程序的处理器包括通用微处理器和专用微处理器两者、以及任何种类的数字计算机中的任意一个或多个处理器。一般地,处理器将会从只读存储器或随机存取存储器或这两者接收指令和数据。计算机的必要元件是用于根据指令进行动作的处理器以及用于存储指令和数据的一个或多个存储器装置。一般地,计算机还将包括用于存储数据的一个或多个大容量存储装置(例如,磁盘、磁光盘、光盘、或固态驱动器等),或者可操作地连接以从一个或多个大容量存储装置接收数据或者向一个或多个大容量存储装置传输数据或者两者兼有。然而,计算机无需具有这种装置。此外,计算机可以嵌入在另一装置中,例如智能电话、移动音频或视频播放器、游戏机、全球定位系统(GPS)接收器或便携式存储装置(例如,通用串行总线(USB)闪存驱动器)等。适合存储计算机程序指令和数据的装置包括所有形式的非易失性存储器、介质和存储器装置,举例而言包括例如EPROM、EEPROM和闪存存储器装置等的半导体存储器装置、例如内部硬盘或可移动盘等的磁盘、磁光盘、以及CD-ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路补充或者并入专用逻辑电路中。
为了提供与用户的交互,本说明书中所描述的主题的实施例可以在计算机上实现,其中该计算机具有用于向用户显示信息的例如CRT(阴极射线管)或LCD(液晶显示器)监视器等的显示装置、以及用户可以向计算机提供输入所经由的键盘和例如鼠标、追踪球、触摸板或触控笔等的指示装置。其它种类的装置也可以用于提供与用户的交互;例如,被提供至用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、听觉反馈或触觉反馈;并且来自用户的输入可以以任何形式接收,包括声音、语音或触觉输入。另外,计算机可以通过向用户所使用的装置发送资源并且从该装置接收资源来与用户进行交互;例如,通过响应于从用户的客户端装置上的web浏览器接收到的请求向该web浏览器发送web页面,来与用户进行交互。
本说明书中所描述的主题的实施例可以在计算系统中实现,其中该计算系统包括后端组件(例如数据服务器等),或者包括中间组件(例如应用服务器等),或者包括前端组件(例如,具有用户能够与本说明书中所描述的主题的实现进行交互所经由的图形用户界面或Web浏览器的客户端计算机)、或者包括一个或多个这样的前端组件、中间组件或后端组件的任意组合。系统的组件可以通过任何形式或介质的数字数据通信(例如,通信网络)而互连。通信网络的示例包括局域网(“LAN”)和广域网(“WAN”)、互联网(例如,因特网)、以及对等网络(例如,自组织对等网络等)。
计算系统可以包括客户端和服务器。客户端和服务器一般彼此远离,并且通常通过通信网络进行交互。客户端和服务器的关系借助于运行在各个计算机上并且彼此具有客户端-服务器关系的计算机程序而产生。在一些实施例中,服务器将数据(例如,HTML页面)发送至客户端装置(例如,为了向与客户端装置进行交互的用户显示数据并从该用户接收用户数据)。可以在服务器处从客户端装置接收该客户端装置处所生成的数据(例如,用户交互的结果)。
一个或多个计算机的系统可被配置为通过在系统上安装操作中使系统进行动作的软件、固件、硬件或它们的组合,来进行特定的操作或动作。一个或多个计算机程序可被配置为通过包括在由数据处理设备执行时使该设备进行动作的指令,来进行特定的操作或动作。
虽然本说明书包含许多特定实现细节,但这些细节不应被解释为对所要求保护的本发明的范围的限制,而应被解释为特定于特定发明的特定实施例的特征描述。本说明书在单独实施例的上下文中所描述的某些特征还可以在单个实施例中组合实现。相反,在单个实施例的上下文中所描述的各种特征还可以在多个实施例中单独实现或者以任何合适的子组合实现。此外,尽管以上可以将特征描述为以某些组合起作用并且甚至最初如此要求保护这些特征,但是在一些情况下可以从组合中消除所要求保护的组合中的一个或多个特征,并且所要求保护的组合可以针对子组合或子组合的变形。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求以所示的特定顺序或者以序列顺序来进行这些操作、或者进行所有所示操作以实现期望结果。在某些情形中,多任务和并行处理可以是有利的。此外,上述实施例中的各种系统组件的分离不应被理解为在所有实施例中都要求这种分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中或者封装到多个软件产品中。
因此,已经描述了主题的特定实施例。其它实施例在所附权利要求书的范围内。在一些情况下,权利要求书中所列举的动作可以以不同的顺序进行,并且仍然实现期望结果。另外,附图中所描绘的处理并非必须需要所示的特定顺序或序列顺序来实现期望的结果。在某些实现中,多任务和并行处理可以是有利的。
Claims (20)
1.一种计算机实现的方法,包括:
从订户客户端接收查询指示,其中所述订户客户端订阅多个通道中的通道;
从多个发布者客户端接收多个消息,其中各消息与所述多个通道中的特定通道相关联;
在接收到所述通道的多个消息时对所述多个消息应用所述查询指示;以及
将由应用所述查询指示得到的消息发送至所述订户客户端,其中由所述订户客户端从所述通道接收到的消息限于满足所述查询指示的消息。
2.根据权利要求1所述的方法,其中,在接收到所述通道的多个消息时对所述多个消息应用所述查询指示包括:
基于一个或多个发布者客户端来过滤所述消息。
3.根据权利要求1所述的方法,其中,在接收到所述通道的多个消息时对所述多个消息应用所述查询指示包括:
在接收到所述通道的多个消息时对所述多个消息应用过滤器、函数和聚合中的一个或多个。
4.根据权利要求1所述的方法,还包括:
基于所述查询指示来建立索引;以及
在接收到所述通道的多个消息时对所述多个消息应用所述查询指示的情况下,使用所述索引。
5.根据权利要求1所述的方法,还包括:
保持查询频率,其中所述查询频率用于描述所述查询指示查阅所述消息内的特定数据元素的次数。
6.根据权利要求5所述的方法,还包括:
在所述查询频率超过阈值的情况下存储索引,否则在所述索引在定义时段内得到应用之后丢弃该索引。
7.根据权利要求4所述的方法,还包括:
对在接收到所述查询指示之前接收到的未索引消息应用所述查询指示。
8.根据权利要求7所述的方法,还包括:
将在接收到所述多个消息时对所述多个消息应用所述查询指示的结果与对在接收到所述查询指示之前接收到的未索引消息应用所述查询指示的结果相组合。
9.根据权利要求1所述的方法,其中,来自所述订户客户端的查询指示包括针对所述通道的消息的历史的请求。
10.根据权利要求9所述的方法,其中,在接收到所述通道的多个消息时对所述多个消息应用所述查询指示包括:
对所述通道的消息的历史应用过滤器、函数和聚合中的一个或多个。
11.一种系统,包括:
一个或多个计算机处理器,其被编程为进行包括以下各项的操作:
从订户客户端接收查询指示,其中所述订户客户端订阅多个通道中的通道;
从多个发布者客户端接收多个消息,其中各消息与所述多个通道中的特定通道相关联;
在接收到所述通道的多个消息时对所述多个消息应用所述查询指示;以及
将由应用所述查询指示得到的消息发送至所述订户客户端,其中由所述订户客户端从所述通道接收到的消息限于满足所述查询指示的消息。
12.根据权利要求11所述的系统,其中,在接收到所述通道的多个消息时对所述多个消息应用所述查询指示的操作包括:
在接收到所述通道的多个消息时对所述多个消息应用过滤器、函数和聚合中的一个或多个。
13.根据权利要求11所述的系统,其中,所述操作还包括:
基于所述查询指示来建立索引;以及
在接收到所述通道的多个消息时对所述多个消息应用所述查询指示的情况下,使用所述索引。
14.根据权利要求11所述的系统,其中,所述操作还包括:
保持查询频率,其中所述查询频率用于描述所述查询指示查阅所述消息内的特定数据元素的次数。
15.根据权利要求14所述的系统,其中,所述操作还包括:
在所述查询频率超过阈值的情况下存储索引,否则在所述索引在定义时段内得到应用之后丢弃该索引。
16.根据权利要求13所述的系统,其中,所述操作还包括:
对在接收到所述查询指示之前接收到的未索引消息应用所述查询指示。
17.根据权利要求16所述的系统,其中,所述操作还包括:
将在接收到所述多个消息时对所述多个消息应用所述查询指示的结果与对在接收到所述查询指示之前接收到的未索引消息应用所述查询指示的结果相组合。
18.根据权利要求11所述的系统,其中,来自所述订户客户端的查询指示包括针对所述通道的消息的历史的请求。
19.根据权利要求18所述的系统,其中,在接收到所述通道的多个消息时对所述多个消息应用所述查询指示的操作包括:
对所述通道的消息的历史应用过滤器、函数和聚合中的一个或多个。
20.一种物品,包括:
非暂时性机器可读介质,其上存储有指令,所述指令在由一个或多个计算机处理器执行时使所述计算机处理器进行包括以下各项的操作:
从订户客户端接收查询指示,其中所述订户客户端订阅多个通道中的通道;
从多个发布者客户端接收多个消息,其中各消息与所述多个通道中的特定通道相关联;
在接收到所述通道的多个消息时对所述多个消息应用所述查询指示;以及
将由应用所述查询指示得到的消息发送至所述订户客户端,其中由所述订户客户端从所述通道接收到的消息限于满足所述查询指示的消息。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/442,036 US10270726B2 (en) | 2017-02-24 | 2017-02-24 | Selective distribution of messages in a scalable, real-time messaging system |
US15/442,036 | 2017-02-24 | ||
PCT/US2018/019256 WO2018156783A1 (en) | 2017-02-24 | 2018-02-22 | Selective distribution of messages in a scalable, real-time messaging system |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110546923A true CN110546923A (zh) | 2019-12-06 |
Family
ID=61563553
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880026981.3A Pending CN110546923A (zh) | 2017-02-24 | 2018-02-22 | 可扩展实时消息传送系统中的消息的选择性分发 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10270726B2 (zh) |
EP (1) | EP3586480A1 (zh) |
CN (1) | CN110546923A (zh) |
WO (1) | WO2018156783A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111290861A (zh) * | 2020-01-20 | 2020-06-16 | 北京字节跳动网络技术有限公司 | 消息处理方法、装置及电子设备 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2532490B (en) * | 2014-11-21 | 2017-02-22 | Ibm | Publish/subscribe messaging using message structure |
US20190028414A1 (en) * | 2017-07-19 | 2019-01-24 | N.Io Innovation, Llc | System And Method For Providing a Communications Layer to Enable Full Participation in a Distributed Computing Environment That Uses Multiple Message Types |
US20190354379A1 (en) | 2018-05-17 | 2019-11-21 | Mz Ip Holdings, Llc | System and method for dynamically and selectively releasing features and content in an application client |
US11086851B2 (en) | 2019-03-06 | 2021-08-10 | Walmart Apollo, Llc | Systems and methods for electronic notification queues |
US11188671B2 (en) | 2019-04-11 | 2021-11-30 | Bank Of America Corporation | Distributed data chamber system |
EP3942777B1 (de) * | 2019-05-06 | 2023-02-22 | Siemens Aktiengesellschaft | Konfigurieren eines kommunikationsnetzwerks für das zyklische übertragen von nachrichten |
CN110247957A (zh) * | 2019-05-22 | 2019-09-17 | 东软集团股份有限公司 | 网络系统及其数据传输方法、电子设备 |
CN110377376B (zh) * | 2019-06-05 | 2022-06-17 | 平安科技(深圳)有限公司 | 界面消息刷新方法、装置、计算机装置及可读存储介质 |
US11580165B2 (en) * | 2019-08-06 | 2023-02-14 | Twitter, Inc. | Event producer system of a messaging platform for delivering real-time messages |
US11055156B2 (en) | 2019-08-20 | 2021-07-06 | International Business Machines Corporation | Processing of a message stream |
US11398943B1 (en) * | 2020-06-23 | 2022-07-26 | Amazon Technologies, Inc. | Negative caching for event notifications |
CN112069438B (zh) * | 2020-09-10 | 2023-12-22 | 北京五八信息技术有限公司 | 消息合并方法、消息处理方法和装置、设备和介质 |
US11178091B1 (en) * | 2020-11-12 | 2021-11-16 | Chicago Mercantile Exchange Inc. | Message ordering buffer |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040019645A1 (en) * | 2002-07-26 | 2004-01-29 | International Business Machines Corporation | Interactive filtering electronic messages received from a publication/subscription service |
US20040236780A1 (en) * | 2003-02-25 | 2004-11-25 | Michael Blevins | Systems and methods for client-side filtering of subscribed messages |
US20060056628A1 (en) * | 2002-12-12 | 2006-03-16 | International Business Machines Corporation | Methods, apparatus and computer programs for processing alerts and auditing in a publish/subscribe system |
US20070245018A1 (en) * | 2006-04-12 | 2007-10-18 | International Business Machines Corporation | Dynamic access control in a content-based publish/subscribe system with delivery guarantees |
CN102142971A (zh) * | 2010-01-29 | 2011-08-03 | 新奥特(北京)视频技术有限公司 | 实现订阅-收集机制的监控系统及监控方法 |
CN105519071A (zh) * | 2013-05-21 | 2016-04-20 | 三星电子株式会社 | 使用逻辑信道进行通信的电子装置 |
CN106341305A (zh) * | 2015-07-07 | 2017-01-18 | 国际商业机器公司 | 发布/订阅系统中对消息的控制 |
Family Cites Families (107)
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 |
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 |
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 |
ATE414942T1 (de) | 1999-02-26 | 2008-12-15 | 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 |
US20020010765A1 (en) | 2000-07-21 | 2002-01-24 | John Border | Method and system for prioritizing traffic in a network |
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 |
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 |
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 |
EP1851646A2 (en) | 2005-01-06 | 2007-11-07 | 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 |
US8127021B2 (en) | 2006-03-18 | 2012-02-28 | Metafluent, Llc | Content aware routing of subscriptions for streaming and static data |
EP2030414B1 (en) | 2006-06-12 | 2018-04-04 | Cloudsoft Corporation Limited | Self-managed distributed mediation networks |
US7716201B2 (en) * | 2006-08-10 | 2010-05-11 | Yahoo! Inc. | Method and apparatus for reconstructing a search query |
US8429702B2 (en) | 2006-09-11 | 2013-04-23 | At&T Intellectual Property I, L.P. | Methods and apparatus for selecting and pushing customized electronic media content |
US9270944B2 (en) | 2007-02-14 | 2016-02-23 | Time Warner Cable Enterprises Llc | Methods and apparatus for content delivery notification and management |
US8396959B2 (en) | 2007-03-21 | 2013-03-12 | Inetco Systems Limited | Method and system for monitoring messages passed over a network |
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 |
US7836123B2 (en) | 2008-05-13 | 2010-11-16 | International Business Machines Corporation | System and method for non-HTTP session based publish/subscribe support using pre-emptive subscriptions |
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 |
US8539359B2 (en) | 2009-02-11 | 2013-09-17 | Jeffrey A. Rapaport | Social network driven indexing system for instantly clustering people with concurrent focus on same topic into on-topic chat rooms and/or for generating on-topic search results tailored to user preferences regarding topic |
US8301687B2 (en) | 2009-03-31 | 2012-10-30 | Software Ag | Systems and/or methods for standards-based messaging |
US20130254314A1 (en) | 2009-06-09 | 2013-09-26 | Edmond K. Chow | Digital content delivery |
US8392555B2 (en) | 2009-06-01 | 2013-03-05 | International Business Machines Corporation | Push-back mechanism for pub/sub brokers |
US20110060812A1 (en) | 2009-09-10 | 2011-03-10 | Level 3 Communications, Llc | Cache server with extensible programming framework |
US8375095B2 (en) | 2009-12-22 | 2013-02-12 | Microsoft Corporation | Out of order durable message processing |
US8346935B2 (en) | 2010-01-15 | 2013-01-01 | Joyent, Inc. | Managing hardware resources by sending messages amongst servers in a data center |
JP5340186B2 (ja) | 2010-01-21 | 2013-11-13 | アラクサラネットワークス株式会社 | パケット中継装置及びパケットを中継する方法 |
US10242159B2 (en) * | 2010-01-22 | 2019-03-26 | Deka Products Limited Partnership | System and apparatus for electronic patient care |
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 |
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 |
WO2013090699A1 (en) | 2011-12-14 | 2013-06-20 | Level 3 Communications, Llc | Content delivery network |
CN103999068B (zh) | 2011-12-23 | 2016-11-23 | 英特尔公司 | 共享的发送队列 |
US20130290449A1 (en) | 2012-04-25 | 2013-10-31 | Origami Labs, Inc. | Privacy-based social content broadcast systems and methods |
US9451298B2 (en) | 2012-07-02 | 2016-09-20 | Sony Corporation | Transmission device, transmission method, and network apparatus |
US20140114738A1 (en) | 2012-10-24 | 2014-04-24 | Erick Tseng | Automatic Check-In Using Social-Networking Information |
US20140237057A1 (en) | 2013-02-21 | 2014-08-21 | Genesys Telecommunications Laboratories, Inc. | System and method for processing private messages in a contact center |
US9043822B1 (en) | 2013-03-14 | 2015-05-26 | Cox Communications, Inc. | Remote time shift buffering with shadow tuning |
US8850490B1 (en) | 2013-05-07 | 2014-09-30 | Google Inc. | Consuming paid media in an internet-based content platform |
US9767138B2 (en) | 2013-06-12 | 2017-09-19 | Oracle International Corporation | In-database sharded queue for a shared-disk database |
US8824664B1 (en) | 2013-06-13 | 2014-09-02 | Genesys Telecommunications Laboratories, Inc. | System and method for controlling lifespan of interaction requests |
US9342554B2 (en) | 2013-07-05 | 2016-05-17 | Facebook, Inc. | Techniques to generate mass push notifications |
US9813515B2 (en) | 2013-10-04 | 2017-11-07 | Akamai Technologies, Inc. | Systems and methods for caching content with notification-based invalidation with extension to clients |
US9729653B2 (en) | 2014-01-23 | 2017-08-08 | Software Ag | Systems and/or methods for automatically tuning a delivery system for transmission of large, volatile data |
US20150262151A1 (en) | 2014-03-11 | 2015-09-17 | Nibl, Inc. | Access Control System for Online Content |
US9450895B2 (en) | 2014-03-28 | 2016-09-20 | Futurewei Technologies, Inc. | Context-aware dynamic policy selection for messaging behavior |
US20150317676A1 (en) | 2014-05-01 | 2015-11-05 | Vibe-It LLC | Systems and methods for monitoring and responding to customer feedback |
US20150379160A1 (en) | 2014-06-29 | 2015-12-31 | Yaniv AVRAHAM | Apparatus and methods for transferring focus control and related return content within a graphical user interface |
US10033784B2 (en) | 2014-07-14 | 2018-07-24 | International Business Machines Corporation | Predictive management of offline storage content for mobile applications and optimized network usage for mobile devices |
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 |
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 |
-
2017
- 2017-02-24 US US15/442,036 patent/US10270726B2/en not_active Expired - Fee Related
-
2018
- 2018-02-22 WO PCT/US2018/019256 patent/WO2018156783A1/en unknown
- 2018-02-22 CN CN201880026981.3A patent/CN110546923A/zh active Pending
- 2018-02-22 EP EP18708875.2A patent/EP3586480A1/en not_active Withdrawn
-
2019
- 2019-03-12 US US16/351,210 patent/US20190207891A1/en not_active Abandoned
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040019645A1 (en) * | 2002-07-26 | 2004-01-29 | International Business Machines Corporation | Interactive filtering electronic messages received from a publication/subscription service |
US20060056628A1 (en) * | 2002-12-12 | 2006-03-16 | International Business Machines Corporation | Methods, apparatus and computer programs for processing alerts and auditing in a publish/subscribe system |
US20040236780A1 (en) * | 2003-02-25 | 2004-11-25 | Michael Blevins | Systems and methods for client-side filtering of subscribed messages |
US20070245018A1 (en) * | 2006-04-12 | 2007-10-18 | International Business Machines Corporation | Dynamic access control in a content-based publish/subscribe system with delivery guarantees |
CN102142971A (zh) * | 2010-01-29 | 2011-08-03 | 新奥特(北京)视频技术有限公司 | 实现订阅-收集机制的监控系统及监控方法 |
CN105519071A (zh) * | 2013-05-21 | 2016-04-20 | 三星电子株式会社 | 使用逻辑信道进行通信的电子装置 |
CN106341305A (zh) * | 2015-07-07 | 2017-01-18 | 国际商业机器公司 | 发布/订阅系统中对消息的控制 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111290861A (zh) * | 2020-01-20 | 2020-06-16 | 北京字节跳动网络技术有限公司 | 消息处理方法、装置及电子设备 |
CN111290861B (zh) * | 2020-01-20 | 2023-08-25 | 北京字节跳动网络技术有限公司 | 消息处理方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
US10270726B2 (en) | 2019-04-23 |
WO2018156783A1 (en) | 2018-08-30 |
US20180248825A1 (en) | 2018-08-30 |
EP3586480A1 (en) | 2020-01-01 |
US20190207891A1 (en) | 2019-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10270726B2 (en) | Selective distribution of messages in a scalable, real-time messaging system | |
US20180337971A1 (en) | System and method for efficiently distributing computation in publisher-subscriber networks | |
US10484190B2 (en) | Managing channels in an open data ecosystem | |
US9876745B2 (en) | Systems and methods for transferring message data | |
US10630628B2 (en) | Systems and methods for managing vehicles | |
US20180248977A1 (en) | Selective distribution of messages in a publish-subscribe system | |
JP2018525760A (ja) | スケーラブルなリアルタイムメッセージングシステム | |
US10447623B2 (en) | Data storage systems and methods using a real-time messaging system | |
US20180337840A1 (en) | System and method for testing filters for data streams in publisher-subscriber networks | |
US20190005534A1 (en) | Providing media assets to subscribers of a messaging system | |
US20180248772A1 (en) | Managing intelligent microservices in a data streaming ecosystem | |
US20190028501A1 (en) | Anomaly detection on live data streams with extremely low latencies | |
US20190288969A1 (en) | Providing video to subscribers of a messaging system | |
US20180357486A1 (en) | System and method for analyzing video frames in a messaging system | |
US20190297131A1 (en) | System and Method for Querying and Updating a Live Video Stream Using a Structured Query Language | |
JP2019532399A (ja) | スケーラブルメッセージングシステムにおけるデータ複製 | |
US20190293433A1 (en) | System and method for indoor position determination | |
US20180367583A1 (en) | System and method for providing a video stream and metadata over parallel channels | |
US20170339086A1 (en) | Efficient message exchange system |
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: 20191206 |
|
WD01 | Invention patent application deemed withdrawn after publication |