一种服务熔断器、服务熔断方法以及计算机可读存储介质与流程

文档序号:25543551发布日期:2021-06-18 20:40
一种服务熔断器、服务熔断方法以及计算机可读存储介质与流程

本发明涉及一种服务熔断器、服务熔断方法以及计算机可读存储介质,具体而言,涉及一种及时发现和熔断异常服务的机制。



背景技术:

在微服务架构里各服务按功能划分、分布式部署,进而实现了更高的隔离性、灵活性和动态可扩展性。各服务处理能力和处理的业务不同,能够支持的负载各不相同,因而需要引入熔断机制,以便及时地发现和熔断异常服务,防止部分服务异常导致整个系统不可用的服务“雪崩效应”。

为了发现和熔断异常服务,业界常见的做法分为如下几类:1、如果服务错误应答比例超过阈值,则熔断服务,然后使用异步健康探测恢复服务;2、使用熔断服务集群,根据各节点上送信息更新熔断列表,并同步至熔断集群所有节点;3、根据服务响应时间计算滑动平均值,得出熔断指数,达到熔断条件时熔断对端节点。



技术实现要素:

然而,现有技术存在如下问题一种或多种:判断条件比较单一,只考虑了错误应答比例,未考虑超时应答或未应答的情况;另一方面,基于健康探测恢复服务不够及时。若使用熔断服务集群则会增加了系统复杂度,从而会增加运维成本并引入新的风险点,熔断信息由业务节点上送过程中也可能发生丢失、延时。熔断集群内信息同步也需要时间,导致熔断和恢复不够及时。若采用响应时间滑动平均值得出熔断指数,由于滑动平均值的慢启动和滞后性,熔断器需要一定预热时间,并且在某一服务突然故障时无法及时熔断,导致问题加剧。

此外,以上几种方法在达到熔断条件后即将异常服务在一定时限内完全隔离,但是此服务有可能仍可以处理部分请求,简单地在设定的时间窗口将异常服务请求降为零并不利于系统整体服务能力,也不能够在异常服务恢复后及时解除熔断。

为了解决上文提出的一种或多种问题,本申请提出了一种高效地发现异常服务并进行弹性熔断的机制,具体而言:

根据本发明的一方面,提供一种服务熔断器,其包括:收发模块,所述熔断器利用所述收发模块与服务请求方进行通信;熔断判别器,其用于根据所述熔断器的状态以及所述状态下的统计信息确定是否允许所述服务请求方向服务提供方发起的服务请求,并经由所述收发模块通知所述服务请求方;以及熔断更新器,其用于根据所述熔断器的状态以及所述状态下的统计信息来更新所述熔断器的状态,其中所述状态下的统计信息包括经由所述收发模块接收的所述服务提供方对所述服务请求方的所述服务请求的响应情况。

可选地,在本申请的一些实施例中,所述服务提供方对所述服务请求方的所述服务请求的响应情况包括正常响应、未响应以及超时响应。

可选地,在本申请的一些实施例中,所述熔断器的状态包括关闭状态、半开启状态、开启状态,其中:当所述熔断器处于关闭状态时,所述熔断判别器允许所述服务请求;当所述熔断器处于半开启状态时,所述统计信息包括半开启计时,若所述半开启计时未超过第一时限,则所述熔断判别器以第二概率允许所述服务请求;若所述半开启计时超过所述第一时限,则所述熔断器允许所述服务请求;以及当所述熔断器处于开启状态时,所述统计信息包括开启计时,若所述开启计时未超过第二时限,则所述熔断判别器以第一概率允许所述服务请求;若所述开启计时超过所述第二时限,则所述熔断器允许所述服务请求。

可选地,在本申请的一些实施例中,所述统计信息还包括半开启计数,其中:当所述熔断器处于半开启状态时,若所述半开启计时未超过第一时限,则所述熔断器以第二概率允许所述服务请求;当所述熔断器处于半开启状态时,若所述半开启计时超过第一时限时,则所述半开启计数加一;并且当所述半开启计数未超过计数阈值时,所述熔断器允许所述服务请求;当所述半开启计数超过计数阈值时,所述熔断器拒绝所述服务请求。

可选地,在本申请的一些实施例中,所述第一概率和/或第二概率为对所述服务请求正常响应所占的比例。

可选地,在本申请的一些实施例中,当所述熔断器允许所述服务请求时经由所述收发模块向所述服务请求方返回通过请求的结果;当所述熔断器拒绝所述服务请求时经由所述收发模块向所述服务请求方返回拒绝请求的结果。

可选地,在本申请的一些实施例中,所述统计信息包括对所述服务请求未响应的比例、对所述服务请求超时响应的比例以及平均响应时间,当满足下列至少一个条件时,所述熔断更新器将所述熔断器的状态由所述关闭状态更新为所述开启状态:对所述服务请求未响应的比例达到第一阈值;对所述服务请求超时响应的比例达到第二阈值;以及第一时段内对所述服务请求的平均响应时间达到第三阈值。

可选地,在本申请的一些实施例中,所述统计信息还包括对所述服务请求正常响应的计数,当满足下列至少一个条件时,所述熔断更新器将所述熔断器的状态由所述开启状态更新为所述半开启状态:所述开启计时超过第四阈值;以及对所述服务请求正常响应的计数达到第五阈值。

可选地,在本申请的一些实施例中,所述统计信息包括对所述服务请求正常响应的计数,当对所述服务请求正常响应的计数达到第六阈值,所述熔断更新器将所述熔断器的状态由所述半开启状态更新为所述关闭状态。

可选地,在本申请的一些实施例中,当所述半开启计数超过计数阈值时,所述熔断更新器将所述熔断器的状态由所述半开启状态更新为所述开启状态。

根据本发明的另一方面,提供一种服务熔断方法,包括如下步骤:接收服务请求方发送的服务请求;根据熔断状态以及所述状态下的统计信息确定是否允许所述服务请求方向服务提供方发起的服务请求并通知所述服务请求方;根据所述熔断状态以及所述状态下的统计信息来更新所述熔断状态,其中所述状态下的统计信息包括所述服务提供方对所述服务请求方的所述服务请求的响应情况。

可选地,在本申请的一些实施例中,所述服务提供方对所述服务请求方的所述服务请求的响应情况包括正常响应、未响应以及超时响应。

可选地,在本申请的一些实施例中,所述熔断状态包括关闭状态、半开启状态、开启状态,其中:若处于关闭状态则允许所述服务请求;若处于半开启状态则所述统计信息包括半开启计时,当所述半开启计时未超过第一时限时,以第二概率允许所述服务请求;当所述半开启计时超过第一时限时,允许所述服务请求;以及若处于开启状态则所述统计信息包括开启计时,当所述开启计时未超过第二时限时,以第一概率允许所述服务请求;当所述开启计时超过第二时限时,允许所述服务请求。

可选地,在本申请的一些实施例中,所述统计信息包括半开启计数,其中:若处于半开启状态且所述半开启计时未超过第一时限,则以第二概率允许所述服务请求;若处于半开启状态且所述半开启计时超过第一时限,则所述半开启计数加一;并且若所述半开启计数未超过计数阈值则允许所述服务请求,若所述半开启计数超过计数阈值时则拒绝所述服务请求。

可选地,在本申请的一些实施例中,所述第一概率和/或第二概率为对所述服务请求正常响应所占的比例。

可选地,在本申请的一些实施例中,若允许所述服务请求则向所述服务请求方返回通过请求的结果;若拒绝所述服务请求则向所述服务请求方返回拒绝请求的结果。

可选地,在本申请的一些实施例中,所述统计信息包括对所述服务请求未响应的比例、对所述服务请求超时响应的比例以及平均响应时间,若满足下列至少一个条件则将所述熔断状态由所述关闭状态更新为所述开启状态:对所述服务请求未响应的比例达到第一阈值;对所述服务请求超时响应的比例达到第二阈值;以及第一时段内对所述服务请求的平均响应时间达到第三阈值。

可选地,在本申请的一些实施例中,所述统计信息还包括对所述服务请求正常响应的计数,若满足下列至少一个条件则将所述熔断状态由所述开启状态更新为所述半开启状态:所述开启计时超过第四阈值;以及对所述服务请求正常响应的计数达到第五阈值。

可选地,在本申请的一些实施例中,所述统计信息包括对所述服务请求正常响应的计数,若对所述服务请求正常响应的计数达到第六阈值则将所述熔断状态由所述半开启状态更新为所述关闭状态。

可选地,在本申请的一些实施例中,若所述半开启计数超过计数阈值则将所述半开启状态更新为所述开启状态。

根据本发明的另一方面,提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,其特征在于,当所述指令由处理器执行时,使得所述处理器执行如上文所述的任意一种熔断方法。

