实现业务降级的方法及装置和电子设备与流程

文档序号:14940785发布日期:2018-07-13 20:41阅读:249来源:国知局

本说明书实施例涉及互联网技术领域,尤其涉及一种实现业务降级的方法及装置和电子设备。



背景技术:

业务程序通常可以是由一系列具有先后执行顺序的代码构成的。在业务程序运行时,实质是按照代码之间的先后顺序依次执行,从而实现业务提供的功能或者服务。业务降级是指业务程序中某代码出现异常无法解决的情况下,跳过该代码执行后续代码的机制。例如,提供数据查询服务的业务,该业务执行过程中会将查询结果进行缓存,以减轻数据库的压力。但是,缓存服务的可靠性一般是难以保障的,也就是说缓存服务偶尔会出现服务不可用的情况,从而导致数据查询失败。为了避免由于某个功能出现异常而导致整体功能不可用的情况,通常可以引入业务降级机制来保证业务基本功能依然可以实现。现有的业务降级,会在某个代码出现异常时,捕获异常代码,然后可以尝试去容错,即反复执行该代码。现有业务降级的方式,由于进行去容错,会导致过多的系统开销。

需要提供一种更为节约开销地业务降级方案。



技术实现要素:

本说明书实施例提供的一种实现业务降级的方法及装置和电子设备:

根据本说明书实施例的第一方面,提供一种实现业务降级的方法,所述方法包括:

拦截器在业务程序的任意代码执行前,拦截该待执行的当前代码的执行;其中,所述业务程序由若干具有先后执行顺序的代码构成;

识别所述当前代码是否存在表示非关键代码的标记;其中,所述非关键代码不涉及业务程序的基本功能;

在所述当前代码为非关键代码时,基于历史采集到的所述当前代码的执行结果判断所述当前代码是否存在异常;

在所述当前代码存在异常时,跳过所述当前代码执行后一代码。

根据本说明书实施例的第二方面,提供一种实现业务降级的装置,所述装置包括:

拦截单元,拦截器在业务程序的任意代码执行前,拦截该待执行的当前代码的执行;其中,所述业务程序由若干具有先后执行顺序的代码构成;

识别单元,识别所述当前代码是否存在表示非关键代码的标记;其中,所述非关键代码不涉及业务程序的基本功能;

判断单元,在所述当前代码为非关键代码时,基于历史采集到的所述当前代码的执行结果判断所述当前代码是否存在异常;

执行单元,在所述当前代码存在异常时,跳过所述当前代码执行后一代码。

根据本说明书实施例的第三方面,提供一种电子设备,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器被配置为:

拦截器在业务程序的任意代码执行前,拦截该待执行的当前代码的执行;其中,所述业务程序由若干具有先后执行顺序的代码构成;

识别所述当前代码是否存在表示非关键代码的标记;其中,所述非关键代码不涉及业务程序的基本功能;

在所述当前代码为非关键代码时,基于历史采集到的所述当前代码的执行结果判断所述当前代码是否存在异常;

在所述当前代码存在异常时,跳过所述当前代码执行后一代码。

本说明书实施例,提供了一个可以对各个业务程序进行业务降级的拦截器;利用所述拦截器可以提前拦截将要执行的代码,并对代码执行分析;如果发现这个代码存在可用性问题,就跳过该代码执行后一代码。一方面由于可以不真正执行代码就可以确定代码是否异常,从而使得业务降级不仅不会出现额外开销,相对于正常情况下还减少了开销;另一方面,由于无需进行去容错,也就不会出现响应延迟,真正做到了用户无感知下的业务降级。

附图说明

图1是本说明书一实施例提供的实现业务降级的方法的流程图;

图2是本说明书一实施例提供的业务降级过程的示意图;

图3是本说明书一实施例提供的实现业务降级的装置的模块示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。

在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

如前所述,业务程序通常可以是由一系列具有先后执行顺序的代码构成的。在业务程序运行时,实质是按照代码之间的先后顺序依次执行,从而实现业务提供的功能或者服务。业务降级是指业务程序中某代码出现异常无法解决的情况下,跳过该代码执行后续代码的机制。例如,提供数据查询服务的业务,该业务执行过程中会将查询结果进行缓存,以减轻数据库的压力。但是,缓存服务的可靠性一般是难以保障的,也就是说缓存服务偶尔会出现服务不可用的情况,从而导致数据查询失败。为了避免由于某个功能出现异常而导致整体功能不可用的情况,通常可以引入业务降级机制来保证业务基本功能依然可以实现。现有的业务降级,会在某个代码出现异常时,捕获异常代码,然后可以尝试去容错,即反复执行该代码。现有业务降级的方式,由于进行去容错,会导致过多的系统开销。另一方面,由于去容错需要反复执行代码,可能导致响应用户请求出现延迟,容易让用户产生对异常状况的感知,有悖于业务降级对用户无感知的目标。

以下可以结合图1所示的例子介绍本说明书一种实现业务降级的方法的实施例,如图1所示,该方法可以包括以下步骤:

步骤110:拦截器在业务程序的任意代码执行前,拦截该待执行的当前代码的执行;其中,所述业务程序由若干具有先后执行顺序的代码构成。

本说明书提供了一个用于拦截业务程序待执行代码的拦截器。所述拦截器是提供有一种可以在代码执行前后执行其它操作的机制。以java里的拦截器为例,java拦截器可以动态拦截action调用的对象。开发者可以在java拦截器中定义一个action执行前后执行的其它代码,使得java拦截器可以在action执行前拦截其执行,并执行所定义的其它代码。简单来说,拦截器可以在任意代码执行器,转而执行自定义代码,来实现其它功能。在本说明书来说,上述自定义代码实现其它功能即为后续步骤。

步骤120:识别所述当前代码是否存在表示非关键代码的标记;其中,所述非关键代码不涉及业务程序的基本功能。

所述非关键代码可以是指一些对业务程序优化的代码,不执行非关键代码并不会影响业务程序的基本功能。依然以前述数据查询业务为例,数据查询程序需要实现的基本功能就是数据查询;而为了减轻数据库的压力,在数据查询的基础上还提供有缓存功能,实现该缓存功能的代码即为非关键代码,实现数据查询的代码即为关键代码。

在实际应用中,执行业务程序之前,可以根据业务执行逻辑,人工或者机器自动对业务程序中实现不同功能的代码进行打标。具体地,可以对非关键代码进行标记。如此,拦截器可以识别当前代码是否存在表示非关键代码的标记,从而确定当前代码是否为非关键代码。

由于关键代码是实现业务程序基本功能的,如果不执行关键代码就不能实现业务基本功能;因此,本说明书中,对于当前代码为关键代码,拦截器不执行后续步骤,撤销对当前代码的拦截,从而依然执行当前代码。

步骤130:在所述当前代码为非关键代码时,基于历史采集到的所述当前代码的执行结果判断所述当前代码是否存在异常。

对于当前代码为非关键代码,拦截器可以基于历史采集到的所述当前代码的执行结果判断所述当前代码是否存在异常。

一种实现方式中,具体地,所述步骤130,可以包括:

在所述当前代码为非关键代码时,获取历史采集到的所述当前代码的执行结果;

判断所述执行结果中执行失败的比例是否达到阈值;

在所述执行结果中执行失败的比例达到阈值时,确定所述当前代码存在异常;

在所述执行结果中执行失败的比例未达到阈值时,确定所述当前代码不存在异常。

该实施例中,一般的,所述执行结果可以包括执行成功、执行失败。

所述阈值可以是一个预先设置的比例;所述阈值可以根据人为经验设置,也可以基于例如大数据、机器学习等技术计算出的最优值。

举例说明,历史采集到某代码的执行结果有10个;其中,执行结果为执行成功的数量为5个,执行结果为执行失败的数量为5个;则执行失败的比例即为:(执行失败的数量/执行结果的数量)=5/10=50%。

