微服务调用链路追踪_区块链地址追踪

微服务调用链路追踪_区块链地址追踪目录第一章Sleuth+Zipkin介绍1.1、什么是Sleuth1.2、什么是Zipkin第二章Sleuth+Zipkin入门案例2.1、项目准备与启动2.2、搭Zipkin服务端2.3、搭Zipkin客户端2.4、链路跟踪的测试配套资料,免费下载链接:https://pan.baidu.com/s/1la_3-HW-UvliDRJzfBcP_w提取码:lxfx复制这段内容后打开百度网盘手机App,操作更方便哦第一章Sleuth+Zipkin介绍1.1、什么是Sleuth我们已经接触

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定


配套资料,免费下载
链接:https://pan.baidu.com/s/1la_3-HW-UvliDRJzfBcP_w
提取码:lxfx
复制这段内容后打开百度网盘手机App,操作更方便哦

第一章 Sleuth+Zipkin介绍

1.1、什么是Sleuth

我们已经接触过几种微服务的监控方式,比如:Spring Boot Actuator监控微服务,Spring Boot Admin也是监控微服务,他是把Actuator的数据用可视化的方式呈现出来,Hystrix Dashboard监控Hystrix服务,Hystrix Turbine聚合多个Hystrix服务的监控信息等,接下来我们要讨论的是微服务的“跟踪”。

对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:

  • 如何串联整个调用链路,快速定位问题?
  • 如何理清各个微服务之间的依赖关系?
  • 如何进行各个微服务接口的性能分折?
  • 如何跟踪整个业务流程的调用处理顺序?

Spring Cloud Sleuth为Spring Cloud提供了分布式跟踪的解决方案,它大量借用了Google Dapper、Twitter Zipkin和Apache HTrace的设计,帮我们解决像上面提到的问题。Spring Cloud Sleuth可以追踪10种类型的组件:async、Hystrix,messaging,WebSocket,rxjava,scheduling,Web(Spring MVC Controller,Servlet),WebClient(Spring RestTemplate)、Feign/OpenFegin、Zuul;

Spring Cloud Sleuth对于分布式链路的跟踪仅仅是生成一些数据,这些数据不便于人类阅读,所以我们一般把这种跟踪数据上传给Zipkin Server,由Zipkin通过UI页面统一进行数据的展示。

官方文档地址:https://docs.spring.io/spring-cloud-sleuth/docs/2.2.6.RELEASE/reference/html/

我们通过一张图来了解一个简单的微服务的调用链路:

微服务调用链路追踪_区块链地址追踪

span(跨度)

span(跨度)是一个基本工作单元,span用一个64位的id唯一标识。除id外,span还包含其他数据,例如描述、时间戳事件、键值对的注解(标签), spanId、parentId等。span被启动和停止时,记录了时间信息。初始化 span被称为”rootspan”,该span的id和trace的id相等。

trace(跟踪)

trace(跟踪)是一组共享”rootspan”的span组成的树状结构,trace也用一个64位的id唯一标识,trace中的所有span都共享该trace的id。

annotation(标注)

annotation(标注)用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。

CS(Client Sent客户端发送)

客户端发起一个请求,该annotation描述了span的开始。

SR(Server Received服务器端接收)

服务器端获得请求并准备处理它。如果用SR减去CS时间戳,就能得到网络延迟。

SS(Server Sent服务器端发送)

该annotation表明完成请求处理(当响应发回客户端时)。如果用SS减去SR时间戳,就能得到服务器端处理请求所需的时间。

CR(Client Received客户端接收)

客户端发起一个请求,该annotation描述了span的结束。客户端成功接收到服务器端的响应。如果CR减去CS时间戳,就能得到从客户端发送请求到服务器响应的所需的时间。

1.2、什么是Zipkin

Zipkin是Twitter开源的分布式实时数据跟踪系统(Distributed Tracking System),基于Google Dapper的论文设计而成,Google开源了 Dapper链路追踪组件,并在2010年发表了论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,这篇文章是业内实现链路追踪的标杆和理论基础,具有非常大的参考价值。

Zipkin它的主要功能是收集系统的时序数据,从而追踪微服务架构的系统延时等问题,从而达到链路调用监控跟踪作用,另外Zipkin还提供了一个非常友好的UI界面,来帮助分析追踪数据。除此之外,Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。

Zipkin官网地址:http://zipkin.io

分布式跟踪系统有一些成熟的开源产品,比如:韩国Naver的Pinpoint,Apache的HTrace,阿里的鹰眼EagleEye,京东的Hydra等,这些产品我们也把他们叫做APM(应用性能管理)工具。

下图展示了Zipkin的基础架构,它主要由4个核心组件构成:

微服务调用链路追踪_区块链地址追踪

  • Collector:收集器组件,它主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin内部处理的Span格式,以支持后续的存储、分析、展示等功能。
  • Storage:存储组件,它主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中。
  • RESTful API:API 组件,它主要用来提供外部访问接口。比如给客户端展示跟踪信息或是外接系统访问以实现监控等。
  • Web UI:UI 组件,基于 API 组件实现的上层应用,通过 UI 组件用户可以方便而有直观地查询和分析跟踪信息。