附图说明

从结合附图的以下详细说明中,将会使本发明的上述和其他目的及优点更加完整清楚,其中,相同或相似的要素采用相同的标号表示。

图1示出了根据本发明的一个实施例的包括服务熔断器的系统的示意图。

图2示出了根据本发明的一个实施例的包括服务熔断器的系统的示意图。

图3示出了根据本发明的一个实施例的服务熔断器的示意图。

图4示出了根据本发明的一个实施例的包括服务熔断器的系统的示意图。

图5示出了根据本发明的一个实施例的服务熔断器的状态转换的示意图。

图6示出了根据本发明的一个实施例的服务熔断方法的示意图。

具体实施方式

出于简洁和说明性目的,本文主要参考其示范实施例来描述本发明的原理。但是,本领域技术人员将容易地认识到相同的原理可等效地应用于所有类型的服务熔断器、服务熔断方法以及计算机可读存储介质,并且可以在其中实施这些相同或相似的原理,任何此类变化不背离本专利申请的真实精神和范围。

图1示出了根据本发明的一个实施例的包括服务熔断器的系统的示意图。如图所示,系统10包括服务请求方12、服务熔断器14和服务提供方16。其中,服务请求方12是服务请求的发起者,其可以是一种实体物理设备,也可以是物理设备中的某个实体部分,还可以是通用设备的特定功能。服务请求方12向各种处理资源请求服务(例如,数据处理、交易处理等)。一般情况下,服务请求方12可以与实际服务请求人(例如,用户)在同一个地理位置处。服务请求方12也可以与实际服务请求人在相近地理位置处或者与实际服务请求人在地理上相距甚远,在此情况下,实际服务请求人例如可以通过遥控、网络等手段控制服务请求方12发起服务请求。

尽管图1中将服务请求方12与服务熔断器14示为两个独立的设备,服务请求方12也可以与服务熔断器14位于同一物理实体中,还可以是通用设备的两个功能。图2示出了根据本发明的一个实施例的包括服务熔断器的系统的示意图。如图所示,系统20包括服务请求方12、服务熔断器14和服务提供方16。其中,服务请求方12是服务请求的发起者,其与服务熔断器14集成在一个设备28中;此外,服务请求方12、服务熔断器14还可以是通用设备28的两个不同功能。服务请求方12的其他方面可以按照图1所示出的示例进行配置。另外,在本发明的一些示例中,服务提供方16不一定指代一个设备,其可以为多个设备构成的分组。因而,根据本发明的原理可以实现对设备分组的熔断。

图1和图2中示出了服务请求方12与服务熔断器14可以进行双向通信。例如,在服务请求方12与服务熔断器14为两个独立的设备的情况下,可以在服务请求方12与服务熔断器14之间设置双向的通信链路。更一般的情况下,如图2所示,服务请求方12可以与服务熔断器14位于同一物理实体中,在此情况下,服务请求方12与服务熔断器14之间的双向通信可以以数据调用的方式实现。

进一步参考图1和图2,服务熔断器14可以根据其记录的状态以及所述状态下的统计信息确定是否允许服务请求方12向服务提供方16发起的服务请求,并且可以经由下文中将详细描述的收发模块通知服务请求方。例如,若服务提供方16处于正常的服务状态,其可以为诸如服务请求方12之类的一个或多个服务请求方提供服务,此时服务熔断器14关于服务提供方16的可用性的状态可以被置为关闭状态,亦即,此时服务熔断器14可以对向服务提供方16提出访问请求的服务请求方12不加以阻拦。若服务提供方16因故障(例如,过载、退服等)处于非正常的服务状态,为了避免服务请求方12向故障状态的服务提供方16再发送服务请求,服务熔断器14关于服务提供方16的可用性的状态可以被置为例如开启状态,亦即,此时服务熔断器14可以对向服务提供方16提出访问请求的服务请求方12加以控制。

当熔断器14允许服务请求时可以向服务请求方12返回通过请求的结果;当熔断器14拒绝服务请求时可以向服务请求方返回拒绝请求的结果。当服务请求方12接收到通过请求的结果时可以向服务提供方16发送服务请求(例如,可以为报文形式),服务提供方16再对服务请求方12作出响应或者因故不作响应。为了促成服务请求方12与服务提供方16之间的通信,可以在二者之间设置双向的通信信道。

