文档章节

Zipkin介绍

China_OS
 China_OS
发布于 2017/03/31 16:15
字数 1552
阅读 6601
收藏 2

背景

        一直在部门内部推动点评开源的CAT分布式追踪系统的使用,从测试环境到生产环境CAT都已经全部部署完毕,可惜开发不给力,怎么都运行不起来。无奈CAT都是java接口,我看着干着急啊,推行一整年没任何进展,哥只好自己玩了。CAT起源于ebay的CAL系统,老吴从ebay加入点评后的开始立项的,关于分布式追踪的原理,听得最多的就是google那一篇dapper论文了,淘宝的鹰眼、京东的Hydra,新浪的Watchman都是不错的系统,可以人家没开源啊。naver的Pinpoint、apache的HTrace是开源了,但是经过摸坑,满满的泪。近一年Twitter的zipkin听的比较多,初期没怎么关注,当时当看到现在已有的数据instrumentations(翻译为传输装置)列表就不淡定了。对于不会java,只会一点python、go、scala的人来说,这可以大福音啊。

介绍

        Zipkin 是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper 的论文设计而来,由 Twitter公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据,用来追踪微服务架构下的系统延时问题。应用系统需要进行装备(instrument)以向 Zipkin 报告数据。Zipkin 的用户界面可以呈现一幅关联图表,以显示有多少被追踪的请求通过了每一层应用。Zipkin 以 Trace 结构表示对一次请求的追踪,又把每个 Trace 拆分为若干个有依赖关系的 Span。在微服务架构中,一次用户请求可能会由后台若干个服务负责处理,那么每个处理请求的服务就可以理解为一个 Span(可以包括 API 服务,缓存服务,数据库服务以及报表服务等)。当然这个服务也可能继续请求其他的服务,因此 Span 是一个树形结构,以体现服务之间的调用关系。Zipkin 的用户界面除了可以查看 Span 的依赖关系之外,还以瀑布图的形式显示了每个 Span 的耗时情况,可以一目了然的看到各个服务的性能状况。打开每个 Span,还有更详细的数据以键值对的形式呈现,而且这些数据可以在装备应用的时候自行添加。

架构

    zipkin结构

        可以看到zipkin内部主要分为四部分:collector、storage、api、ui

            collector:负责将各系统报告过来的追踪数据进行接收

            storage:默认使用Cassandra存储数据,也可以替换为其他存储,例如mysql5.6-5.7,ElasticSearch 2.x和5.x,还有一些第三方的存储

            api:查询服务用来向其他服务提供数据查询的能力,是以json api格式提供

            ui:Web服务是官方默认提供的一个图形用户界面

    transport

        transport负责从运输从service收集来的spans,并把这些spans转化为zipkin的通用span,并将其传递到存储层,这种方法是模块化的,允许任何生产者接收任何类型的数据,zipkin配有HTTP、kafka、scribe三种类型的transport。instrumentations负责和transport进行交互。

    instrumentations

        官方维护

        ps:支持go、scala,这个不错

        第三方维护

        ps:支持python,我就可以自己玩了,同时支持了四个Python库,最基础的是py_zipkin模块,pyramid_zipkin、swagger_zipkin、flask_zipkin三个都是基于py_zipkin再次封装的。

核心数据结构

            traceId:全局跟踪ID,用它来标记一次完整服务调用,所以和一次服务调用相关的span中的traceId都是相同的,Zipkin将具有相同traceId的span组装成跟踪树来直观的将调用链路图展现在我们面前。

            id:span的id,理论上来说,span的id只要做到一个traceId下唯一就可以

            parentId:父span的id,调用有层级关系,所以span作为调用节点的存储结构,也有层级关系,就像图3所示,跟踪链是采用跟踪树的形式来展现的,树的根节点就是调用调用的顶点,从开发者的角度来说,顶级span是从接入了Zipkin的应用中最先接触到服务调用的应用中采集的。所以,顶级span是没有parentId字段的

            name:span的名称,主要用于在界面上展示,一般是接口方法名,name的作用是让人知道它是哪里采集的span,不然某个span耗时高我都不知道是哪个服务节点耗时高

            timestamp:span创建时的时间戳,用来记录采集的时刻。

            duration:持续时间,即span的创建到span完成最终的采集所经历的时间,除去span自己逻辑处理的时间,该时间段可以理解成对于该跟踪埋点来说服务调用的总耗时

            annotations:基本标注列表,一个标注可以理解成span生命周期中重要时刻的数据快照,比如一个标注中一般包含发生时刻(timestamp)、事件类型(value)、端点(endpoint)等信息

                事件类型

                        cs:客户端/消费者发起请求

                        cr:客户端/消费者接收到应答

                        sr:服务端/生产者接收到请求

                        ss:服务端/生产者发送应答

                    ps:这四种事件类型的统计都应该是Zipkin提供客户端来做的,因为这些事件和业务无关,这也是为什么跟踪数据的采集适合放到中间件或者公共库来做的原因。

            binaryAnnotations:业务标注列表,如果某些跟踪埋点需要带上部分业务数据(比如url地址、返回码和异常信息等),可以将需要的数据以键值对的形式放入到这个字段中。
    

参考

    zipkin官网

    分布式跟踪系统(一):Zipkin的背景和设计

    分布式跟踪系统(二):Zipkin的Span模型

© 著作权归作者所有

上一篇: zipkin部署
下一篇: LinkedIn kafka-monitor
China_OS
粉丝 427
博文 463
码字总数 519985
作品 0
静安
技术主管
私信 提问
Spring Cloud Sleuth Zipkin 展示追踪数据

上篇文章我们介绍了Spring Cloud Sleuth 链路追踪, 可以在输出的log中增加唯一请求的标识以及spanid, 然后可以采用ELK来对数据做集中管理,但是无法提供直观的调用链的展示,本章将介绍使用Z...

尹吉欢
2017/12/10
0
0
服务链路追踪---Sleuth

Sleuth:日志收集工具包,封装了Dapper和log-based追踪以及Zipkin和HTrace操作,为SpringCloud应用实现了一种分布式追踪解决方案。 当服务与服务之间调用复杂时,SpringCloud Sleuth配合Zip...

dalaoyang
2018/04/26
0
0
[学习微服务-第5天] ServiceComb+Zipkin源码解读

SeviceComb + Zipkin 简介 ServiceComb 是Apache的微服务顶级项目,在微服务框架中,微服务之间通过网络进行通信,我们必须处理所有与网络相关的问题,例如延迟,超时和分区。随着部署的微服...

业界首个Apache微服务顶级项目
02/12
21
0
采用brave接入zipkin实现自定义rpc跟踪

本文假设你已经阅读过Dapper文章:http://bigbully.github.io/Dapper-translation/,对分布式服务跟踪有了初步了解。另一篇zipkin的介绍文章(基础篇)可以参考:http://www.tangrui.net/im...

郑浩锋
2016/08/23
3K
2
ZipKin原理学习--ZipKin入门介绍

ZipKin入门介绍 Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开发贡献。其主要功能是聚集来自各个异构系...

qq924862077
2018/05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
4
0
Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
今天
10
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
9
0
Set 和 Map

Set 1:基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

凌兮洛
今天
4
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部