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

微服务调用链路追踪_区块链地址追踪目录第一章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

点击查找:

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

点击链路:

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

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

查看依赖:

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 两万字博文教你python爬虫requests库【详解篇】[通俗易懂]

    两万字博文教你python爬虫requests库【详解篇】[通俗易懂] ????上一篇博文一篇万字博文带你入坑爬虫这条不归路(你还在犹豫什么&抓紧上车)【❤️熬夜整理&建议收藏❤️】被众多爬虫爱好者/想要学习爬虫的小伙伴们阅读之后,很多小伙伴私信我说——大佬搞爬虫都是用的socket套接字嘛????? ????(苦笑)“那肯定不是啊!python为我们封装了那么多伟大而又简单实用的爬虫库,”不过我想说的是,“学啥技术都是从底层抓起,万丈高楼平地起,它也是基于地基稳!所以在入坑文中简单地介绍使用了下底层爬虫库——socket!”???? ????而本文

  • spark隐式转换 toDf_隐式转换是什么

    spark隐式转换 toDf_隐式转换是什么文章目录一.生产问题背景二.隐式转换开荒2.1隐式转换函数参数RichFile2.2隐式类2.3隐式解析机制三.回归主题一.生产问题背景如上就是此blog产生的背景,SparkSQL中, DF.select()select报错不能导入 sparksqlCannotresolveoverloadedmethod’select’咨询大佬后,隐式转换的原因,导入Spark的隐式转换后即可 importspark.implicits._二.隐式转换开

    2022年10月11日
  • Java中 3*0.1 == 0.3 返回值 false ,1*0.3 == 0.3 返回值 true

    Java中 3*0.1 == 0.3 返回值 false ,1*0.3 == 0.3 返回值 trueJava中 3*0.1 == 0.3 返回值 false ,1*0.3 == 0.3 返回值 true

  • java判断字符串是否为空的方法总结

    方法一:本人推荐的方法,开发中最常用的方法,看起来也比较高大上:  if(StringUtils.isNotBlank(str))//判断字符串不为空  或if(StringUtils.isBlank(str))//判断字符串为空12方法二:比价简单直接的方法  if(s==null||"".equals(s));1方法三:比较字符串长度,效率高,比较绕:…

  • 多种前端框架的优缺点「建议收藏」

    多种前端框架的优缺点「建议收藏」多种前端框架的优缺点

  • pytest报错_git代码提交流程

    pytest报错_git代码提交流程前言我们每天写完自动化用例后都会提交到git仓库,随着用例的增多,为了保证仓库代码的干净,当有用例新增的时候,我们希望只运行新增的未提交git仓库的用例。pytest-picked插件可以

发表回复

您的电子邮箱地址不会被公开。

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