CN106326099B - 一种用于程序跟踪的方法、装置及电子设备 - Google Patents

一种用于程序跟踪的方法、装置及电子设备 Download PDF

Info

Publication number
CN106326099B
CN106326099B CN201510378223.6A CN201510378223A CN106326099B CN 106326099 B CN106326099 B CN 106326099B CN 201510378223 A CN201510378223 A CN 201510378223A CN 106326099 B CN106326099 B CN 106326099B
Authority
CN
China
Prior art keywords
subprogram
program
tracking
tracking data
identifier
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
Application number
CN201510378223.6A
Other languages
English (en)
Other versions
CN106326099A (zh
Inventor
陈旭东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201510378223.6A priority Critical patent/CN106326099B/zh
Publication of CN106326099A publication Critical patent/CN106326099A/zh
Application granted granted Critical
Publication of CN106326099B publication Critical patent/CN106326099B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种用于程序跟踪的方法、装置及电子设备,一种流量控制方法、装置及电子设备。其中,所述用于程序跟踪的方法包括:接收调用方发送的对应特定程序的调用请求;根据所述调用请求,生成跟踪标识符;执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录。采用本申请提供的方法,使得非OSGi的应用程序在跟踪记录OSGi的子程序的功能运行情况时,能够分离子程序的跟踪处理逻辑和业务处理逻辑,避免对各个子程序进行源代码级的改造,从而达到不影响非OSGi的应用程序业务处理的健壮性和可靠性的效果。

Description

一种用于程序跟踪的方法、装置及电子设备
技术领域
本申请涉及数据处理技术领域,具体涉及一种用于程序跟踪的方法、装置及电子设备。本申请同时涉及一种流量控制方法、装置及电子设备。
背景技术
在计算机科学中,一个大型程序通常是由多个子程序组成的。子程序作为一个大型程序中的某部份代码,由一个或多个语句块组成。子程序负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。子程序一般会有输入参数并有返回值,能被其他程序调用,也可调用其他子程序,甚至可自身调用(如递归)。子程序的最后一条指令一定是返回指令,故能保证重新返回到调用它的程序中去。
在实际应用中,经常需要跟踪大型程序运行过程中各个子程序的实际执行情况,以便定位某个子程序是否出了问题,或者是基于各个子程序的实际执行情况对大型程序进行分析和改造等优化处理。一个非常典型的跟踪程序的应用是,当Web应用的前端用户投诉搜索排名存在问题时,需要在线查询这个搜索行为对应的后端业务执行流程以及流程环节中的数据,以便定位某个模块或者某个业务环节是否出了问题。
目前,跟踪程序运行过程中各个子程序执行情况的常用方法,其主要过程如下所述:首先,生成一个对应本次程序运行的跟踪标识符;然后,在每执行完一个子程序后,根据该子程序的实际执行情况,生成该子程序的跟踪数据,并存储跟踪标识符和该单元产生的跟踪数据的对应记录。其中,每个子程序均能够直接读取预先生成的跟踪标识符。
OSGi(Open Service Gateway initiative)技术是面向Java的动态模型系统。OSGi服务平台向Java提供服务,这些服务使Java成为软件集成和软件开发的首选。Java提供在多个平台支持产品的可移植性。OSGi技术提供允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语,这些组件能够组装进一个应用和部署中。基于OSGi技术的上述优点,OSGi技术在Java语言编写的应用程序中得到了广泛应用。
随着OSGi技术在Java应用程序中的广泛应用,在Java应用程序内部执行的流程环节中,程序的跟踪数据可能会经过OSGi环境下的子程序或者非OSGi环境下的子程序。由于OSGi和非OSGi的环境是相互隔离的,因此,非OSGi环境下的程序和OSGi环境下的程序均无法读取在对方环境下声明的变量,例如,OSGi环境下的程序无法读取在非OSGi环境下声明的公共变量。
基于上述原因,对于一个既包括非OSGi环境下的子程序又包括OSGi环境下的子程序的Java应用程序而言,上述跟踪程序运行过程中各个子程序的实际执行情况的方法,无法同时跟踪非OSGi环境和OSGi环境下的子程序分别产生的跟踪数据。
为了能够同时跟踪非OSGi环境和OSGi环境下的子程序分别产生的跟踪数据,目前常用的方法是在各个子程序(非OSGi环境或OSGi环境)的源代码中加入实现程序跟踪功能的代码,即对各个子程序进行源代码级的改造(亦可称为对原分布式系统的侵入)。该方法在业务处理逻辑中耦合进程序跟踪的处理逻辑,其一方面增加了源代码进行改造升级代价以及后续的系统维护代价,另一方面,由于该方法需要侵入原分布式系统中,影响了原分布式系统业务处理的健壮性和可靠性。
综上所述,对一个既包括非OSGi环境下的子程序又包括OSGi环境下的子程序的Java应用程序进行程序跟踪时,现有技术存在程序跟踪的处理逻辑与业务处理逻辑耦合在一起的问题。
发明内容
本申请提一种用于程序跟踪的方法、装置及电子设备,以解决现有技术对一个既包括非OSGi环境下的子程序又包括OSGi环境下的子程序的Java应用程序进行程序跟踪时,存在程序跟踪的处理逻辑与业务处理逻辑耦合在一起的问题。本申请另外提供一种流量控制方法、装置及电子设备。
本申请提供一种用于程序跟踪的方法,包括:
接收调用方发送的对应特定程序的调用请求;
根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;
执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;
其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域。
可选的,所述调用方包括客户端或第三方应用。
可选的,所述跟踪标识符包括所述调用方的IP地址、所述跟踪标识符的生成时间、所述调用请求的标识符或发起所述调用请求的线程标识符或进程标识符,以及调用方所属类别的至少一者。
可选的,所述根据所述调用请求,生成跟踪标识符,包括:
根据所述调用请求,获取所述调用方的IP地址、所述调用请求的标识符或所述发起所述调用请求的线程标识符或进程标识符,以及所述调用方所属类别的至少一者;
根据所述调用方的IP地址、所述调用请求的标识符或所述发起所述调用请求的线程标识符或进程标识符、当前系统时间,以及所述调用方所属类别的至少一者,生成所述跟踪标识符。
可选的,所述跟踪标识符是全局唯一标识符。
可选的,所述根据所述调用请求,生成跟踪标识符,采用如下方式:
生成随机数,作为所述跟踪标识符。
可选的,所述用于存储所述跟踪标识符的存储区域,采用如下方式创建:
在自定义的类加载器中创建所述用于存储所述跟踪标识符的存储区域。
可选的,所述用于存储所述对应记录的存储区域,采用如下方式创建:
在自定义的类加载器中创建所述用于存储所述对应记录的存储区域。
可选的,所述特定程序是指Java程序语言编写的Web应用程序,所述方法还包括:
配置Web容器采用所述自定义的类加载器加载所述特定程序。
可选的,还包括:
在加载所述特定程序的过程中,设置所述特定程序的类加载器为所述自定义的类加载器。
可选的,所述用于存储所述跟踪标识符的存储区域,采用如下方式创建:
调用预定的非Java程序,在所述预定的非Java程序中创建所述用于存储所述跟踪标识符的存储区域。
可选的,所述用于存储所述对应记录的存储区域,采用如下方式创建:
调用预定的非Java程序,在所述预定的非Java程序中创建所述用于存储所述对应记录的存储区域。
可选的,所述子程序的跟踪数据包括:所述子程序的起始执行时间、所述子程序的实际调用参数、所述子程序的执行结果和所述子程序抛出的异常信息的至少一者。
可选的,所述子程序所属的类包括预先编写的生成并存储跟踪数据的方法;所述在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录,包括:
判断所述子程序所属的类是否包括所述生成并存储跟踪数据的方法;
若上述判断结果为是,则通过所述生成并存储跟踪数据的方法,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录。
可选的,所述子程序包括非OSGI的子程序或OSGI的子程序。
可选的,所述用于存储所述对应记录的存储区域采用全局变量或预置的上下文数据容器;所述用于存储所述跟踪标识符的存储区域采用全局变量或预置的上下文数据容器。
可选的,在所述存储跟踪标识符和所述子程序的跟踪数据的对应记录之前,还包括:
激活所述预置的上下文数据容器。
可选的,还包括:
回收所述预置的上下文数据容器。
可选的,在执行所述特定程序包括的各级子程序过程中,如果调用程序运行于第一设备中,被调用程序运行于第二设备中,则所述调用程序将所述跟踪标识符传递给所述被调用程序;
所述在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录,包括:
在所述被调用程序执行后,生成所述被调用程序的跟踪数据;
根据接收到的所述跟踪标识符,所述被调用程序回调所述调用程序,将所述跟踪数据返回给所述调用程序;
所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
可选的,在执行所述特定程序包括的各级子程序过程中,如果调用单元运行于第一设备中,被调用单元运行于第二设备中,则所述调用单元直接调用所述被调用单元;
所述在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录,包括:
在所述被调用程序执行后,生成所述被调用程序的跟踪数据;
所述被调用程序将所述跟踪数据返回给所述调用程序;
所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
相应的,本申请还提供一种用于程序跟踪的装置,包括:
接收单元,用于接收调用方发送的对应特定程序的调用请求;
生成单元,用于根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;
跟踪单元,用于执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;
其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域。
可选的,所述生成单元包括:
获取子单元,用于根据所述调用请求,获取所述调用方的IP地址、所述调用请求的标识符或所述发起所述调用请求的线程标识符或进程标识符,以及所述调用方所属类别的至少一者;
生成子单元,用于根据所述调用方的IP地址、所述调用请求的标识符或所述发起所述调用请求的线程标识符或进程标识符、当前系统时间,以及所述调用方所属类别的至少一者,生成所述跟踪标识符。
可选的,所述用于存储所述跟踪标识符的存储区域,采用如下方式创建:
在自定义的类加载器中创建所述用于存储所述跟踪标识符的存储区域。
可选的,所述用于存储所述对应记录的存储区域,采用如下方式创建:
在自定义的类加载器中创建所述用于存储所述对应记录的存储区域。
可选的,所述特定程序是指Java程序语言编写的Web应用程序,所述装置还包括:
配置单元,用于配置Web容器采用所述自定义的类加载器加载所述特定程序。
可选的,还包括:
动态指定单元,用于在加载所述特定程序的过程中,设置所述特定程序的类加载器为所述自定义的类加载器。
可选的,所述子程序所属的类包括预先编写的生成并存储跟踪数据的方法;所述跟踪单元包括:
判断子单元,用于判断所述子程序所属的类是否包括所述生成并存储跟踪数据的方法;
跟踪子单元,用于若上述判断结果为是,则通过所述生成并存储跟踪数据的方法,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录。
可选的,在执行所述特定程序包括的各级子程序过程中,如果调用程序运行于第一设备中,被调用程序运行于第二设备中,则所述调用程序将所述跟踪标识符传递给所述被调用程序;
所述跟踪子单元包括:
生成子单元,用于在所述被调用程序执行后,生成所述被调用程序的跟踪数据;
回调子单元,用于根据接收到的所述跟踪标识符,所述被调用程序回调所述调用程序,将所述跟踪数据返回给所述调用程序;
存储子单元,用于所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
可选的,在依次执行所述特定程序包括的各级子程序过程中,如果调用单元运行于第一设备中,被调用单元运行于第二设备中,则所述调用单元直接调用所述被调用单元;
所述跟踪子单元包括:
生成子单元,用于在所述被调用程序执行后,生成所述被调用程序的跟踪数据;
返回子单元,用于所述被调用程序将所述跟踪数据返回给所述调用程序;
存储子单元,用于所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
可选的,还包括:
激活单元,用于激活所述预置的上下文数据容器。
可选的,还包括:
回收单元,用于回收所述预置的上下文数据容器。
相应的,本申请还提供一种电子设备,包括:
显示器;
处理器;以及
存储器,用于存储用于程序跟踪的装置,所述用于程序跟踪的装置被所述处理器执行时,包括如下步骤:接收调用方发送的对应特定程序的调用请求;根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域。
此外,本申请还提供一种流量控制方法,包括:
接收调用方发送的对应特定程序的调用请求;
获取当前时间之前预设时间范围内的预存的所述特定程序的历史程序跟踪记录;
根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制。
可选的,所述历史程序跟踪记录采用如下步骤生成:
接收调用方发送的对应所述特定程序的调用请求;
根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;
执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;
将所述跟踪标识符和所述子程序的跟踪数据的对应记录存储到预置的外部存储区域,作为所述历史程序跟踪记录;
其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域。
可选的,所述历史程序跟踪记录存储在数据库中或文本文件中。
可选的,所述根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制,包括:
根据所述历史程序跟踪记录,计算获取在所述当前时间之前预设时间范围内的针对所述特定程序的历史访问量;
判断所述历史访问量是否大于预设的访问量阈值;
若上述判断结果为是,则按照预设的流量控制策略处理所述调用请求。
相应的,本申请还提供一种流量控制装置,包括:
接收单元,用于接收调用方发送的对应特定程序的调用请求;
获取单元,用于获取当前时间之前预设时间范围内的预存的所述特定程序的历史程序跟踪记录;
控制单元,用于根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制。
可选的,还包括:
生成单元,用于生成所述历史程序跟踪记录;
可选的,所述生成单元包括:
接收子单元,用于接收调用方发送的对应所述特定程序的调用请求;
生成子单元,用于根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;
跟踪子单元,用于执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;
存储子单元,用于将所述跟踪标识符和所述子程序的跟踪数据的对应记录存储到预置的外部存储区域,作为所述历史程序跟踪记录;
其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域。
可选的,所述控制单元包括:
计算子单元,用于根据所述历史程序跟踪记录,计算获取在所述当前时间之前预设时间范围内的针对所述特定程序的历史访问量;
判断子单元,用于判断所述历史访问量是否大于预设的访问量阈值;
处理子单元,用于若上述判断结果为是,则按照预设的流量控制策略处理所述调用请求。
相应的,本申请还提供一种电子设备,包括:
显示器;
处理器;以及
存储器,用于存储流量控制装置,所述流量控制装置被所述处理器执行时,包括如下步骤:接收调用方发送的对应特定程序的调用请求;获取当前时间之前预设时间范围内的预存的所述特定程序的历史程序跟踪记录;根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制。
与现有技术相比,本申请具有以下优点:
本申请提供的用于程序跟踪的方法、装置及电子设备,通过接收调用方发送的对应特定程序的调用请求,并根据所述调用请求,生成跟踪标识符,所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据,然后执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录,其中,用于存储所述跟踪标识符和所述对应记录的存储区域,均是指在OSGI和非OSGI的子程序均能够访问的存储区域,使得非OSGi的应用程序在跟踪记录OSGi的子程序的功能运行情况时,能够分离子程序的跟踪处理逻辑和业务处理逻辑,避免对各个子程序进行源代码级的改造,从而达到不影响非OSGi的应用程序业务处理的健壮性和可靠性的效果。
附图说明
图1是本申请的用于程序跟踪的方法实施例的流程图;
图2是本申请的用于程序跟踪的方法实施例步骤S103的具体流程图;
图3是本申请的用于程序跟踪的方法实施例步骤S105的具体流程图;
图4是本申请的用于程序跟踪的方法实施例调用子程序的具体流程图;
图5是本申请的用于程序跟踪的方法实施例调用子程序的又一具体流程图;
图6是本申请的用于程序跟踪的装置实施例的示意图;
图7是本申请的用于程序跟踪的装置实施例的具体示意图;
图8是本申请的用于程序跟踪的装置实施例跟踪单元105的示意图;
图9是本申请的电子设备实施例的示意图;
图10是本申请的流量控制方法实施例的流程图;
图11是本申请的流量控制方法实施例生成历史程序跟踪记录的具体流程图;
图12是本申请的流量控制方法实施例步骤S1005的具体流程图;
图13是本申请的流量控制装置实施例的示意图;
图14是本申请的又一电子设备实施例的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请中,提供了一种用于程序跟踪的方法、装置及电子设备,以及一种流量控制方法、装置及电子设备。在下面的实施例中逐一进行详细说明。
本申请实施例提供的用于程序跟踪的方法,其基本思想是:采用OSGI和非OSGI的子程序均能够访问的内存区域,存储跟踪标识符和跟踪数据,使得OSGI和非OSGI的子程序均能够获取跟踪标识符,并通过为子程序预先编写的生成并存储跟踪数据的模块,使得非OSGi的应用程序在跟踪记录OSGi的子程序的功能运行情况时,能够分离子程序的跟踪处理逻辑和业务处理逻辑,避免对各个子程序进行源代码级的改造。
请参考图1,其为本申请的用于程序跟踪的方法实施例的流程图。所述方法包括如下步骤:
步骤S101:接收调用方发送的对应特定程序的调用请求。
本申请实施例所述的调用方包括客户端或第三方应用。其中,客户端包括但不限于移动通讯设备,即:通常所说的手机或者智能手机,还包括个人电脑、PAD、iPad等终端设备。本申请实施例所述的第三方应用,是指将本申请实施例所述的特定程序作为其部分功能的某种软件或应用,第三方应用可以是由非本申请实施例所述的特定程序编制方的其他组织或个人开发的相关软件。
本申请实施例所述的特定程序是指采用Java程序语言编写的应用程序,包括Java程序语言编写的Web应用程序。Java程序内部包括的各级子程序(也称为服务),既可以是非OSGI的子程序,还可以是OSGI的子程序。所述子程序的业务逻辑存储在类文件中。在本实施例中,所述子程序所属的类包括生成并存储跟踪数据的方法,所述生成并存储跟踪数据的方法,用于执行所述生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录的操作。
在本实施例中,特定程序为Java程序语言编写的Web应用程序,位于服务器端。调用方为客户端,客户端用户通过浏览器向服务器端发送对应特定程序的调用请求,系统为调用请求自动生成调用请求的标识符,即requestId。当服务器端接收到调用请求后,就可以进入步骤S103,根据所述调用请求,生成用于标识特定程序的本次调用所产生的跟踪数据的跟踪标识符。
在实际应用中,如果调用方为第三方应用,则第三方应用通过网络套接字向特定程序所在的服务器发送调用请求。为了对第三方应用发起的调用请求进行标识,可以将第三方应用的调用请求的标识符设置为发起调用请求的线程标识符或进程标识符。
在接收到调用方发送的对应特定程序的调用请求后,通过步骤S103响应该调用请求,根据调用请求,生成所述跟踪标识符。
步骤S103:根据所述调用请求,生成跟踪标识符。
为了能够标识特定程序的本次调用所产生的跟踪数据,以便后期对跟踪数据进行分析等处理,首先需要生成跟踪标识符。在实际应用中,可以采用多种方式生成跟踪标识符,例如:生成随机数的方法等。各种不同的方式都只是具体实施方式的变更,都不偏离本申请的核心,因此都在本申请的保护范围之内。
下面给出一种生成跟踪标识符的优选方法,采用该方法生成的跟踪标识符是全局唯一标识符,以避免两次不同的跟踪数据使用同一跟踪标识符。具体的,采用该方法生成的跟踪标识符包括所述调用方的IP地址、所述跟踪标识符的生成时间、所述调用请求的标识符或发起所述调用请求的线程标识符或进程标识符,以及调用方所属类别的至少一者。
请参考图2,其为本申请的用于程序跟踪的方法实施例步骤S103的具体流程图。在本实施例中,所述根据所述调用请求,生成跟踪标识符,包括:
步骤S1031:根据所述调用请求,获取所述调用方的IP地址、所述调用请求的标识符或所述发起所述调用请求的线程标识符或进程标识符,以及所述调用方所属类别的至少一者。
本申请实施例所述的调用方的IP地址,包括IPv4或IPv6地址。IPv4通常用点分十进制记法书写,例如192.168.0.1,其中的数字都是十进制的数字,中间用实心圆点分隔。IPv6是IETF设计的用于替代现行版本IP协议-IPv4-的下一代IP协议,它由128位二进制数码表示。
本申请实施例所述的调用方所属类别包括客户端或第三方应用。当调用方为客户端时,则系统自动为客户端发送的调用请求生成所述调用请求的标识符;当调用方为第三方应用时,则第三方应用发送的调用请求的标识符,可以为发起所述调用请求的线程标识符或进程标识符。
步骤S1033:根据所述调用方的IP地址、所述调用请求的标识符或所述发起所述调用请求的线程标识符或进程标识符、当前系统时间,以及所述调用方所属类别的至少一者,生成所述跟踪标识符。
在本实施例中,跟踪标识符用“aaaaaaaatttttttttttttccccccfpppp”字符串表示,以保证跟踪标识符达到全局唯一性。字符说明如下:
1)a段是8个字符的IP地址(IPv4的每个段用两位16进制数表示)。
2)t段是13个字符的生成跟踪标识符的毫秒时间。
3)c段是6位(0001-999999)的整数递增量,这个字段采用向特定程序发起调用请求的线程id或者进程id表示。
4)f段是一般用于排查问题,表示调用方所属类别,例如,客户端或第三方应用。
5)p段是(用四位16进制数表示),保留扩展,用于以后业务发展扩展。
下面举例说明本实施例生成跟踪标识符的流程。例如,调用方的IP地址为:58.101.24.207,生成跟踪标识符的流程包括如下步骤:1)根据“.”分隔提取IP地址中的4个数字,58、101、24、207;2)将提取到的58、101、24、207这4个数字从10进制转为16进制数值得到3A、65、18、CF;3)将这4个16进制数字组拼接成3A6518CF,即a段内容;4)获取当前操作系统毫秒时间(这个值操作系统可以提供)作为t段内容,如1425439999142;5)c段内容为发起调用请求时的线程或者进程id,这个值第三方应用系统中可以直接提供,例如,为000001;6)发起调用请求的来源可能是客户端用户或者其他第3方调用来源,这里把f段设置为0;7)p段可以根据未来发展往后扩展,例如,1A02;8)组合生成3A6518CF142543999914200000101A02,作为跟踪标识符。
本申请实施例所述的用于存储所述跟踪标识符的存储区域,是指能够被OSGI和非OSGI的子程序所访问的存储区域。为了使得OSGI和非OSGI的子程序均能够访问所述用于存储所述跟踪标识符的存储区域,至少可以采用如下方式之一创建所述用于存储所述跟踪标识符的存储区域:1)在自定义的类加载器中创建所述用于存储所述跟踪标识符的存储区域;2)调用预定的非Java程序,在所述预定的非Java程序中创建所述用于存储所述跟踪标识符的存储区域。
1)在自定义的类加载器中创建所述用于存储所述跟踪标识符的存储区域。
类加载器(class loader)用来加载Java类到Java虚拟机中。一般来说,Java虚拟机使用Java类的方式如下:Java源程序(.java文件)在经过Java编译器编译之后就被转换成Java字节代码(.class文件)。类加载器负责读取Java字节代码,并转换成java.lang.Class类的一个实例。每个这样的实例用来表示一个Java类。通过此实例的newInstance()方法就可以创建出该类的一个对象。基本上所有的类加载器都是java.lang.ClassLoader类的一个实例。类加载器在Web容器和OSGi中得到了广泛的使用。
Java中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由Java应用开发人员编写的,即自定义的类加载器。例如,下面的代码public classPrcTraceClassLoader extends ClassLoader{public String traceId;},该段代码定义了一个自定义的类加载器PrcTraceClassLoader,通过该类加载器加载的所有类均能够访问在该类加载器中创建的内存区域。Java程序的开发人员可以直接同类加载器进行交互。
在本实施例中,特定程序为Java程序语言编写的Web应用程序。为了能够采用所述自定义的类加载器加载本实施例的Web应用程序,本申请实施例提供的用于程序跟踪的方法,还包括:配置Web容器采用所述自定义的类加载器加载所述特定程序。
在实际应用中,由于一个Web容器中能够运行多个Web应用程序,因此,上述配置Web容器采用自定义的类加载器加载特定程序的方法存在如下缺点:自定义的类加载器将影响其他Web应用程序的类加载方式。为了解决该问题,可以在加载特定程序的过程中,设置特定程序的类加载器为所述自定义的类加载器。采用该方式,实质上是动态地改变了特定程序的类加载器,从而避免自定义的类加载器影响其他Web应用程序的类加载方式。
2)调用预定的非Java程序,在所述预定的非Java程序中创建所述用于存储所述跟踪标识符的存储区域。
采用该方式,可以在特定程序的起始执行处,调用预定的非Java程序,例如,C++程序等,在所述预定的非Java程序中创建所述用于存储所述跟踪标识符的存储区域。
在实际应用中,可以根据具体情况,选择上述两种方式之一创建用于存储所述跟踪标识符的存储区域,以使得OSGI和非OSGI的子程序均能够访问存储跟踪标识符的存储区域。具体的,所述用于存储所述跟踪标识符的存储区域采用全局变量或预置的上下文数据容器。
通过步骤S103生成跟踪标识符后,就能够进入到步骤S105,执行所述特定程序包括的各级子程序,并在程序执行过程中对程序的功能执行情况进行跟踪记录。
步骤S105:执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录。
本申请实施例所述的子程序的跟踪数据包括:所述子程序的起始执行时间、所述子程序的实际调用参数、所述子程序的执行结果和所述子程序抛出的异常信息的至少一者。
本申请实施例提供的用于程序跟踪的方法,是通过为子程序预先编写的生成并存储跟踪数据模块,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录的。在实际应用中,根据具体需求,选择为需要跟踪的子程序预先编写所述生成并存储跟踪数据模块。
请参考图3,其为本申请的用于程序跟踪的方法实施例步骤S105的具体流程图。从特定程序的入口开始,执行特定程序包括的各级子程序。所述在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录,包括:
步骤S301:判断所述子程序所属的类是否包括所述生成并存储跟踪数据的方法。
下面给出一段示例代码,以说明子程序及其所属类中包括的生成并存储跟踪数据模块。示例代码如下所示:
上述代码中pay方法是Java应用程序所调用的一个子程序,当执行完该子程序的业务逻辑后,通过步骤S301判断该子程序所属的类是否包括生成并存储跟踪数据的方法(即:trace方法)。
步骤S303:若上述判断结果为是,则通过所述生成并存储跟踪数据的方法,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录。
如果当前执行的子程序所属的类包括生成并存储跟踪数据的方法,则通过该方法生成该子程序的跟踪数据,并存储跟踪标识符和该子程序的跟踪数据的对应记录。
本申请实施例的用于存储所述对应记录的存储区域,是指能够被OSGI和非OSGI的子程序所访问的存储区域。为了使得OSGI和非OSGI的子程序均能够访问所述用于存储所述对应记录的存储区域,至少可以采用如下方式之一创建所述用于存储所述跟踪标识符的存储区域:1)在自定义的类加载器中创建所述用于存储所述对应记录的存储区域;2)调用预定的非Java程序,在所述预定的非Java程序中创建所述用于存储所述对应记录的存储区域。
具体的,所述用于存储所述对应记录的存储区域,即可以采用全局变量,还可以采用预置的上下文数据容器。在本实施例中,用于存储所述对应记录的存储区域采用预置的上下文数据容器。在实际应用中,通常为一组相关的操作创建一个执行上下文并提供一个共享的数据容器,而不是简单地定义一个全局变量,或者将数据通过参数传来传去。这样的上下文一般具有其生命周期,它们在目标操作开始执行的时候被激活,在执行完成之后被回收。该上下文一般不能跨越多个线程,以避免多个线程操作相同的数据容器造成数据的不一致。
由于本申请实施例采用预置的上下文数据容器存储程序的跟踪数据,因此,在所述存储跟踪标识符和所述子程序的跟踪数据的对应记录之前,还包括:激活所述预置的上下文数据容器。
相应的,在程序运行之后,还包括:回收所述预置的上下文数据容器,以及时回收内存资源,避免资源浪费。
步骤S301给出的示例程序中的trace方法,用于生成Pay业务相关的跟踪数据,并将跟踪标识符和跟踪数据的对应记录存储到上下文数据容器TraceContext中。在所有子程序执行后,最终在特定程序的TraceContext生成如下的跟踪记录:
TraceId:3A6518CF142543999914200000101A02,time=1425439999142,reqid=1;
TraceId:3A6518CF142543999914200000101A02,time=1425439999143,Pay子程序的跟踪数据;
TraceId:3A6518CF142543999914200000101A02,time=1425439999143,Query子程序的跟踪数据。
此外,为了后期能够对程序跟踪数据进行分析,在实际应用中,本申请实施例提供的用于程序跟踪的方法,还包括:将所述跟踪标识符和所述子程序的跟踪数据的对应记录存储到预置的外部存储区域,例如,将所述对应记录存储到文本文件中,以作为日志文件使用。
需要说明的是,在执行特定程序包括的各级子程序过程中,如果调用程序运行于第一设备中,被调用程序运行于第二设备中,假设用于存储跟踪标识符的存储区域和用于存储对应记录的存储区域均是在第一设备中创建的,则调用程序可以采用两种方式调用被调用程序,分别为:1)所述调用程序将所述跟踪标识符传递给所述被调用程序;2)所述调用程序直接调用所述被调用程序。
1)所述调用程序将所述跟踪标识符传递给所述被调用程序。
请参考图4,其为本申请的用于程序跟踪的方法实施例调用子程序的具体流程图。采用本方式,所述调用程序将所述跟踪标识符传递给所述被调用程序。所述在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录,包括如下步骤:
步骤S401:在所述被调用程序执行后,生成所述被调用程序的跟踪数据。
步骤S403:根据接收到的所述跟踪标识符,所述被调用程序回调所述调用程序,将所述跟踪数据返回给所述调用程序。
由于第二设备无法访问在第一设备中创建的存储区域,因此第二设备中的被调用程序自身无法进行有关存取在第一设备中创建的存储区域的操作,例如:获取第一设备中的跟踪标识符的操作,以及存储跟踪数据等操作。采用该方式,调用程序将第一设备中生成的跟踪标识符传递给被调用程序后,调用程序可继续向下执行其它操作(例如,调用其它子程序),而无需等待被调用程序的完成,可见采用该方式,调用程序和被调用程序之间采用异步处理的模式,因此能够提高特定程序的执行效率。当被调用程序生成其跟踪数据后,主动回调所述调用程序,将其跟踪数据返回给所述调用程序。
步骤S405:所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
最终,调用程序根据获取的被调用程序的跟踪数据,存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
2)所述调用程序直接调用所述被调用程序。
请参考图5,其为本申请的用于程序跟踪的方法实施例调用子程序的又一具体流程图。采用本方式,所述调用程序直接调用所述被调用程序;所述在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录,包括如下步骤:
步骤S501:在所述被调用程序执行后,生成所述被调用程序的跟踪数据。
步骤S503:所述被调用程序将所述跟踪数据返回给所述调用程序。
采用该方式,调用程序仅直接调用所述被调用程序,而不传递跟踪标识符,此时,调用程序需要等待被调用程序的完成,方可继续向下执行其它操作(例如,调用其它子程序)。可见,采用该方式,调用程序和被调用程序之间为同步处理的模式,因此该方式较上述传递跟踪标识符的方式而言,程序的执行效率较低。当被调用程序生成其跟踪数据后,直接将跟踪数据作为程序的执行结果返回给所述调用程序,调用程序此时才能够继续向下执行其它操作。
步骤S505:所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
最终,调用程序根据获取的被调用程序的跟踪数据,存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
在本实施例中,采用上述第一种方式,即:调用程序将跟踪标识符传递给被调用程序,解决调用程序和被调用程序不在同一台机器时的调用实现问题,以使得调用程序和被调用程序可以进行异步的操作处理,从而达到提高程序执行效率的效果。
在上述的实施例中,提供了一种用于程序跟踪的方法,与之相对应的,本申请还提供一种用于程序跟踪的装置。该装置是与上述方法的实施例相对应。
请参看图6,其为本申请的用于程序跟踪的装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种用于程序跟踪的装置,其特征在于,包括:
接收单元101,用于接收调用方发送的对应特定程序的调用请求;
生成单元103,用于根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;
跟踪单元105,用于执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;
其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域。
可选的,所述生成单元103包括:
获取子单元,用于根据所述调用请求,获取所述调用方的IP地址、所述调用请求的标识符或所述发起所述调用请求的线程标识符或进程标识符,以及所述调用方所属类别的至少一者;
生成子单元,用于根据所述调用方的IP地址、所述调用请求的标识符或所述发起所述调用请求的线程标识符或进程标识符、当前系统时间,以及所述调用方所属类别的至少一者,生成所述跟踪标识符。
可选的,所述用于存储所述跟踪标识符的存储区域,采用如下方式创建:
在自定义的类加载器中创建所述用于存储所述跟踪标识符的存储区域。
可选的,所述用于存储所述对应记录的存储区域,采用如下方式创建:
在自定义的类加载器中创建所述用于存储所述对应记录的存储区域。
请参看图7,其为本申请的用于程序跟踪的装置实施例的具体示意图。可选的,所述特定程序是指Java程序语言编写的Web应用程序,所述装置还包括:
配置单元200,用于配置Web容器采用所述自定义的类加载器加载所述特定程序。
可选的,还包括:
动态指定单元,用于在加载所述特定程序的过程中,设置所述特定程序的类加载器为所述自定义的类加载器。
请参看图8,其为本申请的用于程序跟踪的装置实施例跟踪单元105的具体示意图。可选的,所述子程序所属的类包括预先编写的生成并存储跟踪数据的方法;所述跟踪单元105包括:
判断子单元1051,用于判断所述子程序所属的类是否包括所述生成并存储跟踪数据的方法;
跟踪子单元1053,用于若上述判断结果为是,则通过所述生成并存储跟踪数据的方法,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录。
可选的,还包括:
激活单元201,用于激活所述预置的上下文数据容器。
可选的,还包括:
回收单元209,用于回收所述预置的上下文数据容器。
可选的,在执行所述特定程序包括的各级子程序过程中,如果调用程序运行于第一设备中,被调用程序运行于第二设备中,则所述调用程序将所述跟踪标识符传递给所述被调用程序;
所述跟踪子单元1053包括:
生成子单元,用于在所述被调用程序执行后,生成所述被调用程序的跟踪数据;
回调子单元,用于根据接收到的所述跟踪标识符,所述被调用程序回调所述调用程序,将所述跟踪数据返回给所述调用程序;
存储子单元,用于所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
可选的,在依次执行所述特定程序包括的各级子程序过程中,如果调用单元运行于第一设备中,被调用单元运行于第二设备中,则所述调用单元直接调用所述被调用单元;
所述跟踪子单元1053包括:
生成子单元,用于在所述被调用程序执行后,生成所述被调用程序的跟踪数据;
返回子单元,用于所述被调用程序将所述跟踪数据返回给所述调用程序;
存储子单元,用于所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
请参考图9,其为本申请的电子设备实施例的示意图。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。
本实施例的一种电子设备,该电子设备包括:显示器901;处理器902;以及存储器9003,用于存储用于程序跟踪的装置,所述用于程序跟踪的装置被所述处理器902执行时,包括如下步骤:接收调用方发送的对应特定程序的调用请求;根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域。
本申请提供的用于程序跟踪的方法、装置及电子设备,通过接收调用方发送的对应特定程序的调用请求,并根据所述调用请求,生成跟踪标识符,所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据,然后执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录,其中,用于存储所述跟踪标识符和所述对应记录的存储区域,均是指在OSGI和非OSGI的子程序均能够访问的存储区域,使得非OSGi的应用程序在跟踪记录OSGi的子程序的功能运行情况时,能够分离子程序的跟踪处理逻辑和业务处理逻辑,避免对各个子程序进行源代码级的改造,从而达到不影响非OSGi的应用程序业务处理的健壮性和可靠性的效果。
与上述的用于程序跟踪的方法相对应,本申请还提供一种流量控制方法。请参考图10,其为本申请的流量控制方法实施例的流程图,本实施例与第一实施例内容相同的部分不再赘述,请参见实施例一中的相应部分。本申请提供的一种流量控制方法,所述方法包括如下步骤:
步骤S1001:接收调用方发送的对应特定程序的调用请求。
本申请实施例所述的调用方、特定程序,与上述用于程序跟踪的方法的实施例一中的对应概念是一致的,此处不再赘述,相关说明详见上述实施例一的部分说明。
步骤S1003:获取当前时间之前预设时间范围内的预存的所述特定程序的历史程序跟踪记录。
本申请实施例所述的特定程序的历史程序跟踪记录,是指特定程序运行过程中产生的程序跟踪数据。具体的,程序跟踪数据包括:特定程序包括的各级子程序的起始执行时间、所述子程序的实际调用参数、所述子程序的执行结果和所述子程序抛出的异常信息的至少一者。
针对调用方发出的每一次调用请求,均对应一个调用请求标识符。在本实施例中,当调用方为客户端时,调用请求的标识符为系统自动为调用请求生成的调用请求的标识符;当调用方为第三方应用时,则调用请求的标识符为第三方应用发起调用请求的线程标识符或进程标识符。在实际应用中,还可以采用其他方式生成调用请求的标识符,例如:生成随机数的方法等。各种不同的方式都只是具体实施方式的变更,都不偏离本申请的核心,因此都在本申请的保护范围之内。
例如,当3个客户端用户在同一时间访问同一特定程序时,产生的历史程序跟踪数据如下所示:
每次访问特定程序所产生的程序跟踪数据均被记录保存,作为该特定程序的历史程序跟踪记录。在实际应用中,可以将这些程序跟踪记录保存到数据库或者硬盘等存储设备。
请参考图11,其为本申请的流量控制方法实施例生成历史程序跟踪记录的具体流程图,本申请实施例所述的历史程序跟踪记录采用如下步骤生成:
步骤S1101:接收调用方发送的对应所述特定程序的调用请求。
步骤S1103:根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据。
步骤S1105:执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录。
本申请实施例所述的用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域。
步骤S1101、步骤S1103和步骤S1105分别与上述实施例一中的步骤S101、步骤S103和步骤S105相对应,相同之处此处不再赘述,详见实施例一中的相关说明。
步骤S1107:将所述跟踪标识符和所述子程序的跟踪数据的对应记录存储到预置的外部存储区域,作为所述历史程序跟踪记录。
当通过步骤S1105,执行完将所述特定程序包括的各级子程序后,还需要将所述跟踪标识符和所述子程序的跟踪数据的对应记录存储到预置的外部存储区域,例如,将所述对应记录存储到文本文件或数据库中,以作为历史程序跟踪记录,供离线分析处理用。
通过步骤S1003,获取当前时间之前预设时间范围内的预存的所述特定程序的历史程序跟踪记录。假设当前时间为1425439999145,根据当前系统时间,将在1425439999145时间点之前预设时间范围(例如:10ms)内的数据取出。需要说明的是,对于每次历史调用请求只取一条程序跟踪数据即可,原因在于:一条程序跟踪数据即可表明一次历史调用请求。
步骤S1005:根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制。
请参考图12,其为本申请的流量控制方法实施例步骤S1005的具体流程图。在本实施例中,所述根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制,包括:
步骤S10051:根据所述历史程序跟踪记录,计算获取在所述当前时间之前预设时间范围内的针对所述特定程序的历史访问量。
将步骤S1003提取到的历史程序跟踪记录记为数据集A,从数据集A可以计算获得预设时间范围内对于特定程序的用户访问量。然后,根据用户访问量,就可以进行用户访问流量控制。
在实际应用中,当需要对特定程序的某个子程序(也称为“服务”)的流量进行控制时,例如,希望控制serviceA的服务访问量,那么取出预设时间范围内内带serviceA标记的程序跟踪记录,记为数据集B,则这个数据集B为serviceA在预设时间范围内内的访问情况,根据数据集B可以对serviceA进行流量控制。
步骤S10053:判断所述历史访问量是否大于预设的访问量阈值。
当需要对特定程序进行流量控制处理时,需要为所述特定程序预设访问量阈值。在获取到当前时间之前预设时间范围内的历史访问量后,将历史访问量与预设的访问量阈值相比较,判断历史访问量是否大于预设的访问量阈值。
步骤S10055:若上述判断结果为是,则按照预设的流量控制策略处理所述调用请求。
如果历史访问量是否大于预设的访问量阈值,则表明特定程序需要进行流量控制处理。在实际应用中,按照为特定程序预设的流量控制策略处理调用方方发送的调用请求。
在上述的实施例中,提供了一种流量控制方法,与之相对应的,本申请还提供一种流量控制装置。该装置是与上述方法的实施例相对应。
请参看图13,其为本申请的流量控制装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种流量控制装置,其特征在于,包括:
接收单元1301,用于接收调用方发送的对应特定程序的调用请求;
获取单元1303,用于获取当前时间之前预设时间范围内的预存的所述特定程序的历史程序跟踪记录;
控制单元1305,用于根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制。
可选的,还包括:
生成单元,用于生成所述历史程序跟踪记录;
可选的,所述生成单元包括:
接收子单元,用于接收调用方发送的对应所述特定程序的调用请求;
生成子单元,用于根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;
跟踪子单元,用于执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;
存储子单元,用于将所述跟踪标识符和所述子程序的跟踪数据的对应记录存储到预置的外部存储区域,作为所述历史程序跟踪记录;
其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域。
可选的,所述控制单元1305包括:
计算子单元,用于根据所述历史程序跟踪记录,计算获取在所述当前时间之前预设时间范围内的针对所述特定程序的历史访问量;
判断子单元,用于判断所述历史访问量是否大于预设的访问量阈值;
处理子单元,用于若上述判断结果为是,则按照预设的流量控制策略处理所述调用请求。
请参考图14,其为本申请的又一电子设备实施例的示意图。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。
本实施例的又一种电子设备,该电子设备包括:显示器1401;处理器1402;以及存储器1403,用于存储流量控制装置,所述流量控制装置被所述处理器1402执行时,包括如下步骤:接收调用方发送的对应特定程序的调用请求;获取当前时间之前预设时间范围内的预存的所述特定程序的历史程序跟踪记录;根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制。
本申请提供的流量控制方法、装置及电子设备,通过接收调用方发送的对应特定程序的调用请求,获取当前时间之前预设时间范围内的预存的所述特定程序的历史程序跟踪记录,并根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制,能够实现根据特定程序的历史程序跟踪记录,对特定程序进行流量控制。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

