什么是zipkin
Zipkin 是 Twitter 的一个开源项目,允许开发者收集 Twitter 各个服务上的监控数据,并提供查询接口
为什么要使用zipkin
随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位服务故障点,以对症下药。于是就有了分布式系统调用跟踪的诞生。而zipkin就是开源分布式系统调用跟踪的佼佼者
zipkin基于google-Dapper的论文有兴趣的可以看下
zipkin体系介绍
zipkin架构
包含组件
- collector 收集器
- storage 存储
- api 查询api
- ui 界面
zipkin存储
zipkin存储默认使用inMemory
支持存储模式
- inMemory
- mysql
- Cassandra
- Elasticsearch
ZipKin数据模型
- Trace:一组代表一次用户请求所包含的spans,其中根span只有一个。
- Span: 一组代表一次HTTP/RPC请求所包含的annotations。
- annotation:包括一个值,时间戳,主机名(留痕迹)。
几个时间
- cs:客户端发起请求,标志Span的开始
- sr:服务端接收到请求,并开始处理内部事务,其中sr - cs则为网络延迟和时钟抖动
- ss:服务端处理完请求,返回响应内容,其中ss - sr则为服务端处理请求耗时
- cr:客户端接收到服务端响应内容,标志着Span的结束,其中cr - ss则为网络延迟和时钟抖动
搭建zipkin
下载文件
启动zipkin
java -jar zipkin-server-1.22.1-exec.jar
使用elasticsearch-5.3.0作为存储启动zipkin
链接
- elasticsearch-5.3.0下载
- github
解压elasticsearch-5.3.0运行
启动完成界面
启动zipkin使用elasticsearch123java -jar zipkin-server-1.22.1-exec.jar --STORAGE_TYPE=elasticsearch --DES_HOSTS=http://localhost:9200zipkin-server-1.22.1-exec.jar采用springboot编写,springboot传入参数使用--key=value.当前为什么使用--STORAGE_TYPE,--DES_HOSTS由配置文件里面决定
zipkin 控制台
zipkin 明细
zipkin 依赖
springboot+apache-httpclient使用zipkin
项目结构
pom.xml
|
|
ZipkinConfig
ZipkinBraveController
Application启动类
======================
zipkin-demo-server-2 serviceName修改
|
|
controller修改
zipkin-demo-server-3 serviceName修改
controller修改
zipkin-demo-server-4 serviceName修改
|
|
controller修改
|
|
关注点point
- zipkin 运行需要jdk8
- pinpoint 可以关注下,同样是分布式链路追踪系统(ps:搭建环境1天下来,trace一直不能生成。。有谁碰到过这个问题可以回复下 0.0)
参考
- 分布式系统调用跟踪实践
- Brave接入ZipKin实现调用链跟踪【上】
- Architecture