CN113722398A - 一种多活架构下保障数据一致性的方法及装置 - Google Patents

一种多活架构下保障数据一致性的方法及装置 Download PDF

Info

Publication number
CN113722398A
CN113722398A CN202110997544.XA CN202110997544A CN113722398A CN 113722398 A CN113722398 A CN 113722398A CN 202110997544 A CN202110997544 A CN 202110997544A CN 113722398 A CN113722398 A CN 113722398A
Authority
CN
China
Prior art keywords
data
log
written
cluster
failure
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.)
Pending
Application number
CN202110997544.XA
Other languages
English (en)
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.)
WeBank Co Ltd
Original Assignee
WeBank 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 WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN202110997544.XA priority Critical patent/CN113722398A/zh
Publication of CN113722398A publication Critical patent/CN113722398A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种多活架构下保障数据一致性的方法及装置,该方法应用于ES代理子系统,包括:从分布式日志系统中,拉取第一待写入的数据,并将所述第一待写入的数据,同步写入各个ES集群;当接收到所述各个ES集群中任一所述ES集群发送的写入失败信息时,则将当前重做日志中记录的写入成功数据回放到失败日志中,获得所述失败日志中的更新异常数据;所述重做日志包括在预设时长内保留的所述各个ES集群中写入成功的数据;所述预设时长大于ES集群对应的刷盘时长;所述更新异常数据为未成功写入任一所述ES集群的数据;若从恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群。

Description

