微服务之分布式链路追踪

一、概述

1.1背景

在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。

在分布式与微服务场景下,我们需要解决如下问题:

 

在大规模分布式与微服务集群下,如何实时观测系统的整体调用链路情况。

在大规模分布式与微服务集群下,如何快速发现并定位到问题。

在大规模分布式与微服务集群下,如何尽可能精确的判断故障对系统的影响范围与影响程度。

在大规模分布式与微服务集群下,如何尽可能精确的梳理出服务之间的依赖关系,并判断出服务之间的依赖关系是否合理。

在大规模分布式与微服务集群下,如何尽可能精确的分析整个系统调用链路的性能与瓶颈点。

在大规模分布式与微服务集群下,如何尽可能精确的分析系统的存储瓶颈与容量规划。

1.2分布式链路追踪概述

分布式链路追踪技术要解决的问题,分布式链路追踪(Distributed Tracing),就是将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

1.3Sleuth(弃用了解)

Sleuth 是一个基于 Spring Cloud 的分布式跟踪系统,主要用来解决微服务架构中的分布式链路追踪问题,在分布式系统中,请求往往需要涉及多个服务之间的调用,这时候就需要一种工具来帮助我们进行跟踪和监控。Sleuth 就是这样一种工具,它可以记录下请求在分布式系统中的完整流程,从而方便开发人员进行问题定位和排除。

Sleuth 的工作原理很简单:在服务请求发送过程中,Sleuth 首先会为请求生成一个 Trace ID,Trace ID 是一串唯一标识符,用于唯一标识这个请求,然后在请求的头信息中添加 Trace ID 和 Span ID ,最后将请求发送到相应的服务端。当服务端收到请求后,在请求头信息中取出 Trace ID 和 Span ID,根据这些信息,Sleuth 可以将整个分布式系统中的请求流程记录下来。

Spring Cloud Sleuth不适用于Spring Boot3x及以版本。Sleuth支持的最后一个Spring Boot主要版本是2×。 

1.4Micrometer

  • 官网https://spring.io/projects/spring-cloud-sleuth#overview
  •  github https://github.com/spring-cloud/spring-cloud-sleuth 

 Spring Cloud Sleuth(micrometer)提供了一套完整的分布式链路追踪(Distributed Tracing)
解决方案且兼容支持了zipkin.展现

将一次分布式请求还原成调用链路,进行日志记录和性能监控,并将一次分布式请求的调用情况集中web展示 

1.5Zipkin

官网https://zipkin.io/

Zipkin是一种分布式链路跟踪系统图形化的工具,Zipkin 是 Twitter 开源的分布式跟踪系统,能够收集微服务运行过程中的实时调用链路信息,并能够将这些调用链路信息展示到Web图形化界面上供开发人员分析,开发人员能够从ZipKin中分析出调用链路中的性能瓶颈,识别出存在问题的应用程序,进而定位问题和解决问题。

 安装

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

二、实战

2.1环境部署

pom

 <properties><micrometer-tracing.version>1.2.0</micrometer-tracing.version><micrometer-observation.version>1.12.0</micrometer-observation.version><feign-micrometer.version>12.5</feign-micrometer.version><zipkin-reporter-brave.version>2.17.0</zipkin-reporter-brave.version></properties>
   <!--micrometer-tracing-bom导入链路追踪版本中心  1--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bom</artifactId><version>${micrometer-tracing.version}</version><type>pom</type><scope>import</scope></dependency><!--micrometer-tracing指标追踪  2--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing</artifactId><version>${micrometer-tracing.version}</version></dependency><!--micrometer-tracing-bridge-brave适配zipkin的桥接包 3--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bridge-brave</artifactId><version>${micrometer-tracing.version}</version></dependency><!--micrometer-observation 4--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-observation</artifactId><version>${micrometer-observation.version}</version></dependency><!--feign-micrometer 5--><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-micrometer</artifactId><version>${feign-micrometer.version}</version></dependency><!--zipkin-reporter-brave 6--><dependency><groupId>io.zipkin.reporter2</groupId><artifactId>zipkin-reporter-brave</artifactId><version>${zipkin-reporter-brave.version}</version></dependency>

yml

# ========================zipkin===================
management:zipkin:tracing:endpoint: http://localhost:9411/api/v2/spanstracing:sampling:probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。

2.2测试

服务端

