一种跨数据中心的异构数据实时同步方法、装置和系统与流程
- 国知局
- 2024-08-02 14:08:53
本发明涉及数据处理,尤其涉及一种跨数据中心的异构数据实时同步方法、装置和系统。
背景技术:
1、现有技术中,数据中心同步一般是基于存储技术实现的,常见的有同城双活、异地灾备。近些年兴起的分布式数据库技术、数据库主从同步技术也是一种解决方案。此外,硬件云厂商在此基础上提出的基于“可用区”的方案,将分布式中间件作为一整个集群、应用就近访问本机房节点的方式也开始流行。
2、但是以上方案用于同城短距离、同一局域网或同架构应用系统时,尚可演练,一旦发生单一机房不可用或网络延迟过高时,其整个系统的不可用时间不会小于20分钟,具体原因如下:
3、1、基于存储的同城双活一般采用了单边库,切换数据库需要重启,一般理论恢复时间在20分钟至30分钟、实践中业务中断时间其实可达1小时;
4、2、异地灾备重启时间在1小时以上;
5、3、分布式数据库、数据库主从同步机制如果采用强一致性,会拖慢整个系统的响应时间,基本不可能用于高并发的系统;
6、4、数据库主从同步的方案如果采用最终一致性,在切换主从时,一般要等待从节点完成数据更新,这个时间大约可以达到20分钟;
7、5、“可用区”在实践中,小于或者等于3个可用区时,单一机房故障或网络延迟高会引发整个分布式中间件集群不可用,从而使得应用也不可用。
8、此外,这些同步方式都无法应用于物理距离大于100公里、容灾范围大于一城的情况。
9、因此,亟需一种可用于远距离、实现秒级数据同步的方法。
技术实现思路
1、有鉴于此,本发明实施例的目的在于提供一种跨数据中心的异构数据实时同步方法、装置和系统,可用于远距离数据实现秒级数据同步的方法。
2、为达到上述目的,第一方面,本发明实施例提供一种跨数据中心异构数据实时同步方法,所述方法应用于发送端数据中心,所述方法包括:
3、接收本地数据同步请求,通过本地连接池组选中本地时序队列redis;
4、通过所述本地时序队列redis中的本地数据落地的lua脚本将所述同步请求写入本地时序队列;
5、获取所述本地数据落地的lua脚本的返回值;
6、根据所述本地数据落地的lua脚本的返回值对所述同步请求的报文进行编码,将编码后的同步请求的报文发送至待同步的接收端数据中心。
7、在一些可能的实施方式中,所述的通过所述本地时序队列redis中的本地数据落地lua脚本写入本地时序队列,具体包括:
8、将所述本地时序队列的队列名与偏移量进行拼接,并以间戳为索引、以redis中的zset数据结构进行保存生成所述本地时序队列的未同步索引;
9、对生成所述未同步索引的本地时序队列进行编号,生成所述本地时序队列的连续序号。
10、在一些可能的实施方式中,所述方法还包括:
11、当接收到接收端数据中心发送的同步请求已落地的信息反馈后,删除所述本地时序队列的未同步索引。
12、在一些可能的实施方式中,所述方法还包括:
13、按照时间戳检索所述未同步索引,获取所述时间戳在第一预设时间阈值内的未同步索引,更新所述未同步索引中的时间戳并重新发送所述未同步索引中的同步请求。
14、在一些可能的实施方式中,所述的根据所述本地数据落地的lua脚本的返回值对所述同步请求的报文进行编码,将编码后的同步请求的报文发送至待同步的接收端数据中心,具体包括:
15、通过参数配置将编码后的同步请求的报文多次发送至待同步的接收端数据中心;和/或,
16、通过参数配置对编码后的同步请的报文求添加批量头信息,当积累的所述编码后的同步请求的报文数量达到预设报文数量阈值时,将积累的所述编码后的同步请求的报文一次发送至待同步的接收端数据中心。
17、第二方面,本发明实施例提供了一种跨数据中心异构数据实时同步方法,应用于接收端数据中心,所述方法包括:
18、接收发送端数据中心发送的同步请求,通过异地连接池组选择异地时序队列redis;
19、通过异地时序队列redis中的异地数据落地的lua脚本对所述同步请求写入缓存时序队列;
20、建立所述缓存时序队列的连续序号索引,并将同步请求已落地的信息反馈至发送端数据中心;
21、通过异地数据提交的lua脚本按照所述连续序号索引将所述缓存时序队列中的同步请求写入异地时序队列。
22、在一些可能的实施方式中,在所述的建立所述缓存时序队列的连续序号索引之后,还包括:
23、判断所述同步请求的报文中是否包含批量头信息;
24、如果所述同步请求的报文中包含批量头信息,则对所述同步请求进行累计计数,当累计计数的数量达到预设递交数量阈值后,通过所述异地数据提交的lua脚本将累计的同步请求的报文写入所述异地时序队列。
25、在一些可能的实施方式中,通过异地数据提交的lua脚本按照所述连续序号索引将所述缓存时序队列中的同步请求写入异地时序队列,具体包括,
26、判断所述消息序号的最小值是否大于所述本地应写入的序号,如果所述消息序号的最小值大于本地应写入的序号,则继续判断所述连续序号索引对应的时间戳加上第二预设时间阈值是否大于当前时间;
27、如果所述连续序号索引对应的时间戳加上第二预设时间阈值大于当前时间,表明消息已过期,则将同步请求的消息写入失败时序队列,并删除连续序号索引;
28、如果所述连续序号索引对应的时间戳加上第二预设时间阈值不大于当前时间,表明消息在有效期内,则结束本次提交,等待发送端数据中心补发;
29、如果所述消息序号的最小值不大于本地应写入的序号,则判断所述消息序号的最小值是否小于本地应写入的序号;
30、如果所述消息序号的最小值小于本地应写入序号,表明消息已过期,则将所述同步请求写入失败时序队列,并删除所述连续序号索引;
31、如果所述消息序号的最小值不小于本地应写入序号,表明是当前消息,则将同步请求写入所述异地时序队列,并删除所述连续序号索引,同时更新所述本地应写入的序号的值。
32、在一些可能的实施方式中,所述方法还包括,
33、设定所述异地数据提交的lua脚本每次提交的消息提交数量阈值,当所述异地数据提交的lua脚本每次提交的同步请求的消息的数量等于所述消息提交数量阈值后,如果所述连续序号索引中仍有未提交的消息,则通过定时器触发所述异地数据提交的lua脚本按照所述连续序号索引将所述缓存时序队列中的同步请求写入异地时序队列。
34、第三方面,本发明实施例提供了一种跨数据中心异构数据实时同步装置,应用于发送端数据中心所述装置包括:
35、同步代理组件,用于接收本地数据同步请求,通过本地连接池组选中本地时序队列redis;
36、本地时序队列redis,用于通过本地数据落地的lua脚本将所述同步请求写入本地时序队列,并将所述本地数据落地lua脚本的返回值返回至所述同步代理组件;
37、所述同步代理组件还用于:根据所述本地数据落地lua脚本的返回值对所述同步请求的报文进行编码,将编码后的同步请求的报文发送至待同步的接收端数据中心。
38、第四方面,本发明实施例提供了一种跨数据中心异构数据实时同步装置,应用于接收端数据中心,所述装置包括:
39、同步代理组件,用于接收发送端数据中心发送的数据同步请求,通过异地连接池组选择异地时序队列redis;
40、异地时序队列redis,用于通过异地数据落地的lua脚本对所述同步请求写入缓存时序队列;建立所述缓存时序队列的连续序号索引,并将同步请求已落地的信息反馈至发送端数据中心;通过异地数据提交的lua脚本按照所述连续序号索引将所述缓存时序队列中的同步请求写入异地时序队列。
41、第五方面,本发明实施例提供了一种跨数据中心异构数据实时同步系统,包括发送端数据中心和接收端数据中心,
42、所述发送端数据中心:用于通过同步代理组件接收本地数据同步请求,通过本地连接池组选中本地时序队列redis;通过所述本地时序队列redis中的本地数据落地的lua脚本将所述同步请求写入本地时序队列,并将所述本地数据落地lua脚本的返回值返回至所述同步代理组件;所述同步代理组件根据所述本地数据落地lua脚本的返回值对所述同步请求的报文进行编码,将编码后的同步请求的报文发送至待同步的接收端数据中心;
43、所述接收端数据中心:用于通过同步代理组件接收发送端数据中心发送的数据同步请求,通过异地连接池组选择异地时序队列redis;通过所述异地时序队列redis中的异地数据落地的lua脚本对所述同步请求写入缓存时序队列;建立所述缓存时序队列的连续序号索引,并将同步请求已落地的信息反馈至发送端数据中心;通过异地数据提交的lua脚本按照所述连续序号索引将所述缓存时序队列中的同步请求写入异地时序队列。
44、第六方面,本发明实施例提供了一种电子设备,包括:
45、一个或多个处理器;
46、存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面或第二方面任意一种所述的方法。
47、第七方面,本发明实施例提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面或第二方面任意一种所述的方法。
48、上述技术方案具有如下有益效果:
49、本发明提供了一种跨数据中心的异构数据实时同步方法、装置和系统,该系统包括:发送端数据中心通过同步代理组件接收本地数据同步请求,通过本地数据落地的lua脚本将同步请求写入本地时序队列,并将lua脚本的返回值返回至所述同步代理组件;对同步请求的报文进行编码,将编码后的同步请求的报文发送至待同步的接收端数据中心;接收端数据中心通过同步代理组件接收发送端数据中心发送的数据同步请求,通过异地连接池组选择异地时序队列redis;通过异地数据落地的lua脚本对同步请求写入缓存时序队列;建立缓存时序队列的连续序号索引,通过异地数据提交的lua脚本按照连续序号索引将同步请求写入异地时序队列。
50、本发明实施例是一种跨数据中心的、支持异构数据的、实时性高的同步方法,可以用于非账户类系统,并支持数据异步写入的情况。
51、本发明实施例在应用系统中使用多个存储数据的分布式中间件,例如缓存、非关系数据库、消息队列、搜索引擎等的情况下,数据不必为每个中间件单独做同步方案,而是从最上游(一般为缓存、消息队列)进行跨机房同步,然后每个机房依托本机房内部的“本地”数据,通过一定的规则,生成需要写入到各存储中间件中。
52、本发明实施例通过使用时序队列,在其消费者端上扩展对消息的处理,通过时序确保数据的可靠性和写入单一存储的顺序。
53、本发明实施例在数据写入时序队列时进行的跨数据中心同步,通过时序队列本身的一致性确保数据的同步与可溯源,即队列名、消息偏移量都相同时,只要确认两个数据中心中的队列长度一致,数据就是一致的;如果出现了不一致,只需要比对两个队列中不同的偏移量即可。
本文地址:https://www.jishuxx.com/zhuanli/20240801/241737.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表