Zipkin简介及基本概念

摘要:
Zipkin简介Zipkin是Twitter的一个开源项目,基于GoogleDapper实现。上图展示了Zipkin的基础架构,主要由4个核心组件构成:Collector:收集器组件,它主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin内部处理的Span格式,以支持后续的存储、分析、展示等功能。通过UI组件用户可以方便而有直观地查询和分析跟踪信息。

Zipkin简介
Zipkin是 Twitter 的一个开源项目,基于 Google Dapper实现。可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。除了面向开发的API接口之外,它也提供了方便的 UI 组件帮助我们直观的搜索跟踪信息和分析请求链路明细,比如:可以查询某段时间内各用户请求的处理时间等。
Zipkin简介及基本概念第1张

上图展示了Zipkin的基础架构,主要由4个核心组件构成:
Collector:收集器组件,它主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin内部处理的Span格式,以支持后续的存储、分析、展示等功能。

Storage:存储组件,它主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到 数据库或es 中。

RESTful API:API组件,它主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是外接系统访问以实现监控等。

Web UI:UI组件,基于API组件实现的上层应用。通过UI组件用户可以方便而有直观地查询和分析跟踪信息。

zipkin相关概念
Trace、Span、annotations注释

1、Trace
Zipkin使用Trace结构表示对一次请求的跟踪,一次请求可能由后台的若干服务负责处理,每个服务的处理是一个Span,Span之间有依赖关系,Trace就是树结构的Span集合;

2、Span
每个服务的处理跟踪是一个Span,可以理解为一个基本的工作单元,包含了一些描述信息:id,parentId,name,timestamp,duration,annotations等,例如:

{
      "traceId": "bd7a977555f6b982", #标记一次请求的跟踪,相关的Spans都有相同的traceId;
      "name": "get-traces", #span的名称,一般是接口方法的名称
      "id": "ebf33e1a81dc6f71", #span id
      "parentId": "bd7a977555f6b982",   
      "timestamp": 1458702548478000,
      "duration": 354374,
      "annotations": [
        {
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          },
          "timestamp": 1458702548786000,
          "value": "cs"
        }
      ],
      "binaryAnnotations": [
        {
          "key": "lc",
          "value": "JDBCSpanStore",
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          }
        }
      ]
}

traceId:标记一次请求的跟踪,相关的Spans都有相同的traceId;
id:span id;
name:span的名称,一般是接口方法的名称;

parentId:
可选的id,当前Span的父Span id,通过parentId来保证Span之间的依赖关系,
如果没有parentId,表示当前Span为根Span;

timestamp:
Span创建时的时间戳,使用的单位是微秒(而不是毫秒),所有时间戳都有错误,
包括主机之间的时钟偏差以及时间服务重新设置时钟的可能性,
出于这个原因,Span应尽可能记录其duration;

duration:持续时间使用的单位是微秒(而不是毫秒);

annotations注释:用于及时记录事件;有一组核心注释用于定义RPC请求的开始和结束;

cs:Client Send,客户端发起请求;
sr:Server Receive,服务器接受请求,开始处理;
ss:Server Send,服务器完成处理,给客户端应答;
cr:Client Receive,客户端接受应答从服务器

Zipkin简介及基本概念第2张

上图为一次请求的跟踪,输出的日志依次为:微服务名、traceID、spanID、是否采样。

免责声明:文章转载自《Zipkin简介及基本概念》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Servlet第六篇【Session介绍、API、生命周期、应用】pycharm下虚拟环境执行并调试scrapy爬虫程序(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

API及接口清单

模块 应用场景 类型 API/接口 AP 付款核销 API ap_pay_invoice_pkg.ap_pay_invoice AP 应付发票审批 API ap_approval_pkg.approval AP 预付款核销 API ap_prepay_pkg.apply_prepay_fr_prepay AP 创建应付发票...

API文档管理平台

一、应用场景 在公司中,有很多开发,每个人维护的api接口是不一样的。如果有一个统一的api文档管理平台,每个开发,把自己维护的接口录入进去。 之后再开发别的功能时,不需要重复造轮子,直接调用就可以了。有新员工入职时,也可以快速上手! 关于api文档管理,网上有很多。有在线收费的,也有开源的。基于节省成本考虑,这里主要介绍2个开源工具:ShowDoc和YA...

【百度地图API】JS版本的常见问题

【新手必读】API常见问题 1、请问如何将我的店铺标注在百度地图上?我是否可以做区域代理?在百度地图上标注是否免费? 答复: 这里只负责API的技术咨询,不解决任何地图标注问题。在百度地图上标注自己公司,即气泡标注业务。该业务已外包给青岛亿搜,不属于API技术范畴。全国商户的标注需求,请致电:合作伙伴“青岛亿搜网络科技有限公司”咨询。联系电话:0532-6...

.Net Core Swagger 给类库模型添加注解

因为公司流程的需要,需要给每个API的Request 和Response 模型及属性加上注解,发现Api项目依赖的Model 类库中的/// Summy的注解并没有作用。 通过翻资料和实践。发现借助 Swashbuckle.AspNetCore.Annotations 包可以实现。 步骤: 在模型字段加上 [SwaggerSchema("UserId",...

Vulkan vs OpenGL ES

Vulkan 简介 Vulkan是一个免费开放的、跨平台的、底层的图形API,在一定程度上比AMD Mantle、微软DirectX 12、苹果Metal更值得开发者关注。 Vulkan的最大任务不是竞争DirectX,而是取代OpenGL,所以重点要看和后者的对比。 在高分辨率、高画质、需要GPU发挥的时候,Vulkan、OpenGL的速度基本差不多,但...

WebApi接口

格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况;希望大家喜欢,也希望各位多多扫码支持和点赞谢谢: . 自定义一个Action,响应输出集合数据 . api返回json数据的两种方式 . json时间格式处理方式 . 让api接口支持返回json和...