图3示出了根据本发明的一个实施例的服务熔断器的示意图。如图所示,服务熔断器34包括收发模块340,熔断器34利用收发模块340与诸如图1和图2中示出的服务请求方12进行通信。上文提及了服务请求方12与服务熔断器14可以进行双向通信,在本实施例中,具体而言,服务请求方12是通过收发模块340实现与服务请求方12进行双向通信的。收发模块340是以某种公共或者私有协议实现数据收发或者调用的物理实体或者通用计算设备的一个功能。具体而言,例如,若服务请求方12和服务熔断器14为两个独立的设备,那么收发模块340可以是服务熔断器14中一个配合软件和/或固件进行工作的物理实体;如果服务熔断器14是一个通用计算设备或者通用计算设备的一个功能,那么收发模块340可以为该通用计算设备中的另一个功能。

继续参考图3,服务熔断器34还包括熔断判别器342和熔断更新器344。熔断判别器342用于根据熔断器34的状态以及所述状态下的统计信息确定是否允许服务请求方12向服务提供方16发起的服务请求。具体而言,例如,服务熔断器34中可以设置一个保存熔断器34的状态的存储器348,熔断判别器342可以读取存储器348中记录的熔断器34的状态,并进一步根据记录的熔断器34的状态来确定是否允许服务请求方12向服务提供方16发起的服务请求。熔断更新器344用于根据熔断器34的状态以及所述(当前)状态下的统计信息来更新熔断器34的状态,其中所述状态下的统计信息包括经由收发模块340接收的服务提供方16对所述服务请求方12的服务请求的响应情况。熔断器34的当前状态下的统计信息可以记录熔断器34的当前状态下的各种历史信息,统计信息可以由熔断器34根据自身内部信息产生,也可以通过收发模块340搜集而来的信息产生。熔断器34的该状态下的统计信息可以例如保存在存储器346中。

图3中示出了收发模块340、熔断判别器342、熔断更新器344、存储器346和存储器348之间的一种示例通信链路,在可以实现本申请的功能的情况下,通信链路可以存在其他的变形形式。例如,图中示出了熔断更新器344经由收发模块340接收来自服务请求方12的信息,但是也可以替代地由其他一个或多个单元模块经由收发模块340接收来自服务请求方12的信息,熔断更新器344接收的信息也可以与其他一个或多个单元模块分享。需要指出的是,尽管图3中示出了熔断器34包括多个单元模块,在熔断器34为一个通用计算设备或者通用计算设备的一个功能的情况下,多个单元模块可以为该通用计算设备中的多个功能。

尽管当服务请求方12接收到通过请求的结果时可以向服务提供方16发送服务请求(例如,可以为报文形式),由于通信链路的不确定性以及服务提供方16自身的不确定性,服务提供方16不一定总是可以完成服务请求方12提出的服务请求。服务提供方对服务请求方的服务请求的响应情况包括正常响应、未响应以及超时响应。例如,若服务提供方16由于资源被占用而无法处理来自服务请求方12的服务请求,则服务提供方16可能直接丢弃该请求并因此不对服务请求方12作出响应(或称为未响应)。再如,若服务提供方16由于资源被占用而来不及处理来自服务请求方12的服务请求,则服务提供方16可能将该请求排队并在被占用的资源被释放时再处理该请求。此时,服务提供方16对服务请求方12的服务请求的响应将超时。

在本发明的一些实施例中,熔断器34的状态包括关闭状态、半开启状态、开启状态,这些状态信息将如上文所述的那样存入存储器348。具体而言,例如,当熔断器34置于关闭状态时,可以将关闭状态以标志位的方式或者以其他方式存入存储器348。关闭状态、半开启状态、开启状态以不同的等级实现对服务提供方16的服务请求的控制,其中开启状态的控制相对于关闭状态、半开启状态更加严格,半开启状态的控制相对于关闭状态更加严格。

具体而言,当熔断器34处于关闭状态时,换言之,当存储器348中的信息指示熔断器34处于关闭状态时,熔断判别器342允许服务请求。这是因为当熔断器34处于关闭状态时服务提供方16的资源处于可以被服务请求方12及时调取的状态。

当熔断器34处于半开启状态时,统计信息可以包括半开启计时(即,熔断器34处于半开启状态的计时,下文关于状态计时的术语亦以此解释)。熔断判别器342可以根据所述半开启计时是否超过第一时限确定是否允许服务请求,具体而言,若所述半开启计时未超过第一时限,则所述熔断判别器以第二概率允许所述服务请求;若所述半开启计时超过所述第一时限,则所述熔断器允许所述服务请求。

