CN111866156B - 熔断处理方法及装置 - Google Patents
熔断处理方法及装置 Download PDFInfo
- Publication number
- CN111866156B CN111866156B CN202010732253.3A CN202010732253A CN111866156B CN 111866156 B CN111866156 B CN 111866156B CN 202010732253 A CN202010732253 A CN 202010732253A CN 111866156 B CN111866156 B CN 111866156B
- Authority
- CN
- China
- Prior art keywords
- request
- semaphore
- array
- abnormal
- statistics array
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/143—Termination or inactivation of sessions, e.g. event-controlled end of session
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/14—Network analysis or design
- H04L41/142—Network analysis or design using statistical or mathematical methods
Abstract
本申请实施例提供一种熔断处理方法及装置,该方法包括:在客户端向服务器发送请求时,获取用于调用请求的方法以及方法对应的至少一个参数值组,参数值组包括至少一个参数值。针对参数值组,生成方法和参数值组对应的第一组合,其中,第一组合映射有成功统计数组和异常统计数组。获取请求结果,根据请求结果更新第一组合映射的成功统计数组和异常统计数组。根据成功统计数组和异常统计数组,确定客户端的熔断标识是否设置为打开。通过针对参数值组,生成方法和参数值组对应的成功统计数组和异常统计数组,从而可以基于参数值确定是否熔断,从而避免了客户端长时间处于熔断状态。
Description
技术领域
本申请实施例涉及计算机技术,尤其涉及一种熔断处理方法及装置。
背景技术
在客户端向服务端发送请求时,若客户端确定服务端处于一种不可用的状态,则客户端应该进行熔断,从而停止向服务端发送请求。
目前,现有技术在实现熔断时,通常是针对用于实现请求的每个方法,增加用于统计成功次数和异常次数的统计对象,在请求次数超过一定的次数,并且请求异常的比例超过一定的阈值时,客户端会进入熔断状态。
然而,基于方法实现熔断会导致客户端的熔断缺乏针对性,从而可能导致客户端长时间的处于熔断状态。
发明内容
本申请实施例提供一种熔断处理方法及装置,以克服客户端长时间的处于熔断状态的问题。
第一方面,本申请实施例提供一种熔断处理方法,包括:
在客户端向服务器发送请求时,获取用于调用所述请求的方法以及所述方法对应的至少一个参数值组,所述参数值组包括至少一个参数值;
针对所述参数值组,生成所述方法和所述参数值组对应的第一组合,其中,所述第一组合映射有成功统计数组和异常统计数组,所述成功统计数组用于指示各个周期的请求成功次数,所述异常统计数组用于指示各个周期的请求异常次数;
获取请求结果,根据所述请求结果更新所述第一组合映射的成功统计数组和所述异常统计数组;
根据所述成功统计数组和所述异常统计数组,确定客户端的熔断标识是否设置为打开。
在一种可能的设计中,所述根据所述请求结果更新所述成功统计数组和所述异常统计数组,包括:
确定当前周期所对应的所述成功统计数组的第一下标和当前周期所对应的所述异常统计数组的第二下标;
若所述请求结果指示所述请求成功,则将所述成功统计数组中的第一下标对应的元素加1,以及,
若所述请求结果指示所示请求异常,则将所述异常统计数组中的第二下标对应的元素加1。
在一种可能的设计中,所述根据所述成功统计数组和所述异常统计数组,确定客户端的熔断标识是否设置为打开,包括:
在新的周期开始之前,根据所述成功统计数组和所述异常统计数组,得到异常比例;
若所述异常比例大于预设比例,并且所述请求异常次数大于预设次数,则将所述客户端的熔断标识设置为打开。
在一种可能的设计中,所述根据所述成功统计数组和所述异常统计数组,得到异常比例,包括:
根据所述成功统计数组和所述异常统计数组,使用动量momentum算法得到异常比例。
在一种可能的设计中,所述根据所述成功统计数组和异常统计数组,得到异常比例,包括:
根据所述成功统计数组和异常统计数组中,每个周期的请求成功次数和请求异常次数,得到每个周期的子异常比例;
将所述每个周期的子异常比例的平均值,确定为所述异常比例。
在一种可能的设计中,所述获取用于调用所述请求的方法以及所述方法对应的至少一个参数值组,包括:
拦截用于调用所述请求的方法,并根据所述方法上的注解,获取所述方法对应的至少一个参数;
获取每个所述参数的参数值,根据每个所述参数的参数值的组合,得到至少一个参数值组。
在一种可能的设计中,所述方法还包括:
在所述客户端向所述服务器发送所述请求之前,判断所述熔断标识是否设置为打开;
若是,则根据熔断策略尝试发送所述请求;
若否,则直接向所述服务器发送所述请求。
在一种可能的设计中,所述熔断策略为:
判断尝试次数是否小于预设阈值,其中,所述尝试次数在新的周期开始之前重置为0;
若是,则向所述服务器发送所述请求,在所述请求异常时,将所述尝试次数加1,在所述请求正常时,不更改所述尝试次数;
若否,则停止向所述服务器发送所述请求。
在一种可能的设计中,所述熔断策略为:
针对所述第一组合,设置第一信号量、第二信号量和扩张标识,其中,所述第一信号量和所述第二信号量的初始值为1,所述扩张标识的初始值为真,所述第二信号量用于表示所述第一信号量的总数量;
获取所述第一信号量;
若所述第一信号量小于等于0,则停止向所述服务器发送请求;
若所述第一信号量大于0,则获取所述第一信号量,并向服务器发送所述请求;
判断所述请求是否成功,若所述请求成功,则执行扩张信号量操作,若所述请求失败,则执行缩减信号量操作。
在一种可能的设计中,所述扩张信号量操作包括:
若所述扩张标识为真,则释放两个所述第一信号量,以及释放一个所述第二信号量;
若所述扩张标识为假,则释放一个所述第一信号量;以及
所述缩减信号量操作,包括:
将所述扩张标识设置为假,并清空所述第一信号量的值V,以及获取V+1个所述第二信号量,其中,所述V为大于等于0的整数;
若所述第二信号量为0,则释放一个所述第一信号量,释放一个所述第二信号量,并将所述扩张标识设置为真。
第二方面,本申请实施例提供一种熔断处理装置,包括:
获取模块,用于在客户端向服务器发送请求时,获取用于调用所述请求的装置以及所述装置对应的至少一个参数值组,所述参数值组包括至少一个参数值;
生成模块,用于针对所述参数值组,生成所述装置和所述参数值组对应的第一组合,其中,所述第一组合映射有成功统计数组和异常统计数组,所述成功统计数组用于指示各个周期的请求成功次数,所述异常统计数组用于指示各个周期的请求异常次数;
处理模块,用于获取请求结果,根据所述请求结果更新所述第一组合映射的成功统计数组和所述异常统计数组;
所述处理模块,还用于根据所述成功统计数组和所述异常统计数组,确定客户端的熔断标识是否设置为打开。
在一种可能的设计中,所述处理模块具体用于:
确定当前周期所对应的所述成功统计数组的第一下标和当前周期所对应的所述异常统计数组的第二下标;
若所述请求结果指示所述请求成功,则将所述成功统计数组中的第一下标对应的元素加1,以及,
若所述请求结果指示所示请求异常,则将所述异常统计数组中的第二下标对应的元素加1。
在一种可能的设计中,所述处理模块具体用于:
在新的周期开始之前,根据所述成功统计数组和所述异常统计数组,得到异常比例;
若所述异常比例大于预设比例,并且所述请求异常次数大于预设次数,则将所述客户端的熔断标识设置为打开。
在一种可能的设计中,所述处理模块具体用于:
根据所述成功统计数组和所述异常统计数组,使用动量momentum算法得到异常比例。
在一种可能的设计中,所述处理模块具体用于:
根据所述成功统计数组和异常统计数组中,每个周期的请求成功次数和请求异常次数,得到每个周期的子异常比例;
将所述每个周期的子异常比例的平均值,确定为所述异常比例。
在一种可能的设计中,所述获取模块具体用于:
拦截用于调用所述请求的装置,并根据所述装置上的注解,获取所述装置对应的至少一个参数;
获取每个所述参数的参数值,根据每个所述参数的参数值的组合,得到至少一个参数值组。
在一种可能的设计中,所述处理模块还用于:
在所述客户端向所述服务器发送所述请求之前,判断所述熔断标识是否设置为打开;
若是,则根据熔断策略尝试发送所述请求;
若否,则直接向所述服务器发送所述请求。
在一种可能的设计中,所述熔断策略为:
判断尝试次数是否小于预设阈值,其中,所述尝试次数在新的周期开始之前重置为0;
若是,则向所述服务器发送所述请求,在所述请求异常时,将所述尝试次数加1,在所述请求正常时,不更改所述尝试次数;
若否,则停止向所述服务器发送所述请求。
在一种可能的设计中,所述熔断策略为:
针对所述第一组合,设置第一信号量、第二信号量和扩张标识,其中,所述第一信号量和所述第二信号量的初始值为1,所述扩张标识的初始值为真,所述第二信号量用于表示所述第一信号量的总数量;
获取所述第一信号量;
若所述第一信号量小于等于0,则停止向所述服务器发送请求;
若所述第一信号量大于0,则获取所述第一信号量,并向服务器发送所述请求;
判断所述请求是否成功,若所述请求成功,则执行扩张信号量操作,若所述请求失败,则执行缩减信号量操作。
在一种可能的设计中,所述扩张信号量操作包括:
若所述扩张标识为真,则释放两个所述第一信号量,以及释放一个所述第二信号量;
若所述扩张标识为假,则释放一个所述第一信号量;以及
所述缩减信号量操作,包括:
将所述扩张标识设置为假,并清空所述第一信号量的值V,以及获取V+1个所述第二信号量,其中,所述V为大于等于0的整数;
若所述第二信号量为0,则释放一个所述第一信号量,释放一个所述第二信号量,并将所述扩张标识设置为真。
第三方面,本申请实施例提供一种熔断处理设备,包括:
存储器,用于存储程序;
处理器,用于执行所述存储器存储的所述程序,当所述程序被执行时,所述处理器用于执行如上第一方面以及第一方面各种可能的设计中任一所述的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如上第一方面以及第一方面各种可能的设计中任一所述的方法。
本申请实施例提供一种熔断处理方法及装置,该方法包括:在客户端向服务器发送请求时,获取用于调用请求的方法以及方法对应的至少一个参数值组,参数值组包括至少一个参数值。针对参数值组,生成方法和参数值组对应的第一组合,其中,第一组合映射有成功统计数组和异常统计数组,成功统计数组用于指示各个周期的请求成功次数,异常统计数组用于指示各个周期的请求异常次数。获取请求结果,根据请求结果更新第一组合映射的成功统计数组和异常统计数组。根据成功统计数组和异常统计数组,确定客户端的熔断标识是否设置为打开。通过针对参数值组,生成方法和参数值组对应的成功统计数组和异常统计数组,从而可以针对性的对各个参数值进行成功次数和异常次数的统计,因此可以基于参数值确定是否熔断,从而避免了客户端长时间处于熔断状态。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的熔断处理方法的系统示意图;
图2为本申请其中一实施例提供的熔断处理方法的流程图;
图3为本申请另一实施例提供的熔断处理方法的流程图;
图4为本申请实施例提供的逻辑下标的一种实现示意图;
图5为本申请实施例提供的逻辑下标的另一种实现示意图;
图6为本申请又一实施例提供的熔断处理方法的流程图;
图7为本申请实施例提供的熔断处理装置的结构示意图;
图8为本申请实施例提供的熔断处理设备的硬件结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的熔断处理方法的系统示意图。如图1所示,包括:服务器101以及客户端102。
其中客户端102与服务器101进行交互,其中交互的方式例如可以通过有线网络,该有线网络例如可以包括同轴电缆、双绞线和光纤等,其中交互的方式还例如可以是无线网络,该无线网络可以是2G网络、3G网络、4G网络或者5G网络、无线保真(WirelessFidelity,简称WIFI)网络等。本申请实施例对交互的具体类型或者具体形式并不做限定,只要其能够实现服务器和客户端交互的功能即可。
可选地,客户端102通常运行在用户持有的终端设备上,其中终端设备例如可以是计算机设备、平板电脑或移动电话(或称为“蜂窝”电话)等,终端设备还可以是便携式、袖珍式、手持式、计算机内置的移动装置或设备,此处不做特别限制。
进一步地,客户端102例如可以用于实现相应的逻辑功能、画面展示或者接收用户的触发的操作指令等,本申请实施例对客户端102的具体实现方式不做限制,本领域技术人员可以理解,客户端102的具体实现方式可以根据需要进行设定。
其中,服务器101可以接收客户端102发送的数据或请求等,并进行相关的存储和处理等操作,还可以接收客户端102发送的指令,根据逻辑判断进行相应地处理。服务器101还可以向游戏客户端102发送数据或者发送指令,客户端102进行相关的数据存储、数据处理及指令执行等操作,本申请实施例对游戏服务器101的实现方式不做特别限制。
在本申请中,客户端102可以向服务器101发送请求,服务器101根据客户端102发送的请求进行相应的处理之后,可以向客户端102返回请求结果,其中请求结果例如可以为请求成功,或者还可以为请求异常。
目前,在客户端向服务端发送请求时,若客户端确定服务端处于一种不可用的状态,则客户端应该进行熔断,当客户端熔断时,客户端会停止向服务端发送请求,从而避免客户端的请求进程耗尽。
现有技术在进行客户端的熔断时,通常是基于方法实现的熔断,例如针对用于实现请求的每个方法,增加用于统计成功次数和异常次数的统计对象,当接收到服务器返回的请求成功时,将成功次数加1,当接收到服务器返回的请求异常时,将异常次数加1。
在请求次数超过一定的次数,并且请求异常的比例超过一定的阈值时,客户端会进入熔断状态。
因此,现有技术中是基于方法进行的熔断,可以理解的是,方法可以存在对应的参数,其中,服务器针对一些参数值可能会返回请求成功,针对另一些参数值可能会返回请求异常,然而现有技术中基于方法实现熔断,则会导致无论是针对什么参数值,均对当前方法返回请求异常,从而导致客户端的熔断缺乏针对性,从而可能导致客户端长时间的处于熔断状态。
基于现有技术中的问题,本申请提出了如下技术构思:基于方法对应的请求参数进行熔断,从而能够实现基于某些参数值进行针对性的熔断,避免了客户端频繁的熔断。
下面结合具体的实施例对本申请提供的熔断处理方法进行说明,首先结合图2进行说明,图2为本申请其中一实施例提供的熔断处理方法的流程图,需要说明的是,图2实施例的执行主体为客户端。
如图2所示,该方法包括:
S201、在客户端向服务器发送请求时,获取用于调用请求的方法以及方法对应的至少一个参数值组,参数值组包括至少一个参数值。
在本实施例中,客户端会向服务器发送请求,在一种可能的实现方式中,客户端会通过调用请求的方法,向服务器发送请求,本实施例中的方法可以为编程中的方法,每个方法可以对应各自的参数。
则本实施例可以在客户端向服务器发送请求时,获取用于调用请求的方法,在一种可能的实现方式中,例如可以使用面向切面编程(Aspect Oriented Programming,Aop)拦截调用请求的方法,从而实现对方法的获取。
以及,本实施例中还可以获取方法对应的至少一个参数值组,其中参数值组包括至少一个参数值,在一种可能的实现方式中,例如可以根据方法上的注解,获取所述方法对应的至少一个参数,并且根据各个参数的参数值得到至少一个参数值组,下面举例进行说明:
例如当前存在调用请求的方法为test,该方法对应的参数例如可以为a、b,假设a的取值为集合{1,2}中的任一种,以及假设b的取值为集合{2,3}中的任一种。
在一种可能的实现方式中,例如根据方法上的注解得到当前需要加入熔断的参数为a和b,则基于上述a和b的取值可以得到如下4个参数值组:<a=1,b=2>、<a=1,b=3>、<a=2,b=2>、<a=2,b=3>。
在另一种可能的实现方式中,例如根据方法上的注解得到当前需要加入熔断的参数为a,则基于上述a的取值可以得到如下2个参数值组:<a=1>、<a=2>。
在实际实现过程中,方法的注解可以指示具体需要获取哪几个参数,从而可以根据方法的注解指示的参数对应的参数值,得到至少一个参数值组。
下面结合一个具体的示例对客户端发送的请求进行介绍,例如当前客户端需要获取用户的角色列表,那么客户端可以向服务器发送第一请求,其中,第一请求用于获取用户的角色列表,以及客户端可以通过方法A实现对第一请求的调用。
在一种可能的实现方式中,例如方法A是:A(用户标识,用户游戏分区);
那么客户端在通过方法A实现第一请求之后,可以向服务器发送用户标识和用户游戏分区,以及第一请求,服务器根据第一请求,以及用户标识和用户游戏分区,确定用户的角色列表,并向客户端返回用户的角色列表,以实现对第一请求的处理。
在实际实现过程中,客户端所发送的请求,以及请求对应的方法,和方法中所包括的参数值可以根据实际需求进行选择,本实施例对此不做限制。
S202、针对参数值组,生成方法和参数值组对应的第一组合,其中,第一组合映射有成功统计数组和异常统计数组,成功统计数组用于指示各个周期的请求成功次数,异常统计数组用于指示各个周期的请求异常次数。
在本实施例中,为了实现基于某些参数值进行针对性的熔断,则可以针对每一个参数值组进行请求成功和请求异常的统计。
其中,针对参数值组,可以生成方法和参数值组对应的统计数组,在一种可能的实现方式中,例如可以针对上述的每个参数值组和其对应的方法生成第一组合,该第一组合可以表示为键key,其中生成第一组合的实现方式例如可以为将方法和参数值组对应的数据进行拼接,以生成第一组合;或者还可以将方法和参数值组对应的数据进行拼接之后,再进行哈希处理,以生成第一组合,本实施例对第一组合的具体实现方式不做限制,只要第一组合中包括方法和参数值组即可。
假设继续沿用上述示例:
当前获取了方法test和方法test对应的4个参数值组:<a=1,b=2>、<a=1,b=3>、<a=2,b=2>、<a=2,b=3>,则可以生成如下4个key:
key1:(test、<a=1,b=2>)
key2:(test、<a=1,b=3>)
key3:(test、<a=2,b=2>)
key4:(test、<a=2,b=3>)
其中,每一个key映射有一个成功统计数组和一个异常统计数组,例如以key1为例进行说明,key1例如映射有成功统计数组s,以及映射有异常统计数组e,其余的key的实现方法类似,从而可以生成各个方法和参数值组对应的成功统计数组和异常统计数组。
在本申请的一种可能的实现方式中,可以建立key和成功统计数组、异常统计数组之间的映射关系,例如通过键值对(key-value)的方式建立映射关系,或者还可以通过记录映射关系的方式建立映射关系,只要可以建立第一组合和数组之间的映射关系即可,其具体实现方式可以根据实际需求进行选择。
在本实施例中,可以按照周期统计请求成功次数和请求异常次数,则本实施例中的成功统计数组用于指示各个周期的请求成功次数,异常统计数组用于指示各个周期的请求异常次数。
S203、获取请求结果,根据请求结果更新第一组合映射的成功统计数组和异常统计数组。
其中,客户端会向服务器发送多条请求,则服务器也相应的会向客户端返回多条请求结果,本实施例中可以根据当前接收到的请求结果,实时的更新数组中的数据。
在一种可能的实现方式中,服务器会向客户端返回请求结果,本实施例中,服务器针对同一方法的不同参数值组,可能产生不同的请求结果,因此返回的是第一组合对应的请求结果,即方法和参数值组对应的请求结果,其中请求结果例如可以为请求成功,或者还可以为请求异常。
客户端可以根据请求结果更新第一组合映射的成功统计数组和异常统计数组,例如客户端接收到针对key1的请求成功,其中key1对应的成功统计数组为s,并且假设当前周期key1对应的数组下标为2,则可以将key1对应的成功统计数组中的s[2]加1,从而实现对成功统计数组的更新,其余数组的更新方式类似,此次不再赘述。
基于上述内容可以确定的是,本实施例中的数组中的元素用于指示一个周期内的请求成功次数或者请求异常次数。
在本实施例中,持续对成功统计数组和异常统计数组进行更新,直至当前周期结束,在当前周期结束时,即可以得到当前周期内的方法和参数值组对应的成功次数和异常次数。
S204、根据成功统计数组和异常统计数组,确定客户端的熔断标识是否设置为打开。
本实施例中的成功统计数组用于指示各个周期内的请求成功次数,异常统计数组用于指示各个周期内的请求异常次数,则可以根据成功统计数组和异常统计数组,得到请求次数和异常比例,从而根据请求次数和异常比例,确定客户端的熔断标识是否设置为打开,当客户端的熔断标识设置为打开时,客户端进入熔断状态。
本申请实施例提供的熔断处理方法,包括:在客户端向服务器发送请求时,获取用于调用请求的方法以及方法对应的至少一个参数值组,参数值组包括至少一个参数值。针对参数值组,生成方法和参数值组对应的第一组合,其中,第一组合映射有成功统计数组和异常统计数组,成功统计数组用于指示各个周期的请求成功次数,异常统计数组用于指示各个周期的请求异常次数。获取请求结果,根据请求结果更新第一组合映射的成功统计数组和异常统计数组。根据成功统计数组和异常统计数组,确定客户端的熔断标识是否设置为打开。通过针对参数值组,生成方法和参数值组对应的成功统计数组和异常统计数组,从而可以针对性的对各个参数值进行成功次数和异常次数的统计,因此可以基于参数值确定是否熔断,从而避免了客户端长时间处于熔断状态。
在上述实施例的基础上,下面结合一个实施例对本申请提供的熔断处理方法进行进一步地详细介绍,图3为本申请另一实施例提供的熔断处理方法的流程图,图4为本申请实施例提供的逻辑下标的一种实现示意图,图5为本申请实施例提供的逻辑下标的另一种实现示意图。
如图3所示,该方法包括:
S301、在客户端向服务器发送请求时,获取用于调用请求的方法以及方法对应的至少一个参数值组,参数值组包括至少一个参数值。
S302、针对参数值组,生成方法和参数值组对应的第一组合,其中,第一组合映射有成功统计数组和异常统计数组,成功统计数组用于指示各个周期的请求成功次数,异常统计数组用于指示各个周期的请求异常次数。
S303、获取请求结果。
其中,S301-S303的实现方式与S201-S203的实现方式类似,此处不再赘述。
S304、确定当前周期所对应的第一组合映射的成功统计数组的第一下标和当前周期所对应的第一组合映射的异常统计数组的第二下标。
在本实施例中,成功统计数组中的一个元素用于指示一个周期内的请求成功次数,异常统计数组中的一个元素用于指示一个周期内的请求异常次数,因此在根据请求结果对成功统计数组和异常统计数组进行更新时,首先需要确定当前周期对应的数组下标。
需要说明的是,本实施例中的第一下标和第二下表值得是数组的物理下标。
在一种可能的实现方式中,各个周期对应的数组下标可以按照顺序依次轮转,假设继续沿用上述实施例的示例,当前key1对应的成功统计数组为s,异常统计数组为s,假设成功统计数组和异常统计数组的长度均为6,也就是说数组s包括:s[0]、s[1]、s[2]、s[3]、s[4]、s[5],数组e包括:e[0]、e[1]、e[2]、e[3]、e[4]、e[5]。
例如当前周期对应的成功统计数组的第一下标为3,以及当前周期对应的异常统计数组的第二下标为3,则此时需要根据请求结果更新s[3]和e[3]。
S305、若请求结果指示请求成功,则将成功统计数组中的第一下标对应的元素加1,以及,
若请求结果指示所示请求异常,则将异常统计数组中的第二下标对应的元素加1。
在一种可能的实现方式中,若请求结果指示请求成功,则将成功统计数组中第一下标对应的元素加1,在上述示例的情况下,也就是将s[3]加1,其中,在当前周期开始之前,设置s[3]=0。
在另一种可能的实现方式中,若请求结果指示请求异常,则将异常统计数组中第二下标对应的元素加2,在上述示例的情况下,也就是将e[3]加1,其中,在当前周期开始之前,e[3]=0。
在当前周期结束时,s[3]就表示当前周期的请求成功次数,e[3]就表示当前周期的请求异常次数。
在下一个周期时,更新s[4]和e[4],其实现方式与上述介绍的类似,此处不再赘述。
需要说明的是,本实施例中的成功统计数组和异常统计数组都具有各自的数组长度,例如上述示例中两个数组的长度均为6,当成功统计数组和异常统计数组完成一轮更新之后,也就是说数组元素更新到了s[5]和e[5],则下一个周期就继续轮转更新s[0]和e[0]。
在一种可能的实现方式中,在下一个周期开始之前,会将下一个周期对应的下标的数组元素进行初始化,例如下一个周期对应的下标为0,则将s[0]和e[0]进行初始化,以使得s[0]和e[0]可以记录下一个周期的请求成功次数和请求异常次数;或者下一个周期对应的下标为1,则将s[1]和e[1]进行初始化,其中初始化的实现方式例如可以为将数组元素置为0,其中下一个周期对应的下表是通过轮转确定的,即当前周期的下标的下一个下标,就是下一个周期对应的下表,通过在下一个周期开始之前,将其对应的数组元素进行初始化,从而可以根据有限长度的数组持续对多个周期的请求成功次数和请求异常次数进行统计,以有效节省内存空间。
S306、在新的周期开始之前,根据成功统计数组和异常统计数组,得到异常比例。
在对当前周期结束之后,得到了当前周期的请求成功次数和请求异常次数,则可以在新的周期开始之前,根据成功统计数组和异常统计数组中记录的次数,得到异常比例。
在一种可能的实现方式中,可以根据成功统计数组和异常统计数组,使用动量momentum算法得到异常比例。
在介绍动量momentum算法之前,首先结合图4和图5对逻辑下标进行说明,参见图4,假设当前存在长度为6的数组e,则数组e的物理下标为0~5,并且物理下标的位置不会发生变化,即e[0]对应的数组位置是固定的。
以及,数组e的逻辑下标也是0~5,然而逻辑下标的位置会发生变化,即e(0)对应的数组位置不固定,在本实施例中,用逻辑下标表示距离当前周期最远的周期,例如e(0)表示距离当前周期最远的周期的请求异常次数。
参见图4,假设当前周期对应的数组的物理下标是2,因此当前周期对应的请求异常次数记录在e[2]中,如图4所示,e[2]=2,因为本实施例中的数组会轮转更新,因此距离e[2]对应的周期最远的周期就是下一个物理下标对应的周期,也就是e[3]对应的周期,因此此时逻辑下标0就和物理下标3之间存在映射关系,以及逻辑下标1和物理下标4之间存在映射关系,以此类推,具体的映射关系参照图4。
假设进入下一个周期,参见图5,下一个周期的请求异常次数记录在e[3]中,如图5所示,此时e[3]更新为7,因为本实施例中的数组会轮转更新,因此距离e[3]对应的周期最远的周期就是下一个物理下标对应的周期,也就是e[4]对应的周期,因此此时逻辑下标0就对应的是物理下标4,逻辑下标1对应的是物理下标5,其余的关系以此类推,具体的映射关系参照图5。
需要说明的是,本实施例中的[]中表示的是物理下标,()中表示的是逻辑下标,在上述介绍的逻辑下标的基础上,下面对得到异常比例的实现方式进行说明。
其中,使用动量momentum算法得到异常比例的实现例如可以满足如下公式一:
/>
其中,i表示逻辑下标,r(i)表示逻辑下标i对应的周期的异常比例,e表示异常统计数组,e(i)表示数组e的逻辑下标i对应的数组元素,e(0)表示距离当前周期最远的周期的请求异常次数,s表示成功统计数组,s(i)表示数组s的逻辑下标i对应的数组元素,s(0)表示距离当前周期最远的周期的请求成功次数,b表示衰减度,b的取值范围为[0,1]。
其中,b的取值可以根据实际需求进行选择。
以及假设用n表示统计数据的长度,则当前周期的异常比例就为r(n-1),例如参见图4,统计数据的长度为6,则当前周期的异常比例就为r(5),映射到物理下标就是物理下标2对应的异常周期,即当前周期的异常比例。
上述公式一仅为一种可能的实现方式,上述公式一的变形或者参数的等价替代等,同样可以得到本申请中的异常比例,在实际实现过程中,只要在计算距离当前时间最远的周期的异常比例时,按照该周期的请求异常次数和请求总次数的比例直接得到即可;在计算其余周期的比例时,按照该周期的上一个周期乘以衰减度,以及当前周期的请求异常次数和请求总次数的比例乘以1减衰减度,并将两者进行相加,即可得到当前周期的异常比例,其具体的实现方式可以根据实际需求进行扩展,此次对此不再赘述。
在当前的实现方式中,因为动量算法在计算当前周期的异常比例时,是根据其余周期的异常比例和衰减度得到的,因此采用动量算法对异常的捕捉更加快速,考虑异常的及时性,适合周期时间较长的熔断。
在另一种可能的实现方式中,例如可以根据成功统计数组和异常统计数组中,每个周期的请求成功次数和请求异常次数,得到每个周期的子异常比例,将每个周期的子异常比例的平均值,确定为异常比例。
其中,例如异常比例可以满足如下公式二:
其中,n表示统计数据的长度,r表示异常比例,e表示异常统计数组,e(i)表示数组e的逻辑下标i对应的数组元素,s表示成功统计数组,s(i)表示数组s的逻辑下标i对应的数组元素。
采用平均值的算法得到异常比例的实现方式可以综合各个周期的异常比例,对短暂的波动不敏感,而更加考虑稳定性,因此适用于周期时间较短的熔断。
在实际实现过程中,可以根据实际需求选用需要的异常比例确定方式,本实施例对具体的实现方式不做特别限制。
S307、若异常比例大于预设比例,并且请求异常次数大于预设次数,则将客户端的熔断标识设置为打开。
在本实施例中,预设比例和预设次数的具体实现可以根据实际需求进行选择,本实施例对此不做特别限制。
上述确定了异常比例,以及异常统计数组中记录有异常请求次数,因此在异常比例大于预设比例,并且当前周期的请求异常次数大于预设次数时,则将客户端的熔断标识设置为打开。
或者,若异常比例不大于异常比例,或者请求异常次数不大于预设次数,则将客户端的熔断标识设置为关闭。
可以理解的是,在客户端的熔断标识设置为打开之后,也是通过记录请求的正常次数和异常次数,从而判断异常比例和请求异常次数,以确定是否关闭客户端的熔断标识。
本申请实施例提供的熔断处理方法,包括:在客户端向服务器发送请求时,获取用于调用请求的方法以及方法对应的至少一个参数值组,参数值组包括至少一个参数值。针对参数值组,生成方法和参数值组对应的第一组合,其中,第一组合映射有成功统计数组和异常统计数组,成功统计数组用于指示各个周期的请求成功次数,异常统计数组用于指示各个周期的请求异常次数。获取请求结果。确定当前周期所对应的第一组合映射的成功统计数组的第一下标和当前周期所对应的第一组合映射的异常统计数组的第二下标。若请求结果指示请求成功,则将成功统计数组中的第一下标对应的元素加1,以及,若请求结果指示所示请求异常,则将异常统计数组中的第二下标对应的元素加1。在新的周期开始之前,根据成功统计数组和异常统计数组,得到异常比例。若异常比例大于预设比例,并且请求异常次数大于预设次数,则将客户端的熔断标识设置为打开。通过根据请求结果,将对应的成功统计数组和异常统计数组中的元素进行累加,从而可以简单高效的实现对请求成功次数和请求异常次数的统计,并且可以通过动量算法的方式计算异常不理,或者可以通过平均值的方式计算异常比例,从而能够灵活并全面的确定异常比例,从而能够确定是否将熔断标识设置为打开。
在上述实施例的基础上,当客户端的熔断标识设置为打开之后,客户端为了避免请求线程耗尽,不能直接向服务器发送请求,因此客户端在发送请求之前,应该首先判断客户端的熔断标识是否设置为打开,再进行下一步操作,下面结合具体的实施例进行说明,图6为本申请又一实施例提供的熔断处理方法的流程图。
如图6所示,该方法包括:
S601、在客户端向服务器发送请求之前,判断熔断标识是否设置为打开,若是,则执行S602,若否,则执行S603。
S602、根据熔断策略尝试发送请求;
S603、直接向服务器发送请求。
在本实施例中,为了避免客户端请求线程耗尽,在客户端每次向服务器发送请求之前,需要首先判断熔断标识是否设置为打开,从而确定后续的操作。
在一种可能的实现方式中,当熔断标识设置为打开时,表示客户端处于熔断状态,则客户端需要根据熔断策略尝试向服务器发送请求。
在另一种可能的实现方式中,当熔断标识没有设置为打开时,表示此时客户端没有处于熔断状态,则客户端可以直接向服务器发送请求。
下面对熔断策略的可能的实现方式进行说明:
在熔断策略的一种可能的实现方式中,可以统计尝试次数,并根据尝试次数确定是否向服务器发送请求。
例如可以判断尝试次数是否小于预设阈值,其中,尝试次数在新的周期开始之前重置为0;
若是,则向服务器发送请求,在请求异常时,将尝试次数加1,在请求正常时,不更改尝试次数;
若否,则停止向服务器发送请求。
在实现过程中,例如可以以周期为单位统计尝试次数,则可以在每个周期开始之前,将尝试次数重置为0,并且在客户端向服务器发送请求之前,判断尝试次数是否小于预设阈值,在尝试次数小于预设阈值时,向服务器发送请求,并将尝试次数加1,在尝试次数大于或者等于预设阈值时,则停止向服务器发送请求。
该熔断策略适用于周期时间较短的客户端,基于当前的熔断策略,可以在客户端处于熔断状态的期间,若确定服务器恢复正常,则尝试发送的请求会返回请求成功,从而使得异常比例下降。
在熔断策略的另一种可能的实现方式中,可以针对每个key增加两个信号量,分别为第一信号量P1和第二信号量P2,其中P1和P2的默认值为1,以及针对每个key增加一个扩张标识flag,其中,flag的默认值为true。
其在,第一信号量P1表示可以向尝试向服务器发送请求的进程数量,第二信号量P2表示可以第一信号量的总数量,扩张标识为true时,表示增加第一信号量的数量,扩张标识为false时,表示减少第一信号量的数量。
熔断策略可以为获取P1信号量,若获取失败,则停止向服务器发送请求,若获取成功,则向服务器发送请求。
在一种可能的实现方式中,若所述请求成功,则判断flag是否为真:
若flag为真,则释放两个P1信号量,以及释放一个P2信号量;
若flag为假,则释放一个P1信号量。
在另一种可能的实现方式中,若所述请求失败,则将flag设置为假,并清空P1的信号量值V,以及P2获取V+1个信号量值,此时判断P2信号量是否为0:
若是,则释放一个P1信号量和一个P2信号量,并将flag设置为true;
若否,则不做任何操作。
下面对当前熔断策略的实现方式进行举例说明,值得说明的是,本实施例中的获取信号量表示减少信号量,释放信号量表示增加信号量:
首先介绍扩张(增加)第一信号量的实现方式:
在初始状态下,P1=1,P2=1,flag=true;
假设此时获取第一信号量成功,则P1=0,P2=1,flag=true;
获取第一信号量之后,可以向服务器发送请求,假设请求成功,并且可以确定次数flag=true,则释放两个P1信号量,以及释放一个P2信号量,此时P1=2,P2=2,flag=true;
此时接着获取第一信号量,假设获取第一信号量成功,则P1=1,P2=2,flag=true;
获取第一信号量之后,可以向服务器发送请求,假设请求成功,并且可以确定此时flag=true,则释放两个P1信号量,以及释放一个P2信号量,此时P1=3,P2=3,flag=true。
可以确定的是,在请求成功的情况下,会不断扩张第一信号量P1,从而能够在请求正常的时候快速恢复调用,避免客户端长时间处于熔断状态。
其次介绍缩减(减少)第一信号量的实现方式:
基于上述实现过程,在经过上述的扩张过程之后,此时P1=3,P2=3,flag=true;
假设此时获取第一信号量成功,则P1=2,P2=3,flag=true;
获取第一信号量之后,可以向服务器发送请求,假设请求失败,则将flag设置为false,并清空P1的信号量值2,以及P2获取2个信号量值,此时P1=0,P2=1,flag=false,其中,P2用于表示P1总信号量,因此在P1=0,P2=1的情况下,表示有一个进程占用了P1还没有释放;
因为此时P2不为0,因此不做任何操作,在占用了P1的进程释放P1之后,P1=1,P2=1,flag=false;
假设此时继续获取第一信号量成功,则P1=0,P2=1,flag=false;
获取第一信号量之后,可以向服务器发送请求,假设请求失败,则将flag设置为false,并清空P1的信号量值0,以及P2获取0+1个信号量值,此时P1=0,P2=0,flag=false;
因为此时P2等于0,因此释放一个P1信号量和一个P2信号量,并将flag设置为true,则P1=1,P2=1,flag=true,也就是说P1、P2以及flag又设置为了初始状态,进行了信号量的收缩以及重置。
其中,通过设置信号量和标识进行扩张和缩减的实现方式,能够使得同一时间至少可以存在一个请求尝试,从而可以在请求能够在正常时候快速恢复调用,以及在请求异常时候快速收缩调用,因此适用于周期时间长的熔断策略。
目前,现有技术的熔断策略中,通常是在客户端进入熔断状态之后的一段时间内进入半熔断状态,在半熔断状态时,若请求正常则关闭熔断状态,若请求异常则再次进入熔断状态,因此现有技术的熔断策略中总是要等待一定的时长,在服务器恢复时也无法及时察觉,而本申请中通过上述两种熔断策略,可以在熔断期间也进行请求的尝试,从而可以在服务器恢复时,及时的关闭熔断状态,避免客户端长时间的处于熔断状态。
图7为本申请实施例提供的熔断处理装置的结构示意图。如图7所示,该装置70包括:获取模块701、生成模块702以及处理模块703。
获取模块701,用于在客户端向服务器发送请求时,获取用于调用所述请求的装置以及所述装置对应的至少一个参数值组,所述参数值组包括至少一个参数值;
生成模块702,用于针对所述参数值组,生成所述装置和所述参数值组对应的第一组合,其中,所述第一组合映射有成功统计数组和异常统计数组,所述成功统计数组用于指示各个周期的请求成功次数,所述异常统计数组用于指示各个周期的请求异常次数;
处理模块703,用于获取请求结果,根据所述第一组合映射的请求结果更新所述成功统计数组和所述异常统计数组;
所述处理模块703,还用于根据所述成功统计数组和所述异常统计数组,确定客户端的熔断标识是否设置为打开。
在一种可能的设计中,所述处理模块703具体用于:
确定当前周期所对应的所述成功统计数组的第一下标和当前周期所对应的所述异常统计数组的第二下标;
若所述请求结果指示所述请求成功,则将所述成功统计数组中的第一下标对应的元素加1,以及,
若所述请求结果指示所示请求异常,则将所述异常统计数组中的第二下标对应的元素加1。
在一种可能的设计中,所述处理模块703具体用于:
在新的周期开始之前,根据所述成功统计数组和所述异常统计数组,得到异常比例;
若所述异常比例大于预设比例,并且所述请求异常次数大于预设次数,则将所述客户端的熔断标识设置为打开。
在一种可能的设计中,所述处理模块703具体用于:
根据所述成功统计数组和所述异常统计数组,使用动量momentum算法得到异常比例。
在一种可能的设计中,所述处理模块703具体用于:
根据所述成功统计数组和异常统计数组中,每个周期的请求成功次数和请求异常次数,得到每个周期的子异常比例;
将所述每个周期的子异常比例的平均值,确定为所述异常比例。
在一种可能的设计中,所述获取模块701具体用于:
拦截用于调用所述请求的装置,并根据所述装置上的注解,获取所述装置对应的至少一个参数;
获取每个所述参数的参数值,根据每个所述参数的参数值的组合,得到至少一个参数值组。
在一种可能的设计中,所述处理模块703还用于:
在所述客户端向所述服务器发送所述请求之前,判断所述熔断标识是否设置为打开;
若是,则根据熔断策略尝试发送所述请求;
若否,则直接向所述服务器发送所述请求。
在一种可能的设计中,所述熔断策略为:
判断尝试次数是否小于预设阈值,其中,所述尝试次数在新的周期开始之前重置为0;
若是,则向所述服务器发送所述请求,在所述请求异常时,将所述尝试次数加1,在所述请求正常时,不更改所述尝试次数;
若否,则停止向所述服务器发送所述请求。
在一种可能的设计中,所述熔断策略为:
针对所述第一组合,设置第一信号量、第二信号量和扩张标识,其中,所述第一信号量和所述第二信号量的初始值为1,所述扩张标识的初始值为真,所述第二信号量用于表示所述第一信号量的总数量;
获取所述第一信号量;
若所述第一信号量小于等于0,则停止向所述服务器发送请求;
若所述第一信号量大于0,则获取所述第一信号量,并向服务器发送所述请求;
判断所述请求是否成功,若所述请求成功,则执行扩张信号量操作,若所述请求失败,则执行缩减信号量操作。
在一种可能的设计中,所述扩张信号量操作包括:
若所述扩张标识为真,则释放两个所述第一信号量,以及释放一个所述第二信号量;
若所述扩张标识为假,则释放一个所述第一信号量;以及
所述缩减信号量操作,包括:
将所述扩张标识设置为假,并清空所述第一信号量的值V,以及获取V+1个所述第二信号量,其中,所述V为大于等于0的整数;
若所述第二信号量为0,则释放一个所述第一信号量,释放一个所述第二信号量,并将所述扩张标识设置为真。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
图8为本申请实施例提供的熔断处理设备的硬件结构示意图,如图8所示,本实施例的熔断处理设备80包括:处理器801以及存储器802;其中
存储器802,用于存储计算机执行指令;
处理器801,用于执行存储器存储的计算机执行指令,以实现上述实施例中熔断处理方法所执行的各个步骤。具体可以参见前述方法实施例中的相关描述。
可选地,存储器802既可以是独立的,也可以跟处理器801集成在一起。
当存储器802独立设置时,该熔断处理设备还包括总线803,用于连接所述存储器802和处理器801。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上熔断处理设备所执行的熔断处理方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (16)
1.一种熔断处理方法,其特征在于,包括:
在客户端向服务器发送请求时,获取用于调用所述请求的方法以及所述方法对应的至少一个参数值组,所述参数值组包括至少一个参数值;
针对所述参数值组中的至少一个参数值进行请求成功和请求异常的统计,生成所述方法和所述参数值组对应的第一组合,其中,所述第一组合映射有成功统计数组和异常统计数组,所述成功统计数组用于指示各个周期的请求成功次数,所述异常统计数组用于指示各个周期的请求异常次数;
获取请求结果,根据所述请求结果更新所述第一组合映射的成功统计数组和所述异常统计数组;
根据所述成功统计数组和所述异常统计数组,确定客户端的熔断标识是否设置为打开;
还包括:
在所述客户端向所述服务器发送所述请求之前,判断所述熔断标识是否设置为打开;
若是,则根据熔断策略尝试发送所述请求;
若否,则直接向所述服务器发送所述请求;
所述熔断策略为:
针对所述第一组合,设置第一信号量、第二信号量和扩张标识,其中,所述第一信号量和所述第二信号量的初始值为1,所述扩张标识的初始值为真,所述第一信号量用于表示尝试向服务器发送请求的进程数量,所述第二信号量用于表示所述第一信号量的总数量;
获取所述第一信号量;
若所述第一信号量小于等于0,则停止向所述服务器发送请求;
若所述第一信号量大于0,则获取所述第一信号量,并向服务器发送所述请求;
判断所述请求是否成功,若所述请求成功,则执行扩张信号量操作,若所述请求失败,则执行缩减信号量操作。
2.根据权利要求1所述的方法,其特征在于,所述根据所述请求结果更新所述第一组合映射的成功统计数组和所述异常统计数组,包括:
确定当前周期所对应的所述第一组合映射的成功统计数组的第一下标和当前周期所对应的所述第一组合映射的异常统计数组的第二下标;
若所述请求结果指示所述请求成功,则将所述成功统计数组中的第一下标对应的元素加1,以及,
若所述请求结果指示所示请求异常,则将所述异常统计数组中的第二下标对应的元素加1。
3.根据权利要求1或2所述的方法,其特征在于,所述根据所述成功统计数组和所述异常统计数组,确定客户端的熔断标识是否设置为打开,包括:
在新的周期开始之前,根据所述成功统计数组和所述异常统计数组,得到异常比例;
若所述异常比例大于预设比例,并且所述请求异常次数大于预设次数,则将所述客户端的熔断标识设置为打开。
4.根据权利要求3所述的方法,其特征在于,所述根据所述成功统计数组和所述异常统计数组,得到异常比例,包括:
根据所述成功统计数组和所述异常统计数组,使用动量momentum算法得到异常比例。
5.根据权利要求3所述的方法,其特征在于,所述根据所述成功统计数组和异常统计数组,得到异常比例,包括:
根据所述成功统计数组和异常统计数组中,每个周期的请求成功次数和请求异常次数,得到每个周期的子异常比例;
将所述每个周期的子异常比例的平均值,确定为所述异常比例。
6.根据权利要求1所述的方法,其特征在于,所述获取用于调用所述请求的方法以及所述方法对应的至少一个参数值组,包括:
拦截用于调用所述请求的方法,并根据所述方法上的注解,获取所述方法对应的至少一个参数;
获取每个所述参数的参数值,根据每个所述参数的参数值的组合,得到至少一个参数值组。
7.根据权利要求1所述的方法,其特征在于,所述扩张信号量操作包括:
若所述扩张标识为真,则释放两个所述第一信号量,以及释放一个所述第二信号量;
若所述扩张标识为假,则释放一个所述第一信号量;以及
所述缩减信号量操作,包括:
将所述扩张标识设置为假,并清空所述第一信号量的值V,以及获取V+1个所述第二信号量,其中,所述V为大于等于0的整数;
若所述第二信号量为0,则释放一个所述第一信号量,释放一个所述第二信号量,并将所述扩张标识设置为真。
8.一种熔断处理装置,其特征在于,包括:
获取模块,用于在客户端向服务器发送请求时,获取用于调用所述请求的装置以及所述装置对应的至少一个参数值组,所述参数值组包括至少一个参数值;
生成模块,用于针对所述参数值组中的至少一个参数值进行请求成功和请求异常的统计,生成所述装置和所述参数值组对应的第一组合,其中,所述第一组合映射有成功统计数组和异常统计数组,所述成功统计数组用于指示各个周期的请求成功次数,所述异常统计数组用于指示各个周期的请求异常次数;
处理模块,用于获取请求结果,根据所述请求结果更新所述第一组合映射的成功统计数组和所述异常统计数组;
所述处理模块,还用于根据所述成功统计数组和所述异常统计数组,确定客户端的熔断标识是否设置为打开;
所述处理模块还用于:
在所述客户端向所述服务器发送所述请求之前,判断所述熔断标识是否设置为打开;
若是,则根据熔断策略尝试发送所述请求;
若否,则直接向所述服务器发送所述请求;
所述熔断策略为:
针对所述第一组合,设置第一信号量、第二信号量和扩张标识,其中,所述第一信号量和所述第二信号量的初始值为1,所述扩张标识的初始值为真,所述第二信号量用于表示所述第一信号量的总数量;
获取所述第一信号量;
若所述第一信号量小于等于0,则停止向所述服务器发送请求;
若所述第一信号量大于0,则获取所述第一信号量,并向服务器发送所述请求;
判断所述请求是否成功,若所述请求成功,则执行扩张信号量操作,若所述请求失败,则执行缩减信号量操作。
9.根据权利要求8所述的装置,其特征在于,所述处理模块具体用于:
确定当前周期所对应的所述成功统计数组的第一下标和当前周期所对应的所述异常统计数组的第二下标;
若所述请求结果指示所述请求成功,则将所述成功统计数组中的第一下标对应的元素加1,以及,
若所述请求结果指示所示请求异常,则将所述异常统计数组中的第二下标对应的元素加1。
10.根据权利要求8或9所述的装置,其特征在于,所述处理模块具体用于:
在新的周期开始之前,根据所述成功统计数组和所述异常统计数组,得到异常比例;
若所述异常比例大于预设比例,并且所述请求异常次数大于预设次数,则将所述客户端的熔断标识设置为打开。
11.根据权利要求10所述的装置,其特征在于,所述处理模块具体用于:
根据所述成功统计数组和所述异常统计数组,使用动量momentum算法得到异常比例。
12.根据权利要求10所述的装置,其特征在于,所述处理模块具体用于:
根据所述成功统计数组和异常统计数组中,每个周期的请求成功次数和请求异常次数,得到每个周期的子异常比例;
将所述每个周期的子异常比例的平均值,确定为所述异常比例。
13.根据权利要求8所述的装置,其特征在于,所述获取模块具体用于:
拦截用于调用所述请求的装置,并根据所述装置上的注解,获取所述装置对应的至少一个参数;
获取每个所述参数的参数值,根据每个所述参数的参数值的组合,得到至少一个参数值组。
14.根据权利要求8所述的装置,其特征在于,所述扩张信号量操作包括:
若所述扩张标识为真,则释放两个所述第一信号量,以及释放一个所述第二信号量;
若所述扩张标识为假,则释放一个所述第一信号量;以及
所述缩减信号量操作,包括:
将所述扩张标识设置为假,并清空所述第一信号量的值V,以及获取V+1个所述第二信号量,其中,所述V为大于等于0的整数;
若所述第二信号量为0,则释放一个所述第一信号量,释放一个所述第二信号量,并将所述扩张标识设置为真。
15.一种熔断处理设备,其特征在于,包括:
存储器,用于存储程序;
处理器,用于执行所述存储器存储的所述程序,当所述程序被执行时,所述处理器用于执行如权利要求1至7中任一所述的方法。
16.一种计算机可读存储介质,其特征在于,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1至7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010732253.3A CN111866156B (zh) | 2020-07-27 | 2020-07-27 | 熔断处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010732253.3A CN111866156B (zh) | 2020-07-27 | 2020-07-27 | 熔断处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111866156A CN111866156A (zh) | 2020-10-30 |
CN111866156B true CN111866156B (zh) | 2023-07-18 |
Family
ID=72947315
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010732253.3A Active CN111866156B (zh) | 2020-07-27 | 2020-07-27 | 熔断处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111866156B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115250277B (zh) * | 2022-08-09 | 2023-09-05 | 西安邮电大学 | 将共识机制适用于基于联盟链的边缘缓存系统的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108062256A (zh) * | 2017-11-10 | 2018-05-22 | 中国民生银行股份有限公司 | 一种应用程序的访问方法和装置 |
CN109766210A (zh) * | 2019-01-17 | 2019-05-17 | 多点生活(成都)科技有限公司 | 服务熔断控制方法、服务熔断控制装置和服务器集群 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8699371B2 (en) * | 2011-10-14 | 2014-04-15 | Infineon Technologies Ag | Self synchronizing data communication method and device |
CN106375150A (zh) * | 2016-08-31 | 2017-02-01 | 广州唯品会信息科技有限公司 | 服务器的断开控制方法及装置 |
CN107026839B (zh) * | 2016-11-16 | 2020-08-04 | 阿里巴巴集团控股有限公司 | 一种攻击请求处理方法和装置 |
CN108200180B (zh) * | 2018-01-08 | 2020-09-08 | 武汉斗鱼网络科技有限公司 | 一种用于限制请求频率的方法、装置及计算机设备 |
CN109190384B (zh) * | 2018-07-26 | 2022-02-22 | 百色学院 | 一种多中心区块链熔断保护系统及方法 |
CN110808914A (zh) * | 2019-09-29 | 2020-02-18 | 北京淇瑀信息科技有限公司 | 一种访问请求处理方法、装置及电子设备 |
CN110737567A (zh) * | 2019-10-17 | 2020-01-31 | 吉旗(成都)科技有限公司 | 基于缓存的服务端接口熔断方法及装置 |
-
2020
- 2020-07-27 CN CN202010732253.3A patent/CN111866156B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108062256A (zh) * | 2017-11-10 | 2018-05-22 | 中国民生银行股份有限公司 | 一种应用程序的访问方法和装置 |
CN109766210A (zh) * | 2019-01-17 | 2019-05-17 | 多点生活(成都)科技有限公司 | 服务熔断控制方法、服务熔断控制装置和服务器集群 |
Also Published As
Publication number | Publication date |
---|---|
CN111866156A (zh) | 2020-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111344706B (zh) | 管理区块链上的交易的方法和系统 | |
CN107040585B (zh) | 一种业务校验的方法及装置 | |
US11481765B2 (en) | Blockchain-based transaction processing method and apparatus and electronic device | |
US8914457B2 (en) | Caching of nodes in cache cluster | |
CN110191428B (zh) | 一种基于智能云平台的数据分配方法 | |
CN109831487A (zh) | 分片文件验证方法及终端设备 | |
US11250395B2 (en) | Blockchain-based transaction processing methods and apparatuses and electronic devices | |
CN108023829B (zh) | 报文处理方法及装置、存储介质、电子设备 | |
US20150067279A1 (en) | Data processing system and method for operating a data processing system | |
US20200274943A1 (en) | Data Processing Method and Apparatus, Server, and Controller | |
US10067719B1 (en) | Methods and systems for storing and accessing data in a distributed data storage system | |
CN114257551A (zh) | 一种分布式限流的方法及系统、存储介质 | |
CN111866156B (zh) | 熔断处理方法及装置 | |
CN110570311A (zh) | 区块链的共识方法、装置及设备 | |
CN111597167A (zh) | 一种应用区块链技术的大数据管理系统及方法 | |
CN111338688A (zh) | 数据长效缓存方法、装置、计算机系统及可读存储介质 | |
CN114154198A (zh) | 数据处理方法及装置 | |
CN110427394B (zh) | 数据操作方法及装置 | |
CN108829882B (zh) | 信息收集方法、装置、终端及介质 | |
CN116204431A (zh) | 一种标记扩散服务隔离测试方法、装置、设备及介质 | |
CN113132241B (zh) | Acl模板动态配置方法及装置 | |
CN110162415B (zh) | 用于处理数据请求的方法、服务器、装置及存储介质 | |
CN111464312B (zh) | 一种区块链中账户地址的处理方法、装置和电子设备 | |
US8995632B1 (en) | System, method, and computer program for detecting duplicated telecommunications events in a consumer telecommunications network | |
CN114285643A (zh) | 访问请求处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |