首页 / 专利库 / 软件 / 中间件 / 消息中间件 / 一种消息同步方法

一种消息同步方法

阅读:983发布:2020-05-11

专利汇可以提供一种消息同步方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种消息同步方法,该方法包括如下步骤:步骤一,主 节点 接收客户端的消息写入 请求 ,存储消息,并同步消息到从节点;步骤二,从节点接收主节点发来的同步消息请求,并存储消息;步骤三,利用控制节点缓存同步超时的消息和消息标识,在主节点故障后,将相应的超时消息更新到新的主节点中,通过本发明,实现了分布式消息 中间件 的高可靠的消息同步的目的。,下面是一种消息同步方法专利的具体信息内容。

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

说明书全文

一种消息同步方法

技术领域

[0001] 本发明涉及消息处理技术领域,特别是涉及一种高可靠的消息同步方法。

背景技术

[0002] 在分布式系统中,为了保证系统高可用,常常需要在不同物理位置的机器中保存一份数据的多个副本。为保证数据的一致性,可以采用多种复制技术。数据复制有同步复制、异步复制和半同步复制等多种技术,为了追求一致性和性能的平衡,常常会采用半同步复制方案。
[0003] 在数据库系统中目前有两种半同步复制的方案,第一种半同步复制方案如下:先在主节点写重做日志,然后将事务提交到主节点,之后触发等待直到从节点将主节点的重做日志写入磁盘但不要求事务在从节点完全的执行;第二种半同步复制方案如下:先在主节点写重做日志,复制重做日志到从节点,主节点等待从节点反馈接收到重做日志的ack(应答信号)之后,再提交事务并且返回commit OK(确认信号)结果给客户端。
[0004] 第一种半同步复制方案的主要问题是:当主节点等待从节点回应超时,会直接向客户端返回成功。如果主节点的重做日志并没有同步到从节点,这时主节点崩溃,从节点会丢失最后一个事务的内容;第二种半同步复制方案很好的解决了第一种方案的问题,如果主节点等待从节点反馈接收到重做日志的ack超时之后,主节点上面的事务不会提交,会进行回滚操作。
[0005] Kafka是当前比较出色的一款高吞吐量的分布式发布订阅消息系统,其数据复制原理就采用的上述第一种半同步复制方案,为提高性能,Kafka的从节点接收到数据后就立向主节点发送ack,而非等到持久化到磁盘上。Kafka同样存在主从同步失败后主挂掉的数据丢失问题,由于Kafka的消息存储系统不同于一般的数据库系统,如果采用第二种半同步复制方案,做数据回滚操作时需要阻塞其他线程的写操作,代价很高。

发明内容