当熔断器34处于开启状态,统计信息可以包括开启计时。若开启计时未超过第二时限,则熔断判别器342以第一概率允许服务请求;若熔断器34处于开启状态且开启计时第二时限,则熔断器34允许服务请求。选择开启时限(第一时限、第二时限)作为判断是否允许服务请求的标准可以适应服务提供方16的资源可用性变化,进而及时地反映在熔断器34的状态上。

虽然图1和图2都仅示出一个服务提供方16,但是熔断器14是可以同时关于多个服务提供方而提供的。图4示出了根据本发明的一些实施例的包括服务熔断器的系统的示意图。如图所示,系统10包括服务请求方12、服务熔断器14、服务提供方162、服务提供方164以及服务提供方166。其中,服务熔断器14提供了关于服务提供方162、服务提供方164和服务提供方166的熔断信息,服务请求方12可以向服务熔断器14请求判断是否可以向服务提供方162、服务提供方164以及服务提供方166中任意一个或多个发送服务请求。此时,熔断器14的状态以及熔断器14的该状态下的统计信息将包括分别对应于服务提供方162、服务提供方164以及服务提供方166的部分。

在本发明的一些实施例中,对应于图4中示出的实施例,例如,服务提供方162、服务提供方164可能处于不能及时响应服务的状态,而服务提供方166处于可以及时响应服务的状态。此时,服务熔断器14可以是例如关于服务提供方162为开启状态、关于服务提供方164为半开启状态而关于服务提供方166为关闭状态。此时,若服务请求方12分别向服务提供方162、服务提供方164以及服务提供方166提出服务请求,服务熔断器14可能例如分别返回拒绝对服务提供方162服务请求的结果、通过对服务提供方164服务请求的结果以及通过对服务提供方166服务请求的结果。

返回图3,在本发明的一些实施例中,存储在存储器346中的统计信息包括半开启计数。当熔断器处于半开启状态且半开启计时未超过第一时限时,熔断器以第二概率允许服务请求;当熔断器处于半开启状态且半开启计时超过第一时限时,半开启计数加一。进一步地,当半开启计数未超过计数阈值时,熔断器允许服务请求;当半开启计数超过计数阈值时,熔断器拒绝服务请求。

在本发明的一些实施例中,上文所述的概率(第一概率、第二概率)为对服务请求正常响应所占的比例。该概率基于历史信息,且可以记录在诸如存储器346中。服务提供方对服务请求方的服务请求的响应情况包括正常响应、未响应以及超时响应,该概率为:

p=n(正常响应)/(n(正常响应)+n(未响应)+n(超时响应))

其中p为正常响应所占的比例,n(x)表示x事件的数量统计。在本发明的一个实施例中,可以在一段时间内更新p的值,亦即,可以只统计一段时间内正常响应、未响应以及超时响应事件。与上文相对应,当熔断器34允许服务请求时可以经由收发模块340向服务请求方12返回通过请求的结果;当熔断器34拒绝服务请求时可以经由收发模块340向服务请求方12返回拒绝请求的结果。

在本发明的一些实施例中,尽管上文中记载了在熔断器34处于开启状态时,熔断判别器342可能以第一概率允许服务请求;还记载了在熔断器34处于半开启状态时,熔断判别器342可能以第二概率允许服务请求。但是,二者的概率可以不一定相等。例如,在熔断器34处于半开启状态时,概率可以为p,而在熔断器34处于开启状态时,概率可以为0.5*p。

结合图4,在熔断判别器342以一概率允许服务请求的情况下,若服务请求方12分别向服务提供方162、服务提供方164以及服务提供方166提出服务请求,那么熔断判别器342可以分别以对应于服务提供方162、服务提供方164以及服务提供方166的概率p1、p2以及p3来允许对服务提供方162、服务提供方164以及服务提供方166的服务请求。与上文相对应,当熔断器34允许服务请求时可以经由收发模块340向服务请求方12返回通过请求的结果;当熔断器34拒绝服务请求时可以经由收发模块340向服务请求方12返回拒绝请求的结果。

图5示出了根据本发明的一个实施例的服务熔断器的状态转换的示意图。如图所示,服务熔断器14可以在关闭状态52、半开启状态56和开启状态54之间切换。