另一种实现方式中,具体地,所述步骤130,可以包括:

在所述当前代码为非关键代码时,获取历史采集到的所述当前代码的执行结果;

根据每个执行结果的时间戳,将所述执行结果划分若干时间段;

在所述时间段内的执行结果均为执行失败时,将所述时间段标记为不可用;

在连续n个时间段均标记为不可用时,确定所述当前代码存在可用性问题。

该实施例中,采集每一个执行结果时,可以记录下采集时的时间戳

(timestamp)。

举例说明,假设历史采集到某代码的10个执行结果的时间戳如下:

执行结果1:执行成功,时间戳为x;

执行结果2:执行成功,时间戳为x+1;

执行结果3:执行成功,时间戳为x+2;

执行结果4:执行失败,时间戳为x+3;

执行结果5:执行失败,时间戳为x+4;

执行结果6:执行失败,时间戳为x+5;

执行结果7:执行失败,时间戳为x+6;

执行结果8:执行失败,时间戳为x+7;

执行结果9:执行失败,时间戳为x+8;

执行结果10:执行失败,时间戳为x+9;

然后,根据上述执行结果时间戳先后顺序,假设按照2秒为一个时间段;则可以划分出如下时间段:

第1个时间段,包括执行结果1和执行结果2;

第2个时间段,包括执行结果3和执行结果4;

第3个时间段,包括执行结果5和执行结果6;

第4个时间段,包括执行结果7和执行结果8;

第5个时间段,包括执行结果9和执行结果10;

之后,对每个时间段内执行结果进行分析,将执行结果均为执行失败的时间段标记为不可用;

由于第1个时间段内执行结果均为成功,即不均为执行失败,因此,无需标记;

由于第2个时间段内执行结果有成功也有失败,即不均为执行失败,因此,无需标记;

由于第3个时间段内执行结果均为失败,因此,可以将第3个时间段标记为不可用;

由于第4个时间段内执行结果均为失败,因此,可以将第4个时间段标记为不可用;

由于第5个时间段内执行结果均为失败,因此,可以将第5个时间段标记为不可用;

综上可知,存在有连续3个时间段(第3、第4和第5)标记为不可用。

值得一提的是,所述n,可以根据如下方式确定:

将所划分的时间段的数量乘以预设比例,得到n;所述预设比例的范围为(0,100%];

依然沿用上一示例,即所划分时间段的数量为5个,假设预设比例为60%;那么,n=5*60%=3。由于连续标记为不可用的时间段有3个等于n值;因此,可以确定所述当前代码存在异常。

所述n,还可以根据如下方式确定:

将预设数值确定为n;所述预设数值小于等于所划分时间段的数量。

所述预设数值可以是人为预先设置的经验值。

步骤140:在所述当前代码存在异常时,跳过所述当前代码执行后一代码。

一方面,拦截器可以在所述当前代码存在异常时,跳过所述当前代码执行后一代码,即当前代码被降级。

另一方面,拦截器可以在所述当前代码不存在异常时,执行所述当前代码,并且在执行完所述当前代码后,采集所述当前代码的执行结果。所述采集的执行结果就可以作为后续执行步骤130时的历史执行结果。

如图2所示的业务降级过程的示意图,业务程序可以包括4个步骤的代码,包括代码1、代码2、代码3和代码4。如图2中执行该业务程序过程如下:

1:业务服务开始处理;

2:业务程序准备执行代码1。此时,拦截器进行拦截,假设代码1为关键代码,撤销拦截,业务服务执行该代码1;

3:业务程序执行完代码1后,准备执行代码2。拦截器进行拦截,假设代码2为非关键代码,判断是否代码2是否存在异常;

如果代码2存在异常,则业务程序跳过执行代码2,直接准备执行代码3,即代码2被降级;

如果代码2不存在异常,则业务程序执行代码2,同时拦截器在业务程序执行完代码2后,采集代码2的执行结果;

