本发明涉及计算机技术领域,尤其涉及一种服务降级的方法、装置、计算机设备及存储介质。
背景技术:
目前,随着业务的发展,分布式微服务逐渐普及,在复杂的分布式体系结构中,应用存在多个依赖关系,当某个依赖关系失败时会影响其它依赖关系。为了解决这一问题,目前提供有两种解决方案:一种是降低页面特效消弱渲染页面效果,对一些不重要的展示服务功能直接不调用接口进行降级,但其只适用于前端页面,不适用于后端服务;另一种是当调用的服务接口异常或超时就直接抛弃不执行,但其存在由于丢弃了相关逻辑而导致无法对请求进行处理的问题。
技术实现要素:
本发明实施例提供了一种服务降级的方法、装置、计算机设备及存储介质,旨在存在大量业务需求而导致指定系统服务异常且需要降级时,通过本地服务进行兼容,提高处理效率,保证重要业务的正常运作。
第一方面,本发明实施例提供了一种基于代理模式的服务降级方法,其包括:
为指定系统服务提供对应的代理服务;
当主系统服务接收到数据访问的请求时,确定与所述请求对应的指定系统服务;
通过与所述指定系统服务对应的代理服务调用所述指定系统服务;
判断调用是否成功;
若调用不成功,则通过对应的代理服务调用本地服务进行有损的服务兼容逻辑处理。
第二方面,本发明实施例提供了一种基于代理模式的服务降级装置,其包括:
供给单元,用于为指定系统服务提供对应的代理服务;
匹配单元,用于当主系统服务接收到数据访问的请求时,确定与所述请求对应的指定系统服务;
第一调用单元,用于通过与所述指定系统服务对应的代理服务调用所述指定系统服务;
判断单元,用于判断调用是否成功;
第二调用单元,用于当调用不成功时,通过对应的代理服务调用本地服务进行有损的服务兼容逻辑处理。
第三方面,本发明实施例又提供了一种计算机设备,其包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的基于代理模式的服务降级方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其中所述计算机可读存储介质存储有计算机程序,所述计算机程序当被处理器执行时使所述处理器执行上述第一方面所述的基于代理模式的服务降级方法。
本发明实施例提供了一种基于代理模式的服务降级方法、装置、计算机设备及存储介质。该方法包括:为指定系统服务提供对应的代理服务;当主系统服务接收到数据访问的请求时,确定与所述请求对应的指定系统服务;通过与所述指定系统服务对应的代理服务调用所述指定系统服务;判断调用是否成功;若调用不成功,则通过对应的代理服务调用本地服务进行有损的服务兼容逻辑处理。本发明实施例使用基于代理模式的服务降级方法,在存在大量业务需求而导致指定系统服务异常且需要降级时,通过本地服务进行兼容,提高处理效率,保证重要业务的正常运作。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种基于代理模式的服务降级方法的流程图;
图2为本发明实施例提供的一种基于代理模式的服务降级装置的结构框图;
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
下面请参见图1,图1为本发明实施例所提供的一种基于代理模式的服务降级方法的流程图。
具体步骤可以包括s110~s150:
s110:为指定系统服务提供对应的代理服务;
在一实施例中,可以为指定系统服务提供一个代理服务,并由代理服务控制对指定系统服务的调用。也就是说在本实施例中所述代理服务的作用是作为主系统服务与指定系统服务之间的中介,使用代理服务后既不会出现和原有的业务逻辑混合,使代码更加复杂的问题,同时修改本地服务对原有业务逻辑以及数据访问的请求也不会造成任何影响。需要说明的是,本发明实施例可以不为所有指定系统服务均提供对应的代理服务,只需为负责处理简单业务的指定系统服务提供对应的代理服务即可。
s120:当主系统服务接收到数据访问的请求时,确定与所述请求对应的指定系统服务;
在一实施例中,由于所有请求都有对应处理该请求类型的指定系统服务,所以当主系统服务接收到数据访问的请求时,需要先确定与所述请求对应的指定系统服务,也就是需要先确定负责处理所述请求的指定系统服务,继而对该请求进行后续的操作。
s130:通过与所述指定系统服务对应的代理服务调用所述指定系统服务;
在一实施例中,当主系统服务接收到数据访问的请求并确定与所述请求对应的指定系统服务后,不会直接调用所述指定系统服务对该请求进行处理,而是通过与所述指定系统服务对应的代理服务间接调用所述指定系统服务。具体的,当主系统服务接收到数据访问的请求并确定与所述请求对应的指定系统服务后,会通过该指定系统服务查询到对应的代理服务,继而通过所述代理服务调用所述指定系统服务。
s140:判断调用是否成功;
由于在调用过程中可能会出现某种错误而导致调用失败,继而无法对相应的数据访问请求进行处理,所以为了能及时应对调用失败的情况,需要对调用是否成功进行判定。
在一实施例中,所述判断调用是否成功,包括:
判断调用所述指定系统服务的过程是否报错或者是否超时;
若调用所述指定系统服务的过程报错或者超时,则确认调用不成功。
在本实施例中,判断调用是否成功也就是判断在调用所述指定系统服务的过程中是否出现报错或者超时的情况而导致无法正常调用指定系统服务。若调用所述指定系统服务的过程中出现报错或者超时的情况,则可以判定为调用不成功。调用是否超时可以根据历史调用该指定系统服务的用时进行判定,例如,可以查询最近三次调用指定系统服务的用时,该用时是指从主系统服务在接收到数据访问的请求时开始至对该数据访问的请求进行处理时为止所耗费的时间(即调用指定系统服务所耗费的时间),并计算查询到的三次用时的平均值,然后将所述平均值的2倍作为超时时间,继而对本次调用所述指定系统服务所耗费的时间与该超时时间进行比较,若本次调用所述指定系统服务所耗费的时间大于所述超时时间,则判定出现调用超时的情况,并确认此次调用的结果为调用不成功。在另一实施例中,也可以查询最近五次调用指定系统服务中,用时最长的一次调用所耗费的时间,并将该时间作为超时时间,若本次调用所述指定系统服务所耗费的时间大于所述超时时间,则判定出现调用超时的情况,并确认此次调用的结果为调用不成功。
s150:若调用不成功,则通过对应的代理服务调用本地服务进行有损的服务兼容逻辑处理。
具体的,若判定结果为调用不成功,也就是无法正常调用指定系统服务,则此时需要通过与指定系统服务相对应的代理服务调用本地服务,继而进行有损的服务兼容逻辑处理。
在本实施例中,若出现调用指定服务系统不成功的情况,不会直接放弃该数据访问的请求,而是在本地服务上进行了一定的有损的服务兼容,继而在本地服务上对所述数据访问的请求进行相应的处理。例如:主系统服务接收到一个查询地址的数据访问请求,此时所述主系统服务可以通过与所述指定系统服务对应的代理服务调用所述指定系统服务,在调用指定系统服务查询该地址时,若因指定系统服务出现异常,而导致无法查询出所述地址,则此时可以通过指定系统服务对应的代理服务调用本地服务,所述本地服务将会通过对税号进行解析处理,继而查询出所述地址。由于在本地服务上对该数据访问的请求进行的处理属于有损的服务兼容,所以此时可能会出现一些非关键部分的误差,例如通过对税号进行解析,继而查询地址时,会发生地址行政区划分的变更,但是由于这种情况相对来说极少发生,所以最终结果还是在接受范围内,也就是说所述数据访问的请求可以允许通过本地服务解析出来的地址有一定的偏差。
优选地,为了提高处理效率,可以为一个指定系统服务设置多个本地服务,这些本地服务均可以对同一数据访问的请求进行相应的处理,例如:可以设置三个本地服务:第一本地服务、第二本地服务、第三本地服务,当一指定系统服务因出现异常情况而需要调用本地服务对相应的数据访问的请求进行处理时,优先调用第一本地服务;若第一本地服务调用失败,则代理服务可以调用第二本地服务对相应的数据访问的请求进行处理;若第二本地服务调用失败,则代理服务可以调用第三本地服务对相应的数据访问的请求进行处理。也就是说,本发明实施例提供了多个备用服务来替代同一个指定系统服务的功能,实现对相应数据访问的请求进行处理。由于调用本地服务对数据访问的请求进行处理时仍可能会出现调用不成功(即调用失败)的情况,所以在本实施例中,为了减少调用不成功的情况发生,可以根据各个本地服务在最近一个时间段内调用失败的次数由低到高对各个本地服务进行排序,例如排序结果依次为:第一本地服务、第二本地服务、第三本地服务,那么将按照先调用第一本地服务,若调用失败再调用第二本地服务,若调用失败再调用第三本地服务的顺序进行处理。如果在下一个时间段内的排序结果依次为:第二本地服务、第三本地服务、第一本地服务,那么将按照先调用第二本地服务,若调用失败再调用第三本地服务,若调用失败再调用第一本地服务的顺序进行处理。
在一实施例中,所述基于代理模式的服务降级方法,还包括:
检测指定系统服务连续多次调用不成功的次数;
若所述次数超过预设的次数阈值,则屏蔽所述指定系统服务。
具体的,可以统计指定系统服务调用不成功的次数,如果连续多次调用不成功,则屏蔽对该指定系统服务的访问。具体地,首先可检测所述指定系统服务连续调用不成功的次数,若该次数超过预设的次数阈值,则直接屏蔽所述指定系统服务。在本实施例中,可以为每一指定系统服务设置一个对应的次数阈值,所述次数阈值可以根据指定系统服务的权重设定,所述权重可以人为地预先设定,在不同情况下,指定系统服务的权重可以设定为不同的数值。
在本实施例中,所述基于代理模式的服务降级方法,还包括:
当主系统服务再次接收到数据访问的请求并且所述请求对应的指定系统服务为处于屏蔽状态的指定系统服务时,则直接通过对应的代理服务调用本地服务进行有损的服务兼容逻辑处理。
也就是说,若指定系统服务因多次调用不成功而被屏蔽,则当主系统服务再次接收到数据访问的请求时,由于所述指定代理服务处于屏蔽状态,所以主系统服务将不会调用所述指定系统服务,而是直接通过对应的代理服务调用本地服务进行有损的服务兼容逻辑处理。即使当访问量剧增,导致指定系统服务出现问题(如响应时间慢或不响应)而无法正常处理数据访问的请求时,也不会直接丢弃该数据访问的请求,而是会通过调用本地服务对数据访问的请求进行接受范围内的有损处理,保证了处理效率。
在本实施例中,所述基于代理模式的服务降级方法,还包括:
当所述次数超过次数阈值时,向外发出告警信息,所述告警信息包括指定系统服务的类型以及屏蔽时间。
具体的,当所述次数超过次数阈值时,将会通过向外发出告警信息,确定需要屏蔽的指定系统服务的类型以及屏蔽该指定系统服务的当前时间(即屏蔽时间)。所述告警信息包括指定系统服务的类型以及屏蔽时间,优选地,所述告警信息还可以包括需要对该指定系统服务进行屏蔽的屏蔽时长,该屏蔽时长是指从屏蔽时间开始直至达到结束屏蔽的时间段。在所述屏蔽时长的这段时间内,所有该类型的数据访问的请求将不会被所述指定系统服务处理。在本实施例中,在达到屏蔽时长后,将自动解除所述指定系统服务的屏蔽状态。其中,所述屏蔽时长可以统一设定,也可以根据指定系统服务的权重、指定系统服务在上一时间周期内被屏蔽的次数以及基础屏蔽时长设定,即指定系统服务的屏蔽时长t=指定系统服务的权重q×该指定系统服务在上一时间周期内被屏蔽的次数n×基础屏蔽时长t。例如:可以预先将基础屏蔽时长t设置为2分钟,将时间周期设置为1小时,若指定系统服务在上一时间周期内被屏蔽的次数为1次,则所述指定系统服务的屏蔽时长t=该指定系统服务的权重q×1×2;若所述指定系统服务在该时间周期被屏蔽了3次,则所述指定系统服务的屏蔽时长=该指定系统服务的权重q×3×2。
在本实施例中,所述所述基于代理模式的服务降级方法,还包括:
当接收到解除屏蔽指令时,解除相应指定系统服务的屏蔽状态。
具体的,若在指定系统服务处于屏蔽状态时,需要提前对一指定系统服务进行解除屏蔽状态的操作,可以发送一条解除屏蔽指令,当接收到所述接触屏蔽指令时,即可提前解除相应指定系统服务的屏蔽状态。
在一实施例中,所述指定系统服务的告警信息可以发送至主系统服务,当主系统服务接收到所述指定系统服务对应的数据访问的请求时,所述主系统服务可根据接收到的告警信息确认指定系统服务仍处于屏蔽状态,此时主系统服务可以直接通过代理服务调用本地服务进行有损的服务兼容逻辑处理;同样的,所述指定系统服务的解除屏蔽指令也可以发送至主系统服务,所述主系统服务可根据接收到的解除屏蔽指令解除所述指定系统服务的屏蔽状态。
优选地,由于指定系统服务有与之相对应的代理服务,为了减轻主系统服务的访问量,加快调用效率,所述指定系统服务的告警信息也可以发送至对应的代理服务,当主系统服务接收到所述指定系统服务对应的数据访问的请求时,仍然会确定与该数据访问的请求对应的指定系统服务,并通过与所述指定系统服务对应的代理服务调用所述指定系统服务时,此时所述代理服务可根据接收到的告警信息确认所述指定系统服务仍处于屏蔽状态,所以此时所述代理服务将不会调用所述指定系统服务,而是直接通过代理服务调用本地服务进行有损的服务兼容逻辑处理。同样的,所述指定系统服务的解除屏蔽指令也可以发送至代理服务,所述代理服务可根据接收到的解除屏蔽指令解除所述指定系统服务的屏蔽状态。
在本实施例中,所述基于代理模式的服务降级方法,还包括:
每隔预定时间通过代理服务自动向处于屏蔽状态的指定系统服务发起调用请求;
若调用成功,则解除相应指定系统服务的屏蔽状态;
若调用不成功,则保持相应指定系统服务的屏蔽状态。
具体的,为了及时地查询处于屏蔽状态的指定系统服务是否可以被调用,对于处于屏蔽状态的指定系统服务,可以设定一预定时间,每隔这一预定时间便通过代理服务自动向处于屏蔽状态的指定系统服务发起调用请求,并判断调用是否成功,若调用成功,则可以直接解除相应指定系统服务的屏蔽状态;若调用不成功,则继续保持相应指定系统服务的屏蔽状态。其中,如果代理服务在超时时间内接收到指定系统服务返回的处理结果,则确认调用成功;如果代理服务在超时时间内未接收到指定系统服务返回的处理结果(超时)或代理服务在超时时间内接收到报错的信息(报错)时,则确认调用不成功(即调用失败),并且在调用不成功的情况下,为了减少调用的次数,不额外占用本地服务,提高处理效率,所述代理服务将不会调用本地服务对这一数据访问请求进行有损的服务兼容逻辑处理,则此时指定系统服务将不会返回该数据访问请求的处理结果,即本实施例中的调用请求相当于测试请求,其是为了测试指定系统服务是否恢复正常,以便确认指定系统服务是否可被调用。
请参见图2,图2为本发明实施例所提供的一种基于代理模式的服务降级装置200的结构框图;
该装置200可以包括:
供给单元201,用于为指定系统服务提供对应的代理服务;
匹配单元202,用于当主系统服务接收到数据访问的请求时,确定与所述请求对应的指定系统服务;
第一调用单元203,用于通过与所述指定系统服务对应的代理服务调用所述指定系统服务;
判断单元204,用于判断调用是否成功;
第二调用单元205,用于当调用不成功时,通过对应的代理服务调用本地服务进行有损的服务兼容逻辑处理。
在一实施例中,所述判断单元204包括:
第一判断单元,用于判断调用所述指定系统服务的过程是否报错或者是否超时;
第二判断单元,用于若调用所述指定系统服务的过程报错或者超时,则确认调用不成功。
在一实施例中,所述基于代理模式的服务降级装置200还包括:
检测单元,用于所述检测指定系统服务连续多次调用不成功的次数;
第三判断单元,用于若所述次数超过预设的次数阈值,则屏蔽所述指定系统服务。
在一实施例中,所述基于代理模式的服务降级装置200还包括:
处理单元,用于当主系统服务再次接收到数据访问的请求并且所述请求对应的指定系统服务为处于屏蔽状态的指定系统服务时,则直接通过对应的代理服务调用本地服务进行有损的服务兼容逻辑处理。
在一实施例中,所述基于代理模式的服务降级装置200还包括:
告警单元,用于当所述次数超过次数阈值时,向外发出告警信息,所述告警信息包括指定系统服务的类型以及屏蔽时间。
在一实施例中,所述基于代理模式的服务降级装置还包括:
屏蔽单元,用于当接收到解除屏蔽指令时,解除相应指定系统服务的屏蔽状态。
在一实施例中,所述基于代理模式的服务降级装置200还包括:
调用单元,用于每隔预定时间通过代理服务自动向处于屏蔽状态的指定系统服务发起调用请求;
第四判断单元,用于若调用成功,则解除相应指定系统服务的屏蔽状态;
第五判断单元,用于若调用不成功,则保持相应指定系统服务的屏蔽状态。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
本发明还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的方法。
本发明还提供了一种计算机设备,可以包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实施例所提供的方法。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。