一种数据库切换时的幂等控制方法和装置与流程

文档序号:16390264发布日期:2018-12-22 11:20阅读:215来源:国知局
一种数据库切换时的幂等控制方法和装置与流程

本公开涉及计算机技术领域,特别涉及一种数据库切换时的幂等控制方法和装置。

背景技术

在大型的架构和平台系统中,为了保证数据库的高可用性,一般采取fo(failover,故障切换)思想,即当主写数据库宕机的情况下,通过快速切换业务写到failover库(fo库,可以认为是主写数据库的备份,相当于一种备写数据库)上,保证业务的连续性。

但是,在主写数据库故障的瞬间,往往幂等是控制不住的。例如,在依据读数据库中的数据判断写请求是否重复的机制中,如果主写数据库到读数据库的数据同步存在一定的时间延迟(2ms~2s),当主写数据库宕机的瞬间,这个时间段内的数据尚未同步到读数据库,所以读数据库会存在对这段时间内数据的丢失。那么,如果由于网络或者自身原因导致这段时间内的数据的重发即重复写操作请求,由于读数据库不存在这些数据,就不会被识别为重复请求,而被写入到fo库,从而造成幂等失效。



技术实现要素:

有鉴于此,本说明书一个或多个实施例提供一种数据库切换时的幂等控制方法和装置,以实现在数据库切换时仍然保证幂等。

具体地,本说明书一个或多个实施例是通过如下技术方案实现的:

第一方面,提供一种数据库切换时的幂等控制方法,所述方法包括:

接收业务写请求,所述业务写请求用于请求向数据库中写入数据;

将所述业务写请求对应的写数据写入主写数据库和缓存;

执行写数据库的切换,由主写数据库切换到备写数据库,所述备写数据库用于在主写数据库故障时负责写入数据;

当再次接收到业务写请求时,若所述缓存中不存在所述再次接收的业务写请求对应的写数据,将所述写数据写入所述备写数据库。

第二方面,提供一种数据库切换时的幂等控制装置,所述装置包括:

请求接收模块,用于接收业务写请求,所述业务写请求用于请求向数据库中写入数据;

写入处理模块,用于将业务写请求对应的写数据写入主写数据库和缓存;

切换处理模块,用于执行写数据库的切换,由主写数据库切换到备写数据库,所述备写数据库用于在主写数据库故障时负责写入数据;

幂等判断模块,用于当再次接收到业务写请求时,若所述缓存中不存在所述再次接收的业务写请求对应的写数据,则由写入处理模块将所述写数据写入所述备写数据库。

第三方面,提供一种数据库切换时的幂等控制设备,所述设备包括存储器、处理器,以及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行指令时实现以下步骤:

接收业务写请求,所述业务写请求用于请求向数据库中写入数据;

将所述业务写请求对应的写数据写入主写数据库和缓存;

执行写数据库的切换,由主写数据库切换到备写数据库,所述备写数据库用于在主写数据库故障时负责写入数据;

当再次接收到业务写请求时,若所述缓存中不存在所述再次接收的业务写请求对应的写数据,将所述写数据写入所述备写数据库。

本说明书一个或多个实施例的数据库切换时的幂等控制方法和装置,通过将写入主写数据库的数据也同步写入到缓存中,使得在数据库切换时,尽管读库存在数据丢失,也可以通过缓存的存储数据实现幂等控制,保证了在数据库切换时的幂等。

附图说明

为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书一个或多个实施例中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本说明书一个或多个实施例提供的业务系统架构;

图2为本说明书一个或多个实施例提供的数据库切换时的幂等控制方法;

图3为本说明书一个或多个实施例提供的幂等控制方法;

图4为本说明书一个或多个实施例提供的数据库切换时的幂等控制装置。

具体实施方式

为了使本技术领域的人员更好地理解本说明书一个或多个实施例中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书一个或多个实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。

图1示例了本说明书至少一个实施例的业务系统架构,如图1所示,应用系统11可以接收到业务写请求,例如,该请求可以是请求写入一笔交易的交易数据,或者写入新用户的注册数据。该待写入的数据可以称为“写数据”。应用系统11可以将写数据写入主写数据库12中,主写数据库12可以根据应用系统11发送的写请求将写数据写入在数据库中。

图1中的读数据库13可以承担应用系统11的读请求,该读数据库13中的数据可以是由主写数据库12同步过来,并且通常可以有2ms~2s的时间延迟。并且,读数据库13还可以有一个作用,即当接收到业务写请求时可以通过查看读数据库来判断是否发生数据重复写,从而进行幂等控制。此外,fo库14相当于一个备写数据库,当主写数据库12故障宕机时,接替主写数据库12接收应用系统发送的写请求,将写数据写入在fo库14中。

当主写数据库12宕机时,由于主写数据库12到读数据库13的数据同步存在一定的时间延迟(2ms~2s),所以会导致读数据库13存在一定的数据丢失。而如果这部分丢失的数据又产生了对应的重写请求,比如,网络原因或者其他原因导致用户又发送了一次对这部分数据的业务写请求。此时,在进行幂等判断时,如果只通过查看读数据库13中的存储数据判断该请求是否重复,将会出现判断错误,因为读数据库13没有这部分数据,就可能会出现重复写入,例如,在主写数据库12已经写入,又在fo库14写入了一次,出现重复。

