CN103873523B - 客户端集群访问方法及装置 - Google Patents
客户端集群访问方法及装置 Download PDFInfo
- Publication number
- CN103873523B CN103873523B CN201210547829.4A CN201210547829A CN103873523B CN 103873523 B CN103873523 B CN 103873523B CN 201210547829 A CN201210547829 A CN 201210547829A CN 103873523 B CN103873523 B CN 103873523B
- Authority
- CN
- China
- Prior art keywords
- cluster
- client
- message
- exchange area
- node
- 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
Abstract
本发明公开了一种客户端集群访问方法及装置,其方法包括以下步骤:S1:客户端中的Lookup装置获取集群列表;S2:客户端中的注册装置根据S1的集群列表,建立信息交换区和连接池;S3:客户端中的发送装置作为生产者发送消息到信息交换区;S4:客户端建立“发送接收”模型;S5:客户端中的发送装置根据“发送接收”模型,唤醒所述连接池中的线程并将消息发送;S6:客户端中的接收装置作为接收者接收消息并处理。本发明通过应用程序获取集群队列的列表信息,进行消息的生产和消费,不必关心服务端集群的数量,使得集群队列的数量变化对客户端无影响,达到高并发、海量数据传输场景下的动态资源扩展和保持高传输性能的效果。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种客户端集群访问方法及装置,尤其涉及一种消息中间件客户端集群访问方法及装置。
背景技术
消息中间件是一类特定的中间件,它利用高效、可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可在分布环境下扩展进程间的通信,并支持多通信协议、语言、应用程序、硬件和软件平台。
传统的消息中间件集群解决方案,是基于后台服务节点的集群模式。其工作流程如下:
步骤一:应用程序事先只需知道指定的服务节点的一个集群队列名,并向该集群队列发送消息。
步骤二:服务节点的集群队列是逻辑队列,其集群成员为一系列本地队列或远程队列,其中的每个远程队列均映射到一个发送队列上。本地队列和发送队列是物理队列。服务节点的集群队列接收到一条消息,通过以下分发方式,将该消息转至不同的物理队列:
分发方式一:静态负载均衡。即通过指定集群成员队列权重的方式,按照权重值,依次将集群队列接收到的消息,转存至不同的物理队列。
分发方式二:静态备份。即按照集群成员顺序,将集群队列接收到的消息,转存至第一个有效的物理队列。
分发方式三:动态负载均衡。即将消息转存至各集群成员队列中待处理数据最少的物理队列中。
分发方式四:基于消息内容的路由方式。即通过解析消息内容,将消息转存至指定的物理队列中。
步骤三:处理物理队列中的消息。对于本地队列,服务节点不做处理。对于发送队列,服务节点会将该队列中的消息,发送到该发送队列对应发送连接的目标节点,目标队列是相应的远程队列指定的目的队列。
如图1所示,四个消息中间件服务节点(node1、node2、node3、node4)共同组成了一个节点集群。其中,节点node1部署了一个集群队列,该集群队列包含了四个成员队列(一个本地队列LQ1,三个远程队列RQ1、RQ2、RQ3),其中的三个远程队列分别对应另外三个服务节点。应用程序发送消息到节点node1的集群队列,服务进程通过上述某种分发策略,将消息转存至四个成员队列之一,如果该成员队列是远程队列,则服务进程将消息转发至对应的其他服务节点。
经过上述工作流程,通过后台服务节点的部署协作,消息最终存储于节点集群的某一个成员节点。
上述工作流程具有以下几个特点:
1、应用程序只需要知道配置有集群队列的服务节点,以及该节点上所部署的一个集群队列。
2、从应用程序发送消息开始到最终存储,如果集群成员队列为本地队列(如LQ),则每条消息需要经历一次网络传输(或IPC传输)、一次逻辑转存(从集群队列到本地队列);如果集群成员队列为远程队列(如RQ1、RQ2、RQ3中的一个),则每条消息需要经历一次网络传输(或IPC传输)、两次逻辑转存(从集群队列到远程队列,再到该远程队列对应的发送队列)、一次网络传输(从服务节点node1到其他服务节点)。
由于现有的传统的消息中间件集群解决方案具有上述特点,因此具有下面两个缺陷:首先在整个集群队列,对外只有一个入口;在网络带宽不是瓶颈的场景下,限制了应用程序发送消息的能力。其次,一条消息从发送到存储所经过的流程较为复杂;限制了消息从发送到存储的效率。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是,针对现有技术的不足,提供一种客户端集群访问方法及装置,使得集群队列的数量变化对客户端无影响,达到高并发、海量数据传输场景下的动态资源扩展和保持高传输性能
(二)技术方案
本发明提供一种客户端集群访问方法,包括以下步骤:
S1:客户端中的Lookup装置获取集群列表;
S2:客户端中的注册装置根据S1的集群列表,建立信息交换区和连接池;
S3:客户端中的发送装置作为生产者发送消息到信息交换区;
S4:客户端建立“发送接收”模型;
S5:客户端中的发送装置根据“发送接收”模型,唤醒所述连接池中的线程并将消息发送;
S6:客户端中的接收装置作为接受者接收消息并处理。
其中,S1具体包括:客户端应用程序通过所述Lookup装置与服务器进行通讯交互,获取集群成员列表信息,所述集群成员列表信息包括:节点集群的各个成员节点名、ip及端口,以及对应的队列名称。
其中,S2之前还包括:S2’:客户端应用程序通过所述Lookup装置获取节点集群的各个成员信息之后,建立和各个成员节点之间的网络通道;一个客户端应用程序可以和同一个成员节点之间建立多条网络通道或一个客户端应用程序和所有的成员节点之间所建立的所有网络通道,共同组成了一个客户端集群连接池,连接池中的每一条连接,对应一个独立的线程。
其中,S2具体包括:客户端应用程序通过所述注册装置创建连接池和一个轻量级的信息交换区,以及一个负责管理不同连接线程的主线程。一个主线程,一个轻量级的信息交换区,一个连接池,共同组成了一个客户端集群。
其中,S3具体包括:客户端应用程序通过所述发送装置发送消息后,该消息被存放在轻量级的所述信息交换区;所述信息交换区为一块共享内存。
其中,所述S4具体包括:根据S3客户端应用程序作为发送者向所述信息交换区存放消息后,客户端应用程序作为接受者通过所述连接池对应的各个连接线程读取所述消息交换区中的消息;所述信息交换区、客户端应用程序中的发送装置、连接线程,组成“发送接收”模型。
其中,所述S5具体包括:根据“发送接收”模型,连接线程从所述信息交换区读取一条消息之后,采用正常的消息中间件发送流程,通过该连接线程所对应的连接通道,将消息发送至相应的成员节点并存储。
其中,所述S6具体包括:客户端应用程序通过接收装置接收消息时,在创建客户端集群实例的同时,注册一个消息处理的回调函数,连接线程采用正常的消息中间件接受流程接收消息,收到消息后调用该回调函数处理消息。
本发明还提供一种客户端集群访问装置,包括:
Lookup装置,用于从名字服务器获取集群列表;
注册装置,用于创建线程连接池,与集群目的节点建立连接;
发送装置,发送消息存放到轻量级的信息交换区,唤醒连接池对应的某个连接线程;
接收装置,用于注册消息处理的回调函数。
(三)有益效果
本发明提供的客户端集群访问方法及装置,通过应用程序获取集群队列的列表信息,进行消息的生产和消费,不必关心服务端集群的数量,使得集群队列的数量变化对客户端无影响,达到高并发、海量数据传输场景下的动态资源扩展和保持高传输性能的效果。
附图说明
图1是现有技术消息中间件集群工作原理图;
图2是本发明客户端集群访问装置工作时序原理图;
图3是本发明客户端集群访问方法步骤图;
图4是本发明S1客户端中的Lookup装置获取集群列表工作原理图;
图5是本发明S1客户端中的Lookup装置获取集群列表时序原理图;
图6是本发明S2客户端中的注册装置建立信息交换区和连接池时序原理图;
图7是本发明S2客户端中的注册装置建立信息交换区和连接池工作原理图;
图8是本发明S5客户端中的发送装置唤醒所述连接池中的线程并将消息发送工作原理图;
图9是本发明S6客户端中的接收装置作为接受者接收消息并处理工作原理图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
如图2所示,本发明采用基于内存的CQS(Client Queue System,轻量消息队列系统),该CQS采用链表式数据结构,利用UNIX系统的IPC进程间通讯(共享内存、信号灯)技术,使得消息的生产者和消息的消费者可以对消息队列进行操作,完成应用进程或线程间的数据交换。客户端集群访问装置,包括:Lookup装置,用于从名字服务器获取集群列表;注册装置,用于创建线程连接池,与集群目的节点建立连接;发送装置,发送消息存放到轻量级的信息交换区,唤醒连接池对应的某个连接线程;接收装置,用于注册消息处理的回调函数。
如图3所示,本法提供的一种客户端集群访问方法,包括以下步骤:
S1:客户端中的Lookup装置获取集群列表;
S2:客户端中的注册装置根据S1的集群列表,建立信息交换区和连接池;
S3:客户端中的发送装置作为生产者发送消息到信息交换区;
S4:客户端建立“发送接收”模型;
S5:客户端中的发送装置根据“发送接收”模型,唤醒所述连接池中的线程并将消息发送;
S6:客户端中的接收装置作为接受者接收消息并处理。
如图4-5并参考图2所示,S1具体包括:
客户端应用程序通过所述Lookup装置与服务器进行通讯交互,获取集群成员列表信息,所述集群成员列表信息包括:节点集群的各个成员节点名、ip及端口,以及对应的队列名称。为了使客户端应用程序可以识别节点集群的所有成员,该装置提供了一个和各集群成员节点同级别的名字服务器。该名字服务器可以单独存在,也可以是节点集群的成员之一。
如图6并参考图2所示,S2之前还包括:S2’:客户端应用程序通过所述Lookup装置获取节点集群的各个成员信息之后,建立和各个成员节点之间的网络通道;一个客户端应用程序可以和同一个成员节点之间建立多条网络通道或一个客户端应用程序和所有的成员节点之间所建立的所有网络通道,共同组成了一个客户端集群连接池,连接池中的每一条连接,对应一个独立的线程。
如图7并参考图2所示,S2具体包括:客户端应用程序通过所述注册装置创建连接池和一个轻量级的信息交换区,以及一个负责管理不同连接线程的主线程。一个主线程,一个轻量级的信息交换区,一个连接池,共同组成了一个客户端集群。客户端集群的各个组成部分中,主线程的功能为:定期进行lookup操作,和服务器进行通讯交互,实时获取节点集群的有效成员信息列表,并及时维护连接池中各个连接的有效性。
其中,S3具体包括:客户端应用程序通过所述发送装置发送消息后,该消息被存放在轻量级的所述信息交换区;所述信息交换区为一块共享内存。所述S4具体包括:根据S3客户端应用程序作为发送者向所述信息交换区存放消息后,客户端应用程序作为接受者通过所述连接池对应的各个连接线程读取所述消息交换区中的消息;所述信息交换区、客户端应用程序中的发送装置、连接线程,组成“发送接收”模型。
如图8并参考图2所示,所述S5具体包括:根据“发送接收”模型,连接线程从所述信息交换区读取一条消息之后,采用正常的消息中间件发送流程,通过该连接线程所对应的连接通道,将消息发送至相应的成员节点并存储。
如图9所示,所述S6具体包括:客户端应用程序通过接收装置接收消息时,在创建客户端集群实例的同时,注册一个消息处理的回调函数,连接线程采用正常的消息中间件接受流程接收消息,收到消息后调用该回调函数处理消息。另外,接收消息还用一种按照优先级接收模式,该模式与普通模式不同的地方在于,每个连接线程接收消息时,要按照优先级选择队列中优先级最高的消息,收到消息后,不是直接调用回调函数处理,而是放到一个轻量级的信息交换区,然后选择交换区中优先级最高的消息调用回调函数处理。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
Claims (7)
1.一种客户端集群访问方法,其特征在于,包括以下步骤:
S1:客户端中的Lookup装置获取集群列表;
S2:客户端中的注册装置根据S1的集群列表,建立信息交换区和连接池;
S3:客户端中的发送装置作为生产者发送消息到信息交换区;
S4:客户端建立“发送接收”模型;
S5:客户端中的发送装置根据“发送接收”模型,唤醒所述连接池中的线程并将消息发送;
S6:客户端中的接收装置作为接受者接收消息并处理;
其中,S1具体包括:
客户端应用程序通过所述Lookup装置与服务器进行通讯交互,获取集群成员列表信息,所述集群成员列表信息包括:节点集群的各个成员节点名、ip及端口,以及对应的队列名称;
其中,所述Lookup装置提供了一个和各集群成员节点同级别的名字服务器,以使客户端应用程序识别节点集群的所有成员,该名字服务器是节点集群的成员之一;
其中,步骤S2具体包括:客户端应用程序通过所述注册装置创建连接池和一个轻量级的信息交换区,以及一个负责管理不同连接线程的主线程;一个主线程,一个轻量级的信息交换区,一个连接池,共同组成了一个客户端集群。
2.如权利要求1所述的方法,其特征在于,S2之前还包括:
S2’:客户端应用程序通过所述Lookup装置获取节点集群的各个成员信息之后,建立和各个成员节点之间的网络通道;一个客户端应用程序可以和同一个成员节点之间建立多条网络通道或一个客户端应用程序和所有的成员节点之间所建立的所有网络通道,共同组成了一个客户端集群连接池,连接池中的每一条连接,对应一个独立的线程。
3.如权利要求1所述的方法,其特征在于,S3具体包括:
客户端应用程序通过所述发送装置发送消息后,该消息被存放在轻量级的所述信息交换区;所述信息交换区为一块共享内存。
4.如权利要求1所述的方法,其特征在于,所述S4具体包括:
根据S3客户端应用程序作为发送者向所述信息交换区存放消息后,客户端应用程序作为接受者通过所述连接池对应的各个连接线程读取所述信息交换区中的消息;所述信息交换区、客户端应用程序中的发送装置、连接线程,组成“发送接收”模型。
5.如权利要求1所述的方法,其特征在于,所述S5具体包括:
根据“发送接收”模型,连接线程从所述信息交换区读取一条消息之后,采用正常的消息中间件发送流程,通过该连接线程所对应的连接通道,将消息发送至相应的成员节点并存储。
6.如权利要求1所述的方法,其特征在于,所述S6具体包括:
客户端应用程序通过接收装置接收消息时,在创建客户端集群实例的同时,注册一个消息处理的回调函数,连接线程采用正常的消息中间件接受流程接收消息,收到消息后调用该回调函数处理消息。
7.一种客户端集群访问装置,其特征在于,包括:
Lookup装置,用于从名字服务器获取集群列表;
注册装置,用于创建线程连接池,与集群目的节点建立连接;
发送装置,发送消息存放到轻量级的信息交换区,唤醒连接池对应的某个连接线程;
接收装置,用于注册消息处理的回调函数;
其中,Lookup装置从名字服务器获取集群列表具体包括:
客户端应用程序通过所述Lookup装置与服务器进行通讯交互,获取集群成员列表信息,所述集群成员列表信息包括:节点集群的各个成员节点名、ip及端口,以及对应的队列名称;
其中,所述Lookup装置提供了一个和各集群成员节点同级别的名字服务器,以使客户端应用程序识别节点集群的所有成员,该名字服务器是节点集群的成员之一;
其中,所述注册装置具体用于创建连接池和一个轻量级的信息交换区,以及一个负责管理不同连接线程的主线程;一个主线程,一个轻量级的信息交换区,一个连接池,共同组成了一个客户端集群。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210547829.4A CN103873523B (zh) | 2012-12-14 | 2012-12-14 | 客户端集群访问方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210547829.4A CN103873523B (zh) | 2012-12-14 | 2012-12-14 | 客户端集群访问方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103873523A CN103873523A (zh) | 2014-06-18 |
CN103873523B true CN103873523B (zh) | 2018-02-27 |
Family
ID=50911644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210547829.4A Active CN103873523B (zh) | 2012-12-14 | 2012-12-14 | 客户端集群访问方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103873523B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105591969A (zh) * | 2015-11-23 | 2016-05-18 | 江苏瑞中数据股份有限公司 | 一种国网环境下消息总线的使用方法 |
CN105681462B (zh) * | 2016-03-14 | 2019-03-01 | 南京邮电大学 | 一种基于消息路由的集群系统及数据通信中转方法 |
CN106027609B (zh) * | 2016-05-05 | 2019-04-02 | 深圳大数点科技有限公司 | 一种物联网服务系统 |
CN106919713B (zh) * | 2017-03-13 | 2021-03-16 | 苏州浪潮智能科技有限公司 | 一种集群文件系统及分布式文件系统多客户端文件控制方法 |
CN108199896A (zh) * | 2018-01-16 | 2018-06-22 | 中电福富信息科技有限公司 | 基于RabbitMQ的分布式消息发布系统 |
CN109981652A (zh) * | 2019-03-28 | 2019-07-05 | 北京中安兴坤科技有限公司 | 计算机安全检查系统以及方法 |
CN112162868B (zh) * | 2020-08-28 | 2022-05-13 | 广州南方卫星导航仪器有限公司 | 应用于集群处理的数据通信方法、装置及存储介质 |
CN112363823A (zh) * | 2020-10-10 | 2021-02-12 | 北京东方通软件有限公司 | 一种基于消息的轻量级无服务器计算方法 |
CN112948141A (zh) * | 2021-02-04 | 2021-06-11 | 北京淇瑀信息科技有限公司 | 一种基于消息中间件的数据处理方法、装置和系统 |
CN113268466A (zh) * | 2021-06-07 | 2021-08-17 | 上海数禾信息科技有限公司 | 消息集群平滑迁移的方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1267868A (zh) * | 2000-04-05 | 2000-09-27 | 深圳黎明电脑网络有限公司 | 一种信息集中交换的方法及其实现模块 |
CN1267860A (zh) * | 2000-04-05 | 2000-09-27 | 深圳黎明电脑网络有限公司 | 一种静态分散信息交换方法及其实现模块 |
EP1737256A1 (en) * | 2005-06-24 | 2006-12-27 | Siemens S.p.A. | Method to share signalling load between radio access network controllers in a cellular communication network |
CN101674257A (zh) * | 2008-09-10 | 2010-03-17 | 阿里巴巴集团控股有限公司 | 一种消息存储方法、装置及一种消息处理系统 |
-
2012
- 2012-12-14 CN CN201210547829.4A patent/CN103873523B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1267868A (zh) * | 2000-04-05 | 2000-09-27 | 深圳黎明电脑网络有限公司 | 一种信息集中交换的方法及其实现模块 |
CN1267860A (zh) * | 2000-04-05 | 2000-09-27 | 深圳黎明电脑网络有限公司 | 一种静态分散信息交换方法及其实现模块 |
EP1737256A1 (en) * | 2005-06-24 | 2006-12-27 | Siemens S.p.A. | Method to share signalling load between radio access network controllers in a cellular communication network |
CN101674257A (zh) * | 2008-09-10 | 2010-03-17 | 阿里巴巴集团控股有限公司 | 一种消息存储方法、装置及一种消息处理系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103873523A (zh) | 2014-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103873523B (zh) | 客户端集群访问方法及装置 | |
CN111580970B (zh) | 一种联邦学习的模型分发与聚合的传输调度方法 | |
CN103051629B (zh) | 一种基于软件定义网络中数据处理的系统、方法和节点 | |
CN104461740B (zh) | 一种跨域集群计算资源聚合和分配的方法 | |
CN104246737B (zh) | 在内容分发网络中使用视频流的连接池技术的系统和方法 | |
US7290059B2 (en) | Apparatus and method for scalable server load balancing | |
CN101326508A (zh) | 智能消息传递应用编程接口 | |
CN104038418B (zh) | 针对混合型拓扑结构数据中心的路由方法、路径探测机制和报文处理机制 | |
CN103475566A (zh) | 一种实时消息交换平台及分布式集群组建方法 | |
CN106302230B (zh) | 一种数据传输方法及装置 | |
CN109040243A (zh) | 一种报文处理方法及装置 | |
CN100581173C (zh) | 一种视频网格自适应负载均衡调度方法 | |
CN108139920A (zh) | 在动态条件及变约束下用于基于信息中心联网(icn)的代理服务器管理的方法、设备及系统 | |
CN103354525A (zh) | 基于OpenFlow实现广域网任播负载均衡的系统和方法 | |
CN102137032A (zh) | 一种云消息系统及云消息发送和接收方法 | |
CN107147734A (zh) | 一种基于两级转发的网络流量线程级动态负载均衡方法及系统 | |
CN109495526A (zh) | 一种报文发送方法、装置、系统、电子设备及存储介质 | |
CN102355422B (zh) | 多核并行无锁的qos流量控制方法 | |
CN102761608A (zh) | Udp会话复用的方法和负载均衡设备 | |
CN102387062B (zh) | 动态桥接点改善p2p节点在跨网络时的传输速度的方法 | |
CN101557346A (zh) | 轮询式分组排队输出调度方法及分组交换节点 | |
CN102845042A (zh) | 一种应用层多个活动物理接口的带宽聚集系统及方法 | |
CN107332786B (zh) | 一种在服务链环境下保障数据流截止时间的调度方法 | |
JP4375054B2 (ja) | ネットワークノード装置およびサーバ装置ならびにマルチキャストツリー構築方法およびプログラム | |
Zhai et al. | An improved DDS publish/subscribe automatic discovery algorithm |
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 |