CN104935622B - 一种用于消息分配、消费的方法及装置,用于消息处理的系统 - Google Patents
一种用于消息分配、消费的方法及装置,用于消息处理的系统 Download PDFInfo
- Publication number
- CN104935622B CN104935622B CN201410107984.3A CN201410107984A CN104935622B CN 104935622 B CN104935622 B CN 104935622B CN 201410107984 A CN201410107984 A CN 201410107984A CN 104935622 B CN104935622 B CN 104935622B
- Authority
- CN
- China
- Prior art keywords
- message
- consumer
- liveness
- value
- threshold value
- 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.)
- Active
Links
Classifications
-
- 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
- H04L67/562—Brokering proxy 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
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Abstract
本申请公开了一种用于消息分配的方法和装置、一种用于消息消费的方法及装置以及一种用于消息处理的系统;所述用于消息分配的方法包括:获取满足消息消费活跃度阈值的消息消费者列表;对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向消息消费者分配消息队列中的消息。本申请的方案可将整个消费群、消息中间件状态调整为最健康的服务状态,最高效的性能状态。
Description
技术领域
本申请涉及消息处理技术领域,具体涉及一种用于消息分配的方法及装置,以及一种用于消息消费的方法及装置。本申请同时涉及一种用于消息处理的系统。
背景技术
面向消息的中间件(也称为消息中间件,MOM),提供了以松散耦合的灵活方式集成应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送,即应用程序彼此不直接通信,而是与作为中介的MOM通信。MOM提供了有保证的消息发送,应用程序开发人员无需了解远程过程调用(PRC)和网络/通信协议的细节。
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
消息中间件适用于需要可靠的数据传送的分布式环境。采用消息中间件机制的系统中,不同的对象之间通过传递消息来激活对方的事件,完成相应的操作。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。消息中间件能在不同平台之间通信,它常被用来屏蔽掉各种平台及协议之间的特性,实现应用程序之间的协同,其优点在于能够在客户和服务器之间提供同步和异步的连接,并且在任何时刻都可以将消息进行传送或者存储转发,这也是它比远程过程调用更进一步的原因。
在现有的消息中间件中,消息分配机制为基于先进先出(FIFO)的推送机制,所谓先进先出是指消息由生产者发送至中间件后,在消息中间件中排队等候发送,先进入消息中间件的消息最先由该消息中间件转发出去。所谓推送机制为消息消费者只能被动的监听消息中间件的发送情况,在中间件转发推送相应的消息后,消息到达后才开始消费消息。具体而言,FIFO队列模式,为消息中间件首先从一堆消费者中取模得到特定消费者,然后将队列中首个消息推送给该消费者,以此类推,将队列中的消息推送出去。若消息需回滚,需主动通知生产者,消息中间件不支持消息的重发或是回滚操作。
消息的消费速度受限于消息中间件的转发能力,且消息分配方式以平均优先为主,比如按照客户端数量取模。为尽可能的达到平均以及时间顺序性的前提下,这种模式要求很高:a)消费端性能必须一样,性能不一样的消费端可能引起性能差异带来的消息积压或性能问题;b)不能容忍异常情况,异常时消费速度遇到变化时,消息中间件无法感知,进而造成因平均分配带来事实上的资源分配不均。
发明内容
本申请提供一种用于消息分配的方法和装置,以解决现有消息处理的上述的问题。本申请另外提供一种用于消息消费的方法和装置,以及一种用于消息处理的系统。
本申请提供的一种用于消息分配的方法,包括:
获取满足消息消费活跃度阈值的消息消费者列表;
对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向消息消费者分配消息队列中的消息。
可选的,所述获取满足消息消费活跃度阈值的消息消费者列表包括:
接收消息消费者发送的该消费者的当前活跃度值;
计算该当前活跃度值与历史最大活跃度的比值;
将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。
可选的,所述当前活跃度值为表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种及其权重的加权平均数。
可选的,所述获取满足消息消费活跃度阈值的消息消费者列表包括:
接收消息消费者发送的表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种以及相应的权重;
计算所述当前服务能力值及其权重的加权平均数,并将该加权平均数作为该消息消费者的当前活跃度值;
计算所述当前活跃度值与该消息消费者历史最大活跃度值的比值;
将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。
可选的,所述消息消费者活跃度阈值通过所有注册在线的消费者的当前活跃度的平均值与其总和的比值获得。
可选的,所述对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向消息消费者分配消息队列中的消息包括:
对于满足消息消费活跃度阈值的消费者,按照活跃度由高到低的顺序将消息消费者分为不同的组,每一分组中包括至少两个消息消费者;
按照活跃度由高至低的顺序,依次向每一分组的消费者分配待消费消息;
对于每一分组中的消费者,按照机会均等原则向消息消费者分配待消费消息。
可选的,所述对于每一分组中的消费者,按照机会均等原则向消息消费者分配待消费消息具体包括:
获取分组中每一消息消费者的消费者ID及在分组中消费者数目;
对所述消费者ID执行hash取模运算;
向满足hash取模运算结果的消费者分配待消费消息。
可选的,所述取模运算具体为hash按余取模运算。
可选的,所述对于每一分组中的消费者,按照机会均等原则向消息消费者分配待消费消息具体是指:依据先进先出原则的原则,将消息队列中的消息按照接收机会均等原则向消息消费者分配待消费消息。
相应的,本申请还提供一种用于消息分配的装置,其包括:
获取单元,用于获取满足消息消费活跃度阈值的消息消费者列表;
分配单元,用于对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向消息消费者分配消息队列中的消息。
可选的,所述获取单元包括:
接收单元,用于接收消息消费者发送的该消费者的当前活跃度值;
计算单元,用于计算该当前活跃度值与历史最大活跃度的比值,并将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。
可选的,所述获取单元包括:
交互单元,用于接收消息消费者发送的表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种以及相应的权重;
活跃度计算单元,用于计算所述当前服务能力值及其权重的加权平均数,并将该加权平均数作为该消息消费者的当前活跃度值;
计算单元,用于计算所述当前活跃度值与该消息消费者历史最大活跃度值的比值;并将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。
可选的,所述分配单元包括:
分组单元,用于对于满足消息消费活跃度阈值的消费者,按照活跃度由高到低的顺序将消息消费者分为不同的组,每一分组组中包括至少两个消息消费者;
按组分配单元,用于按照活跃度由高至低的顺序,依次向每一分组的消费者分配待消费消息;
组内消息分配单元,用于对于每一分组中的消费者,按照机会均等原则向消息消费者分配待消费消息。
可选的,所述组内消息分配单元包括:
消费者ID获取单元,用于获取分组中每一消息消费者的消费者ID;
取模运算单元,用于对所述消费者ID执行hash取模运算;
执行单元,用于向满足hash取模运算结果的消费者分配待消费消息。
可选的,所述取模运算单元,具体用于对所述消费者ID执行hash按余取模运算;
可选的,所述组内消息分配单元,具体用于依据先进先出原则的原则,将消息队列中的消息按照接收机会均等原则向消息消费者分配待消费消息。
此外,本申请还提供一种用于消息消费的方法,其包括:
获取由消息中间件推送的消息并消费该消息;
获取该消费者消费消息的当前服务能力值及各种表征当前服务能力值的各个参数权重;
将所述当前消费服务能力值或者表征所述当前服务能力值的各个参数及其权重的加权平均作为活跃度值反馈至所述消息中间件;或者按照设定的时间周期向消息中间件反馈所述当前消费服务能力值或活跃度值。
可选的,所述表征当前服务能力值的参数包括:消息消费者消费该消息的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种。
相应的,本申请还提供一种用于消息消费的装置,其包括:
消息获取消费单元,用于获取由消息中间件推送的消息并消费该消息;
当前服务能力监测单元,用于获取该消费者消费消息的当前服务能力值及各种表征当前服务能力值的各个参数权重;
反馈单元,将所述当前消费服务能力值或者表征所述当前服务能力值的各个参数及其权重的加权平均作为活跃度值反馈至所述消息中间件;或者按照设定的时间周期向消息中间件反馈所述当前消费服务能力值或活跃度值。
此外,本申请还提供一种用于消息处理的系统,其包括;消息生产者,上述任一所述的用于消息分配的装置,以及上述所述的用于消息消费的装置。
与现有技术相比,本申请具有以下优点:本申请提供的用于消息分配的方法及装置,消息中间件获取消费者消费消息后服务能力,如业务成功率、业务平均处理时长、性能TPS等能力,计算结果出现变化时,消费者主动反馈服务能力至消息中间件;消息中间件在收到各消费端更新的服务能力后,根据消费者在线情况、服务能力等来计算调整最终的消费者活跃度情况,均值等;然后在推送消息时,优先计算活跃度再进行取模操作将消息分配给消费者,既满足了平均公平的原则,也满足了能者多劳的特点;活跃度高的消费者将得到较多的消息推送;从而避免了消费者消息积压问题,也避免了消费者性能问题无法消费该消息,并需要生产者回滚的情形。消息处理系统的整体效率得以提高。
此外,本申请还提供一种用于消息处理的系统,本系统由于消息中间件能够根据消息消费者的反馈的当前活跃度选择消息推送的目的消费者,从而很好地考虑了消息消费者性能、状态,能者多劳,并可保证整个消息处理系统高效率运行;以维持并改善消费者系统的服务能力,确保系统稳定、健壮;当消费者处于服务能力低水位时可以通过加快消费速度迅速调整消费者的最佳服务能力;两种调节方向构成了完整的调节机制,将整个消费群、消息中间件状态调整为最健康的服务状态,最高效的性能状态。
附图说明
图1为本实施例的一种用于消息分配的方法的流程图;
图2为本申请提供的一种用于消息分配的装置的实施例的示意图;
图3为本申请的一种用于消息消费的方法的实施例的流程图;
图4为本申请的一种用于消息消费的装置的实施例的流程图;
图5为本申请的一种用于消息处理的系统的实施例的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在如上所述的消息分配机制中,消息中间件一般是以平均优先的方式向消费者推送消息。这种消息分配机制无视或忽略了消息消费者的消息处理性能,并且无法掌握消息消费者是否处于正常的工作状态。
本申请提出了一种改善上述问题的消息分配机制。本申请的方法通过在消息队列侧(也称为消息中间件,消息队列服务器)实时或按照一定的周期获取与该消息队列侧在线的消息消费者的消息消费活跃度,并设定一消息消费活跃度阈值;接着,对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向消息消费者分配消息队列中的消息。其中,所述消息服务器的消费活跃度通过消费者(或者成为消费端)在消费消息时的监测服务能力值而获得,并通过与消息队列侧连接通道反馈至该消息队列侧。
下面结合实施例对分别对消息队列侧的用于消息分配的方法及装置,以及消息消费端的用于消息消费的方法及装置分别进行描述。
在下面的实施例中,首先对用于消息分配的方法和装置的实施例进行描述。请参考图1,其为本实施例的一种用于消息分配的方法的流程图。
本实施例中,用于消息分配的方法的实施例包括如下步骤:
步骤100,获取满足消息消费活跃度阈值的消息消费者列表。
消息由生产者发送至消息中间件之后,在消息中间件形成待转发队列,根据消息进入中间件的先后顺序优先向消息消费者推送先进入队列的消息。
而向消息消费者推送消息之前,消息消费者首先需要向消息中间件注册,在消息中间件显示为在线状态。具体的,可以通过与消息消费者建立连接并发送接收消息请求的方式实现上述注册。其中消息消费者与消息中间件之间建立的连接为长连接,并可以基于该长连接建立若干信息通道。所述长连接具体可以为HTTP连接、TCP连接或socket连接。
建立连接之后,即可以通过基于所述连接的通道中向消息消费者推送消息。然而,本申请中,首先要获取于该消息中间件注册的消息消费者的满足一定活跃度阈值的列表。也就是说,将所述在该消息中间件上注册的以做好接受准备的所有消息消费者中,选择出活跃度大于设定阈值的消息消费者。其中,所述消息消费者的活跃度由该消息消费者通过上述的连接通道反馈至该消息中间件,或者经由该连接通道将计算消息消费者活跃度的相关表征参数发送至消息中间件,并由消息中间件计算相关活跃度。
在其中的一个实施例中,所述获取满足消息消费活跃度阈值的消息消费者列表包括:接收消息消费者发送的该消费者的当前活跃度值;计算该当前活跃度值与历史最大活跃度的比值;将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。所述当前活跃度值为表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种及其权重的加权平均数。
具体而言,在消息中间件在每次收到消息消费者发送的消息之后开始消费该消息,消息消费者会监测记录该消息消费者的单机耗时,是否消费成功以及基于本次耗时及前次耗时而计算的单机每秒处理事务量(Transaction Per Second,TPS),并以该监测结果作为表征该消费者当前服务能力。消息消费者依据表征该消费者当前服务能力的参数值的重要程度定义各个参数权重。例如,对于某些特定的消息消费者,消息消费者与消息中间件连接链路以及消费者自身的处理能力至关重要,则可将消息是否成功消费这一参数值的权重设为最大,其次,消息消费的单机耗时这一参数值设置为次大,并将TPS权重值设置最小值。不同消息消费者可以根据自身的特定设置不同权重值,对于某些参数对消息消费者无关紧要时,其权重值也可以设置为零,即不考虑该参数值对服务能力的影响。在所述当前活跃度值为表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量中的一种时,相当于权重为百分之百。
基于上述表征消息消费者的当前服务能力的参数值以及各自的权重,计算其加权平均值,具体计算公式如下:
上述的公式中,服务能力A表征当前服务能力的各个参数的参数值,权值T表征与参数值对应的权重,n为表征当前服务能力的参数的个数。通过上述加权平均获得的加权平均值S即代表该消息消费者的当前活跃度。
消息消费者获得该活跃度之后,通过上述建立的连接通道将该活跃度反馈至消息中间件。其中,可以针对消息消费者每次消费消息之后获得的当前活跃度值执行一次反馈动作,也可以依据一定的周期,在反馈周期来临时将该时刻的当前活跃度反馈至消息中间件。前者会占用更多的连接资源,但能够更为精确的告知消息中间件消息消费者的活跃状态;而后者占用资源少,但是消息中间件获得消息消费者状态是非实时的。
在消息中间件获取来自消息消费者的当前活跃度之后,可将该当前活跃度保存至与该消息消费者活跃度的历史记录中。并由该历史记录中查询其历史最大活跃度,计算本次接收的当前活跃度值与历史最大活跃度值的比值。
对于每一在线注册的消息消费者,均计算出其当前活跃度与历史最大活跃度的比值。然后根据设置的阈值,选出比值大于或等于该阈值的所有消息消费者,作为后续按照设定规则优先发送消息的消费者对象。
其中所述阈值可以由消费中间件待发送消息列表,注册消费者的整体活跃度值整体考虑设置。本实施例中,所述消息消费者活跃度阈值通过所有注册在线的消费者的当前活跃度的平均值与其总和的比值获得。
消费者平均活跃度Sv:为消费者活跃度之和Se除以注册消费者总数C:Sv=Se/C
在本申请另外的一个实施例中,所述获取满足消息消费活跃度阈值的消息消费者列表包括:接收消息消费者发送的表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量以及各自的权重;计算所述当前服务能力值及其权重的加权平均数,并将该加权平均数作为该消息消费者的当前活跃度值;计算所述当前活跃度值与该消息消费者历史最大活跃度值的比值;将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。与上述的方式有所不同,本实施例中,并非直接接收由消费者已经计算好的当前活跃度,而是接收消息消费者当前消费消息后表征消息当前服务能力值的各项参数,所述参数包括单机耗时、是否消费成功和单机每秒事务处理量以及各自的权重;然后根据消息消费者上报的所述参数在消息中间件侧计算消息消费者的当前活跃度,其计算的方式与上述实施例无异。以同样的方式获得各个在线注册的消息消费者的当前活跃度,并以与上述实施例中相同的方式获得满足活跃度阈值的消息消费者列表。
通过上述方式获得消息消费者列表之后,可以依据活跃度由高至低的原则一次向消费者分配消息队列中的消息。具体实施过程可参考如下的步骤200。
步骤200,对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向消息消费者分配消息队列中的消息。
如上所述,通过上述的步骤获取了满足消息消费活跃度阈值的消息消费者列表,处于列表中的消息消费者具有较快的消息处理能力,服务能力处于低水位,消费消息的成功率高,可以优先将消息队列中的消息向消息消费者推送。本实施例的一种推送消息的方式如下:依据消费者活跃度由高到低的顺序将消息队列中的消息依次向消息消费者这分配。这种方式能够保证活跃度高的消息消费者优先接收并消费消息,以保证该消费者性能被充分利用,能够接收并消费更多的消息,能者多劳。而活跃度较低的消费者在一定的时间延迟后接收消息,以保证所有发送的消息都能够被消费而不被积压。但是,绝对的依据消费者活跃度由高到低的顺序依次发送消息也有可能使得效率低下,消息中间件消息队列的消息无法及时高效的推送至消息消费者。基于此,可以考虑在基于消费者活跃度原则的前提下,将在线注册的消费者活跃度由高到低划分为不同的区间,处于每一区间的消息消费者称为一个分组,处于同一分组的消息消费者可以依据机会均能原则平均合理的接收消息。
具体实施如下:所述对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向消息消费者分配消息队列中的消息包括:对于满足消息消费活跃度阈值的消费者,按照活跃度由高到低的顺序将消息消费者分为不同的组,每一分组中包括至少两个消息消费者;按照活跃度由高至低的顺序,依次向每一分组的消费者分配待消费消息;对于每一分组中的消费者,按照机会均等原则向消息消费者分配待消费消息。
其中,所述机会均等原则与做服务器负载均衡的原理相同。相应的,诸如轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted)等负载均衡算法均可以应用于此。其中哈希算法是最为常用的算法,其包括:获取分组中每一消息消费者的消费者ID及在分组中消费者数目;对所述消费者ID执行hash取模运算;向满足hash取模运算结果的消费者分配待消费消息。具体而言,若分组中有由N个消费者,需要将消息队列中的消息平均分发到这N个消息消费者上。采用如上算法:即对hash结果取余数(hash()mod N):对消费者编号从0到N-1,按照自定义的hash()算法,对每个消费者的hash()值按N取模,得到余数i,然后将请求分发到编号为i的消费者。
对于每一组中的消费者,均按照上述的哈希按余取模的方法将消息队列的消息发送。先对位于高活跃度区间的分组的消费者推送,接着对位于较低活跃度区间的分组的消费者推送,直至列表中所有分组全部被推送完毕。其中,上述分组中消费者数目可以根据需要而设定,所有分组中消费者的数目可以相同,也可以不同。在不同时,可以考虑位于高活跃度区间的消费者数目可以较多,而位于较低活跃度区间的消费者的数目可以较少。本领域技术人员可以根据需要设置分组数目以及各组中消费者数目,设置时兼顾效率及公平。
上述的实施例中,消息中间件获取消费者消费消息后服务能力,如业务成功率、业务平均处理时长、性能TPS等能力,计算结果出现变化时,消费者主动反馈服务能力至消息中间件。消息中间件在收到各消费端更新的服务能力后,根据消费者在线情况、服务能力等来计算调整最终的消费者活跃度情况,均值等;然后在推送消息时,优先计算活跃度再进行取模操作将消息分配给消费者,既满足了平均公平的原则,也满足了能者多劳的特点;活跃度高的消费者将得到较多的消息推送。从而避免了消费者消息积压问题,也避免了消费者性能问题无法消费该消息,并需要生产者回滚的情形。消息处理系统的整体效率得以提高。
与上述的用于消息分配的方法相对应,本申请还提供一种用于消息分配的装置。请参考图2,其为本申请提供的一种用于消息分配的装置的实施例的示意图。由于该用于消息分配的装置与所述用于消息分配的方法相类似,此处关于装置的描述仅仅是示意图的,相关之处可参考上述的方法实施例。
本实施例中提供的一种用于消息分配的装置,包括:
获取单元200,用于获取满足消息消费活跃度阈值的消息消费者列表;
分配单元210,用于对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向消息消费者分配消息队列中的消息。
可选的,所述获取单元包括:
接收单元,用于接收消息消费者发送的该消费者的当前活跃度值;
计算单元,用于计算该当前活跃度值与历史最大活跃度的比值,并将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。
可选的,所述获取单元包括:
交互单元,用于接收消息消费者发送的表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量以及各自的权重;
活跃度计算单元,用于计算所述当前服务能力值及其权重的加权平均数,并将该加权平均数作为该消息消费者的当前活跃度值;
计算单元,用于计算所述当前活跃度值与该消息消费者历史最大活跃度值的比值;并将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。
可选的,所述分配单元包括:
分组单元,用于对于满足消息消费活跃度阈值的消费者,按照活跃度由高到低的顺序将消息消费者分为不同的组,每一分组组中包括至少两个消息消费者;
按组分配单元,用于按照活跃度由高至低的顺序,依次向每一分组的消费者分配待消费消息;
组内消息分配单元,用于对于每一分组中的消费者,按照机会均等原则向消息消费者分配待消费消息。
可选的,所述组内消息分配单元包括:
消费者ID获取单元,用于获取分组中每一消息消费者的消费者ID;
取模运算单元,用于对所述消费者ID执行hash取模运算;
执行单元,用于向满足hash取模运算结果的消费者分配待消费消息。
可选的,所述取模运算单元,具体用于对所述消费者ID执行hash按余取模运算;
可选的,所述组内消息分配单元,具体用于依据先进先出原则的原则,将消息队列中的消息按照接收机会均等原则向消息消费者分配待消费消息。
所述的用于消息分配的装置具有与上述用于消息分配的方法的实施例相同的技术效果,这里不再赘述。
与所述用于消息分配的方法和装置相对应,本申请还提供一种用于消息消费的方法与装置。下面对所述方法和装置分别进行说明。
请参考图3,其为本申请的一种用于消息消费的方法的实施例的流程图。本实施例中,所述方法包括:
步骤S300,获取由消息中间件推送的消息并消费该消息。
其中,本步骤中获取消息中间件推送的消息之前,需要先建立与消息中间件的连接,然后向消息中间件发送请求,并在建立通道之后接收来自消息中间件的消息,并消费该消息。本步骤中建立连接并消费消息的方式与现有技术无异,相关之处可参照现有技术中消息消费者接收消息中间件推送消息的相关技术,在此不再展开论述。
步骤S300,获取该消费者消费消息的当前服务能力值及各种表征当前服务能力值的各个参数权重;将所述当前消费服务能力值或者表征所述当前服务能力值的各个参数及其权重的加权平均作为活跃度值反馈至所述消息中间件;或者按照设定的时间周期向消息中间件反馈所述当前消费服务能力值或活跃度值。其中,所述表征当前服务能力值的参数包括:消息消费者消费该消息的单机耗时、是否消费成功和单机每秒事务处理量。
在消息消费者消费消息时,可检测消息消费者消费消息时的单机耗时,是否成功消费等相关参量(或参数),并计算该消费者的单机TPS。针对每一参量结合该参量的权重,计算当前活跃度,相关计算方法可参考上述用于消息分配的方法的实施例中的相关描述。此外,也可以将所述相关参量以及权重一并发送至消息中间件,由消息中间件进行活跃度计算。
与所述用于消息消费的方法相对应的,本申请还提供用于消息消费的装置,请参考图4,所述装置包括:消息获取消费单元400,用于获取由消息中间件推送的消息并消费该消息;当前服务能力监测单元410,用于获取该消费者消费消息的当前服务能力值及各种表征当前服务能力值的各个参数权重;反馈单元420,将所述当前消费服务能力值或者表征所述当前服务能力值的各个参数及其权重的加权平均作为活跃度值反馈至所述消息中间件;或者按照设定的时间周期向消息中间件反馈所述当前消费服务能力值或活跃度值。本实施例中,仅对所述的装置实施例进行了简单的描述,相关之处可参考上述的用于消息消费的方法的实施例。
此外,本申请还提供了一种用于消息处理的系统,请参考图5,其为本申请的一种用于消息处理的系统的实施例的示意图,所述系统包括:消息生产者500,上述任一技术方案所述的用于消息分配的装置510,以及上述任一技术方案所述的用于消息消费的装置520。本实施例的系统由于消息中间件能够根据消息消费者的反馈的当前活跃度选择消息推送的目的消费者,从而很好地考虑了消息消费者性能、状态,能者多劳,并可保证整个消息处理系统高效率运行;以维持并改善消费者系统的服务能力,确保系统稳定、健壮。当消费者处于服务能力低水位时可以通过加快消费速度迅速调整消费者的最佳服务能力;两种调节方向构成了完整的调节机制,将整个消费群、消息中间件状态调整为最健康的服务状态,最高效的性能状态。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
Claims (19)
1.一种用于消息分配的方法,其特征在于包括:
获取满足消息消费活跃度阈值的消息消费者列表;所述满足消息消费活跃度阈值的消息消费者,指当前活跃度值与历史最大活跃度的比值大于或等于所述消息消费者活跃度阈值的消息消费者;所述当前活跃度值为表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种及其权重的加权平均数;
对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向消息消费者分配消息队列中的消息。
2.根据权利要求1所述的用于消息分配的方法,其特征在于,所述获取满足消息消费活跃度阈值的消息消费者列表包括:
接收消息消费者发送的该消费者的当前活跃度值;
计算该当前活跃度值与历史最大活跃度的比值;
将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。
3.根据权利要求2所述的用于消息分配的方法,其特征在于,所述当前活跃度值为表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种及其权重的加权平均数。
4.根据权利要求1所述的用于消息分配的方法,其特征在于,所述获取满足消息消费活跃度阈值的消息消费者列表包括:
接收消息消费者发送的表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种以及相应的权重;
计算所述当前服务能力值及其权重的加权平均数,并将该加权平均数作为该消息消费者的当前活跃度值;
计算所述当前活跃度值与该消息消费者历史最大活跃度值的比值;
将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。
5.根据权利要求2或4所述的用于消息分配的方法,其特征在于:所述消息消费者活跃度阈值通过所有注册在线的消费者的当前活跃度的平均值与其总和的比值获得。
6.根据权利要求1所述的用于消息分配的方法,其特征在于,所述对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向消息消费者分配消息队列中的消息包括:
对于满足消息消费活跃度阈值的消费者,按照活跃度由高到低的顺序将消息消费者分为不同的组,每一分组中包括至少两个消息消费者;
按照活跃度由高至低的顺序,依次向每一分组的消费者分配待消费消息;
对于每一分组中的消费者,按照机会均等原则向消息消费者分配待消费消息。
7.根据权利要求6所述的用于消息分配的方法,其特征在于,所述对于每一分组中的消费者,按照机会均等原则向消息消费者分配待消费消息具体包括:
获取分组中每一消息消费者的消费者ID及在分组中消费者数目;
对所述消费者ID执行hash取模运算;
向满足hash取模运算结果的消费者分配待消费消息。
8.根据权利要求7所述的用于消息分配的方法,其特征在于,所述取模运算具体为hash按余取模运算。
9.根据权利要求6所述的用于消息分配的方法,其特征在于,所述对于每一分组中的消费者,按照机会均等原则向消息消费者分配待消费消息具体是指:依据先进先出原则的原则,将消息队列中的消息按照接收机会均等原则向消息消费者分配待消费消息。
10.一种用于消息分配的装置,其特征在于包括:
获取单元,用于获取满足消息消费活跃度阈值的消息消费者列表;所述满足消息消费活跃度阈值的消息消费者,指当前活跃度值与历史最大活跃度的比值大于或等于所述消息消费者活跃度阈值的消息消费者;所述当前活跃度值为表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种及其权重的加权平均数;
分配单元,用于对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向消息消费者分配消息队列中的消息。
11.根据权利要求10所述的用于消息分配的装置,其特征在于,所述获取单元包括:
接收单元,用于接收消息消费者发送的该消费者的当前活跃度值;
计算单元,用于计算该当前活跃度值与历史最大活跃度的比值,并将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。
12.根据权利要求10所述的用于消息分配的装置,其特征在于,所述获取单元包括:
交互单元,用于接收消息消费者发送的表征消息消费者当前服务能力值的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种以及相应的权重;
活跃度计算单元,用于计算所述当前服务能力值及其权重的加权平均数,并将该加权平均数作为该消息消费者的当前活跃度值;
计算单元,用于计算所述当前活跃度值与该消息消费者历史最大活跃度值的比值;并将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息消费者。
13.根据权利要求10所述的用于消息分配的装置,其特征在于,所述分配单元包括:
分组单元,用于对于满足消息消费活跃度阈值的消费者,按照活跃度由高到低的顺序将消息消费者分为不同的组,每一分组组中包括至少两个消息消费者;
按组分配单元,用于按照活跃度由高至低的顺序,依次向每一分组的消费者分配待消费消息;
组内消息分配单元,用于对于每一分组中的消费者,按照机会均等原则向消息消费者分配待消费消息。
14.根据权利要求13所述的用于消息分配的装置,其特征在于,所述组内消息分配单元包括:
消费者ID获取单元,用于获取分组中每一消息消费者的消费者ID;
取模运算单元,用于对所述消费者ID执行hash取模运算;
执行单元,用于向满足hash取模运算结果的消费者分配待消费消息。
15.根据权利要求14所述的用于消息分配的装置,其特征在于,所述取模运算单元,具体用于对所述消费者ID执行hash按余取模运算。
16.根据权利要求13所述的用于消息分配的装置,其特征在于,所述组内消息分配单元,具体用于依据先进先出原则的原则,将消息队列中的消息按照接收机会均等原则向消息消费者分配待消费消息。
17.一种用于消息消费的方法,其特征在于,包括:
获取由消息中间件推送的消息并消费该消息;
获取消费者消费消息的当前服务能力值及各种表征当前服务能力值的各个参数权重;
将所述消费消息的当前服务能力值或者表征所述当前服务能力值的各个参数及其权重的加权平均作为活跃度值反馈至所述消息中间件;或者按照设定的时间周期向消息中间件反馈所述当前消费服务能力值或活跃度值;
所述表征当前服务能力值的参数包括:消息消费者消费该消息的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种。
18.一种用于消息消费的装置,其特征在于,包括:
消息获取消费单元,用于获取由消息中间件推送的消息并消费该消息;
当前服务能力监测单元,用于获取消费者消费消息的当前服务能力值及各种表征当前服务能力值的各个参数权重;所述表征当前服务能力值的参数包括:消息消费者消费该消息的单机耗时、是否消费成功和单机每秒事务处理量中的至少一种;
反馈单元,将所述消费消息的当前服务能力值或者表征所述当前服务能力值的各个参数及其权重的加权平均作为活跃度值反馈至所述消息中间件;或者按照设定的时间周期向消息中间件反馈所述当前消费服务能力值或活跃度值。
19.一种用于消息处理的系统,其特征在于包括:
消息生产者,上述权利要求10至16任一所述的用于消息分配的装置,以及上述权利要求18所述的用于消息消费的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410107984.3A CN104935622B (zh) | 2014-03-21 | 2014-03-21 | 一种用于消息分配、消费的方法及装置,用于消息处理的系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410107984.3A CN104935622B (zh) | 2014-03-21 | 2014-03-21 | 一种用于消息分配、消费的方法及装置,用于消息处理的系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104935622A CN104935622A (zh) | 2015-09-23 |
CN104935622B true CN104935622B (zh) | 2019-03-15 |
Family
ID=54122594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410107984.3A Active CN104935622B (zh) | 2014-03-21 | 2014-03-21 | 一种用于消息分配、消费的方法及装置,用于消息处理的系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104935622B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598760B (zh) * | 2016-12-19 | 2020-07-10 | 北京奇虎科技有限公司 | 消息队列的消费方法及装置 |
CN106878415B (zh) * | 2017-02-15 | 2020-09-01 | 阿里巴巴集团控股有限公司 | 数据消费的负载均衡方法及装置 |
CN107623642A (zh) * | 2017-08-30 | 2018-01-23 | 山东中创软件商用中间件股份有限公司 | 一种消息流量控制方法及装置 |
CN109491810B (zh) * | 2018-11-20 | 2020-06-23 | 泰华智慧产业集团股份有限公司 | 可扩展的多时效等级消息转发的方法和系统 |
CN110162419A (zh) * | 2019-05-31 | 2019-08-23 | 北京奇艺世纪科技有限公司 | 一种消息消费状态检测方法及装置 |
CN110290139B (zh) * | 2019-06-28 | 2021-12-31 | 思必驰科技股份有限公司 | 消息传输方法及装置 |
CN110515746A (zh) * | 2019-08-22 | 2019-11-29 | 北京宝兰德软件股份有限公司 | 一种处理慢消费者的方法及装置 |
CN110365802B (zh) * | 2019-08-26 | 2022-11-15 | 北京奇艺世纪科技有限公司 | 一种消息传输方法、消息转发设备及存储介质 |
CN112860446A (zh) * | 2019-11-27 | 2021-05-28 | 上海哔哩哔哩科技有限公司 | 消息分发方法 |
CN111258727B (zh) * | 2019-12-02 | 2023-06-16 | 广州赢领信息科技有限公司 | 面向实时流处理的负载均衡方法、电子设备及存储介质 |
CN111555986B (zh) * | 2020-04-26 | 2022-07-05 | 支付宝(杭州)信息技术有限公司 | 一种拥塞控制方法、装置及设备 |
CN114157705A (zh) * | 2021-12-07 | 2022-03-08 | 深圳前海微众银行股份有限公司 | 一种信息推送方法及装置、存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070233843A1 (en) * | 2006-03-30 | 2007-10-04 | Gabriele Frey-Ganzel | Method and system for an improved work-load balancing within a cluster |
CN101539872B (zh) * | 2009-04-23 | 2012-07-04 | 深圳先进技术研究院 | 超级计算机的自适应调度系统及方法 |
CN101557344A (zh) * | 2009-05-21 | 2009-10-14 | 南昌航空大学 | 一种基于空间地理位置的动态负载均衡方法 |
CN101834906B (zh) * | 2009-12-31 | 2012-11-21 | 中国科学院声学研究所 | 一种分布式任务处理和协作的多尺度服务单元选择方法 |
CN101957780B (zh) * | 2010-08-17 | 2013-03-20 | 中国电子科技集团公司第二十八研究所 | 一种基于资源状态信息的网格任务调度处理器及方法 |
-
2014
- 2014-03-21 CN CN201410107984.3A patent/CN104935622B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN104935622A (zh) | 2015-09-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104935622B (zh) | 一种用于消息分配、消费的方法及装置,用于消息处理的系统 | |
CN105718317B (zh) | 一种任务调度方法及装置 | |
CN102316133B (zh) | 一种负载均衡方法及装置 | |
CN104202254A (zh) | 一种基于云计算平台服务器智能负载均衡方法 | |
CN103442030A (zh) | 发送和处理业务请求信息的方法和系统以及客户端装置 | |
CN101951411A (zh) | 云调度系统及方法以及多级云调度系统 | |
CN107295048A (zh) | 负载均衡方法及装置 | |
WO2020211629A1 (zh) | 一种基于区块链的短链接消息监听方法及装置 | |
CN106850834A (zh) | 一种业务请求方法和装置及负载均衡器 | |
CN105791371B (zh) | 一种云存储服务系统及方法 | |
US20050066008A1 (en) | Method and system for regulating the dispatching of messages for requestors | |
CN106302090B (zh) | 一种消息处理方法、装置及系统 | |
Kliazovich et al. | CA-DAG: Communication-aware directed acyclic graphs for modeling cloud computing applications | |
CN105208133A (zh) | 一种服务器、负载均衡器以及服务器负载均衡方法和系统 | |
CN108650667A (zh) | 终端调度方法和装置 | |
CN107579924A (zh) | 一种流量调拨方法和装置 | |
CN104301241B (zh) | 一种soa动态负载分发方法与系统 | |
CN114501351A (zh) | 流量控制方法、设备及存储介质 | |
CN109584105A (zh) | 一种服务响应的方法及系统 | |
CN104268007A (zh) | 一种事件请求分布式调度方法和系统 | |
CN105591790B (zh) | 数据通信连接池管理装置 | |
CN112866394B (zh) | 一种负载均衡方法、装置、系统、计算机设备和存储介质 | |
CN109600402A (zh) | 服务器负载均衡方法及装置、存储介质、服务器、服务系统 | |
CN110377411B (zh) | 一种面向分布式云的工作流任务调度方法和系统 | |
CN109428901B (zh) | 消息处理方法以及消息处理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20191209 Address after: P.O. Box 31119, grand exhibition hall, hibiscus street, 802 West Bay Road, Grand Cayman, Cayman Islands Patentee after: Innovative advanced technology Co., Ltd Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, British Cayman Islands Patentee before: Alibaba Group Holding Co., Ltd. |