ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Sleuth服务跟踪大厂高频面试题:整合-Zipkin

2021-06-13 19:34:12  阅读:178  来源: 互联网

标签:Sleuth 面试题 zipkin spring Zipkin elasticsearch 数据 cloud


Zipkin是Twitter的一个开源项目,是一个致力于收集所有服务的监控数据的分布式跟踪系统,它提供了收集数据和查询数据两大接口服务。有了Zipkin我们就可以很直观地对调用链进行查看,并且可能很方便看出服务之间的调用关系以及调用耗费的时间。

一、创建 Zipkin 数据收集服务

首先我们需要创建一个Zipkin的项目,集成Zipkin的ui用于数据的展示和收集,pom.xml 配置如下:

<dependency> 
	<groupId>io.zipkin.java</groupId>
	<artifactId>zipkin-server</artifactId> 
</dependency>

<dependency> 
	<groupId>io.zipkin.java</groupId> 
	<artifactId>zipkin-autocongure-ui</artifactId>
</dependency>

创建启动类:

@SpringBootApplication
@EnableZipkinServer
public class zipKinServerApplication {
	public static void main(String[] args){
		SpringApplication.run(ZipKinServerApplication.class, args);
	}
}

增加配置信息:

spring.application.name = fangjia-zipkin
server.port=9411

到此为止,Zipkin 的服务就创建好了。启动后访问 http://localhost:9411/zipkin/ 就可以看到管理页面了,如下图所示。

二、项目集成 Zipkin 发送调用链数据

在之前的文章中,我们只是集成了 Spring Cloud Sleuth,然后将跟踪信息输出到日志中。现在,Zipkin的服务创建好了,需要将链路跟踪的信息发送给Zipkin的收集服务。

需要在项目中添加如下依赖:

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

在属性文件中可以配置 Zipkin 的地址,默认是 http://127.0.1:9411 ,这样才能将跟踪的数据发送到执行的收集服务中。

# 配置zipKin Server的地址
spring.zipkin.base-url = http://127.0.0.1:9411

然后我们启动之前的服务、访问接口,就可以看到数据已经能够在 Zipkin 的 Web 页面中了,如下图所示。

三、抽样采集数据

在实际使用中可能调用了10次接口,但是Zipkin中只有一条数据,这是因为收集信息是有一定比例的,这并不是bug。Zipkin 中的数据条数与调用接口次数默认比例是0.1,当然我们也可以通过配置来修改这个比例值:

# zipkin抽样比例
spring.sleuth.sampler.percentage= 1

之所以有这样的一个配置,是因为在高并发下,如果所有数据都采集,那这个数据量就太大了,采用抽样的做法可以减少一部分数据量,特别是对于Http方式去发送采集数据,对性能有很大的影响。

四、用RabbitMQ代替Http发送调用链数据

虽然有基于采样的收集方式,但是数据的发送采用Http还是对性能有影响。如果 Zipkin 的服务端在重启或者挂掉了,那么将丢失部分采集数据。为了解决这些问题,我们将集成 spring-cloud-sleuth-zipkin-stream ,用 RabbitMQ 来发送采集数据,利用消息队列来提高发送性能,保证数据不丢失。

首先改造我们的Zipkin项目,增加steam的依赖:

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

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

然后在启动类上加上 @EnableZipkinStreamServer 注解,把之前的 @EnableZipkinServer 去掉。属性文件中增加 RabbitMQ 的连接配置:

# rabbitmq 配置
spring.rabbitmq.addresses=amqp://192.168.10.47:5672
spring.rabbitmq.username=yinjihuan
spring.rabbitmq.password=123456

接下来我们就要改造需要跟踪的具体服务了,也就是要加入 RabbitMQ 的依赖信息,采用 RabbitMQ 来替换之前的Http发送数据的方式,依赖如下:

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

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

属性文件中也还是增加 RabbitMQ 的连接配置:

# rabbitmq配置
spring.rabbitmq.addresses=amqp://192.168.10.47:5672
spring.rabbitmq.username=yinj ihuan
spring.rabbitmq.password=123456

到这里集成就已经完成了,记得去掉之前配置的 spring.zipkin.base-url 。因为我们现在利用 RabbitMQ 来发送数据了,所以这个配置不需要了。

五、用Elasticsearch存储调用链数据

目前我们收集的数据都是存在 Zipkin 服务的内存中,服务一重启这些数据就没了,我们需要将这些数据持久化。我们可以将其存储在MySQL中,实际使用中数据量可能会比较大,所以MySQL并不是一种很好的选择,可以选择用 Elasticsearch 来存储数据,Elasticsearch 在搜索方面有先天的优势。

改造我们的 Zipkin 项目,增加 Elasticsearch 存储的依赖:

<dependency>
	<groupId>io.zipkin.java</groupId>
	<artifactId>
	zipkin-autoconfigure-storage-elasticsearch-http
	</artifactId>
	<version>1.24.0</version>
	<optional>true</optional>
</dependency>

属性配置中指定 Zipkin 的存储方式以及配置 Elasticsearch 的连接信息:

zipkin.storage.StorageComponent=elasticsearch
zipkin.storage.type=elasticsearch
zipkin.storage.elasticsearch.cluster=elasticsearch-zipkin-cluster
zipkin.storage.elasticsearch.hosts=127.0.0.1:9300
zipkin.storage.elasticsearch.max-requests=64
zipkin.storage.elasticsearch.index=zipkin
zipkin.storage.elasticsearch.index-shards=5
zipkin.storage.elasticsearch.index-replicas=1

重启服务,然后收集一些数据,我们可以通过两种方式来验证数据是否存储到了 Elasticsearch 中。

  • 可以重启 Zipkin 服务,然后看看数据是否还存在,如果存在则证明数据已经是持久化了。

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

如何获取整理好的Java面试专题资料?

资料获取方式:点击这里免费下载

面试答案

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

资料获取方式:点击这里免费下载*

面试答案

[外链图片转存中…(img-3gMWFNqm-1623582839531)]

[外链图片转存中…(img-5mv8Qg4s-1623582839532)]

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

标签:Sleuth,面试题,zipkin,spring,Zipkin,elasticsearch,数据,cloud
来源: https://blog.csdn.net/m0_56252357/article/details/117884492

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有