调用链定义:

在系统完成一次业务调用的过程中,把服务之间的调用信息(时间、接口、层次、结果)打点到日志中,然后将所有的打点数据连接为一个树状链条就产生了一个调用链。跟踪系统把过程中产生的日志信息进行分析处理,将业务端到端的执行完整的调用过程进行还原,根据不同维度进行统计分析;从而标识出有异常的服务调用,能够快速分析定界到出异常的服务;同时可根据数据统计分析系统性能瓶颈。

核心概念:

1、Trace:
Trace是指一次请求调用的链路过程,trace id 是指这次请求调用的ID。在一次请求中,会在网络的最开始生成一个全局唯一的用于标识此次请求的trace id,这个trace id在这次请求调用过程中无论经过多少个节点都会保持不变,并且在随着每一层的调用不停的传递。最终,可以通过trace id将这一次用户请求在系统中的路径全部串起来。

2、Span:
Span是指一个模块的调用过程,一般用span id来标识。在一次请求的过程中会调用不同的节点/模块/服务,每一次调用都会生成一个新的span id来记录。这样,就可以通过span id来定位当前请求在整个系统调用链中所处的位置,以及它的上下游节点分别是什么。

3、Annotation:
是指附属信息,可以用于附属在每一个Span上自定义的数据。


从图中可见,一次请求只有一个唯一的trace id=12345,在请求过程中的任何环节都不会改变。在这个请求的调用链中,SpanA调用了SpanB,然后SpanB又调用了SpanC和SpanD,每一次Span调用都会生成一个自己的span id,并且还会记录自己的上级span id是谁。通过这些id,整个链路基本上就都能标识出来了。

系统整个调用链(核心思路):

整个调用过程的追踪,主要有下面几个步骤:

  • 所有请求到来即生成一个全局唯一编码的TraceID,通过TraceID可以串联起整个调用链,一个TraceID只代表一次请求。

  • 在调用过程中,需要SpanID用于记录调用父子关系。每个服务会记录下Parent ID和Span
    ID。这样通过TraceID和TraceID可以组织一次完整调用链的父子关系。

  • 一个没有Parent Id的Span成为Root Span,可以看成调用链入口。
    所有这些ID可用全局唯一的64位整数表示。

  • 整个调用过程中每个请求都要透传TraceID和SpanID。

  • 每个服务将该次请求附带的TraceID和附带的SpanID作为Parent ID记录下,并且将自己生成的SpanID也记录下。

  • 要查看某次完整的调用,只要根据TraceID查出所有调用记录,然后通过Parent ID和Span Id组织起整个调用父子关系即可。

调用链相关理解和说明相关推荐

  1. Istio调用链埋点原理剖析—是否真的“零修改”?

    前言 在Istio的实践中最近经常被问到一个问题,使用Istio做调用链用户的业务代码是不是完全0侵入,到底要不要修改业务代码? 看官方介绍: Istio makes it easy to creat ...

  2. Istio调用链埋点原理剖析—是否真的“零修改”分享实录

    戳蓝字"CSDN云计算"关注我们哦! 来自:容器魔方 作者: idouba 本文整理自华为Cloud BU技术专家在K8S技术社上 关于Istio调用链的分享. 前言 大家好,我是 ...

  3. 调用链监控:Dapper、Istio... etc.

    目录 Dapper,大规模分布式系统的跟踪系统by bigbully 2.5.1 带外数据跟踪收集 6.2 解决延迟的长尾效应 7. 其他收获 RPC服务追踪的原理与实践- SegmentFault ...

  4. 微服务调用链追踪中心搭建 1

    概述 一个完整的微服务系统包含多个微服务单元,各个微服务子系统存在互相调用的情况,形成一个 调用链.一个客户端请求从发出到被响应 经历了哪些组件.哪些微服务.请求总时长.每个组件所花时长 等信息我们有 ...

  5. 微服务调用链日志追踪分析

    一.技术原理 1.1 背景 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元.由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位.主要体现在,一个 ...

  6. 调用链与日志的关联式跟踪查询

    调用链与日志的关联式跟踪查询 长假过完,相信无缘支付宝中国锦鲤的你一定已经回来工作了.虽然轻轻松松与全球免单大礼包失之交臂,但不要丧气,小编悄悄为你准备了一份秘籍,助你在2018年最后不到三个月的时间 ...

  7. 从驱动开发角度理解linux epoll调用链

    epoll是linux中一种处理高并发的事件查询机制,是在原有poll机制上的改进,相比原有的poll机制,epoll在处理/监控大量文件描述符时,拥有更好的性能. 网上能够找到大量关于Epoll的资 ...

  8. 区块链相关论文研读7:通过分片(Sharding)扩展区块链

    本文首发在https://zhuanlan.zhihu.com/p/89933683 这篇论文发表在顶会SIGMOD 2019上,题目为<Towards Scaling Blockchain S ...

  9. vivo 调用链 Agent 原理及实践

    一.项目背景 2017年,vivo互联网研发团队认为调用链系统对实际业务具有较大的价值,于是开始了研发工作.3年的时间,调用链系统整体框架不断演进--本文将介绍vivo调用链系统 Agent 技术原理 ...

最新文章

  1. 脑电分析系列[MNE-Python-5]| Python机器学习算法随机森林判断睡眠类型
  2. 分布式改造剧集三:Ehcache分布式改造
  3. 阿里云大数据利器Maxcompute-使用mapjoin优化查询
  4. UWP 手绘视频创作工具技术分享系列 - 位图的绘制
  5. 软件工程复习提纲——第五章
  6. AngularJS 使用 Promise
  7. 美妆海报不会做? PSD分层模板带你轻松掌握!
  8. python中的引用,Python里的引用和拷贝
  9. 如何使用Intellij IDEA工具导入SVN项目
  10. 【POJ2888】Magic Bracelet Burnside引理+欧拉函数+矩阵乘法
  11. 拓端tecdat|R语言基于线性回归的资本资产定价模型(CAPM)
  12. CF probabilities 自制题单
  13. 第21批符合道路运输车辆卫星定位系统标准 及规范的车载终端
  14. 0123能组成四位数c语言,用0123四个数字能组成多少个不同的三位数
  15. 局域网简易聊天服务器&客户端
  16. PNP和NPN磁感应开关有什么区别
  17. 新PC如何在不激活系统的情况下查看各项参数(Win10)
  18. 分享一个ASCII艺术字(图)集网站
  19. The producer service state not OK, CREATE_JUST
  20. Office2016登录的账户名和microsoft账户名不照应的解决方法

热门文章

  1. 小米电视销量惹争议,但它确实给国内电视市场带来冲击
  2. 短信宝+发送短信验证码
  3. 写java接口的文档工具_【java】适合写接口文档的工具,或者文本语法
  4. 解决网页在IE6,FF等浏览器下的不兼容问题
  5. Java(5)数组、二维数组
  6. centos nmtui 使用_CentOS7下nmtui网络配置
  7. 舞伴问题 队列 数据结构
  8. 空转空串java_spring mvc json null空转空串
  9. (42)ObjectARX2015 + vs2012 JIG-一拖多
  10. Git指令 复制原分支代码到新分支