OpenTracing 介绍 | 学习笔记

简介: 快速学习 OpenTracing 介绍

开发者学堂课程【分布式链路追踪 Skywalking:OpenTracing 介绍】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/743/detail/13167


0pen Tracing 介绍


内容介绍

一、Tracing的概念(最核心的概念)

二、Span的概念

三、Log 的概念

四、Tags 的概念


一、 Trace的概念

在广义上,一个trace代表了一个事务或者流程在(分布式)系统中的执行过程,在OpenTracing 标准中,trace 是多个 span 组成一个有向无环图(DAG),每一个 span 代表 trace 中被命名并计时的连续性的执行片段。

详细介绍:在广义上,一个trace,在分布式系统中的执行过程,外部系统前端发起调用,调用的整个运作流程就代表一个 trace。对于外端的开发人员来说,要去定位问题,问题最初的根源是在 trace 上,可以通过 trace 来定位到,弄清楚在 trace当中,哪个部分出现了性能的瓶颈或者调用失败。

trace 是由 span 来组成的一个有向无环图,是定向的,不会出现一个环状物。span 代表 trace 中被命名并计时的连续性的执行片段,就是trace的一个调用过程。

image.png

这张图整体上一笔调用就代表一个trace,然而这张图不是特别的直观,因为它不能标识出每一笔调用的时间,所以就不能知道是在哪一笔调用,就无法知道span的那一个部分出现了一个性能的问题。

opeaing trace 将概念语义化之后,通过它的一个设计可以画出下面这张图。这张图上整体的调用就是一个trace,其中每一个颜色的色块代表一个span,比如说权限服务的调用过程就是一个span,它调用完之后会调用订单服务过程,这也是一个span。

image.png

通过这张图,可以很直观的看到,到底在这个过程中经过了哪几个过程,每个过程都是一个span,那个span耗时最长,一般来说性能的瓶颈可能就在这里。


二、 Span 的概念

一个Span代表系统中具有开始时间和执行时长的逻辑运行单元,span之间通过嵌客或者顺序排列建立逻辑因果关系。

详细介绍:一个Span代表系统中具有开始时间和执行时长的逻辑运行单元,就是一个调用过程,这个过程是有开始时间和持续时长的,可以用来统计执行时间,span之间具有逻辑因果关系。

Span里面的信息包括:操作的名字,开始时间和结束时间,可以附带多个key.value构成的Tags(key必须是String,value可以是String,bool或者数字),还可以附带Logs信息(不一定所有的实现都支持)也是 key.value 形式。

操作的名字:方法的一个名称。

开始时间结束时间:结束时间-开始时间=执行时间。

tags:展示 span 的一些额外信息。tags里面的key必须是 string 。value 可以是string,bool 或者数字。

logs信息:主要是用来打印一些span运行过程中的一些消息。

下面例子是一个 Trace ,里面有8个 Span:

image.png

一个 span 可以和一个或者多个 span 间存在因果关系。OpenTracing 定义了两种关系:Childof 和Followsfrom, 这两种引用类型代表了子节点和父节点间的直接因果关系。未来,OpenTracing 将支持非因果关系的 span 引用关系。(例如:多个 span 被批量处理,span 在同一个队列中,等等)

Childof 很好理解,就是父亲 Span 体段另一个孩子 Span ,比如函数调用,被调用者是调用者的孩子,比如说 RPC 调用,服务端那边的 Span,就是Chidof 客户端的,很多并发的调用,然后将结果聚合起来的操作,就构成了 Childof 关系。

如果父亲 Span 并不依赖于孩子 Span 的返回结果,这时可以说它他构成 FollowsFrom 关系。

例如: span 之间的因果关系,Span A 和 Span C 之间的关系就是 childof,代表 SpanA 调用 Span C , 需要等待 Span C 的返回。

Span F 和 Span G 之间的关系是 FollowsFrom,代表 SpanF 调用 Span G, 不需要等待 SpanG 的返回,就结束了。

image.png

如图所示,左边的每一条追踪代表一个 Trace,而右边时序图中每一个节点就是一个 Span。

左边每一笔的一个调用,就是一个 trace,trace 底下会有多个 span,比如说图片上的一个 span mvc 的出入接口调用就是一个 span,而如果说这个接口内部要调用 dubbo,于是就会出现一个新的 dubbo span,所以用这样一个 span 之间的关系再加上 trace,就能很明显的描述一个追踪链路的关系。


三、 Log 的概念

每个span可以进行多次 Logs 操作,每一次 Logs 操作,都需要一个带时间戳的时间名称,以及可选的任意大小的存储结构。

