多系统的方法调用链路图的生成及显示方法与流程

文档序号:19745243发布日期:2020-01-21 18:15阅读:2049来源:国知局
多系统的方法调用链路图的生成及显示方法与流程

本发明涉及数据处理的方法,具体讲是多系统的方法调用链路图的生成及显示方法。



背景技术:

在日常的软件开发和测试过程中,对软件中正在修改或者测试的方法,开发人员或者测试人员不清楚该方法被上游或者下游哪些系统调用以及具体的调用方法与方式。目前解决上述问题的方式有两种,第一种是由各系统的开发人员,手动登记对外提供的方法,以及调用的外部方法。这种方式由于依靠人工手动登记,因此非常耗时且容易遗漏。另外该方式不能体现某个方法在所有系统的层级调用关系,例如对4个系统(a,b,c,d)的4个方法(methoda,methodb,methodc,methodd),构成调用全链路:

a(methoda)->b(methodb)->c(methodc)->d(methodd),该方法只能获得某一个方法的链路调用关系,比如查询methodc,只能获得c(methodc)->d(methodd)或者b(methodb)->c(methodc),不能获得全面的全链路调用关系a(methoda)->b(methodb)->c(methodc)->d(methodd)。

第二种方式是通过pinpoint系统或相似软件系统,在这种方式中pinpoint系统或相似软件系统只能提供系统间的调用关系,例如a->b->c->d;或者通过选择请求响应散点图的某个点,查看该点代表的某个特定方法的全系统调用链路图。但是pinpoint等软件不能提供基于输入方法名,获得该方法的全链路调用关系。

并且,现有的两种方式都不能同代码编辑器集成,也不能自动提供代码修改的调用链路提示,在手动管理和获取链路图的过程中,效率低下且容易遗漏接口之间的调用关系。



技术实现要素:

本发明提供了一种多系统的方法调用链路图的生成及显示方法,可以解析出不同系统中所有方法之间的调用关系,并且在代码修改时调用链路提示。

本发明多系统的方法调用链路图的生成及显示方法,包括:

a.启动pinpoint服务,对所有系统调用进行采样并保存文本结构的调用链路信息。在调用链路信息中包含有方法名、方法id、上游方法id、下游方法id和应用名等关键字内容;

b.通过flumeng服务将pinpoint服务的采样的调用链路信息异步归集到一个非关系数据库(例如mongodb数据库)中保存,这样能够在不影响pinpoint性能的情况下,将采样的数据同步到非关系数据库中保存;

c.通过至少两个数据解析器,从所述的非关系数据库中平行读取多条保存的文本结构的调用链路信息进行解析,根据调用链路信息中对各方法描述的关键字,确定各方法之间的调用关系;

d.根据得到的各方法之间的调用关系,通过递归算法确定各方法之间的层级关系,形成以方法名为节点值的有向无环树状图,并保存到所述非关系数据库中,用于描述所有系统中各方法的调用链路图;

e.设置查询接口,使其在输入方法名后通过所述查询接口查询出非关系数据库中保存的该方法的调用链路图;

f.将所述查询接口集成到代码编辑器的插件中,通过输入设备输入方法名后,系统显示出该方法名对应的调用链路图。

pinpoint软件系统是一种常用的开源全链路分析工具,提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能,基于googledapper论文进行的实现。主要提供如下2个重要功能:(1)业务拓扑图:对整个系统中应用的调用关系进行了可视化的展示,单击某个服务节点,可以显示该节点的详细信息,比如当前节点状态、请求数量等。(2)请求响应散点图:以时间维度进行请求计数和响应时间的展示,通过拖动图表可以选择对应的请求查看执行的详细情况。

flumeng是一种分布式系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化数据存储系统中。

本发明通过解析pinpoint开源软件的数据,实现了在多个系统间所有方法调用链路的分析,从而得到多系统方法调用链路图。

具体的,步骤f中,所述的输入设备为鼠标,包括步骤:

f1.当发生鼠标右击事件后,调用代码编辑器中自带对外提供的鼠标右击事件方法,获取鼠标右击的字符串;

f2.通过递归方式遍历出所有系统中的所有编程语言的自定义方法表达式,并将所有自定义方法表达式整体作为正则表达式的匹配模板,通过正则表达式判断在匹配模板中是否有与鼠标右击的字符串相同的方法表达式,如果有,则鼠标右击获取的字符串为待查询方法名;例如在java语言中自定义方法表达式为:publicvoidfunctionname();privatestringfunction(stringvar)等,在python语言中为:deffunctionname();deffunction(var)等。

