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,我们可以发现应用程序中的慢请求,并帮助我们调试和优化性能问题。


相关文章
|
26天前
|
前端开发 JavaScript Java
springboot图书馆管理系统前后端分离版本
springboot图书馆管理系统前后端分离版本
39 12
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
62 6
|
24天前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
55 6
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
40 4
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
36 2
|
30天前
|
存储 运维 安全
盘古分布式存储系统的稳定性实践
本文介绍了阿里云飞天盘古分布式存储系统的稳定性实践。盘古作为阿里云的核心组件,支撑了阿里巴巴集团的众多业务,确保数据高可靠性、系统高可用性和安全生产运维是其关键目标。文章详细探讨了数据不丢不错、系统高可用性的实现方法,以及通过故障演练、自动化发布和健康检查等手段保障生产安全。总结指出,稳定性是一项系统工程,需要持续迭代演进,盘古经过十年以上的线上锤炼,积累了丰富的实践经验。
|
1月前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
50 7
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
81 8
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的冬奥会科普平台设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
40 0
|
2月前
|
Java 数据库 数据安全/隐私保护
轻松掌握Spring依赖注入:打造你的登录验证系统
本文以轻松活泼的风格,带领读者走进Spring框架中的依赖注入和登录验证的世界。通过详细的步骤和代码示例,我们从DAO层的创建到Service层的实现,再到Spring配置文件的编写,最后通过测试类验证功能,一步步构建了一个简单的登录验证系统。文章不仅提供了实用的技术指导,还以口语化和生动的语言,让学习变得不再枯燥。
54 2