微服务—分布式服务追踪sleuth和zipkin

随着业务的发展,系统规模也会愈来愈大,各微服务间的调用关系也愈来愈错综复杂。html

一般一个客户端发起的请求在后端系统中会通过多个不一样的微服务调用来协同产生最后的请求结果,前端

在复杂的微服务架构系统中,几乎每个前端请求都会造成一条复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟太高或错误的时候都会引发请求最后的失败。java

这时候,对于每个请求,全链路调用的跟踪就变得愈来愈重要,经过实现对请求调用的跟踪能够帮助咱们快速发现错误根烟以及监控分析每条链路上的性能瓶颈。spring

现今业界分布式服务跟踪的理论基础主要来自于 Google 的一篇论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》后端

使用最为普遍的开源实现是 Twitter 的 Zipkin,为了实现平台无关、厂商无关的分布式服务跟踪,CNCF 发布了布式服务跟踪标准 Open Tracing。性能优化

国内,淘宝的“鹰眼”、京东的“Hydra”、大众点评的“CAT”、新浪的“Watchman”、惟品会的“Microscope”、窝窝网的“Tracing”都是这样的系统。服务器

Spring Cloud Sleuth

服务跟踪原理架构

分布式系统的服务跟踪主要包括下面两个关键点:app

1.为了实现请求跟踪,当请求发送到分布式系统的入口端点时,只须要服务跟踪框架为该请求建立一个惟一的跟踪标识Trace ID框架

同时在分布式系统内部流转的时候,框架失踪保持该惟一标识,直到返回给请求方位置。

服务追踪的追踪单元是从客户发起请求(request)抵达被追踪系统的边界开始,到被追踪系统向客户返回响应(response)为止的过程,称为一个“trace”。

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

这样,若干个有序的 span 就组成了一个 trace。在系统向外界提供服务的过程当中,会不断地有请求和响应发生,也就会不断生成 trace,把这些带有span 的 trace 记录下来,就能够描绘出一幅系统的服务拓扑图。附带上 span 中的响应时间,以及请求成功与否等信息,就能够在发生问题的时候,找到异常的服务;根据历史数据,还能够从系统总体层面分析出哪里性能差,定位性能优化的目标。

Spring Cloud Sleuth为服务之间调用提供链路追踪。经过Sleuth能够很清楚的了解到一个服务请求通过了哪些服务,每一个服务处理花费了多长。从而让咱们能够很方便的理清各微服务间的调用关系。此外Sleuth能够帮助咱们:

  • 耗时分析: 经过Sleuth能够很方便的了解到每一个采样请求的耗时,从而分析出哪些服务调用比较耗时;
  • 可视化错误: 对于程序未捕捉的异常,能够经过集成Zipkin服务界面上看到;
  • 链路优化: 对于调用比较频繁的服务,能够针对这些服务实施一些优化措施。

spring cloud sleuth能够结合zipkin,将信息发送到zipkin,利用zipkin的存储来存储信息,利用zipkin ui来展现数据。

 

ZipKin

Zipkin 是一个开放源代码分布式的跟踪系统,由Twitter公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展示。

每一个服务向zipkin报告计时数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。

zipkin会根据调用关系经过Zipkin UI生成依赖关系图。

搭建方法:
1.创建一个Zipkin server,只须要在pom中添加依赖、在properties文件中配置端口服务名等、在启动类中添加@EnableZipkinServer注解。

<dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-server</artifactId>
</dependency>
<dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> </dependency>

2.在每一个服务提供项目中添加zipkin支持

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

 

Spring应用在监测到Java依赖包中有sleuth和zipkin后,会自动在RestTemplate的调用过程当中向HTTP请求注入追踪信息,并向Zipkin Server发送这些信息。

在配置文件中添加代码:

spring: zipkin: base-url: http://localhost:9000
 sleuth: sampler: percentage: 1.0

spring.zipkin.base-url指定了Zipkin服务器的地址,spring.sleuth.sampler.percentage将采样比例设置为1.0,也就是所有都须要。

相关文章
相关标签/搜索