分布式服务跟踪实现方法技术

技术编号:14767507 阅读:70 留言:0更新日期:2017-03-08 11:53
本发明专利技术提供一种分布式服务跟踪实现方法,在前端请求到达服务器时,应用容器在执行实际业务处理之前,会先执行Cicada的埋点逻辑,埋点逻辑为这个前端请求分配一个全局唯一的调用链ID,称为TraceId,埋点逻辑把TraceId放在一个调用上下文对象Span里面,而调用上下文对象会存储在ThreadLocal里面,ThreadLocal能够基于线程进行数据的存储和读取,能在同一次请求的多个本地处理方法间传递信息。本发明专利技术能够透明的传递调用上下文,理解系统行为,理清后端调用关系,实现调用链跟踪,调用路径分析,帮助业务人员定位性能瓶颈,排查故障原因等;同时,需要对用户尽量透明,减少对业务代码的侵入性。

【技术实现步骤摘要】

本专利技术涉及一种分布式系统的跟踪处理方法,尤其是涉及一种分布式服务跟踪实现方法
技术介绍
如今互联网服务通常都是用复杂的、大规模分布式集群来实现的,互联网应用构建在不同的软件模块集上。这些软件模块,有可能是由不同的团队开发、也有可能使用不同的编程语言来实现、还有可能分别部署在不同的服务器上,横跨多个不同的数据中心。因此,就需要有一些可以帮助理解系统行为、用于分析系统性能问题的工具。比如在搜索系统中,用户的一个请求在系统中会经过多个子系统的处理,而且这些处理是发生在不同机器甚至是不同集群上的,当请求处理发生异常时,需要快速发现问题,并准确定位到是哪个环节出了问题,这是非常重要的。为了解决这样的问题,谷歌开发了分布式跟踪系统Dapper并发布了一篇论文《Dapper,aLarge-ScaleDistributedSystemsTracingInfrastructure》(《Dapper,大型分布式系统跟踪系统的基础设施》)来阐述其核心理论。目前可查的分布式跟踪系统的实现,其基本理论都源于谷歌的这篇论文。但是Dapper只是为解决请求调用这一问题提出了理论模型,并没有提供具体的实现。本专利技术的分布式跟踪系统是在博采众家之长的基础上提供了完整的分布式系统的跟踪解决方案,更符合现有SOA(面向服务的体系结构)系统架构需求。可以做到接入透明,对业务的性能影响微乎其微,实时跟踪,同时本专利技术的分布式跟踪系统提供的实时预警功能保证在系统出现异常甚至宕机的情况下可以及时通知预警,保证系统的稳定性和高可用性。
技术实现思路
本专利技术提供了一种分布式服务跟踪实现方法,解决了分布式系统中进程调用过程中产生问题时的查询跟踪问题,其技术方案如下所述:一种分布式服务跟踪实现方法,包括日志采样模块、日志收集模块、日志存储模块、统计报表模块、前端模块,所述日志采样模块利用拦截器拦截技术或面向切面编程技术拦截分布式调用链中的进程行为,所述日志收集模块定期实时读取文件,并将有用的日志信息发送到日志存储模块,所述统计报表模块定期进行日志统计,前端模块提供用户交互界面;整体架构称为Cicada;对于请求发起进程的设为客户端,服务提供进程的设为服务端,同一次请求的所有相关调用的情况称作分布式调用链,记为Trace,每个分布式调用链拥有一个全局唯一的ID来标识,其中所述服务端调用其他进程时成为该调用中的的客户端,该跨进程的一次调用记为Span;在客户端的前端请求到达服务器时,应用容器在执行实际业务处理之前,会先执行Cicada的埋点逻辑,埋点逻辑为这个前端请求分配一个全局唯一的调用链ID,称为TraceId,埋点逻辑把TraceId放在一个调用上下文对象Span里面,而调用上下文对象会存储在ThreadLocal里面,ThreadLocal能够基于线程进行数据的存储和读取,能在同一次请求的多个本地处理方法间传递信息。所述Span包括客户端Span和服务端Span,一个远程调用对应两个span,多条Span形成树形结构,组合成一次Trace追踪记录,在Span中的标注点用于记录整个Span时间段内发生的事件,用特殊标注点记录用户自定义事件。所述标注点的属性包括timestamp、type、ip、port,分别表示记录行为发生时间、记录行为类型、IP地址、端口;所述特殊标注点的属性包括timestamp、type、ip、port、key、value,分别表示记录行为发生时间、记录行为类型、IP地址、端口、用户定义属性名、用户定义属性值;所述Span的属性包括traceId、Id、parentId、appName、serviceName、methodName、subSpanNum、annotations、binaryAnnotations,分别表示分布式调用唯一id、Span唯一id、Span父id、应用名、类名、方法名、子span数量、调用信息、补充信息或异常信息。在调用上下文时设置有第二种ID,称作spanId,用于区分同一个调用链下的多个网络调用的发生顺序和嵌套层次关系;对于前端收到请求,生成的spanId固定都是1,当这个前端执行业务处理需要发起RPC调用时,RPC调用客户端Dubbo会首先从当前线程ThreadLocal上面获取之前设置的调用上下文,然后,把spanId递增一个序号,并使用多级序号来表示spanId;之后,调用上下文会作为附件随这次请求一起发送到远程的Dubbo服务器,远程的Dubbo服务端收到这个请求之后,会从请求附件里取出调用上下文,并放到当前线程ThreadLocal上面;如果服务A在处理时,需要调用另一个服务,则会重复以上步骤,并将spanId递增一个序号再传过去,服务A的逻辑全部处理完毕之后,Dubbo在返回响应对象之前,会把这次调用情况以及traceId、spanId都打印到它的访问日志之中,同时,会从ThreadLocal清理掉调用上下文。当服务发生时,所述日志采样模块拦截分布式系统各组成部分的处理行为,记录行为日志并将日志通过HttpPost异步发送到日志收集模块,将收集好的日志发送到远程服务器时采用批处理和异步发送的方法,并增加了连接超时设置和传输超时设置,将超过一定时长的日志直接扔掉,同时对单位时间内抓取的日志量过多的情况进行了限流处理。所述日志收集模块分日志接收子系统和日志汇总子系统,所述日志接收子系统为nginx集群,所述nginx接收到客户端POST过来的消息数据,直接记录本地文件;所述日志汇总子系统从nginx日志中读取最新数据,记录读取进度并进行数据清洗,将异步数据存储到ElasticSearch。所述统计报表模块进行定期日志统计,统计项包括以下:avgDuration:平均响应时间;minDuration:最快响应时间;maxDuration:最慢响应时间;line95Duration:95%line最大响应时间;line999Duration:99.9%line最大响应时间;failureRate:请求失败率;提供统计结果以及Trace数据访问的RESTful接口。本专利技术能够透明的传递调用上下文,理解系统行为,理清后端调用关系,实现调用链跟踪,调用路径分析,帮助业务人员定位性能瓶颈,排查故障原因等;同时,需要对用户尽量透明,减少对业务代码的侵入性。附图说明图1是本专利技术中典型的分布式调用跟踪模型图;图2是一个浏览器请求可能触发的系统间调用以及生成spandId的关系图;图3是本专利技术整体架构的示意图;图4是本专利技术系统部署图。具体实施方式分布式系统为应用带来高可用、高性能、水平扩展等特性,同时也给应用部署、排查、监控等方面带来了复杂性。对单一进程的系统来说,涉及到用户一次请求的所有处理都在同一个进程里,请求相关的所有属性记录在本地即可,无需在多个系统之间传递,方法调用之间的先后顺序按照事件记录的时间先后顺序即可,处理起来也很容易。而对于分布式系统来说,面临的问题则要复杂很多。响应一次请求的分布式服务可能分散在不同的服务器不同的进程里,如何准确的把这些服务找出并关联起来是其面临的首要问题。同时,要准确的分析出这些服务发生的先后关系,也是一个比较棘手的问题。由于服务相关的进程分布在不同的服务器上,本文档来自技高网...
分布式服务跟踪实现方法

