一种提高消息队列系统性能的装置及其方法

文档序号:6385620阅读:572来源:国知局
专利名称:一种提高消息队列系统性能的装置及其方法
技术领域
本发明涉及程序进程间通信机制及消息队列处理技术,尤其涉及一种提高消息队列系统性能的装置及其方法。
背景技术
消息队列(Message Queue)是一种应用程序间进行进程通信的方法。应用程序通过写和读取出入队列的针对应用程序的数据(消息)来通信,而无需专用连接。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过远程过程调用实现通信。队列的使用除去了接收和发送应用程序需要同时执行的要求,实现程序间解耦的目的。消息队列是一个典型的生产者、消费者模型,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息。其应用场景在于,web应用中,将一些无需即时返回而且耗时的操作提取出来,进行异步处理,节省服务器的请求响应时间,从而提高系统的吞吐量。AMQP (Advanced Message Queuing Protocol)是一个异步消息传递所使用的应用层协议规范。AMQP的目标是为通用消息队列架构提供通用的构建工具,统一了消息模式,提供了发布/订阅、队列、事务以及流数据,提供基于内容的路由,易于拓展。该协议使得遵从该规范的客户端应用和消息中间件服务器的全功能互操作成为可能。RabbitMQ则是一个在AMQP基础上实现的完整的、可复用的企业消息系统。它是用Erlang语言完成的,支持集群、消息持久化、错误恢复等特性。RabbitMQ内置的集群特性设计用以实现两个目标一是允许在一个集群中一个节点宕机时,生产者进程和消费者进程能够继续保持运行;二是通过简单的增删节点即可实现集群能力的动态扩容和收缩。但是RabbitMQ的集群特性在特定场景下,即使其队列中的消息为空,也会出现内存暴涨的问题。例如,在下列场景下I) RabbitMQ使用集群模式,如3台服务器组成的集群;2)多个生产者(由于生产者和消息队列上游处理能力相关,因此其数目不由消息队列控制);3)生产者会向多个队列里发送消息,消息的到来不均匀,导致可能存在多个生产者同时向一个队列中持续发送消息的状况;4)消息大小在100KB上下;5)消费者的能力足够,使得消息队列集群中不会堆积消息。此时,RabbitMQ的集群特性会导致RabbitMQ的单个实例内存暴涨。

发明内容
有鉴于此,本发明的主要目的在于提供一种提高消息队列系统性能的装置及其方法,利用中心元信息节点技术,解决RabbitMQ的集群特性会出现实例内存暴涨的缺陷,并提高消息队列RabbitMQ的性能,提高其处理能力。为达到上述目的,本发明的技术方案是这样实现的一种提高消息队列系统性能的装置,主要包括生产者模块Producer,ThriftServer中转层模块,消费者模块Consumer,中心节点数据库Database,自动化工具Tools以及HTTP服务器;其中所述生产者模块Producer,用于实现发送策略、连接管理功能;所述Thrift Server中转层模块,用于实现连接管理、队列与所在主机对应关系查询与维护、统计功能、配额管理功能以及发布消息功能;所述消费者模块Consumer,主要用于实现连接管理、队列与所在主机对应关系查询与维护、获取消息的功能;所述中心节点数据库Database,用于实现统一的后端存储,使用Redis实现,作为中心节点维护系统的元信息;所述Thrift Server中转层模块和消费者模块Consumer均将从该中间节点数据库Database中查找队列与所在主机的对应关系、更新统计和查询配额;所述自动化工具Tools,为一系列自动化工具,包括项目创建、队列创建、队列监控、配额管理工具;所述HTTP服务器,用于提供对读取和发送消息队列消息的RESTful访问接口。其中所述Database作为中间节点存储元信息,包含队列与所在主机对应关系信息、统计信息、配额信息。所述Thrift Server 中转层,包括!Connection Manager 类,Background Checker类,Version Manager 类,DB Manager 类,Host Manager 类,Subscriber Manager 类,StatManager 类和 Quota Manager 类;其中所述Connection Manager类,用于根据主机名、业务类型、用户名、密码,返回一个可用的连接;用于连接建立;用于连接缓存,维护连接池;所述Background Checker类,用于后台线程类,周期性执行,检查mq:*: version是否有更新,同时更新配额和统计信息;所述Version Manager类,用于维护后台数据当前版本;所述DB Manager类,用于数据库访问;所述Host Manager类,用于根据队列、业务类型、订阅者信息,查询数据库,返回主机名列表;所述Subscriber Manager类,用于根据队列、业务类型信息,返回订阅者列表;所述Stat Manager类,用于更新统计数据;所述Quota Manager类,用于查询是否超过每日配额和队列配额。所述消费者模块,包括=MqConsumerClient,用于给客户提供使用的接口 ;MqServiceConsumer Internal,用于验证用户是否具有订阅特定业务类型中特定队列的权限;还用于维护一个可用的到队列的连接,当连接不可用时,自动创建新的连接,并获取消息;Topic Updater,用于消息主题更新线程,从所述Database中获取最新的消息主题对应的队列名;Statistic Collector,用于单独的日志收集线程,将消费日志传到server端,以分析出user消费的消息数、总大小、平均大小、平均获取消息速度。—种提高消息队列系统性能的方法,该方法包括A、配置一 RabbitMQ集群,包括生产者模块Producer, Thrift Serer中转层模块,消费者模块Consumer,中心节点数据库Database,自动化工具Tools以及HTTP服务器;B、使用Redis实现中心节点数据库Database,以实现统一的后端存储,并作为中心节点维护系统的元信息;C、使所述Thrift Server中转层模块和消费者模块Consumer均将从该中心节点数据库Database中查找队列与所在主机的对应关系、更新统计和查询配额。本发明所提供的提高消息队列系统性能的装置及其方法,具有以下优点本发明利用中心元信息节点维护队列与主机的对应关系,与消息队列集群的通信(发送消息、接收消息)均使用与队列所在机器的连接完成通信,解决了消息队列RabbitMQ集群实例内存暴涨的问题。此外,本发明还提供了数据统计、配额管理等功能,能够实现对发送端的管理和控制,同时还实现了发送能力动态扩容的功能,在管控层面提高了消息队列RabbitMQ的性能。