4:业务程序准备执行代码3。拦截器拦截进行拦截,由于代码3为关键代码,撤销拦截,业务服务执行该代码3;

5:业务程序准备执行代码4。拦截器拦截进行拦截,由于代码4为非关键代码,判断是否代码4是否存在异常;

如果代码4存在异常,则业务程序跳过执行代码4,即代码2被降级;

如果代码4不存在异常,则业务程序执行代码4,同时拦截器在业务程序执行完代码4后,采集代码4的执行结果;

6:业务服务处理结束。

本说明书实施例,提供了一个可以对各个业务程序进行业务程序降级的拦截器;利用所述拦截器可以提前拦截将要执行的代码,并对代码执行分析;如果发现这个代码存在可用性问题,就跳过该代码执行后一代码。一方面由于可以不真正执行代码就可以确定代码是否异常,从而使得业务程序降级不仅不会出现额外开销,相对于正常情况下还减少了开销;另一方面,由于无需进行去容错,也就不会出现响应延迟,真正做到了用户无感知下的业务程序降级。

在上述图1所示实施例基础上,所述方法还可以包括:

在所述当前代码存在异常时,标记所述当前代码异常,从而可以使得后续再次执行该代码前,当识别存在异常标记时,直接跳过该代码执行后一代码。

通过本实施例,拦截器可以对已识别存在异常的代码进行标记,从而当再次拦截到该代码之后,仅需基于标记就可以确定存在异常,而无需重复进行判断,大大提高了拦截器的执行效率。

进一步的,拦截器对存在异常的代码进行标记后,运维系统可以感知到该异常代码,进而运维系统可以安排运维人员处理该异常代码。本实施例中,运维人员在排查解决异常代码的故障或问题后,运维系统可以向拦截器发送针对该代码的重置指令。通常,所述重置指令可以在排除代码异常时生成,拦截器当获取到针对代码的重置指令后,可以删除所述代码的异常标记,并且删除历史采集到的该代码的执行结果。

通过本实施例,拦截器还提供一种代码因异常被标记后始终不执行的恢复机制。即当异常的代码恢复正常后,拦截器可以删除该代码的异常标记,以及删除历史采集到的执行结果;这样,由于代码没有异常标记也没有历史执行结果,因此就可以重新执行该代码。

与前述实现业务降级的方法实施例相对应,本说明书还提供了实现业务降级的装置的实施例。所述装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机业务程序指令读取到内存中运行形成的。从硬件层面而言,本说明书实现业务降级的装置所在设备的一种硬件结构可以包括处理器、网络接口、内存以及非易失性存储器之外,实施例中装置所在的设备通常根据该实现业务降级的实际功能,还可以包括其他硬件,对此不再赘述。

请参见图3,为本说明书一实施例提供的实现业务降级的装置的模块图,所述装置对应了图2所示实施例,所述装置包括:

拦截单元310,拦截器在业务程序的任意代码执行前,拦截该待执行的当前代码的执行;其中,所述业务程序由若干具有先后执行顺序的代码构成;

识别单元320,识别所述当前代码是否存在表示非关键代码的标记;其中,所述非关键代码不涉及业务程序的基本功能;

判断单元330,在所述当前代码为非关键代码时,基于历史采集到的所述当前代码的执行结果判断所述当前代码是否存在异常;

执行单元340,在所述当前代码存在异常时,跳过所述当前代码执行后一代码。

在一个可选的实施例中:

所述装置还包括:

第二执行单元,在所述当前代码不存在异常时,执行所述当前代码;

采集单元,在执行完所述当前代码后,采集所述当前代码的执行结果。

在一个可选的实施例中:

所述判断单元330,具体包括:

获取子单元,在所述当前代码为非关键代码时,获取历史采集到的所述当前代码的执行结果;

判断子单元,判断所述执行结果中执行失败的比例是否达到阈值;

确定子单元,在所述执行结果中执行失败的比例达到阈值时,确定所述当前代码存在异常。

在一个可选的实施例中:

