从零到壹搭建一个商城架构--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

相关文章

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参