基于redis的服务动态降级方法、装置、服务器及存储介质
技术领域
本发明公开了一种基于redis的服务动态降级方法、装置、服务器及存储介质,属于软件工程领域。
背景技术
软件工程领域,常有流量的大范围波动,如电商和游戏行业,在一些商业活动的时候,有大量请求和流量同时涌入,形成流量波峰,流量的剧增对服务器和应用带来巨大冲击,如果不加处理,可能造成服务挂掉,服务器宕机等情况,造成应用不可使用。
常用的服务接口的流量控制策略有分流、降级、限流等。比如事先预警大流量,并提前扩容服务器,增加机器应对流量剧增,但是这种方法成本较高,开销较大,增加了运维成本。还有的系统采用配置化的限流策略,让用户请求排队处理或直接返回错误或者默认数据,这种方法很好的应对了流量剧增,但是需要人工配置并及时调整,如果调整不及时会带来不可预料的问题。
发明内容
本发明公开了一种基于redis的服务动态降级方法、装置、服务器及存储介质,用于在流量剧增时自动执行流量监控及服务动态降级的策略,保证服务正常运行。
本发明实施例的第一方面,提供了一种基于redis的服务动态降级方法,具体采用了如下技术方案:
S1、预设监控周期,在redis数据库中为每个服务接口建立一个string类型的key,用所述string类型的key记录各个服务接口在所述预设监控周期内的访问量;
S2、为每个服务接口设置在所述预设监控周期内的请求量阈值;
S3、根据所述访问量及所述请求量阈值计算各个服务接口的请求拒绝率;
S4、根据所述请求拒绝率对各个服务接口做对应的服务动态降级策略处理。
在上述技术方案中,步骤S1中所述用所述string类型的key记录每个服务接口在所述预设监控周期内的访问量的具体过程为:将所述string类型的key的过期时间设置为所述预设监控周期,单个服务接口每接收到一次用户请求都将所述服务接口对应的所述string类型key的键值加1。
在上述技术方案中,步骤S2中所述请求量阈值,是基于当前的服务资源和服务接口的具体处理性能综合指定,所述请求量阈值的计算方式为:统计在指定的天数内,每个接口平均每天响应时间在设定参考时间内的请求数,继而计算各个服务接口在所述预设监控周期内的请求数,根据所述预设监控周期内的请求数设置请求量阈值;将所述请求量阈值以hash类型的key存储在redis数据库中,并且可实时修改。
在上述技术方案中,步骤S3中所述根据所述访问量及所述请求量阈值计算各个服务接口的请求拒绝率之前还包括:按所述预设监控周期扫描各个接口中所述string类型的key,获取各个服务接口在当前监控周期内的访问量,同时查询各个服务接口设置的请求量阈值。
在上述技术方案中,所述步骤S3的具体过程为:设服务接口总数为n,i=1,2,…,n,第i个服务接口在当前监控周期内的访问量为Mi,所述服务接口设置的请求量阈值为Ni,则第i个服务接口的请求拒绝率Ri为:
其中,Ri保留指定小数位数,并将Ri保存至redis数据库的一个hash类型的拒绝率key中。
在上述技术方案中,步骤S4中所述根据所述请求拒绝率对各个服务接口做对应的服务动态降级策略处理之前还包括:对单个服务接口,每次请求到达时,都随机生成一个取值为0到1之间且指定精度的浮点数,所述指定精度与所述请求拒绝率保留的指定小数位数数值相同。
在上述技术方案中,所述步骤S4的具体过程为:对某一服务接口,若所述请求拒绝率小于等于零,摒弃服务降级策略;若所述请求拒绝率大于零,比较所述请求拒绝率与所述浮点数:
若所述请求拒绝率大于所述浮点数,触发服务降级策略,直接返回默认值;
若所述请求拒绝率小于等于所述浮点数,则正常进行业务请求的处理。
本发明实施例的第二方面,提供了一种基于redis的服务动态降级装置,具体包括如下模块:
记录模块:预设监控周期,在redis数据库中为每个服务接口建立一个string类型的key,用所述string类型的key记录各个服务接口在所述预设监控周期内的访问量;
设置模块:为每个服务接口设置在所述预设监控周期内的请求量阈值;
计算模块:根据所述访问量及所述请求量阈值计算各个服务接口的请求拒绝率;
处理模块:根据所述请求拒绝率对各个服务接口做对应的服务动态降级策略处理。
本发明实施例的第三方面,提供了一种服务器,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例第一方面所述方法的步骤。
本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。
本发明带来的有益效果是:
本发明提出一种基于redis的服务动态降级方法、装置、服务器及存储介质,在redis数据库中预警最近的流量请求访问,并根据预设置的服务接口请求量阈值,实时计算该服务接口的访问量是否触发服务降级策略,实现了自动的流量监控与服务动态降级,不同的流量增加采用不同的降级策略,并精确在每个服务接口级别。通过计算各个服务接口的降级比率,灵活动态的应对了不同流量涌入时的服务降级策略,保证了服务的正常运行,同时当流量波峰过去后,该套系统自动能摒弃服务降级策略。
本发明通过使用redis数据库结合服务接口级别的实时访问量,并根据一定策略动态的降级、恢复接口的服务策略,保证了在流量剧增时服务和接口的健康,提高了系统健壮性。
附图说明
为了更清楚地说明本发明的技术方案,下面将对本发明技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于redis的服务动态降级方法流程示意图;
图2为本发明实施例提供的基于redis的服务动态降级装置结构示意图;
图3位本发明实施例提供的服务器结构示意图。
具体实施方式
本发明提出一种基于redis的服务动态降级方法、装置、服务器及存储介质,用于在流量剧增时自动执行流量监控及服务动态降级的策略,保证服务正常运行。
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路、以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。
下面对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参见图1,本发明提出了一种基于redis的服务动态降级方法,该方法包括以下步骤:
S1、预设监控周期,在redis数据库中为每个服务接口建立一个string类型的key,用所述string类型的key记录各个服务接口在所述预设监控周期内的访问量;
可选的,步骤S1中所述用所述string类型的key记录每个服务接口在预设监控周期内的访问量的具体过程为:将所述string类型的key的过期时间设置为所述预设监控周期,单个服务接口每接收到一次用户请求都将所述服务接口对应的所述string类型key的键值加1。
比如,假设所述预设监控周期为一分钟,所述string类型的key的过期时间则为60秒,初始化该key的键值为0,在最近的一分钟内,某个服务接口A每接收到一次用户请求都将该服务接口对应的key的键值加1,一分钟后扫描这个key,这个key的键值即为这个服务接口在一分钟内的访问量。
S2、为每个服务接口设置在所述预设监控周期内的请求量阈值;
可选的,步骤S2中所述请求量阈值,是基于当前的服务资源和服务接口的具体处理性能综合指定,所述请求量阈值的计算方式为:统计在指定的天数内,每个接口平均每天响应时间在设定参考时间内的请求数,继而计算各个服务接口在所述预设监控周期内的请求数,根据所述预设监控周期内的请求数设置请求量阈值;将所述请求量阈值以hash类型的key存储在redis数据库中,并且可实时修改。
统计在指定的天数内,每个接口平均每天响应时间在设定参考时间内的请求数,可以根据日志等手段获得,所述参考时间根据应用场景需求设定,通常为2秒。例如,假设预设监控周期为1分钟,对某一服务接口A,根据日志统计该服务接口在m天内每天响应时间在2秒内的请求数T(j),j=1,2,…,m,计算平均每天响应时间在2秒内的请求数则一分钟内响应时间在2秒内的请求数为请求量阈值即设置为
S3、根据所述访问量及所述请求量阈值计算各个服务接口的请求拒绝率;
可选的,步骤S3中所述根据所述访问量及所述请求量阈值计算各个服务接口的请求拒绝率之前还包括:按所述预设监控周期扫描各个接口中所述string类型的key,获取各个服务接口在当前监控周期内的访问量,同时查询各个服务接口设置的请求量阈值。
可选的,所述步骤S3的具体过程为:设服务接口总数为n,i=1,2,…,n,第i个服务接口在当前监控周期内的访问量为Mi,所述服务接口设置的请求量阈值为Ni,则第i个服务接口的请求拒绝率Ri为:
其中,Ri保留指定小数位数,并将Ri保存至redis数据库的一个hash类型的拒绝率key中。
所述指定小数位数为保存请求拒绝率时按需求保留的小数位数,比如8位。
S4、根据所述请求拒绝率对各个服务接口做对应的服务动态降级策略处理。
可选的,步骤S4中所述根据所述请求拒绝率对各个服务接口做对应的服务动态降级策略处理之前还包括:对单个服务接口,每次请求到达时,都随机生成一个取值为0到1之间且指定精度的浮点数,所述指定精度与所述请求拒绝率保留的指定小数位数数值相同。
可选的,所述步骤S4的具体过程为:对某一服务接口,若所述请求拒绝率小于等于零,摒弃服务降级策略;若所述请求拒绝率大于零,比较所述请求拒绝率与所述浮点数:
若所述请求拒绝率大于所述浮点数,触发服务降级策略,直接返回默认值;
若所述请求拒绝率小于等于所述浮点数,则正常进行业务请求的处理。
所述指定精度的浮点数与所述请求拒绝率应保留相同的小数位数,比如都保留8位,以便比较。当请求拒绝率为负数或零时,请求量较小,不触发服务降级策略。请求拒绝率即为服务降级的等级,请求拒绝率较小则流量增加少,采用弱降级策略,请求拒绝率大则流量剧增,采用强降级策略,即不同的流量增加采用不同的降级策略,且随着流量波峰过后,便不采用降级策略,恢复正常。所述返回默认值可以是多种方式,如推荐界面直接返回默认内容,抢购页面直接返回服务忙,请稍后再试等等类似的提示。
请参见图2,本发明提供了一种基于redis的服务动态降级装置,该装置包括以下模块:
记录模块201:预设监控周期,在redis数据库中为每个服务接口建立一个string类型的key,用所述string类型的key记录各个服务接口在所述预设监控周期内的访问量;
设置模块202:为每个服务接口设置在所述预设监控周期内的请求量阈值;
计算模块203:根据所述访问量及所述请求量阈值计算各个服务接口的请求拒绝率;
处理模块204:根据所述请求拒绝率对各个服务接口做对应的服务动态降级策略处理。
请参见图3,本发明实施例提供的一种服务器结构的示意图。所述服务器,为提供计算服务的设备,通常指具有较高计算能力,通过网络提供给多个用户使用的计算机。如图3所示,该实施例的服务器3包括:存储器310、处理器320以及系统总线330,所述存储器310包括存储其上的可运行的程序3101,本领域技术人员可以理解,图3中示出的终端设备结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图3对服务器的各个构成部件进行具体的介绍:
存储器310可用于存储软件程序以及模块,处理器320通过运行存储在存储器310的软件程序以及模块,从而执行终端的各种功能应用以及数据处理。存储器310可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器310可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
在存储器310上包含数据同步方法的可运行程序3101,所述可运行程序3101可以被分割成一个或多个模块/单元,所述一个或多个模块/单元被存储在所述存储器310中,并由处理器320执行,以完成通知的传递并获取通知实现过程,所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序3101在所述服务器3中的执行过程。例如,所述计算机程序3101可以被分割为记录模块、设置模块、计算模块、处理模块。
处理器320是服务器的控制中心,利用各种接口和线路连接整个终端设备的各个部分,通过运行或执行存储在存储器310内的软件程序和/或模块,以及调用存储在存储器310内的数据,执行终端的各种功能和处理数据,从而对终端进行整体监控。可选的,处理器320可包括一个或多个处理单元;优选的,处理器320可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器320中。
系统总线320用来连接计算机内部各功能部件,可以传送数据信息、地址信息、控制信息,其种类可以是例如PCI总线、ISA总线、VESA总线等。处理器320的指令通过总线传递至存储器310,存储器310反馈数据给处理器320,系统总线330负责处理器320与存储器310之间的数据、指令交互。当然系统总线330还可以接入其他设备,例如网络接口、显示设备等。
所述服务器应至少包括CPU、芯片组、内存、磁盘系统等,其他构成部件在此不再赘述。
在本发明实施例中,所述处理器320执行所述计算机程序3101时可以实现上述基于redis的服务动态降级方法。该终端所包括的处理器320执行的可运行程序具体为:一种基于redis的服务动态降级方法,具体步骤包括:
S1、预设监控周期,在redis数据库中为每个服务接口建立一个string类型的key,用所述string类型的key记录各个服务接口在所述预设监控周期内的访问量;
S2、为每个服务接口设置在所述预设监控周期内的请求量阈值;
S3、根据所述访问量及所述请求量阈值计算各个服务接口的请求拒绝率;
S4、根据所述请求拒绝率对各个服务接口做对应的服务动态降级策略处理。
优选的,步骤S1中所述用所述string类型的key记录每个服务接口在所述预设监控周期内的访问量的具体过程为:将所述string类型的key的过期时间设置为所述预设监控周期,单个服务接口每接收到一次用户请求都将所述服务接口对应的所述string类型key的键值加1;
优选的,步骤S2中所述请求量阈值,是基于当前的服务资源和服务接口的具体处理性能综合指定,所述请求量阈值的计算方式为:统计在指定的天数内,每个接口平均每天响应时间在设定参考时间内的请求数,继而计算各个服务接口在所述预设监控周期内的请求数,根据所述预设监控周期内的请求数设置请求量阈值;将所述请求量阈值以hash类型的key存储在redis数据库中,并且可实时修改。
优选的,步骤S3中所述根据所述访问量及所述请求量阈值计算各个服务接口的请求拒绝率之前还包括:按所述预设监控周期扫描各个接口中所述string类型的key,获取各个服务接口在当前监控周期内的访问量,同时查询各个服务接口设置的请求量阈值;
优选的,所述步骤S3的具体过程为:设服务接口总数为n,i=1,2,…,n,第i个服务接口在当前监控周期内的访问量为Mi,所述服务接口设置的请求量阈值为Ni,则第i个服务接口的请求拒绝率Ri为:
其中,Ri保留指定小数位数,并将Ri保存至redis数据库的一个hash类型的拒绝率key中。
优选的,步骤S4中所述根据所述请求拒绝率对各个服务接口做对应的服务动态降级策略处理之前还包括:对单个服务接口,每次请求到达时,都随机生成一个取值为0到1之间且指定精度的浮点数,所述指定精度与所述请求拒绝率保留的指定小数位数数值相同。
优选的,所述步骤S4的具体过程为:对某一服务接口,若所述请求拒绝率小于等于零,摒弃服务降级策略;若所述请求拒绝率大于零,比较所述请求拒绝率与所述浮点数:
若所述请求拒绝率大于所述浮点数,触发服务降级策略,直接返回默认值;
若所述请求拒绝率小于等于所述浮点数,则正常进行业务请求的处理。
本发明还提供一种计算机可读存储介质,其中,该计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现实施例一中记载的redis满载时键的复合过期方法的部分或全部步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,没有详述或记载的部分,可以参考前述方法实施例中的对应过程,在此不再赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实施例的模块、单元和/或方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本申请所提供的实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一个计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。