一种多活架构下保障数据一致性的方法及装置
技术领域
本发明实施例涉及金融科技(Fintech)领域,尤其涉及一种多活架构下保障数据一致性的方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。
目前,在金融行业中,使用分布式搜索引擎(elasticsearch,ES),基于ES可以使大量数据具有搜索、分析和探索的能力。然而,在实际使用中,如果遇到整个机房断电的问题,ES还是会出现不可用的情况,因此,在实际使用时,需要对ES进行多活架构部署,提高系统可靠性。然而,由于ES本身并不支持不同的集群间进行数据同步,若采用多活架构的部署方式,则需要采用其余方案保证至少两个ES集群的数据相同。
虽然,相关技术中在实现ES集群的数据一致性时,提供了基于应用去进行数据同步的方案,但是,在该方案中,由于数据被写入的顺序是先写入内存,再写入对应的磁盘,因此,当数据写入ES集群且反馈写入成功时,若在等待将数据从内存刷到磁盘的时候宕机,则数据有丢失风险。
发明内容
本发明提供一种多活架构下保障数据一致性的方法及装置,用于解决现有技术中数据易丢失的问题。
第一方面,本发明提供一种多活架构下保障数据一致性的方法,应用于分布式搜索引擎ES代理子系统,包括:从分布式日志系统中,拉取第一待写入的数据,并将所述第一待写入的数据,同步写入各个ES集群;当接收到所述各个ES集群中任一所述ES集群发送的写入失败信息时,则将当前重做日志中记录的写入成功数据回放到失败日志中,获得所述失败日志中的更新异常数据;其中,所述重做日志包括在预设时长内保留的所述各个ES集群中写入成功的数据;所述预设时长大于ES集群对应的刷盘时长;所述更新异常数据为未成功写入任一所述ES集群的数据;若从恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群。
上述方法中,ES代理子系统确定任一ES集群出现异常时,即接收到各个ES集群中任一ES集群发送的写入失败信息时,会将当前重做日志中记录的写入成功数据回放到失败日志中,获得所述失败日志中的更新异常数据,当恢复数据任务的启动且达到预设启动时长时,会把失败日志中的更新异常数据再一次写入到各个ES集群中,从而确保数据不会丢失。具体的,由于当前重做日志中记录的是预设时长内保留的各个ES集群中写入成功的数据,且该预设时长大于ES集群对应的刷盘时长,从而可以在ES集群宕机时,依然可以保留数据,且将该数据再次写入各个ES集群,因此可以实现在ES集群宕机,数据不丢失的目的。
可选的,在所述从分布式日志系统中,拉取第一待写入的数据之后,所述方法还包括:确定所述失败日志中是否已存在历史异常数据;当确定所述失败日志中已存在所述历史异常数据时,将所述第一待写入的数据写入所述失败日志中,并停止将所述第一待写入的数据写入所述各个ES集群。
基于上述方法,可以避免历史异常数据未写入各个ES集群,而第一待写入的数据写入各个ES集群的情况出现,即尽量确保写入各个ES集群的数据的时序性。
可选的,在将所述第一待写入的数据写入所述失败日志中之后,所述方法还包括:从所述分布式日志系统中,在拉取第二待写入的数据之前,确定拉取等待时长,当确定拉取所述第一待写入的数据的时刻起,达到所述拉取等待时长时,拉取所述第二待写入数据,并将所述第二待写入的数据发送给本地数据库;在第一预设时长后,从所述本地数据库中获取所述第二待写入的数据,并将所述第二待写入的数据,同步写入所述各个ES集群;其中,所述第二待写入的数据为:从所述从分布式日志系统中,在拉取所述第一待写入的数据之后拉取的内容不同的数据。
上述方法中,当有异常数据时,可以降低拉取分布式系统中消息的消费速率,从而可以避免陷入数据延迟的状态出现,提高了数据的实时性。
可选的,确定拉取等待时长,包括:确定所述第二待写入的数据的拉取顺序;其中,所述拉取顺序是基于所述失败日志中已存在所述历史异常数据后,对从所述分布式日志系统拉取的数据按照拉取时间所确定的;确定前一次拉取等待时长,并将所述前一次拉取等待时长的N倍作为所述拉取等待时长;所述前一次拉取等待时长为:所述第二待写入的数据的拉取顺序的前一次所拉取的数据对应的拉取等待时长;其中,当所述前一次的拉取顺序为首次时,则确定所述前一次拉取等待时长为对所述历史异常数据的处理时长,所述N为大于2的正整数。
上述方法中,拉取等待时长随着待写入的数据的拉取顺序逐渐增加,即当需要拉取的第二待写入的数据的拉取顺序较靠后,写入失败日志的数据越多,后面再进行数据拉取时的等待时长也越长,从而有充足的时间去处理失败日志中的数据,提高处理效率。
可选的,当接收到所述各个ES集群中任一所述ES集群发送的写入失败信息时,则将当前重做日志中记录的数据回放到失败日志中,包括:判断所述失败日志中记录的更新异常数据,是否存在所述当前重做日志中记录的数据;当所述失败日志中记录的更新异常数据,不存在所述当前重做日志中记录的数据,则将所述重做日志中记录的数据插入到所述失败日志中;当所述失败日志中记录的更新异常数据,存在所述当前重做日志中记录的数据时,则确定所述失败日志中记录的更新异常数据的时间戳;判断所述时间戳是否大于所述重做日志中记录的数据的时间戳;当确定所述时间戳不大于所述重做日志中记录的数据的时间戳,将所述当前重做日志中记录的数据回放到所述失败日志中。
基于上述方法,可以将本地数据库中存储的重做日志中记录的数据回放到失败日志,从而减少了本地数据库中的数据存储量,且减少了ES代理子系统获取异常数据的步骤,提升了系统的处理效率。
可选的,若从恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群,包括:为恢复数据项目中各个恢复数据任务设置逐一抢锁机制;当对任一所述恢复数据任务抢锁成功时,建立与任一所述恢复数据任务对应的子线程,并基于所述子线程执行:从所述恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群;当所述各个ES集群反馈写入成功信息时,释放所述恢复数据任务对应的锁。
基于上述方法,可以尽量确保将异常数据写入ES集群时写入操作的顺序性,从而确保对各个ES集群写入数据时的一致性。
可选的,在将所述失败日志中的更新异常数据,同步写入所述各个ES集群之后,所述方法还包括:向所述分布式日志系统反馈偏移量;在完成向所述分布式日志系统反馈偏移量,且确定预先订阅的话题调整后,则确定不从所述分布式日志系统拉取数据。
上述方法中,当在完成向分布式日志系统反馈偏移量之后,当确定预先订阅的话题调整后,则确定不从分布式日志系统拉取数据,从而可以快速且高效的完成从业务系统到ES代理子系统的数据同步。
第二方面,本发明提供一种多活架构下保障数据一致性的装置,应用于分布式搜索引擎ES代理子系统,包括:处理单元,用于从分布式日志系统中,拉取第一待写入的数据,并将所述第一待写入的数据,同步写入各个ES集群;获得单元,用于当接收到所述各个ES集群中任一所述ES集群发送的写入失败信息时,则将当前重做日志中记录的写入成功数据回放到失败日志中,获得所述失败日志中的更新异常数据;其中,所述重做日志包括在预设时长内保留的所述各个ES集群中写入成功的数据;所述预设时长大于ES集群对应的刷盘时长;所述更新异常数据为未成功写入任一所述ES集群的数据;恢复写入单元,用于若从恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群。
可选的,在所述从分布式日志系统中,拉取第一待写入的数据之后,所述处理单元还用于:确定所述失败日志中是否已存在历史异常数据;当确定所述失败日志中已存在所述历史异常数据时,将所述第一待写入的数据写入所述失败日志中,并停止将所述第一待写入的数据写入所述各个ES集群。
可选的,在将所述第一待写入的数据写入所述失败日志中之后,所述处理单元还用于:从所述分布式日志系统中,在拉取第二待写入的数据之前,确定拉取等待时长,当确定拉取所述第一待写入的数据的时刻起,达到所述拉取等待时长时,拉取所述第二待写入数据,并将所述第二待写入的数据发送给本地数据库;在第一预设时长后,从所述本地数据库中获取所述第二待写入的数据,并将所述第二待写入的数据,同步写入所述各个ES集群;其中,所述第二待写入的数据为:从所述从分布式日志系统中,在拉取所述第一待写入的数据之后拉取的内容不同的数据。
可选的,所述处理单元,具体用于:确定所述第二待写入的数据的拉取顺序;其中,所述拉取顺序是基于所述失败日志中已存在所述历史异常数据后,对从所述分布式日志系统拉取的数据按照拉取时间所确定的;确定前一次拉取等待时长,并将所述前一次拉取等待时长的N倍作为所述拉取等待时长;所述前一次拉取等待时长为:所述第二待写入的数据的拉取顺序的前一次所拉取的数据对应的拉取等待时长;其中,当所述前一次的拉取顺序为首次时,则确定所述前一次拉取等待时长为对所述历史异常数据的处理时长,所述N为大于2的正整数。
可选的,所述获得单元,具体用于:判断所述失败日志中记录的更新异常数据,是否存在所述当前重做日志中记录的数据;当所述失败日志中记录的更新异常数据,不存在所述当前重做日志中记录的数据,则将所述重做日志中记录的数据插入到所述失败日志中;当所述失败日志中记录的更新异常数据,存在所述当前重做日志中记录的数据时,则确定所述失败日志中记录的更新异常数据的时间戳;判断所述时间戳是否大于所述重做日志中记录的数据的时间戳;当确定所述时间戳不大于所述重做日志中记录的数据的时间戳,将所述当前重做日志中记录的数据回放到所述失败日志中。
可选的,所述恢复写入单元,具体用于:为恢复数据项目中各个恢复数据任务设置逐一抢锁机制;当对任一所述恢复数据任务抢锁成功时,建立与任一所述恢复数据任务对应的子线程,并基于所述子线程执行:从所述恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群;当所述各个ES集群反馈写入成功信息时,释放所述恢复数据任务对应的锁。
可选的,在将所述失败日志中的更新异常数据,同步写入所述各个ES集群之后,所述处理单元,还用于:向所述分布式日志系统反馈偏移量;在完成向所述分布式日志系统反馈偏移量,且确定预先订阅的话题调整后,则确定不从所述分布式日志系统拉取数据。
上述第二方面及第二方面各个可选装置的有益效果,可以参考上述第一方面及第一方面各个可选方法的有益效果,这里不再赘述。
第三方面,本发明提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。
第四方面,本发明提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍。
图1为本发明实施例提供的一种可选的应用场景的示意图;
图2为本发明实施例提供的一种多活架构下保障数据一致性的方法的步骤流程示意图;
图3为本发明实施例提供的一种多活架构下保障数据一致性的方法的另一步骤流程示意图;
图4为本发明实施例提供的一种多活架构下保障数据一致性的装置的结构示意图。
具体实施方式
为了更好的理解上述技术方案,下面将结合说明书附图及具体的实施方式对上述技术方案进行详细的说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细的说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
需要说明的是,本发明的说明书和权利要求中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的图像在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
为便于理解本发明实施例提供的技术方案,这里先对本发明实施例使用的一些关键名词进行解释:
1、分布式索引引擎(ElasticSearch,ES):是一个分布式、高扩展、高实时的搜索与数据分析引擎,它可以很方便的使大量数据具有搜索、分析和探索的能力。此外,可以在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中使用。
2、kafka:是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统,该分布式日志系统可以负责将数据从一个应用传递到另外一个应用,应用只需关注于数据,无需关注数据在两个或多个应用间是如何传递的。且分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。
具体的,消息被持久化到一个话题(topic)中,且消费者可以订阅一个或多个topic,消费者可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除。且topic中的数据可以被分割为一个或多个隔离(partition),也就是说,每个topic至少有一个partition。
3、失败日志(Exception Log):用于记录写入ES集群失败的数据。
4、重做日志(Redo Log):用于记录当前批次写入ES集群成功的数据。
5、事务日志(Trans log):当确认已成功将数据写入ES集群时,会将数据记录到translog,如果ES集群宕机,重启时会从Translog中恢复数据,以此来保证数据不丢失。但是,translog写入内存到刷盘有一定的时间间隔。
下面对本发明实施例的设计思想进行简要介绍:
目前,相关技术中提供的方案,在实现ES集群的数据一致性时,提供了基于应用去进行数据同步的方案,但是,在该方案中,由于数据被写入的顺序是先写入内存,再写入对应的磁盘,因此,当数据写入ES集群且反馈写入成功时,若在等待将数据从内存刷到磁盘的时候宕机,则数据有丢失风险。
鉴于此,本发明实施例提供一种多活架构下保障数据一致性的方法,在该方法中,在将待写入的信息同步写入各个ES集群时,同步逻辑中利用了失败日志和重做日志机制,ES代理子系统接收到任一ES集群发送的写入失败信息时,会将包括在预设时长内保留的各个ES集群中写入成功的数据的重做日志中的数据,回放到失败日志中,当从恢复数据任务的启动时刻起,达到预设启动时长时,将失败日志中的更新异常数据,同步写入所述各个ES集群,即将重做日志的数据再一次写入到ES中,从而确保数据一定不会丢失。
介绍完本发明实施例的设计思想之后,下面对本发明实施例中的多活架构下保障数据一致性的技术方案适用的应用场景做一些简单介绍,需要说明的是,本发明实施例描述的应用场景是为了更加清楚的说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定,本领域普通技术人员可知,随着新应用场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。
参阅图1所示,为本发明实施例中的应用场景示意图。具体的,在该场景图中,包括业务系统101、分布式日志系统102、ES代理子系统103以及ES集群104。其中,ES集群104-1、ES集群104-2、……、ES集群104-n可以被不同的用户使用。
具体的,业务系统101可以基于应用将写入ES集群中的请求转化为消息,发送给分布式日志系统102,该分布式日志系统102例如是kafka分布式日志系统。然后ES代理子系统103从个分布式日志系统102中拉取消息,并将拉取到的消息同步写入与ES代理子系统103关联的各个ES集群104。具体的,当ES代理子系统103接收到ES集群104反馈的写入成功信息时,会将写成功的数据写入到重做日志中,且重做日志会保存预设时长内的数据,该预设时长例如是10秒;ES代理子系统103接收到ES集群104反馈的写入失败信息时,会将写失败的数据写入到失败日志中,同时将重做日志中的数据回放到失败日志中,再将失败日志中的数据重新写入到ES集群104中。具体的,如何将失败日志中的数据重新写入到ES集群104中,后文中进行详细说明。
在本发明实施例中,ES集群104可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是以提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器构成的服务器集群或者分布式系统,但并不局限于此。
其中,业务系统101、分布式日志系统102、ES代理子系统103以及ES集群104之间,以及各个ES集群104之间均可以通过一个或者多个网络105进行直接或间接的通信连接。该网络105可以是有线网络,也可以是无线网络,例如无线网络可以是移动蜂窝网络,或者可以是无线保真(Wireless-Fidelity,WIFI)网络,当然还可以是其他可能的网络,本发明实施例对此不做限制。
为进一步说明本发明实施例提供的多活架构下保障数据一致性的方法的方案,下面结合附图以及具体实施方式对此进行详细的说明。虽然本发明实施例提供了如下述实施例或附图所示的方法操作步骤,但基于常规或者无需创造性的劳动在所述方法中可以包括更多或者更少的操作步骤。在逻辑上不存在必要因果关系的步骤中,这些步骤的执行顺序不限于本发明实施例提供的执行顺序。所述方法在实际的处理过程中或者装置执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的应用环境)。
以下结合图2所示的方法流程图对本发明实施例中多活架构下保障数据一致性的方法进行说明,下面对本发明实施例的方法流程进行介绍。
步骤201:从分布式日志系统中,拉取第一待写入的数据,并将第一待写入的数据,同步写入各个ES集群。
在本发明实施例中,ES代理子系统启动时,可以读取分布式日志系统的配置信息,然后订阅对应的topic,从而拉取该topic对应的待写入的数据。进一步地,ES代理子系统可以确定失败日志中是否已存在历史异常数据,当确定失败日志中已存在历史异常数据时,将第一待写入的数据写入失败日志中,并停止将第一待写入的数据写入各个ES集群。
具体的,当ES代理子系统定失败日志中已存在历史异常数据时,则可以确定在拉取第一待写入的信息之前,所拉取的待写入的信息未被成功的同步写入各个ES集群。ES代理子系统为了确保写入各个ES集群的数据的时序性,可以将第一待写入的数据写入失败日志中,并停止将第一待写入的数据写入各个ES集群。
在本发明实施例中,当ES代理子系统将第一待写入的数据写入失败日志中之后,ES代理子系统从分布式日志系统中,在拉取第二待写入的数据之前,确定拉取等待时长,当确定拉取第一待写入的数据的时刻起,达到拉取等待时长时,拉取第二待写入数据,并将第二待写入的数据发送给本地数据库。这样的方式,可以避免将处于拉取顺序后面的待写入的信息,提前写入ES集群,导致写入ES集群的数据的时序出现错误。具体的,拉取时长是基于历史异常数据的处理周期以及预设策略确定的。
在本发明实施例中,当ES代理子系统确定失败日志中已存在历史异常数据时,确定第二待写入的数据的拉取顺序;其中,拉取顺序是基于失败日志中已存在历史异常数据后,对从分布式日志系统拉取的数据按照拉取时间所确定的。然后可以确定前一次拉取等待时长,并将前一次拉取等待时长的N倍作为拉取等待时长;前一次拉取等待时长为:第二待写入的数据的拉取顺序的前一次所拉取的数据对应的拉取等待时长;其中,当前一次的拉取顺序为首次时,则确定前一次拉取等待时长为对历史异常数据的处理时长,N为大于2的正整数。
举例来讲,假设N为3,若第二待写入的数据的拉取顺序为3,且拉取顺序为2的数据对应的拉取等待时长,即前一次拉取等待时长为两分钟,则可以确定第二待写入的数据的等待时长为六分钟。
例如,假设N为2,对历史异常数据的处理时长为一分钟,则拉取待写入的数据a前,先判断失败日志中是否有历史异常数据,若失败日志中存在历史异常数据,即确定待写入的数据a的拉取顺序为1,即拉取顺序为首次,则可以确定待写入的数据a拉取等待时长为对历史异常数据的处理时长,即为一分钟,可见,可以在拉取待写入的数据a之后,等待一分钟后再拉取新的数据。
依次类推,当确定取待写入的数据d的拉取顺序为2时,则可以确定拉取顺序为2前一次的拉取数据即待写入数据a,那么,对应的,则可以确定拉取等待时长为一分钟的两倍即为两分钟;当确定待写入的数据f拉取顺序为3时,则可以确定拉取顺序为3前一次拉取的数据为待写入的数据d,那么对应的,则可以确定拉取等待时长为两分钟的两倍即为四分钟。
具体的,当失败日志中不存在历史异常数据时,则无需等待,直接拉取新的待写入数据。当ES代理子系统下一次从分布式日志系统拉取待写入的数据时,若在拉取该数据前,确定失败日志中存在历史异常数据,则确定该数据的拉取顺序为1,对应的拉取等待时长为一分钟,即在该数据拉取一分钟后再次拉取新的数据。
通过这种方式,可以在出现积压的历史异常数据的时候,暂缓从分布式系统中拉取数据的拉取速度,等待失败日志中积压的历史异常数据被处理完成后,从分布式系统中拉取数据便可以直接写入各个ES集群。
在本发明实施例中,在第一预设时长后,从本地数据库中获取第二待写入的数据,并将第二待写入的数据,同步写入各个ES集群;其中,第二待写入的数据为:从从分布式日志系统中,在拉取第一待写入的数据之后拉取的内容不同的数据。
在本发明实施例中,当ES代理子系统确定失败日志中不存在历史异常数据时,可以将第一待写入的数据,同步写入各个ES集群,当接收到ES集群反馈的写入成功时,则将写入ES集群成功的数据写一份到重做日志中。
步骤202:当接收到各个ES集群中任一ES集群发送的写入失败信息时,则将当前重做日志中记录的写入成功数据回放到失败日志中,获得失败日志中的更新异常数据;其中,重做日志包括在预设时长内保留的各个ES集群中写入成功的数据;预设时长大于ES集群对应的刷盘时长;更新异常数据为未成功写入任一ES集群的数据。
在本发明实施例中,当ES代理子系统接收到各个ES集群中任一ES集群发送的写入失败信息时,可以确定任一ES集群出现故障,该故障例如是ES集群宕机或者是ES集群所处地区断电,无法为ES集群提供电源,则可以确定本次同步写入各个ES集群的数据写入失败。
在本发明实施例中,当ES代理子系统接收到各个ES集群中任一ES集群发送的写入失败信息,则将当前重做日志中记录的写入成功数据回放到失败日志中,获得失败日志中的更新异常数据。具体的,可以采用但不限于以下步骤获得失败日志中的更新异常数据:
步骤a:判断失败日志中记录的更新异常数据,是否存在当前重做日志中记录的数据;
具体的,ES代理子系统可以基于更新异常数据中当前索引以及主键的数据,以及当前重做日志中记录的数据中的当前索引以及主键的数据进行比对,从而可以确定失败日志中记录的更新异常数据,是否存在当前重做日志中记录的数据。
步骤b:当失败日志中记录的更新异常数据,不存在当前重做日志中记录的数据时,则将重做日志中记录的数据插入到失败日志中;
步骤c:当失败日志中记录的更新异常数据,存在当前重做日志中记录的数据时,则确定失败日志中记录的更新异常数据的时间戳
步骤e:判断时间戳是否大于重做日志中记录的数据的时间戳;
步骤f:当确定时间戳不大于重做日志中记录的数据的时间戳,将当前重做日志中记录的数据回放到失败日志中。
可见,在本发明实施例中,当失败日志中的数据的时间戳大于重做日志中记录的数据的时间戳时,则确定不需要对失败日志中的数据进行更新;当确定失败日志中的数据的时间戳不大于重做日志中记录的数据的时间戳,将当前重做日志中记录的数据回放到失败日志中,即对失败日志中的数据进行更新,从而可以尽量确保失败日志中记录的是最新的未成功写入各个ES集群的数据。
步骤203:若从恢复数据任务的启动时刻起,达到预设启动时长时,将失败日志中的更新异常数据,同步写入各个ES集群。
在本发明实施例中,ES子系统可以为恢复数据项目中各个恢复数据任务设置逐一抢锁机制;当对任一恢复数据任务抢锁成功时,建立与任一恢复数据任务对应的子线程,并基于子线程执行:从恢复数据任务的启动时刻起,达到预设启动时长时,将失败日志中的更新异常数据,同步写入各个ES集群;当各个ES集群反馈写入成功信息时,释放恢复数据任务对应的锁。
在本发明实施例中,基于抢锁机制可以逐个启动对各个异常数据对应的恢复任务,确保重新写入各个ES集群的数据的时序性。
下面以一个具体的例子,对本发明实施例中提供的多活架构下保障数据一致性的方法进行说明。
参阅图3所示,为本发明实施例中多活架构下保障数据一致性的方法的另一实施流程图。
步骤301:ES代理子系统向分布式日志系统发送订阅topics的请求信息,以使分布式日志系统从业务系统获取对应的消息,并存储于对应的存储区域。
在本申请实施例中,ES代理子系统为从分布式日志系统中订阅消息的订阅者,业务系统为向分布式日志系统发布消息的发布者,且分布式日志系统可以将业务系统基于应用发布的写入请求中携带的数据,按照主键对应的哈希值分配至对应的Partition。具体的,为了严格保证消息的消费顺序,可以将partition数目设为1,即一个topic对应一个partition。进一步地,ES代理子系统可以从分布式日志系统对应的partition中获取对应的消息。
步骤302:ES代理子系统同步初始化各个ES集群对应的ES同步器,基于对应的各个ES集群的数量,对应确定拉取第一待写入的数据的第一数量,并从分布式日志系统中拉取第一数量的第一待写入的数据。
在本申请实施例中,ES代理子系统可以各个ES集群对应的ES同步器进行同步,从而可以尽量确保初始化后的各个ES同步器的初始状态是相同的,为后续数据的同步提供良好的实施基础。
步骤303:ES代理子系统对应的各个ES同步器判断失败日志中是否存在历史异常数据;若失败日志中不存在历史异常数据,则执行步骤304;若失败日志中存在历史异常数据,则执行步骤307。
在本申请实施例中,ES代理子系统对应的各个ES同步器判断失败日志中是否存在历史异常数据的方式可以参见步骤203执行,这里不再赘述。
步骤304:ES代理子系统对应的各个同步器将从分布式日志系统中拉取第一数量的第一待写入的数据,分别同步写入各个ES集群。
在本申请实施例中,当ES代理子系统对应的各个同步器确定失败日志中不存在历史异常数据时,则将从分布式日志系统中拉取第一数量的第一待写入的数据,分别同步写入各个ES集群。
步骤305:当ES代理子系统对应的各个同步器,接收到对应ES集群发送的写入失败信息时,则执行步骤307;接收到对应ES集群发送的写入成功信息时,则执行步骤306。
步骤306:ES代理子系统将成功写入对应ES集群的数据,写入重做日志。
在本申请实施例中,ES代理子系统还设置有重做日志删除任务,且该重做日志删除任务,可以在确定新写入重做日志的数据的时刻到当前时刻的时间间隔,达到预设时长时,删除前述的新写入重做日志的数据,具体的,该预设时长大于ES集群对应的刷盘时长。
例如,ES集群对应的刷盘时长为5秒,则可以将该预设时长设置为10秒。这样的方式,即使新写入的数据未写到ES集群对应的磁盘中,重做日志中也保存了最新写入的数据,为后续数据的恢复提供实施基础。
步骤307:ES代理子系统当前重做日志中记录的写入成功数据回放到失败日志中,获得失败日志中的更新异常数据。
在本申请实施例中,当ES代理子系统对应的各个同步器,接收到对应ES集群发送的写入失败信息是,可以执行前述步骤a-步骤f,从而实现当前重做日志中记录的写入成功数据回放到失败日志中,获得失败日志中的更新异常数据。
步骤308:当ES代理子系统对任一恢复数据任务抢锁成功,且建立与任一恢复数据任务对应的子线程时,确定对更新异常数据进行恢复。
步骤309:ES代理子系统基于子线程执行:从恢复数据任务的启动时刻起,达到预设启动时长时,将失败日志中的更新异常数据,同步写入各个ES集群;
步骤310:当ES代理子系统接收到各个ES集群反馈写入成功信息时,将成功写入各个ES集群的数据,写入重做日志,并释放恢复数据任务对应的锁;当接收到任一ES集群发送的写入失败信息时,则执行步骤307。
步骤311:当ES代理子系统对应的各个同步器确定同步成功时,向分布式日志系统发送反馈信息。
步骤312:ES代理子系统确定向分布式日志系统订阅topics是否调整,若调整,则取消向分布式日志系统订阅topics。
可见,在本申请实施例中,基于分布式日志系,使用消息队列将待写入的数据写入异步化,业务系统不需要关注具体的写入逻辑,减少业务系统接入ES代理子系统的成本。
以及,考虑到ES代理子系统即使接到了写入成功信息时,写入ES集群中的数据不一定被写入磁盘中,如果此时断电,还是会丢失一定时间的数据,待ES集群恢复运行后,可以向ES代理子系统发送写入失败的信息,从而ES代理子系统会将上一次成功写入到重做日志中的数据回放到失败日志中,当恢复数据任务启动,且达到预设启动时长时,可以将重做日志的数据即失败日志中的异常数再一次写入到ES集群中,保证数据一定不会丢失。
参阅图4所示,为本发明提供一种多活架构下保障数据一致性的装置应用于分布式搜索引擎ES代理子系统,包括:处理单元401,用于从分布式日志系统中,拉取第一待写入的数据,并将所述第一待写入的数据,同步写入各个ES集群;获得单元402,用于当接收到所述各个ES集群中任一所述ES集群发送的写入失败信息时,则将当前重做日志中记录的写入成功数据回放到失败日志中,获得所述失败日志中的更新异常数据;其中,所述重做日志包括在预设时长内保留的所述各个ES集群中写入成功的数据;所述预设时长大于ES集群对应的刷盘时长;所述更新异常数据为未成功写入任一所述ES集群的数据;恢复写入单元403,用于若从恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群。
可选的,在所述从分布式日志系统中,拉取第一待写入的数据之后,所述处理单元401还用于:确定所述失败日志中是否已存在历史异常数据;当确定所述失败日志中已存在所述历史异常数据时,将所述第一待写入的数据写入所述失败日志中,并停止将所述第一待写入的数据写入所述各个ES集群。
可选的,在将所述第一待写入的数据写入所述失败日志中之后,所述处理单元401还用于:从所述分布式日志系统中,在拉取第二待写入的数据之前,确定拉取等待时长,当确定拉取所述第一待写入的数据的时刻起,达到所述拉取等待时长时,拉取所述第二待写入数据,并将所述第二待写入的数据发送给本地数据库;在第一预设时长后,从所述本地数据库中获取所述第二待写入的数据,并将所述第二待写入的数据,同步写入所述各个ES集群;其中,所述第二待写入的数据为:从所述从分布式日志系统中,在拉取所述第一待写入的数据之后拉取的内容不同的数据。
可选的,所述处理单元401,具体用于:确定所述第二待写入的数据的拉取顺序;其中,所述拉取顺序是基于所述失败日志中已存在所述历史异常数据后,对从所述分布式日志系统拉取的数据按照拉取时间所确定的;确定前一次拉取等待时长,并将所述前一次拉取等待时长的N倍作为所述拉取等待时长;所述前一次拉取等待时长为:所述第二待写入的数据的拉取顺序的前一次所拉取的数据对应的拉取等待时长;其中,当所述前一次的拉取顺序为首次时,则确定所述前一次拉取等待时长为对所述历史异常数据的处理时长,所述N为大于2的正整数。
可选的,所述获得单元402,具体用于:判断所述失败日志中记录的更新异常数据,是否存在所述当前重做日志中记录的数据;当所述失败日志中记录的更新异常数据,不存在所述当前重做日志中记录的数据,则将所述重做日志中记录的数据插入到所述失败日志中;当所述失败日志中记录的更新异常数据,存在所述当前重做日志中记录的数据时,则确定所述失败日志中记录的更新异常数据的时间戳;判断所述时间戳是否大于所述重做日志中记录的数据的时间戳;当确定所述时间戳不大于所述重做日志中记录的数据的时间戳,将所述当前重做日志中记录的数据回放到所述失败日志中。
可选的,所述恢复写入单元403,具体用于:为恢复数据项目中各个恢复数据任务设置逐一抢锁机制;当对任一所述恢复数据任务抢锁成功时,建立与任一所述恢复数据任务对应的子线程,并基于所述子线程执行:从所述恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群;当所述各个ES集群反馈写入成功信息时,释放所述恢复数据任务对应的锁。
可选的,在将所述失败日志中的更新异常数据,同步写入所述各个ES集群之后,所述处理单元401,还用于:向所述分布式日志系统反馈偏移量;在完成向所述分布式日志系统反馈偏移量,且确定预先订阅的话题调整后,则确定不从所述分布式日志系统拉取数据。
本发明实施例提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行本发明实施例提供的一种多活架构下保障数据一致性的方法及任一可选方法。
本发明实施例提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行本发明实施例提供的一种多活架构下保障数据一致性的方法及任一可选方法。
最后应说明的是:本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种多活架构下保障数据一致性的方法,其特征在于,应用于分布式搜索引擎ES代理子系统,包括:
从分布式日志系统中,拉取第一待写入的数据,并将所述第一待写入的数据,同步写入各个ES集群;
当接收到所述各个ES集群中任一所述ES集群发送的写入失败信息时,则将当前重做日志中记录的写入成功数据回放到失败日志中,获得所述失败日志中的更新异常数据;其中,所述重做日志包括在预设时长内保留的所述各个ES集群中写入成功的数据;所述预设时长大于ES集群对应的刷盘时长;所述更新异常数据为未成功写入任一所述ES集群的数据;
若从恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群。
2.如权利要求1所述的方法,其特征在于,在所述从分布式日志系统中,拉取第一待写入的数据之后,所述方法还包括:
确定所述失败日志中是否已存在历史异常数据;
当确定所述失败日志中已存在所述历史异常数据时,将所述第一待写入的数据写入所述失败日志中,并停止将所述第一待写入的数据写入所述各个ES集群。
3.如权利要求2所述的方法,其特征在于,在将所述第一待写入的数据写入所述失败日志中之后,所述方法还包括:
从所述分布式日志系统中,在拉取第二待写入的数据之前,确定拉取等待时长,当确定拉取所述第一待写入的数据的时刻起,达到所述拉取等待时长时,拉取所述第二待写入数据,并将所述第二待写入的数据发送给本地数据库;
在第一预设时长后,从所述本地数据库中获取所述第二待写入的数据,并将所述第二待写入的数据,同步写入所述各个ES集群;其中,所述第二待写入的数据为:从所述从分布式日志系统中,在拉取所述第一待写入的数据之后拉取的内容不同的数据。
4.如权利要求3所述的方法,其特征在于,确定拉取等待时长,包括:
确定所述第二待写入的数据的拉取顺序;其中,所述拉取顺序是基于所述失败日志中已存在所述历史异常数据后,对从所述分布式日志系统拉取的数据按照拉取时间所确定的;
确定前一次拉取等待时长,并将所述前一次拉取等待时长的N倍作为所述拉取等待时长;所述前一次拉取等待时长为:所述第二待写入的数据的拉取顺序的前一次所拉取的数据对应的拉取等待时长;
其中,当所述前一次的拉取顺序为首次时,则确定所述前一次拉取等待时长为对所述历史异常数据的处理时长,所述N为大于2的正整数。
5.如权利要求1所述的方法,其特征在于,当接收到所述各个ES集群中任一所述ES集群发送的写入失败信息时,则将当前重做日志中记录的数据回放到失败日志中,包括:
判断所述失败日志中记录的更新异常数据,是否存在所述当前重做日志中记录的数据;
当所述失败日志中记录的更新异常数据,不存在所述当前重做日志中记录的数据,则将所述重做日志中记录的数据插入到所述失败日志中;
当所述失败日志中记录的更新异常数据,存在所述当前重做日志中记录的数据时,则确定所述失败日志中记录的更新异常数据的时间戳;
判断所述时间戳是否大于所述重做日志中记录的数据的时间戳;
当确定所述时间戳不大于所述重做日志中记录的数据的时间戳,将所述当前重做日志中记录的数据回放到所述失败日志中。
6.如权利要求1所述的方法,其特征在于,若从恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群,包括:
为恢复数据项目中各个恢复数据任务设置逐一抢锁机制;
当对任一所述恢复数据任务抢锁成功时,建立与任一所述恢复数据任务对应的子线程,并基于所述子线程执行:从所述恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群;
当所述各个ES集群反馈写入成功信息时,释放所述恢复数据任务对应的锁。
7.如权利要求1所述的方法,其特征在于,在将所述失败日志中的更新异常数据,同步写入所述各个ES集群之后,所述方法还包括:
向所述分布式日志系统反馈偏移量;
在完成向所述分布式日志系统反馈偏移量,且确定预先订阅的话题调整后,则确定不从所述分布式日志系统拉取数据。
8.一种多活架构下保障数据一致性的装置,其特征在于,应用于分布式搜索引擎ES代理子系统,包括:
处理单元,用于从分布式日志系统中,拉取第一待写入的数据,并将所述第一待写入的数据,同步写入各个ES集群;
获得单元,用于当接收到所述各个ES集群中任一所述ES集群发送的写入失败信息时,则将当前重做日志中记录的写入成功数据回放到失败日志中,获得所述失败日志中的更新异常数据;其中,所述重做日志包括在预设时长内保留的所述各个ES集群中写入成功的数据;所述预设时长大于ES集群对应的刷盘时长;所述更新异常数据为未成功写入任一所述ES集群的数据;
恢复写入单元,用于若从恢复数据任务的启动时刻起,达到预设启动时长时,将所述失败日志中的更新异常数据,同步写入所述各个ES集群。
9.一种计算机设备,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至7中任意一项所述的方法被执行。
10.一种存储介质,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至7中任意一项所述的方法被执行。
CN202110997544.XA 2021-08-27 2021-08-27 一种多活架构下保障数据一致性的方法及装置 Pending CN113722398A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110997544.XA CN113722398A (zh) 2021-08-27 2021-08-27 一种多活架构下保障数据一致性的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110997544.XA CN113722398A (zh) 2021-08-27 2021-08-27 一种多活架构下保障数据一致性的方法及装置

