AlibabaCloud微服务下的链路追踪系统实战详解

发布于:2024-05-10 ⋅ 阅读:(29) ⋅ 点赞:(0)

🚀 作者 :“二当家-小D”
🚀 博主简介:⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8年开发架构经验,精通java,擅长分布式高并发架构,自动化压力测试,微服务容器化k8s等
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬
🍅文末获取源码联系 配套笔记打包🍅

🔗往期文章传送门:

快速入门SpringCloudAlibaba实战篇【SpringBoot3.x + JDK17】!

高并发解决方案:Sentinel的流量控制、熔断与OpenFeign整合实战 !
构建微服务网关:SpringCloud Gateway快速入门!

一、 微服务架构下的排查问题复杂性概述

简介:讲解微服务链路追踪系统的作用

  • 抛两个常见的问题

    • 微服务调用链路出现了问题怎么快速排查?
  • 微服务调用链路耗时长怎么定位是哪个服务?

  • 链路追踪系统

    • 分布式应用架构虽然满足了应用横向扩展的需求,但是运维和诊断的过程变得越来越复杂,例如会遇到接口诊断困难、应用性能诊断复杂、架构分析复杂等难题,传统的监控工具并无法满足,分布式链路系统由此诞生
  • 核心:将一次请求分布式调用,使用GPS定位串起来,记录每个调用的耗时、性能等日志,并通过可视化工具展示出来

  • 注意:

    • AlibabaCloud全家桶还没对应的链路追踪系统,我们使用Sleuth/Micrometer Tracing和zipking(内部使用的鹰眼)
    • 需要注意的是,Sleuth 已经停止对 Spring Boot 3 的支持,而后续的替代者是 Micrometer Tracing。Micrometer Tracing 提供了类似的接口和功能。
  • 链路追踪解决方案:

    • Micrometer Tracing:作为 Sleuth 的后继者,Micrometer Tracing 提供了更强大和灵活的追踪功能。推荐
    • Zipkin:这是一个开源的分布式追踪系统,它可以收集和可视化服务之间的调用关系。
    • Skywalking:这是一个功能丰富的分布式追踪和监控系统,它提供了全面的监控和分析功能。推荐

二、 SpringCloud的链路追踪组件Sleuth实战

简介:讲解什么Sleuth链路追踪系统

  • 什么是Sleuth

    • 一个组件,专门用于记录链路数据的开源组件

    • 文档:Spring Cloud Sleuth

    • 案例

      [order-service,96f95a0dd81fe3ab,852ef4cfcdecabf3,false]
      
      第一个值,spring.application.name的值
      
      第二个值,96f95a0dd81fe3ab ,sleuth生成的一个ID,叫Trace ID,用来标识一条请求链路,一条请求链路中包含一个Trace ID,多个Span ID
      
      第三个值,852ef4cfcdecabf3、spanid 基本的工作单元,获取元数据,如发送一个http
      
      第四个值:false,是否要将该信息输出到zipkin服务中来收集和展示。
      
  • 各个微服务添加依赖

    <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    
  • 启动服务,发送请求

    在这里插入图片描述

三、 Spring Boot3.x整合Micrometer Tracing实战

简介:讲解Micrometer Tracing介绍和部署实战

  • 什么是Micrometer Tracing

    • Spring Cloud Sleuth项目目前只维护到 3.1.9, 只支持到 Springboot 2.x 系列, 项目主页也说明了后续维护迁移到了 Micrometer Tracing 项目中。
      在这里插入图片描述
  • 如何迁移

    • 参考这篇文章Observability With Spring Boot 3 | Baeldung

    • 由于MicrometerTracing是一个门面工具自身并没有实现完整的链路追踪系统,具体的链路追踪另外需要引入的是第三方链路追踪系统的依赖。

      • micrometer-observation:一个基于度量库Micrometer的观测模块,用于收集应用程序的度量数据。
      • micrometer-tracing-bridge-brave:一个Micrometer模块,用于与分布式跟踪工具Brave 集成,以收集应用程序的分布式跟踪数据。
      • Brave是一个开源的分布式跟踪工具,它可以帮助用户在分布式系统中跟踪请求的流转。Brave使用一种称为"跟踪上下文"的机制,将请求的跟踪信息存储在请求的头部,然后将请求传递给下一个服务。在整个请求链中,Brave会将每个服务处理请求的时间和其他信息存储到跟踪数据中,以便用户可以了解整个请求的路径和性能。
    • 添加 Actuator Starter 和 Mircometer-Tracing-Bridge-Brave 的依赖

      <!-- Micrometer与Brave的追踪桥接器依赖 -->
      <dependency>
          <groupId>io.micrometer</groupId>
          <artifactId>micrometer-tracing-bridge-brave</artifactId>
      </dependency>
      <!-- Spring Boot的Actuator模块,用于监控和管理 -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>
      
    • Actuator 提供了可观测部分的自动注入, Mircometer-Tracing-Bridge-Brave 则是对 Sleuth 底层 Brave 的依赖传递, 使应用上层无需改动使用方式。

    • 注意:使用Micrometer Tracing,跟踪traceid和spanid不会显示在日志中