在本发明的一些实施例中,存储在存储器346中的统计信息可以包括对所述服务请求未响应的比例、对所述服务请求超时响应的比例以及平均响应时间,当满足下列至少一个条件时,熔断更新器344将熔断器34的状态由关闭状态52更新为开启状态54:对服务请求未响应的比例达到第一阈值;对服务请求超时响应的比例达到第二阈值;以及第一时段内对服务请求的平均响应时间达到第三阈值。第一阈值与第二阈值在数值上可以相同也可以不同,本发明中各个阈值的名称的差异不一定必然导致其数值上的差异。对服务请求未响应的比例、对服务请求超时响应的比例以及对服务请求的平均响应时间都能够反映服务提供方16对服务请求方12可能的预期的响应状况。对服务请求未响应的比例较高(例如,达到第一阈值)、对服务请求超时响应的比例较高(例如,达到第二阈值)以及对服务请求的平均响应时间较高(例如,达到第三阈值)都体现出服务提供方16可能不能及时满足服务请求方12的服务请求。此时,为了及时告知服务请求方12关于服务提供方16的状态,以及为了减少给服务提供方16增加不必要的额外负担,可能通过熔断更新器344将熔断器34的状态由关闭状态52更新为开启状态54。需要指出的是,在本发明的其他实施例中,上述三个状态转换的条件可以分别独立实施,也可以结合其中的数个实施。

在本发明的一些实施例中,统计信息包括对所述服务请求正常响应的计数,当满足下列至少一个条件时,熔断更新器344将熔断器34的状态由开启状态54更新为半开启状态56:熔断器34的开启状态54的定时超过第四阈值;以及对服务请求正常响应的计数达到第五阈值。熔断器34的开启状态54的定时超过一定的数值(例如,达到第四阈值)后,为了能及时发现服务提供方16的可用性的变化,可能需要重新调整熔断器34的状态;此外,如果对服务请求正常响应的计数超过一定的数值(例如,达到第五阈值),那么可能表明服务提供方16的可用性出现好转,此时也可能需要重新调整熔断器34的状态。需要指出的是,在本发明的其他实施例中,上述两个状态转换的条件可以分别独立实施,也可以结合实施。

在本发明的一些实施例中,统计信息包括对所述服务请求正常响应的计数,当对服务请求正常响应的计数达到第六阈值,熔断更新器344将熔断器34的状态由半开启状态56更新为关闭状态52。如果对服务请求正常响应的计数超过一定的数值(例如,达到第六阈值),那么可能表明服务提供方16的可用性出现明显好转或者达到了可以及时响应服务请求方12提出的服务请求的水平,此时可能需要重新调整熔断器34的状态。

在本发明的一些实施例中,统计信息包括的对所述服务请求正常响应的计数可以替换为(第一阈值+第二阈值)*交易总笔数,以此方式可以减少参数数量。

在本发明的一些实施例中,当半开启计数超过计数阈值时,熔断更新器344将熔断器34的状态由半开启状态56更新为开启状态。当半开启计数超过一定的数值(例如,计数阈值)时,表明服务提供方16的可用性并未改善,此时可能需要重新调整熔断器34的状态,以更精确地向服务请求方12表明或者以是否允许响应的方式呈现服务提供方16的可用性。

在本发明的一些实施例中,上文中记载的计数阈值可以替换为第二时限/第一时限,以此可以减少参数量。

图6示出了根据本发明的一个实施例的服务熔断方法的示意图。图6是出于详尽描述各种细节而示出的,这并不表示为了实现本发明的熔断方法必须完整地实施图中的各个流程,本发明的下列实施例中也可能包括图6中未示出的步骤。

根据本发明的另一方面,提供一种服务熔断方法,其可以包括如下步骤:接收服务请求方发送的服务请求;根据熔断状态以及所述状态下的统计信息确定是否允许服务请求方向服务提供方发起的服务请求并通知服务请求方;根据熔断状态以及所述状态下的统计信息来更新熔断状态,其中所述状态下的统计信息包括服务提供方对服务请求方的服务请求的响应情况。在该方法中,根据熔断状态确定服务请求的执行情况,还反过来根据服务请求的执行情况来更新熔断状态。因而,从某种意义上来讲,这个系统是自适应的、反馈的和/或及时的。

