客户端集群访问方法及装置制造方法

文档序号:7987432阅读:152来源:国知局
客户端集群访问方法及装置制造方法
【专利摘要】本发明公开了一种客户端集群访问方法及装置,其方法包括以下步骤:S1:客户端中的Lookup装置获取集群列表;S2:客户端中的注册装置根据S1的集群列表,建立信息交换区和连接池;S3:客户端中的发送装置作为生产者发送消息到信息交换区;S4:客户端建立“发送接收”模型;S5:客户端中的发送装置根据“发送接收”模型,唤醒所述连接池中的线程并将消息发送;S6:客户端中的接收装置作为接收者接收消息并处理。本发明通过应用程序获取集群队列的列表信息,进行消息的生产和消费,不必关心服务端集群的数量,使得集群队列的数量变化对客户端无影响,达到高并发、海量数据传输场景下的动态资源扩展和保持高传输性能的效果。
【专利说明】客户端集群访问方法及装置
【技术领域】
[0001]本发明涉及计算机【技术领域】,特别涉及一种客户端集群访问方法及装置,尤其涉及一种消息中间件客户端集群访问方法及装置。
【背景技术】
[0002]消息中间件是一类特定的中间件,它利用高效、可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可在分布环境下扩展进程间的通信,并支持多通信协议、语言、应用程序、硬件和软件平台。
[0003]传统的消息中间件集群解决方案,是基于后台服务节点的集群模式。其工作流程如下:
[0004]步骤一:应用程序事先只需知道指定的服务节点的一个集群队列名,并向该集群队列发送消息。
[0005]步骤二:服务节点的集群队列是逻辑队列,其集群成员为一系列本地队列或远程队列,其中的每个远程队列均映射到一个发送队列上。本地队列和发送队列是物理队列。月艮务节点的集群队列接收到一条消息,通过以下分发方式,将该消息转至不同的物理队列:
[0006]分发方式一:静态负载均衡。即通过指定集群成员队列权重的方式,按照权重值,依次将集群队列接收到的消息,转存至不同的物理队列。
[0007]分发方式二:静态备份。即按照集群成员顺序,将集群队列接收到的消息,转存至第一个有效的物理队列。
[0008]分发方式三:动态负载均衡。即将消息转存至各集群成员队列中待处理数据最少的物理队列中。
[0009]分发方式四:基于消息内容的路由方式。即通过解析消息内容,将消息转存至指定的物理队列中。
[0010]步骤三:处理物理队列中的消息。对于本地队列,服务节点不做处理。对于发送队列,服务节点会将该队列中的消息,发送到该发送队列对应发送连接的目标节点,目标队列是相应的远程队列指定的目的队列。
[0011]如图1所示,四个消息中间件服务节点(nodel、node2、node3、node4)共同组成了一个节点集群。其中,节点nodel部署了一个集群队列,该集群队列包含了四个成员队列(一个本地队列LQ1,三个远程队列RQ1、RQ2、RQ3),其中的三个远程队列分别对应另外三个服务节点。应用程序发送消息到节点nodel的集群队列,服务进程通过上述某种分发策略,将消息转存至四个成员队列之一,如果该成员队列是远程队列,则服务进程将消息转发至对应的其他服务节点。
[0012]经过上述工作流程,通过后台服务节点的部署协作,消息最终存储于节点集群的某一个成员节点。
[0013]上述工作流程具有以下几个特点:[0014]1、应用程序只需要知道配置有集群队列的服务节点,以及该节点上所部署的一个集群队列。
[0015]2、从应用程序发送消息开始到最终存储,如果集群成员队列为本地队列(如LQ),则每条消息需要经历一次网络传输(或IPC传输)、一次逻辑转存(从集群队列到本地队列);如果集群成员队列为远程队列(如RQ1、RQ2、RQ3中的一个),则每条消息需要经历一次网络传输(或IPC传输)、两次逻辑转存(从集群队列到远程队列,再到该远程队列对应的发送队列)、一次网络传输(从服务节点nodel到其他服务节点)。
[0016]由于现有的传统的消息中间件集群解决方案具有上述特点,因此具有下面两个缺陷:首先在整个集群队列,对外只有一个入口 ;在网络带宽不是瓶颈的场景下,限制了应用程序发送消息的能力。其次,一条消息从发送到存储所经过的流程较为复杂;限制了消息从发送到存储的效率。

