一种数据同步方法及装置、计算机设备、存储介质与流程

文档序号:27615058发布日期:2021-11-29 13:02阅读:75来源:国知局
一种数据同步方法及装置、计算机设备、存储介质与流程

1.本技术涉及数据处理技术领域,具体涉及一种数据同步方法及装置、计算机设备、存储介质。


背景技术:

2.目前的数据库增量日志解析系统中,可以利用数据同步工具将数据库的增量数据同步到其他的存储应用,实现增量数据的订阅和消费。但是,现有方式下,需要通过本地配置文件人为配置各个数据同步工具与数据库的一一连接关系,当数据同步工具或数据库发生配置变更时,运维难度较大。


技术实现要素:

3.本技术提供一种数据同步方法及装置、计算机设备、存储介质,其主要目的在于降低数据库数据同步的运维难度。
4.为实现上述目的,本技术实施例提供了一种数据同步方法,应用于数据同步系统,所述数据同步系统包括数据库、第一服务器和服务器,所述方法包括:
5.响应于数据同步系统配置信息的变更,获取所述数据同步系统的目标配置信息;
6.根据所述目标配置信息,从所述第一服务器上运行的至少一个数据队列中确定待加锁的第一数据队列,以及从所述数据同步系统的所有数据库中确定待加锁的第一数据库;
7.生成加锁请求,并向第二服务器发送所述加锁请求,其中,所述加锁请求用于指示所述第二服务器在所述第一数据库对应的第一资源池中创建所述第一数据队列对应的第一资源;
8.从所述第二服务器获取所述第一资源池的资源信息;
9.根据所述资源信息判断是否加锁成功,若加锁成功,将所述第一数据队列与所述第一数据库连接以进行数据同步,若加锁失败,对所述第一资源池进行变更监听。
10.为实现上述目的,本技术实施例还提出了一种数据同步装置,应用于数据同步系统,所述数据同步系统包括数据库、第一服务器和第二服务器,所述装置包括:
11.获取模块,用于响应于数据同步系统配置信息的变更,获取所述数据同步系统的目标配置信息;
12.确定模块,用于根据所述目标配置信息,从所述第一服务器上运行的至少一个数据队列中确定待加锁的第一数据队列,以及从所述数据同步系统的所有数据库中确定待加锁的第一数据库;
13.生成模块,用于生成加锁请求,其中,所述加锁请求用于指示第二服务器在所述第一数据库对应的第一资源池中创建所述第一数据队列对应的第一资源;
14.发送模块,用于向所述第二服务器发送所述加锁请求;
15.所述获取模块,还用于从所述第二服务器获取所述第一资源池的资源信息;
16.判断模块,用于根据所述资源信息判断是否加锁成功;
17.同步模块,用于在加锁成功时,将所述第一数据队列与所述第一数据库连接以进行数据同步;
18.监听模块,用于在加锁失败时,对所述第一资源池进行变更监听。
19.为实现上述目的,本技术实施例还提出了一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器上存储有程序,所述程序被所述处理器执行时实现前述方法的步骤。
20.为实现上述目的,本技术提供了一种存储介质,用于计算机可读存储,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述方法的步骤。
21.本技术提出的数据同步方法及装置、计算机设备、存储介质,适用于包括数据库、第一服务器和第二服务器的数据同步系统,能够监听整个数据同步系统的配置变更,并结合配置变更情况适应性地采取相应的负载分配方式,即动态调整各个第一服务器上数据队列与数据库的连接,无需人为配置,故各个数据队列可以灵活抢占各个数据库的资源池,并根据资源池的资源创建情况分析是否加锁成功,加锁成功即建立连接,加锁失败则继续对资源池进行变更监听以等待下一次加锁机会,从而在实现分布式部署的同时,便于水平扩缩容,降低了对数据同步系统的运维难度。
附图说明
22.图1是本技术实施例所应用的一种数据同步系统的结构框图;
23.图2是本技术实施例所应用的一种服务器的结构框图;
24.图3是现有技术中数据库与cana l实例进行数据同步的示意图;
25.图4是本技术实施例中数据库与第一服务器进行数据同步的示意图;
26.图5是本技术实施例一提供的数据同步方法的流程图;
27.图6是本技术实施例二提供的数据同步方法的流程图;
28.图7是本技术实施例所应用的一种数据同步装置的结构框图。
具体实施方式
29.应当理解,此处所描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
30.在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本技术的说明,其本身没有特有的意义。因此,“模块”、“部件”或“单元”可以混合地使用。
31.本技术可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费服务器、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本技术可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本技术,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程
序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
32.本技术提供一种数据同步方法,应用于一种数据同步系统。参照图1所示,图1是本技术实施例所应用的一种数据同步系统的结构框图。该数据同步系统包括第一服务器10、数据库20和第二服务器30。其中,第一服务器10和数据库20的数目均可以是至少一个,不做具体限定。
33.在本实施例中,数据库20可以是mysql、oracle数据库或sybase等关系型数据库,也可以是mongodb或hbase等非关系型数据库,对此不做具体限定。具体的,数据库20可以采用二进制日志(binary log)记录并存储数据库20的变更历史、数据库增量备份、恢复和复制(主从数据库的复制)等信息,从而适用于数据同步(比如在线、离线数据库之间的数据同步操作)、数据消费(比如根据数据库表的变化实现增量搜索)或者数据脱敏(比如将线上动态数据导入到其他应用以实现数据脱敏)等多种应用场景。
34.参照图2所示,图2是本技术实施例所应用的一种服务器的结构框图。
35.在本实施例中,服务器可以是独立的服务器,也可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(content delivery network,cdn)、以及大数据和人工智能平台等基础云计算服务的云服务器。
36.该服务器包括:存储器11、处理器12、网络接口13及数据总线14。
37.存储器11包括至少一种类型的可读存储介质,至少一种类型的可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器等的非易失性存储介质。在一些实施例中,可读存储介质可以是服务器的内部存储单元,例如该服务器的硬盘。在另一些实施例中,可读存储介质也可以是服务器的外部存储器,例如服务器上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。
38.在本实施例中,存储器11的可读存储介质通常用于存储安装于服务器中的程序等。存储器11还可以用于暂时地存储已经输出或者将要输出的数据。
39.处理器12在一些实施例中可以是一中央处理器(central processing unit,cpu),微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行程序等,以实现本技术实施例所提供的技术方案。
40.网络接口13可选的可以包括标准的有线接口、无线接口(如wi

fi接口),通常用于在该服务器与其他电子设备之间建立通信连接。
41.数据总线14用于实现这些组件之间的连接通信。
42.图1仅示出了具有组件11

