欢迎来到菜鸟SpringCloud实战入门系列(SpringCloudForNoob),该系列经过层层递进的实战视角,来一步步学习和理解SpringCloud。html
本系列适合有必定Java以及SpringBoot基础的同窗阅读。前端
每篇文章末尾都附有本文对应的Github源代码,方便同窗调试。java
Github仓库地址:git
github.com/qqxx6661/sp…github
你能够经过如下两种途径查看菜鸟SpringCloud实战入门系列:web
前文回顾:算法
对于一个微服务系统,大多数来自外部的请求都会通过数个服务的互相调用,获得返回的结果,一旦结果回复较慢或者返回了不可用,咱们就须要肯定是哪一个微服务出了问题。因而就有了分布式系统调用跟踪的诞生。spring
现今业界分布式服务跟踪的理论基础主要来自于 Google 的一篇论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,使用最为普遍的开源实现是 Twitter 的 Zipkin,为了实现平台无关、厂商无关的分布式服务跟踪,CNCF 发布了布式服务跟踪标准 Open Tracing。国内,淘宝的“鹰眼”、京东的“Hydra”、大众点评的“CAT”、新浪的“Watchman”、惟品会的“Microscope”、窝窝网的“Tracing”都是这样的系统。docker
通常的,一个分布式服务跟踪系统,主要有三部分:数据收集、数据存储和数据展现。根据系统大小不一样,每一部分的结构又有必定变化。譬如,对于大规模分布式系统,数据存储可分为实时数据和全量数据两部分,实时数据用于故障排查(troubleshooting),全量数据用于系统优化;数据收集除了支持平台无关和开发语言无关系统的数据收集,还包括异步数据收集(须要跟踪队列中的消息,保证调用的连贯性),以及确保更小的侵入性;数据展现又涉及到数据挖掘和分析。虽然每一部分均可能变得很复杂,但基本原理都相似。后端
Spring Cloud Sleuth为服务之间调用提供链路追踪。Sleuth能够帮助咱们:
Spring Cloud Sleuth的概念图:
spring cloud sleuth能够结合zipkin,将信息发送到zipkin,利用zipkin的存储来存储信息,利用zipkin ui来展现数据。
Zipkin 是一个开放源代码分布式的跟踪系统,由Twitter公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展示。
每一个服务向zipkin报告计时数据,zipkin会根据调用关系经过Zipkin UI生成依赖关系图,显示了多少跟踪请求经过每一个服务,该系统让开发者可经过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。
Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。接下来的测试为方便直接采用In-Memory方式进行存储,生产推荐Elasticsearch。
在使用 Spring Boot 2.x 版本后,官方就不推荐自行定制编译了,让咱们直接使用编译好的 jar 包.也就是说原来经过@EnableZipkinServer或@EnableZipkinStreamServer的路子,启动SpringBootApplication自建Zipkin Server是不行了
官方提供了一键脚本
curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar
复制代码
若是用 Docker 的话,直接
docker run -d -p 9411:9411 openzipkin/zipkin
复制代码
我使用脚本的方法,在IDEA的terminal里运行java -jar zipkin.jar
访问 http://localhost:9411/zipkin/ :
接下来咱们须要建造一串调用,咱们使用以前的模块service-feign和eureka-hi
修改子模块eureka-hi和service-feign的pom文件:
添加三个依赖:
<!--分布式链路追踪-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
复制代码
修改子模块eureka-hi和service-feign的yml配置文件,添加相关配置:
spring:
sleuth:
web:
client:
enabled: true
sampler:
probability: 1.0 # 将采样比例设置为 1.0,也就是所有都须要。默认是 0.1
zipkin:
base-url: http://localhost:9411/ # 指定了 Zipkin 服务器的地址
复制代码
Spring Cloud Sleuth 有一个 Sampler 策略,能够经过这个实现类来控制采样算法。采样器不会阻碍 span 相关 id 的产生,可是会对导出以及附加事件标签的相关操做形成影响。 Sleuth 默认采样算法的实现是 Reservoir sampling,具体的实现类是 PercentageBasedSampler,默认的采样比例为: 0.1(即 10%)。不过咱们能够经过spring.sleuth.sampler.percentage来设置,所设置的值介于 0.0 到 1.0 之间,1.0 则表示所有采集。
至此,一切就绪。Spring 应用在监测到 classpath 中有 Sleuth 和 Zipkin 后,会自动在 WebClient(或 RestTemplate)的调用过程当中向 HTTP 请求注入追踪信息,并向 Zipkin Server 发送这些信息。
咱们使用service-feign的接口来远程调用eureka-hi:
运行service-feign,eureka-hi,eureka,而且加上以前运行着的zipkin。
http://localhost:8765/hello/rude3knife
再打开 http://127.0.0.1:9411/zipkin/ :
点击其中一个:
能够看到每个服务所耗费的时间和顺序。
还能够点击左上方“依赖分析”,能够查看服务之间的调用关系:
完成啦。
www.ityouknow.com/springcloud…
菜鸟SpringCloud实战入门专栏全导航:经过如下两种途径查看
我是蛮三刀把刀,后端开发。主要关注后端开发,数据安全,爬虫等方向。微信:yangzd1102
Github:@qqxx6661
我的博客:
若是文章对你有帮助,不妨收藏起来并转发给您的朋友们~