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

news2024/11/13 9:43:03

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.coloradmin.cn/o/462946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker compose-实现多服务、nginx负载均衡、--scale参数解决端口冲突问题

Docker compose-实现多服务、nginx负载均衡、--scale参数解决端口冲突问题 问题:scale参数端口冲突解决方法:nginx实现多服务、负载均衡修改docker-compose.yml配置新增nginx本地配置文件验证启动容器查看容器状态访问web应用 问题:scale参数…

《二》HTTP 请求报文和响应报文、请求方法、状态码

请求报文和响应报文: 请求报文: 客户端向服务器发送的请求信息,就叫做请求报文。 客户端发送一个 HTTP 请求到服务器,请求信息包含四部分:请求行、请求头、空行、请求体。 请求行:包含三部分,分别是请…

查看库文件是32位还是64位|查看lib是静态库还是导入库|判断是debug模式还是release模式

文章目录 dll位数查看lib位数查看查看lib库是静态库还是导入库dll库文件信息查看lib库文件内容查看dll库查看编译模式是debug还是release方法一方法二方法三 lib静态库查看编译模式是debug还是release方法一方法二 lib导入库查看编译模式是debug还是release查看Linux下的.a库&a…

ROS学习第十五节——常用API(C++)

由于时间问题,从这一节开始只记录C实现效果,加油 以下附上这一节调试用的程序 https://download.csdn.net/download/qq_45685327/87708069 1.初始化函数 void init(int &argc, char **argv, const std::string& name, uint32_t options 0); …

openEuler NFS+协议全新发布:实现NAS存储性能与可靠性倍增

4月21日,在openEuler Developer Day 2023上,openEuler发布NFS协议,实现单客户端访问NAS存储可靠性提升3倍、性能提升6倍,助力NAS存储全面满足新型生产核心场景下苛刻要求。 传统NFS面临挑战 网络文件系统(NFS&#xf…

vue打包如何开启gzip压缩

文章目录 场景gzip压缩有两种方案:个人实践 场景 本人前端打包的js达到了6.9M,导致网站加载很慢,想了下可以用gzip的方式压缩,减少文件大小。 “前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&#xff0c…

什么蓝牙耳机好?测评达人精选五款性价比高蓝牙耳机推荐

用蓝牙耳机听歌、刷视频、玩游戏已经成为趋势,有线耳机已经逐渐被取代,但蓝牙耳机价格跨度大,品牌和型号也非常多,究竟什么蓝牙耳机好?我作为测评员这几年已经体验过五十款蓝牙耳机,今天就来总结五款性价比…

模仿网易云音乐黑胶唱片的交互实现

今天在 .NET MAUI 中我们来实现这个交互效果,先来看看效果: 使用.NET MAU实现跨平台支持,本项目可运行于Android、iOS平台。 创建页面布局 项目模拟了网易云音乐的播放主界面,可播放本地音乐文件。使用MatoMusic.Core作为播放内…

ChatGLM ptuning predict(预测)为空值的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

html学习(布局方式(layout)、浮动(float)、定位(position)、弹性盒(flex))

布局方式(layout) 文档流 文档流(normal flow) 文档流通俗的讲,就是一个web页面中,每一个模块只能从上到下从左往右的方式排列在页面上。 将窗口自下而上分成一行一行,应在每行中按从左至右的依次排放元素&#xff0…

[ZJCTF 2019]EasyHeap-patchlibc-调试

1,三连 主要功能: 1、malloc申请chunk 2、修改chunk内容 3、free chunk 4、exit 堆题多看一个libc信息: 2,IDA分析 2.1、malloc申请chunk heaparray[i]:存放 chunk 的地址。read_input(heaparray[i], size):向 chunk 写入 s…

亚马逊云科技宣布四大举措,全方位赋能创新成长企业

4月13日,以“加速创新,成就未来”为主题的亚马逊云科技创新成长中国行深圳论坛圆满举行。会上亚马逊云科技宣布,将围绕创新成长企业的三大业务需求——云上创新、出海拓展、业务加速,提供行业聚焦、技术支撑、伙伴扶持、人才培养四…

ENVI5.3 自动配准流程化工具(Image Registration Workflow)配准方法流程

ENVI5.3 自动配准流程化工具(Image Registration Workflow)配准方法流程。 打开 ENVI软件中的Image Registration Workflow工具,分辨打开参考图像和待校正的图像。 Base Image File是参考图像,参考图像的范围应比待校正图像的范围…

LaTeX论文自动化排版

本文介绍了一些论文写作的在线课程,方便读者朋友们自学,提高论文写作的能力。论文写作的在线课程非常多,读者朋友们也可以在网上自行搜索,选择适合自己的在线课程进行学习。如需要打开课程的网站,请复制课程的网址到浏…

威胁行为者针对云中的常见漏洞

Palo Alto Networks 已发布其第 42 单元云威胁报告的第 7 卷。该报告调查了 1300 多家组织。它分析了所有主要云服务提供商 (CSP) 的 210000 个云帐户、订阅和项目中的工作负载,为安全领导者和从业者提供了云安全的多方面视图。 云迁移的速度从 2021 年的 3700 亿…

Codeforces Round 867 (Div. 3) (E-G)

Problem - E - Codeforces (1)题目大意 给你一个字符串,问你让字符串每一对相对应位置都不同的最小操作数是多少?(A[i]和A[n - i],A[i 1]和A[n - i - 1]) (2)解题思路 1.首…

数据库基础篇 《16.变量、流程控制与游标》

数据库基础篇 《16.变量、流程控制与游标》 1. 变量 在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据。 在 MySQL 数据库中,变量分为系统变量以及用户自定义变量。 1.1 系统变量 1…

深度学习入门:多层感知机实现异或门

文章目录 前言感知机2层感知机实现异或门总结参考文献: 前言 最近又开始看深度学习的内容了,好久不用忘得差不多了,先从最简单的感知机入手了,这里记录下用2层感知机实现异或门。 感知机 什么是感知机呢?这里粗浅的介…

初步了解c语言(三)

注:此篇文章仅限初步了解,本小白后续会持续进行详解。 目录: 函数数组数组的定义数组的下标 操作符常见关键字关键字static的使用修饰局部变量修饰全局变量修饰函数 关键字register的大概了解#define定义常量和宏结构体💞结尾 函数…

RuntimeError: “LayerNormKernelImpl“ not implemented for ‘Long‘解决方法

问题出现的场景: 输入: import torch import torch.nn as nn atorch.randint(10,[3,4]) # atorch.DoubleTensor(a) # aa.double() print(a) layer_normnn.LayerNorm(4) layer_norm(a) 我就是想测试一下经过layernorm之后的输出会变成什么样 但是报错…