Claims (31)

1.一种用于程序跟踪的方法,其特征在于,包括:
接收调用方发送的对应特定程序的调用请求;
根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;
执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;
其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域,在自定义的类加载器中创建所述用于存储所述跟踪标识符的存储区域和所述用于存储所述对应记录的存储区域。
2.根据权利要求1所述的用于程序跟踪的方法,其特征在于,所述调用方包括客户端或第三方应用。
3.根据权利要求1所述的用于程序跟踪的方法,其特征在于,所述跟踪标识符包括所述调用方的IP地址、所述跟踪标识符的生成时间、所述调用请求的标识符或发起所述调用请求的线程标识符或进程标识符,以及调用方所属类别的至少一者。
4.根据权利要求3所述的用于程序跟踪的方法,其特征在于,所述根据所述调用请求,生成跟踪标识符,包括:
根据所述调用请求,获取所述调用方的IP地址、所述调用请求的标识符或所述发起所述调用请求的线程标识符或进程标识符,以及所述调用方所属类别的至少一者;
根据所述调用方的IP地址、所述调用请求的标识符或所述发起所述调用请求的线程标识符或进程标识符、当前系统时间,以及所述调用方所属类别的至少一者,生成所述跟踪标识符。
5.根据权利要求1所述的用于程序跟踪的方法,其特征在于,所述跟踪标识符是全局唯一标识符。
6.根据权利要求1所述的用于程序跟踪的方法,其特征在于,所述根据所述调用请求,生成跟踪标识符,采用如下方式:
生成随机数,作为所述跟踪标识符。
7.根据权利要求1所述的用于程序跟踪的方法,其特征在于,所述特定程序是指Java程序语言编写的Web应用程序,所述方法还包括:
配置Web容器采用所述自定义的类加载器加载所述特定程序。
8.根据权利要求1所述的用于程序跟踪的方法,其特征在于,还包括:
在加载所述特定程序的过程中,设置所述特定程序的类加载器为所述自定义的类加载器。
9.根据权利要求1所述的用于程序跟踪的方法,其特征在于,所述子程序的跟踪数据包括:所述子程序的起始执行时间、所述子程序的实际调用参数、所述子程序的执行结果和所述子程序抛出的异常信息的至少一者。
10.根据权利要求1所述的用于程序跟踪的方法,其特征在于,所述子程序所属的类包括预先编写的生成并存储跟踪数据的方法;所述在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录,包括:
判断所述子程序所属的类是否包括所述生成并存储跟踪数据的方法;
若上述判断结果为是,则通过所述生成并存储跟踪数据的方法,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录。
11.根据权利要求1所述的用于程序跟踪的方法,其特征在于,所述子程序包括非OSGI的子程序或OSGI的子程序。
12.根据权利要求1所述的用于程序跟踪的方法,其特征在于,在所述存储跟踪标识符和所述子程序的跟踪数据的对应记录之前,还包括:
激活预置的上下文数据容器。
13.根据权利要求12所述的用于程序跟踪的方法,其特征在于,还包括:
回收所述预置的上下文数据容器。
14.根据权利要求1所述的用于程序跟踪的方法,其特征在于,在执行所述特定程序包括的各级子程序过程中,如果调用程序运行于第一设备中,被调用程序运行于第二设备中,则所述调用程序将所述跟踪标识符传递给所述被调用程序;
所述在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录,包括:
在所述被调用程序执行后,生成所述被调用程序的跟踪数据;
根据接收到的所述跟踪标识符,所述被调用程序回调所述调用程序,将所述跟踪数据返回给所述调用程序;
所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
15.根据权利要求1所述的用于程序跟踪的方法,其特征在于,在执行所述特定程序包括的各级子程序过程中,如果调用单元运行于第一设备中,被调用单元运行于第二设备中,则所述调用单元直接调用所述被调用单元;
所述在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录,包括:
在所述被调用程序执行后,生成被调用程序的跟踪数据;
所述被调用程序将所述跟踪数据返回给所述调用程序;
所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
16.一种用于程序跟踪的装置,其特征在于,包括:
接收单元,用于接收调用方发送的对应特定程序的调用请求;
生成单元,用于根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;
跟踪单元,用于执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;
其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域,在自定义的类加载器中创建所述用于存储所述跟踪标识符的存储区域和所述用于存储所述对应记录的存储区域。
17.根据权利要求16所述的用于程序跟踪的装置,其特征在于,所述生成单元包括:
获取子单元,用于根据所述调用请求,获取所述调用方的IP地址、所述调用请求的标识符或发起所述调用请求的线程标识符或进程标识符,以及所述调用方所属类别的至少一者;
生成子单元,用于根据所述调用方的IP地址、所述调用请求的标识符或所述发起所述调用请求的线程标识符或进程标识符、当前系统时间,以及所述调用方所属类别的至少一者,生成所述跟踪标识符。
18.根据权利要求16所述的用于程序跟踪的装置,其特征在于,所述特定程序是指Java程序语言编写的Web应用程序,所述装置还包括:
配置单元,用于配置Web容器采用所述自定义的类加载器加载所述特定程序。
19.根据权利要求16所述的用于程序跟踪的装置,其特征在于,还包括:
动态指定单元,用于在加载所述特定程序的过程中,设置所述特定程序的类加载器为所述自定义的类加载器。
20.根据权利要求16所述的用于程序跟踪的装置,其特征在于,所述子程序所属的类包括预先编写的生成并存储跟踪数据的方法;所述跟踪单元包括:
判断子单元,用于判断所述子程序所属的类是否包括所述生成并存储跟踪数据的方法;
跟踪子单元,用于若上述判断结果为是,则通过所述生成并存储跟踪数据的方法,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录。
21.根据权利要求20所述的用于程序跟踪的装置,其特征在于,在执行所述特定程序包括的各级子程序过程中,如果调用程序运行于第一设备中,被调用程序运行于第二设备中,则所述调用程序将所述跟踪标识符传递给所述被调用程序;
所述跟踪子单元包括:
生成子单元,用于在所述被调用程序执行后,生成所述被调用程序的跟踪数据;
回调子单元,用于根据接收到的所述跟踪标识符,所述被调用程序回调所述调用程序,将所述跟踪数据返回给所述调用程序;
存储子单元,用于所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
22.根据权利要求20所述的用于程序跟踪的装置,其特征在于,在依次执行所述特定程序包括的各级子程序过程中,如果调用单元运行于第一设备中,被调用单元运行于第二设备中,则所述调用单元直接调用所述被调用单元;
所述跟踪子单元包括:
生成子单元,用于在所述被调用程序执行后,生成所述被调用程序的跟踪数据;
返回子单元,用于所述被调用程序将所述跟踪数据返回给所述调用程序;
存储子单元,用于所述调用程序存储所述跟踪标识符和所述被调用程序的跟踪数据的对应记录。
23.根据权利要求16所述的用于程序跟踪的装置,其特征在于,还包括:
激活单元,用于激活预置的上下文数据容器。
24.根据权利要求16所述的用于程序跟踪的装置,其特征在于,还包括:
回收单元,用于回收预置的上下文数据容器。
25.一种电子设备,其特征在于,包括:
显示器;
处理器;以及
存储器,用于存储用于程序跟踪的装置,所述用于程序跟踪的装置被所述处理器执行时,包括如下步骤:接收调用方发送的对应特定程序的调用请求;根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域,在自定义的类加载器中创建所述用于存储所述跟踪标识符的存储区域和所述用于存储所述对应记录的存储区域。
26.一种流量控制方法,其特征在于,包括:
接收调用方发送的对应特定程序的调用请求;
获取当前时间之前预设时间范围内的预存的所述特定程序的历史程序跟踪记录;
根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制,所述历史程序跟踪记录采用如下步骤生成:
接收调用方发送的对应所述特定程序的调用请求;
根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;
执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;
将所述跟踪标识符和所述子程序的跟踪数据的对应记录存储到预置的外部存储区域,作为所述历史程序跟踪记录;
其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域,所述存储区域采用如下方式创建:在自定义的类加载器中创建所述用于存储所述跟踪标识符的存储区域和所述用于存储所述对应记录的存储区域。
27.根据权利要求26所述的流量控制方法,其特征在于,所述历史程序跟踪记录存储在数据库中或文本文件中。
28.根据权利要求26所述的流量控制方法,其特征在于,所述根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制,包括:
根据所述历史程序跟踪记录,计算获取在所述当前时间之前预设时间范围内的针对所述特定程序的历史访问量;
判断所述历史访问量是否大于预设的访问量阈值;
若上述判断结果为是,则按照预设的流量控制策略处理所述调用请求。
29.一种流量控制装置,其特征在于,包括:
接收单元,用于接收调用方发送的对应特定程序的调用请求;
获取单元,用于获取当前时间之前预设时间范围内的预存的所述特定程序的历史程序跟踪记录;
控制单元,用于根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制;
其中,所述的流量控制装置,还包括:生成单元,用于生成所述历史程序跟踪记录;
所述生成单元包括:
接收子单元,用于接收调用方发送的对应所述特定程序的调用请求;
生成子单元,用于根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;
跟踪子单元,用于执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;
存储子单元,用于将所述跟踪标识符和所述子程序的跟踪数据的对应记录存储到预置的外部存储区域,作为所述历史程序跟踪记录;
其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域,所述存储区域采用如下方式创建:在自定义的类加载器中创建所述用于存储所述跟踪标识符的存储区域和所述用于存储所述对应记录的存储区域。
30.根据权利要求29所述的流量控制装置,其特征在于,所述控制单元包括:
计算子单元,用于根据所述历史程序跟踪记录,计算获取在所述当前时间之前预设时间范围内的针对所述特定程序的历史访问量;
判断子单元,用于判断所述历史访问量是否大于预设的访问量阈值;
处理子单元,用于若上述判断结果为是,则按照预设的流量控制策略处理所述调用请求。
31.一种电子设备,其特征在于,包括:
显示器;
处理器;以及
存储器,用于存储流量控制装置,所述流量控制装置被所述处理器执行时,包括如下步骤:接收调用方发送的对应特定程序的调用请求;获取当前时间之前预设时间范围内的预存的所述特定程序的历史程序跟踪记录;根据获取的所述历史程序跟踪记录,对所述调用方进行流量控制,所述历史程序跟踪记录采用如下步骤生成:
接收调用方发送的对应所述特定程序的调用请求;
根据所述调用请求,生成跟踪标识符;所述跟踪标识符用于标识所述特定程序的本次调用所产生的跟踪数据;
执行所述特定程序包括的各级子程序,针对至少一个所述子程序,在所述子程序执行后,生成所述子程序的跟踪数据,并存储所述跟踪标识符和所述子程序的跟踪数据的对应记录;
将所述跟踪标识符和所述子程序的跟踪数据的对应记录存储到预置的外部存储区域,作为所述历史程序跟踪记录;
其中,用于存储所述跟踪标识符的存储区域和用于存储所述对应记录的存储区域,是指OSGI和非OSGI的子程序均能够访问的存储区域,所述存储区域采用如下方式创建:在自定义的类加载器中创建所述用于存储所述跟踪标识符的存储区域和所述用于存储所述对应记录的存储区域。
CN201510378223.6A 2015-07-01 2015-07-01 一种用于程序跟踪的方法、装置及电子设备 Active CN106326099B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510378223.6A CN106326099B (zh) 2015-07-01 2015-07-01 一种用于程序跟踪的方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510378223.6A CN106326099B (zh) 2015-07-01 2015-07-01 一种用于程序跟踪的方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN106326099A CN106326099A (zh) 2017-01-11
CN106326099B true CN106326099B (zh) 2019-10-29