为此,本说明书至少一个实施例提供了一种数据库切换时的幂等控制方法,以在数据库切换时仍然保证幂等。图2示例了该方法的处理:

在步骤200中,接收业务写请求。

本步骤中,应用系统11可以接收到业务写请求,例如,该请求可以是请求写入一笔交易的交易数据,或者写入新用户的注册数据。该待写入的数据可以称为“写数据”。

在步骤202中,将所述业务写请求对应的写数据写入主写数据库和缓存,并将所述写数据由主写数据库同步到读数据库。

本步骤中,应用系统11可以将写数据写入到主写数据库12,并同步到读数据库13,并且,如图1所示,应用系统11还将该写数据写入到缓存15中。例如,该缓存15可以是tair缓存,tair缓存是一个key/value结构数据的存储结构,它默认支持基于内存和文件的两种存储方式,分别与缓存和持久化存储对应,这种结构的缓存可以加快后续步骤的查询速度。

通过将业务写请求对应的写数据也写入到缓存15中,使得缓存15中存储了与主写数据库12中一致的数据,在主写数据库12故障时,即使未能及时同步到读数据库13,也能够由缓存15中获得与主写数据库12一致的数据。

在步骤204中,将写业务由主写数据库切换到备写数据库,所述备写数据库用于在主写数据库故障时负责写入数据。

例如,备写数据库可以是上述的fo库14。

当应用系统11检测到主写数据库12故障时,或者,接收到切换指示时,可以将写业务由主写数据库12切换到fo库14。比如,当应用系统11再接收到业务写请求时,不再是向主写数据库12写入数据,而是向fo库14写入数据。

在步骤206中,当再次接收到业务写请求时,若所述缓存不存在所述再次接收的业务写请求对应的写数据,将写数据写入备写数据库。

本步骤中,假设在发生了数据库切换后,应用系统11又接收到了业务写请求,例如,请求写入用户的注册数据,则应用系统11可以将该数据写入到fo库14中。但是,在写入fo库之前,应用系统11可以进行幂等判断,判断本次业务写请求要写入的数据是否是重复的数据,是否是重复写入。

应用系统11可以在缓存15中判断是否存在本次业务写请求要写入的数据。例如,可以通过一个查询主键来进行判断,如,用户的身份证号或者邮箱等,业务写请求中可以携带该查询主键,数据库或者缓存中存储数据时也存储该查询主键,那么如果存储的数据中包括该查询主键,则可以确定发生了数据重复。

若应用系统11确认缓存15中不包括再次接收的业务写请求对应的写数据,可以将数据写入fo库14中;否则,应用系统11可以不再写入fo库。

本例子的幂等控制方法,通过将写入主写数据库的数据也同步写入到缓存中,使得在数据库切换时,尽管读库存在数据丢失,也可以通过缓存的存储数据实现幂等控制,保证了在数据库切换时的幂等。

图3示例了本说明书至少一个实施例的幂等控制方法,该方法与图2相比,在幂等控制时,应用系统11除了去缓存15中查询是否存在重复数据,还可以去读数据库12中查看是否存在重复数据,并在确定两者都没有存储业务写请求对应的写数据时,再将数据写入到fo库中。如图3所示,可以包括:

在步骤300中,接收业务写请求。

本步骤中,应用系统11可以接收到业务写请求,例如,该请求可以是请求写入一笔交易的交易数据,或者写入新用户的注册数据。

在步骤302中,将所述业务写请求对应的写数据写入主写数据库和缓存,并将所述写数据由主写数据库同步到读数据库。

本步骤中,应用系统11可以将写数据写入到主写数据库12,并同步到读数据库13,并且,如图1所示,应用系统11还将该写数据写入到缓存15中。

通过将业务写请求对应的写数据也写入到缓存15中,使得缓存15中存储了与主写数据库12中一致的数据,在主写数据库12故障时,即使未能及时同步到读数据库13,也能够由缓存15中获得与主写数据库12一致的数据。

在步骤304中,将写业务由主写数据库切换到备写数据库,所述备写数据库用于在主写数据库故障时负责写入数据。

例如,备写数据库可以是上述的fo库14。

在步骤306中,再次接收到业务写请求。例如,应用系统11在由主写数据库12切换到fo库14后,又接收到业务写请求。

在步骤308中,判断缓存中是否存在再次接收的业务写请求对应的写数据。

例如,假设该再次接收的业务写请求对应的写数据是c。

如果判断结果是缓存中存在c,则可以表明出现了数据重复,则应用系统11可以不再向fo库14写入该数据c,即步骤310。这种情况下,可以是由于主写数据库向读数据库的同步延迟导致读数据库丢失了c,但是由于缓存15中同步写入了主写数据库的写数据,可以通过在缓存15中进行重复数据的判断进行幂等控制。

