一种去中心化的消息服务系统的制作方法

文档序号:8301517阅读:976来源:国知局
一种去中心化的消息服务系统的制作方法
【技术领域】
[0001]本发明涉及一种去中心化的消息服务系统。
【背景技术】
[0002]在分布式系统中,通常由一至多个独立运行的服务节点来构成一个有机整体来对外提供完整的功能服务,从而达到服务复用和系统扩展的目的。消息服务系统在分布式系统中的作用是实现各服务节点的通信、集成和整合的目的。
[0003]目前,消息服务系统主要采用集中式技术,以下两种架构实现:
第一种集中式消息服务系统(如图1所示):消息服务器作为消息中转站,来实现服务节点之间的通信。服务节点之间不存在通信连接,作为消息生产者的源服务节点把消息发往消息服务器,由消息服务器再把消息发往作为消息消费者的目的服务节点。采用该架构的消息服务系统严重依赖消息服务器,消息服务器的稳定性和吞吐量影响整个消息服务系统,如果消息服务器存在故障,整个消息服务系统都会瘫痪。
[0004]第二种集中式消息服务系统(如图2所示):每个服务节点将其基本信息(包括服务名称和服务地址等)向注册服务器注册,如果某个服务节点依赖其他服务时,需要向注册服务器获取所依赖服务的基本信息,再与所依赖服务的服务节点建立连接来进行交互。采用该架构的消息服务系统不通过注册服务器实现消息中转,整个系统的压力瓶颈不在于注册服务器,但是,如果注册服务器出现故障,也会导致整个消息服务系统无法正常工作。

【发明内容】