14的服务器,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。还可以理解的是,上述图2所示的服务器可适用于第一服务器10和第二服务器30。
43.具体的,本实施例中的第一服务器10和数据库20可以采用canal架构,则第一服务器10可以是canal服务器。第一服务器10与数据库20建立连接时,可以通过数据库20的主从复制交互协议向数据库20发送备份指令(比如dump指令),则数据库20响应于备份指令将二进制日志推送给第一服务器10,使得第一服务器10获得并解析二进制日志以实现数据同步。第一服务器10上可以运行有至少一个数据队列(也即canal实例),而每个数据队列可与不同数据库建立连接。其中,数据队列可实现:数据源接入,并解析与数据库20的交互协议;
数据过滤、分发、归并及加工;数据存储;以及,增量订阅与消费信息管理。
44.如图3所示,图3是现有技术中数据库与canal实例进行数据同步的示意图。现有技术中,大多采用基于canal的主备架构模块,即两个canal实例会组成一个主备服务组,比如主服务端的实例a和备服务端的实例a。并且,一个主备服务组只连接于指定的一个数据库(或数据库实例),比如上述实例a对应的主备服务组只与数据库实例a连接。当主服务端的实例服务时,备服务端的实例只用于上报心跳并监听主服务端是否异常,不参与其他服务,而当主服务端异常时,备服务端的实例才会接管,导致了一定的资源冗余。如图4所示,图4是本技术实施例中数据库20与第一服务器10进行数据同步的示意图。相比于现有技术,本技术不采用备服务端,没有闲置节点,第一服务器10上的每个实例均可抢占每个数据库20以尝试建立连接,因此大大减少了机器成本和资源浪费。更具体的,本技术中,第一服务器10与数据库20可以建立长连接,则新增数据库20不会影响已建立的第一服务器10和数据库20之间的连接关系,也不会涉及主备切换时产生额外的连接断开与重连,具备高可用性,避免重复消费。
45.具体的,第一服务器10、数据库20和第二服务器30采用分布式架构,比如dubbo或kafka等基于传输控制协议(transmission control protocol,tcp)长连接的服务注册及发现模型。其中,第二服务器30可以采用zookeeper服务器,第二服务器30的数目也可以是至少一个,并以集群形式部署。也就是说,第一服务器10可以与集群中任一第二服务器30连接,如果连接异常断开,则第一服务器10可再次连接集群中其他第二服务器30。
46.可选的,该数据同步系统还可以包括配置中心40,配置中心40可以是统一管理数据同步系统中数据库20和第一服务器10等系统应用的配置信息的服务组件,可应用于服务器、智能手机、平板电脑、便携计算机、桌上型计算机等具有运算功能的终端设备。用户在配置中心40进行配置更新,则配置中心40存放有状态信息,再通过响应各个第一服务器10的请求向第一服务器10下发配置信息,故无需特意对各个第一服务器10进行信息同步,实现第一服务器10的无状态应用,容错性高,且提供了远程管理配置的能力,实现分布式系统下应用配置的可管理性。
47.可选的,该数据同步系统还可以包括订阅端50,订阅端50和第一服务器10可采用分布式消息系统,比如rocketmq,从而提供低延时和高可靠的消息发布与订阅服务。第一服务器10可以将获得的增量数据分发到一个或多个消息队列中,再基于订阅端50的各个订阅任务对应的主题,将各个消息队列推送到与消息队列的主题所对应的订阅端50。
48.可选的,该数据同步系统还可以包括至少一个客户端60,客户端60可以是智能手机、平板电脑、便携计算机、桌上型计算机等具有运算功能的终端设备。客户端60可以与任一第一服务器10建立连接以实现远程数据交互,便于拓展更加多样化的交互功能。
49.下面对本技术实施例公开的一种数据同步方法进行具体说明。可以理解的是,上述数据同步系统适用于本技术实施例中的数据同步方法。
50.实施例一
51.如图5所示,图5是本技术实施例一提供的数据同步方法的流程图。如图5所示,该方法包括如下步骤:
52.步骤s500:响应于数据同步系统配置信息的变更,第一服务器获取数据同步系统的目标配置信息。
53.在本技术实施例中,具体的,可以由配置中心在数据同步系统的配置信息发生变更时,向各个第一服务器发送配置更新通知,使得第一服务器根据配置更新通知向配置中心发送配置获取请求,则配置中心将配置信息变更后得到的目标配置信息下发给第一服务器。配置信息发生变更的情况包括但不限于:信息增加、修改和删减等。目标配置信息可以包括数据库配置信息和第一服务器配置信息。第一服务器配置信息可以包括数据同步系统中所有第一服务器、各个第一服务器的服务器信息、各个第一服务器上运行的数据队列以及各个数据队列的限制信息(比如数据库连接上限值和事务处理上限值等),数据库配置信息包括数据同步系统中所有数据库、各个数据库的识别信息(比如编号或名称等)及连接信息(比如连接域名、账号及密码等),均不做具体限定。
54.可选的,数据库配置信息可分为全局配置信息和连接信息,配置中心可以以预设数据格式将全局配置信息存储至第一存储路径,全局配置信息包括数据库同步系统中所有数据库以及各个数据库的识别信息,预设数据格式可以包括但不限于列表、元组或键值对等。以及,将各个数据库的连接信息存储至各个数据库对应的第二存储路径,第二存储路径与数据库的识别信息相关。也就是说,当第一服务器发送配置获取请求,配置中心可以先向第一服务器返回按照第一存储路径读取到的全局配置信息。而当第一服务器确定与任一数据库建立连接(也即加锁成功),则第一服务器可以根据待连接的数据库的识别信息,向配置中心发送对该识别信息的信息读取请求,则配置中心再按照信息读取请求对应的识别信息确定相应的第二存储路径,并按照该第二存储路径读取连接信息以返回给第一服务器,最终使得第一服务器根据返回的连接信息进行数据库连接。
55.示例性的,配置中心存储的全局配置信息可以为数据库信息列表,即:com.pajk.roma.dbinfos=["db1","db2"]。易知存在两个数据库,这两个数据库的编号分别为“db1”和“db2”。假设根据两个数据库各自的编号,还可获得各个数据库的连接信息,即:
[0056]
com.pajk.roma.db1.dbinfo={连接域名:add one;账号:user one;密码:psd one},com.pajk.roma.db2.dbinfo={连接域名:add two;账号:user two;密码:psd two}。
[0057]
以编号“db1”为例,当配置中心接收到对“db1”的信息读取请求,则可确定“db1”对应的第二存储路径“com.pajk.roma.db1.dbinfo”,再按照第二存储路径“com.pajk.roma.db1.dbinfo”,读取到连接信息:{连接域名:add one;账号:user one;密码:psd one}。
[0058]
步骤s501:第一服务器根据目标配置信息,从第一服务器上运行的至少一个数据队列中确定待加锁的第一数据队列,以及从数据同步系统的所有数据库中确定待加锁的第一数据库。
[0059]
在一种可选的实施方式中,目标配置信息包括第一服务器上运行的各个数据队列的数据库连接上限值,第一数据库的确定方式具体可以为:
[0060]
获取第一服务器上运行的至少一个数据队列各自对应的加锁数量,加锁数量表示数据队列已连接的数据库数量。从至少一个数据队列中确定待加锁的第一数据队列,第一数据队列满足:第一数据队列对应的加锁数量小于第一数据队列的数据库连接上限值。可以理解,每当第一服务器上的数据队列与数据库建立连接,则该数据队列对应的加锁数量加一。
[0061]
在另一种可选的实施方式中,目标配置信息包括第一服务器上运行的各个数据队列的事务处理上限值,事务处理上限值表示数据队列在指定时间内的最大事务处理量,则第一数据库的确定方式具体也可以为:
[0062]
获取第一服务器上运行的至少一个数据队列各自对应的当前事务处理能力,当前事务处理能力表示数据队列当前在指定时间内的事务处理量,比如每秒事务处理量(transaction per second,tps)。从至少一个数据队列中确定待加锁的第一数据队列,第一数据队列满足:第一数据队列对应的当前事务处理能力小于第一数据队列的事务处理上限值。
[0063]
在又一种可选的实施方式中,上述第一数据队列也可同时满足:第一数据队列对应的加锁数量小于第一数据队列的数据库连接上限值,且第一数据队列对应的当前事务处理能力小于第一数据队列的事务处理上限值。
[0064]
可以理解,上述数据库连接上限值、事务处理上限值和指定时间等预设参数均可由人为设定及调整。可见,对各个数据队列增设不同的资源阈值限制条件,有利于改善系统的稳定性和可靠性。
[0065]
在本技术实施例中,待加锁的第一数据库可以满足:第一数据队列未在第一数据库对应的第一资源池中创建资源;或者,第一数据库未被加锁成功,对此不做具体限定。
[0066]
步骤s502:第一服务器生成加锁请求,并向第二服务器发送加锁请求。
[0067]
在本技术实施例中,加锁请求用于指示第二服务器在第一数据库对应的第一资源池中创建第一数据队列对应的第一资源。各个数据库对应的资源池用于存放不同数据队列创建的资源,具体的,第一资源池可以是排队列表,而第一资源可以是第一排队列表在排队列表中创建的节点,此处的节点可以是临时节点、永久节点、有编号节点或临时有编号节点等,不做限定。其中,临时节点可在第一服务器和第二服务器断开连接时被清除,永久节点是由第一服务器主动删除的持久化节点,有编号节点是自动增加顺序编号的持久化节点,临时有编号节点是临时自动增加编号的临时节点。
[0068]
一些可选的实施方式中,第二服务器在第一资源池创建第一资源的步骤具体可以为:
[0069]
第二服务器先尝试调用第一数据库对应的第一资源池。若第一资源池不存在,则第二服务器新建第一数据库对应的第一资源池。第二服务器将预设的起始编号(比如000001)作为第一数据队列对应的排序编号,并根据第一数据库对应的数据库编码和第一数据队列对应的排序编号,生成第一数据队列的资源编码,其中,数据库编码表示第一数据库对应的存储路径,资源编码表示用于定位第一资源的资源路径。之后,第二服务器根据第一数据队列的资源编码在第一资源池中创建第一资源。以下表1所示的一种第一数据库的排队列表为例,节点1可以是第一数据队列对应的第一资源。
[0070]
表1第一数据库的排队列表一
[0071][0072]
或者,调用第一数据库对应的第一资源池之后,若获得第一资源池,则第二服务器
可以从第一资源池中确定排序编号最大的资源,再根据该排序编号最大的资源对应的第一排序编号为第一数据队列分配排序编号,得到第二排序编号,使得第二排序编号大于第一排序编号。结合第一数据库对应的数据库编码和第二排序编号,生成第一数据队列的资源编码,并根据资源编码在第一资源池中创建第一资源。以下表2所示的另一种第一数据库的排队列表为例,假设该排队列表已包含下表节点1、2和3,可知排序编号最大的节点为节点3,则第一排序编号为“000003”。假设第二排序编号为第一排序编号加一,则第二服务器在该排队列表中为第一数据队列创建下图中的节点4。
[0073]
表2第一数据库的排队列表二
[0074][0075]
步骤s503:第一服务器从第二服务器获取第一资源池的资源信息。
[0076]
在本技术实施例中,第一资源池的资源信息可以包括但不限于第一资源池中的所有资源以及各个资源对应的排序编号(或资源编码)。
[0077]
步骤s504:第一服务器根据资源信息判断是否加锁成功,若是,执行步骤s505,若否,执行步骤s506。
[0078]
在一种可选的实施方式中,步骤s504具体可以为:根据资源信息,确定第一资源池内各个资源的排序编号,排序编号根据资源在第一资源池中的创建次序所生成。判断第一资源的排序编号是否在第一资源池内所有资源的排序编号中取值最小,若是,则判定加锁成功,若否,则判定加锁失败。以表1为例,由于新增的节点1的排序编号“000001”在第一资源池内已有资源的排序编号中取值最小,故第一服务器此时可判定第一数据队列对第一数据库加锁成功。而以表2为例,由于新增的节点4的排序编号“000004”在第一资源池内已有资源的排序编号中取值并非最小,故第一服务器此时判定第一数据队列对第一数据库加锁失败。可见,对资源池中的资源进行有序编号,使得各个数据队列按照一定先后次序抢占资源池中的资源,能够保证数据库始终只与一个数据队列建立连接。
[0079]
步骤s505:第一服务器将第一数据队列与第一数据库连接以进行数据同步。
[0080]
在本技术实施例中,步骤s505具体可以为:第一服务器向第一数据库发送备份指令,从而获取第一数据库响应于备份命令返回的增量数据。之后,第一服务器再将增量数据发送给订阅端,并在接收到订阅端返回的确认信息后,完成一次增量数据同步。
[0081]
步骤s506:第一服务器对第一资源池进行变更监听。
[0082]
在本技术实施例中,第一服务器可以采用监听机制(比如zookeeper watch机制)对第一资源池进行变更监听,当第一资源池中加锁成功的资源被释放,则第二服务器可以
发送通知给第一服务器,使得第一服务器重新从第二服务器获取第一资源池的资源信息,以判断是否加锁成功。
[0083]
可选的,还可以循环执行步骤s501至步骤s506,直到第一服务器上不存在待加锁的第一数据队列,或者,针对第一数据队列,不存在与第一数据队列对应且待加锁的第一数据库,故能够最高效化地利用各个数据队列和数据库的连接资源。
[0084]
可见,实施上述方法实施例,能够监听整个数据同步系统的配置变更,并结合配置变更情况适应性地采取相应的负载分配方式,即动态调整各个第一服务器上数据队列与数据库的连接,无需人为配置,故各个数据队列可以灵活抢占各个数据库的资源池,并根据资源池的资源创建情况分析是否加锁成功,加锁成功即建立连接,加锁失败则继续对资源池进行变更监听以等待下一次加锁机会,从而在实现分布式部署的同时,便于水平扩缩容,降低了对数据同步系统的运维难度。
[0085]
实施例二
[0086]
如图6所示,图6是本技术实施例二提供的数据同步方法的流程图。如图6所示,该方法包括如下步骤:
[0087]
步骤s600:响应于数据同步系统配置信息的变更,第一服务器获取数据同步系统的目标配置信息。
[0088]
步骤s601:第一服务器获取存储的本地配置信息。
[0089]
在本技术实施例中,本地配置信息为上一次数据同步系统的配置信息发生变更时对数据同步系统获取到的配置信息,对本地配置信息的具体描述可参照目标配置信息,不做赘述。
[0090]
步骤s602:第一服务器将目标配置信息与本地配置信息进行对比,得到对比结果。
[0091]
步骤s603:在对比结果包括新增数据库或者任一数据队列被删除的情况下,第一服务器根据目标配置信息,从第一服务器上运行的至少一个数据队列中确定待加锁的第一数据队列,以及从数据同步系统的所有数据库中确定待加锁的第一数据库。
[0092]
也就是说,当新增数据库或任一数据队列被删除时,数据同步系统中存在空闲的连接资源,故此时适合重新对各个仍具备加锁条件的数据队列进行动态分配。具体的,若第一服务器上运行有被删除的数据队列,则第一服务器可以确定与被删除的数据队列连接的目标数据库,并向第二服务器发送被删除的数据队列对与目标数据库的释放请求。第二服务器根据释放请求从目标数据库的资源池中删去上述被删除的数据队列所对应的资源,完成资源释放。
[0093]
在一些可选的实施方式中,步骤s603之后,还可以包括以下步骤:
[0094]
在对比结果包括第二数据库被删除的情况下,当第一服务器上运行有与第二数据库连接的第二数据队列,则向第二服务器发送第二数据队列对第二数据库的释放请求,第二服务器可以根据释放请求从第二数据库对应的第二资源池中删去第二数据队列创建的第二资源;或者,当第一服务器上运行有对第二资源池进行变更监听的第三数据队列,则向第二服务器发送第三数据队列对第二数据库的监听取消请求,监听取消请求用于指示第二服务器可以根据监听取消请求从第二资源池中删去第三数据队列创建的第三资源。
[0095]
和/或,在对比结果包括第三数据库被修改的情况下,且第一服务器上运行有与第三数据库连接的第四数据队列,则向第二服务器发送第四数据队列对第三数据库的重加锁
请求。第二服务器根据重加锁请求,从第三数据库对应的第三资源池中删除第四数据队列创建的第四资源,再在第三资源池中为第四数据队列创建新的第四资源。
[0096]
可见,通过目标配置信息和本地配置信息的对比,实现对配置信息变化的具体分析,并结合多种配置变化适应性地调整数据队列与数据库的连接,具备更加灵活的负载均衡效果。
[0097]
步骤s604:第一服务器根据数据同步系统中所有数据库的配置信息,确定第一数据库的识别信息。
[0098]
比如,第一服务器可以从各个数据库的配置信息中获得第一数据库所对应的编码。
[0099]
步骤s605:第一服务器获取设定的监听对象和触发事件类型。
[0100]
在本技术实施例中,监听对象和触发事件类型均可以由人为设定及调整,监听对象可以是:第一数据库对应的第一资源池;或者,第一数据队列在第一资源池中创建的资源;或者,第一资源池中加锁成功的资源;或者,第一资源池中排序编号在第一数据队列所创建资源之前的一个或多个资源,不做具体限定。触发事件类型可以包括但不限于:监听对象被删除和监听对象发生内容变更等。
[0101]
步骤s606:第一服务器结合识别信息、监听对象和触发事件类型,生成加锁请求,并向第二服务器发送加锁请求。
[0102]
在本技术实施例中,具体的,第二服务器接收到加锁请求后,可以根据加锁请求对应的识别信息确定第一数据库对应的第一资源池,从而在第一资源池中创建第一数据队列对应的第一资源。第二服务器还可以根据加锁请求对应的监听对象和触发事件类型生成监听器以对第一资源池进行变更监听。当第二服务器利用监听器对第一资源池中的监听对象监听到满足触发事件类型的触发事件时,第二服务器生成变更通知,并将变更通知发送给第一服务器,实现了有效的资源监听机制,能够通过资源池变化反映数据库的连接变化,并及时将数据库的连接变化反馈给第一服务器,以便第一服务器对资源池进行动态抢占及加锁。可选的,变更通知可以包括通知状态、触发事件类型和触发事件对应的资源路径等,通知状态表示第一服务器与第二服务器的连接状态(比如连接正常、连接断开或会话失效等)。
[0103]
还可选的,第一服务器在生成加锁请求时,还可以建立第一数据队列与相应监听对象和触发事件类型之间的监听关系,并对监听关系进行存储。基于此,每次第一服务器接收到第二服务器发送的变更通知时,可以将变更通知与存储的监听关系进行匹配,进而根据匹配得到的监听关系确定第一服务器上响应本次变更的数据队列。
[0104]
步骤s607:第一服务器从第二服务器获取第一资源池的资源信息。
[0105]
步骤s608:第一服务器根据资源信息判断是否加锁成功,若是,执行步骤s609,若否,执行步骤s610至s611。
[0106]
步骤s609:第一服务器将第一数据队列与第一数据库连接以进行数据同步。
[0107]
步骤s610:第一服务器检测第二服务器发送的变更通知。
[0108]
步骤s611:若接收到变更通知,继续执行步骤s607。
[0109]
可以理解的是,本实施例中步骤s600、s603、s606至s609的具体实现方式还可以参照上述实施例一中对步骤s500至s506的描述,在此不再赘述。
[0110]
在一些可选的实施方式中,第一服务器还可以接收客户端发送的处理请求(比如http请求),并根据处理请求进行交互处理,得到处理结果,再将处理结果返回给客户端。
[0111]
其中,针对第一服务器根据处理请求进行交互处理这一步骤,一些实现方式中,处理请求可以是查询请求,则第一服务器可以获取查询请求指定的实例标识信息(或第一服务器标识信息)。第一服务器根据实例标识信息(或第一服务器标识信息)查询目标数据队列连接的数据库信息,以作为处理结果。其中,目标数据队列是与实例标识信息匹配的数据队列,实例标识信息包括ip地址或编号等,数据库信息包括但不限于数据库个数和数据库名称。或者,第一服务器可以根据查询请求指定的数据库信息,查询目标数据库连接的数据队列,以作为处理结果。其中,目标数据库是与指定的数据库信息匹配的数据库。
[0112]
另一些实现方式中,处理请求可以是干预请求,则第一服务器可以根据干预请求,得到干预请求指定的第五数据队列和第四数据库,并向第二服务器发送第五数据队列对第四数据库的释放请求,第二服务器响应于释放请求,在第四数据库对应的资源池中删去第五数据队列创建的资源。
[0113]
可见,实施上述方法实施例,能够监听整个数据同步系统的配置变更,并结合配置变更情况适应性地采取相应的负载分配方式,即动态调整各个第一服务器上数据队列与数据库的连接,无需人为配置,故各个数据队列可以灵活抢占各个数据库的资源池,并根据资源池的资源创建情况分析是否加锁成功,加锁成功即建立连接,加锁失败则继续对资源池进行变更监听以等待下一次加锁机会,从而在实现分布式部署的同时,便于水平扩缩容,降低了对数据同步系统的运维难度。
[0114]
本技术实施例还提供一种数据同步装置。请参阅图7,图7是本技术实施例所应用的一种数据同步装置的结构框图。如图7所示,该数据同步装置700包括:
[0115]
获取模块710,用于响应于数据同步系统配置信息的变更,获取数据同步系统的目标配置信息;
[0116]
确定模块720,用于根据目标配置信息,从第一服务器上运行的至少一个数据队列中确定待加锁的第一数据队列,以及从数据同步系统的所有数据库中确定待加锁的第一数据库;
[0117]
生成模块730,用于生成加锁请求,其中,加锁请求用于指示第二服务器在第一数据库对应的第一资源池中创建第一数据队列对应的第一资源;
[0118]
发送模块740,用于向第二服务器发送加锁请求;
[0119]
获取模块710,还用于从第二服务器获取第一资源池的资源信息;
[0120]
判断模块750,用于根据资源信息判断是否加锁成功;
[0121]
同步模块760,用于在加锁成功时,将第一数据队列与第一数据库连接以进行数据同步;
[0122]
监听模块770,用于在加锁失败时,对第一资源池进行变更监听。
[0123]
需要说明的是,本实施例的具体实现过程可参见上述方法实施例所描述的具体实现过程,亦不再赘述。
[0124]
本技术实施例还提供了一种计算机设备,该计算机设备包括存储器和处理器,存储器上存储有程序,程序被处理器执行时实现上述数据同步方法。
[0125]
本技术实施例还提供了一种存储介质,用于计算机可读存储,存储介质存储有一
个或者多个程序,一个或者多个程序可被一个或者多个处理器执行,以实现上述数据同步方法。
[0126]
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
[0127]
在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd

rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
[0128]
以上参照附图说明了本技术的优选实施例,并非因此局限本技术的权利范围。本领域技术人员不脱离本技术的范围和实质内所作的任何修改、等同替换和改进,均应在本技术的权利范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1