所述判断单元330,具体包括:

获取子单元,在所述当前代码为非关键代码时,获取历史采集到的所述当前代码的执行结果;

划分子单元,根据每个执行结果的时间戳,将所述执行结果划分若干时间段;

标记子单元,在所述时间段内的执行结果均为执行失败时,将所述时间段标记为不可用;

确定子单元,在连续n个时间段均标记为不可用时,确定所述当前代码存在可用性问题。

在一个可选的实施例中:

所述n,根据如下方式确定:

将所划分的时间段的数量乘以预设比例,得到n;所述预设比例的范围为(0,100%];

或者,

将预设数值确定为n;所述预设数值小于等于所划分时间段的数量。

在一个可选的实施例中:

所述装置还包括:

标记单元,在所述当前代码存在异常时,标记所述当前代码异常,使得后续执行该代码前,当识别存在异常标记时,直接跳过该代码执行后一代码。

在一个可选的实施例中:

所述装置还包括:

恢复单元,当获取到针对代码的重置指令后,删除所述代码的异常标记,删除历史采集到的该代码的执行结果;所述重置指令在排除代码异常时生成。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上图3描述了实现业务降级的装置的内部功能模块和结构示意,其实质上的执行主体可以为一种电子设备,包括:

处理器;

用于存储处理器可执行指令的存储器;

拦截器在业务程序的任意代码执行前,拦截该待执行的当前代码的执行;其中,所述业务程序由若干具有先后执行顺序的代码构成;

识别所述当前代码是否存在表示非关键代码的标记;其中,所述非关键代码不涉及业务程序的基本功能;

在所述当前代码为非关键代码时,基于历史采集到的所述当前代码的执行结果判断所述当前代码是否存在异常;

在所述当前代码存在异常时,跳过所述当前代码执行后一代码。

可选的,还包括:

在所述当前代码不存在异常时,执行所述当前代码;

在执行完所述当前代码后,采集所述当前代码的执行结果。

可选的,所述在所述当前代码为非关键代码时,基于历史采集到的所述当前代码的执行结果判断所述当前代码是否存在异常,具体包括:

在所述当前代码为非关键代码时,获取历史采集到的所述当前代码的执行结果;

判断所述执行结果中执行失败的比例是否达到阈值;

在所述执行结果中执行失败的比例达到阈值时,确定所述当前代码存在异常。

可选的,所述在所述当前代码为非关键代码时,基于历史采集到的所述当前代码的执行结果判断所述当前代码是否存在异常,具体包括:

在所述当前代码为非关键代码时,获取历史采集到的所述当前代码的执行结果;

根据每个执行结果的时间戳,将所述执行结果划分若干时间段;

在所述时间段内的执行结果均为执行失败时,将所述时间段标记为不可用;

在连续n个时间段均标记为不可用时,确定所述当前代码存在可用性问题。

可选的,所述n,根据如下方式确定:

将所划分的时间段的数量乘以预设比例,得到n;所述预设比例的范围为(0,100%];

或者,

将预设数值确定为n;所述预设数值小于等于所划分时间段的数量。

可选的,还包括:

在所述当前代码存在异常时,标记所述当前代码异常,使得后续执行该代码前,当识别存在异常标记时,直接跳过该代码执行后一代码。

可选的,还包括:

当获取到针对代码的重置指令后,删除所述代码的异常标记,删除历史采集到的该代码的执行结果;所述重置指令在排除代码异常时生成。

在上述电子设备的实施例中,应理解,该处理器可以是中央处理单元(英文:centralprocessingunit,简称:cpu),还可以是其他通用处理器、数字信号处理器(英文:digitalsignalprocessor,简称:dsp)、专用集成电路(英文:applicationspecificintegratedcircuit,简称:asic)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,而前述的存储器可以是只读存储器(英文:read-onlymemory,缩写:rom)、随机存取存储器(英文:randomaccessmemory,简称:ram)、快闪存储器、硬盘或者固态硬盘。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于电子设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。

应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。

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