【附8】zipkin
一、zipkin作用
- 全链路追踪工具(查看依赖关系)
 - 查看每个接口、每个service的执行速度(定位问题发生点或者寻找性能瓶颈)
 
二、zipkin工作原理
- 创造一些追踪标识符(tracingId,spanId,parentId),最终将一个request的流程树构建出来
 
三、zipkin架构

1、Transport
- transport作用:收集被trace的services的spans,并将它们转化为zipkin common Span,之后把这些Spans传递的存储层。
 - 三种主要的transport:
- HTTP(默认)
- 通过http headers来传递追踪信息
 - header中的key
- X-B3-TraceId: 64 encoded bits(id被encode为hex Strings)
 - X-B3-SpanId: 64 encoded bits
 - X-B3-ParentSpanId: 64 encoded bits
 - X-B3-Sampled: Boolean (either “1” or “0”)(下面的调用是否进行采样)
 - X-B3-Flags: a Long
 
 
 - Scribe
 - Kafka
 
 - HTTP(默认)
 
2、基础架构(4个组件)
- collector
- 作用:zipkin collector会对一个到来的被trace的数据(span)进行验证、存储并设置索引。
 
 - storage
 - search
 - webUI
 
四、zipkin核心数据结构
- Annotation(用途:用于定位一个request的开始和结束,cs/sr/ss/cr含有额外的信息,比如说时间点)
- cs:Client Start - This sets the beginning of the span
- 一个span的开始
 
 - sr:Server Receive - The server has received the request and will start processing it
 - ss:Server Send - The server has completed processing and has sent the request back to the client
 - cr:Client Receive - The client has received the response from the server. This sets the end of the span. The RPC is considered complete when this annotation is recorded
- 一个span的结束
 - 当这个annotation被记录了,这个RPC也被认为完成了
 
 
 - cs:Client Start - This sets the beginning of the span
 - BinaryAnnotation(用途:They are meant to provide extra information about the RPC)
 - Span:就是一个请求(包含一组Annotation和BinaryAnnotation)
- Spans contain identifying information such as traceId, spandId, parentId, and RPC name
 
 - Trace:
- Traces are built by collecting all Spans that share a traceId
 - 通过traceId、spanId和parentId,被收集到的span会汇聚成一个tree,从而提供出一个request的整体流程。(这也是zipkin的工作原理)
 
 
注意:时间点计算
- sr-cs:网络延迟
 - ss-sr:逻辑处理时间
 - cr-cs:整个流程时间
 
五、Trace identifiers
- 含义:通过下边3个Id,对数据进行重组
 - 三个Id(64位 long型数据)
- TraceId
- The overall ID of the trace.
 - Every span in a trace will share this ID.
 
 - SpanId
- The ID for a particular span.
 - This may or may not be the same as the trace id.
 
 - ParentId
- This is an optional ID that will only be present on child spans.
 - That is the span without a parent id is considered the root of the trace.
 
 
 - TraceId
 
六:zipkin工作流程图

说明:
- X和A可以相等
 
疑问:
- spanId==C的span为什要有,是否可以省掉?
 
父子span关系:

说明:parentId==null,表示该span就是root span。
七、注意点
1、使用zipkin,必须使用java8
2、在生产环境,不会对每个请求都进行采样追踪(降低trace对整个服务的性能损耗)
参考:
https://github.com/openzipkin/zipkin/tree/master/zipkin-server server配置
【附8】zipkin的更多相关文章
- 附8 zipkin
		
