(接触了Zipkin,权将所了解或理解的记于此,以备忘)

分布式追踪系统

随着业务发展,系统拆分多个微服务。此时对于一个前端请求可能需要调用多个后端端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的。此时就需要有某种方式来定位到故障位,这就是分布式系统调用跟踪的诞生。

分布式服务调用追踪的理论基础是Google 2010年发表的论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》(译文:Dapper,大规模分布式系统的跟踪系统)。为了实现平台无关、厂商无关的分布式服务跟踪,CNCF(Cloud Native Computing Foundation,云原生计算基金会,一个厂商中立的基金会,致力于Github上的快速成长的开源技术的推广,如Kubernetes、Prometheus、Envoy等)发布了布式服务跟踪标准 Open Tracing。基于该标准有很多具体实现,如Google的Dapper、Twitter的Zipkin,国内的有淘宝的鹰眼、京东的Hydra、大众点评的CAT、新浪的Watchman等,其中使用的最广泛的是Twitter的Zipkin。

几个概念

trace、span

Trace 表示对一次请求的追踪,又把每个 Trace 拆分为若干个有依赖关系的 Span(意为持续时间?)。在微服务架构中,一次用户请求可能会由后台若干个服务负责处理,则每个处理请求的服务就可以理解为一个 Span(可包括 API 服务,缓存服务,数据库服务以等)。当然这个服务也可能继续请求其他的服务,因此 Span 是一个树形结构,以体现服务之间的调用关系。

Zipkin - what

Zipkin是一个开源的分布式追踪系统,用于对服务间的调用链路进行监控追踪。在微服务架构下,用户的一个请求可能涉及到很多个后台服务间的调用,Zipkin可以追踪(trace)调用链路、收集在各个微服务上所花的时间等信息、并上报到Zipkin服务器。

Zipkin是根据Google Dapper而设计的,由Twitter公司开发。

官网:https://zipkin.io/

项目GitHub:https://github.com/openzipkin/zipkin

Zipkin项目功能齐全,项目提供了链路追踪(trace)、数据上报(collector)、数据存储(server storage)、数据展示(server ui)等封装模块。

