分布式系统的远程调用过程

典型的分布式系统的调用关系如下图所示,在用户的一个请求到达组合的前端服务后,前端服务会分发请求到内部的各个服务,每次调用都设计跨系统的一次请求和一次响应。

在有大规模、高并发请求量的系统中,我们如何标识这些请求及存储这些调用信息,并形成一个调用链呢?

如果系统的某两个服务之间出了问题,我们又如何提供可视化的方式展现调用链,并在调用链上标注产生问题的那条边呢?

从上图可知,服务于一个请求的内部服务调用结构是一个树形结构,树节点是整个架构的基本单元,每个节点对应一个服务。
在谷歌的Dapper论文中,每个节点对应一个Span,节点之间的连线标识为Span与其Parent Span之间的关系(请求和响应的调用关系),并将请求调用和响应组成的数据称为调用信息。

现在,我们重点关注两个服务之间的通信,两个服务之间也许会有成千上万次通信,每一次都有成对的一次请求和响应,但是它们的顺序是不能保证的(发送请求1、2得到响应2、1)。所以,需要一种手段来标识请求和响应是一对。

谷歌的Dapper论文通过增加应用层的标记来对服务化中的请求和响应建立联系。例如,它通过HTTP协议头来携带标记信息,标记信息包括标识调用链的唯一流水ID(TraceID),以及标识调用层次和顺序的SpanIDParentSpanID


一次远程调用分为4个阶段,每个阶段对应一种远程调用信息的类型:

  • 调用端 发送请求 的调用信息 RPCPhase.P1
  • 被调用端 接收请求 的调用信息 RPCPhase.P2
  • 被调用端 发送响应 的调用信息 RPCPhase.P3/E3
  • 调用端 接收响应 的调用信息 RPCPhase.P4/E4

由于响应又被分为成功响应和异常响应。所以第三第四阶段的调用类型分为P/E。另外主线程与子线程之间的调用信息称为 RPCPhase.SIB。
上面每种调用信息都包含:调用端/被调用端的IP、系统ID;本次请求的TraceID、SpanID、ParentSpanID;时间戳、调用的方法名称及远程调用信息的类型等等。

TraceID

如下图所示,前端接收用户请求后,会为用户分配一个TraceID,然后在内部服务调用时,会依次传递。所以通过TraceID可以追踪到这个唯一ID所有的请求和响应,并定位问题发生的节点。

TraceID解决了系统调用关系的串联问题,通过调用关系串联,我们能够找到服务于一个用户请求的调用和响应消息的集合。

SpanID/ParentSpanID

TraceID无法标识和恢复调用请求和响应的顺序和层级关系。因此需要SpanID和ParentSpanID,这里我们统称SpanID。

业务链

在生产实践中,由于业务流程的复杂性,一个业务流程的完成由用户的多次请求组成。

我们需要在多次请求之间建立联系,可以通过业务系统的订单号来串联业务链,调用链是简单的树形结构,业务链则是森林。

调用链跟踪系统的设计与实现

调用链跟踪系统通常由采集器、处理器和分布式存储系统组成,该系统对外提供查询和查看功能,整体的调用链跟踪系统的通用架构如下图所示:

具体怎么实现的,不是学习重点,暂不赘述。

为分布式做准备吧——调用链原理相关推荐

  1. 带哨兵节点的链_限流降级神器-哨兵(sentinel)的资源调用链原理分析

    点击上方 Yoon丶徒手摘星 ,选择 置顶或者星标技术干货每日送达! 我们已经知道了sentinel实现限流降级的原理,其核心就是一堆Slot组成的调用链. 这里大概的介绍下每种Slot的功能职责:N ...

  2. (十四) Nepxion-Thunder分布式RPC集成框架 - 调用链

    Nepxion-Thunder(QQ 群 471164539)发布在https://github.com/Nepxion/   调用链根据单端和多端分成两种方式 单端链式调用 多端跨进程调用链 单端链 ...

  3. 分布式服务追踪与调用链系统

    如何构建新一代SkyWalking服务追踪框架 1.生产环境调用接口报错了,如何定位? 2.微服务服务追踪框架构设计原理 3.Sleuth+zipkin实现分布式服务追踪 4.SkyWalking超强 ...

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

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

  5. 分布式通信:远程调用

    分布式通信:远程调用 前言 什么是远程调用? 远程调用的原理及应用 RPC 的原理及应用 RMI 的原理及应用 RPC 与 RMI 对比分析 知识扩展:远程过程调用存在同步和异步吗? 总结 前言 分布 ...

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

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

  7. 使用 docker 构建分布式调用链跟踪框架skywalking

    一旦你的程序docker化之后,你会遇到各种问题,比如原来采用的本地记日志的方式就不再方便了,虽然你可以挂载到宿主机,但你使用 --scale 的话,会导致记录日志异常,所以最好的方式还是要做日志中心 ...

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

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

  9. Spring异步调用原理及SpringAop拦截器链原理

    一.Spring异步调用底层原理 开启异步调用只需一个注解@EnableAsync @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTI ...

最新文章

  1. python word排版_使用Python通过win32 COM实现Word文档的写入与保存方法
  2. shell-1-命令与参数
  3. Navicat导入TXT到数据库
  4. android代理生命周期,了解 Activity 生命周期
  5. web文件上传(一)--文件上传与json上传区别及方法
  6. 100G网络你能看懂多少?
  7. 测试驱动开发、验收测试驱动开发和行为驱动开发
  8. matlab根据数值大小聚类,[matlab聚类分析]请教高手:用matlab做聚类分析,节点数多于30个怎么画聚类图啊?...
  9. m4a文件怎么转换成mp3?=
  10. 随风摇曳的她——美蕨(matlab实现)
  11. Artifact ssmbuildFinal:war exploded: Artifact is being deployed SSM整合
  12. 数据结构——查找最全总结(期末复习必备)
  13. 计算机网络协议ppt,计算机网络基础——TCP-IP协议.ppt
  14. PT_二维随机变量:正态分布的可加性/一维随机变量函数与正态分布
  15. C++——隐式类型转换
  16. 达人评测 迅鲲1300t相当于骁龙多少 迅鲲1300T对比骁龙870哪个好
  17. 鼎捷软件贡献数字化智慧 赋能装备制造行业转型发展
  18. 分割字符串的AfxExtractSubString函数
  19. pako java_java压缩字符串,前端接收pako解压
  20. 企业、政府单位微信公众号名称怎么修改?

热门文章

  1. Linux-hexdump命令调试event驱动—详解(13)
  2. <Android开发> Android vold - 第三篇 vold 的NetLinkManager类简介
  3. 怎样将PDF文档进行翻译?PDF文档翻译简单方法介绍
  4. 数据结构《顺序栈》知识点详解+C语言完整代码-超详细
  5. 贼好用的六款 Linux 远程连接工具介绍
  6. Vue 动态加载public图片和图片预览例子
  7. 【网络安全培训】无线局域网的安全威胁都有哪些?
  8. 【BZOJ3872】Ant colony(二分,动态规划)
  9. python3.8与pyinstaller_pyinstaller 3.5 在python 3.8 环境下出现不兼容的问题
  10. python中显示第三行数据_在Python中Dataframe通过print输出多行时显示省略号的实例...