四、 微服务下的可视化链路追踪系统Zipkin实战

简介:讲解zipkin介绍和部署实战

  • 什么是zipkin

    • 官网
      • https://zipkin.io/
      • https://zipkin.io/pages/quickstart.html
    • 大规模分布式系统的APM工具(Application Performance Management),基于Google Dapper的基础实现,和sleuth结合可以提供可视化web界面分析调用链路耗时情况
  • 同类产品

    • 鹰眼(EagleEye)
    • CAT
    • twitter开源zipkin,结合sleuth
    • Pinpoint,运用JavaAgent字节码增强技术
  • StackDriver Trace (Google)

  • 开始使用

    • 安装包在资料里面,启动服务
    java -jar zipkin-server-3.3.0-exec.jar
    
    • 访问入口:http://127.0.0.1:9411/zipkin/
    • zipkin组成:Collector、Storage、Restful API、Web UI组成

    architecture-1

五、链路追踪组件Zipkin+Micrometer Tracing整合实战

简介:使用Zipkin+Micrometer Tracing业务分析调用链路分析实战

  • Micrometer Tracing收集跟踪信息通过http请求发送给zipkin server

  • zipkin server进行跟踪信息的存储以及提供Rest API即可

  • Zipkin UI调用其API接口进行数据展示默认存储是内存,可也用mysql 或者elasticsearch等存储

  • 微服务加入依赖

    <dependency>
        <groupId>io.zipkin.reporter2</groupId>
        <artifactId>zipkin-reporter-brave</artifactId>
    </dependency>
    
    • zipkin-reporter-brave:一个用于将Brave跟踪数据报告到Zipkin跟踪系统的库。
  • 配置地址和采样百分比配置

    management:
      zipkin:
        tracing:
          endpoint: http://localhost:9411/api/v2/spans
      tracing:
        sampling:
          probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。
    #默认为0.1,即10%,这里配置1,是记录全部的sleuth信息,是为了收集到更多的数据(仅供测试用)。
    #在分布式系统中,过于频繁的采样会影响系统性能,所以这里配置需要采用一个合适的值。
    
  • 发送请求

    在这里插入图片描述

  • 点击依赖,查看整条链路

    在这里插入图片描述

六、 微服务链路追踪系统Zipkin持久化配置

简介:实战zipkin链路追踪日志持久化

  • 现存在的问题

    • 服务重启会导致链路追踪系统数据丢失
  • 持久化配置:mysql或者elasticsearch

    • 创建数据库表SQL脚本 (资料包里面有)
    • 启动命令
    java -jar java -jar zipkin-server-3.3.0-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin_log --MYSQL_USER=root --MYSQL_PASS=xdclass.net
    

结束语

今天的文章分享了微服务架构下的链路追踪技术,从SpringCloud的Sleuth入手,到Micrometer Tracing的整合,再到Zipkin的可视化链路追踪,最后实现链路追踪数据的持久化配置。通过这些希望能帮助大家更好地理解和运用微服务架构中的链路追踪技术,后面还会分享Skywalking的整合,大家记得关注。

今天的文章就到这了,关注D哥,下期分享更多关于SpringCloud Alibaba干货!

资料获取📚
完整代码和笔记已经准备好,如果有问题,可以在评论区留言讨论💬
原创不易,别忘了点赞👍+收藏⭐哦!
点击下方链接即可获取完整资料压缩包🎁,快来领取吧!↓↓↓↓


网站公告

今日签到

点亮在社区的每一天
去签到