Publications (1)

Publication Number Publication Date
CN113722398A true CN113722398A (zh) 2021-11-30

Family

ID=78678564

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110997544.XA Pending CN113722398A (zh) 2021-08-27 2021-08-27 一种多活架构下保障数据一致性的方法及装置

Country Status (1)

Country Link
CN (1) CN113722398A (zh)

Similar Documents

Publication Publication Date Title
US11403152B2 (en) Task orchestration method and system
CN108664496B (zh) 数据迁移方法及装置
JP6602866B2 (ja) 並列持続性を有するメッセージブローカシステム
EP3353671A1 (en) Distributed data processing method and system
CN104486107A (zh) 一种日志采集装置及方法
WO2014059804A1 (zh) 数据同步方法及系统
US10148719B2 (en) Using anchors for reliable stream processing
CN103207867A (zh) 处理数据块的方法、发起恢复操作的方法和节点
CN112597249B (zh) 一种业务数据的同步分发存储方法及系统
CN112367149B (zh) 消息获取方法、装置、设备及存储介质
CN104092719A (zh) 文件传输方法、装置及分布式集群文件系统
US20100318663A1 (en) Optimizing mobile device synchronization with multiple data sources
CN111064789B (zh) 数据迁移的方法和系统
CN112612850A (zh) 数据同步方法及装置
CN109672752A (zh) 数据同步的方法及节点
CN111737356A (zh) 一种区块链事件的处理方法及装置
CN111339118A (zh) 基于Kubernetes的资源变更历史记录方法及装置
CN111935242A (zh) 数据传输方法、装置、服务器以及存储介质
CN108390919A (zh) 一种用于高可靠双机热备的消息同步系统及方法
CN109347906B (zh) 一种数据传输方法、装置、与服务器
CN112825525B (zh) 用于处理事务的方法和装置
CN115087966A (zh) 一种数据恢复方法、装置、设备、介质及程序产品
CN117714532A (zh) 一种基于Timeline模型的数据信息推送方法、网关及相关设备
CN113722398A (zh) 一种多活架构下保障数据一致性的方法及装置
CN113515574B (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