SpringCloud系列:利用SpringCloud Sleuth和Zipkin实现分布式服务调用链跟踪(一)

Easter79
• 阅读 658

一、概述

在单体应用时代,接口缓慢能够被迅速定位和发现,而随着分布式微服务的流行,服务之间的调用关系越来越复杂,错中复杂的调用关系使得我们想找到某一个接口的效率缓慢变得非常困难,而分布式服务调用跟踪组件就解决了这个 问题。Sleuth是SprinCloud在分布式系统中提供追踪解决方案,zipkin是基于Google Dapper的分布式链路调用监控系统。先介绍下有关的专业术语,

  • Span:基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,trace以另一个64位ID表示,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID(通常是IP地址) 
  • Trace:一系列spans组成的一个树状结构,例如,如果你正在跑一个分布式服务工程,你可能需要创建一个trace。
  • Annotation:用来及时记录一个事件的存在,一些核心annotations用来定义一个请求的开始和结束

  

               cs   - Client Sent -客户端发起一个请求,这个annotion描述了这个span的开始

               sr   - Server Received -服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网                          络延迟

               ss  - Server Sent -注解表明请求处理的完成(当请求返回客户端),如果ss减去sr时间戳便可得到服                        务端需要的处理请求时间

              cr  - Client Received -表明span的结束,客户端成功接收到服务端的回复,如果cr减去cs时间戳                     便可得到客户端从服务端获取回复的所有所需时间

二、功能开发实现

1.创建zipkin-server服务

     zipkin-server主要作用是使用ZipkinServer 的功能,收集调用数据链,并提供展示页面供用户使用。创建普通的SpringBoot项目zipkin-server,在pom.xml文件中增加如下依赖

io.zipkin.java zipkin-server io.zipkin.java zipkin-autoconfigure-ui runtime org.springframework.boot spring-boot-starter-test test

在ZipKinServerApplication主方法上添加@EnableZipkinServer注解,启用ZipkinServer功能。

@EnableZipkinServer @SpringBootApplication public class ZipkinServerApplication {

public static void main(String[] args) { SpringApplication.run(ZipkinServerApplication.class, args); } }

修改配置文件

spring.application.name=zipkin-server server.port=9107

启动服务,可以看到链路监控页面,此时没有收集到任何链路调用记录。

SpringCloud系列:利用SpringCloud Sleuth和Zipkin实现分布式服务调用链跟踪(一)

2.给原先服务增加链路追踪支持

   给eureka-provider、eureka-consumer、gateway三个服务增加如下依赖

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

该依赖内部包含了两个依赖,等于同时引入了spring-cloud-starter-sleuthspring-cloud-sleuth-zipkin两个依赖。

修改配置文件

#配置zipkin #指定zipkin的服务端,用于发送链路调用报告 spring.zipkin.base-url=http://10.17.5.50:9107

采样率,值为[0,1]之间的任意实数,这里代表100%采集报告。

spring.sleuth.sampler.percentage=1

重新部署启动服务,调用zuul接口,观察zipkin-server页面,生成调用链路

SpringCloud系列:利用SpringCloud Sleuth和Zipkin实现分布式服务调用链跟踪(一)

SpringCloud系列:利用SpringCloud Sleuth和Zipkin实现分布式服务调用链跟踪(一)

SpringCloud系列:利用SpringCloud Sleuth和Zipkin实现分布式服务调用链跟踪(一)

三、小结

   本文还只是基本的链路分析,如果生产上使用,还需要把监控内容持久化、把监控内容发送从http模式切换到MQ等改造,这些内容下次再详细介绍。

   码云地址:https://gitee.com/gengkangkang/springcloud.git

    github地址:https://github.com/gengkangkang/springcloud.git

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
凯文86 凯文86
3年前
Spring Cloud 微服务开发指南
如同SpringBoot在JavaWeb开发领域中的统治地位,SpringCloud在Java微服务应用开发领域中同样处于垄断地位。软件系统从单体升级到微服务架构,随之会出现各种分布式系统所特有的问题,包括服务注册发现、认证授权、限流熔断、调用追踪等。SpringCloud提供了各种组件来解决这些问题,本文将通过升级改造一个单体AP
Wesley13 Wesley13
3年前
Twitter zipkin 分布式跟踪系统的设计与实现
概述Twitter的zipkin是一个致力于收集Twitter所有的分布式服务的时间数据的分布式跟踪系统。它提供了收集数据,和查询数据两大服务。系统的理论模型来自于GoogleDapper论文。Dapper这篇论文可以点击这里(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2F
Wesley13 Wesley13
3年前
APM监控
一,基础知识储备分布式跟踪的目标一个分布式系统由若干分布式服务构成,每一个请求会经过多个业务系统并留下足迹,但是这些分散的数据对于问题排查,或是流程优化都很有限,要能做到追踪每个请求的完整链路调用,收集链路调用上每个服务的性能数据,计算性能数据和比对性能指标(SLA),甚至能够再反馈到服务治理中,那么这就是分布式跟踪的目标。分布式跟踪的目的
Stella981 Stella981
3年前
Hystrix——让你的服务更稳一点
摘要:1、为什么要用Hystrix在分布式服务环境下,服务之间的调用关系变得错综复杂,你是否担心依赖的服务延迟导致自己的服务也被拖跨呢?是否在苦苦思考如何优雅的对依赖服务进行异步调用呢?是否希望当流量高峰时自动进行...
Stella981 Stella981
3年前
Spring Boot + Spring Cloud 构建微服务系统(八):分布式链路追踪(Sleuth、Zipkin)
技术背景在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个看似简单的前端请求可能最终需要调用很多次后端服务才能完成,那么当整个请求出现问题时,我们很难得知到底是哪个服务出了问题导致的,这时就需要解决一个问题,如何快速定位服务故障点,于是,分布式系统调用链追踪技术就此诞生了。ZipKinZipkin是一个
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Easter79 Easter79
3年前
SpringCloud课程:15.Hystrix断路器简介 与 服务降级
Hystrix断路器一、概述分布式系统面临的问题复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候不可避免地失败。服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出效应” 如果扇出的链路上某个微服务的调用响应
Stella981 Stella981
3年前
Spring Cloud Sleuth 分布式服务追踪
随着业务的发展,系统规模也会变得越来越大,各微服务间的调用关系也变得越来越错综复杂。通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,在复杂的微服务架构系统中,几乎每一个前端请求都会形成一条复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟过高或错误的时候都有可能引起请求最后的失败。这时
分布式系统中的分布式链路追踪与分布式调用链路
在分布式系统中,由于服务间的调用关系复杂,需要实现分布式链路追踪来跟踪请求在各个服务中的调用路径和时间消耗。这对问题排查和性能监控都很重要。常用的分布式链路追踪实现有基于日志的和基于分布式追踪系统的两种方式:
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k