当前位置: 首页 > article >正文

03-11、SpringCloud第十一章,升级篇,分布式链路跟踪Sleuth

SpringCloud第十一章,升级篇,分布式链路跟踪Sleuth

一、分布式链路概述

1、为什么

随着分布式系统越来越复杂,你的一个请求发过发过去,各个微服务之间的跳转,有可能某个请求某一天压力太大了,一个请求过去没响应,一个请求下去依赖了三四个服务,但是你去不知道哪一个服务出来问题,这时候我是不是需要对微服务进行追踪呀?监控一个请求的发起,从服务之间传递之间的过程,我最好记录一下,记录每一个的耗时多久,一旦出了问题,我们就可以针对性的进行优化,是要增加节点,减轻压力,还是服务继续拆分,让逻辑更加简单点呢?这时候springcloud-sleuth集成zipkin能帮我们解决这些服务追踪问题。

2、是什么

SpringCloud Sleuth提供了一套完整的服务跟踪的解决方案,在分布式系统中提供追踪解决方案并且兼容支持了zipkin.


SpringCloud从F版起已不需要自己构建Zipkin server了,只需要调用jar包即可 

3、相关概念

1、Span:
基本工作单元.例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID.
span在不断的启动和停止,同时记录了时间信息,当你创建了一个span,你必须在未来的某个时刻停止它。

span:表示调用链路来源,通俗的理解span就是一次请求信息


2、Trace
一系列spans组成的一个树状结构,例如,如果你正在跑一个分布式大数据工程,你可能需要创建一个trace。

Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识

3、annocation
cs- Client Sent
cr- Client Received
ss- Server Sent
sr- Server Received



一条链路通过Trace ID唯一标识;
Span标识发起请求信息;
各span通过parent ID关联

在这里插入图片描述

二、分布式链路案例

1、下载运行Zipkin

SpringCloud从F版起已不需要自己构建Zipkin server了,只需要调用jar包即可

下载地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/

运行

java -jar zipkin-server-2.12.9-exec.jar

控制台

http://localhost:9411/zipkin/

2、整合服务提供者

整合cloud-provider-payment-8001

POM添加

<!--包含了sleuth+zipkin-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

application.yml

server:
  port: 8001


spring:
  application:
    name: cloud-payment-service #自己的服务名称
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/cloud2020?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: admin123
  #新增
  zipkin:
    base-url: http://localhost:9411
  #新增
  sleuth:
    sampler:
      probability: 1 #采样率 1为全部采集  一般0.5即可

eureka:
  client:
    register-with-eureka: true #向eureka server注册自己
    fetch-registry: true #需要去注册中心获取其他服务的地址
    service-url:
      #defaultZone: http://localhost:7001/eureka #单机 指向Eureka服务注册中心
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002:7002.com/eureka #集群 执行Eureka服务注册中心
  instance:
    instance-id: cloud-provider-payment-service-8001
    prefer-ip-address: true #是否显示服务IP地址

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.lee.springcloud.entities
  ##configuration:
    ##log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #控制台打印SQL

PaymentController新增方法:

@Slf4j
@RequestMapping("/payment")
@RestController
public class PaymentController {
    
    //新增方法
    @GetMapping("/payment/zipkin")
    public String paymentZipkin()
    {
        return "hi ,i'am paymentzipkin server fall back,welcome to sleuth,O(∩_∩)O哈哈~";
    }
    
}

3、整合服务消费者

整合cloud-consumer-order-80

POM新增

<!--包含了sleuth+zipkin-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

application.yml

server:
  port: 80

spring:
  application:
    name: cloud-consumer-order #表示自己向Eureka server注册时,自己的服务名称
  #新增
  zipkin:
    base-url: http://localhost:9411
  #新增
  sleuth:
    sampler:
      probability: 1 #采样率 1为全部采集  一般0.5即可

eureka:
  client:
    register-with-eureka: true #向eureka server注册自己
    fetch-registry: true #需要去注册中心获取其他服务的地址
    service-url:
      #defaultZone: http://localhost:7001/eureka #单机 指向Eureka服务注册中心
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002:7002.com/eureka #集群 指向eureka服务注册中心
  instance:
    instance-id: cloud-consumer-order-80
    prefer-ip-address: true #是否显示服务IP地址

# 设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
  # 指的是建立连接所用的时间,适用于网络状态正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
  # 指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000

PaymentService新增

@Service
@FeignClient(name="CLOUD-PAYMENT-SERVICE")
public interface PaymentService {

 	//新增方法
    @GetMapping("/payment/zipkin")
    String paymentZipkin();
    
}

OrderController新增


@RestController
@RequestMapping("/consumer")
public class OrderController {
    
    //新增方法
    @GetMapping("/payment/zipkin")
    public String paymentZipkin()
    {
        return paymentService.paymentZipkin();
    }
}

4、测试

1、依次启动eureka-7001、cloud-provider-payment-8001、cloud-consumer-order-80
2、通过80调用8001
http://localhost/consumer/payment/zipkin
【可多调用几次】
3、访问zipkin
http://localhost:9411/zipkin/

【以下可以观察到服务链路的调用过程】

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/415566.html

相关文章:

  • 配置泛微e9后端开发环境
  • vs 项目属性表
  • C语言——指针初阶(一)
  • CA系统(file.h---申请认证的处理)
  • JAVA实现上传附件到服务器
  • Web会话安全测试
  • ML 系列:第 35 节 - 机器学习中的数据可视化
  • 基于单片机的智能药箱设计
  • ESP32开发板在micropython里直接用requests向web服务器发送请求
  • Hive | Hive 表如何查看所有分区
  • Linux环境变量与本地变量
  • 随笔20241126 Kafka 消费者的自动提交与手动提交偏移量详解
  • 【金猿案例展】无锡征信——百望云绿色金融数据要素+数据资产入表服务方案...
  • React进阶面试题目(二)
  • 基于时间维度优化“开源 AI 智能名片 S2B2C 商城小程序”运营策略:提升触达与转化效能
  • 数据分析流程中的Lambda架构,以及数据湖基于Hadoop、Spark的实现
  • 实例讲解MATLAB绘图坐标轴标签旋转
  • 网络安全运行与维护高级 - 题库汇总百题
  • Linux中创建SFTP用户并设置默认文件权限为775的三种方法
  • 虚拟机ubuntu-20.04.6-live-server搭建OpenStack:Victoria(一:工具、环境准备-controller node)
  • MaskRCNN训练自己的数据集
  • OpenCV 图像轮廓查找与绘制全攻略:从函数使用到实战应用详解
  • 前端开发:构建高质量用户体验的全方位指南(含实际案例与示例)
  • 社群赋能电商:小程序 AI 智能名片与 S2B2C 商城系统的整合与突破
  • 实例分析基于RFCOMM协议大数据传输以及流控
  • 快速排序及其优化【图文详解】