【发明内容】

[0017](一)要解决的技术问题
[0018]本发明要解决的技术问题是,针对现有技术的不足,提供一种客户端集群访问方法及装置,使得集群队列的数量变化对客户端无影响,达到高并发、海量数据传输场景下的动态资源扩展和保持高传输性能
[0019](二)技术方案
[0020]本发明提供一种客户端集群访问方法,包括以下步骤:
[0021]S1:客户端中的Lookup装置获取集群列表;
[0022]S2:客户端中的注册装置根据SI的集群列表,建立信息交换区和连接池;
[0023]S3:客户端中的发送装置作为生产者发送消息到信息交换区;
[0024]S4:客户端建立“发送接收”模型;
[0025]S5:客户端中的发送装置根据“发送接收”模型,唤醒所述连接池中的线程并将消息发送;
[0026]S6:客户端中的接收装置作为接受者接收消息并处理。
[0027]其中,SI具体包括:客户端应用程序通过所述Lookup装置与服务器进行通讯交互,获取集群成员列表信息,所述集群成员列表信息包括:节点集群的各个成员节点名、ip及端口,以及对应的队列名称。
[0028]其中,S2之前还包括:S2’:客户端应用程序通过所述Lookup装置获取节点集群的各个成员信息之后,建立和各个成员节点之间的网络通道;一个客户端应用程序可以和同一个成员节点之间建立多条网络通道或一个客户端应用程序和所有的成员节点之间所建立的所有网络通道,共同组成了一个客户端集群连接池,连接池中的每一条连接,对应一个独立的线程。
[0029]其中,S2具体包括:客户端应用程序通过所述注册装置创建连接池和一个轻量级的信息交换区,以及一个负责管理不同连接线程的主线程。一个主线程,一个轻量级的信息交换区,一个连接池,共同组成了一个客户端集群。
[0030]其中,S3具体包括:客户端应用程序通过所述发送装置发送消息后,该消息被存放在轻量级的所述信息交换区;所述信息交换区为一块共享内存。[0031]其中,所述S4具体包括:根据S3客户端应用程序作为发送者向所述信息交换区存放消息后,客户端应用程序作为接受者通过所述连接池对应的各个连接线程读取所述消息交换区中的消息;所述信息交换区、客户端应用程序中的发送装置、连接线程,组成“发送接收”模型。
[0032]其中,所述S5具体包括:根据“发送接收”模型,连接线程从所述信息交换区读取一条消息之后,采用正常的消息中间件发送流程,通过该连接线程所对应的连接通道,将消息发送至相应的成员节点并存储。
[0033]其中,所述S6具体包括:客户端应用程序通过接收装置接收消息时,在创建客户端集群实例的同时,注册一个消息处理的回调函数,连接线程采用正常的消息中间件接受流程接收消息,收到消息后调用该回调函数处理消息。
[0034]本发明还提供一种客户端集群访问装置,包括:
[0035]Lookup装置,用于从名字服务器获取集群列表;
[0036]注册装置,用于创建线程连接池,与集群目的节点建立连接;
[0037]发送装置,发送消息存放到轻量级的信息交换区,唤醒连接池对应的某个连接线程;
[0038]接收装置,用于注册消息处理的回调函数。
[0039](三)有益效果
[0040]本发明提供的客户端集群访问方法及装置,通过应用程序获取集群队列的列表信息,进行消息的生产和消费,不必关心服务端集群的数量,使得集群队列的数量变化对客户端无影响,达到高并发、海量数据传输场景下的动态资源扩展和保持高传输性能的效果。
【专利附图】