在本发明的一些实施例中,服务提供方对服务请求方的服务请求的响应情况包括正常响应、未响应以及超时响应。例如,若服务提供方由于资源被占用而无法处理来自服务请求方的服务请求,则服务提供方可能直接丢弃该请求并因此不对服务请求方作出响应(或称为未响应)。再如,若服务提供方由于资源被占用而来不及处理来自服务请求方的服务请求,则服务提供方可能将该请求排队并在被占用的资源被释放时再处理该请求。此时,服务提供方对服务请求方的服务请求的响应将超时。

在本发明的一些实施例中,熔断状态包括关闭状态、半开启状态、开启状态,其中:若处于关闭状态则允许服务请求;若处于半开启状态则统计信息包括半开启计时,根据半开启计时是否超过第一时限确定是否允许服务请求,具体而言,当所述半开启计时未超过第一时限时,以第二概率允许所述服务请求;当所述半开启计时超过第一时限时,允许所述服务请求;以及若处于开启状态则统计信息包括开启计时,当开启计时未超过第二时限时,以第一概率允许服务请求;当开启计时超过第二时限时,允许服务请求。为了实现该方法的一些步骤,上文提及这些状态信息可以例如存入存储器。具体而言,例如,当置于关闭状态时,可以将关闭状态以标志位的方式或者以其他方式存入存储器。关闭状态、半开启状态、应当理解的是,在本发明的一些实施例中,开启状态以不同的等级实现对服务提供方的服务请求的控制,其中开启状态的控制相对于关闭状态、半开启状态更加严格,半开启状态的控制相对于关闭状态更加严格。

在本发明的一些实施例中,统计信息包括半开启计数,其中:若处于半开启状态且半开启计时未超过第一时限,则以第二概率允许服务请求;若处于半开启状态且半开启计时超过第一时限,则半开启计数加一;并且若半开启计数未超过计数阈值则允许服务请求,若半开启计数超过计数阈值时则拒绝服务请求。

在本发明的一些实施例中,上文所述的概率(第一概率、第二概率)为对服务请求正常响应所占的比例。该概率基于历史信息,且可以记录在诸如存储器中。服务提供方对服务请求方的服务请求的响应情况包括正常响应、未响应以及超时响应,该概率为:

p=n(正常响应)/(n(正常响应)+n(未响应)+n(超时响应))

其中p为正常响应所占的比例,n(x)表示x事件的数量统计。在本发明的一个实施例中,可以在一段时间内更新p的值,亦即,可以只统计一段时间内正常响应、未响应以及超时响应事件。与上文相对应,若允许服务请求则向服务请求方返回通过请求的结果;若拒绝服务请求则向服务请求方返回拒绝请求的结果。

在本发明的一些实施例中,尽管上文中记载了处于开启状态时可能以第一概率允许服务请求;还记载了处于半开启状态时可能以第二概率允许服务请求。但是,二者的概率可以不一定相等。例如,处于半开启状态时概率可以为p,而处于开启状态时概率可以为0.5*p。

在本发明的一些实施例中,统计信息包括对服务请求未响应的比例、对服务请求超时响应的比例以及平均响应时间,若满足下列至少一个条件则将熔断状态由关闭状态更新为开启状态:对服务请求未响应的比例达到第一阈值;对服务请求超时响应的比例达到第二阈值;以及第一时段内对服务请求的平均响应时间达到第三阈值。第一阈值与第二阈值在数值上可以相同也可以不同,本发明中各个阈值的名称的差异不一定必然导致其数值上的差异。对服务请求未响应的比例、对服务请求超时响应的比例以及对服务请求的平均响应时间都能够反映服务提供方对服务请求方可能的预期的响应状况。对服务请求未响应的比例较高(例如,达到第一阈值)、对服务请求超时响应的比例较高(例如,达到第二阈值)以及对服务请求的平均响应时间较高(例如,达到第三阈值)都体现出服务提供方可能不能及时满足服务请求方的服务请求。此时,为了及时告知服务请求方关于服务提供方的状态,以及为了减少给服务提供方增加不必要的额外负担,可能将状态由关闭状态更新为开启状态。需要指出的是,在本发明的其他实施例中,上述三个状态转换的标准可以分别独立实施,也可以结合其中的数个实施。

