当开发者进行微服务架构开发时,通常会根据业务来划分微服务,各业务之间通过REST进行调用。对于一个用户的请求,往往需要多个微服务协同才能完成处理并形成最后结果返回给用户。在这个过程中,用户请求所经过的每一个微服务都会形成一条复杂的、分布式的服务调用链路,链路中的任何一环出现问题或者网络超时,都会导致用户请求的失败。
而当这种失败的情况出现时,追踪问题便变得复杂,正是存在这样的问题,Spring Cloud推出了Sleuth组件。
一、Sleuth简介
Spring Cloud Sleuth为微服务之间调用提供了一套完整的服务链路跟踪解决方案。通过Sleuth可以很清楚地了解到一个用户请求经过了哪些微服务,每个微服务处理花费了多长时间,从而让开发者可以方便地理清各微服务间的调用关系。并且Sleuth默认集成Zipkin,提供了可视化的服务调用图形界面,对于程序未捕获的异常,也可以展示在上面。
在Spring Cloud微服务的架构中,微服务之间是通过HTTP协议(REST)方式进行通信的,所以Spring Cloud Sleuth在实现时也是基于HTTP的,通过在HTTP中的header(头部)添加跟踪所需要的信息,使得在不影响现有业务的基础上完成对服务请求的追踪。Sleuth的实现原理可以总结如下:
·服务追踪:对于同一个用户请求,认为是同一条链路,并赋值一个相同的TraceID,在后续中通过该标识就可以在多个微服务之间找到完整的处理链路。
·服务监控:对于链路上的每一个微服务处理,Sleuth会再生成一个独立的SpanID,同时记录请求到达时间和离开时间等信息,以作为用户请求追踪的依据,从而判断每一个微服务的处理效率。