一种消息同步方法及系统技术方案

技术编号:15262847 阅读:116 留言:0更新日期:2017-05-03 18:58
本发明专利技术公开了一种消息同步方法及系统,该方法包括如下步骤:步骤一,主节点接收客户端的消息写入请求,存储消息,并同步消息到从节点;步骤二,从节点接收主节点发来的同步消息请求,并存储消息;步骤三,利用控制节点缓存同步超时的消息和消息标识,在主节点故障后,将相应的超时消息更新到新的主节点中,通过本发明专利技术,实现了分布式消息中间件的高可靠的消息同步的目的。

Message synchronization method and system

The invention discloses a system and a message synchronization method, which comprises the following steps: A, the master node receives the client request message is written, storage and message synchronization message from node; step two, receiving synchronization messages sent from the master node request node, and stores the message; step three, the use of control node cache synchronization timeout message and message identifier, a master node in the corresponding fault after the update timeout message to the main node of the new, the invention realizes high reliable message distributed message middleware synchronization purposes.

【技术实现步骤摘要】

本专利技术涉及消息处理
,特别是涉及一种高可靠的消息同步方法及系统。
技术介绍
在分布式系统中,为了保证系统高可用,常常需要在不同物理位置的机器中保存一份数据的多个副本。为保证数据的一致性,可以采用多种复制技术。数据复制有同步复制、异步复制和半同步复制等多种技术,为了追求一致性和性能的平衡,常常会采用半同步复制方案。在数据库系统中目前有两种半同步复制的方案,第一种半同步复制方案如下:先在主节点写重做日志,然后将事务提交到主节点,之后触发等待直到从节点将主节点的重做日志写入磁盘但不要求事务在从节点完全的执行;第二种半同步复制方案如下:先在主节点写重做日志,复制重做日志到从节点,主节点等待从节点反馈接收到重做日志的ack(应答信号)之后,再提交事务并且返回commitOK(确认信号)结果给客户端。第一种半同步复制方案的主要问题是:当主节点等待从节点回应超时,会直接向客户端返回成功。如果主节点的重做日志并没有同步到从节点,这时主节点崩溃,从节点会丢失最后一个事务的内容;第二种半同步复制方案很好的解决了第一种方案的问题,如果主节点等待从节点反馈接收到重做日志的ack超时之后,主节点上面的事务不会提交,会进行回滚操作。Kafka是当前比较出色的一款高吞吐量的分布式发布订阅消息系统,其数据复制原理就采用的上述第一种半同步复制方案,为提高性能,Kafka的从节点接收到数据后就立马向主节点发送ack,而非等到持久化到磁盘上。Kafka同样存在主从同步失败后主挂掉的数据丢失问题,由于Kafka的消息存储系统不同于一般的数据库系统,如果采用第二种半同步复制方案,做数据回滚操作时需要阻塞其他线程的写操作,代价很高。
技术实现思路
为克服上述现有技术存在的不足,本专利技术之目的在于提供一种消息同步方法及系统,以实现分布式消息中间件的高可靠的消息同步的目的。为达上述及其它目的,本专利技术提出一种消息同步方法,包括如下步骤:步骤一,主节点接收客户端的消息写入请求,存储消息,并同步消息到从节点;步骤二,从节点接收主节点发来的同步消息请求,并存储消息;步骤三,利用控制节点缓存同步超时的消息和消息标识,在主节点故障后,将相应的超时消息更新到新的主节点中。进一步地,步骤一进一步包括:主节点接收客户端的消息写入请求生成WAL日志文件,并持久化到磁盘;主节点上通过WAL日志文件生成消息存储文件和消息索引文件;主节点同步WAL日志到所有的从节点。进一步地,步骤三进一步包括:步骤S1,若所有从节点的消息都同步成功,则更新主从一致的检查点信息并返回客户端消息发送成功;步骤S2,若消息同步超时,则提取消息标识和消息内容发送到该控制节点;步骤S3,若消息标识和消息发送给该控制节点成功,则返回客户端消息发送成功,否则进入步骤S4;步骤S4,返回客户端Pendding状态和消息标识信息;步骤S5,该客户端通过该控制节点判断主节点是否故障;步骤S6,若判断结果为主节点故障,则在该控制节点上获取主节点故障时刻的主从一致的检查点信息,若返回的消息标识中偏移量小于检查点中的消息偏移量,则说明消息已同步成功,准备发送下一条消息,否则说明消息同步失败且新的主节点上无此消息,尝试重新发送;步骤S7,若判断结果为主节点没有故障,则在主broker上查询主从一致的检查点信息,若返回的消息标识中偏移量小于检查点中的消息偏移量,则说明消息已经同步成功,准备发送下一条消息,否则重复本次操作直到确定消息同步成功。为达到上述目的,本专利技术还提供一种消息同步方法,包括如下步骤:步骤一,主节点的消息处理线程接收客户端的消息写入请求,于存储单元写入消息的WAL日志,生成批量同步请求至批量同步请求队列,并阻塞触发等待;步骤二,主节点接收从节点定时发来的心跳信息,解析出其中包含的已经同步到从节点的WAL的最大偏移量信息;步骤三,于本地WAL日志中读取从节点心跳中该偏移量之后的数据复制到相应的从节点;步骤四,主节点将多个从节点发来心跳中的偏移量信息的最小值作为主从一致的检查点信息,持久化到磁盘上,并定时同步到所有从节点;步骤五,主节点于批量同步请求队列中取出批量同步请求;步骤六,若当前批量同步请求中的偏移量小于主从一致的检查点,则于批量同步队列中删除该批量同步请求,并唤醒对应的消息处理线程向客户端返回消息写入成功。进一步地,于步骤六之后,还包括如下步骤:判断消息同步是否超时,如果超时则根据超时处理方式进行处理;否则,主节点继续等待从节点定时发来的心跳信息,返回步骤二,直到消息同步成功或者同步超时。进一步地,步骤一进一步包括:主节点的消息处理线程接收客户端的消息写入请求,在缓存中写入消息的WAL日志,并生成批量持久化请求给异步数据持久化线程,并阻塞触发等待;该异步数据持久化线程将消息的WAL日志批量持久化到磁盘上,并唤醒持久化成功的消息对应的消息处理线程;主节点上的消息处理线程继续生成批量同步请求发给批量同步请求队列,并阻塞触发等待。进一步地,该方法还包括如下步骤:步骤S31,利用控制节点定时获取主从一致的检查点信息,删除所有缓存的偏移量小于检查点信息的消息及其消息标识;步骤S32,控制节点检测主节点是否故障,如果没有故障则返回步骤S31,否则进入步骤S33;步骤S33,控制节点在所有从节点中选出新的主节点,但先不改变它的角色;步骤S34,控制节点将消息标识中偏移量大于新的主节点的WAL日志最大偏移量的所有消息按照顺序写入新主节点的WAL日志;步骤S35,修改新主节点的角色为主节点,并将切换时刻的新主节点的WAL日志的最大偏移量作为主从一致的检查点信息;步骤S36,故障节点恢复后,根据检查点信息回滚老主节点上的多余的消息。为达到上述目的,本专利技术还提供一种消息同步系统,包括:消息生产者,用于负责生产消息,并发送消息到主节点;主节点,用于接收该消息生产者发来的消息写入请求,存储消息,并同步消息到从节点;1个或多个从节点,用于接收主节点发来的同步消息请求,并存储消息;控制节点,用于缓存同步超时的消息和消息标识,在主节点故障后,将相应的超时消息更新到新的主节点。进一步地,该主节点包括:WAL日志生成单元,用于根据消息生产者发来的消息在WAL日志文件中顺序存储经过处理的二进制消息,并记录二进制消息在WAL日志文件中的偏移量信息;消息存储单元,用于根据WAL日志文件生成消息存储文件和消息索引文件;WAL日志同步单元,用于同步WAL日志文件的增量变化信息到所有从节点上;主从一致的检查点更新单元,用于定时接收所有从节点的心跳信息,提取其中从节点上的WAL日志文件的最大偏移量信息,并将多个从节点发来的偏移量的最小值作为主从一致的检查点信息,定时更新该检查点信息,并同步到所有从节点。进一步地,该主从一致的检查点存储该WAL日志文件中的某个偏移量信息,在该偏移量之前的数据在整个节点组中是一致的。与现有技术相比,本专利技术一种消息同步方法及系统于主broker上写入消息成功后,通过异步线程将消息同步到从broker上,于所有从broker消息同步成功后更新主从一致的检查点信息并返回消息发送成功,而于消息同步超时,提取消息标识和消息内容发送到控制节点,若消息标识和消息发送给控制节点成功,则返回客户端消息发送成功,否则返回本文档来自技高网
...

