6.微服务项目实战---Sleuth--链路追踪

news/2024/3/29 18:08:57/文章来源:https://blog.csdn.net/m0_68408835/article/details/130379035

6.1 链路追踪介绍

在大型系统的微服务化构建中,一个系统被拆分成了许多模块。这些模块负责不同的功能,组合成
系统,最终可以提供丰富的功能。在这种架构中,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心,也就意味着这种架构形式也会存在一些问题:
  • 如何快速发现问题?
  • 如何判断故障影响范围?
  • 如何梳理服务依赖以及依赖的合理性?
  • 如何分析链路性能问题以及实时容量规划?

 

分布式链路追踪( Distributed Tracing ),就是将一次分布式请求还原成调用链路,进行日志记
录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
常见的链路追踪技术有下面这些:
  • cat 由大众点评开源,基于Java开发的实时应用监控平台,包括实时应用监控,业务监控 。 集成方案是通过代码埋点的方式来实现监控,比如: 拦截器,过滤器等。 对代码的侵入性很大,集成成本较高。风险较大。
  • zipkin Twitter公司开源,开放源代码分布式的跟踪系统,用于收集服务的定时数据,以解决微服务架构中的延迟问题,包括:数据的收集、存储、查找和展现。该产品结合spring-cloud-sleuth 使用较为简单, 集成很方便, 但是功能较简单。
  • pinpoint Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
  • skywalking SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
  • Sleuth SpringCloud 提供的分布式系统中链路追踪解决方案。
注意:SpringCloud alibaba技术栈中并没有提供自己的链路追踪技术的,我们可以采用Sleuth +
Zinkin来做链路追踪解决方案

6.2 Sleuth入门

6.2.1 Sleuth介绍

SpringCloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案。它大量借用了 Google
Dapper 的设计, 先来了解一下 Sleuth 中的术语和相关概念。
  • Trace  由一组Trace Id相同的Span串联形成一个树状结构。为了实现请求跟踪,当请求到达分布式系统的 入口端点时,只需要服务跟踪框架为该请求创建一个唯一的标识(即TraceId),同时在分布式系统内部流转的时候,框架始终保持传递该唯一值,直到整个请求的返回。那么我们就可以使用该唯一标识将所有的请求串联起来,形成一条完整的请求链路。
  • Span  代表了一组基本的工作单元。为了统计各处理单元的延迟,当请求到达各个服务组件的时候,也通过一个唯一标识(SpanId)来标记它的开始、具体过程和结束。通过SpanId的开始和结束时间戳,就能统计该span的调用时间,除此之外,我们还可以获取如事件的名称。请求信息等元数据。
  • Annotation 用它记录一段时间内的事件,内部使用的重要注释:
  1. csClient Send)客户端发出请求,开始一个请求的生命
  2. srServer Received)服务端接受到请求开始进行处理, srcs = 网络延迟(服务调用的时间)
  3. ssServer Send)服务端处理完毕准备发送到客户端,ss - sr = 服务器上的请求处理时间
  4. crClient Reveived)客户端接受到服务端的响应,请求结束。 cr - sr = 请求的总时间

 

6.2.2 Sleuth入门

微服务名称 , traceId, spanid, 是否将链路的追踪结果输出到第三方平台
[api-gateway,3977125f73391553,3977125f73391553,false]
[service-order,3977125f73391553,57547b5bf71f8242,false]
[service-product,3977125f73391553,449f5b3f3ef8d5c5,false]
接下来通过之前的项目案例整合 Sleuth ,完成入门案例的编写。
修改父工程引入 Sleuth 依赖

 

启动微服务,调用之后,我们可以在控制台观察到 sleuth 的日志输出

 

其中 5399d5cb061971bd TraceId 5399d5cb061971bd SpanId ,依次调用有一个全局的
TraceId ,将调用链路串起来。仔细分析每个微服务的日志,不难看出请求的具体过程。
查看日志文件并不是一个很好的方法,当微服务越来越多日志文件也会越来越多,通过 Zipkin 可以
将日志聚合,并进行可视化展示和全文检索。

6.3 Zipkin的集成

6.3.1 ZipKin介绍

Zipkin Twitter 的一个开源项目,它基于 Google Dapper 实现,它致力于收集服务的定时数据,
以解决微服务架构中的延迟问题,包括数据的 收集、存储、查找和展现
我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。
除了面向开发的 API 接口之外,它也提供了方便的 UI 组件来帮助我们直观的搜索跟踪信息和分析请求链路明细,比如:可以查询某段时间内各用户请求的处理时间等。
Zipkin 提供了可插拔数据存储方式: In-Memory MySql Cassandra 以及 Elasticsearch

 

 

