架构设计(服务跟踪)


架构设计(服务跟踪)

              

              

                                

服务跟踪

          

微服务调用链路

                   

# 链路跟踪背景
随着业务的发展,系统规模越来越大,微服务之间的调用关系越来越复杂;
客户端发起的请求,会经过不同的微服务调用,形成一条复杂的调用链路,返回最终的结果;
每条链路上的依赖的服务如果出现延时过高、运行出错都会导致请求失败

# 链路跟踪作用
错误追踪:快速发现服务调用链路在哪个微服务中出错
延时分析:统计链路中每个依赖的服务运行的的时间,判断延时

# 链路跟踪组件
spring cloud sleuth + zipkin
阿里巴巴天眼、美团cat
京东hydra、新浪watchman

              

                   

                                

sleuth实现原理

       

                   

# traceId:请求链路的唯一标识,链路中的所有单元保持一致
请求达到分布式系统的入口端点时,会创建唯一的追踪标识,
请求在分布式系统中流转时,该值保持不变

# spanId:链路中的单元组件标识
为了统计各单元的时间延时,当请求到达依赖服务、或者请求转发时,
会创建一个span,用来记录开始时间、执行状态,结束时间

# annotation:记录单元信息
cs(client send):客户端或者单元发起请求时间戳
sr(server received):服务端或者单元接到请求时间戳
ss(server send):服务端或者单元处理完成后返回响应的时间戳
cr(client received):客户端或者单元接到响应的时间

              

sleuth span示例(收集到zipkin时,该对象会转换成zipkin中的span对象格式)

                   

           

               

                                

zipkin 延时分析

     

收集、分析、展示跟踪信息

                   

# collector组件:收集跟踪信息
收集跟踪信息,将其转换为zipkin内部使用的span格式
可使用http同步收集、mq异步收集

# storage组件:存储跟踪信息
默认将跟踪信息存储到内存中,
也可存到mysql、elasticsearch等数据库中

# restful api组件:提供外部访问接口
给客户端展示跟踪信息、外部系统访问实现监控

# web ui组件:展示跟踪信息
调用restful api接口,给用户展示跟踪信息

              

zipkin span示例(annotations对应logs、binaryAnnotations对应tags)