具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
如前所述,目前很多业务会需要多个系统协同来完成,这些系统都有各自的监控体系,但从目标业务链路来看,任何一个系统出现异常,很难追溯出根源发生在哪,也无法确定对整体造成的影响,从而无法帮助技术人员进行诊断,制定相应的决策。
针对这一问题,本文件旨在提供一种异常处理方案,能够在目标业务链路角度上更清晰、更直观地反映出异常原因和异常影响。
图1是本说明书实施例业务异常的处理方法的流程图。图1所示的方法可以由下文相对应的装置执行,包括:
步骤S102,获取负责协同处理指定类型业务的至少两个业务子系统的异常埋点数据,异常埋点数据至少包括异常埋点的全局业务标识、异常埋点的全局链路定位信息及异常埋点的异常信息。
本说明书实施例中,每个业务子系统均可以配置一个或多个异常埋点。各异常埋点均对应有指定类型业务中的一段业务子链路,用于对其负责的业务子链路进行异常监控,并采集异常埋点数据。也即是说,各业务子系统在指定类型业务的全局业务链路中会对应有至少一段业务子链路。
具体地,本说明书实施例可以针对每个业务子系统设置用于通信的应用程序编程接口。本步骤可以基于这些应用程序编程接口周期性向对应的业务子系统获取异常埋点所采集到的异常埋点数据;或者,各业务子系统主动将本地异常埋点所采集到的异常埋点数据以异常日志的形式进行上传。
步骤S106,基于获取到的异常埋点数据中异常埋点的全局业务标识、异常埋点的全局定位信息及异常埋点的异常信息,生成指定类型业务的异常跟踪链路,异常跟踪链路用于异常查看和/或异常预警。
优选地,本说明实施例的异常跟踪链路可以由负责协同处理指定类型业务的各个业务子系统组成,并在每个发生异常的链路位置上标注对应的异常埋点数据,从而方便技术人员能够从全局业务链路角度上直观看到异常状况。
基于图1所示的异常处理方法可以知道:本说明书实施例的方案能够集中获取各系统在协同处理指目标业务时所出现的异常埋点数据。其中,异常埋点数据描述有异常埋点的全局业务标识、全局链路定位信息及异常信息,通过这些信息可以在全局业务链路角度上对异常进行定位,方便技术人员追溯异常原因以及对异常进行预警,可大幅提高业务的应急能力。
此外,对于跨系统的业务来讲,任何业务子系统出现异常都可能产生连锁反应。因此,很多情况下,一些业务子系统并不是因为自身的问题而导致异常发生。为了能够便于找到异常原因,在本说明书实施例中,异常埋点数据还进一步包括异常埋点的异常级别,异常等级用于指示异常对目标业务链路的影响程度。本说明书实施例的处理方法可以基于获取到的各异常埋点数据中异常埋点的全局定位信息、异常埋点的异常信息及异常埋点的异常等级,分析各异常埋点数据之间是否存在因果关系,以确定定所述目标业务链路的异常原因。
下面对异常原因的确定方法进行详细介绍。
具体地,在本说明书实施例中,异常埋点的全局定位信息可以但不限于包括:用于对用于对所述指定类型业务的业务链路进行定位的全局标识,以及用于对异常在指定类型业务的业务链路中进行定位的局部标识。应理解,基于全局定位信息可以先确定指定类型业务的业务链路,并基于局部标识能够精确定位出异常在指定类型业务的业务链路中的位置,以及异常的上下文。在确定这些信息后,进一步可以根据异常埋点的异常等级和异常信息(例如异常内容),来分析异常原因是否在来自业务链路的上文节点,以及i以长是否会对业务链路的下文节点造成影响,也就是确定上文所述异常埋点数据之间的因果关系。
其中,在本说明书实施例的方法将异常等级划分为以下三个级别:
第一异常等级,反映异常导致指定类型业务失败。
第二异常等级,反映异常未定是否导致指定类型业务失败,可能会对目标业务链路带来隐患。
第三异常等级,反映异常不导致指定类型业务失败。
假设本说明书实施例的指定类型业务的业务链路是“业务子系统A→业务子系统B”,且业务子系统A和业务子系统B均发生异常。
针对上述假设的情景,首先可以通过业务子系统A和业务子系统B的异常埋点数据中异常埋点的全局定位信息,确定出指定类型业务的处理顺序为“业务子系统A→业务子系统B”。也就是说,业务子系统B的异常有可能是因为业务子系统A所引起的。之后,再根据业务子系统A和业务子系统B的异常埋点数据中异常埋点的异常信息和异常等级,分析异常原因。
其中,分析异常原因主要包括以下几种情况:
情况一
如果业务子系统A的异常埋点数据中的异常等级为第三异常等级,业务子系统B的异常埋点数据中的异常等级为第一异常等级,则可以确定业务子系统A出现的异常和务子系统系统B出现的异常之间没有因果关系,也就是说,业务子系统A和业务子系统B有各自的异常原因。之后,根据业务子系统A的异常埋点数据中的异常信息具体分析出业务子系统A的异常原因,根据业务子系统B的异常埋点数据中的异常信息具体析出业务子系统B的异常原因。
情况二
如果业务子系统A的异常埋点数据中的异常等级为第二异常等级,业务子系统B的异常埋点数据中的异常等级为第一异常等级,则无法直接确定业务子系统A和业务子系统B出现的异常之间是否存在因果关系。在该情况下,需要进一步根据业务子系统A和业务子系统B的各自异常埋点数据中的异常信息进行具体分析。如果是业务子系统A的异常导致了业务子系统B出现异常,则异常原因在业务子系统A侧。如果业务子系统A的异常不会导致业务子系统B出现异常,则业务子系统A和业务子系统B有各自的异常原因。
情况三
如果业务子系统A的异常埋点数据中的异常等级为第二异常等级或第三异常等级,业务子系统B的异常埋点数据中的异常等级为第二异常等级或第三异常等级,则无法直接确定业务子系统A和业务子系统B出现的异常之间是否存在因果关系。该情况下,需要进一步根据业务子系统A和业务子系统B的异常埋点数据的异常内容进行具体分析。如果是业务子系统A的异常导致了业务子系统B出现异常,则异常原因在业务子系统A侧。如果业务子系统A的异常不会导致业务子系统B出现异常,则业务子系统A和业务子系统B有各自的异常原因。
这里本说明书实施例不对判断业务子系统A的异常是否导致了业务子系统B出现异常的方法作具体限定。作为示例性介绍,如果业务子系统A的异常埋点数据中的业务参数导致了业务子系统B的异常埋点数据中的业务参数超出合理的取值区间或者无法生成取值,则可以判定业务子系统A的异常导致了业务子系统B出现异常。
显然,上述判定机制可以基于计算机程序实现,因此本说明书实施例的方法可以通过机械方式,快速、准确地确定出业务链路中的异常原因,从而帮助技术人员及时采取解决措施。
此外,在上述基础之上,本说明书实施例的方法还可以将获取到的异常埋点数据中异常埋点的全局业务标识、异常埋点的全局定位信息及异常埋点的异常信息,结构化存储至数据库,以在后续收到针对指定类型业务的异常查询请求时,可以从数据库中调取指定类型业务的异常跟踪链路并进行展示。
在实际应用中,本说明书实施例的方法以时间和/或业务类型为粒度,对任何业务链路中的业务子系统所出现的异常埋点数据进行汇总,并存储至数据库中。
以时间粒度为例,一部分类型的业务出现异常会具有一定的时间波动,比如,移动业务会在月初出现结算相关的异常,因此,针对任意业务类型,以时间粒度对异常埋点数据进行汇总,可以捕捉到一些时期所特有的异常问题。此外,也有一部分异常具有时效性,比如某一时期出现的异常可经过一段时间后消失,针对任意业务类型,以时间粒度对异常埋点数据进行汇总,还可以捕捉到时间维度上所突发的异常问题。
以业务类型粒度为例,即便是同一业务类型的不同业务也会对应有不同的异常发生。因此,通过业务类型粒度对异常埋点数据进行汇总,可以有效捕捉到业务类型中所出现的各种异常问题。此外,同一业务类型的异常埋点数据能够更准确地体现出各系统之间的协同状况,通过业务粒度对异常埋点数据进行汇总,还可以捕捉到系统之间的协同问题。
在上述基础之上,本说明书实施例方法还可以基于数据库做一些功能扩展。
比如,在基于数据库中记录指定类型业务的异常埋点数据,确定出指定类型业务的异常原因后,可以按照预先设置的报警方式,发起针对指定类型业务的异常原因的报警。
再比如,为数据库中的异常埋点数据提供可视化的服务。例如图2所示,可以通过图像方式直观地向技术人员展示异常链路。
下面结合实际的应用场景对本说明书实施例的异常处理方法进行详细介绍。
在本应用场景中,指定类型业务具体为支付应用业务,用户通过前端设备的支付应用,来购买商品。如图3所示,本应用场景在支付应用的后台配置一个业务异常的处理平台,以执行本说明书实施例的异常处理方法。
通过图3可以知道,本应用场景中的支付应用业务的业务链路由业务子系统A、B、C、D顺序串行组成,这些业务子系统均配置有异常埋点。异常处理平台申请1个消息队列(MQ,Message Queue),业务子系统A、B、C、D将各自异常埋点采集到的异常埋点数据发送至异常处理平台的MQ,由处理平台从中MQ调取异常埋点数据,并汇总存储至数据库(DB,DataBank)中。
其中,异常埋点数据可以包括“3码2号1体”。
“3码”是指:
端商品码,也就是用户在前端通过支付应用所购买的商品的商品码值。这里,端商品码属于业务链路上下文中的信息。
端事件码,也就是用户在前端通过支付应用购买商品所发起的事件的事件值。比如,唤起支付的事件码、选择支付方式的事件码等。这里,端事件码也同样属于业务链路上下文中的信息。
业务码,也就是目标业务的业务码值。业务码需要各系统进行传入,如果系统不确定逻辑属于什么业务,则可留空。
“2号”是指:
请求全局唯一跟踪号,用于定位支付应用业务的业务链路(即上文所提到的全局标识)。全局唯一跟踪号作为业务链路上下文需要在全局业务链路中透传。在本应用场景中,可以采用rpc框架的追踪ID(traceid)的命名规则生成全局唯一跟踪号。其中,具体的生成规则为:服务器IP+产生ID时候的时间戳+4位循环自增序列+当前进程的ID,每个数字为16进制数字。
调用链路树号,表示异常在支付应用业务的业务链路中的具体位置(即上文所述局部标识)。其中,调用链路树号是根据执行类型业务的处理流程顺序延续设置的。比如首个节点的业务子链路的调用链路树号为0,下一个节点的业务子链路的调用链路树号为0.1,同理,再下一个节点的业务子链路的调用链路树号为0.2。在本应用场景中,每个业务子系统作为一个业务子链路,则业务子系统A的调用链路树号为0,业务子系统B的调用链路树号为0.1,业务子系统C的调用链路树号为0.2,业务子系统D的调用链路树号为0.3。显然,知道其中一个调用链路树号,其上文的调用链路树号和下文的调用链路树号也会同样知道,因此调用链路树号是十分重要的业务链路上文的信息。
“1体”是指综合异常信息体,用于对异常进行描述,包括:系统名称、机器名、机器IP、异常线程名、异常级别、异常类型、异常内容、异常堆栈详情。其中,异常处理平台对异常定义3个异常级别:FATAL、ERROR和WARN。FATAL即上文所述的第一异常等级,表示致命错误,会导致业务链路全局失败;ERROR即上文所述的第二异常等级,表示未知错误,可能会导致业务链路全局失败,以及可能会引起后续业务链路异常;WARN表示异常提醒,不会导致业务链路全局失败,但可能对整个链路存在隐患。
在本应用场景中,异常处理平台基于一定的任务调度规则,从MQ中提取异常埋点数据,并按照数据库的存储要求,进行结构化处理后,汇总存储至DB。DB中的异常埋点数据可通过输入相对应的上述端商品码、端事件码、业务码等进行查看。
此外,处理平台会搭建支付应用业务的异常链路大盘,提供异常埋点数据查看功能。技术人员可以通过访问处理平台,调取出支付应用业务的异常链路大盘,基于异常链路大盘,从全局业务链路的角度直观看到各部署的异常埋点所出现的异常埋点数据。同时,处理平台还可以提供异常原因分析功能,基于各异常埋点的异常等级所对全局业务链路所带来的影响,找到异常发生的主要原因,并在异常根源位置进行标注,方便技术人员直观找到问题发生在哪。此外,处理平台还可以针对采集到异常数据的异常埋点发起报警,提示技术人员及时进行处理。
其中,作为本应用场景的示例性介绍:
假设用户发起指定类业务的请求。当请求到达业务子系统B时,发生ERROR级别异常,业务子系统B不确定自身异常是否会对全局业务链路造成影响,现将异常埋点数据(包含上述“3码2号1体”)上传到处理平台的MQ,并继续后续的业务流程。当请求在业务子系统C处发生FATAL级别异常,由于FATAL级别直接导致本次指定类型业务失败,业务子系统C可以直接结束指定类型业务的后续流程(即不再将请求发送给业务子系统D),并将自身的异常埋点数据(包含上述“3码2号1体”)上传到处理平台的MQ。
之后,处理平台消费MQ队列的业务子系统B和业务子系统C的异常数据,确定本次指定类型业务的异常是从业务子系统B开始,并在业务子系统C处以失败结束。之后,基于根据具体业务子系统B和业务子系统C的异常埋点数据,分析导致业务失败的根源是在业务子系统B侧还是在业务子系统C侧。
如果失败根源出现在业务子系统C侧,则发起业务子系统B和业务子系统C的报警,提示技术人员业务子系统C出现致命错误,同时提示业务子系统B也存在未知错误,可能会对后续的业务链路带来隐患。如果失败根源出现在业务子系统B侧,则发起针对业务子系统B的报警,提示技术人员业务子系统B出现异常,导致了整个指定类型业务的失败。
应理解,上述应用场景仅用于对本说明书实施例的异常处理方法进行示例性介绍。在实际应用中,并不一定以系统作为最小的异常检测粒度。作为其他可行方案,一个系统可以对应有多个节点业务链路,每个系统都会为其节点业务链路设置一一对应的埋点,且节点业务链路也可以按照目标业务的处理顺序,配置局部标识,以用于追踪定位。
与上述方法相对应地,如图4所示,本说明书实施例还提供一种业务异常的处理装置400,包括:
异常获取模块410,获取负责协同处理指定类型业务的至少两个业务子系统的异常埋点数据,所述异常埋点数据至少包括异常埋点的全局业务标识、异常埋点的全局链路定位信息及异常埋点的异常信息。
异常处理模块420,基于获取到的异常埋点数据中异常埋点的全局业务标识、异常埋点的全局定位信息及异常埋点的异常信息,生成所述指定类型业务的异常跟踪链路,所述异常跟踪链路用于异常查看和/或异常预警。
基于图4所示的异常处理装置可以知道:本说明书实施例的方案能够集中获取各系统在协同处理指目标业务时所出现的异常埋点数据。其中,异常埋点数据描述有异常埋点的全局业务标识、全局链路定位信息及异常信息,通过这些信息可以在全局业务链路角度上对异常进行定位,方便技术人员追溯异常原因以及对异常进行预警,可大幅提高业务的应急能力。
可选地,本说明书实施例的异常处理装置还包括:
存储模块,将获取到的异常埋点数据中异常埋点的全局业务标识、异常埋点的全局定位信息及异常埋点的异常信息,结构化存储至数据库。
展示模块,基于针对所述指定类型业务的异常查询请求,从所述数据库中调取所述指定类型业务的异常跟踪链路并进行展示。
可选地,所述异常获取模块410通过针对所述指定类型业务构建的MQ消息队列,接收负责协同处理指定类型业务的至少两个业务子系统所提供的异常埋点数据。
可选地,所述异常埋点数据还包括:异常埋点的异常级别,所述异常等级用于指示异常对所述目标业务链路的影响程度。
在上述基础之上,本说明书实施例的异常处理装置还包括:
异常原因分析模块,基于获取到的各异常埋点数据中异常埋点的全局定位信息、异常埋点的异常信息及异常埋点的异常等级,分析各异常埋点数据之间是否存在因果关系,以确定定所述指定类型业务的异常原因。
其中,异常等级可以包括以下其中一者:
反映异常导致所述指定类型业务失败的第一异常等级;
反映异常未定是否导致所述指定类型业务失败的第二异常等级;
反映异常不导致所述指定类型业务失败的第三异常等级。
可选地,本说明书实施例的异常处理装置还包括:
异常报警模块,基于预先设置的报警方式,发起针对所述指定类型业务的异常原因的报警。
可选地,异常埋点的全局定位信息包括:
用于对所述指定类型业务的业务链路进行定位的全局标识,以及用于对异常在所述指定类型业务的业务链路中进行定位的局部标识,其中,基于异常埋点的局部标识能够确定该异常埋点所对应上下文。
可选地,所述指定类型业务为支付业务,异常埋点的全局业务标识包括以下至少一者:
支付业务的业务标识,支付商品的商品标识和支付事件的事件标识。
显然,本说明书实施例的处理装置可以作为上述图1所示的处理方法的执行主体,因此该能够实现处理方法在图1至图3所实现的功能。由于原理相同,本文不再赘述。
此外,如图5所示,本说明书实施例还提供一种业务异常的处理平台500,包括:
异常获取设备510,获取负责协同处理指定类型业务的至少两个业务子系统的异常埋点数据,所述异常埋点数据至少包括异常埋点的全局业务标识、异常埋点的全局链路定位信息及异常埋点的异常信息;
异常处理设备520,基于获取到的异常埋点数据中异常埋点的全局业务标识、异常埋点的全局定位信息及异常埋点的异常信息,生成所述指定类型业务的异常跟踪链路,所述异常跟踪链路用于异常查看和/或异常预警。
基于图5所示的异常处理平台可以知道:本说明书实施例的方案能够集中获取各系统在协同处理指目标业务时所出现的异常埋点数据。其中,异常埋点数据描述有异常埋点的全局业务标识、全局链路定位信息及异常信息,通过这些信息可以在全局业务链路角度上对异常进行定位,方便技术人员追溯异常原因以及对异常进行预警,可大幅提高业务的应急能力。
显然,本说明书实施例的异常处理平台可以作为上述图1所示的异常处理方法的执行主体,因此该能够实现异常处理方法在图1至图3所实现的功能。由于原理相同,本文不再赘述。
图6是本说明书的一个实施例电子设备的结构示意图。请参考图6,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成异常处理装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
获取负责协同处理指定类型业务的至少两个业务子系统的异常埋点数据,所述异常埋点数据至少包括异常埋点的全局业务标识、异常埋点的全局链路定位信息及异常埋点的异常信息。
基于获取到的异常埋点数据中异常埋点的全局业务标识、异常埋点的全局定位信息及异常埋点的异常信息,生成所述指定类型业务的异常跟踪链路,所述异常跟踪链路用于异常查看和/或异常预警。
基于图6所示的电子设备可以知道:本说明书实施例的方案能够集中获取各系统在协同处理指目标业务时所出现的异常埋点数据。其中,异常埋点数据描述有异常埋点的全局业务标识、全局链路定位信息及异常信息,通过这些信息可以在全局业务链路角度上对异常进行定位,方便技术人员追溯异常原因以及对异常进行预警,可大幅提高业务的应急能力。
上述如本说明书图1所示实施例揭示的异常处理方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
应理解,本说明书实施例的电子设备可以实现上述异常处理装置在图1至图3所示的实施例的功能,本文不再赘述。
当然,除了软件实现方式之外,本说明书的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
此外,本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1所示实施例的方法,并具体用于执行以下方法:
获取负责协同处理指定类型业务的至少两个业务子系统的异常埋点数据,所述异常埋点数据至少包括异常埋点的全局业务标识、异常埋点的全局链路定位信息及异常埋点的异常信息。
基于获取到的异常埋点数据中异常埋点的全局业务标识、异常埋点的全局定位信息及异常埋点的异常信息,生成所述指定类型业务的异常跟踪链路,所述异常跟踪链路用于异常查看和/或异常预警。
应理解,上述指令当被包括多个应用程序的便携式电子设备执行时,能够使上文所述的异常处理装置实现图1至图3所示实施例的功能,本文不再赘述。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序商品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序商品的形式。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。此外,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本文件的保护范围。