分布式服务的链路跟踪 Sleuth Micrometer zipkin OpenTelemetry

由来

在分布式应用开发过程中,一个请求会调用多个应用,会有那种需要知道各个应用之间耗时的想法,这样可以知道一个调用的总时长以及各个组件之间的处理耗时,后面方便定位问题。

理论依据

起源于 google dapper 论文

https://research.google/pubs/pub36356/

具体文档链接

https://storage.googleapis.com/pub-tools-public-publication-data/pdf/36356.pdf

通过论文标题上面的日期,得知在2010 年4月发表

实现组件

Spring Cloud Sleuth

spring 的开发团队在开发了 spring 的产品后,后面又开发了 spring boot 和 spring cloud。

之前写的一篇文章

https://blog.csdn.net/zlpzlpzyd/article/details/132779246

从 maven 仓库上发布的代码时间得知

spring cloud commons 相关的代码在最早是 2015 年,Spring Cloud Sleuth 最早是2016年发布。

但是最近查看Spring Cloud Sleuth官网文档时发现如下内容

Spring Cloud Sleuth 最后的版本是 3.1.x,从这个版本之后移动到 Micrometer Tracing 项目中。

Micrometer Tracing

https://micrometer.io/docs/tracing

意思就是 Spring Cloud Sleuth 从 Spring Cloud 中分离出来单独创建一个项目 Micrometer Tracing,在 2022年11月发布了 1.0.0 GA 版本。

spring 现在属于 vmware,Micrometer 也属于 vmware,属于同一家公司的产品,它们之间的关系类似于异步非阻塞组件 reactor 与 spring webflux 的关系。总之,都是 vmware 的产品。

链路追踪这块通过 Micrometer 制定了一个规范,也就是 SPI,其他的一些厂商可以自己去实现对应的链路跟踪相关功能。

目前针对 Micrometer 规范的实现有两个组件

OpenZipkin Brave

https://github.com/openzipkin/brave

可以引用 zipkin 的相关功能。

在 spring-cloud-dependencies-2022.0.0 中,sleuth 相关依赖被移除。

https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-dependencies/2022.0.0/spring-cloud-dependencies-2022.0.0.pom

即如果使用了 spring boot 3.x 版本,那就无法使用 Spring Cloud Sleuth了。需要通过 Micrometer 进行适配。

OpenTelemetry

https://opentelemetry.io/

适配方式官网给了具体方式,分为 maven 和 gradle

Spring Cloud Sleuth 迁移到 Micrometer Tracing

https://github.com/micrometer-metrics/tracing/wiki/Spring-Cloud-Sleuth-3.1-Migration-Guide

SPI(Service provider interface)

针对 SPI,日常开发中有很多它的身影。一般的 SPI 都是制定了一个规范,即 java 中的 interface,后面对应的厂商针对这个 interface 编写自己对应的实现。跟设计模式中的策略模式对应。只是 SPI 是针对 java 开发的一个规范,更高层次的规范是论文,比如算法,同一个算法,在不同的编程语言中有不同的实现,但是无论如何,最终执行的结果是一致的。其他方面的规范还有 网络协议 http、tcp、udp 等等。

wiki介绍

https://en.wikipedia.org/wiki/Service_provider_interface

spi 以及对应的实现

jdbc, 对应的驱动实现有,mysql,oracle,postgresql、sqlserver 等等。

servlet,对应的servet 容器实现有,tomcat、undertow、jetty 等等。

slf4j,对应的处理有,logback、apache log4j2 等等。

还有 spring cloud commons 中的定义的接口规范,其中有注册中心,对应的实现有 eureka、consul、nacos 等等。

相关推荐
哈哈很哈哈1 小时前
Spark 运行流程核心组件(三)任务执行
大数据·分布式·spark
jakeswang7 小时前
应用缓存不止是Redis!——亿级流量系统架构设计系列
redis·分布式·后端·缓存
不久之9 小时前
大数据服务完全分布式部署- 其他组件(阿里云版)
分布式·阿里云·云计算
Direction_Wind9 小时前
粗粮厂的基于spark的通用olap之间的同步工具项目
大数据·分布式·spark
tan77º1 天前
【项目】分布式Json-RPC框架 - 项目介绍与前置知识准备
linux·网络·分布式·网络协议·tcp/ip·rpc·json
BYSJMG1 天前
计算机大数据毕业设计推荐:基于Hadoop+Spark的食物口味差异分析可视化系统【源码+文档+调试】
大数据·hadoop·分布式·python·spark·django·课程设计
Viking_bird1 天前
Apache Spark 3.2.0 开发测试环境部署指南
大数据·分布式·ajax·spark·apache
励志成为糕手1 天前
企业级Spring事务管理:从单体应用到微服务分布式事务完整方案
分布式·spring·微服务·隔离级别·事务管理
Fireworkitte1 天前
Kafka的ISR、OSR、AR详解
分布式·kafka·ar