【技术保护点】
一种分布式服务跟踪实现方法,包括日志采样模块、日志收集模块、日志存储模块、统计报表模块、前端模块,所述日志采样模块利用拦截器拦截技术或面向切面编程技术拦截分布式调用链中的进程行为,所述日志收集模块定期实时读取文件,并将有用的日志信息发送到日志存储模块,所述统计报表模块定期进行日志统计,前端模块提供用户交互界面;整体架构称为Cicada;对于请求发起进程的设为客户端,服务提供进程的设为服务端,同一次请求的所有相关调用的情况称作分布式调用链,记为Trace,每个分布式调用链拥有一个全局唯一的ID来标识,其中所述服务端调用其他进程时成为该调用中的的客户端,该跨进程的一次调用记为Span;在客户端的前端请求到达服务器时,应用容器在执行实际业务处理之前,会先执行Cicada的埋点逻辑,埋点逻辑为这个前端请求分配一个全局唯一的调用链ID,称为TraceId,埋点逻辑把TraceId放在一个调用上下文对象Span里面,而调用上下文对象会存储在ThreadLocal里面,ThreadLocal能够基于线程进行数据的存储和读取,能在同一次请求的多个本地处理方法间传递信息。

【技术特征摘要】
1.一种分布式服务跟踪实现方法,包括日志采样模块、日志收集模块、日志存储模块、统计报表模块、前端模块,所述日志采样模块利用拦截器拦截技术或面向切面编程技术拦截分布式调用链中的进程行为,所述日志收集模块定期实时读取文件,并将有用的日志信息发送到日志存储模块,所述统计报表模块定期进行日志统计,前端模块提供用户交互界面;整体架构称为Cicada;对于请求发起进程的设为客户端,服务提供进程的设为服务端,同一次请求的所有相关调用的情况称作分布式调用链,记为Trace,每个分布式调用链拥有一个全局唯一的ID来标识,其中所述服务端调用其他进程时成为该调用中的的客户端,该跨进程的一次调用记为Span;在客户端的前端请求到达服务器时,应用容器在执行实际业务处理之前,会先执行Cicada的埋点逻辑,埋点逻辑为这个前端请求分配一个全局唯一的调用链ID,称为TraceId,埋点逻辑把TraceId放在一个调用上下文对象Span里面,而调用上下文对象会存储在ThreadLocal里面,ThreadLocal能够基于线程进行数据的存储和读取,能在同一次请求的多个本地处理方法间传递信息。2.根据权利要求1所述的分布式服务跟踪实现方法,其特征在于:所述Span包括客户端Span和服务端Span,一个远程调用对应两个span,多条Span形成树形结构,组合成一次Trace追踪记录,在Span中的标注点用于记录整个Span时间段内发生的事件,用特殊标注点记录用户自定义事件。3.根据权利要求2所述的分布式服务跟踪实现方法,其特征在于:所述标注点的属性包括timestamp、type、ip、port,分别表示记录行为发生时间、记录行为类型、IP地址、端口;所述特殊标注点的属性包括timestamp、type、ip、port、key、value,分别表示记录行为发生时间、记录行为类型、IP地址、端口、用户定义属性名、用户定义属性值;所述Span的属性包括traceId、Id、parentId、appName、serviceName、methodName、subSpanNum、annotations、binaryAnnotations,分别表示分布式调用唯一id、Span唯一id、Span父id、应用名、类名、方法名、子span数量、调用信息、补充信息或异常信息。4.根据权利要求1所述的分布式服务跟踪...

【专利技术属性】
技术研发人员:张若飞朱鹏程赵泽成
申请(专利权)人:宜人恒业科技发展北京有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1