Zipkin链路追踪原理与使用(图文详解)

Zipkin链路追踪原理与使用(图文详解)-mikechen

随着微服务系统拆分后,急需Zipkin链路追踪有故障的服务,今天就重点讲解Zipkin链路追踪的原理与使用@mikechen

Zipkin

Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),能够收集服务间调用的时序数据,提供调用链路的追踪。

Zipkin其主要功能是聚集来自各个异构系统的实时监控数据,在微服务架构下,十分方便地用于服务响应延迟等问题的定位。

Zipkin每一个调用链路通过一个trace id来串联起来,只要你有一个trace id,就能够直接定位到这次调用链路,并且可以根据服务名、标签、响应时间等进行查询,过滤那些耗时比较长的链路节点。

Zipkin链路追踪原理与使用(图文详解)-mikechen

 

为什么用 Zipkin?

大型互联网公司为什么需要分布式跟踪系统?

随着业务访问量越来越大,比如:典型的淘宝从早期的单体开始往分布式微服务演变,系统也随之进行各种拆分,看似简单的一个应用,后台可能有几十个甚至几百个服务在支撑。

一个前端的请求,比如:一次下订单请求,可能需要多次的服务调用:商品、用户、店铺等系统调用过程,最后才能完成。

当请求变慢或者不可用时,我们无法得知是哪个后台服务引起的,这时就需要解决如何快速定位服务故障点。

Zipkin分布式跟踪系统就能很好的解决这样的问题,主要解决以下3点问题:

1.动态展示服务的链路;

2.分析服务链路的瓶颈并对其进行调优;

3.快速进行服务链路的故障发现。

这就是Zipkin服务跟踪系统存在的目的和意义。

当然除了Zipkin分布式跟踪系统,还有其他比较成熟的实现,例如:Naver的Pinpoint、Apache的HTrace、阿里的鹰眼Tracing、京东的Hydra、新浪的Watchman,美团点评的CAT,skywalking等。

快速了解完Zipkin后,我再重点谈谈Zipkin的原理。

 

Zipkin的原理

1.ZipKin架构

ZipKin可以分为两部分:

一部分是ZipKin Server:用来作为数据的采集存储、数据分析与展示;

一部分是ZipKin Client:基于不同的语言及框架封装的一些列客户端工具,这些工具完成了追踪数据的生成与上报功能。

整体架构如下:

Zipkin链路追踪原理与使用(图文详解)-mikechen

2.Zipkin核心组件

zipkin(服务端)包含四个组件,分别是collector、storage、search、web UI。

Zipkin链路追踪原理与使用(图文详解)-mikechen

1)collector(信息收集器)

collector接受或者收集各个应用传输的数据。

2)storage(存储组件)

zipkin 默认直接将数据存在内存中,此外支持使用Cassandra、ElasticSearch 和 Mysql。

3)search (查询进程)

它提供了简单的JSON API来供外部调用查询。

4)web UI (服务端展示平台)

主要是提供简单的web界面,用图表将链路信息清晰地展示给开发人员。

 

3.Zipkin核心结构

当用户发起一次调用时,Zipkin 的客户端会在入口处为整条调用链路生成一个全局唯一的 trace id,并为这条链路中的每一次分布式调用生成一个 span id。

一个 trace 由一组 span 组成,可以看成是由 trace 为根节点,span 为若干个子节点的一棵树,如下图所示:

Zipkin链路追踪原理与使用(图文详解)-mikechen

4.Zipkin的工作流程

一个应用的代码发起HTTP get请求,经过Trace框架拦截,大致流程如下图所示:

Zipkin链路追踪原理与使用(图文详解)-mikechen

1)把当前调用链的Trace信息添加到HTTP Header里面;

2)记录当前调用的时间戳;

3)发送HTTP请求,把trace相关的header信息携带上;

4)调用结束之后,记录当前调用话费的时间;

5)然后把上面流程产生的 信息汇集成一个span,把这个span信息上传到zipkin的Collector模块。

 

Zipkin的部署与运行

Zipkin的 github 地址:https://github.com/apache/incubator-zipkin

Docker 方式

docker run -d -p 9411:9411 openzipkin/zipkin

Jar 包方式(JDK8)

curl -sSL https://zipkin.apache.org/quickstart.sh | bash -s
java -jar zipkin.jar

注意:以上方式的 Zipkin 都是基于内存存储,Zipkin 重启后数据会丢失,建议测试环境使用。

Zipkin 支持的存储类型有 inMemory、MySql、Cassandra、以及 ElasticsSearch 几种方式。正式环境推荐使用 Cassandra 和 ElasticSearch。
Zipkin链路追踪原理与使用(图文详解)-mikechen

 

Zipkin总结

以上我就重点讲解了为什么要使用Zipkin,以及Zipkin的架构,核心组件,以及Zipkin的工作流程,希望对大家掌握Zipkin有所帮助!

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法