一.zipkin作用 全链路追踪工具(查看依赖关系) 查看每个接口.每个service的执行速度(定位问题发生点或者寻找性能瓶颈) 二.zipkin工作原理 创造一些追踪标识符(tracingId,s ...
 - 第二十七章 springboot + zipkin(brave-okhttp实现)
		
本文截取自:http://blog.csdn.net/liaokailin/article/details/52077620 一.前提 1.zipkin基本知识:附8 zipkin 2.启动zipki ...
 - 【第二十七章】 springboot + zipkin(brave-okhttp实现)
		
本文截取自:http://blog.csdn.net/liaokailin/article/details/52077620 一.前提 1.zipkin基本知识:附8 zipkin 2.启动zipki ...
 - springboot + zipkin(brave-okhttp实现)
		
一.前提 1.zipkin基本知识:附8 zipkin 2.启动zipkin server: 2.1.在官网下载服务jar,http://zipkin.io/pages/quickstart.html ...
 - springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin
		
相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...
 - spring cloud 系列第7篇 —— sleuth+zipkin 服务链路追踪 (F版本)
		
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.简介 在微服务架构中,几乎每一个前端的请求都会经过多个服务单元协调来提 ...
 - C# 多种方式发送邮件(附帮助类)
		
因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...
 - 【开源毕设】一款精美的家校互动APP分享——爱吖校推 [你关注的,我们才推](持续开源更新3)附高效动态压缩Bitmap
		
一.写在前面 爱吖校推如同它的名字一样,是一款校园类信息推送交流平台,这么多的家校互动类软件,你选择了我,这是我的幸运.从第一次在博客园上写博客到现在,我一次一次地提高博文的质量和代码的可读性,都是为 ...
 - 轻量级通信引擎StriveEngine —— C/S通信demo(附源码)
		
前段时间,有几个研究ESFramework的朋友对我说,ESFramework有点庞大,对于他们目前的项目来说有点“杀鸡用牛刀”的意思,因为他们的项目不需要文件传送.不需要P2P.不存在好友关系.也不 ...
 
随机推荐
- python2.7+pyqt4实现记事本基本功能
			
记事本程序: # coding:utf-8 import sys from PyQt4.QtGui import QMainWindow from PyQt4.QtGui import QApplic ...
 - Shell的>/dev/null、2>&1、2>1
			
转载自:http://dos2unix.cn/link/480 1. 标准输入stdin文件描述符为0,标准输出stdout文件描述符为1,标准错误stderr文件描述符为2 2. /dev/null ...
 - 【spring mvc】springmvc在tomcat中的执行过程
			
一.WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象(每个web应用程序唯一),它代表当前web应用web容器提供其一个全局的上下文环境,其为后面的spri ...
 - 在centos7下安装svn
			
SVN的安装 yum install subversion 服务端命令 1. svnserver - 控制svn系统服务的启动等 2. svnadmin - 版本库的创建/导出/导入/删除等 3. s ...
 - [py]flask动态展示主机内存图
			
echarts基础 需要借助这个图来绘制,动态内存图. 绘制步骤 写py脚本来入库日志 选取合适的echart,并观察图所需的数据格式 用flask返回这个静态的echarts 用flask写接口返回 ...
 - storm并发机制,通信机制,任务提交
			
一.storm的并发 (1)Workers(JVMs):在一个物理节点上可以运行一个或多个独立的JVM进程.一个Topology可以包含一个或多个worker(并行的跑在不同的物理机上),所以work ...
 - 从Maven仓库中导出jar包
			
从Maven仓库中导出jar包:进入工程pom.xml 所在的目录下,输入以下命令:mvn dependency:copy-dependencies -DoutputDirectory=lib更简单的 ...
 - [LeetCode] 198. House Robber _Easy  tag: Dynamic Programming
			
You are a professional robber planning to rob houses along a street. Each house has a certain amount ...
 - postman返回参数的截取
			
同事在使用postman接口测试的时候,遇到这么一个问题,在一个参数里面,返回了一个类似数组的参数,如下: 然后现在需要把数组里面的两个参数分别保存到环境变量里面: 个人的想法是通过截取的方式进行数组 ...
 - iOS 界面启动时,功能新特征显示
			
APP新启动的时候,都会有几张新的图片滑动,才能到主的界面.现在,我们新建一个控制器,专门来处理新特性,直接上代码. 第一步:新建一个NewfeatureController // // HWNewf ...