分布式服务跟踪Sleuth
一、为什么要用分布式服务跟踪
1.1、微服务调用现状
- 微服务的现状: 随着业务的发展,单体架构变为微服务架构,并且系统规模也变得越来越大,各微服务间的调用关系 也变得越来越复杂。
- 多服务协同工作: 在微服务的应用中,一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果。
- 复杂的调用链条容易出错: 在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败。
举个例子,在微服务系统中,一个来自用户的请求,请求先达到前端A(如前端界面),然后通过远程调用,达到系统的中间件B、C(如负载均衡、网关等),最后达到后端服务D、E,后端经过一系列的业务逻辑计算最后将数据返回给用户。对于这样一个请求,经历了这么多个服务,怎么样将它的请求过程的数据记录下来呢?这就需要用到服务链路追踪。
1.2、微服务跟踪解决了什么问题
微服务跟踪其实是一个工具,它在整个分布式系统中能跟踪一个用户请求的过程(包括数据采集、数据传输、数据存储、数据分析、数据可视化),捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具。
Spring Cloud Sleuth有4个特点:
- 提供链路追踪: 通过sleuth可以很清楚的看出一个请求都经过了哪些服务。可以很方便的理清服务间的调用关系。
- 性能分析: 通过sleuth可以很方便的看出每个采样请求的耗时,分析出哪些服务调用比较耗时。当服务调用的耗时随着请求量的增大而增大时,也可以对服务的扩容提供一定的提醒作用。
- 数据分析,优化链路: 对于频繁地调用一个服务,或者并行地调用等,可以针对业务做一些优化措施。
- 可视化错误: 对于程序未捕捉的异常,可以在zipkin界面上看到。
二、服务跟踪日志原理剖析
三、使用
3.1、添加jar
<dependency> <!-- sleuth链路跟踪 -->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
3.2、请求API接口后查看结果
四、资料
4.1、源码示例
spring-cloud/ SpringCloud Sleuth