背景技术
目前,各类***在对外提供服务时,数据库的可用性是各类***能够正常服务的前提。
在访问数据库是,若数据库出现问题(例如数据库服务器负载过高、网络闪断等等),则无法反馈数据给访问者,或者出现访问超时等情况。
但是,在这些情况出现时,访问者会不断重试,此时数据库的服务量相较于平时大幅增加,对于当前的数据库来说,很容易出现“雪崩”效应,导致服务完全不可用甚至崩溃。
说明书内容
本说明书提供了一种调整数据库的业务访问量的方法及***,以解决或缓解在业务***数据库负载过高或不稳定时引发的“雪崩”效应。
为解决上述技术问题,本说明书提供了一种调整数据库的业务访问量的方法,包括:
确定在访问所述数据库时生成的当前业务访问失败率;
将所述当前业务访问失败率和预设访问失败率范围进行对比;其中,所述预设访问失败率范围的两个端点值分别为第一业务访问失败率和第二业务访问失败率,所述第一业务访问失败率小于第二业务访问失败率;
若所述当前业务访问失败率处于所述预设访问失败率范围内,则基于所述当前业务访问失败率获得第一业务访问放行率;
将所述第一业务访问放行率作为当前最大放行率放行访问所述数据库的当前访问业务,控制所述当前访问业务的访问率小于或者等于所述当前最大放行率。
本说明书公开了一种调整数据库的业务访问量的***,包括:
第一确定模块,用于确定在访问所述数据库时生成的当前业务访问失败率;
对比模块,用于将所述当前业务访问失败率和预设访问失败率范围进行对比;其中,所述预设访问失败率范围的两个端点值具体为:第一业务访问失败率,第二业务访问失败率;其中,所述第一业务访问失败率小于第二业务访问失败率;
第一获得模块,用于若所述当前业务访问失败率处于所述预设访问失败率范围内,则基于所述当前业务访问失败率获得第一业务访问放行率;
第一放行模块,用于将所述第一业务访问放行率作为当前最大放行率放行访问所述数据库的当前访问业务,控制所述当前访问业务的访问率小于或者等于所述当前最大放行率。
本说明书公开了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。
本说明书公开了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。
通过本说明书的一个或者多个技术方案,本说明书具有以下有益效果或者优点:
本说明书的一个或者多个实施例公开了一种调整数据库的业务访问量的方法及***,通过确定在访问所述数据库时生成的当前业务访问失败率;然后将所述当前业务访问失败率和预设访问失败率范围进行对比;如果所述当前业务访问失败率处于所述预设访问失败率范围内,则基于所述当前业务访问失败率获得第一业务访问放行率,因此,第一业务访问放行率实际上是和当前业务访问失败率相关的,并且是由当前业务访问失败率获得的业务放行率,能够考虑数据库当前的实际情况确定出第一业务访问放行率,故而将所述第一业务访问放行率作为当前最大放行率放行访问所述数据库的当前访问业务,并控制所述当前访问业务的访问率小于或者等于所述当前最大放行率,能够根据数据库的当前业务访问失败率动态调整对数据库的访问,防止数据库负载过高或不稳定时引发的“雪崩”效应,能够进而极大的缓解了数据库的负载压力,保证数据库访问的可用性。
上述说明仅是本说明书技术方案的概述,为了能够更清楚了解本说明书的技术手段,而可依照说明书的内容予以实施,并且为了让本说明书的上述和其它目的、特征和优点能够更明显易懂,以下特举本说明书的具体实施方式。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本说明书的一个或者多个实施例提供了一种调整数据库的业务访问量的方法,旨在解决或缓解在业务***数据库负载过高或不稳定时引发的“雪崩”效应。业务***数据库至少包括DB数据库、sql数据库、server数据库、oracle数据库等等。
本实施例在访问数据库之前,对当前访问业务实行动态调度,根据数据库访问失败率动态调整数据库的当前业务访问,防止数据库出现问题时引发的“雪崩”效应,并且在数据库恢复后,***也能够恢复业务的正常处理。
下面请参看图1,本实施例的具体实施过程如下:
步骤11,确定在访问所述数据库时生成的当前业务访问失败率。
在具体的实施过程中,当前业务访问失败率统计方法可以有多种,本实施例利用以下两种方式举例:
第一种方式是:按照次数获得当前业务访问总量,然后统计在所述当前业务访问总量内的当前业务访问失败量。然后确定出所述当前业务访问失败量和所述当前业务访问总量的比值,将该比值作为当前业务访问失败率。例如,统计最近1000次的数据库访问中的失败率。
第二种方式是:统计预设时间段内访问数据库的失败率。例如,统计当天8:00-9:00内的访问数据库的失败率。
当然,上述举例是为了说明和解释实施例中的确定当前业务访问失败率的实施过程,除上述举例之外,其他确定当前业务访问失败率的实施过程也应当包含在本发明的保护范围之内。
进一步的,本实施例中的业务访问失败,指的是数据库连接失败,例如主键冲突/数据完整性等等导致的数据库连接失败,并非业务本身的缺陷。
步骤12,将所述当前业务访问失败率和预设访问失败率范围进行对比。
其中,所述预设访问失败率范围有两个端点值,具体为:第一业务访问失败率,第二业务访问失败率;其中,所述第一业务访问失败率小于第二业务访问失败率。例如第一业务访问失败率为20%,第二业务访问失败率为80%。
第一业务访问失败率,第二业务访问失败率可以根据实际情况进行动态调整,例如根据业务访问量记录、数据库的存储量等等进行动态调整。
在本实施例中,预设访问失败率范围是开合的情况,也就是说该范围没有包含端点值的情况。故而将所述当前业务访问失败率和预设访问失败率范围进行对比之后,有三种结果:
第一种结果是:所述当前业务访问失败率小于或等于所述第一业务访问失败率。若所述当前业务访问失败率小于或等于所述第一业务访问失败率,则全部放行所述当前访问业务。
假设所述当前业务访问失败率为x,第一业务访问失败率为20%。则x≤20%,此时,表示当前业务访问成功率较高,数据库能够承载当前访问业务的访问,故而可以全部放行所述当前访问业务对数据库的访问。
第二种结果是:所述当前业务访问失败率大于或等于所述第二业务访问失败率。若所述当前业务访问失败率大于或等于所述第二业务访问失败率,则基于所述第二业务访问失败率,获得第二业务访问放行率;将所述第二业务访问放行率作为所述当前最大放行率放行所述当前访问业务,控制所述当前访问业务的访问率小于或者等于所述当前最大放行率。
在具体的实施过程中,第二业务访问失败率和第二业务访问放行率是相关的,故而,可利用百分百失败率和第二业务访问失败率获得对应的差值,然后将该差值作为第二业务访问放行率。
假设所述当前业务访问失败率为x,第二业务访问失败率为80%。则x≥80%,此时,表示当前业务访问成功率极低,数据库不能够承载当前访问业务的访问,故而只能部分放行所述当前访问业务对数据库的访问。
进一步的,百分百失败率100%-第二业务访问失败率80%=第二业务访问放行率20%。则将第二业务访问放行率20%作为所述当前最大放行率,并将当前访问业务的访问率在控制在20%以下(包含20%)。
作为一种可选的实施例,若所述当前业务访问失败率大于或等于所述第二业务访问失败率,则可以直接将第一业务访问失败率作为第二业务访问放行率,使得所述第二业务访问放行率和所述第一业务访问失败率相同。
作为一种可选的实施例,若当前业务访问失败率大于或等于所述第二业务访问失败率,那么数据库的负载是很高的,在这种情况下,为了避免数据库崩溃,可以对数据库进行扩容,例如增加备用数据库,对当前业务访问量进行分流。可选的,在此之前***会输出提示信息,提示用户是否开启备用数据库。
作为一种可选的实施例,若当前业务访问失败率大于或等于所述第二业务访问失败率,可进一步判断当前业务访问失败率的持续时间,若所述持续时间超过一时间阈值,则可以对数据库进行处理,例如调整数据库的容量,对数据库进行扩容处理等等。
进一步的,若当前业务访问失败率大于或等于所述第二业务访问失败率,可进一步判断当前业务访问失败率的出现次数,若出现次数超过预设次数,则可以对数据库进行处理,例如调整数据库的容量,对数据库进行扩容处理等等。
以上便是确定第二业务访问失败率的具体实施过程。
进一步的,在具体的访问过程中,可根据第二业务访问放行率计算出对应的业务访问放行量,然后将第二业务访问放行率对应的业务访问放行量作为业务访问最大放行量放行当前访问业务,控制当前访问业务的访问量在业务访问最大放行量以下(包含业务访问最大放行量)即可,进而实现对数据库的访问。
第三种结果是:所述当前业务访问失败率处于所述预设访问失败率范围内。也就是说,当前业务访问失败率大于第一业务访问失败率,但是小于第二业务访问失败率。20%<x<80%。
若是这样的情况,则执行下面的步骤。
步骤13,若所述当前业务访问失败率处于所述预设访问失败率范围内,则基于所述当前业务访问失败率获得第一业务访问放行率。
在具体的实施过程中,当前业务访问失败率和当前业务访问成功率是相反的,如果当前访问失败率为30%,那么则表示当前业务访问成功率是70%。
故而,在本实施例中,可利用百分百失败率和所述当前业务访问失败率相减,获得一差值;将所述差值作为所述第一业务访问放行率。
进一步的,百分百失败率100%-当前业务访问失败率30%=第一业务访问放行率70%。则将第一业务访问放行率70%作为所述当前最大放行率,并将当前访问业务的访问率在控制在70%以下(包含70%)。
步骤14,将所述第一业务访问放行率作为当前最大放行率放行访问所述数据库的当前访问业务,控制所述当前访问业务的访问率小于或者等于所述当前最大放行率。
在具体的访问过程中,可根据第一业务访问放行率计算出对应的业务访问放行量,然后将第一业务访问放行率对应的业务访问放行量作为业务访问最大放行量放行当前访问业务,控制当前访问业务的访问量在业务访问最大放行量以下(包含业务访问最大放行量)即可,进而实现对数据库的访问。
而作为一种可选的实施例,若所述当前业务访问失败率等于所述第一业务访问失败率,则基于所述当前业务访问失败率获得所述第一业务访问放行率;然后将所述第一业务访问放行率作为当前最大放行率放行访问所述数据库的当前访问业务,控制所述当前访问业务的访问率小于或者等于所述当前最大放行率。也就是说,此处的实施方式和当前业务访问失败率处于预设访问失败率范围内的实施方式是类似的,故而,在本实施例中,可利用百分百失败率和所述当前业务访问失败率相减,获得一差值;将所述差值作为所述第一业务访问放行率。进一步的,百分百失败率100%-当前业务访问失败率30%=第一业务访问放行率70%。则将第一业务访问放行率70%作为所述当前最大放行率,并将当前访问业务的访问率在控制在70%以下(包含70%)。
作为一种可选的实施例,若所述当前业务访问失败率等于所述第二业务访问失败率,则基于所述当前业务访问失败率获得所述第一业务访问放行率;将所述第一业务访问放行率作为当前最大放行率放行访问所述数据库的当前访问业务,控制所述当前访问业务的访问率小于或者等于所述当前最大放行率。
在具体的实施过程中,假设第二业务访问率为80%,那么若当前业务访问失败率=80%,则可利用百分百失败率和所述当前业务访问失败率相减,获得一差值;将所述差值作为所述第一业务访问放行率。进一步的,百分百失败率100%-当前业务访问失败率80%=第一业务访问放行率20%。然后将20%作为所述当前最大放行率,并将当前访问业务的访问率在控制在20%以下(包含70%)。
以上便是本说明书的一个或者多个实施例调整数据库的业务访问量的方法的实施过程。
下面以具体的示例进行举例,对上述实施过程进行描述。
假设我们设置第一业务访问失败率a为20%,第二业务访问失败率b为80%。
当数据库的当前业务访问失败率c低于或者等于阈值20%时,本实施例对当前访问业务100%放行。
当数据库的当前业务访问失败率c高于或者等于阈值80%时,本实施例将以1-b即20%的概率作为最大放行率放行。
当数据库的当前业务访问失败率c介于a,b之间时,本实施例将以1-c的概率放行,比如数据库的当前业务访问失败为60%,那么本实施例将以40%的概率作为最大放行率对当前访问业务进行放行。
通过执行上述一个或者多个实施例的过程,数据库可用性逐渐恢复,数据库的访问失败率也会逐渐降低,业务放行的概率提高,最终业务完全恢复。
上述一个或者多个实施例引入了自适应的数据库访问策略,能够根据数据库的当前业务访问失败率动态调整对数据库的访问,防止数据库出现问题时引发的“雪崩”效应,并且在数据库恢复后,***也能够恢复业务的正常处理。
通过上述一个或者多个实施例的描述可知,上述一个或者多个实施例的调整数据库的业务访问量的方法,通过确定在访问所述数据库时生成的当前业务访问失败率;然后将所述当前业务访问失败率和预设访问失败率范围进行对比;如果所述当前业务访问失败率处于所述预设访问失败率范围内,则基于所述当前业务访问失败率获得第一业务访问放行率,因此,第一业务访问放行率实际上是和当前业务访问失败率相关的,并且是由当前业务访问失败率获得的业务放行率,能够考虑数据库当前的实际情况确定出第一业务访问放行率,故而将所述第一业务访问放行率作为当前最大放行率放行访问所述数据库的当前访问业务,并控制所述当前访问业务的访问率小于或者等于所述当前最大放行率,能够根据数据库的当前业务访问失败率动态调整对数据库的访问,防止数据库负载过高或不稳定时引发的“雪崩”效应,能够进而极大的缓解了数据库的负载压力,保证数据库访问的可用性。
基于统一发明构思,下面的实施例介绍了一种调整数据库的业务访问量的***,参看图2,包括:
第一确定模块21,用于确定在访问所述数据库时生成的当前业务访问失败率;
对比模块22,用于将所述当前业务访问失败率和预设访问失败率范围进行对比;其中,所述预设访问失败率范围的两个端点值具体为:第一业务访问失败率,第二业务访问失败率;其中,所述第一业务访问失败率小于第二业务访问失败率;
第一获得模块23,用于若所述当前业务访问失败率处于所述预设访问失败率范围内,则基于所述当前业务访问失败率获得第一业务访问放行率;
第一放行模块24,用于将所述第一业务访问放行率作为当前最大放行率放行访问所述数据库的当前访问业务,控制所述当前访问业务的访问率小于或者等于所述当前最大放行率。
作为一种可选的实施例,所述***还包括:
第二放行模块,用于若所述当前业务访问失败率小于等于所述第一业务访问失败率,则全部放行所述当前访问业务。
作为一种可选的实施例,所述***还包括:
第二获得模块,用于若所述当前业务访问失败率大于等于所述第二业务访问失败率,则基于所述第二业务访问失败率,获得第二业务访问放行率;
第二确定模块,用于将所述第二业务访问放行率作为所述当前最大放行率放行所述当前访问业务,控制所述当前访问业务的访问率小于或者等于所述当前最大放行率。
作为一种可选的实施例,所述第二业务访问放行率和所述第一业务访问失败率相同。
作为一种可选的实施例,所述第一获得模块23,具体包括:
减法模块,用于利用百分百失败率和所述当前业务访问失败率相减,获得一差值;
第三确定模块,用于将所述差值作为所述第一业务访问放行率。
作为一种可选的实施例,所述***还包括:
第三获得模块,用于若所述当前业务访问失败率等于所述第一业务访问失败率,则基于所述当前业务访问失败率获得所述第一业务访问放行率;
所述第一放行模块,具体用于将所述第一业务访问放行率作为当前最大放行率放行访问所述数据库的当前访问业务,控制所述当前访问业务的访问率小于或者等于所述当前最大放行率。
作为一种可选的实施例,所述***还包括:
第四获得模块,用于若所述当前业务访问失败率等于所述第二业务访问失败率,则基于所述当前业务访问失败率获得所述第一业务访问放行率;
所述第一放行模块,具体用于将所述第一业务访问放行率作为当前最大放行率放行访问所述数据库的当前访问业务,控制所述当前访问业务的访问率小于或者等于所述当前最大放行率。
基于与前述实施例中同样的说明书构思,本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前文任一所述方法的步骤。
基于与前述实施例中同样的发明构思,本说明书的实施例还提供一种计算机设备,如图3所示,包括存储器304、处理器302及存储在存储器304上并可在处理器302上运行的计算机程序,所述处理器302执行所述程序时实现前文任一所述方法的步骤。
其中,在图3中,总线架构(用总线300来代表),总线300可以包括任意数量的互联的总线和桥,总线300将包括由处理器302代表的一个或多个处理器和存储器304代表的存储器的各种电路链接在一起。总线300还可以将诸如***设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口305在总线300和接收器301和发送器303之间提供接口。接收器301和发送器303可以是同一个元件,即收发机,提供用于在传输介质上与各种其他装置通信的单元。处理器302负责管理总线300和通常的处理,而存储器304可以被用于存储处理器302在执行操作时所使用的数据。
通过本说明书的一个或者多个实施例,本说明书具有以下有益效果或者优点:
本说明书的一个或者多个实施例公开了一种调整数据库的业务访问量的方法及***,通过确定在访问所述数据库时生成的当前业务访问失败率;然后将所述当前业务访问失败率和预设访问失败率范围进行对比;如果所述当前业务访问失败率处于所述预设访问失败率范围内,则基于所述当前业务访问失败率获得第一业务访问放行率,因此,第一业务访问放行率实际上是和当前业务访问失败率相关的,并且是由当前业务访问失败率获得的业务放行率,能够考虑数据库当前的实际情况确定出第一业务访问放行率,故而将所述第一业务访问放行率作为当前最大放行率放行访问所述数据库的当前访问业务,并控制所述当前访问业务的访问率小于或者等于所述当前最大放行率,能够根据数据库的当前业务访问失败率动态调整对数据库的访问,防止数据库负载过高或不稳定时引发的“雪崩”效应,能够进而极大的缓解了数据库的负载压力,保证数据库访问的可用性。
在此提供的算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与基于在此的示教一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本说明书也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本说明书的内容,并且上面对特定语言所做的描述是为了披露本说明书的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本说明书的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个说明书方面中的一个或多个,在上面对本说明书的示例性实施例的描述中,本说明书的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本说明书要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,说明书方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本说明书的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本说明书的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本说明书的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本说明书实施例的网关、代理服务器、***中的一些或者全部部件的一些或者全部功能。本说明书还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本说明书的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本说明书进行说明而不是对本说明书进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本说明书可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。