CN109964456A - 可扩展实时消息传送系统 - Google Patents

可扩展实时消息传送系统 Download PDF

Info

Publication number
CN109964456A
CN109964456A CN201780065516.6A CN201780065516A CN109964456A CN 109964456 A CN109964456 A CN 109964456A CN 201780065516 A CN201780065516 A CN 201780065516A CN 109964456 A CN109964456 A CN 109964456A
Authority
CN
China
Prior art keywords
node
channel
trustship
load
message
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201780065516.6A
Other languages
English (en)
Inventor
L·瓦尔金
F·E·林德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sarto World LLC
Machine Zone Inc
Original Assignee
Sarto World LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sarto World LLC filed Critical Sarto World LLC
Publication of CN109964456A publication Critical patent/CN109964456A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/04Real-time or near real-time messaging, e.g. instant messaging [IM]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/21Monitoring or handling of messages
    • H04L51/214Monitoring or handling of messages using selective forwarding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1004Server selection for load balancing
    • H04L67/1008Server selection for load balancing based on parameters of servers, e.g. available memory or workload

Abstract

一种包括编码在计算机存储介质上的计算机程序的方法、系统和设备,用于平衡发布‑订阅系统中的负载。示例方法包括:至少部分基于负载数据来从多个托管节点中选择第一托管节点,所述负载数据是从表示所述多个托管节点上的负载的节点特定的数据和表示与通道相关联的负载的通道特定的数据的至少之一中选择的;将用以暂时托管所述通道的一部分的请求发送至所述第一托管节点;利用所述第一托管节点,通过暂时存储发布到所述通道的一个或多个消息、并且将向所述一个或多个消息的访问暂时提供至向所述通道的多个订户,来暂时托管通道部分;接收用以访问所述通道部分的请求;以及授予用以访问所述通道部分的许可。

Description