如果判断结果是缓存中不存在c,则可以继续执行步骤312。

在步骤312中,判断读数据库13中是否存在再次接收的业务写请求对应的写数据。

如果读数据库存在所述写数据c,则同样转至步骤310。这种情况可以是,数据c是读数据库中已经存在的数据,可以是在主写数据库宕机前就同步到读数据库中的数据,并不是读数据库丢失的数据。但是,这部分数据在向缓存15中写入时,由于多种原因导致了缓存中的数据丢失,所以在缓存15中没有查到而在读数据库中查询到。

如果读数据库不存在所述写数据c,则可以继续执行步骤314。这种情况可以是,本次业务写请求的写数据c是新的数据,既不是读数据库丢失的数据,也不是读数据库已经存在的数据,而是新写入的数据。

在步骤314中,将所述写数据写入fo库。

此外,对于应用系统11来说,当接收到一次业务写请求时,也可能不能知晓本次业务写请求的写数据是否是主写数据库宕机瞬间导致的读数据库丢失的数据,或者是已经由主写数据库同步至读数据库的数据,或者是新的写数据,则应用系统11可以统一执行图3所示的流程,即在缓存和读数据库中都进行重复数据的判断,这样可以提高幂等控制的准确性。

本例子的方法中,通过在缓存15和读数据库12中都进行重复数据的判断,不仅可以防止读数据库中的数据丢失导致的重复,而且还可以防止缓存15在写入数据时可能出现的数据丢失,双重保障使得幂等控制更加准确。

此外,可以对缓存中的数据的存储时间设置数据有效时长,例如,该有效时长可以是10分钟,或者是1天,等。应用系统11可以检测缓存中的写数据的存储时间是否到达数据有效时长,若达到有效时长,则可以由所述缓存中删除所述写数据。通过设置缓存的数据的有效时长,可以使得缓存数据不会占用太大的空间,数据的空间损耗得到控制。

例如,应用系统11可以按照图3所示的流程进行幂等控制,直至主写数据库的故障得到恢复。当主写数据库的故障恢复后,可以将写业务由fo库切换回主写数据库。当切回主写数据库以后,应用系统11可以将写数据写入到主写数据库12,当接收到业务写请求时,应用系统11可以将业务写请求对应的写数据写入主写数据库和缓存,并将所述写数据由主写数据库12同步到读数据库13。

当再次接收到业务写请求时,此时的主写数据库12已经开始正常工作,在进行幂等控制时,应用系统11可以查看读数据库12,若所述读数据库不存在所述再次接收的业务写请求对应的写数据,则将写数据写入备写数据库即fo库。或者,应用系统11也可以查看主写数据库12进行幂等控制,若主写数据库12不存在所述再次接收的业务写请求对应的写数据,则将写数据写入fo库。

为了实现上述方法,本说明书至少一个实施例还提供了一种数据库切换时的幂等控制装置。如图4所示,该装置可以包括:请求接收模块41、写入处理模块42、切换处理模块43和幂等判断模块44。

请求接收模块41,用于接收业务写请求,所述业务写请求用于请求向数据库中写入数据;

写入处理模块42,用于将业务写请求对应的写数据写入主写数据库和缓存;

切换处理模块43,用于执行写数据库的切换,由主写数据库切换到备写数据库,所述备写数据库用于在主写数据库故障时负责写入数据;

幂等判断模块44,用于当再次接收到业务写请求时,若所述缓存中不存在所述再次接收的业务写请求对应的写数据,则由写入处理模块将所述写数据写入所述备写数据库。

在一个例子中,幂等判断模块44,还用于在将所述写数据写入所述备写数据库之前,确定读数据库中不存在所述再次接收的业务写请求对应的写数据;写入主写数据库的数据还同步至读数据库。

在一个例子中,写入处理模块42,还用于判断所述缓存中的写数据的存储时间是否到达数据有效时长;若达到有效时长,由所述缓存中删除所述写数据。

上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。

上述图中所示流程中的各个步骤,其执行顺序不限制于流程图中的顺序。此外,各个步骤的描述,可以实现为软件、硬件或者其结合的形式,例如,本领域技术人员可以将其实现为软件代码的形式,可以为能够实现所述步骤对应的逻辑功能的计算机可执行指令。当其以软件的方式实现时,所述的可执行指令可以存储在存储器中,并被设备中的处理器执行。

例如,对应于上述方法,本说明书一个或多个实施例同时提供一种数据库切换时的幂等控制设备,该设备可以包括处理器、存储器、以及存储在存储器上并可在处理器上运行的计算机指令,所述处理器通过执行所述指令,用于实现如下步骤:

接收业务写请求,所述业务写请求用于请求向数据库中写入数据;

将所述业务写请求对应的写数据写入主写数据库和缓存;

执行写数据库的切换,由主写数据库切换到备写数据库,所述备写数据库用于在主写数据库故障时负责写入数据;

当再次接收到业务写请求时,若所述缓存中不存在所述再次接收的业务写请求对应的写数据,将所述写数据写入所述备写数据库。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于数据处理设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1