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

打印 上一主题 下一主题

主题 762|帖子 762|积分 2286

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

1、为什么

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

  1. SpringCloud Sleuth提供了一套完整的服务跟踪的解决方案,在分布式系统中提供追踪解决方案并且兼容支持了zipkin.
  2. SpringCloud从F版起已不需要自己构建Zipkin server了,只需要调用jar包即可
复制代码
3、相关概念

  1. 1、Span:
  2. 基本工作单元.例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID.
  3. span在不断的启动和停止,同时记录了时间信息,当你创建了一个span,你必须在未来的某个时刻停止它。
  4. span:表示调用链路来源,通俗的理解span就是一次请求信息
  5. 2、Trace
  6. 一系列spans组成的一个树状结构,例如,如果你正在跑一个分布式大数据工程,你可能需要创建一个trace。
  7. Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识
  8. 3、annocation
  9. cs- Client Sent
  10. cr- Client Received
  11. ss- Server Sent
  12. sr- Server Received
复制代码
  1. 一条链路通过Trace ID唯一标识;
  2. Span标识发起请求信息;
  3. 各span通过parent ID关联
复制代码

二、分布式链路案例

1、下载运行Zipkin

SpringCloud从F版起已不需要本身构建Zipkin server了,只需要调用jar包即可
  1. 下载地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
复制代码
运行
  1. java -jar zipkin-server-2.12.9-exec.jar
复制代码
控制台
  1. http://localhost:9411/zipkin/
复制代码
2、整合服务提供者

整合cloud-provider-payment-8001
POM添加
  1. <!--包含了sleuth+zipkin-->
  2. <dependency>
  3.     <groupId>org.springframework.cloud</groupId>
  4.     <artifactId>spring-cloud-starter-zipkin</artifactId>
  5. </dependency>
复制代码
application.yml
  1. server:
  2.   port: 8001
  3. spring:
  4.   application:
  5.     name: cloud-payment-service #自己的服务名称
  6.   datasource:
  7.     type: com.alibaba.druid.pool.DruidDataSource
  8.     driver-class-name: org.gjt.mm.mysql.Driver
  9.     url: jdbc:mysql://localhost:3306/cloud2020?useUnicode=true&characterEncoding=utf-8&useSSL=false
  10.     username: root
  11.     password: admin123
  12.   #新增
  13.   zipkin:
  14.     base-url: http://localhost:9411
  15.   #新增
  16.   sleuth:
  17.     sampler:
  18.       probability: 1 #采样率 1为全部采集  一般0.5即可
  19. eureka:
  20.   client:
  21.     register-with-eureka: true #向eureka server注册自己
  22.     fetch-registry: true #需要去注册中心获取其他服务的地址
  23.     service-url:
  24.       #defaultZone: http://localhost:7001/eureka #单机 指向Eureka服务注册中心
  25.       defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002:7002.com/eureka #集群 执行Eureka服务注册中心
  26.   instance:
  27.     instance-id: cloud-provider-payment-service-8001
  28.     prefer-ip-address: true #是否显示服务IP地址
  29. mybatis:
  30.   mapper-locations: classpath:mapper/*.xml
  31.   type-aliases-package: com.lee.springcloud.entities
  32.   ##configuration:
  33.     ##log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #控制台打印SQL
复制代码
PaymentController新增方法:
  1. @Slf4j
  2. @RequestMapping("/payment")
  3. @RestController
  4. public class PaymentController {
  5.    
  6.     //新增方法
  7.     @GetMapping("/payment/zipkin")
  8.     public String paymentZipkin()
  9.     {
  10.         return "hi ,i'am paymentzipkin server fall back,welcome to sleuth,O(∩_∩)O哈哈~";
  11.     }
  12.    
  13. }
复制代码
3、整合服务消费者

整合cloud-consumer-order-80
POM新增
  1. <!--包含了sleuth+zipkin-->
  2. <dependency>
  3.     <groupId>org.springframework.cloud</groupId>
  4.     <artifactId>spring-cloud-starter-zipkin</artifactId>
  5. </dependency>
复制代码
application.yml
  1. server:
  2.   port: 80
  3. spring:
  4.   application:
  5.     name: cloud-consumer-order #表示自己向Eureka server注册时,自己的服务名称
  6.   #新增
  7.   zipkin:
  8.     base-url: http://localhost:9411
  9.   #新增
  10.   sleuth:
  11.     sampler:
  12.       probability: 1 #采样率 1为全部采集  一般0.5即可
  13. eureka:
  14.   client:
  15.     register-with-eureka: true #向eureka server注册自己
  16.     fetch-registry: true #需要去注册中心获取其他服务的地址
  17.     service-url:
  18.       #defaultZone: http://localhost:7001/eureka #单机 指向Eureka服务注册中心
  19.       defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002:7002.com/eureka #集群 指向eureka服务注册中心
  20.   instance:
  21.     instance-id: cloud-consumer-order-80
  22.     prefer-ip-address: true #是否显示服务IP地址
  23. # 设置feign客户端超时时间(OpenFeign默认支持ribbon)
  24. ribbon:
  25.   # 指的是建立连接所用的时间,适用于网络状态正常的情况下,两端连接所用的时间
  26.   ReadTimeout: 5000
  27.   # 指的是建立连接后从服务器读取到可用资源所用的时间
  28.   ConnectTimeout: 5000
复制代码
PaymentService新增
  1. @Service
  2. @FeignClient(name="CLOUD-PAYMENT-SERVICE")
  3. public interface PaymentService {
  4.         //新增方法
  5.     @GetMapping("/payment/zipkin")
  6.     String paymentZipkin();
  7.    
  8. }
复制代码
OrderController新增
  1. @RestController
  2. @RequestMapping("/consumer")
  3. public class OrderController {
  4.    
  5.     //新增方法
  6.     @GetMapping("/payment/zipkin")
  7.     public String paymentZipkin()
  8.     {
  9.         return paymentService.paymentZipkin();
  10.     }
  11. }
复制代码
4、测试

  1. 1、依次启动eureka-7001、cloud-provider-payment-8001、cloud-consumer-order-802、通过80调用8001http://localhost/consumer/payment/zipkin【可多调用几次】3、访问zipkinhttp://localhost:9411/zipkin/
  2. 【以下可以观察到服务链路的调用过程】
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表