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

微服务调用链路追踪_区块链地址追踪目录第一章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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 男人的恋爱过程「建议收藏」

    男人的恋爱过程「建议收藏」当对选择恋人的过程越谨慎,就越容易找到适合的恋人。虽然有的人很快就达到目的,但是基本上这是一个不断尝试与错误的过程。透过自我调整,最后终将达成目的。对常规四个阶段变化的了解,你可以了解你距离目标还有多远。让我们仔细探索男人、在四个阶段中的不同反应。男人:生理上的吸引在第一阶段男人对女人先产生生理上的吸引是很正常的。男人尤其注意女人的外表,她走路的方式、她的头发、微笑、眼睛、身高、美腿、…

    2022年7月25日
    12
  • 零基础学Java(11)自定义类[通俗易懂]

    零基础学Java(11)自定义类[通俗易懂]前言之前的例子中,我们已经编写了一些简单的类。但是,那些类都只包含一个简单的main方法。现在来学习如何编写复杂应用程序所需要的那种主力类。通常这些类没有main方法,却有自己的实例字段和实例方法。

    2022年7月29日
    6
  • .net断点续传的原理

    在了解HTTP断点续传的原理之前,先来说说HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种。请求协议是由客户机(浏览器)向服务器(WEBSERVER)提交请求时发送报文的协议

    2021年12月26日
    42
  • ps快捷键

    ps快捷键

    2021年9月23日
    45
  • Pytest(1)安装与入门「建议收藏」

    Pytest(1)安装与入门「建议收藏」pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

    2022年7月31日
    10
  • Redis 客户端连接

    Redis 客户端连接Redis命令用于在redis服务上执行操作。要在redis服务上执行命令需要一个redis客户端。Redis客户端在Redis包中有提供,这个包在我们前面的安装教程中就有安装过了。Redis通过监听一个TCP端口或者Unixsocket的方式来接收来自客户端的连接,当一个连接建立后,Redis内部会进行以下一些操作:首先,客户端socket会被设置

    2022年6月10日
    46

发表回复

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

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