springcloud上传文件_Spring Cloud实战:服务链路追踪Spring Cloud Sleuth

推荐阅读:

  1. Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC
  2. 一个SpringBoot问题就干趴下了?我却凭着这份PDF文档吊打面试官.

前言

Spring Cloud Sleuth 的主要功能就是为 分布式系统 提供 追踪解决方案,并且兼容支持了 Zipkin,只需要在 pom.xml 文件中引入相应的 依赖 即可。本文主要讲述 服务追踪组件 Zipkin,Spring Cloud Sleuth 集成了 Zipkin 组件。它主要用于 聚集 来自各个 异构系统实时监控数据,用来追踪 微服务架构 下的 系统延时问题

cb33d433d9e03ff389ad1c512b86431e.png

正文

1. 相关术语

1.1. Span

Span 是一个基本的 工作单元,用于描述一次 RPC 调用,Span 通过一个 64 位的 spanId 作为 唯一标识。Zipkin 中的 Span 还有其他数据信息,比如 摘要时间戳事件关键值注释 (tags) 以及 进度 ID (通常是 IP 地址)。Span 在不断的启动和停止,同时记录了 时间信息,一个 Span 创建后,必须在未来的某个时刻停止它。

1.2. Trace

一系列 Span 组成的一个 树状结构。例如,如果你正在跑一个大型 分布式系统,可能需要创建一个 Trace。

1.3. Annotation

表示 基本标注列表,一个 Annotation 可以理解成 Span 生命周期中 重要时刻数据快照,比如一个 Annotation 中一般包含 发生时刻(timestamp)、事件类型(value)、端点(endpoint)等信息。其中 Annotation 的 事件类型 包含以下四类:

  • cs - Client Sent

客户端 发起一个请求,这个 Annotion 描述了这个 Span 的开始。

  • sr - Server Received

服务端 获得请求并 准备开始 处理它,如果将 sr 减去 cs 的 时间戳 便可得到 网络延迟

  • ss - Server Sent

服务端 完成请求处理,如果将 ss 减去 sr 的 时间戳,便可得到 服务端 处理请求消耗的时间。

  • cr - Client Received

客户端 成功接收到 服务端 的响应,如果将 cr 减去 cs 的 时间戳,便可得到 整个请求 所消耗的 总时间

2. 项目结构

本文案例主要由 四个模块 组成:

  • eureka-server:作为 服务注册中心
  • zipkin-server:作为 链路追踪服务中心,负责存储 链路数据
  • service-hi:对外暴露一个 测试接口,同时作为 链路追踪服务端,负责 产生链路数据
  • service-zuul:作为 路由网关,负责 请求转发,同时作为 链路追踪客户端,产生 链路数据,并上传至 zipkin-server。

在 8761 端口 开启 eureka-server 服务注册中心,参考前面的文章即可,这里不再演示创建。

3. 构建zipkin-server

新建一个 Spring Boot 应用模块 zipkin-server,它的 pom.xml 完整依赖如下:

 4.0.0  org.springframework.boot spring-boot-starter-parent 1.5.3.RELEASE    io.github.ostenant.springcloud zipkin-server 0.0.1-SNAPSHOT zipkin-server Demo project for Spring Boot  1.8 Dalston.RELEASE    org.springframework.cloud spring-cloud-starter-eureka   io.zipkin.java zipkin-server   io.zipkin.java zipkin-autoconfigure-ui   org.springframework.boot spring-boot-starter-test test      org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import       org.springframework.boot spring-boot-maven-plugin   

在应用的入口类上, 加上注解 @EnableZipkinServer,开启 Zipkin Server 的功能。

@EnableZipkinServer@EnableEurekaClient@SpringBootApplicationpublic class ZipkinServerApplication { public static void main(String[] args) { SpringApplication.run(ZipkinServerApplication.class, args); }}

配置文件 application.yml 中指定服务端口号为 9411,并向 Eureka 注册中心进行 服务注册

eureka: client: service-url: defaultZone: http://localhost:8761/eureka/server: port: 9411spring: application: name: zipkin-server

4. 构建service-hi

新建一个 Spring Boot 应用模块 service-hi,在它的 pom.xml 中引入 引入起步依赖 spring-cloud-starter-zipkin,完整依赖如下:

 4.0.0  org.springframework.boot spring-boot-starter-parent 1.5.3.RELEASE    io.github.ostenant.springcloud service-hi 0.0.1-SNAPSHOT eureka-client Demo project for Spring Boot  1.8 Dalston.SR1    org.springframework.cloud spring-cloud-starter-eureka   org.springframework.cloud spring-cloud-starter-zipkin   org.springframework.boot spring-boot-starter-web   org.springframework.boot spring-boot-starter-test test      org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import       org.springframework.boot spring-boot-maven-plugin   

在它的 配置文件 application.yml 中通过配置项 spring.zipkin.base-url 指定 zipkin server 的地址。

eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/server: port: 8763spring: application: name: service-hi zipkin: # base-url: http://localhost:9411/ # 若在同一个注册中心的话可以启用自动发现,省略base-url locator: discovery: enabled: true #自动发现 sleuth: sampler: percentage: 1.0

到此为止 ZipKin 客户端 已经整合完毕,最后在 应用启动类 上对外暴露一个 API 接口 方便测试

@SpringBootApplication@EnableEurekaClient@RestControllerpublic class ServiceHiApplication { public static void main(String[] args) { SpringApplication.run(ServiceHiApplication.class, args); } @Value("${server.port}") private String port; @RequestMapping("/hi") public String home(@RequestParam String name) { return "Hi " + name + 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud Sleuth是一个分布式跟踪解决方案,它可以帮助开发人员在微服务架构中追踪请求的流程和调用链路。它通过为每个请求生成唯一的跟踪ID和跨服务的调用ID来实现这一目标。这些ID可以用于跟踪请求的流程和调用链路,从而帮助开发人员快速诊断和解决问题。Spring Cloud Sleuth还提供了一些可视化工具,如Zipkin,可以帮助开发人员更好地理解和分析跟踪数据。 ### 回答2: SpringCloud Sleuth是一个基于日志的分布式跟踪方案,它可以用于解决微服务架构下的分布式系统的链路追踪问题。在分布式系统中,一个请求经常会穿越多个服务,从而会形成一条复杂的链路,如果有一台或多台机器对此进行记录,那么将能够轻松地查看和理解一个请求的完整路径。这些信息能够帮助我们更快地定位问题所在,提高系统可靠性和稳定性。 Sleuth使用了Zipkin的架构和数据模型,通过在每个请求的Header中添加Trace Id和Span Id来实现链路追踪。Trace Id表示整个请求链路,Span Id表示每一个服务的一个简单步骤。使用这两个 Id,我们就可以将整个链路追踪下来,使得对请求的监测、记录和分析变得更加容易。 Sleuth结合了Spring Cloud日志管理和Zipkin的功能,能够自动收集各个微服务的请求跟踪信息,并将其发送到Zipkin服务器进行聚合分析,视图展现。通过Sleuth的ChainInvoker,可以实现对所有链路的统一管理。当一条请求跨越多个服务时,Sleuth会为每个服务实例生成唯一的spanId,并将这个spanId沿用到下一个服务实例,从而使得整条链路保留了完整的信息。此外,Sleuth还支持基于日志的采样策略和数据比较高效的存储,保证了高性能的分布式链路追踪Sleuth的主要应用场景是微服务架构下的链路跟踪和性能监控。微服务架构中有大量的服务服务之间的关系错综复杂,因此链路追踪对于排查问题、优化性能非常重要。Sleuth能够方便地实现链路追踪和监测,并帮助我们快速定位问题所在,提高系统的可靠性和稳定性。 ### 回答3: Spring Cloud Sleuth 链路追踪Spring Cloud服务架构中的一项重要的功能模块。通过 Sleuth 链路追踪,我们可以跟踪整个分布式系统中的请求链路,从而了解每个操作所花费的时间、调用的服务以及调用顺序。在微服务架构中,服务调用会涉及到多个服务之间的协作,使用 Sleuth 链路追踪可以帮助我们很好地理解系统在内部的调用过程。 Sleuth 链路追踪的原理是在每个服务的请求中添加唯一的追踪 ID,通过这个追踪 ID,Sleuth 可以实现将每个请求相关的服务调用串联起来,形成完整的请求链路。追踪 ID 通常被称为 Trace ID,它作为请求的一部分,从前端发起请求的服务开始一直传递到最后一个服务。 通过 Sleuth 链路追踪,我们可以了解每个调用的服务名和 IP 地址,以及请求的耗时情况,在调试分布式系统时非常实用。此外,Sleuth 还支持将链路追踪信息集成到日志系统中,从而更好地协助开发人员进行故障排查。 Sleuth 链路追踪还提供了 Zipkin 集成,Zipkin 是一个开源的分布式链路追踪系统,可以将链路数据可视化显示,并提供了一些分析工具,帮助开发人员更好地理解系统的调用情况。 总之,Spring Cloud Sleuth 链路追踪是一个非常实用的工具,可以帮助我们更好地理解分布式系统中服务调用的情况,有效地解决微服务架构中的复杂度和故障排查的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值