从零到壹搭建一个商城架构--Sleuth+Zipkin服务链路追踪

2023-12-08 23:50

本文主要是介绍从零到壹搭建一个商城架构--Sleuth+Zipkin服务链路追踪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果想了解其他内容,请点击这里查看目录

1、为什么用

微服务架构是一个分布式架构,它按业务划分单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底哪些服务参与,参与的顺序又是怎样,从而达到每个请求的步骤清晰可见,出了问题,很快定位。

链路追踪组件有Google的Dapper,Twitter的Zipkin,以及阿里的Eagleeye(鹰眼)等,它们都是非常优秀的链路追踪开源组件

2、基本术语
  • Span(跨度):基本工作单元,发送一个远程调度任务,就会产生一个Span,Span是一个64位ID唯一标识的,Trace是用另一个64位ID唯一标识的,SPan还有其他数据信息,比如摘要、时间戳事件、Span的ID、以及进度ID。

  • Trace(跟踪):一系列Span组成的一个树状结构,请求一个微服务系统的API接口,这个API接口,需要调用多个微服务,调用每个微服务都会产生一个新的Apan,所有由这个请求产生的Span组成了这个Trace。

  • Annotation(标注):用来及时记录一个事件,一些核心注解用来定义一个请求的开始和结束。这些注解包含以下:

    • cs-Client Sent:客户端发送一个请求,这个注解描述了这个Span的开始

    • sr-Server Received:服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网络传输的时间

    • ss-Server Sent:服务端发送响应,该注解表明请求处理的完成)(当请求返回客户端),如果ss的时间戳减去sr时间戳,就可以得到服务器请求的时间

    • cr-Client Received:客户端接收响应,此时Span的结束,如果cr的时间戳减去cs的时间戳便可以得到整个请求锁消耗的时间

官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/2.1.3RELEASE/single/spring-cloud-sleuth.html

如果服务调用顺序如下

在这里插入图片描述

那么用以上概念完成的表示出来如下
在这里插入图片描述

3、整合Sleuth

服务提供者与消费者导入依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
4、整合Zipkin可视化观察
4.1、为什么使用

通过Sleuth产生的调用链监控信息,可以得知微服务之间的调用链路,单监控信息只输出到控制台不方便查看。我们需要一个图形化的工具Zipkin。Zipkin事Twitter开源的分布式跟踪系统,主要用来手机系统的时序数据,从而追踪系统的调用问题。Zipkin官网地址如下:https://zipkin.io/

4.2、原理

在这里插入图片描述

4.3、安装步骤

1、docker安装zipkin服务器

docker run -d -p 9411:9411 openzipkin/zipkin

2、导入依赖

<!--导入zipkin依赖,zipkin依赖也同时包含了sleuth,可以省略sleuth的引用-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

3、添加zipkin相关配置

spring:#服务链路追踪zipkin:#zipkin服务器地址base-url: http://192.168.56.10:9411/#关闭服务发现,否则SpringCloud会把zipkin的url当成一个服务名称discovery-client-enabled: falsesender:#设置使用http的方式传输数据type: websleuth:sampler:#设置抽样采集率为100%,默认为0.1,即10%probability: 1
5、Zipkin数据持久化

Zipkin默认是将监控数据存储在内存的,如果Zipkin挂掉或重启的话,那么监控数据就会丢失。所以如果想要搭建生产可用的Zipkin,就需要实现监控数据的持久化。而想要实现数据持久化,自然就是将数据存储到数据库。好在Zipkin支持将数据存储至:

  • 内存(默认)
  • mysql
  • Elasticsearch
  • Cassandra

Zipkin数据持久化相关的官方文档地址如下:

https://github.com/openzipkin/zipkin#storage-component

Zipkin支持的这几种存储方式中,内存显然是不适用于生产的,这一点开始也说了。而使用mysql的话,当数据量大时,查询较为缓慢,也不建议使用。Teitter官方使用的是Cassandra作为Zipkin的存储数据库,但国内大规模用Cassandra的公司较少,而且Cassandra相关文档也不多。

综上,故采用Elasticsearch是个比较好的选中,关于使用Elasticsearch作为Zipkin的存储数据库的官方文件如下:

elasticsearch-storage:

https://github.com/openzipkin/zipkin/tree/master/zipkin-server#elasticsearch-storage

zipkin-storage/elasticesearch:

https://github.com/openzipkin/zipkin/tree/master/zipkin-storage/elasticsearch

通过docker的方式,在生产环境启动如下:

docker run --env STORAGE_TYPE=elasticsearch --env ES_HOSTS=192.168.56.10:9200 openzipkin/zipkin-dependencies

可配置的环境变量参数如下:
在这里插入图片描述

这篇关于从零到壹搭建一个商城架构--Sleuth+Zipkin服务链路追踪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/471736

相关文章

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、