可扩展实时消息传送系统
相关申请的交叉引用
本申请要求2016年8月23日提交的美国专利申请15/244,380的优先权,其全部内容通过引用而被包含于此。
背景技术
本说明书涉及数据通信系统,特别地涉及用于实现实时可扩展发布-订阅消息传送的系统。
发布-订阅模式(或者“PubSub”)是利用软件系统实现的数据通信消息传送布置,其中,所谓的发布者将消息发布到主题,并且所谓的订户接收与他们所订阅的特定主题有关的消息。每个主题可以存在一个或多个发布者,并且发布者一般不知道什么样的订户(如果有的话)将接收到所发布的消息。一些PubSub系统不缓存消息或者具有小的缓存,这意味着订户可能不会接收到在订阅特定主题之前所发布的消息。在消息发布激增期间、或者随着特定主题的订户的数量增加,PubSub系统可能易受到性能不稳定性的影响。
发明内容
一般来说,本说明书所述的主题的一个方面可以体现在计算机实现的用于发布-订阅系统的负载平衡方法中。所述方法包括:至少部分基于负载数据来从多个托管节点中选择第一托管节点,所述负载数据是从表示所述多个托管节点上的负载的节点特定的数据和表示与通道相关联的负载的通道特定的数据的至少之一中选择的;将用以暂时托管所述通道的一部分的请求发送至所述第一托管节点;利用所述第一托管节点,通过暂时存储发布到所述通道的一个或多个消息、并且将向所述一个或多个消息的访问暂时提供至向所述通道的多个订户,来暂时托管通道部分;接收用以访问所述通道部分的请求;以及授予用以访问所述通道部分的许可。
在特定示例中,所述节点特定的数据包括一个或多个负载度量,所述负载度量可以是或者包括,例如:各个托管节点正暂时托管的通道部分的数量;有许可访问各个托管节点的接口节点的数量;各个托管节点的数据接收速率;各个托管节点的数据发送速率;各个托管节点的存储利用率;以及/或者各个托管节点的处理速率。所述方法可以包括从所述多个托管节点接收所述节点特定的数据的至少一部分。替代地或者附加地,所述方法可以包括至少部分基于所接收到的用以访问通道部分的请求以及授予访问通道部分的许可,来确定所述节点特定的数据的至少一部分。
在一些示例中,所述通道特定的数据包括一个或多个负载度量,所述负载度量可以是或者包括,例如:向所述通道的订户的数量;向所述通道的发布者的数量;向所述通道发布消息的速率;从所述通道读取消息的速率;有许可访问所述通道的接口节点的数量;以及/或者所述通道的通道部分大小。所述方法可以包括从托管节点和接口节点至少之一接收所述通道特定的数据的至少一部分。至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:至少部分基于所述节点特定的数据,来判断为在所述托管节点上的各个负载中所述第一托管节点上的负载最低;以及至少部分基于该判断来选择所述第一托管节点。在一些实例下,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:至少部分基于所述节点特定的数据,来判断为所述第一托管节点上的负载低于阈值负载水平;以及至少部分基于该判断来选择所述第一托管节点。
在各种实现中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:至少部分基于所述节点特定的数据中的与所述第一托管节点相对应的部分和所述通道特定的数据中的与所述通道相对应的部分,来确定将由所述第一托管节点托管所述通道的部分产生的所述第一托管节点上的预期负载;判断为所述第一托管节点上的预期负载低于阈值负载水平;以及至少部分基于判断为所述第一托管节点上的预期负载低于所述阈值负载水平,来选择所述第一托管节点。所述通道部分可以包括所述通道的第一部分,所述通道可以包括第二部分,以及至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:判断为所述第一托管节点托管所述通道的第二部分;判断为所述第一托管节点上的负载低于阈值负载水平;以及至少部分基于判断为所述第一托管节点托管所述通道的第二部分并且所述第一托管节点上的负载低于所述阈值负载水平,来选择所述第一托管节点。
在特定示例中,所述通道部分包括所述通道的第一部分,所述通道还包括第二部分,以及至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:判断为第二托管节点托管所述通道的第二部分;判断为所述第二托管节点上的负载高于阈值负载水平;判断为所述第一托管节点上的负载低于所述阈值负载水平;以及至少部分基于判断为所述第二托管节点上的负载高于所述阈值负载水平并且所述第一托管节点上的负载低于所述阈值负载水平,来选择所述第一托管节点。在一个示例中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:至少部分基于所述通道特定的数据的一部分,来确定与托管所述通道部分相关联的预期负载;至少部分基于所述节点特定的数据以及与托管所述通道部分相关联的预期负载,来判断为将所述通道部分托管在所述第一托管节点上将降低所述托管节点之间的负载分布的不均等;以及至少部分基于判断为将所述通道部分托管在所述第一托管节点上将降低所述托管节点之间的负载分布的不均等,来选择所述第一托管节点。
在另一方面中,本说明的主题涉及一种具有接口节点、通道管理节点和多个托管节点的发布-订阅系统。所述系统能够操作以进行包括以下的操作:至少部分基于负载数据来从所述多个托管节点中选择第一托管节点,所述负载数据是从表示所述多个托管节点上的负载的节点特定的数据和表示与通道相关联的负载的通道特定的数据的至少之一中选择的;将用以暂时托管所述通道的一部分的请求发送至所述第一托管节点,其中所述第一托管节点通过暂时存储发布至所述通道的一个或多个消息、并且将向所述一个或多个消息的访问暂时提供至向所述通道的多个订户,来暂时托管通道部分;从所述接口节点接收用以访问所述通道部分的请求;以及将用以访问所述通道部分的许可授予至所述接口节点。
在各种实例中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作包括:至少部分基于所述节点特定的数据,来判断为在所述托管节点上的各个负载中所述第一托管节点上的负载最低;以及至少部分基于该判断来选择所述第一托管节点。至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作可以包括:至少部分基于所述节点特定的数据,来判断为所述第一托管节点上的负载低于阈值负载水平;以及至少部分基于该判断来选择所述第一托管节点。在一些示例中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作包括:至少部分基于所述节点特定的数据中的与所述第一托管节点相对应的部分和所述通道特定的数据中的与所述通道相对应的部分,来确定将由所述第一托管节点托管所述通道的部分产生的所述第一托管节点上的预期负载;判断为所述第一托管节点上的预期负载低于阈值负载水平;以及至少部分基于判断为所述第一托管节点上的预期负载低于所述阈值负载水平,来选择所述第一托管节点。
在特定实现中,所述通道部分包括所述通道的第一部分,所述通道还包括第二部分,以及至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作包括:判断为所述第一托管节点托管所述通道的第二部分;判断为所述第一托管节点上的负载低于阈值负载水平;以及至少部分基于判断为所述第一托管节点托管所述通道的第二部分并且所述第一托管节点上的负载低于所述阈值负载水平,来选择所述第一托管节点。在一些实例下,所述通道部分包括所述通道的第一部分,所述通道还包括第二部分,以及至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作包括:判断为第二托管节点托管所述通道的第二部分;判断为所述第二托管节点上的负载高于阈值负载水平;判断为所述第一托管节点上的负载低于所述阈值负载水平;以及至少部分基于判断为所述第二托管节点上的负载高于所述阈值负载水平并且所述第一托管节点上的负载低于所述阈值负载水平,来选择所述第一托管节点。在一个示例中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作包括:至少部分基于所述通道特定的数据的一部分,来确定与托管所述通道部分相关联的预期负载;至少部分基于所述节点特定的数据以及与托管所述通道部分相关联的预期负载,来判断为将所述通道部分托管在所述第一托管节点上将降低所述托管节点之间的负载分布的不均等;以及至少部分基于判断为将所述通道部分托管在所述第一托管节点上将降低所述托管节点之间的负载分布的不均等,来选择所述第一托管节点。
在另一方面中,本说明书的主题涉及一种制品,包括非暂时性机器可读介质,其上存储了在由一个或多个计算机执行时使所述计算机进行包括以下的操作的指令:至少部分基于负载数据来从多个托管节点中选择第一托管节点,所述负载数据是从表示所述多个托管节点上的负载的节点特定的数据和表示与通道相关联的负载的通道特定的数据的至少之一中选择的;将用以暂时托管所述通道的一部分的请求发送至所述第一托管节点;利用所述第一托管节点,通过暂时存储发布到所述通道的一个或多个消息、并且将向所述一个或多个消息的访问暂时提供至向所述通道的多个订户,来暂时托管通道部分;接收用以访问所述通道部分的请求;以及授予用以访问所述通道部分的许可。
针对所给出的本发明的方面所述的实施例或示例的元素可以用在本发明的其它方面的各种实施例或示例中。例如,设想从属于一个独立权利要求的从属权利要求的特征可以用在任何其它独立权利要求的设备、系统和/或方法中。
在附图和以下的描述中详细阐述了本说明书中所描述的主题的一个或多个实施例。根据说明书、附图和权利要求,本主题的其它特征、方面和优点将变得明显。
附图说明
图1A示出支持PubSub通信模式的示例性系统。
图1B示出示例性客户端装置上的软件的功能层。
图2是示例性消息传送系统的图。
图3A是用于将数据写入通道细流(streamlet)的示例性方法的数据流图。
图3B是用于从通道细流读取数据的示例性方法的数据流图。
图4A是用于将消息发布到消息传送系统的通道的示例性方法的数据流图。
图4B是用于订阅消息传送系统的通道的示例性方法的数据流图。
图4C是用于存储消息传送系统的通道的消息的示例性数据结构。
图5是用于存储消息传送系统的消息的示例性方法的流程图。
具体实施方式
图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节点的负载移除。Q节点在这里也可被称为“托管节点”。MX节点在这里也可被称为“接口节点”。
在示例性消息传送系统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)。
如前面参考图2所述,消息传送系统100可以包括多个通道管理器(例如,通道管理器214、215)。多个通道管理器提供弹性并防止单点故障。例如,一个通道管理器可以将其维护的通道细流和当前授予的列表复制给另一“从属”通道管理器。作为另一示例,多个通道管理器可以使用诸如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算法等的其它确认调度算法。
在各种实现中,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节点的连接)最后订阅通道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节点还可以例如通过从各消息中移除公共头部或者进行其它合适压缩技术来对该组消息进行压缩。
再次参考图2,在一些示例中,本文所述的系统和方法针对一个或多个通道平衡Q节点之间的负载。例如,在选择用以托管通道的通道细流的Q节点时,通道管理器214可以基于Q节点的当前工作负载(这里还称为“负载”)以及/或者基于一旦托管开始Q节点将具有的预期工作负载来选择Q节点。可以使用提供Q节点在当前时间的活跃或忙的程度和/或预计在将来的活跃或忙的程度的指示的负载数据来确定Q节点和其它节点的工作负载。给定Q节点的负载数据可以包括一个或多个负载度量,例如与Q节点正应对或处理的消息的数量有关的信息等。在各种实现中,负载数据是两个以上的负载度量的组合,或可以包括两个以上的负载度量的组合。例如,该组合可以是线性的、非线性的、加权的或未加权的,尽管其它组合也是可以的。在一个示例中,负载数据可以是负载度量的加权组合,其中该组合的权重是通过实验测量和系统性能的分析所确定的。可以使用线性回归或其它数据拟合技术来确定对工作负载和系统性能的影响最大的权重和/或负载度量。在一些实例下,负载数据可以包括表示一个或多个Q节点上的负载的节点特定的数据、以及/或者表示与一个或多个通道相关联的负载的通道特定的数据。负载数据可以是或者包括例如节点特定的数据和/或通道特定的数据的组合(例如,加权组合)。
在特定示例中,节点特定的负载数据可以包括消息正被写入Q节点的速率和/或正从Q节点传递消息的速率。通常,Q节点正发送/接收消息的速率越高,对于该Q节点而言工作负载越高。可以将向Q节点或从Q节点传输的速率与Q节点的最大传输速率或阈值传输速率进行比较。可以例如通过观察系统配置(诸如网络接口(例如,以太网)装置的容量等)来静态地确定阈值传输速率。替代地或附加地,可以例如通过观察响应延迟保持处于预定义水平时的最大传输速率来动态地确定阈值传输速率。还可以通过实验(诸如在系统的基准测试期间)确定初始阈值传输速率。在各种实例中,如果向Q节点和/或从Q节点传输的速率处于、接近或超过最大可用传输速率或阈值传输速率,则Q节点的工作负载和/或可能的将来工作负载可被视为高,使得此时不太可能选择该Q节点来托管附加通道细流。在一些示例中,从每次的消息数量(例如,每秒的消息数)和/或数据传输速率(例如,每秒的字节数)方面测量消息传输速率。
在一些实例中,节点特定的负载数据可以包括Q节点当前存储的通道细流或消息的数量。可以将Q节点中的存储与针对Q节点的最大存储值或阈值存储值进行比较。可以例如通过观察系统配置并将系统存储器(例如,RAM)的一部分(诸如70%、80%、90%或其它合适的百分比等)专用于应用来静态地确定阈值存储值。可以通过实验(诸如在系统的基准测试期间等)确定初始阈值存储值。通常,在Q节点中的存储处于、接近或超过阈值存储值的情况下,工作负载和/或可能的将来工作负载可被视为高并且/或者Q节点中的附加存储所用的空间可能有限。在这样的情况下,此时不太可能选择该Q节点来存储附加通道细流。可以例如以字节为单位或者以消息数量为单位来测量Q节点所存储的消息的数量。
替代地或附加地,给定Q节点的节点特定的负载数据可以包括与Q节点当前正托管或处理的通道或通道部分(即,通道细流)的数量有关的信息。可以将Q节点当前正托管或处理的通道或通道部分的数量与通道的最大数量或阈值数量进行比较。如果Q节点所托管的通道的数量处于、接近或超过通道的最大数量,则Q节点的工作负载和/或可能的将来工作负载可被视为高。在各种实例中,通道的最大数量可能受到系统存储器以及/或者保持或维持通道的CPU和网络开销的限制、以及/或者根据系统存储器以及/或者保持或维持通道的CPU和网络开销来确定。可以通过实验(诸如在系统的基准测试期间等)确定通道的初始最大数量。随着通道的消息传送活动增加,可以预计托管该通道的Q节点的工作负载增加。通道管理器214可以监视通道消息传送活动的趋势以预测通道细流的托管将如何影响Q节点负载。如果与托管通道细流相关联的预计工作负载对于Q节点而言将过高,则通道管理器214可以选择具有充足的工作负载容量和/或可用存储的不同Q节点来托管通道细流。
在一些实例中,基于已被赋予向Q节点的读取和/或写入访问的MX节点的数量来测量Q节点的节点特定的负载数据。Q节点的工作负载可以随着具有向Q节点的读取/写入访问的MX节点的数量的增加而增加。另外,具有向Q节点的读取/写入访问的MX节点的数量可以提供Q节点的可能的将来工作负载的指示。例如,在大量MX节点具有向Q节点的读取/写入访问的情况下,即使当前消息传输速率可能不高,也存在高消息传输速率的可能性。在这样的情况下,由于相应通道上的活动水平增加,因此MX节点可以对Q节点提出更高的要求。Q节点的节点特定的负载数据在一些实例中可以包括与以下有关的信息:(i)从MX节点接收到的用以访问Q节点上所存储的通道细流的请求的数量;以及/或者(ii)授予MX节点访问通道细流的许可的数量。
通常,Q节点的节点特定的负载数据可以包括Q节点的处理速率。可以计算Q节点的计算或处理速率并与Q节点的阈值处理值或最大处理值进行比较。阈值处理(CPU)值例如可以在Q节点CPU限制的30%和70%之间以考虑尖峰,尽管其它的阈值处理值也是可以的。在一个示例中,可以通过观察实际生产负载下的系统行为、并且(例如,通过确定可以由流量或处理速率的振动指示的、系统变得不稳定的水平)确定安全约束,来确定阈值处理值。在一个示例中,阈值处理值可以等于与系统不稳定性的开始相对应的处理速率的一半或三分之一,尽管其它的阈值处理值也是可以的。在Q节点的处理速率处于、接近或超过阈值处理值的情况下,Q节点的工作负载可被视为高。在高工作负载的情况下,通道管理器214不太可能选择该Q节点来托管新的通道细流。
除监视Q节点的工作负载之外,通道管理器214还可以监视工作负载的变化速率。节点特定的负载数据可以包括例如关于消息传输速率、消息存储量、所托管的通道的数量、MX节点连接的数量、Q节点的处理速率和/或其它负载度量随时间的经过正如何改变的指示。变化速率可以是或包括例如与负载度量相关联的导数或斜率。可以使用变化速率来预测对于Q节点而言将来的工作负载将是多少。例如,通道管理器214可以使用当前工作负载和变化速率来从当前工作负载(例如,线性地)外推到所预测的将来工作负载。
通常,为了判断Q节点的当前或将来工作负载是否高,系统和方法(例如,通道管理器214)可以将当前或将来工作负载(例如,消息传输速率或存储速率)与阈值进行比较。阈值可以是例如为避免性能问题而不应超过的最大值。在一些实例中,阈值可以通过实验观察来确定以及/或者被选择为如下的工作负载,其中超过该工作负载,系统性能降低或者不是最佳的。Q节点的工作负载可被表示为原始负载水平或阈值的百分比。通常,在当前或预测工作负载处于或接近(或甚至超过)阈值的情况下,Q节点可被视为过载,并且不太可能被选择来托管新的通道细流。
附加地或替代地,系统和方法(例如,通道管理器214)可以通过考虑通道特定的数据来平衡Q节点上的负载。通常,通道特定的数据涉及与将要托管新的通道细流的通道有关的信息。通道特定的数据可以包括例如向通道的订户的数量和/或向通道的发布者的数量。如果向通道的订户和/或发布者的数量高,则与该通道的新通道细流相关联的预期负载也可能高。同样,通道特定的数据可以包括向通道发布消息的速率。通道的高发布速率通常表示与该通道的新的通道细流相关联的工作负载将高。在一些示例中,通道特定的数据包括有许可访问通道的接口节点的数量。通常,在大量接口节点可以访问通道的情况下,例如由于存在更多的用以从通道读取或向通道写入的请求,通道的预期工作负载将高。因此,通道特定的数据可以允许通道管理器214预测与特定通道相关联的工作负载。通道管理器214可以使用所预测的工作负载来确定将与托管通道的新的通道细流相关联的工作量。然后,通道管理器214可以使用所预测的工作负载来选择适合于托管新的通道细流的Q节点。例如,如果预计所预测的通道细流的工作负载高,则基于通道特定的数据,通道管理器214可以选择具有足够低的工作负载的Q节点来处理与新的通道细流相关联的高工作负载。
在各种示例中,节点特定的数据和/或通道特定的数据可以考虑地理位置或包括地理位置。例如,如果预计通道活动主要在特定地理位置(例如,新西兰)中,则通道管理器214可以选择驻留在该地理位置中或附近(例如,在新西兰数据中心中)的Q节点。
在一些示例中,一个或多个Q节点以及/或者一个或多个MX节点向通道管理器214提供包括节点特定的数据和/或通道特定的数据的负载数据。Q节点例如可被配置为监视这些Q节点的消息传输速率、消息存储量、MX节点连接等、以及任何关联的变化速率,并且将该信息(例如,节点特定的数据)提供至通道管理器214。相同或相似的节点特定的信息可以由MX节点收集以及/或者由MX节点提供至通道管理器214。通道特定的数据同样可以由Q节点和/或MX节点收集并被发送至通道管理器214。例如,Q节点和/或MX节点可以监视一个或多个通道,以确定订户的数量、发布者的数量、消息发布的速率和/或通道所用的MX连接的数量。
通常,通道管理器214使用负载数据(即,节点特定的数据和/或通道特定的数据)来平衡各种Q节点之间的负载。例如,通道管理器214可以使用负载数据来选择用于托管新的通道细流的下一Q节点。下一Q节点可以基于其当前工作负载或预计将来工作负载与系统中的其它Q节点相比来选择。例如,在通道管理器214正选择用以托管通道的通道细流的Q节点的情况下,通道管理器214可以选择可用的Q节点中的工作负载最低或预测的将来工作负载最低的Q节点。为了预测将来工作负载,通道管理器214可以估计与将来托管任务相关联的附加工作负载,并将该附加工作负载添加至Q节点的当前工作负载。通道管理器214还可以考虑多少个正由Q节点托管的通道细流将来将期满,由此降低Q节点的工作负载。
在一些情况下,通道管理器214可以如下预测将来时间的Q节点的工作负载:将来工作负载=当前工作负载+工作负载的预期变化。当前工作负载通常是Q节点的当前时间的工作负载。工作负载的预期变化是当前工作负载和将来时间的预期工作负载之间的预期差。工作负载的预期变化可以基于例如工作负载的预期增加(例如,由于托管新的通道细流和/或通道活动的增加)以及工作负载的预期减少(例如,由于通道细流期满和/或通道活动的减少)来确定。
在特定实例中,系统和方法(例如,通道管理器214和/或Q节点)可以监视各种Q节点的工作负载以确定何时需要开放或关闭新的通道细流。例如,在Q节点的工作负载正变高的情况下,通道管理器214可以决定关闭Q节点上的通道细流。然后,通道管理器214可以开放(如本文所述,优选基于负载数据和Q节点的工作负载所选择的)不同Q节点上的相应通道的新的通道细流。
在各种实例中,在第一通道细流将被关闭并且紧接该第一通道细流之后的第二通道细流将被开放的情况下,通道管理器214可以开放正托管第一通道细流的Q节点上的第二通道细流。在决定将相同的Q节点用于第一通道细流和第二通道细流的情况下,通道管理器214可以首先确认Q节点的工作负载低于阈值水平,使得开放第二通道细流将不会使Q节点过载。替代地,如果Q节点的工作负载高于阈值水平,则通道管理器214可以选择具有低于阈值水平的工作负载的不同的Q节点来托管第二通道细流。
通常,在选择用以托管新的通道细流的Q节点时,系统和方法可以尝试平衡可用的Q节点之间的工作负载。例如在将开放新的通道细流时,通道管理器214可以确定与托管新的通道细流相关联的预期工作负载。然后,通道管理器214可以基于与托管新的通道细流相关联的预期工作负载来选择用以托管该通道细流的Q节点。可以选择Q节点,使得工作负载在系统的Q节点之间均等地分布。为了确定Q节点之间的工作负载的不均等,通道管理器214可以确定工作负载分布的标准偏差并且为新的托管任务选择Q节点以努力使该标准偏差最小化。工作负载的不均等的其它测量值可以包括例如Q节点之间的最大工作负载和最小工作负载之间的差、或者Q节点之间的变化。通常,在选择用于托管通道细流的下一Q节点时,通道管理器214可以进行减少Q节点之间的工作负载不均等的Q节点选择。
在特定示例中,通道管理器214可以向Q节点发送用以终止通道细流的托管的请求。例如,可以在判断为不存在向与通道细流相关联的通道的订阅的情况下以及/或者在通道细流的存活时间已期满的情况下,发送用以终止的请求。响应于该请求,Q节点可以终止通道细流的托管并向通道管理器214通知托管已终止。终止通道细流的托管可以包括例如关闭用以进一步发布的通道细流、关闭用以进一步读取的通道细流、以及/或者删除与通道细流相关联的消息数据。用以关闭通道细流的决定可以基于例如判断为通道细流的大小超过阈值大小、判断为通道细流的年龄超过阈值年龄(例如,TTL)、以及/或者判断为托管节点经历了通信失败。
在一些实例中,MX节点向通道管理器214通知来自发布者的用以发布到新通道的请求。在这样的情况下,通道管理器214可以判断为不存在该通道,并且作为响应,可以选择Q节点以托管该新通道的通道细流。可以使用本文所述的技术来进行Q节点选择。(例如,在前一通道细流或最年轻的通道细流对于进一步发布关闭的情况下)通道管理器214可以选择相同的Q节点或不同的Q节点来托管新通道的附加通道细流。
图5是用于平衡发布-订阅系统的Q节点之间的工作负载的示例性方法的流程图。可以使用通道管理器(例如消息传送系统100的通道管理器214等)来实现该方法。该方法通过从发布-订阅系统的多个托管节点(即,Q节点)中选择(步骤502)用以暂时托管发布-订阅系统的通道的一部分的第一托管节点(即,第一Q节点)而开始。在特定实例中,暂时托管通道部分包括:暂时存储发布到通道的一个或多个消息,并且将向该一个或多个消息的访问暂时提供至向该通道的一个或多个订户。该方法还包括:将用以暂时托管通道部分的请求发送(步骤504)至发布-订阅系统的第一托管节点。从发布-订阅系统的接口节点(即,MX节点)接收到(步骤506)用以访问通道部分的请求。向该接口节点授予(步骤508)用以访问通道部分的许可。通常,选择第一托管节点以暂时托管通道部分包括:至少部分基于如下的负载数据来从多个托管节点中选择第一托管节点,其中该负载数据包括表示多个托管节点上的负载的节点特定的数据和/或表示与通道相关联的负载的通道特定数据。
本说明书中所描述的主题和操作的实施例可以在数字电子电路中、或者在计算机软件、固件或硬件中实现,其中硬件包括本说明书中所公开的结构及其结构等同物、或者它们中的一个或多个的组合。本说明书中所描述的主题的实施例可以被实现为一个或多个计算机程序,即计算机程序指令的一个或多个模块,其编码在计算机存储介质上以供数据处理设备执行或用于控制数据处理设备的操作。替代地或附加地,程序指令可被编码在人工生成的传播信号(例如,机器生成的电、光或电磁信号)上,其中该信号被生成用于对信息进行编码,从而传输到适当的接收器设备以供数据处理设备执行。计算机存储介质可以是计算机可读存储设备、计算机可读存储基板、随机或串行存取存储器阵列或装置、或者它们中的一个或多个的组合,或者被包括在其中。此外,虽然计算机存储介质不是传播信号,但是计算机存储介质可以是编码在人工生成的传播信号中的计算机程序指令的源或目的地。计算机存储介质也可以是一个或多个单独的物理组件或介质(例如,多个CD、磁盘、或其它存储装置),或者被包括在其中。
本说明中所描述的操作可以被实现为数据处理设备对一个或多个计算机可读存储装置上所存储的或者从其它源接收到的数据所进行的操作。
术语“数据处理设备”包含用于处理数据的所有种类的设备、装置和机器,举例而言包括可编程处理器、计算机、片上系统或者前述的多个或组合。设备可以包括专用逻辑电路,例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除硬件以外,设备还可以包括为所考虑的计算机程序创建执行环境的代码,例如构成处理器固件、协议栈、数据库管理系统、操作系统、跨平台运行时环境、虚拟机或它们中的一个或多个的组合的代码。设备和执行环境可以实现各种不同的计算模型基础架构,诸如web服务、分布式计算和网格计算基础架构。
计算机程序(也称为程序、软件、软件应用、脚本或代码)可以以包括编译语言或解释语言、声明语言或过程语言等的任何形式的编程语言来编写,并且其可以以任何形式进行部署,包括被部署为独立程序或者被部署为模块、组件、子例程、对象或者适合在计算环境中使用的其它单元。计算机程序可以但不必与文件系统中的文件相对应。程序可以被存储在用于保存其它程序或数据(例如,标记语言资源中所存储的一个或多个脚本)的文件的一部分中,被存储在专用于所考虑的程序的单个文件中,或者被存储在多个协同文件(例如,用于存储一个或多个模块、子程序或代码的一部分的文件)中。计算机程序可以被部署为在一个计算机上、或者在位于一个网站处或跨多个网站分布并且通过通信网络互连的多个计算机上执行。
本说明书中所描述的处理和逻辑流可以利用一个或多个可编程处理器来进行,其中这些一个或多个可编程处理器执行一个或多个计算机程序以通过对输入数据进行操作并生成输出来进行动作。处理和逻辑流也可以利用专用逻辑电路来进行,并且设备也可以被实现为专用逻辑电路,其中该专用逻辑电路例如为FPGA(现场可编程门阵列)或ASIC(专用集成电路)。
举例而言,适合执行计算机程序的处理器包括通用微处理器和专用微处理器两者、以及任何种类的数字计算机中的任意一个或多个处理器。一般地,处理器将会从只读存储器或随机存取存储器或这两者接收指令和数据。计算机的必要元件是用于根据指令进行动作的处理器以及用于存储指令和数据的一个或多个存储器装置。一般地,计算机还将包括用于存储数据的一个或多个大容量存储装置(例如,磁盘、磁光盘、光盘、或固态驱动器等),或者可操作地连接以从一个或多个大容量存储装置接收数据或者向一个或多个大容量存储装置传输数据或者两者兼有。然而,计算机无需具有这种装置。此外,计算机可以嵌入在另一装置中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏机、全球定位系统(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.根据权利要求1所述的负载平衡方法,还包括:
从托管节点和接口节点至少之一接收所述通道特定的数据的至少一部分。
7.根据权利要求1所述的负载平衡方法,其中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:
至少部分基于所述节点特定的数据,来判断为在所述托管节点上的各个负载中所述第一托管节点上的负载最低;以及
至少部分基于该判断来选择所述第一托管节点。
8.根据权利要求1所述的负载平衡方法,其中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:
至少部分基于所述节点特定的数据,来判断为所述第一托管节点上的负载低于阈值负载水平;以及
至少部分基于该判断来选择所述第一托管节点。
9.根据权利要求1所述的负载平衡方法,其中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:
至少部分基于所述节点特定的数据中的与所述第一托管节点相对应的部分和所述通道特定的数据中的与所述通道相对应的部分,来确定将由所述第一托管节点托管所述通道的部分产生的所述第一托管节点上的预期负载;
判断为所述第一托管节点上的预期负载低于阈值负载水平;以及
至少部分基于判断为所述第一托管节点上的预期负载低于所述阈值负载水平,来选择所述第一托管节点。
10.根据权利要求1所述的负载平衡方法,其中,所述通道部分包括所述通道的第一部分,所述通道还包括第二部分,以及至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:
判断为所述第一托管节点托管所述通道的第二部分;
判断为所述第一托管节点上的负载低于阈值负载水平;以及
至少部分基于判断为所述第一托管节点托管所述通道的第二部分并且所述第一托管节点上的负载低于所述阈值负载水平,来选择所述第一托管节点。
11.根据权利要求1所述的负载平衡方法,其中,所述通道部分包括所述通道的第一部分,所述通道还包括第二部分,以及至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:
判断为第二托管节点托管所述通道的第二部分;
判断为所述第二托管节点上的负载高于阈值负载水平;
判断为所述第一托管节点上的负载低于所述阈值负载水平;以及
至少部分基于判断为所述第二托管节点上的负载高于所述阈值负载水平并且所述第一托管节点上的负载低于所述阈值负载水平,来选择所述第一托管节点。
12.根据权利要求1所述的负载平衡方法,其中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点包括:
至少部分基于所述通道特定的数据的一部分,来确定与托管所述通道部分相关联的预期负载;
至少部分基于所述节点特定的数据以及与托管所述通道部分相关联的预期负载,来判断为将所述通道部分托管在所述第一托管节点上将降低所述托管节点之间的负载分布的不均等;以及
至少部分基于判断为将所述通道部分托管在所述第一托管节点上将降低所述托管节点之间的负载分布的不均等,来选择所述第一托管节点。
13.一种发布-订阅系统,包括:
多个托管节点;
接口节点;以及
通道管理器节点,其能够操作以进行包括以下的操作:
至少部分基于负载数据来从所述多个托管节点中选择第一托管节点,所述负载数据是从表示所述多个托管节点上的负载的节点特定的数据和表示与通道相关联的负载的通道特定的数据的至少之一中选择的;
将用以暂时托管所述通道的一部分的请求发送至所述第一托管节点,其中所述第一托管节点通过暂时存储发布至所述通道的一个或多个消息、并且将向所述一个或多个消息的访问暂时提供至向所述通道的多个订户,来暂时托管通道部分;
从所述接口节点接收用以访问所述通道部分的请求;以及
将用以访问所述通道部分的许可授予至所述接口节点。
14.根据权利要求13所述的发布-订阅系统,其中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作包括:
至少部分基于所述节点特定的数据,判断为在所述托管节点上的各个负载中所述第一托管节点上的负载最低;以及
至少部分基于该判断来选择所述第一托管节点。
15.根据权利要求13所述的发布-订阅系统,其中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作包括:
至少部分基于所述节点特定的数据,判断为所述第一托管节点上的负载低于阈值负载水平;以及
至少部分基于该判断来选择所述第一托管节点。
16.根据权利要求13所述的发布-订阅系统,其中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作包括:
至少部分基于所述节点特定的数据中的与所述第一托管节点相对应的部分和所述通道特定的数据中的与所述通道相对应的部分,来确定将由所述第一托管节点托管所述通道的部分产生的所述第一托管节点上的预期负载;
判断为所述第一托管节点上的预期负载低于阈值负载水平;以及
至少部分基于判断为所述第一托管节点上的预期负载低于所述阈值负载水平,来选择所述第一托管节点。
17.根据权利要求13所述的发布-订阅系统,其中,所述通道部分包括所述通道的第一部分,所述通道还包括第二部分,以及至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作包括:
判断为所述第一托管节点托管所述通道的第二部分;
判断为所述第一托管节点上的负载低于阈值负载水平;以及
至少部分基于判断为所述第一托管节点托管所述通道的第二部分并且所述第一托管节点上的负载低于所述阈值负载水平,来选择所述第一托管节点。
18.根据权利要求13所述的发布-订阅系统,其中,所述通道部分包括所述通道的第一部分,所述通道还包括第二部分,以及至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作包括:
判断为第二托管节点托管所述通道的第二部分;
判断为所述第二托管节点上的负载高于阈值负载水平;
判断为所述第一托管节点上的负载低于所述阈值负载水平;以及
至少部分基于判断为所述第二托管节点上的负载高于所述阈值负载水平并且所述第一托管节点上的负载低于所述阈值负载水平,来选择所述第一托管节点。
19.根据权利要求13所述的发布-订阅系统,其中,至少部分基于所述负载数据来从所述多个托管节点中选择所述第一托管节点的操作包括:
至少部分基于所述通道特定的数据的一部分,来确定与托管所述通道部分相关联的预期负载;
至少部分基于所述节点特定的数据以及与托管所述通道部分相关联的预期负载,来判断为将所述通道部分托管在所述第一托管节点上将降低所述托管节点之间的负载分布的不均等;以及
至少部分基于判断为将所述通道部分托管在所述第一托管节点上将降低所述托管节点之间的负载分布的不均等,来选择所述第一托管节点。
20.一种制品,包括:
非暂时性机器可读介质,其上存储了在由一个或多个计算机执行时使所述计算机进行包括以下的操作的指令:
至少部分基于负载数据来从多个托管节点中选择第一托管节点,所述负载数据是从表示所述多个托管节点上的负载的节点特定的数据以及表示与通道相关联的负载的通道特定的数据的至少之一中选择的;
将用以暂时托管所述通道的一部分的请求发送至所述第一托管节点;
利用所述第一托管节点,通过暂时存储发布到所述通道的一个或多个消息、并且将向所述一个或多个消息的访问暂时提供至向所述通道的多个订户,来暂时托管通道部分;
接收用以访问所述通道部分的请求;以及
授予用以访问所述通道部分的许可。
CN201780065516.6A 2016-08-23 2017-06-07 可扩展实时消息传送系统 Pending CN109964456A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/244,380 2016-08-23
US15/244,380 US10374986B2 (en) 2016-08-23 2016-08-23 Scalable, real-time messaging system
PCT/US2017/036349 WO2018038789A1 (en) 2016-08-23 2017-06-07 Scalable, real-time messaging system

Publications (1)

Publication Number Publication Date
CN109964456A true CN109964456A (zh) 2019-07-02

Family

ID=59078217

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780065516.6A Pending CN109964456A (zh) 2016-08-23 2017-06-07 可扩展实时消息传送系统

Country Status (6)

Country Link
US (2) US10374986B2 (zh)
EP (1) EP3504846A1 (zh)
JP (1) JP2019526860A (zh)
CN (1) CN109964456A (zh)
AU (1) AU2017316185A1 (zh)
WO (1) WO2018038789A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109614228B (zh) * 2018-11-27 2023-04-18 南京轨道交通系统工程有限公司 基于动态负载均衡方式的综合监控前置系统及工作方法
US11429669B2 (en) * 2019-08-06 2022-08-30 Twitter, Inc. Managing query subscription renewals in a messaging platform

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060106840A1 (en) * 2004-11-04 2006-05-18 International Business Machines Corporation System and method for tracking notifications in a publish subscribe system
CN102291465A (zh) * 2011-08-31 2011-12-21 北京星网锐捷网络技术有限公司 负载均衡方法、装置和系统
US20120226797A1 (en) * 2011-03-01 2012-09-06 Cisco Technology, Inc. Active Load Distribution for Control Plane Traffic Using a Messaging and Presence Protocol
CN103929366A (zh) * 2014-04-02 2014-07-16 华为技术有限公司 流量控制方法、装置及设备
US20140286354A1 (en) * 2011-11-18 2014-09-25 Thomson Licensing System comprising a publish/subscribe broker for a remote management of end-user devices, and respective end-user device
US9397973B1 (en) * 2015-10-16 2016-07-19 Machine Zone, Inc. Systems and methods for transferring message data

Family Cites Families (115)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4264924A (en) 1978-03-03 1981-04-28 Freeman Michael J Dedicated channel interactive cable television system
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
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
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
EP1860519B1 (en) 1999-02-26 2011-07-27 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
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
AU2003301374A1 (en) 2002-10-17 2004-05-04 Tibco Software Inc. Method and system to communicate messages in a computer network
US7657596B2 (en) 2002-10-24 2010-02-02 Sun Microsystems, Inc. Distributed data sharing methods and systems
US7420952B2 (en) * 2002-10-28 2008-09-02 Mesh Dynamics, Inc. High performance wireless networks using distributed control
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
US20050210109A1 (en) * 2004-03-22 2005-09-22 International Business Machines Corporation Load balancing mechanism for publish/subscribe broker messaging system
US7640357B2 (en) 2004-04-30 2009-12-29 Sap Ag Transmitting enterprise messages based on buffer sizes
US20050262205A1 (en) 2004-04-30 2005-11-24 Nikolov Radoslav I Delivering messages in an enterprise messaging system using message selector hierarchy
US7649937B2 (en) 2004-06-22 2010-01-19 Auction Management Solutions, Inc. Real-time and bandwidth efficient capture and delivery of live video to multiple destinations
US7613813B2 (en) 2004-09-10 2009-11-03 Cavium Networks, Inc. Method and apparatus for reducing host overhead in a socket server implementation
US8065384B2 (en) 2004-10-08 2011-11-22 Sharp Laboratories Of America, Inc. Methods and systems for imaging device event notification subscription
US8051140B2 (en) 2004-10-08 2011-11-01 Sharp Laboratories Of America, Inc. Methods and systems for imaging device control
US7774720B1 (en) 2004-10-15 2010-08-10 Oracle America, Inc. Connectivity map editor
US7779418B2 (en) 2004-12-30 2010-08-17 Oracle International Corporation Publisher flow control and bounded guaranteed delivery for message queues
AU2005322833A1 (en) 2005-01-06 2006-07-13 Tervela, Inc. A caching engine in a messaging system
US8788565B2 (en) 2005-07-18 2014-07-22 Wayne Bevan Dynamic and distributed queueing and processing system
US7941448B2 (en) 2005-08-26 2011-05-10 At&T Intellectual Property Ii, Lp System and method for event driven publish-subscribe communications
US7917124B2 (en) 2005-09-20 2011-03-29 Accenture Global Services Limited Third party access gateway for telecommunications services
WO2007063585A1 (ja) 2005-11-30 2007-06-07 Fujitsu Limited 通信装置およびフレーム制御方法
US7818417B2 (en) * 2006-01-10 2010-10-19 International Business Machines Corporation Method for predicting performance of distributed stream processing systems
US8965409B2 (en) 2006-03-17 2015-02-24 Fatdoor, Inc. User-generated community publication in an online neighborhood social network
WO2007109047A2 (en) 2006-03-18 2007-09-27 Peter Lankford Content-aware routing of subscriptions for streaming and static data
US8266321B2 (en) 2006-06-12 2012-09-11 Cloudsoft Corporation Limited Self-managed distributed mediation networks
US8429702B2 (en) 2006-09-11 2013-04-23 At&T Intellectual Property I, L.P. Methods and apparatus for selecting and pushing customized electronic media content
US9270944B2 (en) 2007-02-14 2016-02-23 Time Warner Cable Enterprises Llc Methods and apparatus for content delivery notification and management
US8396959B2 (en) 2007-03-21 2013-03-12 Inetco Systems Limited Method and system for monitoring messages passed over a network
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
JP5146548B2 (ja) 2009-02-06 2013-02-20 富士通株式会社 パケットバッファ装置及びパケット廃棄方法
US8539359B2 (en) 2009-02-11 2013-09-17 Jeffrey A. Rapaport Social network driven indexing system for instantly clustering people with concurrent focus on same topic into on-topic chat rooms and/or for generating on-topic search results tailored to user preferences regarding topic
US8301687B2 (en) 2009-03-31 2012-10-30 Software Ag Systems and/or methods for standards-based messaging
US20130254314A1 (en) 2009-06-09 2013-09-26 Edmond K. Chow Digital content delivery
US8392555B2 (en) 2009-06-01 2013-03-05 International Business Machines Corporation Push-back mechanism for pub/sub brokers
US20110060812A1 (en) 2009-09-10 2011-03-10 Level 3 Communications, Llc Cache server with extensible programming framework
US8375095B2 (en) 2009-12-22 2013-02-12 Microsoft Corporation Out of order durable message processing
US9021046B2 (en) 2010-01-15 2015-04-28 Joyent, Inc Provisioning server resources in a cloud resource
JP5340186B2 (ja) 2010-01-21 2013-11-13 アラクサラネットワークス株式会社 パケット中継装置及びパケットを中継する方法
US8850015B2 (en) 2010-01-26 2014-09-30 Cisco Technology, Inc. Network-network interface
US8489674B2 (en) 2010-03-11 2013-07-16 Yahoo! Inc. Distributed publish/subscribe system
US9590849B2 (en) 2010-06-23 2017-03-07 Twilio, Inc. System and method for managing a computing cluster
US9338064B2 (en) * 2010-06-23 2016-05-10 Twilio, Inc. System and method for managing a computing cluster
US8838707B2 (en) * 2010-06-25 2014-09-16 Twilio, Inc. System and method for enabling real-time eventing
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 国际商业机器公司 发布-订阅消息传递的方法和系统
US9542448B2 (en) * 2010-11-03 2017-01-10 Software Ag Systems and/or methods for tailoring event processing in accordance with boundary conditions
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
US20130031162A1 (en) 2011-07-29 2013-01-31 Myxer, Inc. Systems and methods for media selection based on social metadata
US9177336B2 (en) 2011-09-08 2015-11-03 Telefonaktiebolaget L M Ericsson (Publ) Apparatuses and methods for recommending a path through an information space
US20130066967A1 (en) 2011-09-12 2013-03-14 Vizibility Inc. System and method for discovering and interacting with common connections
US9191355B2 (en) 2011-09-12 2015-11-17 Crytek Gmbh Computer-implemented method for posting messages about future events to users of a social network, computer system and computer-readable medium thereof
US8607249B2 (en) 2011-09-22 2013-12-10 Oracle International Corporation System and method for efficient concurrent queue implementation
EP2791819B1 (en) 2011-12-14 2017-11-01 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
BR112014004057A2 (pt) 2012-07-02 2017-03-07 Sony Corp dispositivo e método de transmissão, e, aparelho de rede
US20140114738A1 (en) 2012-10-24 2014-04-24 Erick Tseng Automatic Check-In Using Social-Networking Information
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
US9602455B2 (en) 2015-08-07 2017-03-21 Machine Zone, Inc. Scalable, real-time messaging system
US9407585B1 (en) 2015-08-07 2016-08-02 Machine Zone, Inc. Scalable, real-time messaging system
US9319365B1 (en) 2015-10-09 2016-04-19 Machine Zone, Inc. Systems and methods for storing and transferring message data
US9385976B1 (en) 2015-10-09 2016-07-05 Machine Zone, Inc. Systems and methods for storing message data
US9577911B1 (en) 2016-03-21 2017-02-21 Black Cloud Analytics, Inc. Distributed computation system incorporating agent network, paths and associated probes
US9602450B1 (en) 2016-05-16 2017-03-21 Machine Zone, Inc. Maintaining persistence of a messaging system
US9608928B1 (en) 2016-07-06 2017-03-28 Machine Zone, Inc. Multiple-speed message channel of messaging system
US20180027068A1 (en) * 2016-07-19 2018-01-25 Microsoft Technology Licensing, Llc Grouping in a Communication System or Service

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060106840A1 (en) * 2004-11-04 2006-05-18 International Business Machines Corporation System and method for tracking notifications in a publish subscribe system
US20120226797A1 (en) * 2011-03-01 2012-09-06 Cisco Technology, Inc. Active Load Distribution for Control Plane Traffic Using a Messaging and Presence Protocol
CN102291465A (zh) * 2011-08-31 2011-12-21 北京星网锐捷网络技术有限公司 负载均衡方法、装置和系统
US20140286354A1 (en) * 2011-11-18 2014-09-25 Thomson Licensing System comprising a publish/subscribe broker for a remote management of end-user devices, and respective end-user device
CN103929366A (zh) * 2014-04-02 2014-07-16 华为技术有限公司 流量控制方法、装置及设备
US9397973B1 (en) * 2015-10-16 2016-07-19 Machine Zone, Inc. Systems and methods for transferring message data

Also Published As

Publication number Publication date
US10374986B2 (en) 2019-08-06
US20190319901A1 (en) 2019-10-17
JP2019526860A (ja) 2019-09-19
AU2017316185A1 (en) 2019-02-21
US20180063039A1 (en) 2018-03-01
WO2018038789A1 (en) 2018-03-01
EP3504846A1 (en) 2019-07-03

Similar Documents

Publication Publication Date Title
CN109479025A (zh) 维护消息传送系统的持久性
CN110121863A (zh) 用于向多个订户提供消息的系统和方法
US10182124B2 (en) Scalable, real-time messaging system
CN109691035A (zh) 消息传送系统的多速消息通道
US10630785B2 (en) Scalable, real-time messaging system
CN103329113B (zh) 配置用于分级高速缓存的代理服务器以及动态站点加速和自定义对象和相关的方法
CN108353020A (zh) 用于传送消息数据的系统和方法
US20180260138A1 (en) Resource allocation for staged execution pipelining
CN108028796A (zh) 可扩展的实时消息传递系统
JP2018531472A6 (ja) スケーラブルなリアルタイムメッセージングシステム
CN112600761B (zh) 一种资源分配的方法、装置及存储介质
CN109964456A (zh) 可扩展实时消息传送系统
US20080235384A1 (en) Web service for coordinating actions of clients
CN109845198A (zh) 针对消息传送系统中的消息通道的访问控制
JP2019532399A (ja) スケーラブルメッセージングシステムにおけるデータ複製
CN109417563A (zh) 高效消息交换系统
WO2018156789A1 (en) Channel management in scalable messaging 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: 20190702

WD01 Invention patent application deemed withdrawn after publication