在本发明的一些实施例中,统计信息包括对服务请求正常响应的计数,若满足下列至少一个条件则将熔断状态由开启状态更新为半开启状态:开启计时超过第四阈值;以及对服务请求正常响应的计数达到第五阈值。开启计时超过一定的数值(例如,达到第四阈值)后,为了能及时发现服务提供方16的可用性的变化,可能需要重新调整熔断器34的状态;此外,如果对服务请求正常响应的计数超过一定的数值(例如,达到第五阈值),那么可能表明服务提供方16的可用性出现好转,此时也可能需要重新调整熔断器34的状态。需要指出的是,在本发明的其他实施例中,上述两个状态转换的标准可以分别独立实施,也可以结合实施。

在本发明的一些实施例中,统计信息包括对服务请求正常响应的计数,若对服务请求正常响应的计数达到第六阈值则将熔断状态由半开启状态更新为关闭状态。如果对服务请求正常响应的计数超过一定的数值(例如,达到第六阈值),那么可能表明服务提供方的可用性出现明显好转或者达到了可以及时响应服务请求方提出的服务请求的水平,此时可能需要重新调整熔断状态。

在本发明的一些实施例中,统计信息包括的对所述服务请求正常响应的计数可以替换为(第一阈值+第二阈值)*交易总笔数,以此方式可以减少参数数量。

在本发明的一些实施例中,若半开启计数超过计数阈值则将熔断器的状态由半开启状态更新为开启状态。当半开启计数超过一定的数值(例如,计数阈值)时,表明服务提供方的可用性并未改善,此时可能需要重新调整熔断的状态,以更精确地向服务请求方表明或者以是否允许响应的方式呈现服务提供方的可用性。

在本发明的一些实施例中,上文中记载的计数阈值可以替换为第二时限/第一时限,以此可以减少参数量。

在本发明的一些实施例中,可以根据图6所示出的详细示例首先在步骤302中接收服务请求方发送的服务请求,并在步骤304中判断熔断状态,进一步地,根据熔断状态将熔断分成开启状态306、半开启状态308和关闭状态310。

若处于关闭状态310则允许服务请求。若处于开启状态306,则在步骤s320中进一步判断是否超过熔断开启时限(对应于上文中的第二时限),若超过开启时限则重置一种、多种乃至全部统计信息并将状态切换成半开启状态308。若没有超过开启时限则进一步在步骤s324中判断是否满足概率条件,若满足概率条件则允许服务请求314,若不满足概率条件则拒绝服务请求316。本实施例中判断是否满足概率条件可以例如是以一定的概率允许所述服务请求这一方式来实现的。

若处于半开启状态308,则在步骤s322中判断是否超过熔断半开启时限(对应于上文中的第一时限),若超过半开启时限则在步骤312中将半开启计数加一,并且在步骤s328中进一步判断半开启计数是否超过计数阈值。若半开启计数未超过计数阈值则允许服务请求314,若所述半开启计数超过计数阈值时则拒绝服务请求316,并同时将熔断状态切换成开启状态。则在步骤s322中判断为没有超过半开启时限,则进一步在步骤s326中判断是否满足概率条件,若满足概率条件则允许服务请求314,若不满足概率条件则拒绝服务请求316。

根据本发明的另一方面,提供一种计算机可读存储介质,其中存储有指令,当所述指令由处理器执行时,使得处理器执行如上文所述的任意一种熔断方法。

以上例子主要说明了本发明的服务熔断器、服务熔断方法以及计算机可读存储介质的一部分示例,通过以上内容可知,根据本发明的一个或多个实施例所提出的服务熔断器、服务熔断方法以及计算机可读存储介质可以具备下列一种或多种特点:支持更多维度的熔断条件,可根据业务需求进行灵活配置。无需单独部署熔断服务集群,直接在服务请求方进行熔断判断,及时地放行请求或拒绝请求。可以更为及时地发现异常服务,高效地熔断。达到隔离条件后,仍会以一定概率将请求放行到异常服务,及时更新服务状态,避免熔断超时选择不当导致服务恢复后不能及时解除熔断。

需要说明的是,附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或者在一个或多个硬件模块或集成电路中实现这些功能实体,或者在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

以上例子主要说明了本发明的服务熔断器、服务熔断方法以及计算机可读存储介质。尽管只对其中一些本发明的实施方式进行了描述,但是本领域普通技术人员应当了解,本发明可以在不偏离其主旨与范围内以许多其他的形式实施。因此,所展示的例子与实施方式被视为示意性的而非限制性的,在不脱离如所附各权利要求所定义的本发明精神及范围的情况下,本发明可能涵盖各种的修改与替换。

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