发明内容
本发明要解决的技术问题是提供一种分布式服务系统的性能监控装置和方法,解决若分布式服务系统出现性能问题,现有技术需要依次排查几个服务才能定位问题的缺陷。
为解决上述技术问题,本发明的实施例提供一种分布式服务系统的性能监控装置,所述分布式服务系统包括应用服务器,应用服务器用于执行服务流程所包括的至少一项工作,一项工作包括至少一项任务,所述任务具有对应的性能统计数据;性能监控装置包括:性能统计组件,与一个应用服务器连接或者嵌入应用服务器,用于提供性能统计接口,通过所述性能统计接口从应用服务器接收任务的性能统计数据;性能分析组件,用于根据所述性能统计数据统计出对应的应用服务器执行工作的实时性能。
所述的性能监控装置中,性能统计组件具体是可复用代码库,用于向所述性能分析组件提供对外接口,通过所述对外接口向所述性能分析组件发送所述性能统计数据,或者供所述性能分析组件主动获取所述性能统计数据。
所述的性能监控装置中,性能统计组件具体是可复用代码库,用于在内存中保存所述性能统计数据,供所述性能分析组件定时从所述内存中采样所述性能统计数据。
所述的性能监控装置中,性能分析组件具体是性能分析服务器;性能分析服务器包括:耗时成功率计算模块,用于根据对应的应用服务器的性能统计数据,统计出实时性能中的平均耗时和成功率。
所述的性能监控装置中,性能分析组件包括:第一表格管理模块,用于将获取的性能统计数据存放到第一表格中,并记录下当前纳秒级时间作为所述性能统计数据对应的任务的启动时间;当所述任务结束执行时,将对应的性能统计数据的记录移出第一表格。
所述的性能监控装置中,性能分析组件包括:第二表格管理模块,用于计算出一个任务的运行持续时间以及相对于所属应用服务的偏移时间,并把计算结果记录在第二表格中,形成实时性能的记录。
所述的性能监控装置中,性能分析组件包括:显示单元,用于根据自身策略显示所述性能统计数据和实时性能,以及按分钟、小时或者天将性能统计数据和实时性能归档保存到数据库中。
一种分布式服务系统的性能监控方法,应用于分布式服务系统,分布式服务系统包括应用服务器,应用服务器执行服务流程所包括的至少一项工作,一项工作包括至少一项任务,所述任务具有对应的性能统计数据;方法包括:设置性能统计接口,通过所述性能统计接口从应用服务器接收任务的性能统计数据;根据所述性能统计数据统计出对应的应用服务器执行工作的实时性能。
所述的方法中,根据所述性能统计数据统计出对应的应用服务器执行工作的实时性能具体包括:根据对应的应用服务器的性能统计数据,统计出实时性能中的平均耗时和成功率。
所述的方法中,根据所述性能统计数据统计出对应的应用服务器执行工作的实时性能包括:将获取的性能统计数据存放到第一表格TaskRunningTable中,并记录下当前纳秒级时间作为所述性能统计数据对应的任务的启动时间;当所述任务结束执行时,将对应的性能统计数据的记录移出第一表格;计算出一个任务的运行持续时间以及相对于所属应用服务的偏移时间,并把计算结果记录在第二表格TaskAverageTable中,形成实时性能的记录。
本发明的上述技术方案的有益效果如下:在应用服务器执行一项工作的过程中,由于执行一项工作是通过执行这个工作的若干个任务来实现的,通过提取任务的性能统计数据,并对这些任务的性能统计数据进行分析,能够得到不同任务的实时性能。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
本发明提供了追踪一项工作的技术,将一项工作进行分解统计,通过图形展现的方式显示出这一项工作的任务(Task)组成、每个任务执行的成功率、平均耗时,进而为服务优化提供参考。将这些统计数据保存下来,这些长期的执行数据能为运维人员提供参考。
应用服务实际承载任务,接受客户端的请求并处理,应用服务包括至少一个任务。一个完整工作的执行过程,如图1所示,需要两个应用服务App1和App2,App1中执行任务TaskA和TaskD,App2中执行TaskB和TaskC,其中,TaskB和TaskC可以并发执行也可以顺序执行。
本发明实施例提供一种分布式服务系统的性能监控装置,如图2所示,所述分布式服务系统包括应用服务器,应用服务器用于执行服务流程所包括的至少一项工作,一项工作包括至少一项任务,所述任务具有对应的性能统计数据;
性能监控装置包含:
性能统计组件,与一个应用服务器连接或者嵌入应用服务器,用于提供性能统计接口,通过所述性能统计接口从应用服务器接收任务的性能统计数据;
性能分析组件,用于根据所述性能统计数据统计出对应的应用服务器执行工作的实时性能。
应用所提供的技术,在应用服务器执行一项工作的过程中,由于执行一项工作是通过执行这个工作的若干个任务来实现的,通过提取任务的性能统计数据,并对这些任务的性能统计数据进行分析,能够得到不同任务的实时性能。
性能统计数据包括任务的开始信息、结束信息。性能统计组件向应用服务器提供给应用服务性能计数的接口,在一个优选实施例中,性能统计组件具体是可复用代码库,向所述性能分析组件提供对外接口,通过所述对外接口向所述性能分析组件发送所述性能统计数据,或者供所述性能分析组件主动获取所述性能统计数据。
为不影响应用服务器的执行效率,在一个优选实施例中,性能统计组件具体是可复用代码库,用于在内存中保存所述性能统计数据,供所述性能分析组件定时从所述内存中采样所述性能统计数据。
性能统计组件的元数据设计:任务Task是最小执行单位,如图3所示,一个任务Task的执行伪代码表示为:
用于记录任务Task执行过程的统计类TaskTrace则是:
在一个优选实施例中,性能分析组件包括:
第一表格管理模块,用于将获取的性能统计数据存放到第一表格TaskRunningTable中,并记录下当前纳秒级时间作为所述性能统计数据对应的任务的启动时间;
当所述任务结束执行时,将对应的性能统计数据的记录移出第一表格。
性能统计数据以若干条记录的形式存放在TaskRunningTable中。
表1-TaskRunningTable 存储当前运行的TaskTrace的纪录数据集
性能统计组件TaskTraceManager设计:TaskTraceManager中有两个存储列表,一个存储当前正在运行的Task的信息TaskRunningTable,一个存储Task的性能统计数据TaskAverageTable。
在一个优选实施例中,性能分析组件包括:
第二表格管理模块,用于计算出一个任务的运行持续时间以及相对于所属应用服务的偏移时间,并把计算结果记录在第二表格TaskAverageTable中,形成实时性能的记录。
性能统计数据记录若干条记录的形式存放在TaskAverageTable中。
表2-TaskAverageTable存储Task的性能统计数据记录的数据集
表2中第1条记录-App1中Task为空的记录,表示了App1整个流程的性能统计数据,同理,第3条记录-App2中Task为空的记录,表示了App2整个流程的性能统计数据。其余的任务Task不为空的记录,表示这一任务Task的性能统计数据。
App是一个应用服务所能提供的工作内容,一个App由一个或多个任务Task组成,这些任务Task可以是顺序执行也可以并行,一个App的工作也可以作为另一个App的一部分。如图3所示,App1的执行伪代码是:
在App的执行过程中,需要记录App的启动时间和结束时间,以及每个任务Task的执行时间、结束时间。一个App有可能需要在内部又调用其他的App,若App调用了其他的App,那么两个App是嵌套关系,通过性能统计数据记录中的ParentAppId关联两个App。
Task的执行统计算法:
以App1的TaskA的记录TaskId=10031为例,如图3所示,说明TasKTrace的信息是如何进行统计分析的。
在一个优选实施例中,如图4所示,性能分析组件具体是性能分析服务器;
性能分析服务器包括:耗时成功率计算模块,用于根据对应的应用服务器的性能统计数据,统计出实时性能中的平均耗时和成功率。
性能分析服务器面向开发及运维人员,通过界面方式向开发运维人员展示当前某项工作的执行频率、平均耗时以及此工作每个任务的平均耗时等信息,供性能调优参考。
在一个优选实施例中,性能分析组件包括:显示单元,用于根据自身策略显示所述性能统计数据和实时性能,以及按分钟、小时或者天将性能统计数据和实时性能归档保存到数据库中。
在一个应用场景中,存在一个分布式服务的调用流程,分布式服务性能监控的流程包括:
步骤1,运维人员或者开发人员通过界面操作,设定对分布式服务App1的时时监控和归档设置。设定的内容包括:实时抓取的频率(以毫秒为单位),显示的最小单位(以毫秒为单位),归档的时间间隔(以分钟为单位)。
步骤2,性能分析服务其收到请求后,会根据设定,定时去应用服务器App1抓取性能统计数据。能够得到数据集表中的第1,2,3和6条。
步骤3,App1的每一次业务调用,都会调用性能统计组件,将App1的性能统计数据进行更新,这些性能统计数据只保存在内存中。
步骤4,性能分析服务器将抓取到的App1的实时信息显示在界面上,并按照归档的设定,将这些性能统计数据存入数据库中。
归档的逻辑是可以设定的,比如1小时内的数据按照秒保存,1小时以上1个月之内的数据按照分钟保存,1个月之上数据按照小时保存。
步骤5,根据App1的性能分析情况,开发人员会发现App1调用了App2的服务,因此可以在界面增加对App2服务的监控。
步骤6,App2的每一次业务调用,都会调用性能统计组件,将App2的性能统计数据进行更新,这些性能统计数据只保存在内存中。
步骤7,性能分析服务器将抓取到的App2的实时信息显示在界面上,并按照归档的设定将这些性能统计数据存入数据库中。
步骤8,最终会形成一个类似于表1的数据集表,详细记录一次分布式调用中每个步骤地平均耗时以及成功率。
步骤9,性能分析服务器会将汇集的实时信息(实时性能统计数据)在界面显示出来。
步骤10,如果开发人员和运维人员希望长期跟踪这个流程,可以把这个查询作为一个执行计划保存下来,性能分析服务器会定时到应用服务器抓取性能统计数据,按照归档的设定保存在本地数据库中。
本发明实施例提供一种分布式服务系统的性能监控方法,应用于分布式服务系统,分布式服务系统包括应用服务器,应用服务器执行服务流程包括的至少一项工作,一项工作包括至少一项任务,所述任务具有对应的性能统计数据;
如图4所示,方法包括:
步骤401,设置性能统计接口,通过所述性能统计接口从应用服务器接收任务的性能统计数据;
步骤402,根据所述性能统计数据统计出对应的应用服务器执行工作的实时性能。
在一个优选实施例中,根据所述性能统计数据统计出对应的应用服务器执行工作的实时性能具体包括:
根据对应的应用服务器的性能统计数据,统计出实时性能中的平均耗时和成功率。
在一个优选实施例中,根据所述性能统计数据统计出对应的应用服务器执行工作的实时性能包括:
将获取的性能统计数据存放到第一表格TaskRunningTable中,并记录下当前纳秒级时间作为所述性能统计数据对应的任务的启动时间;当所述任务结束执行时,将对应的性能统计数据的记录移出第一表格;
计算出一个任务的运行持续时间以及相对于所属应用服务的偏移时间,并把计算结果记录在第二表格TaskAverageTable中,形成实时性能的记录。
采用本方案之后的优势是:在应用服务器执行一项工作的过程中,由于执行一项工作是通过执行这个工作的若干个任务来实现的,通过提取任务的性能统计数据,并对这些任务的性能统计数据进行分析,能够得到不同任务的实时性能。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。