上图展示了 Zipkin 的基础架构,它主要由 4 个核心组件构成:
  • Collector:收集器组件,它主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为 Zipkin内部处理的 Span 格式,以支持后续的存储、分析、展示等功能。
  • Storage:存储组件,它主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中。
  • RESTful APIAPI 组件,它主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是外接系统访问以实现监控等。
  • Web UIUI 组件, 基于API组件实现的上层应用。通过UI组件用户可以方便而有直观地查询和分析跟踪信息。
Zipkin 分为两端,一个是 Zipkin 服务端,一个是 Zipkin 客户端,客户端也就是微服务的应用。 客户端会配置服务端的 URL 地址,一旦发生服务间的调用的时候,会被配置在微服务里面的 Sleuth 的监听器监听,并生成相应的 Trace Span 信息发送给服务端。

6.3.2 ZipKin服务端安装

1 : 下载 ZipKin jar
访问上面的网址,即可得到一个 jar 包,这就是 ZipKin 服务端的 jar
2 : 通过命令行,输入下面的命令启动 ZipKin Server

 

3 步:通过浏览器访问 http://localhost:9411 访问

 

6.3.3 Zipkin客户端集成

ZipKin 客户端和 Sleuth 的集成非常简单,只需要在微服务中添加其依赖和配置即可。
1 步:在每个微服务上添加依赖

 2步:添加配置

 

3 : 访问微服务

 

4 : 访问 zipkin UI 界面,观察效果

 

5 步:点击其中一条记录,可观察一次访问的详细线路。

6.4 ZipKin数据持久化

Zipkin Server 默认会将追踪数据信息保存到内存,但这种方式不适合生产环境。 Zipkin 支持将追踪
数据持久化到 mysql 数据库或 elasticsearch 中。

6.4.1 使用mysql实现数据持久化

1 : 创建 mysql 数据环境

2 : 在启动 ZipKin Server 的时候 , 指定数据保存的 mysql 的信息

 

6.4.2 使用elasticsearch实现数据持久化

1 : 下载 elasticsearch
下载地址: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-4
2 : 启动 elasticsearch

 

3 : 在启动 ZipKin Server 的时候,指定数据保存的 elasticsearch 的信息

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103731.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法与数据结构】6 学会对算法进行性能测试

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于算法与数据结构体系专栏,本专栏对于0基础者极为友好,欢迎与我一起完成算法与数据结构的从0到1的跨越 算法性能测试 一、前情回顾二、算法性能测试1.生成测试用例2.使用测…

多种内网穿透的实现方案

1. 内网穿透的应用场景 1.1. 开发调试 比如企业微信、钉钉等开发,需要一个回调地址,开发的时候,希望回调到开发的电脑上,打断点进行调试,这就需要穿透到内网的开发机器。 1.2. 演示测试 有需要演示或测试的系统&am…

SLAM论文速递:SLAM—— MID-Fusion:基于八叉树的对象级多实例动态SLAM—4.26(1)

论文信息 题目: MID-Fusion:Octree-based Object-Level Multi-Instance Dynamic SLAMMID-Fusion:基于八叉树的对象级多实例动态SLAM 论文地址: https://ieeexplore.ieee.org/abstract/document/8794371发表期刊: 2019 International Conf…

凌恩生物文献分享|一株细菌完成图也能发一区10分+!

期刊:Science of the Total Environment 影响因子:10.753 发表时间:2022 样本类型:Bosea sp. Ads-6菌株 客户单位:中国科学院微生物研究所 一、研究背景 环境中抗生素残留和耐药性的增加引发了许多…

亚马逊美国站纽扣电池标准

近日,亚马逊美国站公布要求卖家需遵守扭电池和硬币电池的新包装和警示标签规定公告。 在亚马逊销售单独的纽扣电池和硬币电池,则从2023年3月2日开始,您需要证明您的符合儿童安全包装和警告标签要求。 适用产品有;单独的纽扣电池或硬币电池&a…

Android SeekBar控制视频播放进度(二)——seekTo()不准确

Android SeekBar控制视频播放进度二——seekTo不准确 简介seekTo()视频帧 和 视频关键帧解决办法方法一方法二 简介 上一篇文章中,我们介绍了使用SeekBar控制视频播放,使用过程中发现,对于一些视频,我们拖动SeekBar进度条调节播放…

