Sleuth服务跟踪大厂高频面试题:整合-Zipkin,Java性能优化面试题集锦

@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的收集服务。

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

org.springframework.cloud spring-cloud-starter-zipkin

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

配置zipKin Server的地址

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

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

![](https://upload-images.jianshu.io/upload_images/25222111-3eae6c1e

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

b6dffa48.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

三、抽样采集数据

在实际使用中可能调用了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的依赖:

org.springframework.cloud spring-cloud-sleuth-zipkin-stream org.springframework.cloud spring-cloud-starter-stream-rabbit

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

rabbitmq 配置

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

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

org.springframework.cloud spring-cloud-sleuth-zipkin-stream org.springframework.cloud spring-cloud-starter-stream-rabbit

属性文件中也还是增加 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 存储的依赖:

io.zipkin.java 在搜索方面有先天的优势。

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

io.zipkin.java
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值