【附图说明】
[0041]图1是现有技术消息中间件集群工作原理图;
[0042]图2是本发明客户端集群访问装置工作时序原理图;
[0043]图3是本发明客户端集群访问方法步骤图;
[0044]图4是本发明SI客户端中的Lookup装置获取集群列表工作原理图;
[0045]图5是本发明SI客户端中的Lookup装置获取集群列表时序原理图;
[0046]图6是本发明S2客户端中的注册装置建立信息交换区和连接池时序原理图;
[0047]图7是本发明S2客户端中的注册装置建立信息交换区和连接池工作原理图;
[0048]图8是本发明S5客户端中的发送装置唤醒所述连接池中的线程并将消息发送工作原理图;
[0049]图9是本发明S6客户端中的接收装置作为接受者接收消息并处理工作原理图。【具体实施方式】
[0050]下面结合附图和实施例,对本发明的【具体实施方式】作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
[0051]如图2所示,本发明采用基于内存的CQS(Client Queue System,轻量消息队列系统),该CQS采用链表式数据结构,利用UNIX系统的IPC进程间通讯(共享内存、信号灯)技术,使得消息的生产者和消息的消费者可以对消息队列进行操作,完成应用进程或线程间的数据交换。客户端集群访问装置,包括=Lookup装置,用于从名字服务器获取集群列表;注册装置,用于创建线程连接池,与集群目的节点建立连接;发送装置,发送消息存放到轻量级的信息交换区,唤醒连接池对应的某个连接线程;接收装置,用于注册消息处理的回调函数。
[0052]如图3所示,本法提供的一种客户端集群访问方法,包括以下步骤:
[0053]S1:客户端中的Lookup装置获取集群列表;
[0054]S2:客户端中的注册装置根据SI的集群列表,建立信息交换区和连接池;
[0055]S3:客户端中的发送装置作为生产者发送消息到信息交换区;
[0056]S4:客户端建立“发送接收”模型;
[0057]S5:客户端中的发送装置根据“发送接收”模型,唤醒所述连接池中的线程并将消息发送;
[0058]S6:客户端中的接收装置作为接受者接收消息并处理。
[0059]如图4-5并参考图2所示,SI具体包括:
[0060]客户端应用程序通过所述Lookup装置与服务器进行通讯交互,获取集群成员列表信息,所述集群成员列表信息包括:节点集群的各个成员节点名、ip及端口,以及对应的队列名称。为了使客户端应用程序可以识别节点集群的所有成员,该装置提供了一个和各集群成员节点同级别的名字服务器。该名字服务器可以单独存在,也可以是节点集群的成
员之一。
[0061]如图6并参考图2所示,S2之前还包括:S2’:客户端应用程序通过所述Lookup装置获取节点集群的各个成员信息之后,建立和各个成员节点之间的网络通道;一个客户端应用程序可以和同一个成员节点之间建立多条网络通道或一个客户端应用程序和所有的成员节点之间所建立的所有网络通道,共同组成了一个客户端集群连接池,连接池中的每一条连接,对应一个独立的线程。
[0062]如图7并参考图2所示,S2具体包括:客户端应用程序通过所述注册装置创建连接池和一个轻量级的信息交换区,以及一个负责管理不同连接线程的主线程。一个主线程,一个轻量级的信息交换区,一个连接池,共同组成了一个客户端集群。客户端集群的各个组成部分中,主线程的功能为:定期进行lookup操作,和服务器进行通讯交互,实时获取节点集群的有效成员信息列表,并及时维护连接池中各个连接的有效性。
[0063]其中,S3具体包括:客户端应用程序通过所述发送装置发送消息后,该消息被存放在轻量级的所述信息交换区;所述信息交换区为一块共享内存。所述S4具体包括:根据
S3客户端应用程序作为发送者向所述信息交换区存放消息后,客户端应用程序作为接受者通过所述连接池对应的各个连接线程读取所述消息交换区中的消息;所述信息交换区、客户端应用程序中的发送装置、连接线程,组成“发送接收”模型。
[0064]如图8并参考图2所示,所述S5具体包括:根据“发送接收”模型,连接线程从所述信息交换区读取一条消息之后,采用正常的消息中间件发送流程,通过该连接线程所对应的连接通道,将消息发送至相应的成员节点并存储。
[0065]如图9所示,所述S6具体包括:客户端应用程序通过接收装置接收消息时,在创建客户端集群实例的同时,注册一个消息处理的回调函数,连接线程采用正常的消息中间件接受流程接收消息,收到消息后调用该回调函数处理消息。另外,接收消息还用一种按照优先级接收模式,该模式与普通模式不同的地方在于,每个连接线程接收消息时,要按照优先级选择队列中优先级最高的消息,收到消息后,不是直接调用回调函数处理,而是放到一个轻量级的信息交换区,然后选择交换区中优先级最高的消息调用回调函数处理。
[0066]以上实施方式仅用于说明本发明,而并非对本发明的限制,有关【技术领域】的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
【权利要求】
1.一种客户端集群访问方法,其特征在于,包括以下步骤: 51:客户端中的Lookup装置获取集群列表; 52:客户端中的注册装置根据SI的集群列表,建立信息交换区和连接池; 53:客户端中的发送装置作为生产者发送消息到信息交换区; 54:客户端建立“发送接收”模型; S5:客户端中的发送装置根据“发送接收”模型,唤醒所述连接池中的线程并将消息发送; S6:客户端中的接收装置作为接受者接收消息并处理。
2.如权利要求1所述的方法,其特征在于,SI具体包括: 客户端应用程序通过所述Lookup装置与服务器进行通讯交互,获取集群成员列表信息,所述集群成员列表信息包括:节点集群的各个成员节点名、ip及端口,以及对应的队列名称。
3.如权利要求1所述的方法,其特征在于,S2之前还包括: S2’:客户端应用程序通过所述Lookup装置获取节点集群的各个成员信息之后,建立和各个成员节点之间的网络通道;一个客户端应用程序可以和同一个成员节点之间建立多条网络通道或一个客户端应用程序和所有的成员节点之间所建立的所有网络通道,共同组成了一个客户端集群连接池,连接池中的每一条连接,对应一个独立的线程。
4.如权利要求1所述的方法,其特征在于,S2具体包括: 客户端应用程序通过所述注册装置创建连接池和一个轻量级的信息交换区,以及一个负责管理不同连接线程的主线程。一个主线程,一个轻量级的信息交换区,一个连接池,共同组成了一个客户端集群。
5.如权利要求1所述的方法,其特征在于,S3具体包括: 客户端应用程序通过所述发送装置发送消息后,该消息被存放在轻量级的所述信息交换区;所述信息交换区为一块共享内存。
6.如权利要求1所述的方法,其特征在于,所述S4具体包括: 根据S3客户端应用程序作为发送者向所述信息交换区存放消息后,客户端应用程序作为接受者通过所述连接池对应的各个连接线程读取所述消息交换区中的消息;所述信息交换区、客户端应用程序中的发送装置、连接线程,组成“发送接收”模型。
7.如权利要求1所述的方法,其特征在于,所述S5具体包括: 根据“发送接收”模型,连接线程从所述信息交换区读取一条消息之后,采用正常的消息中间件发送流程,通过该连接线程所对应的连接通道,将消息发送至相应的成员节点并存储。
8.如权利要求1所述的方法,其特征在于,所述S6具体包括: 客户端应用程序通过接收装置接收消息时,在创建客户端集群实例的同时,注册一个消息处理的回调函数,连接线程采用正常的消息中间件接受流程接收消息,收到消息后调用该回调函数处理消息。
9.一种客户端集群访问装置,其特征在于,包括: Lookup装置,用于从名字服务器获取集群列表; 注册装置,用于创建线程连接池,与集群目的节点建立连接;发送装置,发送消息存放到轻量级的信息交换区,唤醒连接池对应的某个连接线程;接收装置 ,用于注册消息处理的回调函数。
【文档编号】H04L29/08GK103873523SQ201210547829
【公开日】2014年6月18日 申请日期:2012年12月14日 优先权日:2012年12月14日
【发明者】张辉 申请人:北京东方通科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1