Sleuth服务跟踪⼤⼚⾼频⾯试题:整合-Zipkin,Java性能优化⾯试题集锦
@SpringBootApplication
@EnableZipkinServer
public class zipKinServerApplication {
php正则表达式匹配替换public static void main(String[] args){
SpringApplication.run(ZipKinServerApplication.class, args);
}
}
增加配置信息:
spring.application.name = fangjia-zipkin
server.port=9411
⼆、项⽬集成 Zipkin 发送调⽤链数据
在之前的⽂章中,我们只是集成了 Spring Cloud Sleuth,然后将跟踪信息输出到⽇志中。现在,Zipkin的服务创建好了,需要将链路跟踪的信息发送给Zipkin的收集服务。
需要在项⽬中添加如下依赖:
org.springframework.cloud spring-cloud-starter-zipkin
配置zipKin Server的地址
mysql面试题sql优化然后我们启动之前的服务、访问接⼝,就可以看到数据已经能够在 Zipkin 的 Web 页⾯中了,如下图所⽰。
《⼀线⼤⼚Java⾯试题解析+后端开发学习笔记+最新架构讲解视频+实战项⽬源码讲义》
源代码怎么学【docs.qq/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发送调⽤链数据
c递归函数是什么意思虽然有基于采样的收集⽅式,但是数据的发送采⽤Http还是对性能有影响。如果 Zipkin 的服务端在重启或者挂掉了,那么将丢失部分采集数据。为了解决这些问题,我们将集成 spring-cloud-sleuth-zipkin-stream ,⽤ RabbitMQ 来发送采集数据,利⽤消息队列来提⾼发送性能,保证数据不丢失。
terminateprocess函数例子⾸先改造我们的Zipkin项⽬,增加steam的依赖:matlab中plot函数绘制包络线
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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论