@RestController
public class PayMicrometerController
{/*** Micrometer(Sleuth)进行链路监控的例子* @param id* @return*/@GetMapping(value = "/pay/micrometer/{id}")public String myMicrometer(@PathVariable("id") Integer id){return "Hello, 欢迎到来myMicrometer inputId:  "+id+" \t    服务返回:" + IdUtil.simpleUUID();}
}

Api接口 

   /*** Micrometer(Sleuth)进行链路监控的例子* @param id* @return*/@GetMapping(value = "/pay/micrometer/{id}")public String myMicrometer(@PathVariable("id") Integer id);

客户端

@RestController
@Slf4j
public class OrderMicrometerController
{@Resourceprivate PayFeignApi payFeignApi;@GetMapping(value = "/feign/micrometer/{id}")public String myMicrometer(@PathVariable("id") Integer id){return payFeignApi.myMicrometer(id);}
}

2.3效果

 查看依赖关系

 

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

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

相关文章

10. Spring MVC 程序开发

本文源码位置: Spring-MVC 1. Spring MVC 概要 摘自Spring官方&#xff1a; Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes …

K12智慧校园-医务中心

1 系统概述 学生医务就诊登记&#xff0c;所拿药品登记医务报销&#xff0c;做到学校医务也会智能化管理&#xff1b;学生健康检查登记&#xff0c;做到学校校园安全健康成长。 2 总体规划 1&#xff09;药品类别 设置药品类别给学校医务室药品分类&#xff0c;方便药品管理…

Unity AR开发环境搭建

在上一篇文章中&#xff0c;我定义了各种类型的扩展现实 (XR)。 在其中&#xff0c;我将增强现实 (AR) 定义为&#xff1a;增强现实 (AR) 将数字对象置于物理世界中。 通常&#xff0c;该设备将配备某种类型的相机&#xff08;例如智能手机&#xff09;&#xff0c;可以实时提供…

SpringBlade dict-biz/list SQL 注入漏洞复现

0x01 产品简介 SpringBlade 是一个由商业级项目升级优化而来的 SpringCloud 分布式微服务架构、SpringBoot 单体式微服务架构并存的综合型项目。 0x02 漏洞概述 SpringBlade 后台框架 /api/blade-system/dict-biz/list 路径存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞…

基于Springboot+Vue的Java项目-校园周边美食探索及分享平台系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

企业指标开发流程新主张

作为数据开发人员&#xff0c;你是否在指标开发过程中有过如下苦恼&#xff1a; Q1、 &#xff08;甲方&#xff09;业务人员&#xff1a;你这个指标计算逻辑不对&#xff0c;我们前期不是这么对的。 &#xff08;乙方&#xff09;卑微的你&#xff1a;Fu*k……我有录音。 …

LeetCode 101 对称二叉树

题目描述 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&#xf…

【介绍下负载均衡原理及算法】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

二维码生成器怎么做网址活码?链接制作二维码的方法

如何使用网址二维码生成器的功能来制作二维码呢&#xff1f;现在很多人会将网址生成二维码之后&#xff0c;分享给其他人通过手机扫码来打开网页获取内容&#xff0c;这种方式有利于网页的快速传播与分享&#xff0c;而且可以让更多的人同时访问对应的网页。那么网址转二维码的…

OpenHarmony轻量系统开发【2】源码下载和开发环境

2.1源码下载 关于源码下载的&#xff0c;读者可以直接查看官网&#xff1a; https://gitee.com/openharmony/docs/tree/master/zh-cn/release-notes 本文这里做下总结&#xff1a; &#xff08;1&#xff09;注册码云gitee账号。 &#xff08;2&#xff09;注册码云SSH公钥…

【数据结构|C语言版】单链表应用

前言1. 基于单链表实现通讯录1.1 知识要求1.2 功能要求 2. 代码总结2.1 SeqList.h2.2 SeqList.c2.3 Contact.h2.4 Contact.c2.5 test.c 后言 上期回顾&#xff1a;【数据结构|C语言版】单链表 前言 各位小伙伴大家好&#xff01;上期小编讲解了单链表相关知识&#xff0c;在此…

Linux crontab练习之在系统中设定定时任务并优化定时任务

Linux crontab练习之在系统中设定定时任务并优化定时任务 要求 每天凌晨4点系统的设备使用信息并以邮件的方式放送到root邮箱中确保此任务为系统定时任务 脚本实现 #!/bin/bashdnf install postfix s-nail-14.9.22-6.el9.x86_64 -y &> /dev/nullsystemctl enable --…