如下面是一个异常的 Log:

image.png

异常的 logo,本质上是一个 key.value 键值对,比如说 event 就是一个事件类型,key 就是 event,error 就是 value。

图片上面的内容,主要还是为了丰富的span的信息展示,比如说异常可以通过 log 来查看到底是哪个位置出现了问题,这个异常对战到底是怎么样的,用来快速定位一个议程。


四、 Tags 的概念

每个 span 可以有多个健值对 (key.value) 形式的 Tags, Tags 是没有时间截的,支持简单的对 span 进行注解和补充。

如下图就是一个 Tags 的详细信息,其中记录了数据库访问的 SQL 语句等内容。

image.png

课堂概念总结:

image.png

trace 是一个大的调用,比如说从前端发起请求到后端,那么直到后端返回这整个时间,就是发起了一次 trace 的调用。在 trace 内部,可能有很多span。

如左图所示,一个 span 是 spring mvc,响应到一个外部需求进行处理。span 内部会有一些 tags,tags 标明了请求类型,请求类型是键值对的形式:spring mvc。

如果报错了,就会有一个 log,log也是键值对形式:event:info 和 message:abc。

一个 trace 会有多个 span,如右图所示,另一个 span,是 dubbo span,是一个 dubbo 调用的 span ,请求类型是 dubbo。

如果报错,键值对形式:event:error 和 stack:堆栈信息。

在 span 的额外的信息里,还包括开始时间和结束时间。通过这些信息就可以看到 span 的一个业路的情况。

在 span 与 span 之间呢,它是有一个通过 dubbo 调用的关系存在,这个关系是 childof。

Open Tracing 就是基于这样的一些概念来把它的数据进行分类并且存储,那么通过这些数据的组合,就可以去画出分布式业路追踪的一张图了。

相关文章
|
4月前
|
人工智能 关系型数据库 MySQL
给你的AI Agent装上"行为记忆":agentmemory安装到整合全指南
agentmemory是专为AI Agent设计的本地化“情节记忆”引擎,解决其无状态、易失忆问题。它自动记录操作历史、决策与教训,支持LLM压缩、向量检索与知识图谱,R@5召回率达95.2%,节省92% token,开源(Apache 2.0),零外部依赖,15分钟即可部署启用。
1280 0
|
6月前
|
人工智能 Linux Docker
轻量AI接口网关一键部署|calciumion/new-api Windows/Linux Docker 部署全教程
推荐一款轻量高效的AI统一API服务镜像——calciumion/new-api,无需复杂配置,依托Docker即可一键极速部署。本文完整讲解Windows、Linux全环境部署流程,全程复制命令就能操作,纯新手也能快速落地,看完直接上手私有AI接口网关搭建。
1940 5
轻量AI接口网关一键部署|calciumion/new-api Windows/Linux Docker 部署全教程
|
人工智能 缓存 自然语言处理
全球首款开源通用型AI智能体上线!Suna:自动处理Excel/爬数据/写报告等复杂任务一句话搞定
Suna是由Kortix推出的开源通用型AI智能体项目,通过自然语言交互实现浏览器自动化、文件管理、数据分析等复杂任务处理,支持自托管部署,为研究分析和日常工作提供智能辅助。
3289 55
全球首款开源通用型AI智能体上线!Suna:自动处理Excel/爬数据/写报告等复杂任务一句话搞定
|
SQL 搜索推荐 Android开发
AB测试实战(一)
AB测试是一种数据驱动的产品优化方法,用于比较不同版本的网页、应用界面或营销策略的效果。
|
11月前
|
安全 Java 开发工具
工程搭建与验证
本文介绍如何使用阿里云脚手架快速搭建Spring Boot工程,并整合Spring Security实现基础安全控制。包含工程创建、代码导入、Web依赖配置、访问接口开发及Security默认登录验证,附完整代码仓库地址。
|
移动开发 数据挖掘 开发者
服务器发送事件(SSE)在现代Web开发中的关键作用
服务器发送事件(SSE)是HTML5标准协议,用于服务器主动向客户端推送实时数据,适合单向通信场景。相比WebSocket,SSE更简洁高效,基于HTTP协议,具备自动重连、事件驱动等特性。常见应用场景包括实时通知、新闻推送、数据分析等。通过Apipost等工具可轻松调试SSE,助力开发者构建高效实时Web应用。示例中,电商平台利用SSE实现秒杀活动通知,显著减少延迟并简化架构。掌握SSE技术,能大幅提升用户体验与开发效率。