f3.将所述待查询方法名作为所述查询接口的输入,获得待查询方法名所对应的方法在所有系统中的调用链路图;

f4.调用代码编辑器的提醒弹出窗口方法,将获得的调用链路图设置到该提醒弹出窗口中,实现调用链路图的显示。

优选的,步骤c中,在每个数据解析器读取调用链路信息时,分别对读取的数据进行加分布式锁操作,避免多台数据解析器处理同一条数据,以及脏读、幻读等情况出现。

优选的,步骤c中,在确定各方法之间的调用关系后,通过nfa非确定自动机算法,形成以方法名为键,以方法id、上游方法id、下游方法id和应用名为值的键-值对数据结构。

本发明能够高效准确的解析出不同系统中所有方法之间的调用关系,形成方法调用链路图,并且在代码修改时调用链路提示,根据需要查询的方法名实时获取多系统之间的方法调用关系链路图,而且还能够将调用链路图集成到代码编辑器中,通过鼠标右击查看所点击方法在所有系统中的调用链路图,极大方便了开发人员和测试人员了解方法之间的调用关系。

以下结合实施例的具体实施方式,对本发明的上述内容再作进一步的详细说明。但不应将此理解为本发明上述主题的范围仅限于以下的实例。在不脱离本发明上述技术思想情况下,根据本领域普通技术知识和惯用手段做出的各种替换或变更,均应包括在本发明的范围内。

附图说明

图1为本发明多系统的方法调用链路图的生成及显示方法的流程图。

具体实施方式

如图1所示本发明多系统的方法调用链路图的生成及显示方法,包括:

a.启动pinpoint服务,对所有系统调用进行采样并保存文本结构的调用链路信息。在调用链路信息中包含有方法名、方法id、上游方法id、下游方法id和应用名等关键字内容。

b.通过flumeng服务将pinpoint服务的采样的调用链路信息异步归集到mongodb非关系数据库中保存,这样能够在不影响pinpoint性能的情况下,将采样的数据同步到非关系数据库中保存。

c.通过多个数据解析器,从所述的mongodb非关系数据库中平行读取多条保存的文本结构的调用链路信息进行解析,根据调用链路信息中对各方法描述的关键字,确定各方法之间的调用关系。然后通过nfa非确定自动机算法,形成以方法名为键,以方法id、上游方法id、下游方法id和应用名为值的键-值对数据结构。在数据解析器读取调用链路信息时,分别对读取的数据进行加分布式锁操作,避免多台数据解析器处理同一条数据,以及脏读、幻读等情况出现。

d.根据得到的各方法之间的调用关系,通过递归算法确定各方法之间的层级关系,形成以方法名为节点值的有向无环树状图,并保存到mongodb非关系数据库中,用于描述所有系统中各方法的调用链路图。

e.设置查询接口,使其在输入方法名后通过所述查询接口查询出mongodb非关系数据库中保存的该方法的调用链路图。

f.通过鼠标右击显示调用链路图:

f1.当发生鼠标右击事件后,调用代码编辑器中自带对外提供的鼠标右击事件方法,获取鼠标右击的字符串;

通过递归方式遍历出所有系统中的所有编程语言的自定义方法表达式,并将所有自定义方法表达式整体作为正则表达式的匹配模板,通过正则表达式判断在匹配模板中是否有与鼠标右击的字符串相同的方法表达式,如果有,则鼠标右击获取的字符串为待查询方法名;例如在java语言中自定义方法表达式为:publicvoidfunctionname();privatestringfunction(stringvar)等,在python语言中为:deffunctionname();deffunction(var)等。

f3.将所述待查询方法名作为所述查询接口的输入,获得待查询方法名所对应的方法在所有系统中的调用链路图;

f4.调用代码编辑器的提醒弹出窗口方法,将获得的调用链路图设置到该提醒弹出窗口中,实现调用链路图的显示。

这样,通过解析pinpoint开源软件的数据,实现了在多个系统间所有方法调用链路的分析,从而得到多系统方法调用链路图,而且还能够将调用链路图集成到代码编辑器中,通过鼠标右击查看所点击方法在所有系统中的调用链路图,极大方便了开发人员和测试人员了解方法之间的调用关系。

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