分布式服务的链路跟踪 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 小时前
RabbitMQ 高级特性——消息分发
分布式·rabbitmq·ruby
茶馆大橘2 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
材料苦逼不会梦到计算机白富美4 小时前
golang分布式缓存项目 Day 1
分布式·缓存·golang
想进大厂的小王5 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
Java 第一深情5 小时前
高性能分布式缓存Redis-数据管理与性能提升之道
redis·分布式·缓存
ZHOU西口6 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
zmd-zk6 小时前
kafka+zookeeper的搭建
大数据·分布式·zookeeper·中间件·kafka
yx9o12 小时前
Kafka 源码 KRaft 模式本地运行
分布式·kafka
Gemini199512 小时前
分布式和微服务的区别
分布式·微服务·架构
G丶AEOM12 小时前
分布式——BASE理论
java·分布式·八股