分布式链路追踪技术适⽤场景和技术核⼼思想

分布式链路追踪技术适⽤场景(问题场景)

场景描述
为了⽀撑⽇益增⻓的庞⼤业务量,咱们会使⽤微服务架构设计咱们的系统,使得咱们的系统不只可以经过集群部署抵挡流量的冲击,⼜能根据业务进⾏灵活的扩展。
数据结构

那么,在微服务架构下,⼀次请求少则通过三四次服务调⽤完成,多则跨越⼏⼗个甚⾄是上百个服务节点。那么问题接踵⽽来:
1)如何动态展现服务的调⽤链路?(⽐如A服务调⽤了哪些其余的服务—依赖关系)
架构

2)如何分析服务调⽤链路中的瓶颈节点并对其进⾏调优?(⽐如A—>B—>C,C服务处理时间特别⻓)
3)如何快速进⾏服务链路的故障发现?
app

这就是分布式链路追踪技术存在的⽬的和意义框架

分布式链路追踪技术
若是咱们在⼀个请求的调⽤处理过程当中,在各个链路节点都可以记录下⽇志,并最终将⽇志进⾏集中可视化展现,那么咱们想监控调⽤链路中的⼀些指标就有但愿了~~~⽐如,请求到达哪一个服务实例?请求被处理的状态怎样?处理耗时怎样?这些都可以分析出来了…
分布式

分布式环境下基于这种想法实现的监控技术就是就是分布式链路追踪(全链路追踪)。微服务

市场上的分布式链路追踪⽅案
分布式链路追踪技术已然成熟,产品也很多,国内外都有,⽐如
Spring Cloud Sleuth + Twitter Zipkin
阿⾥巴巴的“鹰眼”
⼤众点评的“CAT”
美团的“Mtrace”
京东的“Hydra”
新浪的“Watchman”
另外还有最近也被提到不少的Apache Skywalking。







性能

分布式链路追踪技术核⼼思想

本质:记录⽇志,做为⼀个完整的技术,分布式链路追踪也有⾃⼰的理论和概念
微服务架构中,针对请求处理的调⽤链能够展示为⼀棵树,示意以下
在这里插入图片描述
上图描述了⼀个常⻅的调⽤场景,⼀个请求经过⽹关服务路由到下游的微服务-1,而后微服务-1调⽤微服务-2,拿到结果后再调⽤微服务-3,最后组合微服务-2和微服务-3的结果,经过⽹关返回给⽤户
为了追踪整个调⽤链路,确定须要记录⽇志,⽇志记录是基础,在此之上确定有⼀些理论概念,当下主流的的分布式链路追踪技术/系统所基于的理念都来⾃于Google的⼀篇论⽂《Dapper, a Large-ScaleDistributed Systems Tracing Infrastructure》,这⾥⾯涉及到的核⼼理念是什么,咱们来看下,还之前⾯的服务调⽤来讲
在这里插入图片描述
上图标识⼀个请求链路,⼀条链路经过TraceId惟⼀标识,span标识发起的请求信息,各span经过parrentId关联起来
Trace:服务追踪的追踪单元是从客户发起请求(request)抵达被追踪系统的边界开始,到被追踪系统向客户返回响应(response)为⽌的过程






优化

Trace ID:为了实现请求跟踪,当请求发送到分布式系统的⼊⼝端点时,只须要服务跟踪框架为该请求建立⼀个惟⼀的跟踪标识Trace ID,同时在分布式系统内部流转的时候,框架失踪保持该惟⼀标识,直到返回给请求⽅⼀个Trace由⼀个或者多个Span组成,每⼀个Span都有⼀个SpanId,Span中会记录TraceId,同时还有⼀个叫作ParentId,指向了另外⼀个Span的SpanId,代表⽗⼦关系,其实本质表达了依赖关系spa

Span ID:为了统计各处理单元的时间延迟,当请求到达各个服务组件时,也是经过⼀个惟⼀标识SpanID来标记它的开始,具体过程以及结束。对每⼀个Span来讲,它必须有开始和结束两个节点,经过记录开始Span和结束Span的时间戳,就能统计出该Span的时间延迟,除了时间戳记录以外,它还能够包含⼀些其余元数据,⽐如时间名称、请求信息等架构设计

每⼀个Span都会有⼀个惟⼀跟踪标识 Span ID,若⼲个有序的 span 就组成了⼀个 trace。
Span能够认为是⼀个⽇志数据结构,在⼀些特殊的时机点会记录了⼀些⽇志信息,⽐若有时间戳、spanId、TraceId,parentIde等,Span中也抽象出了另外⼀个概念,叫作事件,核⼼事件以下
CS :client send/start 客户端/消费者发出⼀个请求,描述的是⼀个span开始
SR: server received/start 服务端/⽣产者接收请求 SR-CS属于请求发送的⽹络延迟
SS: server send/finish 服务端/⽣产者发送应答 SS-SR属于服务端消耗时间
CR:client received/finished 客户端/消费者接收应答 CR-SS表示回复须要的时间(响应的⽹络延迟)




Spring Cloud Sleuth (追踪服务框架)能够追踪服务之间的调⽤,Sleuth能够记录⼀个服务请求通过哪些服务、服务处理时⻓等,根据这些,咱们可以理清各微服务间的调⽤关系及进⾏问题追踪分析。

**耗时分析:**经过 Sleuth 了解采样请求的耗时,分析服务性能问题(哪些服务调⽤⽐较耗时)
**链路优化:**发现频繁调⽤的服务,针对性优化等
Sleuth就是经过记录⽇志的⽅式来记录踪影数据的

注意:咱们每每把Spring Cloud Sleuth 和 Zipkin ⼀起使⽤,把 Sleuth 的数据信息发送给 Zipkin 进⾏聚合,利⽤ Zipkin 存储并展现数据。
在这里插入图片描述
在这里插入图片描述