Family

ID=57726218

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510378223.6A Active CN106326099B (zh) 2015-07-01 2015-07-01 一种用于程序跟踪的方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN106326099B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108121910B (zh) * 2017-12-26 2022-02-08 江苏中科云控智能工业装备有限公司 一种安全的虚拟化业务流程跟踪方法
CN108228165B (zh) * 2018-01-05 2021-02-02 武汉斗鱼网络科技有限公司 一种记录程序接口间调用信息的方法及电子设备
CN109522132A (zh) * 2018-11-27 2019-03-26 郑州云海信息技术有限公司 一种标识生成的方法及装置
CN109583198B (zh) * 2018-12-12 2021-06-08 北京字节跳动网络技术有限公司 监测页面的方法、装置、存储介质及电子设备
CN109918101A (zh) * 2019-01-28 2019-06-21 努比亚技术有限公司 终端及其应用组件管理方法、计算机可读存储介质
CN111625431B (zh) * 2019-02-28 2022-04-22 华为技术有限公司 一种日志信息生成方法、装置及电子设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8893156B2 (en) * 2009-03-24 2014-11-18 Microsoft Corporation Monitoring of distributed applications
US8635617B2 (en) * 2010-09-30 2014-01-21 Microsoft Corporation Tracking requests that flow between subsystems using transaction identifiers for generating log data
CN102831043B (zh) * 2011-06-17 2015-05-20 阿里巴巴集团控股有限公司 应用程序监控方法和装置
CN103107948B (zh) * 2011-11-15 2016-02-03 阿里巴巴集团控股有限公司 一种流量控制方法和装置
CN104182346A (zh) * 2014-08-29 2014-12-03 曙光信息产业(北京)有限公司 一种适用于osgi的检测框架

