向mq中的消息分配消费节点的装置及方法

文档序号:9691124阅读:756来源:国知局
向mq中的消息分配消费节点的装置及方法
【技术领域】
[0001] 本公开涉及消息处理,更具体地,涉及用于向消息队列(MQ)中的消息分配消费端 系统中的消费节点的装置及方法。
【背景技术】
[0002] 随着大数据时代的到来,越来越多项目和系统产生出海量的业务数据,例如电子 商务平台中产生的下单、支付、到货、优惠券到账等等数据,其中单种类型的数据量每日可 达到千万级。随着业务量的增加以及业务的扩展,不同的业务应用系统可能对这些数据进 行不同的挖掘处理。数据从生产采集系统端到业务应用系统端的处理过程,实际上是一种 消费-生产者模型的异步数据处理过程。而消息队列(Message Queue,缩写为MQ)是消费-生 产者模型的一个典型代表,其适用于任何需要进行网络通信的系统,它负责建立起网络通 信的通道,进行数据和文件的发送。进一步而言,MQ是一种应用程序对应用程序的通信方 法,具体而言是应用程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此 来通信。换而言之,一端往消息队列中不断的写入消息,而另一端则通过读取或者订阅队列 中的消息来进行消息的处理。目前成熟的MQ消息中间件有activeMQ、WebSphere MQ、京东 JMQ 等。
[0003] 生产环境中生产和采集到的海量数据在多个不同的系统之间采用MQ消息中间件 处理机制进行共享处理,为跨部门、企业范围的集成提供了可靠的基础,同时也避免了各系 统间的耦合性。但也存在一些问题亟待解决:当生产端产生了大量的消息,而消费端由于服 务器计算资源问题处理又不及时,这将导致生产端消息的大量积压,进而产生一系列的问 题,如消息积压过久而导致消息过期,或消息队列的容量限制使得部分消息丢失。这在电子 商务购物场景中将会出现用户下单成功,却无相应订单消息到达仓储系统的严重后果。
[0004] 图1示意性示出了根据相关技术的消息系统的方框图。
[0005] 如图1所示,消息系统100是一种分布式应用系统,包括消息采集系统(生产端) 1001、MQ消息中间件服务平台1003以及消息处理系统(消费端)1005。进一步,称一种类型消 息的生产者为生产节点(producer),如1011所示;一种类型消息的处理者为消费节点 (consumer ),如1051所示;消息用Μ表示,如1031所示。
[0006] 在实际生产环境中,同一业务系统往往需要对多种MQ消息进行同时处理。由于各 MQ消息在不同时间的生成数量是不同的,可能出现消费节点由于某种MQ消息数量过多,需 要消耗大量的计算资源,那么同时对其他MQ消息的处理能力就会下降,进而导致消息的积 压。
[0007] 为了尽量降低MQ消息处理积压,现有的解决方案大多在应用系统部署的前期,根 据每种消息的最大生产量以及每个消费节点的最大处理量来分配消息的服务器计算资源。 但是,这将会导致服务器资源的大量浪费。另外,在应用系统的运营后期,主要采取的有两 种方式:1)对积压的消息增加服务器资源,并重新发布应用,这种方式在短时间内能够避免 消息的积压;2)清理积压的消息或者关闭消息的写入。
[0008] 不难看出,现有的解决方案由于人工干预较多,不但使得系统运维成本加大,而且 加大了服务器资源的浪费;同时可能导致消息的延迟或不可达。
[0009] 因此,设计一个高效及时、改善资源利用的消息处理系统是非常重要且必要的。

【发明内容】

[0010] 本公开的目的至少部分地在于提供一种向消息队列(MQ)中的消息分配消费端系 统中的消费节点的装置及方法,能够高效及时地进行资源分配以使得改善系统资源利用。
[0011] 根据本公开的一个方面,提供了一种向消息队列(MQ)中的消息分配消费端系统中 的消费节点的装置,包括:监控子系统,配置为:监控MQ中各类消息的积存度量以及消费端 系统中各消费节点的处理压力度量;及当某一类消息的积存度量超过第一阈值时,为该类 消息分配一新的消费节点;和/或当某一消费节点的处理压力度量超过第二阈值时,为该消 费节点中积存度量最大的一类消息分配一新的消费节点;以及分配子系统,配置为根据监 控子系统的分配结果,更新各消费节点的订阅信息。
[0012] 根据实施例,MQ中一类消息的积存度量可以按消费该类消息的各消费节点在单位 时间段内消费该类消息的平均数量来计算。类似地,某一消费节点的处理压力度量可以按 该消费节点在单位时间段内消费的所有消息的数目来计算。
[0013] 监控子系统可以被配置为:i)判断各类消息的积存度量是否超过第一阈值,如果 均未超过第一阈值,则进行下述操作iii),或者如果某一类消息的积存度量超过第一阈值, 则对该类消息进行资源预分配操作,所述资源预分配操作包括:查找当前并不消费该类消 息的消费节点中处理压力度量最小的消费节点,假设从当前消费该类消息的各消费节点所 消费的该类消息中分出一定数量由所查找的消费节点来处理;ii)基于资源预分配操作的 结果,重新计算各类消息的积存度量以及各消费节点的处理压力度量;iii)如果某一消费 节点的处理压力度量或者通过ii)中的操作重新计算的处理压力度量超过第二阈值,则针 对该消费节点中积存度量最大的一类消息,进行上述资源预分配操作;以及iv)重复ii)和 iii)的处理,直至各消费节点所分配的各类消息的数目收敛,其中,对于各类消息,向该类 消息分配收敛结果中对该类消息的处理数量不为零的消费节点。
[0014] 分配子系统可以被配置为:针对各消费节点,判断该消费节点是否被分配了新的 一类消息,并且如果被分配了新的一类消息,则更新该消费节点的订阅信息。例如,分配子 系统可以被配置为按预定的同步时刻,来进行所述判断和更新的操作。更新可以包括:通过 MQ的应用编程接口 "ΑΡ Γ对消费节点上的MQ c on sumerL i s t en er的监听者信息进行更新,其 中每一监听者负责监听一类信息。
[0015] 根据本公开的另一方面,提供了一种向消息队列(MQ)中的消息分配消费端系统中 的消费节点的方法,该方法包括:监控MQ中各类消息的积存度量以及消费端系统中各消费 节点的处理压力度量;当某一类消息的积存度量超过第一阈值时,为该类消息分配一新的 消费节点;和/或当某一消费节点的处理压力度量超过第二阈值时,为该消费节点中积存度 量最大的一类消息分配一新的消费节点;以及根据监控子系统的分配结果,更新各消费节 点的订阅信息。
[0016] 根据实施例,可以基于各消费节点对MQ中各类消息的消费频率,来确定消息的积 存度量以及消费节点的处理压力度量,其中一消费节点cj对一类消息nu的消费频率(?定义 为N/t,其中N是该消费节点在预定时间段t内消费的该类消息πη的数目。
[0017]例如,可以根据以下公式确定一类消息mi的积存度量λ1:
[0019] 其中,η是消费端系统中部署的消费节点的数目,j是消费节点的索引且l^jgn, me i j表示消费节点c j是否处理该类消息mi,其中当消费节点c j处理该类消息mi时me i j = 1,否 贝 ljmcij = 0。
[0020] 例如,可以根据以下公式确定消费节点w的处理压力度量氏:
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1