随着微服务系统拆分后,急需Zipkin链路追踪有故障的服务,今天就重点讲解Zipkin链路追踪的原理与使用@mikechen
Zipkin
Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),能够收集服务间调用的时序数据,提供调用链路的追踪。
Zipkin其主要功能是聚集来自各个异构系统的实时监控数据,在微服务架构下,十分方便地用于服务响应延迟等问题的定位。
Zipkin每一个调用链路通过一个trace id来串联起来,只要你有一个trace id,就能够直接定位到这次调用链路,并且可以根据服务名、标签、响应时间等进行查询,过滤那些耗时比较长的链路节点。
为什么用 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:基于不同的语言及框架封装的一些列客户端工具,这些工具完成了追踪数据的生成与上报功能。
整体架构如下:
2.Zipkin核心组件
zipkin(服务端)包含四个组件,分别是collector、storage、search、web UI。
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 为若干个子节点的一棵树,如下图所示:
4.Zipkin的工作流程
一个应用的代码发起HTTP get请求,经过Trace框架拦截,大致流程如下图所示:
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总结
以上我就重点讲解了为什么要使用Zipkin,以及Zipkin的架构,核心组件,以及Zipkin的工作流程,希望对大家掌握Zipkin有所帮助!
作者简介
陈睿|mikechen,10年+大厂架构经验,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》