[0006] 为克服上述现有技术存在的不足,本发明之目的在于提供一种消息同步方法,以实现分布式消息中间件的高可靠的消息同步的目的。
[0007] 为达上述及其它目的,本发明提出一种消息同步方法,包括如下步骤:
[0008] 步骤一,主节点接收客户端的消息写入请求,存储消息,并同步消息到从节点;
[0009] 步骤二,从节点接收主节点发来的同步消息请求,并存储消息;
[0010] 步骤三,利用控制节点缓存同步超时的消息和消息标识,在主节点故障后,将相应的超时消息更新到新的主节点中。
[0011] 进一步地,步骤一进一步包括:
[0012] 主节点接收客户端的消息写入请求生成WAL日志文件,并持久化到磁盘;
[0013] 主节点上通过WAL日志文件生成消息存储文件和消息索引文件;
[0014] 主节点同步WAL日志到所有的从节点。
[0015] 进一步地,步骤三进一步包括:
[0016] 步骤S1,若所有从节点的消息都同步成功,则更新主从一致的检查点信息并返回客户端消息发送成功;
[0017] 步骤S2,若消息同步超时,则提取消息标识和消息内容发送到该控制节点;
[0018] 步骤S3,若消息标识和消息发送给该控制节点成功,则返回客户端消息发送成功,否则进入步骤S4;
[0019] 步骤S4,返回客户端Pendding状态和消息标识信息;
[0020] 步骤S5,该客户端通过该控制节点判断主节点是否故障;
[0021] 步骤S6,若判断结果为主节点故障,则在该控制节点上获取主节点故障时刻的主从一致的检查点信息,若返回的消息标识中偏移量小于检查点中的消息偏移量,则说明消息已同步成功,准备发送下一条消息,否则说明消息同步失败且新的主节点上无此消息,尝试重新发送;
[0022] 步骤S7,若判断结果为主节点没有故障,则在主broker上查询主从一致的检查点信息,若返回的消息标识中偏移量小于检查点中的消息偏移量,则说明消息已经同步成功,准备发送下一条消息,否则重复本次操作直到确定消息同步成功。
[0023] 为达到上述目的,本发明还提供一种消息同步方法,包括如下步骤:
[0024] 步骤一,主节点的消息处理线程接收客户端的消息写入请求,于存储单元写入消息的WAL日志,生成批量同步请求至批量同步请求队列,并阻塞触发等待;
[0025] 步骤二,主节点接收从节点定时发来的心跳信息,解析出其中包含的已经同步到从节点的WAL的最大偏移量信息;
[0026] 步骤三,于本地WAL日志中读取从节点心跳中该偏移量之后的数据复制到相应的从节点;
[0027] 步骤四,主节点将多个从节点发来心跳中的偏移量信息的最小值作为主从一致的检查点信息,持久化到磁盘上,并定时同步到所有从节点;
[0028] 步骤五,主节点于批量同步请求队列中取出批量同步请求;
[0029] 步骤六,若当前批量同步请求中的偏移量小于主从一致的检查点,则于批量同步队列中删除该批量同步请求,并唤醒对应的消息处理线程向客户端返回消息写入成功。
[0030] 进一步地,于步骤六之后,还包括如下步骤:
[0031] 判断消息同步是否超时,如果超时则根据超时处理方式进行处理;否则,主节点继续等待从节点定时发来的心跳信息,返回步骤二,直到消息同步成功或者同步超时。
[0032] 进一步地,步骤一进一步包括:
[0033] 主节点的消息处理线程接收客户端的消息写入请求,在缓存中写入消息的WAL日志,并生成批量持久化请求给异步数据持久化线程,并阻塞触发等待;
[0034] 该异步数据持久化线程将消息的WAL日志批量持久化到磁盘上,并唤醒持久化成功的消息对应的消息处理线程;
[0035] 主节点上的消息处理线程继续生成批量同步请求发给批量同步请求队列,并阻塞触发等待。
[0036] 进一步地,该方法还包括如下步骤:
[0037] 步骤S31,利用控制节点定时获取主从一致的检查点信息,删除所有缓存的偏移量小于检查点信息的消息及其消息标识;
[0038] 步骤S32,控制节点检测主节点是否故障,如果没有故障则返回步骤S31,否则进入步骤S33;
[0039] 步骤S33,控制节点在所有从节点中选出新的主节点,但先不改变它的色;
[0040] 步骤S34,控制节点将消息标识中偏移量大于新的主节点的WAL日志最大偏移量的所有消息按照顺序写入新主节点的WAL日志;
[0041] 步骤S35,修改新主节点的角色为主节点,并将切换时刻的新主节点的WAL日志的最大偏移量作为主从一致的检查点信息;
[0042] 步骤S36,故障节点恢复后,根据检查点信息回滚老主节点上的多余的消息。
[0043] 与现有技术相比,本发明一种消息同步方法及系统于主broker上写入消息成功后,通过异步线程将消息同步到从broker上,于所有从broker消息同步成功后更新主从一致的检查点信息并返回消息发送成功,而于消息同步超时,提取消息标识和消息内容发送到控制节点,若消息标识和消息发送给控制节点成功,则返回客户端消息发送成功,否则返回客户端Pendding状态和消息标识信息,由客户端通过控制节点判断主broker是否故障,根据判断结果相应处理,实现了消息中间件的高可靠的消息同步的目的。附图说明
[0044] 图1为本发明第一实施例之一种消息同步方法的步骤流程图
[0045] 图2为本发明第一实施例中步骤103的细部流程图;
[0046] 图3为本发明第二实施例之一种消息同步方法的步骤流程图;
[0047] 图4为本发明具体实施例中防止消息丢失的步骤流程图;
[0048] 图5为本发明第三实施例一种消息同步系统的系统架构图;
[0049] 图6为本发明具体实施例中主broker的结构示意图。