[0005]本发明要解决的技术问题,在于提供一种基于去中心化的架构来实现消息服务系统,克服了集中式消息服务系统对中心节点的依赖所导致的单点故障和性能瓶颈等问题,从而实现一个高效和可靠的分布式消息服务系统。
[0006]本发明是这样实现的:
一种去中心化的消息服务系统,所述消息服务系统为一集群,所述集群内包含复数个服务节点,各服务节点间通过发送消息进行交互。
[0007]进一步地,每个所述服务节点由一集群节点管理模块、一消息发送端模块、一消息路由模块、一消息编码模块、一消息解码模块、一消息分发模块以及至少一消息处理器模块组成;
所述集群节点管理模块负责跟踪和维护集群中所有服务节点的基本信息和服务状态信息,其及时侦测到集群中服务节点的添加、删除或服务状态改变,并且更新其中缓存的数据,所述集群节点管理模块还为消息路由模块中消息的发送对象提供决策数据;
所述消息发送端模块是服务节点内部向集群中其他服务节点发送消息的统一的接口端,服务节点对外发出的消息都是通过调用消息发送端模块来发送的;
所述消息路由模块:在所述消息发送模块接收到消息后,由消息路由模块决定该消息发往集群中的一个或多个服务节点,消息路由模块对消息路由决策依赖所述集群节点管理模块提供的数据;
所述消息编码模块:消息编码模块对待发送的消息进行编程成二进制数据流,通过传输层模块进行传输;
所述传输层模块负责与其它服务节点的连接建立和维护,以及服务节点间数据发送和接收;
所述消息解码模块对传输层接收到的二进制数据流进行解码,得到具体的消息;
所述消息分发模块对接收到的消息进行判断,判断该消息该发送至服务节点内的哪一个消息处理器模块进行处理;
所述消息处理器模块负责对接收到的消息进行处理,各所述消息处理器模块处理至少一种类型的消息,所述消息处理器模块将接收到的消息处理完毕后,调用所述消息发送端模块将处理后得到的结果发送出去。
[0008]进一步地,所述服务节点的基本信息包括:集群ID、节点ID、服务名称和服务地址;
所述集群ID:同一个消息服务系统中的每一个服务节点的集群ID相同,用于标识服务节点所属的集群;
所述节点ID:用于唯一标识集群中的一个服务节点,同一个消息服务系统中的每一个服务节点的节点ID必须唯一;
所述服务名称用于标识每个服务节点所能提供的服务;每一种服务至少由一个服务节点提供;
服务地址:各服务节点的服务地址是对集群内其他服务节点提供的访问方式,各服务节点间通过服务地址相互通信和交互。
[0009]进一步地,任意两所述服务节点之间进行消息交互,定义其中一服务节点为服务节点A,另一服务节点为服务节点B,其交互过程如下:
步骤1、服务节点A通过所述消息发送端模块将消息发送出去;
步骤2、服务节点A的消息路由模块根据消息的属性和集群节点管理模块提供的集群内所有服务节点的基础信息和服务状态信息,得出结论该消息应该发往服务节点B ;
步骤3、服务节点A的消息编码模块将待发送的消息编码成二进制数据流,并且通过传输层模块发往服务节点B。
[0010]步骤4、服务节点B的传输层模块接收到来自服务节点A的二进制数据流;
步骤5、服务节点B的消息解码模块将接收到的二进制数据流解码成消息对象;
步骤6、服务节点B的消息分发模块将接收到的消息根据消息类型决定将消息发往与该消息类型相匹配的消息处理器模块进行处理;
步骤7、服务节点B的消息处理器模块将接收到的消息处理完毕之后,将处理后的结果通过消息发送端模块发出;
步骤8、服务节点B将结果消息发往服务节点A的过程与消息从服务节点A发往服务节点B的步骤同理。
[0011]进一步地,所述消息服务系统中服务节点动态添加,具体步骤如下:
步骤10、新添加的服务节点在运行后,通过网络发布一条“添加节点”的广播消息,该广播消息包含新添加的服务节点的基本信息,包括:集群ID、节点ID、服务名称和服务地址; 步骤20、消息服务系统中已经存在的每一个服务节点在收到“添加节点”的广播消息后,首先判断新添加的服务节点的集群ID与自身的集群ID是否相同,如果集群ID不同,则不再处理;如果集群ID相同,则将新添加的服务节点的基本信息记录到其集群节点管理模块中;
步骤30、消息服务系统中已经存在的每一个服务节点根据新添加的服务节点的服务地址,主动与新添加的服务节点建立一条通信连接,并且向新添加的服务节点发送一个握手消息,将该服务节点的基本信息发送给新添加的服务节点;
步骤40、新添加的服务节点将收到的来自同一集群的其他服务节点的基本信息记录到其集群节点管理模块中,从而完成了动态添加过程。
[0012]进一步地,所消息服务系统中的每两个服务节点之间都维护着一个通信连接,两个服务节点以固定时间间隔发送心跳信息,用以告知对方各自服务节点的服务状态,包括:服务节点是否存活和压力负载。
[0013]进一步地,所述消息服务系统中动态删除一个服务节点的过程如下:
步骤100、服务节点正常退出,在退出前,该服务节点通过网络发布一条“删除节点”的广播消息,该广播消息包含待删除的服务节点的集群ID和节点ID ;
步骤200、消息服务系统中的服务节点在收到其他服务节点的“删除节点”的广播消息后,通过该广播消息的集群ID判断待删除的服务节点是属于同一集群后,则将待删除节点的基本信息从该服务节点的集群节点管理模块中删除,并且断开与待删除节点的通信连接,后续则不再往删除的服务节点发送消息。
[0014]进一步地,所述消息服务系统中服务节点异常退出,其处理过程如下:当一个通信连接的一方在设定的时间间隔内没有收到来自对方的心跳消息时,则认为对方已经出现异常不能提供服务,将对方的基本信息从集群节点管理模块中删除,并且断开与对方的通信连接,后续则不再向该异常退出的服务节点发送消息。
[0015]本发明具有如下优点:
本发明基于去中心化的架构来实现消息服务系统,克服了集中式消息服务系统对中心节点的依赖所导致的单点故障和性能瓶颈等问题,从而实现一个高效和可靠的分布式消息服务系统。本消息服务系统提供集群动态感知功能,能够在不存在中心节点的情况下,及时跟踪集群内服务节点的添加、删除和服务状态变化,从而提供了动态负载均衡
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1