图1为本发明提高消息队列系统性能的装置结构示意图。
具体实施例方式下面结合附图及本发明的实施例对本发明的装置及其方法作进一步详细的说明。Thrift是一个软件框架,可以用来进行可扩展且跨语言的服务的开发,它结合了功能强大的软件堆栈和代码生成引擎,以构建多种编程语言之间无缝结合的、高效的服务。其最初由Facebook公司开发,2007年4月开放源代码,2008年5月进入Apache孵化器。Redis是一个高性能的key-value存储系统。本发明应用了 Thrift和Redis技术。图1为本发明提高消息队列系统性能的装置结构示意图。如图1所示,该装置主要包括6个模块,分别是生产者模块(Producer),Thrift Server中转层模块,消费者模块(Consumer),中心节点数据库(Database),自动化工具(Tools)以及HTTP服务器。其中I)生产者模块(Producer)。所述 Producer 是一个标准的 C++Thrift Client 程序,其主要实现发送策略(默认实现轮询策略)、连接管理(连接检测和重连)的功能。2) Thrift Server中转层模块。其主要实现连接管理、队列与所在主机对应关系查询与维护(包括为实现高可靠性和队列动态扩展实现的功能逻辑)、统计功能、配额管理功能以及发布消息功能。3)消费者模块(Consumer)。所述Consumer是使用C++语言实现的消费者框架,其主要实现连接管理、队列与所在主机对应关系查询与维护、获取消息的功能。4)中心节点数据库(Database)。用于实现统一的后端存储,使用Redis实现,作为中心节点维护系统的元信息。5)自动化工具(Tools)。为一系列自动化工具,包括项目创建、队列创建、队列监
控、配额管理等工具。
6)HTTP服务器(HTTP Server)。用于提供对读取和发送消息队列消息的RESTful访问接口。所述各个模块之间的关系,见图1所示的提高消息队列系统性能的装置结构示意图。其中,所述Database作为中间节点存储元信息,包含队列与所在主机对应关系信息、统计信息、配额信息等。Thrift Server中转层模块和消费者模块(Consumer)均将从中间节点Database中查找队列与所在主机的对应关系、更新统计和查询配额。从而实现所有发送消息均使用队列所在服务器的实际网络连接。此部分作为本发明的核心,用此方法,可以解决RabbitMQ集群特性出现的内存暴涨问题,并提高消息队列集群的性能。所述Thrift Server中转层,包括如下类I) Connection Manager类,其功能为根据主机名、业务类型、用户名、密码,返回一个可用的连接;连接建立;连接缓存,维护连接池。2) Background Checker类,其功能为后台线程类,周期性执行,检查mq:*:version是否有更新,同时更新配额和统计信息。3) Version Manager类,其功能为维护后台数据当前版本,如果有元信息状态改变,其版本将会更新。4) DB Manager类,其功能数据库访问类。5) Host Manager类,其功能根据队列、业务类型、订阅者信息,查询数据库,返回主机名列表。6) Subscriber Manager类,其功能根据队列、业务类型信息,返回订阅者列表。7)Stat Manager类,其功能更新统计数据,带有缓存功能,发布100条消息后,更新一次后台统计数据。8) Quota Manager类,其功能查询是否超过每日配额和队列配额。所述消费者模块,包括如下部分I) MqConsumerClient,用于给客户提供使用的接口,具体实现由MqServiceConsumerlnternal 类完成。其接口如下
权利要求
1.一种提高消息队列系统性能的装置,其特征在于,主要包括生产者模块Producer,Thrift Server中转层模块,消费者模块Consumer,中心节点数据库Database,自动化工具Tools以及HTTP服务器;其中 所述生产者模块Producer,用于实现发送策略、连接管理功能; 所述Thrift Server中转层模块,用于实现连接管理、队列与所在主机对应关系查询与维护、统计功能、配额管理功能以及发布消息功能; 所述消费者模块Consumer,主要用于实现连接管理、队列与所在主机对应关系查询与维护、获取消息的功能; 所述中心节点数据库Database,用于实现统一的后端存储,使用Redis实现,作为中心节点维护系统的元信息;所述Thrift Server中转层模块和消费者模块Consumer均将从该中间节点数据库Database中查找队列与所在主机的对应关系、更新统计和查询配额; 所述自动化工具Tools,为一系列自动化工具,包括项目创建、队列创建、队列监控、配额管理工具; 所述HTTP服务器,用于提供对读取和发送消息队列消息的RESTful访问接口。
2.根据权利要求1所述提高消息队列系统性能的装置,其特征在于,所述Database作为中间节点存储元信息,包含队列与所在主机对应关系信息、统计信息、配额信息。
3.根据权利要求1所述提高消息队列系统性能的装置,其特征在于,所述ThriftServer 中转层,包括Connection Manager 类,Background Checker 类,Version Manager类,DB Manager 类,Host Manager 类,Subscriber Manager 类,Stat Manager 类和 QuotaManager类;其中 所述Connect ion Manager类,用于根据主机名、业务类型、用户名、密码,返回一个可用的连接;用于连接建立;用于连接缓存,维护连接池; 所述Background Checker类,用于后台线程类,周期性执行,检查mq:*: version是否有更新,同时更新配额和统计信息; 所述Version Manager类,用于维护后台数据当前版本; 所述DB Manager类,用于数据库访问; 所述Host Manager类,用于根据队列、业务类型、订阅者信息,查询数据库,返回主机名列表; 所述Subscriber Manager类,用于根据队列、业务类型信息,返回订阅者列表; 所述Stat Manager类,用于更新统计数据; 所述Quota Manager类,用于查询是否超过每日配额和队列配额。
4.根据权利要求1所述提高消息队列系统性能的装置,其特征在于,所述消费者模块,包括:MqConsumerClient,用于给客户提供使用的接口 ; MqServiceConsumerInternal,用于验证用户是否具有订阅特定业务类型中特定队列的权限;还用于维护一个可用的到队列的连接,当连接不可用时,自动创建新的连接,并获取消息; Topic Updater,用于消息主题更新线程,从所述Database中获取最新的消息主题对应的队列名; Statistic Collector,用于单独的日志收集线程,将消费日志传到server端,以分析出user消费的消息数、总大小、平均大小、平均获取消息速度。
5.一种提高消息队列系统性能的方法,其特征在于,该方法包括 A、配置一RabbitMQ集群,包括生产者模块Producer, Thrift Server中转层模块,消费者模块Consumer,中心节点数据库Database,自动化工具Tools以及HTTP服务器; B、使用Redis实现中心节点数据库Database,以实现统一的后端存储,并作为中心节点维护系统的元信息; C、使所述ThriftServer中转层模块和消费者模块Consumer均将从该中心节点数据库Database中查找队列与所在主机的对应关系、更新统计和查询配额。
全文摘要
本发明公开一种提高消息队列系统性能的装置及其方法,包括生产者模块,用于实现发送策略、连接管理功能;ThriftServer中转层模块,用于实现连接管理、队列与所在主机对应关系查询与维护、统计功能、配额管理功能以及发布消息功能;消费者模块,主要用于实现连接管理、队列与所在主机对应关系查询与维护、获取消息的功能;中心节点数据库,用于实现统一的后端存储,使用Redis实现,作为中心节点维护系统的元信息;自动化工具Tools,为一系列自动化工具;HTTP服务器,用于提供对读取和发送消息队列消息的RESTful访问接口。利用本发明,能够解决RabbitMQ的集群特性会出现实例内存暴涨的缺陷,并提高消息队列RabbitMQ的性能,提高其处理能力。
文档编号G06F9/46GK103064731SQ20121057684
公开日2013年4月24日 申请日期2012年12月26日 优先权日2012年12月26日
发明者刘浩 申请人:人民搜索网络股份公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1