Spring Cloud(六)--分布式链路追踪

🤚我的博客

  • 欢迎光临我的博客:https://blog.csdn.net/qq_52434217?type=blog

🥛前言

微服务框架中CircuitBreaker的简单用法。

micrometer官网|https://docs.micrometer.io/micrometer/reference/installing.html

📖Micrometer

💠分布式链路追踪

在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。

概述

链路追踪是分布式系统下的一个概念,它的目的就是要解决上面所提出的问题,也就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

它主要的作用如下:

1、自动采取数据

2、分析数据,产生完整调用链:有了请求的完整调用链,问题有很大概率可复现

3、数据可视化:每个组件的性能可视化,能帮助我们很好地定位系统的瓶颈,及时找出问题所在

通过分布式追踪系统,我们能很好地定位请求的每条具体请求链路,从而轻易地实现请求链路追踪,进而定位和分析每个模块的性能瓶颈。

链路追踪原理

分布式链路的数据模型有以下几个:

1、traceID:单个完整链路的唯一 id,客户端请求微服务1,微服务1请求微服务2拥有同一个traceID

2、spanID:每一个请求链路的id,客户端请求微服务1,微服务1请求微服务2都会有一个spanID

3、 parentID:接收到的请求来源id,客户端请求微服务1,则微服务1的parentID是客户端id,客户端的parentIDnull

链路追踪原理图

此图中,

service1接受到网页的请求,traceId=xspanId=nullparentId=null

service2接受到service1请求,traceId=xspanId=BparentId=service1

service3接受到service2请求,traceId=xspanId=CparentId=service2

性能指标

性能指标是通过发送请求的时间和接受请求的时间差计算得出的,由serverSentTime-clientReceivedTime可以得到时间差。

💠ZIPKIN

点击直达zipkin官网|https://zipkin.io/

Zipkin 是一个开源的分布式跟踪系统。Zipkin可准确确定到应用程序的请求在哪里花费了更多时间。无论是代码内部的调用,还是对另一服务的内部或外部API调用,都可以使用zipkin对系统进行检测以共享上下文。

举个例子,如果微服务应用的响应时间过长,您就可以使用Zipkin了解应用程序是否花费了大部分时间来查询数据库。通过 Zipkin 提供的请求延迟时间可视化,能够发现导致请求时间过长的原因,是由于高速缓存服务器已关闭,故所有调用都直接发送到数据库,从而增加了微服务的延迟。

下载

截止到2024-3-20的最新版本下载地址latest release

zipkin最新下载链接

下载完毕后进入到zipkin目录,打开cmd运行jar包,这里替换成实际下载包名

java -jar zipkin-server-3.1.1-exec.jar

父工程依赖

  • 导入依赖
<dependencyManagement>
    <dependencies>
        <!--        micrometer-tracing-bom导入链路追踪版本中心-->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bom</artifactId>
            <version>1.2.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!--        指标追踪-->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing</artifactId>
            <version>1.2.0</version>
        </dependency>

        <!--        适配zipkin的桥接包-->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bridge-brave</artifactId>
            <version>1.2.0</version>
        </dependency>
        <!--        收集应用程序的度量数据-->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-observation</artifactId>
            <version>1.12.0</version>
        </dependency>
        <!--        feign-micrometer 5-->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-micrometer</artifactId>
            <version>13.1</version>
        </dependency>

        <dependency>
            <groupId>io.zipkin.reporter2</groupId>
            <artifactId>zipkin-reporter-brave</artifactId>
            <version>2.17.0</version>
        </dependency>
    </dependencies>
</dependencyManagement>
  • 依赖说明

子工程依赖

对所有的微服务都加入依赖,包括客户端项目

  • 依赖导入
<!--        指标追踪-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing</artifactId>
    <version>1.2.0</version>
</dependency>

<!--        适配zipkin的桥接包-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
    <version>1.2.0</version>
</dependency>
<!--        收集应用程序的度量数据-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-observation</artifactId>
    <version>1.12.0</version>
</dependency>
<!--        feign-micrometer 5-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-micrometer</artifactId>
    <version>12.5</version>
</dependency>
<!--    zipkin的brave库支持  -->
<dependency>
    <groupId>io.zipkin.reporter2</groupId>
    <artifactId>zipkin-reporter-brave</artifactId>
    <version>2.17.0</version>
</dependency>

参数配置

在微服务的application.yaml中设置如下配置

management:
  zipkin:
    tracing:
      endpoint: http://localhost:9411/api/v2/spans
  tracing:
    sampling: 
      probability: 1.0 # 采样率,0.1表示10次采样1次

测试结果

测试url:http://localhost:9090/api/feign/pay/micrometer/2

zipkin测试结果

路径追踪

链路关系图

依赖关系

链路依赖

💠END

至此,本章主要介绍了分布式微服务中链路追踪的基本使用,有问题可以留言。

公众号

欢迎关注小夜的公众号,一个立志什么都能会的研究生。

碎碎念:想学的东西好多哇,分布式微服务打算后面找个项目做一下,不过项目不会写成文章,最多把项目中的一些小技巧总结出来。最近其实已经开始复习机器学习和redis了,后面会继续更新redis的使用和数据分析与机器学习。一起加油! 🆙🆙🆙
微信公众号


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值