1、链路追踪(request trace):即Zipkin client,用于对用户的调用进行追踪,Zipkin提供了java、go、js等各种主流语言的追踪库:开箱即用,以少量代码且很少的业务代码侵入代价实现追踪。brave是zipkin提供的java下的trace library,其提供了针对rpc、http、kafka、mysql、jmx等很多调用类型的追踪(参阅:https://github.com/openzipkin/brave),从中收集到调用耗时等信息。

2、数据上报(collector/transport):即Zipkin server接收Zipkin client所收集信息的方式,Zipkin支持HTTP Rest API、Kafka、rabbitmq等形式来接收数据(参阅:https://github.com/openzipkin/zipkin/tree/master/zipkin-collector),默认为HTTP形式。

3、数据存储(server storage):即Zipkin server对client上传来的数据的存储形式,Zipkin提供了In-Memory、MySQL、Cassandra、Elasticsearch等形式(参阅:https://github.com/openzipkin/zipkin/tree/master/zipkin-storage)。默认为In-Memory形式。

4、数据展示(server ui):通过Zipkin server ui展示收集到的调用链信息。

5、... ...

可以预见,万变不离其宗,Zipkin client主要就是各种语言下的library、而一个Zipkin server则是对Collector、Storage、UI等的整合。

更多参考资料:分布式服务跟踪及Spring Cloud的实现

链路追踪工具之Zipkin学习小记的更多相关文章

  1. 基于Dapper的分布式链路追踪入门——Opencensus+Zipkin+Jaeger

    微信搜索公众号 「程序员白泽」,进入白泽的编程知识分享星球 最近做了一些分布式链路追踪有关的东西,写篇文章来梳理一下思路,或许可以帮到想入门的同学.下面我将从原理到demo为大家一一进行讲解,欢迎评论 ...

  2. 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习

    一.技术产生的背景 1.1 背景 先来了解一下分布式链路追踪技术产生的背景. 在现在这个发达的互联网世界,互联网的规模越来越大,比如 google 的搜索,Netflix 的视频流直播,淘宝的购物等. ...

  3. 带入gRPC:分布式链路追踪 gRPC + Opentracing + Zipkin

    在实际应用中,你做了那么多 Server 端,写了 N 个 RPC 方法.想看看方法的指标,却无处下手? 本文将通过 gRPC + Opentracing + Zipkin 搭建一个分布式链路追踪系统 ...

  4. springCloud的使用08-----服务链路追踪(sleuth+zipkin)

    sleuth主要功能是在分布式系统中提供追踪解决方案,并且兼容支持了zipkin(提供了链路追踪的可视化功能) zipkin原理:在服务调用的请求和响应中加入ID,表明上下游请求的关系. 利用这些信息 ...

  5. 基于zipkin分布式链路追踪系统预研第一篇

    本文为博主原创文章,未经博主允许不得转载. 分布式服务追踪系统起源于Google的论文“Dapper, a Large-Scale Distributed Systems Tracing Infras ...

  6. zipkin分布式链路追踪系统

    基于zipkin分布式链路追踪系统预研第一篇   分布式服务追踪系统起源于Google的论文“Dapper, a Large-Scale Distributed Systems Tracing Inf ...

  7. Go微服务框架go-kratos实战05:分布式链路追踪 OpenTelemetry 使用

    一.分布式链路追踪发展简介 1.1 分布式链路追踪介绍 关于分布式链路追踪的介绍,可以查看我前面的文章 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习(https://www. ...

  8. Jaeger Client Go 链路追踪|入门详解

    目录 从何说起 Jaeger 部署 Jaeger 从示例了解 Jaeger Client Go 了解 trace.span tracer 配置 Sampler 配置 Reporter 配置 分布式系统 ...

  9. 链路追踪_SkyWalking的部署及使用

    关于链路追踪,目前比较主流是Cat,Zipkin,SkyWalking等这些工具.这篇文章主要介绍关于SkyWalking工具的. 为什么用SkyWalking,因为它基本没有代码侵入,只这一点就足够 ...

随机推荐

  1. 2109 ACM 排序

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2109 题意:简单的排序问题 代码: #include<cstdio> #include< ...

  2. Lua的 table.sort排序

    在用table.sort 排序的时候注意,如果使用多个条件排序,应在一个排序函数里按照条件优先级进行比较排序. 例如 local t = { {time = , i = }, {time = , i ...

  3. (文件操作)Android相关的File文件操作

    判断文件是否存在: /** * 判断文件是否存在 * * @param path 文件路径 * @return [参数说明] * @return boolean [返回类型说明] */ public ...

  4. 潭州课堂25班:Ph201805201 django框架 第十二课 自定义中间件,上下文处理,admin后台 (课堂笔记)

    中间件 在项目主目录下的配置文件 在项目主目录下创建文件 写个自定义异常处理 方法1 要让其生效,要在主目录下,的中间件中进行注册 主目录下.该文件名.类名 在进入视图函数之前进行判断,  给 req ...

  5. 初窥Java--2(下载Eclipse,安装tomcat插件)

    一.软件下载 Eclipse3.6 IDE for Java EE Developers: 下载地址:http://eclipse.org/downloads/ Tomcat Eclipse Plug ...

  6. yii2小部件(widget)

    一.创建一个简单的小部件 namespace common\components; //common需要自己先设定一个别名 use yii\base\Widget; //小部件需要继承的基类 use ...

  7. tableviewcell选中不变色。

    tableview 选中一行后,不显示选中颜色 添加这样一句话就好 cell.selectionStyle = UITableViewCellSelectionStyleNone; 一定不要table ...

  8. Vector源码分析和实例应用

    1.Vector介绍 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口. Vector ...

  9. JavaScript面向对象的三大特性

    1.JavaScript面向对象的三大特性 JavaScript的三大特性:封装性.继承性.多态性. 2.JavaScript实现封装特性 在一些静态类型的语言如java中,本身语法就提供了这些功能. ...

  10. Vue(六)过滤器

    1. 简介 用来过滤模型数据,在显示之前进行数据处理和筛选 语法:{{ data | filter1(参数) | filter2(参数)}} 2. 关于内置过滤器 vue1.0中内置许多过滤器,如:c ...