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

相关文章

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Gradle下如何搭建SpringCloud分布式环境

《Gradle下如何搭建SpringCloud分布式环境》:本文主要介绍Gradle下如何搭建SpringCloud分布式环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Gradle下搭建SpringCloud分布式环境1.idea配置好gradle2.创建一个空的gr

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码