Zipkin分为两端,一个是Zipkin服务端,一个是Zipkin客户端,客户端也就是微服务的应用。客户端会配置服务端的URL地址,一旦发生服务间的调用的时候,会被配置在微服务里面的Sleuth的监听器监听,并生成相应的Trace和Span信息发送给服务端。发送的方式主要有两种,一种是HTTP报文的方式,还有一种是消息总线的方式如:RabbitMQ。

最终我们可以总结出来,Sleuth和Zipkin的关系就好比Spring Boot Actuator和Spring Boot Admin之间的关系,一个用于产生数据,一个用于展示数据。

第二章 Sleuth+Zipkin入门案例

2.1、项目准备与启动

我们接下来的所有操作均是在Config最后完成的工程上进行操作,相关代码请到配套资料中寻找。

微服务调用链路追踪_区块链地址追踪

我们需要依次启动如下服务:(eureka-server7001会报错,不用管,等eureka-server7002启动后,过一会就恢复正常了)

  1. eureka-server7001
  2. eureka-server7002

打开浏览器输入指定的地址:http://localhost:7001/login,登录账号:root,登录密码:123456

微服务调用链路追踪_区块链地址追踪

2.2、搭Zipkin服务端

(1)到官网下载Zipkin Server,下载地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/

(2)我们下载2.12.9这个最新的版本,点击进去后,选择第一个,如果你下载失败,可以到配套资料中寻找该jar包。

微服务调用链路追踪_区块链地址追踪

(3)输入启动命令启动该jar包:java -jar zipkin-server-2.12.9-exec.jar

微服务调用链路追踪_区块链地址追踪

(4)打开浏览器输入Zipkin的web界面地址:http://localhost:9411/zipkin/

微服务调用链路追踪_区块链地址追踪

(5)要想查看更加详细的配置和命令请参考:

  • 有关zipkin的启动命令可以配置的参数可以看这里:https://github.com/apache/incubator-zipkin/tree/master/zipkin-server
  • 有关zipkin配置mysql基础建表语句可以看这里:https://github.com/apache/incubator-zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql
  • 有关zipkin本身配置文件可以看这里:https://github.com/apache/incubator-zipkin/blob/master/zipkin-server/src/main/resources/zipkin-server-shared.yml

2.3、搭Zipkin客户端

(1)服务提供者service-provider8001service-provider8002、服务消费者service-consumer9002service-consumer9003,全部添加以下依赖:

pom.xml

<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>

Jetbrains全家桶1年46,售后保障稳定

(2)服务提供者service-provider8001service-provider8002、服务消费者service-consumer9002service-consumer9003,全部添加以下配置:

application.yaml

spring:
  zipkin:
    base-url: http://localhost:9411
    sender:
      type: web

(3)服务提供者service-provider8001service-provider8002、服务消费者service-consumer9002service-consumer9003,从左向右依次启动:

Eureka:

微服务调用链路追踪_区块链地址追踪

Console:

微服务调用链路追踪_区块链地址追踪

2.4、链路跟踪的测试

访问地址:http://localhost:9002/consumer/product/findAll

微服务调用链路追踪_区块链地址追踪

链路跟踪:http://localhost:9411/zipkin

点击查找:

微服务调用链路追踪_区块链地址追踪

点击链路:

微服务调用链路追踪_区块链地址追踪

微服务调用链路追踪_区块链地址追踪

查看依赖:

微服务调用链路追踪_区块链地址追踪

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219087.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月10日 上午9:22
下一篇 2025年7月10日 上午10:01


相关推荐

  • 错误0x8000ffff怎么办_不支持该请求0x0000032

    错误0x8000ffff怎么办_不支持该请求0x00000320x8000ffff错误是我们在Windows10更新、升级时经常会遇到的错误之一。当我们遇到这种错误时,应该怎么修复它呢?本文为大家作出原因分析,然后提供有效的解决方法。

    2026年3月11日
    77
  • Modbus通讯协议详细解释

    Modbus通讯协议详细解释Modbus一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现。先来简单分析一条MODBUS-RTU报文,例如:0106000100179804010600010017

    2022年7月12日
    19
  • FindWindowEx的用法「建议收藏」

    FindWindowEx的用法「建议收藏」FindWindowEx完整定义如下:HWNDFindWindowEx(HWNDhwndParent,//父窗口句柄HWNDhwndChildAfter,//开始的子窗口句柄,这个参数很有用LPCTSTRlpszClass,//类名LPCTSTR

    2022年5月31日
    44
  • 详解Spring Session

    详解Spring Session请求访问 tomcat gt tomact 检查请求的 sessionId gt 根据 sessionId 可以找到 session 对象 gt 使用该 session 对象创建 HttpServetRe 对象 gt 根据 sessionId 找不到 session 对象或者请求没有带 sessionId gt 创建一个 session 对象放进 Http

    2026年3月17日
    3
  • 高效工作指南

    高效工作指南

    2021年9月9日
    53
  • Django(17)orm查询操作[通俗易懂]

    Django(17)orm查询操作[通俗易懂]前言查找是数据库操作中一个非常重要的技术。查询一般就是使用filter、exclude以及get三个方法来实现。我们可以在调用这些方法的时候传递不同的参数来实现查询需求。在ORM层面,这些查询条件都

    2022年7月28日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号