CN117395263B - 一种数据同步方法、装置、设备和存储介质 - Google Patents

一种数据同步方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN117395263B
CN117395263B CN202311697060.9A CN202311697060A CN117395263B CN 117395263 B CN117395263 B CN 117395263B CN 202311697060 A CN202311697060 A CN 202311697060A CN 117395263 B CN117395263 B CN 117395263B
Authority
CN
China
Prior art keywords
data
node
heartbeat detection
heartbeat
abnormal
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
Application number
CN202311697060.9A
Other languages
English (en)
Other versions
CN117395263A (zh
Inventor
袁东海
胡玉鹏
李红卫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Metabrain Intelligent Technology Co Ltd
Original Assignee
Suzhou Metabrain Intelligent Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Metabrain Intelligent Technology Co Ltd filed Critical Suzhou Metabrain Intelligent Technology Co Ltd
Priority to CN202311697060.9A priority Critical patent/CN117395263B/zh
Publication of CN117395263A publication Critical patent/CN117395263A/zh
Application granted granted Critical
Publication of CN117395263B publication Critical patent/CN117395263B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/10Active monitoring, e.g. heartbeat, ping or trace-route

Abstract

本申请涉及一种数据同步方法、装置、设备和存储介质。主要技术方案包括:响应于心跳集群中至少一个节点心跳检测异常,将心跳检测异常节点的运行状态由正常状态切换为延迟状态,响应于心跳检测异常节点在预设次数心跳检测内恢复正常,将心跳检测异常节点的运行状态由延迟状态切换为正常状态,获取心跳集群中的正常节点在心跳检测异常节点处于延迟状态中的节点数据和心跳检测异常节点的原始数据,根据节点数据和原始数据,同步心跳检测异常节点的数据,通过添加节点的延迟状态,保证集群中各个节点的运行状态被正常查询,准确快速地判断各个节点的异常状态并处理异常情况,并同步延迟状态期间的数据保证集群中各个节点的数据一致性。

Description

一种数据同步方法、装置、设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据同步方法、装置、设备和存储介质。
背景技术
Rabbitmq是基于高级消息队列协议(Advanced Message Queuing Protocol,AMQP)实现的消息队列,是一种应用程序之间的通信方法。在主流使用rabbitmq的方式中,组建集群是一个比较好的方式,将多个服务节点通过某种方式连接到一起组成集群,节点之间数据会进行同步,可以提高服务的稳定性和吞吐量。
在rabbitmq方式中,正常运行的集群中节点的状态用“running”来表示,若出现网络断开等情况,集群中节点的状态为不可用,属于异常状态用“down”来表示。当集群处于running状态时,对集群中的各个节点进行心跳检测,如果心跳检测正常,标识节点的网络通信正常,如果存在节点心跳检测异常,判断该节点是否连续4次心跳检测异常,如果连续4次异常,则该节点状态为down。若心跳时间设置较大,对集群节点异常检测的周期过长,心跳时间设置较小,使得集群对于短时间的网络波动特别敏感,在合理的网络波动中极易认为节点异常,无法准确快速地判断各个节点的异常状态并处理异常情况。
发明内容
基于此,本申请提供了一种数据同步方法、装置、设备和存储介质,以准确快速地判断各个节点的异常状态并处理异常情况,保证正常节点和异常节点数据的一致性。
第一方面,提供一种数据同步方法,该方法包括:
响应于心跳集群中至少一个节点心跳检测异常,将心跳检测异常节点的运行状态由正常状态切换为延迟状态,其中,心跳集群为采用基于高级消息队列协议的消息队列的集群;
响应于心跳检测异常节点在预设次数心跳检测内恢复正常,将心跳检测异常节点的运行状态由延迟状态切换为正常状态;
获取心跳集群中的正常节点在心跳检测异常节点处于延迟状态中的节点数据和心跳检测异常节点的原始数据,其中,正常节点为心跳集群中除心跳检测异常的心跳检测异常节点之外的节点;
根据节点数据和原始数据,同步心跳检测异常节点的数据。
根据本申请实施例中一种可实现的方式,节点数据包括正常节点的基础数据和更新数据;根据节点数据和原始数据,同步心跳检测异常节点的数据,包括:
根据基础数据、更新数据和原始数据,判断更新数据与原始数据是否进行合并,得到判断结果;
根据判断结果,同步心跳检测异常节点的数据。
根据本申请实施例中一种可实现的方式,根据基础数据和原始数据,判断更新数据与原始数据是否进行合并,包括:
当原始数据发生变化时,判断更新数据与原始数据无法合并,判断结果为数据不合并。
根据本申请实施例中一种可实现的方式,根据基础数据和原始数据,判断更新数据与原始数据是否进行合并,包括:
当基础数据发生变化,变化后的基础数据与原始数据相同时,判断更新数据与原始数据进行合并;
当基础数据发生变化,变化后的基础数据与原始数据不同时,判断更新数据与原始数据无法合并。
根据本申请实施例中一种可实现的方式,根据更新数据,判断更新数据与原始数据是否进行合并,包括:
当更新数据在心跳检测异常节点处于延迟状态中发生变化时,判断更新数据与原始数据无法合并。
根据本申请实施例中一种可实现的方式,根据判断结果,同步心跳检测异常节点的数据,包括:
当判断结果为数据进行合并时,将更新数据同步至心跳检测异常节点;
合并心跳检测异常节点上的更新数据和原始数据,得到合并后的数据;
判断节点数据和合并后的数据是否一致,得到一致性结果;
根据一致性结果,确定心跳检测异常节点的同步数据。
根据本申请实施例中一种可实现的方式,根据判断结果,更新心跳检测异常节点的数据,包括:
当判断结果为数据进行合并时,将心跳检测异常节点的原始数据替换为变化后的基础数据,并将更新数据同步至心跳检测异常节点;
合并心跳检测异常节点上变化后的基础数据和原始数据,得到合并后的数据;
判断节点数据和合并后的数据是否一致,得到一致性结果;
根据一致性结果,确定心跳检测异常节点的同步数据。
根据本申请实施例中一种可实现的方式,根据一致性结果,确定心跳检测异常节点的同步数据,包括:
当一致性结果为数据一致时,确定心跳检测异常节点的同步数据为合并后的数据。
根据本申请实施例中一种可实现的方式,该方法还包括:
当一致性结果为数据不一致时,删除心跳检测异常节点上合并后的数据;
向心跳检测异常节点上同步正常节点的节点数据。
根据本申请实施例中一种可实现的方式,该方法还包括:
响应于心跳检测异常节点心跳检测异常的次数大于或等于预设次数,将心跳检测异常节点的运行状态由延迟状态切换为异常状态。
根据本申请实施例中一种可实现的方式,节点数据的生成方法包括:
在心跳检测异常节点处于延迟状态中,当正常节点接收到最新数据时,向心跳检测异常节点同步最新数据;
响应于心跳检测异常节点无法保存最新数据,将心跳检测异常节点未同步的最新数据保存至正常节点;
根据心跳检测异常节点未同步的最新数据、正常节点接收的最新数据以及在心跳检测异常节点处于延迟状态之前正常节点的数据,生成节点数据。
根据本申请实施例中一种可实现的方式,该方法还包括:
当产生消息消费时,删除节点数据中消息对应的数据;
若心跳检测异常节点未同步的最新数据中包含消息对应的数据,从心跳检测异常节点未同步的最新数据中删除消息对应的数据。
第二方面,提供了一种数据同步装置,该装置包括:
切换模块,用于响应于心跳集群中至少一个节点心跳检测异常,将心跳检测异常节点的运行状态由正常状态切换为延迟状态,其中,心跳集群为采用基于高级消息队列协议的消息队列的集群;
切换模块,还用于响应于心跳检测异常节点在预设次数心跳检测内恢复正常,将心跳检测异常节点的运行状态由延迟状态切换为正常状态;
获取模块,用于获取心跳集群中的正常节点在心跳检测异常节点处于延迟状态中的节点数据和心跳检测异常节点的原始数据,其中,正常节点为心跳集群中除心跳检测异常的心跳检测异常节点之外的节点;
同步模块,用于根据节点数据和原始数据,同步心跳检测异常节点的数据。
第三方面,提供了一种计算机设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机指令,所述计算机指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述第一方面中涉及的方法。
第四方面,提供了一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述计算机指令用于使计算机执行上述第一方面中涉及的方法。
根据本申请实施例所提供的技术内容,通过响应于心跳集群中至少一个节点心跳检测异常,将心跳检测异常节点的运行状态由正常状态切换为延迟状态,响应于心跳检测异常节点在预设次数心跳检测内恢复正常,将心跳检测异常节点的运行状态由延迟状态切换为正常状态,获取心跳集群中的正常节点在心跳检测异常节点处于延迟状态中的节点数据和心跳检测异常节点的原始数据,根据节点数据和原始数据,同步心跳检测异常节点的数据,通过添加节点的延迟状态,保证集群中各个节点的运行状态被正常查询,准确快速地判断各个节点的异常状态并处理异常情况,并根据异常节点处于延迟状态期间的数据变化,同步数据保证集群中各个节点的数据一致性。
附图说明
图1为一个实施例中数据同步方法的应用环境图;
图2为一个实施例中数据同步方法的流程示意图;
图3为一个实施例中连续4次心跳检测时长的取值范围的示意图;
图4为一个实施例中节点处于延迟状态数据同步的示意图;
图5为一个实施例中数据同步装置的结构框图;
图6为一个实施例中计算机设备的示意性结构图。
具体实施方式
以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在使用rabbitmq的过程中,通过curl命令 和rabbitmqctl命令可以查看集群的状态。一般用于对服务状态的监控和检测,在使用过程中发现,有节点断开时,例如意外断电、网络断开,rabbitmqctl命令和curl命令访问restapi接口时这两个操作会卡死,处于无法正常执行的状态。出现这个问题的原因是因为集群的心跳时间的设置无法兼容集群的敏感性和容错性。心跳时间的值设置较大,容易出现对于集群节点出现异常检测的周期过长的问题,导致整个集群的敏感性较差,如果心跳时间的值设置较小,集群对于短时间的网络波动特别敏感,容易认为节点异常,使得整个集群的容错性太差。在4次心跳检测过程中,整个集群对于节点的状态不能确定,在出现连续4次心跳检测异常后,才能确认节点为“down”状态。
为了解决现有技术问题,本申请实施例提供了一种数据同步方法、装置、设备及计算机存储介质。
为了方便理解,首先对本申请所适用的系统进行描述。本申请提供的数据同步方法,可以应用于如图1所示的系统架构中。该系统架构是由若干个互相独立的节点组成的集群,通过网络组成的一个较大的服务,每个集群节点都是运行各自服务的独立服务器。节点之间可以彼此通信,协同向用户提供应用程序,系统资源和数据,并以单一系统的模式加以管理。节点包括但限于为计算机、平板电脑、通讯设备和服务器等,例如,节点110为台式电脑,节点120和节点130为笔记本电脑,节点140为手机,节点150和节点160为服务器。
图2示出了本申请一个实施例提供的数据同步方法的流程示意图。如图2所示,该方法可以包括以下步骤:
S210,响应于心跳集群中至少一个节点心跳检测异常,将心跳检测异常节点的运行状态由正常状态切换为延迟状态。
其中,Rabbitmq是基于高级消息队列协议实现的消息队列,心跳集群为采用Rabbitmq技术的集群,即,rabbitmq集群。rabbitmq集群的节点之间需要相互通信,明确各个节点的服务的当前状态,例如运行、关闭等。心跳为各个节点之间互相发送一段网络数据,用于表明节点的状态。
正常运行的集群中节点的状态用“running”来表示,若出现网络断开等情况,集群中节点的状态为不可用,属于异常状态用“down”来表示。
当心跳集群中至少一个节点心跳检测异常时,将该节点定义为心跳检测异常节点,节点异常情况可能为节点断电、节点断网或者网络波动等,此时需要完成预设次数的心跳检测,这个节点的状态才可以从running变为down,在此期间,检测这个节点或者整个集群的状态的工具无法使用。也就是说,在未完成预设次数的心跳检测时,整个集群无法确定该节点的运行状态,导致rabbitmqctl命令和curl命令访问restapi接口时卡死。
Rabbitmq处理网络异常的情况有2个衡量值,一个是多长时间能检测到异常,节点状态从running变为down,这个可以用“敏感性”来表示。另一个是网络短暂的异常,例如,网络异常后10秒恢复,这个用“容错性”来表示。
如果设置4次心跳检测的时间较短,则会出现误报的情况,出现该情况的原因如下:假设 4次心跳检测总的时间是60秒,为了减少“无法探测状态”的时间,将4次心跳检测的总的时间设置为30秒。在这种设置下,如果网络异常后在40秒内恢复了,这个节点的状态还是会从running变为down,网络恢复后,会重新进行数据的同步等操作,状态从down变为running,该情况容错性低。若设置4次心跳检测的时间较长,会有很长时间检测不到异常问题,该情况敏感性低。
由于rabbitmq本身对上述情况没有相应的处理方法,为了保证在rabbitmq在4次心跳检测过程中,检测rabbitmq服务状态的工具仍然可用,在running和down两个状态之间增加一个delay状态,即延迟状态。
在节点处于延迟状态时,可以使用检测rabbitmq状态的工具,得到rabbitmq服务的状态,保证集群中各个节点的运行状态被正常查询,准确快速地判断各个节点的异常状态并处理异常情况。但是处于延迟状态的节点,认为是功能受限,不具备数据处理的能力,例如,消息处理能力,数据同步能力,即,查询心跳检测异常节点的状态时,若处于delay状态,会显示为running状态,仅仅只是显示为正常状态,实际不具备正常节点处理数据的能力。
S220,响应于心跳检测异常节点在预设次数心跳检测内恢复正常,将心跳检测异常节点的运行状态由延迟状态切换为正常状态。
rabbitmq集群心跳机制:Rabbitmq集群中的每个节点每隔 net_ticktime/4 (默认15s)计一次tick,其中,tick的定义为:若有任何数据被写入节点中,此节点被认为被ticked。如果在连续四次某节点都没有被ticked到,则判定此节点处于down的状态,其余节点可以将此节点剥离出当前分区。将连续四次的tick时间即为T,如图3所示,T的取值范围为0.75*心跳间隔时间<T<1.25*心跳间隔时间,也可以表示为0.75*ticktime<T<1.25*ticktime。
基于rabbitmq集群心跳机制,将预设次数设置为4次。若心跳检测异常节点在4次心跳检测内恢复正常,说明该节点可用,则将心跳检测异常节点的运行状态由延迟状态切换为正常状态。
S230,获取心跳集群中的正常节点在心跳检测异常节点处于延迟状态中的节点数据和心跳检测异常节点的原始数据。
其中,正常节点为心跳集群中除心跳检测异常的心跳检测异常节点之外的节点,节点数据为正常节点的当前数据,包括基础数据和更新数据,基础数据为正常节点在心跳检测异常节点转换为delay状态之前的数据,更新数据为正常节点在心跳检测异常节点处于delay状态过程中同步的数据。原始数据为心跳检测异常节点在转换为delay状态之前的数据。
当心跳检测异常节点处于delay状态时,表明该节点出现了网络异常,若该节点还能处理数据,那么心跳检测异常节点会造成rabbitmq集群中各个节点的数据不一样,引起服务异常或者导致整个rabbitmq的服务不可用。虽然心跳检测异常节点处于delay状态下,节点功能受限,无法处理数据,但其他节点是可用的,可以正常处理数据。
如图4所示,节点1、节点2和节点3为rabbitmq集群中的节点,在节点1、节点2和节点3同步完数据A之后,节点2出现网络异常,此时有数据B传输到节点1,数据B只会在节点1和节点3上同步,节点2无法同步数据B。等到节点2的网络恢复之后,数据C传输到节点1,数据C只会在节点1、节点2和节点3上同步。此时,节点1和节点3上同步的数据为ABC,节点2上同步的数据为AC。
因此,心跳检测异常节点只能在其由delay状态恢复至running状态时才能同步数据,该节点缺少或者没有同步的数据保存在其他正常的节点上,获取正常节点在心跳检测异常节点处于delay状态中的节点数据检测是否有需要同步的数据,同时获取心跳检测异常节点的原始数据,对心跳检测异常节点进行数据同步。
S240,根据节点数据和原始数据,同步心跳检测异常节点的数据。
根据正常节点的节点数据和心跳检测异常节点的原始数据判断节点数据中的更新数据是否可以和原始数据合并,当可以合并时,将心跳检测异常节点上合并后的数据与正常节点的节点数据进行一致性判断,若数据一致,则可以继续rabbitmq集群原有的流程,如果数据不一致,则删除心跳检测异常节点上的所有数据,从正常节点上重新同步数据。若数据合并出错,说明数据有错误,也需要将节点上的数据删除,从正常节点上重新同步数据。
可以看出,本申请实施例通过响应于心跳集群中心跳检测异常节点心跳检测异常,将心跳检测异常节点的运行状态由正常状态切换为延迟状态,响应于心跳检测异常节点在预设次数心跳检测内恢复正常,将心跳检测异常节点的运行状态由延迟状态切换为正常状态,获取心跳集群中的正常节点在心跳检测异常节点处于延迟状态中的节点数据和心跳检测异常节点的原始数据,根据节点数据和原始数据,同步心跳检测异常节点的数据,通过添加节点的延迟状态,保证集群中各个节点的运行状态被正常查询,准确快速地判断各个节点的异常状态并处理异常情况,并根据异常节点处于延迟状态期间的数据变化,同步数据保证集群中各个节点的数据一致性。
下面对上述方法流程中的各步骤进行详细描述。首先结合实施例对上述步骤S240即“根据节点数据和原始数据,同步心跳检测异常节点的数据”进行详细描述。
作为一种可实现的方式,根据基础数据、更新数据和原始数据,判断更新数据与原始数据是否进行合并,得到判断结果;
根据判断结果,同步心跳检测异常节点的数据。
其中,基础数据为正常节点在心跳检测异常节点转换为delay状态之前的数据,更新数据为正常节点在心跳检测异常节点处于delay状态过程中同步的数据。原始数据为心跳检测异常节点在转换为delay状态之前的数据。
根据基础数据、更新数据和原始数据心跳检测异常节点处于delay状态过程中是否变化,判断更新数据与原始数据是否进行合并,得到判断结果,判断结果包括数据进行合并和数据无法合并。基于不同的判断结果,心跳检测异常节点上最终同步的数据是不一样的,根据判断结果,同步心跳检测异常节点的数据。
数据可以合并的条件为更新数据和原始数据没有重复和缺失,可以从以下三种情况判断:
情况一、当原始数据发生变化时,判断更新数据与原始数据无法合并,判断结果为数据不合并。
例如,正常节点的基础数据为数据A,更新数据为数据B,原始数据由数据A变为数据A1,数据B属于追加到数据A后面的,并不能追加到数据A1后面,这种情况下数据是不能合并的。
情况二、当基础数据发生变化,变化后的基础数据与原始数据相同时,判断更新数据与原始数据进行合并;
当基础数据发生变化,变化后的基础数据与原始数据不同时,判断更新数据与原始数据无法合并。
正常节点的基础数据为数据A,更新数据为数据B,当正常节点上的基础数据由数据A变为数据A2时,数据B变化为最追加到数据A2后。心跳检测异常节点获取数据B后,由于数据B是追加到数据A2后面的,此时需要判断变化的基础数据是否与原始数据相同。当变化后的基础数据与原始数据相同时,那么更新数据与原始数据进行合并,当变化后的基础数据与原始数据不同时,那么更新数据与原始数据无法合并。
情况三、当更新数据在心跳检测异常节点处于延迟状态中发生变化时,判断更新数据与原始数据无法合并。
若在心跳检测异常节点处于延迟状态期间,正常节点上的更新数据由数据B变为数据B3,此时,正常节点的数据A也变为数据A3,由更新数据引起基础数据的变化,变化后的基础数据与数据A是无法相同的,这种情况下,心跳检测异常节点的数据A和数据B3是不能合并的。
上述三种情况为基础数据、更新数据和原始数据中任一数据发生变化的情况,若基础数据、更新数据和原始数据均未发生变化,更新数据与原始数据可以合并,这属于第四种情况。
通过上述三种情况判断更新数据和原始数据是否合并,得到判断结果。根据判断结果,同步心跳检测异常节点的数据,包括:
当判断结果为数据进行合并时,例如第四种情况,将更新数据同步至心跳检测异常节点;合并心跳检测异常节点上的更新数据和原始数据,得到合并后的数据。
对于情况二中,若判断结果为数据进行合并,将心跳检测异常节点的原始数据替换为变化后的基础数据,并将更新数据同步至心跳检测异常节点,合并心跳检测异常节点上变化后的基础数据和原始数据,得到合并后的数据。
判断节点数据和合并后的数据是否一致,得到一致性结果;
根据一致性结果,确定心跳检测异常节点的同步数据。
为保证异常节点与正常节点数据的一致性,将更新数据同步到心跳检测异常节点之后,判断节点数据和合并后的数据是否一致,若数据一致,则得到一致性结果为数据一致,若数据不一致,则得到一致性结果为数据不一致。
当一致性结果为数据一致时,确定心跳检测异常节点的同步数据为合并后的数据,无需合并后的数据进行任何处理,可以继续rabbitmq原有的流程。
当一致性结果为数据不一致时,首先删除心跳检测异常节点上合并后的数据,重新获取数据,将正常节点的节点数据同步至心跳检测异常节点上。
作为一种可实现的方式,该方法还包括:
响应于心跳检测异常节点心跳检测异常的次数大于或等于预设次数,将心跳检测异常节点的运行状态由延迟状态切换为异常状态。
其中,基于rabbitmq集群心跳机制,将预设次数设置为4次。当心跳检测异常节点心跳检测异常的次数大于或等于4次时,此时,将心跳检测异常节点的运行状态由延迟状态切换为异常状态,即心跳检测异常节点的运行状态由delay状态切换为down状态。通过重新启动心跳检测异常节点进而重启服务,继续对心跳检测异常节点进行心跳检测,直至心跳检测异常节点网络恢复,其心跳检测正常,将心跳检测异常节点的运行状态由异常状态切换为正常状态,即由down状态切换为running状态。
作为一种可实现的方式,节点数据的生成方法包括:
在心跳检测异常节点处于延迟状态中,当正常节点接收到最新数据时,向心跳检测异常节点同步最新数据;
响应于心跳检测异常节点无法保存最新数据,将心跳检测异常节点未同步的最新数据保存至正常节点;
根据心跳检测异常节点未同步的最新数据、正常节点接收的最新数据以及在心跳检测异常节点处于延迟状态之前正常节点的数据,生成节点数据。
在原rabbitmq集群的设计中,如果节点从running状态变为down状态,就不会有数据同步的操作了。从down状态变为running状态后,若在节点处于down状态的时间内,其他节点同步了数据,该节点没有同步,此时,该节点不会再同步处于down状态过程中没有同步的数据。
当有新消息产生时,某节点接收到新数据,需要和其他节点同步数据后才能确认消息已接收完成,当新数据同步完成后,才能消费数据。在新数据保存过程中,可能会产生多个新消息,节点会多次接收到新数据,按照接收数据的顺序保存新数据。
在判断更新数据和原始数据是否可以合并之前,正常节点会根据向其他节点同步数据的情况,保存异常节点未同步的数据。
其中,最新数据为产生新消息时生成的消息,当正常节点接收到最新数据时,向心跳检测异常节点同步最新数据,若心跳检测异常节点无法保存最新数据,也就是说,心跳检测异常节点无法同步最先消息,将心跳检测异常节点未同步的最新数据保存至正常节点。
将心跳检测异常节点未同步的最新数据定义为更新数据,将正常节点接收的最新数据定义为同步数据,将心跳检测异常节点处于延迟状态之前正常节点的数据定义为基础数据,由更新数据、同步数据和基础数据组成节点数据。
由于在心跳检测异常节点处于延迟状态中,有消息产生,也可能会有消息消费,最新数据可能会发生变化,心跳检测异常节点当下同步的最新数据不一定是最后需要同步的最新数据。因此,该方法还包括:
当产生消息消费时,删除节点数据中消息对应的数据;
若心跳检测异常节点未同步的最新数据中包含消息对应的数据,从心跳检测异常节点未同步的最新数据中删除消息对应的数据。
当产生消息消费时,删除节点数据中消息对应的数据,该数据可以为基础数据的部分数据,可以为同步数据中的部分数据,也可以同时为基础数据和同步数据中的部分数据。若删除的数据为同步数据中的部分数据,为保证正常节点和异常节点同步后的数据一致,从更新数据中删除消息对应的数据。
上述数据同步方法用于rabbitmq集群中的节点,可以从设计上做成一个通用的组件,用于集群间同步数据、集群状态维护的插件。
应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本申请中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
图5为本申请实施例提供的一种数据同步装置的结构示意图,用以执行如图2中所示的方法流程。如图5所示,该装置可以包括:切换模块510、获取模块520和同步模块530,还可以进一步包括:判断模块、确定模块、删除模块和生成模块。其中各组成模块的主要功能如下:
切换模块510,用于响应于心跳集群中至少一个节点心跳检测异常,将心跳检测异常节点的运行状态由正常状态切换为延迟状态,其中,心跳集群为采用基于高级消息队列协议的消息队列的集群;
切换模块510,还用于响应于心跳检测异常节点在预设次数心跳检测内恢复正常,将心跳检测异常节点的运行状态由延迟状态切换为正常状态;
获取模块520,用于获取心跳集群中的正常节点在心跳检测异常节点处于延迟状态中的节点数据和心跳检测异常节点的原始数据,其中,正常节点为心跳集群中除心跳检测异常的心跳检测异常节点之外的节点;
同步模块530,用于根据节点数据和原始数据,同步心跳检测异常节点的数据。
作为一种可实现的方式,节点数据包括正常节点的基础数据和更新数据;同步模块530,具体用于:根据基础数据、更新数据和原始数据,判断更新数据与原始数据是否进行合并,得到判断结果;
根据判断结果,同步心跳检测异常节点的数据。
作为一种可实现的方式,该装置还包括判断模块,用于:当原始数据发生变化时,判断更新数据与原始数据无法合并,判断结果为数据不合并。
作为一种可实现的方式,判断模块,用于:当基础数据发生变化,变化后的基础数据与原始数据相同时,判断更新数据与原始数据进行合并;
当基础数据发生变化,变化后的基础数据与原始数据不同时,判断更新数据与原始数据无法合并。
作为一种可实现的方式,判断模块,用于:当更新数据在心跳检测异常节点处于延迟状态中发生变化时,判断更新数据与原始数据无法合并。
作为一种可实现的方式,同步模块530,具体用于:当判断结果为数据进行合并时,将更新数据同步至心跳检测异常节点;
合并心跳检测异常节点上的更新数据和原始数据,得到合并后的数据;
判断节点数据和合并后的数据是否一致,得到一致性结果;
根据一致性结果,确定心跳检测异常节点的同步数据。
作为一种可实现的方式,该装置还包括确定模块,用于:当判断结果为数据进行合并时,将心跳检测异常节点的原始数据替换为变化后的基础数据,并将更新数据同步至心跳检测异常节点;
合并心跳检测异常节点上变化后的基础数据和原始数据,得到合并后的数据;
判断节点数据和合并后的数据是否一致,得到一致性结果;
根据一致性结果,确定心跳检测异常节点的同步数据。
作为一种可实现的方式,确定模块,具体用于:当一致性结果为数据一致时,确定心跳检测异常节点的同步数据为合并后的数据。
作为一种可实现的方式,该装置还包括删除模块,用于:当一致性结果为数据不一致时,删除心跳检测异常节点上合并后的数据;
向心跳检测异常节点上同步正常节点的节点数据。
作为一种可实现的方式,切换模块510,还用于:响应于心跳检测异常节点心跳检测异常的次数大于或等于预设次数,将心跳检测异常节点的运行状态由延迟状态切换为异常状态。
作为一种可实现的方式,该装置还包括生成模块,用于:在心跳检测异常节点处于延迟状态中,当正常节点接收到最新数据时,向心跳检测异常节点同步最新数据;
响应于心跳检测异常节点无法保存最新数据,将心跳检测异常节点未同步的最新数据保存至正常节点;
根据心跳检测异常节点未同步的最新数据、正常节点接收的最新数据以及在心跳检测异常节点处于延迟状态之前正常节点的数据,生成节点数据。
作为一种可实现的方式,删除模块,还用于:当产生消息消费时,删除节点数据中消息对应的数据;
若心跳检测异常节点未同步的最新数据中包含消息对应的数据,从心跳检测异常节点未同步的最新数据中删除消息对应的数据。
上述各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
根据本申请的实施例,本申请还提供了一种计算机设备、一种计算机可读存储介质。
如图6所示,是根据本申请实施例的计算机设备的框图。计算机设备旨在表示各种形式的数字计算机或移动装置。其中数字计算机可以包括台式计算机、便携式计算机、工作台、个人数字助理、服务器、大型计算机和其它适合的计算机。移动装置可以包括平板电脑、智能电话、可穿戴式设备等。
如图6所示,设备600包括计算单元601、ROM 602、 RAM 603 、总线604以及输入/输出(I/O)接口605 ,计算单元 601、ROM 602 以及 RAM 603 通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
计算单元601可以根据存储在只读存储器(ROM)602 中的计算机指令或者从存储单元608加载到随机访问存储器(RAM)603 中的计算机指令,来执行本申请方法实施例中的各种处理。计算单元601可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元601可以包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。在一些实施例中,本申请实施例提供的方法可被实现为计算机软件程序,其被有形地包含于计算机可读存储介质,例如存储单元608。
RAM 603还可存储设备600操作所需的各种程序和数据。计算机程序的部分或者全部可以经由ROM 802和/或通信单元609而被载入和/或安装到设备600上。
设备600中的输入单元606、输出单元607、存储单元608和通信单元609可以连接至I/O接口605。其中,输入单元606可以是诸如键盘、鼠标、触摸屏、麦克风等;输出单元607可以是诸如显示器、扬声器、指示灯等。设备600能够通过通信单元609与其他设备进行信息、数据等的交换。
需要说明的是,该设备还可以包括实现正常运行所必需的其他组件。也可以仅包含实现本申请方案所必需的组件,而不必包含图中所示的全部组件。
此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件和/或它们的组合中实现。
用于实施本申请的方法的计算机指令可以采用一个或多个编程语言的任何组合来编写。这些计算机指令可以提供给计算单元601,使得计算机指令当由诸如处理器等计算单元601执行时使执行本申请方法实施例中涉及的各步骤。
本申请提供的计算机可读存储介质可以是有形的介质,其可以包含或存储计算机指令,用以执行本申请方法实施例中涉及的各步骤。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的等形式的存储介质。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。

Claims (13)

1.一种数据同步方法,其特征在于,所述方法包括:
响应于心跳集群中至少一个节点心跳检测异常,将心跳检测异常节点的运行状态由正常状态切换为延迟状态,其中,所述心跳集群为采用基于高级消息队列协议的消息队列的集群,所述基于高级消息队列协议为rabbitmq协议,所述心跳集群为rabbitmq集群;
响应于所述心跳检测异常节点在预设次数心跳检测内恢复正常,将所述心跳检测异常节点的运行状态由延迟状态切换为正常状态;
获取所述心跳集群中的正常节点在所述心跳检测异常节点处于延迟状态中的节点数据和所述心跳检测异常节点的原始数据,其中,所述正常节点为所述心跳集群中除心跳检测异常的心跳检测异常节点之外的节点,所述节点数据为所述正常节点的当前数据,包括基础数据和更新数据,所述基础数据为所述正常节点在所述心跳检测异常节点转换为延迟状态之前的数据,所述更新数据为所述正常节点在所述心跳检测异常节点处于延迟状态过程中同步的数据,所述原始数据为所述心跳检测异常节点在转换为延迟状态之前的数据;
根据所述节点数据和所述原始数据,同步所述心跳检测异常节点的数据,具体包括:当所述基础数据、所述更新数据和所述原始数据中任一数据发生变化时,判断所述更新数据与所述原始数据是否进行合并;若所述更新数据与所述原始数据进行合并,校验所述节点数据和合并后的数据是否一致,得到一致性结果;当所述一致性结果为数据一致时,确定所述心跳检测异常节点的同步数据为所述合并后的数据;当所述一致性结果为数据不一致时,删除所述心跳检测异常节点上合并后的数据;向所述心跳检测异常节点上同步所述正常节点的节点数据。
2.根据权利要求1所述的方法,其特征在于,所述节点数据包括所述正常节点的基础数据和更新数据;所述根据所述节点数据和所述原始数据,同步所述心跳检测异常节点的数据,包括:
根据所述基础数据、所述更新数据和所述原始数据,判断所述更新数据与所述原始数据是否进行合并,得到判断结果;
根据判断结果,同步所述心跳检测异常节点的数据。
3.根据权利要求2所述的方法,其特征在于,所述根据所述基础数据和所述原始数据,判断所述更新数据与所述原始数据是否进行合并,包括:
当所述原始数据发生变化时,判断所述更新数据与所述原始数据无法合并,判断结果为数据不合并。
4.根据权利要求2所述的方法,其特征在于,所述根据所述基础数据和所述原始数据,判断所述更新数据与所述原始数据是否进行合并,包括:
当所述基础数据发生变化,变化后的基础数据与所述原始数据相同时,判断所述更新数据与所述原始数据进行合并;
当所述基础数据发生变化,变化后的基础数据与所述原始数据不同时,判断所述更新数据与所述原始数据无法合并。
5.根据权利要求2所述的方法,其特征在于,所述根据所述更新数据,判断所述更新数据与所述原始数据是否进行合并,包括:
当所述更新数据在所述心跳检测异常节点处于延迟状态中发生变化时,判断所述更新数据与所述原始数据无法合并。
6.根据权利要求2所述的方法,其特征在于,所述根据判断结果,同步所述心跳检测异常节点的数据,包括:
当所述判断结果为数据进行合并时,将所述更新数据同步至所述心跳检测异常节点;
合并所述心跳检测异常节点上的更新数据和原始数据,得到合并后的数据;
判断所述节点数据和所述合并后的数据是否一致,得到一致性结果;
根据所述一致性结果,确定所述心跳检测异常节点的同步数据。
7.根据权利要求4所述的方法,其特征在于,所述根据判断结果,更新所述心跳检测异常节点的数据,包括:
当所述判断结果为数据进行合并时,将所述心跳检测异常节点的原始数据替换为所述变化后的基础数据,并将所述更新数据同步至所述心跳检测异常节点;
合并所述心跳检测异常节点上变化后的基础数据和原始数据,得到合并后的数据;
判断所述节点数据和所述合并后的数据是否一致,得到一致性结果;
根据所述一致性结果,确定所述心跳检测异常节点的同步数据。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述心跳检测异常节点心跳检测异常的次数大于或等于预设次数,将所述心跳检测异常节点的运行状态由延迟状态切换为异常状态。
9.根据权利要求1所述的方法,其特征在于,所述节点数据的生成方法包括:
在所述心跳检测异常节点处于延迟状态中,当所述正常节点接收到最新数据时,向所述心跳检测异常节点同步所述最新数据;
响应于所述心跳检测异常节点无法保存所述最新数据,将所述心跳检测异常节点未同步的最新数据保存至所述正常节点;
根据所述心跳检测异常节点未同步的最新数据、所述正常节点接收的最新数据以及在所述心跳检测异常节点处于延迟状态之前所述正常节点的数据,生成节点数据。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
当产生消息消费时,删除所述节点数据中所述消息对应的数据;
若所述心跳检测异常节点未同步的最新数据中包含所述消息对应的数据,从所述心跳检测异常节点未同步的最新数据中删除所述消息对应的数据。
11.一种数据同步装置,其特征在于,所述装置包括:
切换模块,用于响应于心跳集群中至少一个节点心跳检测异常,将心跳检测异常节点的运行状态由正常状态切换为延迟状态,其中,所述心跳集群为采用基于高级消息队列协议的消息队列的集群,所述基于高级消息队列协议为rabbitmq协议,所述心跳集群为rabbitmq集群;
所述切换模块,还用于响应于所述心跳检测异常节点在预设次数心跳检测内恢复正常,将所述心跳检测异常节点的运行状态由延迟状态切换为正常状态;
获取模块,用于获取所述心跳集群中的正常节点在所述心跳检测异常节点处于延迟状态中的节点数据和所述心跳检测异常节点的原始数据,其中,所述正常节点为所述心跳集群中除心跳检测异常的心跳检测异常节点之外的节点,所述节点数据为所述正常节点的当前数据,包括基础数据和更新数据,所述基础数据为所述正常节点在所述心跳检测异常节点转换为延迟状态之前的数据,所述更新数据为所述正常节点在所述心跳检测异常节点处于延迟状态过程中同步的数据,所述原始数据为所述心跳检测异常节点在转换为延迟状态之前的数据;
同步模块,用于根据所述节点数据和所述原始数据,同步所述心跳检测异常节点的数据,具体包括:当所述基础数据、所述更新数据和所述原始数据中任一数据发生变化时,判断所述更新数据与所述原始数据是否进行合并;若所述更新数据与所述原始数据进行合并,校验所述节点数据和合并后的数据是否一致,得到一致性结果;当所述一致性结果为数据一致时,确定所述心跳检测异常节点的同步数据为所述合并后的数据;当所述一致性结果为数据不一致时,删除所述心跳检测异常节点上合并后的数据;向所述心跳检测异常节点上同步所述正常节点的节点数据。
12.一种计算机设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机指令,所述计算机指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-10中任一项所述的方法。
13.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述计算机指令用于使计算机执行权利要求1至10中任一项所述的方法。
CN202311697060.9A 2023-12-12 2023-12-12 一种数据同步方法、装置、设备和存储介质 Active CN117395263B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311697060.9A CN117395263B (zh) 2023-12-12 2023-12-12 一种数据同步方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311697060.9A CN117395263B (zh) 2023-12-12 2023-12-12 一种数据同步方法、装置、设备和存储介质

Publications (2)

Publication Number Publication Date
CN117395263A CN117395263A (zh) 2024-01-12
CN117395263B true CN117395263B (zh) 2024-03-12

Family

ID=89468799

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311697060.9A Active CN117395263B (zh) 2023-12-12 2023-12-12 一种数据同步方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN117395263B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106445781A (zh) * 2016-09-27 2017-02-22 北京航空航天大学 基于消息传递的hpc大规模并行程序异常自动监测及软硬件原因判断的检测系统
CN109286529A (zh) * 2018-10-31 2019-01-29 武汉烽火信息集成技术有限公司 一种恢复RabbitMQ网络分区的方法及系统
CN110290012A (zh) * 2019-07-03 2019-09-27 浪潮云信息技术有限公司 RabbitMQ集群故障的检测恢复系统及方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220350642A1 (en) * 2021-04-29 2022-11-03 Netapp Inc. Management and orchestration of microservices

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106445781A (zh) * 2016-09-27 2017-02-22 北京航空航天大学 基于消息传递的hpc大规模并行程序异常自动监测及软硬件原因判断的检测系统
CN109286529A (zh) * 2018-10-31 2019-01-29 武汉烽火信息集成技术有限公司 一种恢复RabbitMQ网络分区的方法及系统
CN110290012A (zh) * 2019-07-03 2019-09-27 浪潮云信息技术有限公司 RabbitMQ集群故障的检测恢复系统及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"面向云服务的分布式消息系统负载均衡技术研究";高子妍;《中国优秀硕士学位论文全文数据库(电子期刊)计算机科学与技术》;全文 *

Also Published As

Publication number Publication date
CN117395263A (zh) 2024-01-12

Similar Documents

Publication Publication Date Title
CN107480014B (zh) 一种高可用设备切换方法及装置
US11599554B2 (en) Synchronizing changes to stale components of a distributed object using synchronization bitmaps
US20150067387A1 (en) Method and apparatus for data storage
US11748215B2 (en) Log management method, server, and database system
CN112527567A (zh) 系统容灾方法、装置、设备以及存储介质
CN111198662B (zh) 一种数据存储方法、装置和计算机可读存储介质
CN112000735A (zh) 一种数据处理方法、装置、系统
CN111541762A (zh) 数据处理的方法、管理服务器、设备及存储介质
CN117395263B (zh) 一种数据同步方法、装置、设备和存储介质
WO2023240995A1 (zh) 一种双机热备系统的数据恢复方法、装置及介质
CN115934742A (zh) 一种故障处理方法、装置、设备及存储介质
CN113641640B (zh) 用于流式计算系统的数据处理方法、装置、设备和介质
CN112799879B (zh) 节点的故障处理方法、装置、设备和存储介质
CN111756602B (zh) 神经网络模型训练中的通信超时检测方法和相关产品
CN114564458A (zh) 集群间数据同步的方法、装置、设备和存储介质
CN111355775B (zh) CloudStack集群子服务器状态判断方法、装置、设备及存储介质
CN115629918B (zh) 数据处理方法、装置、电子设备及存储介质
CN115563028B (zh) 一种数据缓存方法、装置、设备和存储介质
CN117033084B (zh) 虚拟机备份方法、装置、电子设备及存储介质
CN113220554B (zh) 检测程序代码的性能的方法和设备
CN113596172B (zh) 分布式集群中节点更新方法和装置
CN110658989B (zh) 用于备份存储垃圾收集的系统和方法
CN117931523A (zh) 一种灾备切换方法、装置、设备及存储介质
CN114138538A (zh) 异常实例的处理方法、装置和电子设备
CN117768441A (zh) 数据传输方法、装置、存储介质及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant