失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 全链路追踪之OpenTracing

全链路追踪之OpenTracing

时间:2024-04-10 18:25:35

相关推荐

全链路追踪之OpenTracing

链路追踪

现在的大多数互联网服务,基本都是用复杂,大规模分布式集群来实现,微服务化,这些服务模块分布在不同的机器,不同的数据中心,由不同团队,语言开发而成。因此,需要工具帮助理解,分析这些系统、定位问题,做到追踪每一个请求的完整调用链路,收集性能数据,反馈到服务治理中,链路追踪系统应运而生。

OpenTracing 协议

OpenTracing是分布式跟踪系统,当我们把系统拆成服务化,分布式系统的时候,查询一个问题,很可能需要多个登录多台机器。

OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。OpenTracing正在为全球的分布式追踪,提供统一的概念和数据标准。

Trace

OpenTracing中的Trace(调用链)通过归属于此调用链的Span来隐性的定义。一条Trace(调用链)可以被认为是一个由多个Span组成的有向无环图(DAG图),

Span

Span可以被翻译为跨度,可以被理解为一次方法调用, 一个程序块的调用, 或者一次RPC/数据库访问只要是一个具有完整时间周期的程序访问,都可以被认为是一个spanSpanSpan的关系被命名为References

以下是由8Span组成的Trace

单个Trace中,span间的因果关系[Span A] ←←←(the root span)|+------+------+| |[Span B][Span C] ←←←(Span C 是 Span A 的孩子节点, ChildOf)| |[Span D]+---+-------+| |[Span E] [Span F] >>> [Span G] >>> [Span H]↑↑↑(Span G 在 Span F 后被调用, FollowsFrom)

基于时间轴的时序图

单个Trace中,span间的时间关系––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–> time[Span A···················································][Span B··············································][Span D··········································][Span C········································][Span E·······] [Span F··] [Span G··] [Span H··]

span 的结构

Span

An operation name,操作名称A start timestamp,起始时间A finish timestamp,结束时间Span Tag,一组键值对构成的Span标签集合。键值对中,键必须为string,值可以是字符串,布尔,或者数字类型。Span Log,一组span的日志集合。 每次log操作包含一个键值对,以及一个时间戳。键值对中,键必须为string,值可以是任意类型。不是所有的支持OpenTracingTracer,都需要支持所有的值类型。SpanContextSpan上下文对象References(Span间关系),相关的零个或者多个SpanSpan间通过SpanContext建立这种关系)

SpanContext

任何一个OpenTracing的实现,都需要将当前调用链的状态(例如:tracespanId),依赖一个独特的Span去跨进程边界传输Baggage ItemsTrace的随行数据,是一个键值对集合,它存在于trace中,也需要跨进程边界传输

span 的关系

一个Span可以与一个或者多个SpanContexts存在因果关系。OpenTracing目前定义了两种关系,这两种关系明确的给出了两个父子关系的Span的因果模型。

ChildOf(父子),FollowsFrom(跟随)。

ChildOf

一个span可能是一个父级span的孩子,即ChildOf关系。在ChildOf引用关系下,父级span某种程度上取决于子span。下面这些情况会构成ChildOf关系:

一个RPC调用的服务端的span,和RPC服务客户端的span构成ChildOf关系一个数据库insert操作的span,和ORMsave方法的span构成ChildOf关系很多span可以并行工作(或者分布式工作)都可能是一个父级的span的子项,他会合并所有子span的执行结果,并在指定期限内返回

ChildOf关系的父子节点关系的时序图。

[-Parent Span---------][-Child Span----][-Parent Span--------------][-Child Span A----][-Child Span B----][-Child Span C----][-Child Span D---------------][-Child Span E----]

FollowsFrom

一些父级节点不以任何方式依赖他们子节点的执行结果,这种情况下,我们说这些子span和父span之间是FollowsFrom的因果关系。FollowsFrom关系可以被分为很多不同的子类型.

FollowFrom关系的父子节点关系的时序图。

[-Parent Span-] [-Child Span-][-Parent Span--][-Child Span-][-Parent Span-][-Child Span-]

如果觉得《全链路追踪之OpenTracing》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。