谈谈如何用开源网关进行 API 管理

需求痛点 1.企业不清楚到底有多少个API,无法形成API资产管理等问题。 2.API在不同集群的生命周期问题。 3.API运行状态监控和告警问题。 4.API请求限流、流量控制以及安全等问题。 功能介绍 Apinto的API管理提供API生命周期控制:可管理所有API&…

【DRF配置管理】如何在视图类使用get_objects()

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 DRF应用和管理 【DRF配置管理】Django使用DRF框架 【DRF配置管理】如何在视图类配置参数(一) 【DRF配置管理】如何在视图类配置参数(二) 【DRF配置管理…

跨数据中心下的 Kafka 高可用架构分析

导语 本文介绍了 Kafka 跨数据中心的两种部署方式,简要分析两种方式下的不同架构以及优缺点,对这些架构可能碰到的问题也提供了一些解决思路;同时也说明了 Kafka 跨数据中心部署的社区解决方案和商业化解决方案。 背景 Kafka 作为世界上最…

Excel技能之实用技巧,高手私藏

今天来讲一下Excel技巧,工作常用,高手私藏。能帮到你是我最大的荣幸。 与其加班熬夜赶进度,不如下班学习提效率。能力有成长,效率提上去,自然不用加班。 消化吸收,工作中立马使用,感觉真不错。…

宠物领养系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87708775 更多系统资源库…

「OceanBase 4.1 体验」|大厂开始接入的国产分布式数据库,不来了解了解?

OceanBase 4.1 体验 前言OCP Express在线升级功能租户级物理备库TP(事务处理)和AP(分析处理)优化TP 性能优化AP 性能优化 结尾 前言 上次我们讲了本人自己亲自上手OceanBase 4.1的初体验,国产的分布式数据库也太太太太…

【STM32】基础知识 第八课 MDK 工程

【STM32】基础知识 第八课 MDK 工程 准备工作新建寄存器版本 MDK 工程步骤新建工程文件夹添加文件魔术棒设置绝对路径和相对路径对比测试程序 新建 HAL 库版本 MDK 工程CMSISHAL 库简介DriversMiddlewaresDevice 和 Include HAL 库文件介绍HAL 库 API 函数和比那辆命名规则HAL …

【ArcGIS】常见问题总结

1 arcgis如何打开*.adf文件 在处理数据时发现,获取到的土地利用类型数据有两个文件夹,一个叫info,另一个叫lucc2010(年份),打开lucc2010里面是一系列的*.adf文件,数据应该如何打开呢&#xff1…

【Vue】Vue 前端设计模式梳理

文章目录 一、什么是设计模式?二、设计几个原则三、常见的设计模式及实际案例【1】单例模式1. 什么是单例模式?2.Vue中的单例模式 【2】工厂模式1. 什么是工厂模式?2.Vue中的工厂模式 【3】策略模式1. 什么是策略模式?2.策略模式的…

QT笔记——QtPropertyBrowser的使用

上一节,我们将了如何去配置QtPropertyBrowser 本节,我们将说明 如何 去 使用QtPropertyBrowser 这个属性类的一些基本知识 简单的几种用法: 首先: 我们需要创建一个Widget 提升一个类 为 QtTreePropertyBrowser .h文件 QtVariant…

详解客户关系管理系统

一、客户关系管理系统的重要性 客户关系管理系统,是指利用软件、硬件和网络技术,为企业建立一个客户信息收集、管理、分析和利用的信息系统。以客户数据的管理为核心,记录企业在市场营销和销售过程中和客户发生的各种交互行为,以…

华为C++研发工程师编程题 ACM模式输入输出|| 1.汽水瓶,2.明明的随机数,3.进制转换

C ACM输入输出 1.汽水瓶题目描述思路代码如下 2.明明的随机数题目描述思路:代码如下: 3.进制转换题目描述思路:代码如下 题目链接: 华为研发工程师编程题 1.汽水瓶 题目描述 某商店规定:三个空汽水瓶可以换一瓶汽水…

服务器空间不足处理与解决思路—实战docker占用空间太大

前言 服务器Centos操作系统,空间不足的问题处理了三次了,决定把它的解决思路和处理过程记录下来。服务器空间不足是一个经常会遇到的问题,尤其是在大型应用程序和网站上。当服务器空间不足时,应该采取一些步骤来处理和解决这个问…

LeetCode:206. 反转链表

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 一、🌱206. 反转链表 题目描述:给你单链表的头节点 head &#x…