【技术保护点】
一种消息同步方法,包括如下步骤:步骤一,主节点接收客户端的消息写入请求,存储消息,并同步消息到从节点;步骤二,从节点接收主节点发来的同步消息请求,并存储消息;步骤三,利用控制节点缓存同步超时的消息和消息标识,在主节点故障后,将相应的超时消息更新到新的主节点中。

【技术特征摘要】
1.一种消息同步方法,包括如下步骤:步骤一,主节点接收客户端的消息写入请求,存储消息,并同步消息到从节点;步骤二,从节点接收主节点发来的同步消息请求,并存储消息;步骤三,利用控制节点缓存同步超时的消息和消息标识,在主节点故障后,将相应的超时消息更新到新的主节点中。2.如权利要求1所述的一种消息同步方法,其特征在于,步骤一进一步包括:主节点接收客户端的消息写入请求生成WAL日志文件,并持久化到磁盘;主节点上通过WAL日志文件生成消息存储文件和消息索引文件;主节点同步WAL日志到所有的从节点。3.如权利要求1所述的一种消息同步方法,其特征在于,步骤三进一步包括:步骤S1,若所有从节点的消息都同步成功,则更新主从一致的检查点信息并返回客户端消息发送成功;步骤S2,若消息同步超时,则提取消息标识和消息内容发送到该控制节点;步骤S3,若消息标识和消息发送给该控制节点成功,则返回客户端消息发送成功,否则进入步骤S4;步骤S4,返回客户端Pendding状态和消息标识信息;步骤S5,该客户端通过该控制节点判断主节点是否故障;步骤S6,若判断结果为主节点故障,则在该控制节点上获取主节点故障时刻的主从一致的检查点信息,若返回的消息标识中偏移量小于检查点中的消息偏移量,则说明消息已同步成功,准备发送下一条消息,否则说明消息同步失败且新的主节点上无此消息,尝试重新发送;步骤S7,若判断结果为主节点没有故障,则在主broker上查询主从一致的检查点信息,若返回的消息标识中偏移量小于检查点中的消息偏移量,则说明消息已经同步成功,准备发送下一条消息,否则重复本次操作直到确定消息同步成功。4.一种消息同步方法,包括如下步骤:步骤一,主节点的消息处理线程接收客户端的消息写入请求,于存储单元写入消息的WAL日志,生成批量同步请求至批量同步请求队列,并阻塞触发等待;步骤二,主节点接收从节点定时发来的心跳信息,解析出其中包含的已经同步到从节点的WAL的最大偏移量信息;步骤三,于本地WAL日志中读取从节点心跳中该偏移量之后的数据复制到相应的从节点;步骤四,主节点将多个从节点发来心跳中的偏移量信息的最小值作为主从一致的检查点信息,持久化到磁盘上,并定时同步到所有从节点;步骤五,主节点于批量同步请求队列中取出批量同步请求;步骤六,若当前批量同步请求中的偏移量小于主从一致的检查点,则于批量同步队列中删除该批量同步请求,并唤醒对应的消息处理线程向客户端返回消息写入成功。5.如权利要求4所述的一种消息同步方法,其特征在于,于步骤六之后,还包括如下步骤:判断消息同步是否超时,如果超时则...

【专利技术属性】
技术研发人员:项剑峰邬来军彭亮
申请(专利权)人:上海理想信息产业集团有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1