Also Published As

Publication number Publication date
CN106326099A (zh) 2017-01-11

Similar Documents

Publication Publication Date Title
CN106326099B (zh) 一种用于程序跟踪的方法、装置及电子设备
US11663110B2 (en) Analysis to check web API code usage and specification
EP3011442B1 (en) Method and apparatus for customized software development kit (sdk) generation
CN110365751B (zh) 网关系统的业务处理方法、装置及设备
CN110249307A (zh) 用于在区块链上执行原生合约的系统和方法
CN108156022A (zh) 一种服务调用方法、装置及电子设备
CN108369591B (zh) 用于缓存和参数化ir的系统和方法
US10997062B1 (en) System and method for implementing an automated regression testing module
CN113722020B (zh) 接口调用方法、装置和计算机可读存储介质
CN111399840B (zh) 一种模块开发方法及装置
CN104935660B (zh) 一种云程序开发运行系统、方法及装置
CN104102701B (zh) 一种基于hive的历史数据存档与查询方法
CN103152391A (zh) 一种日志输出方法和装置
CN109947624A (zh) 状态监控方法及装置
US10691764B2 (en) Search engine optimization techniques
CN113268243A (zh) 内存预测方法及装置、存储介质、电子设备
CN109062714A (zh) 远程控制安卓设备的方法、装置及电子设备
CN110187986B (zh) 一种命令管理方法、系统、装置及计算机可读存储介质
CN111159301A (zh) 一种基于智能合约的数据创建方法、装置、设备及存储介质
CN110362341A (zh) 基于微服务架构的业务管理方法、装置、设备和存储介质
CN110018831B (zh) 程序处理方法、装置及计算机可读存储介质
CN110659022B (zh) 一种基于Java自动调用Python脚本的方法
CN109840133A (zh) 应用功能的运行方法及装置
CN105988785A (zh) 一种rpc服务开发方法及装置
CN110389754A (zh) 业务处理方法、系统、服务器、终端、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant