Spring Boot中的Zipkin:分布式跟踪系统

简介: Spring Boot中的Zipkin:分布式跟踪系统

Spring Boot中的Zipkin:分布式跟踪系统


简介


在现代的分布式应用程序中,由于业务逻辑被分解为多个微服务,因此我们需要跟踪每个服务的性能和行为。Zipkin是一个分布式跟踪系统,它可以帮助我们收集、存储和分析跨越多个服务的请求。本文将介绍Spring Boot中的Zipkin,它如何帮助我们跟踪分布式应用程序,并介绍如何使用Zipkin。


image.png


Zipkin介绍


Zipkin是一个开源的分布式跟踪系统,它可以帮助我们跟踪多个服务之间的请求。Zipkin通过使用Google Dapper的开放标准,将跨越多个服务的请求进行追踪,并将结果可视化展示出来。Zipkin可以帮助我们发现应用程序中的慢请求,并帮助我们调试和优化性能问题。


Zipkin的架构如下图所示:


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l78ATkP4-1688528173532)(https://zipkin.io/pages/architecture.png)]


Zipkin包含以下组件:


  • Collector:用于收集跟踪信息的组件。
  • Storage:用于存储跟踪信息的组件。
  • Search:用于搜索跟踪信息的组件。
  • API:用于查询跟踪信息的API。
  • UI:用于可视化展示跟踪信息的Web界面。


Zipkin与Spring Boot集成


Spring Boot提供了对Zipkin的集成支持,通过添加Spring Cloud Sleuth和Zipkin Client的依赖来实现。Spring Cloud Sleuth是一个分布式跟踪解决方案,它可以帮助我们跟踪应用程序中的请求。Zipkin Client是一个Zipkin的客户端,它可以帮助我们将跟踪信息发送到Zipkin Server中。


添加依赖


首先,我们需要在pom.xml文件中添加以下依赖:


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>


配置Zipkin Server


Zipkin Server是一个用于存储和查询跟踪信息的中央存储库。我们需要配置Zipkin Server的URL,以便Sleuth可以将跟踪信息发送到Zipkin Server中。在application.properties文件中添加以下配置:


spring.zipkin.base-url=http://localhost:9411/


配置应用程序


我们需要在应用程序中添加一些配置,以便将跟踪信息发送到Zipkin Server中。在application.properties文件中添加以下配置:


spring.application.name=my-app
spring.sleuth.sampler.probability=1.0

在上面的配置中,我们指定了应用程序的名称为my-app。我们还指定了采样率为100%。


启动Zipkin Server和应用程序


在完成上述配置之后,我们需要启动Zipkin Server和应用程序。Zipkin Server默认监听9411端口,我们可以使用以下命令来启动Zipkin Server:


$ java -jar zipkin-server-2.23.2-exec.jar

在启动应用程序之前,我们需要确保应用程序的所有依赖项都已经添加到pom.xml文件中。然后,我们可以使用以下命令来启动应用程序:


$ java -jar my-app.jar


验证Zipkin跟踪


在我们启动应用程序之后,我们可以访问Zipkin的Web界面,以查看应用程序的跟踪信息。我们可以使用以下URL来访问Zipkin的Web界面:

http://localhost:9411/zipkin/

在Web界面中,我们可以看到所有的跟踪信息,我们可以根据跟踪信息的ID来查看每个请求的详细信息和时间线。以下是一个示例跟踪信息:


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-koHKXsTk-1688528173543)(https://zipkin.io/pages/traces.png)]


在上图中,我们可以看到一个跨越两个服务的请求的时间线。我们可以看到每个请求的开始时间、结束时间、持续时间和调用的服务名称。我们还可以查看每个服务的详细信息,包括请求的URL、请求参数、响应时间和响应代码等。


示例代码


下面是一个简单的Spring Boot应用程序,它演示了如何使用Zipkin进行分布式跟踪。在这个应用程序中,我们有两个服务:hello-service和world-service。当我们向hello-service发送一个请求时,它会向world-service发送一个请求,并返回一个响应。


pom.xml


<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
</dependencies>


application.properties


spring.application.name=hello-world-app
server.port=8080
spring.zipkin.base-url=http://localhost:9411/
spring.sleuth.sampler.probability=1.0


HelloController.java


@RestController
public class HelloController {
    private final RestTemplate restTemplate;
    public HelloController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
    @GetMapping("/hello")
    public String hello() {
        String response = restTemplate.getForObject("http://localhost:8081/world", String.class);
        return "Hello " + response;
    }
}


WorldController.java


@RestController
public class WorldController {
    @GetMapping("/world")
    public String world() {
        return "World";
    }
}

在上面的示例中,我们使用了Spring Boot的@RestController注解来定义HelloController和WorldController。我们使用了Spring Cloud Sleuth的RestTemplate来发送HTTP请求,并将跟踪信息添加到请求头中。


结论


在现代的分布式应用程序中,跟踪请求是非常重要的。Zipkin是一个开源的分布式跟踪系统,它可以帮助我们收集、存储和分析跨越多个服务的请求。在Spring Boot中,我们可以使用Spring Cloud Sleuth和Zipkin Client来集成Zipkin。通过使用Zipkin,我们可以发现应用程序中的慢请求,并帮助我们调试和优化性能问题。


相关文章
|
1月前
|
小程序 Java
基于springboot的医护人员排班系统
基于springboot的医护人员排班系统
29 0
|
1月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
159 0
|
4天前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
|
9天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的医院核酸检测服务系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的医院核酸检测服务系统的详细设计和实现
34 0
|
9天前
|
人工智能 移动开发 前端开发
Springboot医院智慧导诊系统源码:精准推荐科室
医院智慧导诊系统是在医疗中使用的引导患者自助就诊挂号,在就诊的过程中有许多患者不知道需要挂什么号,要看什么病,通过智慧导诊系统,可输入自身疾病的症状表现,或选择身体部位,在经由智慧导诊系统多维度计算,精准推荐科室,引导患者挂号就诊,实现科学就诊,不用担心挂错号。
19 2
|
10天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
151 10
|
10天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
11天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
37 6
|
30天前
|
存储 监控 NoSQL
SpringBoot 后台管理系统
SpringBoot 后台管理系统
12 0
|
30天前
|
缓存 NoSQL Java
手撸的 SpringBoot缓存系统,性能杠杠的
手撸的 SpringBoot缓存系统,性能杠杠的
28 0

热门文章

最新文章