一种面向微服务架构的消息传输系统及其方法转让专利
申请号 : CN202010818890.2
文献号 : CN112153108B
文献日 : 2021-10-08
发明人 : 朱利鲁 , 邓秋辉 , 黄凯
申请人 : 中国科学院电子学研究所苏州研究院
摘要 :
权利要求 :
1.一种面向微服务架构的消息传输系统,其特征在于,包括服务端和客户端,其中客户端与微服务集成,用于向服务端发送需向其他客户端同步的消息,并接收服务端同步的来自其他客户端的消息;所述服务端独立部署,用于接收客户端发送消息,并根据通讯方式将消息传输到目标客户端;所述服务端和客户端均采用基于任务链的并行处理方式实现对传输消息的处理;将传输消息实体拆分并封装为自定义的帧结构作为最小传输单元,封装的传输消息实体包括一个头帧和若干个续帧;
所述头帧包括传输过程中的控制信息,由帧头和帧体组成,帧头包括帧体长度、数据帧类型、标志位、数据唯一标识、保留位;帧体包括传输数据长度、传输数据类型、加密方式、压缩方式、序列化编码方式、是否持久化标志、通信方式、发送端编号、接收端编号和数据校验信息,其中数据帧类型包括头帧类型、续帧类型,数据唯一标识定义帧数据是否属于同一个消息实体;传输数据类型包括字节类型、字符串类型、文件类型;通信方式包括单播、组播和广播;
所述续帧包括传输消息实体,由帧头和帧体组成,帧头包括帧体长度、数据帧类型、标志位、数据唯一标识、保留位;帧体包括消息实体;
所述服务端和客户端基于任务链的并行处理方式实现对传输消息的处理,具体是将消息处理过程划分为阶段子任务,将子任务组装为并行处理的任务链,支持同时开启多条任务链;
所述服务端通过传输组的方式组织客户端,支持单播、组播和广播三种通信方式;
所述客户端实时向服务端报送心跳,服务端管理各传输组中的所有客户端的编号、状态和数据索引信息;
如果服务端在超时时间内未收到客户端的心跳,则认定该客户端失联,将该客户端标记为失联状态,并将传输组内维护的客户端状态标记为失联状态;
如果服务端重新接收到客户端的心跳,则将客户端标记为在线状态,并将传输组内维护的客户端状态标记为在线状态;
如果服务端在指定时间间隔内始终未能接收到客户端的心跳,则将移除该客户端,并在传输组中删除该客户端信息。
2.根据权利要求1所述的面向微服务架构的消息传输系统,其特征在于,所述服务端针对来自同一客户端的消息,采用同一条任务链进行处理。
3.根据权利要求1或2所述的面向微服务架构的消息传输系统,其特征在于,所述任务链包括服务端消息接收校验分发任务链、客户端消息接收任务链和客户端消息发送任务链,其中:
服务端消息接收校验分发任务链包括4个子任务,其中子任务1用于消息接收、控制信息获取和数据校验,子任务2用于消息持久化,子任务3用于获取需转发的客户端编号,子任务4用于消息发送;
客户端消息接收任务链包括4个子任务,其中子任务1用于消息接收、控制信息获取和数据校验,子任务2用于数据解密,子任务3用于数据解压,子任务4用于数据反序列化;
客户端消息接收任务链包括4个子任务,其中子任务1用于接收微服务提供的消息、控制信息并对消息进行序列化,子任务2用于数据压,子任务3用于数据加密,子任务4用于数据封装和发送。
4.根据权利要求3所述的面向微服务架构的消息传输系统,其特征在于,所述服务端采用嵌入式数据库RocksDB对需要持久化的消息进行入库处理,具体方法为:将消息封装成日志对象,并提交至日志预处理任务队列;
从日志预处理任务队列批量获取日志对象,检查并按顺序为日志对象设置索引,然后将日志对象写入内存缓存,同时,将日志对象提交至持久化任务队列;
从持久化任务队列中批量获取日志对象,按索引顺序将日志对象写入嵌入式数据库RocksDB,入库成功后通知后续任务可以进行相关数据的转发,并删除内存缓存中的相关日志对象。
5.根据权利要求1所述的面向微服务架构的消息传输系统,其特征在于,所述客户端加入指定传输组时,服务端自发向该客户端同步该传输组内传输的历史消息;
所述客户端断线重连时,服务端以客户端最后接收成功的数据索引为依据,自发向该客户端同步断线期间未能正常同步的历史消息;
同时,所述服务端向客户端进行历史消息传输时,将暂时阻塞向该客户端传输增量信息的过程,当历史数据传输完毕后,再进行增量信息传输。
6.一种面向微服务架构的消息传输方法,其特征在于,基于权利要求1‑5任一项所述的系统实现面向微服务架构的消息传输,包括:客户端向服务端发送需向其他客户端同步的消息,并接收服务端同步的来自其他客户端的消息;
服务端接收客户端发送消息,并根据通讯方式将消息传输到目标客户端;
所述服务端和客户端均采用基于任务链的并行处理方式实现对传输消息的处理。
说明书 :
一种面向微服务架构的消息传输系统及其方法
技术领域
背景技术
服务结构各异、服务间的通讯方式多样等问题,使得微服务之间的消息传输面临较大的瓶
颈。例如,微服务消息传输可能存在一对一、一对多和多对多等多种通讯方式的传输场景,
且通讯方式在传输过程中可能会根据实际需要而动态改变。此外,微服务在网络环境中进
行消息传输时需解决诸多问题,如节点断线重连时的消息同步问题;大量消息传输过程中
的数据一致性问题;接收消息失真、超时情况下的重传问题;以及敏感消息加密传输问题
等。这对微服务架构下消息传输的稳定性、可靠性提出了较高的要求。因此,如何满足微服
务架构下消息传输的多样化的场景需求,突破微服务之间消息传输的结构瓶颈,提高消息
传输的稳定性与可靠性,是微服务架构亟待解决的问题。
发明内容
息,并接收服务端同步的来自其他客户端的消息;所述服务端独立部署,用于接收客户端发
送消息,并根据通讯方式将消息传输到目标客户端;所述服务端和客户端均采用基于任务
链的并行处理方式实现对传输消息的处理。
式、压缩方式、序列化编码方式、是否持久化标志、通信方式、发送端编号、接收端编号和数
据校验信息,其中数据帧类型包括头帧类型、续帧类型,数据唯一标识定义帧数据是否属于
同一个消息实体;传输数据类型包括字节类型、字符串类型、文件类型;通信方式包括单播、
组播和广播;
同时开启多条“任务链”。
子任务4用于消息发送;
于数据封装和发送。
日志对象。
端发送的消息,采用同一“任务链”进行处理,保证消息传输、处理的有序性;同时,服务端对
收到的消息进行一致性校验、持久化,保证消息传输的可靠性。2)提供单播、组播和广播三
种通讯方式,支持客户端通讯方式动态调整,满足微服务架构不同消息传输场景需求;3)引
入服务化架构理念,将数据阶段处理封装为任务,多个任务灵活组装为“任务链”,方便拓展
数据路由规则;4)基于以上效果,本发明在实际环境下能够实现在大规模微服务节点间进
行快速的消息同步,具有较强的可操作性和实用价值。
附图说明
具体实施方式
用于限定本申请。
步的来自其他客户端的消息。服务端独立部署,用于接收客户端发送消息,并根据通讯方式
(单播、组播和广播)将消息传输到目标客户端。服务端和客户端均采用基于“任务链”的并
行处理方式实现对传输消息的高效处理。下面结合附图1‑7对本发明做进一步详细的描述。
的帧结构,作为最小传输单元。封装的传输消息实体由一个头帧和若干个续帧组成,如图2
所示。详细说明如下。
式、压缩方式、序列化编码方式、是否持久化标志、通信方式、发送端编号、接收端编号和数
据校验信息组成。其中,数据帧类型包括头帧类型、续帧类型,数据唯一标识定义帧数据是
否属于同一个消息实体;传输数据类型包括字节类型、字符串类型、文件类型;通信方式包
括单播、组播和广播。
传输消息实体可能由多个续帧组成。
客户端的消息,采用同一条“任务链”进行处理,保证同一客户端传输消息的有序性。
消息实体;通过解析头帧提取是否持久化标志、通信方式、发送端编号、接收端编号和数据
校验信息等控制信息;使用提取的数据校验信息对接收到的消息实体进行校验,如果校验
失败,通知发送客户端重新发送,并结束当前处理链路;如果校验成功,通知发送客户端可
继续发送下一条消息;将控制信息和消息实体封装成对象,交给子任务2处理;
下一子任务进行处理,如果需要持久化,则先对消息对象进行持久化,然后再提交给下一子
任务处理;
过发送端编号查询发送端所属的传输组,并获取组内所有在线的客户端编号;如果是广播,
则获取当前所有在线的客户端编号。然后将消息对象写入对应客户端待发送缓存队列中,
交给子任务4处理;
试发送,若多次重试仍转发失败,则将错误信息通知到来源客户端。
息实体;通过解析头帧获取数据校验信息、加密方式、压缩方式、序列化编码方式等控制信
息;使用获取的数据校验信息对接收到的消息实体进行校验,如果校验失败,通知发送服务
端重新发送,并结束当前处理链路,如果校验成功,通知发送服务端可继续发送下一条消
息,并将控制信息和消息实体封装成对象,然后交给子任务2处理;
式、加密方式和通信方式等控制信息,客户端根据的微服务选择的序列化编码方式对数据
进行序列化,然后提交给子任务2处理;
试,若多次重试仍发送失败,则通知对应微服务数据发送失败。
消息;2)客户端断线重连后仍可获取断线期间传输的历史消息;3)避免传输服务宕机导致
传输消息的丢失。
③④⑤⑥所示;
关日志对象。如图5中步骤⑦⑧⑨⑩所示。
端可以新建、删除并维护多个传输组,如图6所示,加入指定传输组的客户端支持组播通信
方式。同时,服务端维护了一个超级传输组,加入超级传输组的客户端支持广播通信方式。
所有客户端都支持单播通信方式。
输组中当前所有在线的客户端;广播通信是指客户端申请并经服务端同意后加入超级传输
组,当客户端加入超级传输组并且选择广播的通信方式,传输的消息将会被转发到当前所
有在线的客户端;单播通信是指客户端通过指定消息接收端编号并且选择单播的通信方
式,传输的消息将会被转发到指定编号的客户端。
户端失联,将该客户端标记为失联状态,并将传输组内维护的客户端状态标记为失联状态;
如果服务端重新接收到客户端的心跳,则将客户端标记为在线状态,并将传输组内维护的
客户端状态标记为在线状态;如果服务端在指定时间间隔内始终未能接收到客户端的心
跳,则将移除该客户端,并在传输组中删除该客户端信息。
户端同步断线期间未能正常同步的历史消息,确保客户端接收消息的完整性。同时,服务端
向客户端进行历史消息传输时,将暂时阻塞向该客户端传输增量信息的过程,当历史数据
传输完毕后,再进行增量信息传输,以确保数据的顺序性。
可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,
本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可
包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM
(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括
随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,
诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强
型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM
(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
盾,都应当认为是本说明书记载的范围。
说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护
范围。因此,本申请专利的保护范围应以所附权利要求为准。