具体实施方式

[0050] 以下通过特定的具体实例并结合附图说明本发明的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本发明的其它优点与功效。本发明亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本发明的精神下进行各种修饰与变更。
[0051] 图1为本发明第一实施例之一种消息同步方法的步骤流程图。如图1所示,本发明一种消息同步方法,包括如下步骤:
[0052] 步骤101,主broker(主节点)接收消息生产者的消息写入请求,存储消息,并同步消息到从broker(从节点)。在本发明中,broker指的是消息服务器,提供消息生产、消费,主从同步、数据刷盘等核心功能,可以横向扩展、在线扩容以提高集群性能。具体地,步骤101进一步包括:
[0053] 步骤S11,主broker接收消息生产者的消息写入请求生成WAL日志文件,并持久化到磁盘;
[0054] 步骤S12,主broker上的异步线程通过WAL日志文件生成消息存储文件和消息索引文件;
[0055] 步骤S13,主broker同步WAL日志到所有的从broker。
[0056] 在本发明中,主broker可以接收多个消息生产者同时发送的消息写入请求,从broker不可以接收生产者的写入消息请求。
[0057] 步骤102,从broker接收主broker发来的同步消息请求,存储消息。
[0058] 在本发明中,broker可以分组多个组,一个组内可以有一个主broker,多个从broker,同一个组内的broker上面存储的消息是完全一致的。具体地,所有从broker的异步线程通过同步过来的WAL日志生成消息存储文件和消息索引文件。
[0059] 这里需说明的是,为提升性能,WAL日志同步到从broker时仅写入从broker缓存,不需要持久化到磁盘。从broker上面的WAL日志写入和消息存储文件生成由不同的线程来完成,但是将消息写入消息存储文件必须等待WAL日志中对应的二进制消息持久化到磁盘才能进行。
[0060] 步骤103,利用控制节点缓存同步超时的消息和消息标识,在主broker故障后,将相应的超时消息按照顺序更新到新的主broker中。在一个组内,控制节点可以多个,一主多从,控制节点责管理组内broker数据的一致性以及组内broker故障后的切换操作。
[0061] 具体地,如图2所示,步骤103进一步包括:
[0062] 步骤S1,若所有从broker的消息都同步成功,则更新主从一致的检查点信息并返回客户端消息发送成功,否则进入步骤S2;
[0063] 具体地,主从一致的检查点指是WAL日志中的某个偏移量信息,它表示这个偏移量之前的WAL日志数据在同一个broker组中是一致的,所有只有当主broker确定消息同步到所有从broker了以后才可以更新这个检查点信息。
[0064] 步骤S2,若消息同步超时,提取消息标识(包括消息所在的broker信息、消息在WAL日志中存储的偏移量和WAL日志存储的二进制消息信息等)和消息内容发送到控制节点。具体地说,消息同步超时一般发生在主从之间网络不稳定或当前负载较高的场景,因为超时数据一般不会太多,所以将超时的消息缓存到控制节点,当主broker故障后,再从控制节点将超时的消息同步到从broker,这样可以避免主broker故障后的消息丢失问题。
[0065] 步骤S3,判断消息标识和消息发送给控制节点是否成功,若消息标识和消息发送给控制节点成功,则返回客户端(即消息生产者)消息发送成功,否则进入步骤S4;
[0066] 步骤S4,返回客户端Pendding(待处理)状态和消息标识信息;
[0067] 步骤S5,客户端通过控制节点判断主broker是否故障;
[0068] 步骤S6,若判断结果为主broker故障,则在控制节点上获取主broker故障时刻主从一致的检查点信息。如果返回的消息标识中偏移量小于检查点中的消息偏移量,则说明消息已经同步成功,准备发送下一条消息,否则说明消息同步失败且新主上无此消息,尝试重新发送;
[0069] 步骤S7,若判断结果为主broker没有故障,客户端休眠一段时间后在主broker上查询主从一致的检查点信息。如果返回的消息标识中偏移量小于检查点中的消息偏移量,则说明消息已经同步成功,准备发送下一条消息,否则重复本次操作直到确定消息同步成功。
[0070] 具体地,Pendding状态表示消息发送到主broker成功,但是不一定复制到了从节点,当前消息是否发送成功是一个不确定的状态。如果主broker不发生故障,则对应的消息迟早会复制到从broker,所以消息一定会发送成功,只是我们需要等待,确定消息已经写入了从节点;反之如果主broker发生故障,控制节点会进行主备切换操作,并选出新主broker,根据新主broker中是否有该消息来判断消息是否发送成功。
[0071] 特别地,本发明不考虑客户端发送消息超时又得不到任何返回值的情况,客户端通过建立一个长连接向主broker发送消息,且将超时时间设置为一个很大的值。除非客户端或者broker故障,客户端发送消息时一定会得到一个返回值。
[0072] 图3为本发明第二实施例之一种消息同步方法的步骤流程图。如图2所示,本发明一种消息同步方法,包括如下步骤:
[0073] 步骤301,主broker的消息处理线程接收客户端的消息写入请求,在缓存中写入消息的WAL日志,并生成批量持久化请求给异步数据持久化线程,并阻塞触发等待;
[0074] 步骤302,异步数据持久化线程将消息的WAL日志批量持久化到磁盘上,并唤醒持久化成功的消息对应的消息处理线程;
[0075] 步骤303,主broke上的消息处理线程继续生成批量同步请求(包含消息在本地WAL日志中存储的偏移量信息)发给WAL日志同步单元中的批量同步请求队列,并阻塞触发等待;
[0076] 步骤304,主broker上的WAL日志同步单元接收从broker定时发来的心跳信息,解析出其中包含的已经同步到从broker的WAL的最大偏移量信息;
[0077] 步骤305,主broker上的WAL日志同步单元在本地WAL日志中读取从broker心跳中该偏移量之后的数据复制到相应的从broker;
[0078] 步骤306,主broker的主从一致的检查点更新单元将多个从节点发来心跳中的偏移量信息的最小值作为主从一致的检查点信息,持久化到磁盘上,并定时同步到所有从broker;
[0079] 步骤307,主broker上的WAL日志同步单元在批量同步请求队列中取出批量同步请求;
[0080] 步骤308,如果当前批量同步请求中的偏移量小于主从一致的检查点,则在批量同步队列中删除该批量同步请求,并唤醒对应的消息处理线程向客户端返回消息写入成功,否则进入下一步;
[0081] 步骤309,判断消息同步是否超时,如果超时则根据第一实施例的超时处理方式进行处理;否则,主broker上的WAL日志同步单元继续等待从broker定时发来的心跳信息,按照上述步骤重复处理,直到消息同步成功或者同步超时。
[0082] 较佳地,本发明之消息同步方法还包括在消息同步过程中防止消息丢失的处理步骤。如图4所示,在消息同步过程中防止消息丢失的处理步骤如下:
[0083] 步骤S31,利用控制节点定时获取主从一致的检查点信息,删除所有缓存的偏移量小于检查点信息的消息及其消息标识;
[0084] 步骤S32,控制节点检测主broker是否故障,如果没有故障则返回步骤S31,否则进入步骤S33;
[0085] 步骤S33,控制节点在所有从broker中选出新的主broker,但先不改变它的角色;
[0086] 步骤S34,控制节点将消息标识中偏移量大于新的主broker的WAL日志最大偏移量的所有消息按照顺序写入新主broker的WAL日志;
[0087] 步骤S35,修改新主broker的角色为主broker,并将切换时刻的新主broker的WAL日志的最大偏移量作为主从一致的检查点信息;
[0088] 步骤S36,故障broker恢复后,根据上述的检查点信息回滚老主broker上的多余的消息。
[0089] 图5为本发明第三实施例一种消息同步系统的系统架构图。如图5所示,本发明一种消息同步系统,包括:消息生产者50、主broker51、1个或多个从broker52以及控制节点53。
[0090] 其中,消息生产者50,用于负责生产消息,并发送消息到主broker,在本发明具体实施例中,消息生产者50为一客户端。
[0091] 主broker51,用于接收消息生产者50发来的消息写入请求,存储消息,并同步消息到从broker52,具体地,broker指的是消息服务器,提供消息生产、消费,主从同步、数据刷盘等核心功能,可以横向扩展、在线扩容以提高集群性能;
[0092] 从broker52,用于接收主broker发来的同步消息请求,并存储消息,具体地,broker可以分组多个组,一个组内可以有一个主broker,多个从broker,同一个组内的broker上面存储的消息是完全一致的。
[0093] 控制节点53,用于缓存同步超时的消息和消息标识,在主broker故障后,将相应的超时消息按照顺序更新到新的主broker中。具体地,在一个组内,控制节点可以有多个,一主多从,控制节点负责管理组内broker数据的一致性以及组内broker故障后的切换操作。
[0094] 图6为本发明具体实施例中主broker的结构示意图。如图6所示,主broker包括WAL日志生成单元510、消息存储单元511、WAL日志同步单元512和主从一致的检查点更新单元513。
[0095] WAL日志生成单元510,用于根据消息生产者50发来的消息在WAL日志文件中顺序存储经过处理的二进制消息,并记录二进制消息在WAL日志文件中的偏移量信息;
[0096] 消息存储单元511,用于根据WAL日志文件生成消息存储文件和消息索引文件;
[0097] WAL日志同步单元512,用于同步WAL日志文件的增量变化信息到所有从broker上;
[0098] 主从一致的检查点更新单元513,用于定时接收所有从broker的心跳信息,提取其中从broker上面WAL日志文件的最大偏移量信息,并将多个从broker发来的偏移量的最小值作为主从一致的检查点信息,定时更新这个检查点信息,并同步到所有从broker。
[0099] 具体地,WAL日志生成单元生成的WAL日志文件中保存完整的消息信息,可以根据这些信息异步生成消息存储文件和消息索引文件。主从一致的检查点存储了WAL日志文件中的某个偏移量信息,在这个偏移量之前的数据在整个broker组中是一致的。主从一致的检查点的主要作用是根据这个偏移量信息可以回滚主从切换后老主上的多余的信息。
[0100] 综上所述,本发明一种消息同步方法及系统于主broker上写入消息成功后,通过异步线程将消息同步到从broker上,于所有从broker消息同步成功后更新主从一致的检查点信息并返回消息发送成功,而于消息同步超时,提取消息标识和消息内容发送到控制节点,若消息标识和消息发送给控制节点成功,则返回客户端消息发送成功,否则返回客户端Pendding状态和消息标识信息,由客户端通过控制节点判断主broker是否故障,根据判断结果相应处理,实现了消息中间件的高可靠的消息同步的目的。
[0101] 上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