发明内容
为解决上述技术问题,本发明提供一种数据传输处理方法、装置、设备及***,能解决多进程调用中的日志分析和定位问题。
根据本发明的一个方面,提供一种数据传输处理方法,包括:
将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用;
将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件,并发送给日志存储服务器。
优选的,所述将调用链全局唯一标识和调用层级标识通过消息传递给下一级应用服务器使用,包括:
将调用链全局唯一标识和调用层级标识通过消息的消息请求头传递给下一级应用服务器使用。
优选的,所述将调用链全局唯一标识和调用层级标识通过消息传递给下一级应用服务器使用,包括:
将本级应用服务器生成的调用链全局唯一标识和调用层级标识通过消息传递给下一级应用服务器使用;或,
将上一级应用服务器生成的调用链全局唯一标识和本级生成的调用层级标识通过消息传递给下一级应用服务器使用。
优选的,所述调用链全局唯一标识和调用层级标识按以下方式生成:
在当前接收的消息未包含调用链全局唯一标识和调用层级标识的情况下,生成调用链全局唯一标识和调用层级标识,其中根据本级应用服务器调用下一级应用服务器的信息生成不同的调用层级标识;或,
在当前接收的消息包含调用链全局唯一标识和调用层级标识的情况下,根据本级应用服务器调用下一级应用服务器的信息生成新的调用层级标识。
优选的,所述调用链全局唯一标识和调用层级标识按以下方式生成:
所述调用链全局唯一标识按照包含主机应用服务器哈希值、时间戳和设定位数自增数的格式生成;
所述调用层级标识按照包含表示层级调用的分隔符号和表示调用次数的数值的格式生成,其中所述调用次数按顺序自增。
优选的,所述主机应用服务器哈希值包含主机应用服务器名称和应用路径。
优选的,所述调用响应信息包含本级调用的响应结果、响应时间和子调用的响应结果、响应时间。
根据本发明的另一个方面,提供一种数据传输处理装置,包括:
传递模块,用于将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用;
处理模块,用于将包含所述传递模块传递的调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件,并发送给日志存储服务器。
优选的,所述传递模块将调用链全局唯一标识和调用层级标识通过消息的消息请求头传递给下一级应用服务器使用。
优选的,所述装置还包括:
生成模块,用于在当前接收的消息未包含调用链全局唯一标识和调用层级标识的情况下,生成调用链全局唯一标识和调用层级标识,其中根据本级应用服务器调用下一级应用服务器的信息生成不同的调用层级标识;或,在当前接收的消息包含调用链全局唯一标识和调用层级标识的情况下,根据本级应用服务器调用下一级应用服务器的信息生成新的调用层级标识。
优选的,所述装置还包括:
生成模块,用于生成所述调用链全局唯一标识和调用层级标识,其中所述调用链全局唯一标识按照包含主机应用服务器哈希值、时间戳和设定位数自增数的格式生成,所述调用层级标识按照包含表示层级调用的分隔符号和表示调用次数的数值的格式生成,其中所述调用次数按顺序自增。
根据本发明的另一个方面,提供一种数据传输处理设备,包括:
处理器,将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用,将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件,并发送给日志存储服务器;
存储器,存储所述处理器写入的日志文件。
根据本发明的另一个方面,提供一种计算机设备,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行以下所述的方法:
将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用;
将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件,并发送给日志存储服务器。
根据本发明的另一个方面,提供一种数据传输处理***,包括日志存储服务器和至少两个应用服务器:
所述应用服务器,将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用,将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件,并发送给日志存储服务器;
所述日志存储服务器,接收所述应用服务器发送的日志文件。
可以发现,本发明实施例的技术方案,设置了调用链全局唯一标识和调用层级标识,将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用,通过调用链全局唯一标识可以识别***里面的某个调用是属于同一个调用链,通过调用层级标识可以识别调用链的调用层级和嵌套关系,使得在将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件后,就可以根据调用链全局唯一标识、调用层级标识进行问题定位和分析,从而能解决多进程调用中的日志分析和定位问题。
进一步的,本发明实施例可以将调用链全局唯一标识和调用层级标识通过消息的消息请求头传递给下一级应用服务器使用,这样可以简化参数传递过程,避免通过body传递参数导致的***改造和参数解析的繁琐处理问题。
进一步的,本发明实施例的调用链全局唯一标识可以按照包含主机应用服务器哈希值、时间戳和设定位数自增数的格式生成;调用层级标识可以按照包含表示层级调用的分隔符号和表示调用次数的数值的格式生成,其中所述调用次数按顺序自增,这样可以适应更多应用场景。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本发明提供一种数据传输处理方法、装置、设备及***,能解决多进程调用中的日志分析和定位问题。
相关技术中,原来的单进程调用日志变成了分布在不同服务器上的日志后,给分析问题、定位问题带来了很大困难,本发明提供的数据传输处理方法,通过设定参数传递和分布式的日志埋点(写入日志文件),可以解决分布式环境下日志的分析和定位问题。
以下结合附图详细描述本发明实施例的技术方案。
图1是根据本发明的一个实施例的一种数据传输处理方法的示意性流程图。
该方法可以应用于数据传输处理装置中,所述数据传输处理装置可以位于应用服务器中,或位于其他设备中。
参照图1,所述方法包括:
在步骤101中,将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用。
其中,可以是将调用链全局唯一标识和调用层级标识通过消息的消息请求头传递给下一级应用服务器使用。
其中,可以是将本级应用服务器生成的调用链全局唯一标识和调用层级标识通过消息传递给下一级应用服务器使用;或,将上一级应用服务器生成的调用链全局唯一标识和本级生成的调用层级标识通过消息传递给下一级应用服务器使用。
其中,所述调用链全局唯一标识和调用层级标识可以按以下方式生成:
所述调用链全局唯一标识按照包含主机应用服务器哈希值、时间戳和设定位数自增数的格式生成;所述调用层级标识按照包含表示层级调用的分隔符号和表示调用次数的数值的格式生成,其中所述调用次数按顺序自增。
在步骤102中,将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件,并发送给日志存储服务器。
其中,所述调用响应信息可以包含本级调用的响应结果、响应时间和子调用的响应结果、响应时间。
可以发现,本发明实施例的技术方案,设置了调用链全局唯一标识和调用层级标识,将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用,通过调用链全局唯一标识可以识别***里面的某个调用是属于同一个调用链,通过调用层级标识可以识别调用链的调用层级和嵌套关系,使得在将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件后,就可以根据调用链全局唯一标识、调用层级标识进行问题定位和分析,从而能解决多进程调用中的日志分析和定位问题。
图2是根据本发明的一个实施例的一种数据传输处理方法的另一示意性流程图。图2相对于图1更详细描述了本发明方案。
本发明方案,使用自定义的调用链全局唯一标识linkId将同一个调用链里面的多个***日志串连起来,使用调用层级标识callId来直观的标识调用间的层级和嵌套关系,同时利用HTTP协议自定义请求头的特点,解决了参数在调用间传递的问题,实现了分布式环境下的日志埋点问题,为后续的日志分析、定位、性能优化等提供坚实的数据基础。
参照图2,所述方法包括:
在步骤201中,入口应用服务器生成调用链全局唯一标识和调用层级标识,通过消息的消息请求头传递给第二级应用服务器使用。
相关技术中,微服务化改造后,在分布式环境下对某次功能的调用,可能会涉及多个***,本发明方法为了识别这些***里面的某个调用是属于同一个调用链,可以给调用链生成一个调用链全局唯一标识---linkId,并在跨进程调用时,传递给下级***。同时为了清晰识别调用链的调用层级和嵌套关系,生成另一个标识---调用层级标识callId。
相关技术中,活动***微服务化改造后,***间是通过HTTP协议进行通讯,接口调用时通过消息体body传递请求参数,如果把本发明设计的两个参数linkId和callId也放在body里面传递,会涉及到大量***调用的改造,并且加大了body序列化、反序列化的复杂性,同时也使原来业务参数增加了不必要的参数解释。因为body里面一般是放业务参数的,一般公司都有规范和标准定义,如果将参数放入body,所有业务***在处理请求的时候都要先解释并分离出业务参数,处理更繁琐。因此,本发明方案是通过HTTP请求头进行传递,从而可以避免这些问题出现,大大简化参数传递的实现。
该步骤中,入口应用服务器在当前接收的请求消息未包含调用链全局唯一标识和调用层级标识的情况下,生成调用链全局唯一标识和调用层级标识,其中是根据本级应用服务器调用第二级应用服务器的信息生成不同的调用层级标识。
其中,所述调用链全局唯一标识按照包含主机应用服务器哈希值、时间戳和设定位数自增数的格式生成,其中所述主机应用服务器哈希值包含主机应用服务器名称和应用路径;所述调用层级标识按照包含表示层级调用的分隔符号和表示调用次数的数值的格式生成,其中所述调用次数按顺序自增。
同时参见图3,是根据本发明的一个实施例的一种数据传输处理方法的逻辑流程示意图。
入口应用服务器A(第一级应用服务器)接收到用户请求消息的时候,首先检查消息的请求头是否包含linkId和callId,如果没有包含则生成新的linkId和callId,callId初始可以为0。
其中,linkId生成格式为:主机应用服务器的哈希值+时间戳+4位自增数,其中主机应用服务器哈希值包含主机应用服务器名称和应用路径(host+应用路径)。其中,host和应用路径,可以从***变量里获取;时间戳可以采用***时间;自增数可以用线程安全整数AtomicInteger类简单实现。例如,linkId:a203875 1501257369541 3169,其中a203875为host哈希值,1501257369541为毫秒时间戳,3169为自增数。
需说明的是,其中自增数为4位只是举例说明但不局限于此,可以根据需要设置其他位数。按照上述方式设置的linkId,可以保证在1毫秒的时间内,不超过10000次调用的唯一性,满足了***要求,同时linkId有直观业务意义和时间相关性,有助于检索、排序等。
其中,callId生成格式为:分隔符号+表示调用次数的数值。callId用于表示调用层级和嵌套关系,可以用英文“.”分隔表示层级调用,用数字表示调用次数。例如最上级调用可以为0,在父级调用端生成子级调用的callId并传递给子级服务器,则生成方式为在当前callId基础上,增加新的层级,以“.”隔开,并按顺序生成自增的数字,如图3中,应用服务器A为最上层,callId为0,应用服务器A顺序调用应用服务器B、C、D,则在应用服务器A生成0.1,0.2,0.3的callId,然后在调用时通过HTTP请求头传递给应用服务器B、C、D。图中应用服务器A、B、C、D、E分别对应应用A、B、C、D、E。
在步骤202中,第二级应用服务器接收入口应用服务器的消息,生成新的调用层级标识,将调用链全局唯一标识和调用层级标识通过消息的消息请求头传递给第三级应用服务器使用。
该步骤中,第二级应用服务器在当前接收的消息包含调用链全局唯一标识和调用层级标识的情况下,根据本级应用服务器调用第三级应用服务器的信息生成新的调用层级标识。
***中每个应用服务器都判断是否有子应用的调用,若有,则生成子调用的callId。同时参见图3,第二级应用服务器B接收到第一级应用服务器A的请求消息的时候,检查到消息的请求头包含linkId和callId,而应用服务器B有调用第三级应用服务器E,因此生成新的callId 0.1.1,通过http请求头将linkId和新的callId传递给服务器E。
在步骤203中,各级应用服务器将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件。
所有应用服务器在将请求进行处理后,将linkId、callId、本级调用的响应结果、本级调用的响应时间、子调用的响应结果、子调用的响应时间等数据进行日志埋点。所谓日志埋点,就是将linkId、callId、应用处理时间等日志参数写入日志文件的过程,一般是按顺序写入日志文件。
在步骤204中,各级应用服务器将日志文件发送给日志存储服务器。
该步骤中,各级应用服务器可以将日志文件定时同步给统一的日志存储服务器集群。***中可以设置多个日志存储服务器作为集群,但日志文件是发送给其中一个日志存储服务器,可以由代理agent程序对集群中的日志存储服务器进行负载均衡和路由选择,最后选择一个日志存储服务器。
在步骤205中,日志存储服务器对日志文件文件进行问题定位和分析。
该步骤中可以由日志存储服务器根据接收的各级应用服务器发送的日志文件,生成完整的调用链日志报表,实现统一的检索和分析,从而协助开发人员进行相应的问题定位和性能调优等工作。
其中,生成完整的调用链日志报表,就是根据linkId进行分组和汇总,因为所有应用服务器提交的日志文件里面都会带有linkId,同一个linkId的所有日志汇总在一起就是一条完整的调用链日志,然后再将这些日志显示出来就可以供参考分析。
根据调用链日志报表中的日志信息,可以对相关调用进行优化改进,例如根据linkId查询调用链日志,查阅某次抽奖活动的一条调用链的日志:
linkId为xxxx,
活动***,响应时间10ms->规则计算中心,响应时间80ms->抽奖组件,响应时间500ms->发奖中心,响应时间50ms。
从这条调用链的日志可以看出,处理一个发奖请求,需要经过活动***、规则计算中心、抽奖组件、发奖中心共4个应用,其中抽奖组件的响应时间为500ms,响应时间过长,需要针对性进行优化,从而发现了问题所在,可以相应进行优化改进。
综上所述,可以发现本发明方案通过自定义的linkId和callId识别分布式环境下的1次调用行为,并利用HTTP协议可自定义请求头的特点,通过消息请求头传递linkId和callId,实现同一个调用链里面的参数传递,解决了分布式环境下,通过HTTP协议实现服务间调用***的日志埋点问题,为分布式环境的调用日志分析和定位提供了基础条件,同时在日志里还可以记录每个层级调用的响应时间,那么通过查看调用链日志,就可以对调用链上面的性能瓶颈进行定位和针对优化。
上述详细介绍了本发明的一种数据传输处理方法,以下介绍本发明对应的数据传输处理装置、设备及***。
图4是根据本发明的一个实施例的一种数据传输处理装置的示意性方框图。
参照图4,在一种数据传输处理装置40中,包括:传递模块41和处理模块42。
传递模块41,用于将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用。
其中,可以是将调用链全局唯一标识和调用层级标识通过消息的消息请求头传递给下一级应用服务器使用。
其中,可以是将本级应用服务器生成的调用链全局唯一标识和调用层级标识通过消息传递给下一级应用服务器使用;或,将上一级应用服务器生成的调用链全局唯一标识和本级生成的调用层级标识通过消息传递给下一级应用服务器使用。
处理模块42,用于将包含所述传递模块41传递的调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件,并发送给日志存储服务器。
其中,所述调用响应信息可以包含本级调用的响应结果、响应时间和子调用的响应结果、响应时间。
可以发现,本发明实施例的技术方案,设置了调用链全局唯一标识和调用层级标识,将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用,通过调用链全局唯一标识可以识别***里面的某个调用是属于同一个调用链,通过调用层级标识可以识别调用链的调用层级和嵌套关系,使得在将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件后,就可以根据调用链全局唯一标识、调用层级标识进行问题定位和分析,从而能解决多进程调用中的日志分析和定位问题。
图5是根据本发明的一个实施例的一种数据传输处理装置的另一示意性方框图。
如图5所示,在一种数据传输处理装置50中,包括:传递模块41、处理模块42、生成模块43。
其中,传递模块41、处理模块42的功能可以参见图4所示。
其中,所述传递模块41将调用链全局唯一标识和调用层级标识通过消息的消息请求头传递给下一级应用服务器使用。
生成模块43,用于在当前接收的消息未包含调用链全局唯一标识和调用层级标识的情况下,生成调用链全局唯一标识和调用层级标识,其中根据本级应用服务器调用下一级应用服务器的信息生成不同的调用层级标识;或,在当前接收的消息包含调用链全局唯一标识和调用层级标识的情况下,根据本级应用服务器调用下一级应用服务器的信息生成新的调用层级标识。传递模块41从生成模块43获取生成的调用链全局唯一标识和调用层级标识。
生成模块43,还可以用于生成所述调用链全局唯一标识和调用层级标识,其中所述调用链全局唯一标识按照包含主机应用服务器哈希值、时间戳和设定位数自增数的格式生成,所述调用层级标识按照包含表示层级调用的分隔符号和表示调用次数的数值的格式生成,其中所述调用次数按顺序自增。
其中,所述主机应用服务器哈希值包含主机应用服务器名称和应用路径。
其中,主机应用服务器名称和应用路径,可以从***变量里获取;时间戳可以采用***时间;自增数可以用线程安全整数AtomicInteger类简单实现。例如,linkId:a2038751501257369541 3169,其中a203875为host哈希值,1501257369541为毫秒时间戳,3169为自增数。
其中,处理模块42写入日志文件的所述调用响应信息可以包含本级调用的响应结果、响应时间和子调用的响应结果、响应时间。
图6是根据本发明的一个实施例的一种数据传输处理设备的示意性方框图。
参照图6,在一种数据传输处理设备60中,包括:处理器61、存储器62。
处理器61,将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用,将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件,并发送给日志存储服务器;
存储器62,存储所述处理器61写入的日志文件。
其中,处理器61可以将调用链全局唯一标识和调用层级标识通过消息的消息请求头传递给下一级应用服务器使用。
其中,所述调用链全局唯一标识可以按照包含主机应用服务器哈希值、时间戳和设定位数自增数的格式生成;所述调用层级标识可以按照包含表示层级调用的分隔符号和表示调用次数的数值的格式生成,其中所述调用次数按顺序自增。
图7是根据本发明的一个实施例的一种计算机设备的示意性方框图。
参照图7,在一种计算机设备70中,包括:处理器71和存储器72。
处理器71;以及
存储器72,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器71执行以下所述的方法:
将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用;
将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件,并发送给日志存储服务器。
其中,处理器71可以将调用链全局唯一标识和调用层级标识通过消息的消息请求头传递给下一级应用服务器使用。
其中,所述调用链全局唯一标识可以按照包含主机应用服务器哈希值、时间戳和设定位数自增数的格式生成;所述调用层级标识可以按照包含表示层级调用的分隔符号和表示调用次数的数值的格式生成,其中所述调用次数按顺序自增。
图8是根据本发明的一个实施例的一种数据传输处理***的示意性方框图。
参照图8,在一种数据传输处理***中,包括日志存储服务器81和至少两个应用服务器82。
所述应用服务器82,将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器82使用,将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件,并发送给日志存储服务器81;
所述日志存储服务器81,接收所述应用服务器82发送的日志文件。
其中,应用服务器82可以将调用链全局唯一标识和调用层级标识通过消息的消息请求头传递给下一级应用服务器使用。
其中,所述调用链全局唯一标识可以按照包含主机应用服务器哈希值、时间戳和设定位数自增数的格式生成;所述调用层级标识可以按照包含表示层级调用的分隔符号和表示调用次数的数值的格式生成,其中所述调用次数按顺序自增。
本发明实施例还提供一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行以下所述的方法:
将调用链全局唯一标识和调用层级标识传递通过消息给下一级应用服务器使用;
将包含所述调用链全局唯一标识、调用层级标识和调用响应信息的日志信息写入日志文件,并发送给日志存储服务器。
上文中已经参考附图详细描述了根据本发明的技术方案。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的***和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。