分布式链路追踪
分布式链路追踪
随着分布式系统和微服务架构的出现,一次用户的请求会经过多个系统,不同服务之间的调用关系十分
复杂,任何一个系统出错都可能影响整个请求的处理结果。以往的监控系统往往只能知道单个系统的健
康状况、一次请求的成功失败,无法快速定位失败的根本原因。
Trace 的概念
一个trace代表了一个事务或者流程在(分布式)系统中的执行过程。实际的分布式系统中会包含很多的组件和内容。
这种展现方式增加显示了执行时间的上下文,相关服务间的层次关系,进程或者任务的串行或并行调用关系。这样的视图有助于发现系统调用的关键路径。通过关注关键路径的执行过程,项目团队可能专注于优化路径中的关键位置,最大幅度的提升系统性能。例如:可以通过追踪一个资源定位的调用情况,明确底层的调用情况,发现哪些操作有阻塞的情况
Trace:贯穿一个分布式系统的事务追踪描述,其实就是由许多个Span组成的有向无环图。
Span:被命名的与记录时间的调用操作,如一个Http GET请求;Span有嵌套关系,如果一个请求会调用其它服务,就会生成子Span。
Tag:一组由键值对构成的标签集合,键值类型必须为字符串。它可以带上许多有用信息,如请求方法、请求URL、返回状态码等。
Log:一组Span的日志集合。
Tracing 是在90年代就已出现的技术。但真正让该领域流行起来的还是源于 Google 的一篇论文"Dapper, a Large-Scale Distributed Systems Tracing Infrastructure",而另一篇论文"Uncertainty in Aggregate Estimates from Sampled Distributed Traces"中则包含关于采样的更详细分析。论文发表后一批优秀的 Tracing 软件孕育而生,比较流行的有:
- Dapper(Google) : 各 tracer 的基础
- StackDriver Trace (Google)
- Zipkin(twitter)
- Appdash(golang)
- 鹰眼(taobao)
- 谛听(盘古,阿里云云产品使用的Trace系统)
- 云图(蚂蚁Trace系统)
- sTrace(神马)
- X-ray(aws)
分布式追踪系统发展很快,种类繁多,但核心步骤一般有三个:代码埋点,数据存储、查询展示。
下图是一个分布式调用的例子,客户端发起请求,请求首先到达负载均衡器,接着经过认证服务,计费服务,然后请求资源,最后返回结果。
Dapper要解决的问题
- 分布式系统服务很多,很复杂
- 每个服务由不同的组开发,没有一个人能够理解所有的系统
- 每个服务由不同的语言开发
- 可能会涉及到上千台机器
- 需要一个服务去跟踪请求,理解整体系统的瓶颈和实时的表现,如果一个请求太慢,如何快速的找到问题所在。
- 设计目标
- 效率要高
- 对服务性能影响小
- 对应用透明,侵入性小
- 服务开发者不需要知道跟踪系统的存在
- 能够大规模部署
- 实时监控系统
- 数据收集到数据展示之间时间尽量少(最好少于1分钟)。快速调试线上问题
5这一问题在Tracing领域尤其凸显,Tracing的目的就是把系统中所有的模块和组件的交互通过Trace ID完全串联起来,如果某些组件Trace格式不统一,那这部分组件内部的调用记录就会断掉,Trace完全发挥不出价值。所以最开始的时候有了OpenTracing规范,OpenTracing定义了Trace的数据格式,各家公司可以基于这个标准去实现,基于不同实现的组件最终结合时可以完全兼容
1、统一SDK:OpenTelemetry为每个常见语言都实现了对应的SDK,未来我们的系统中只需要一个SDK就可以记录三种可观察性数据。
2、自动代码注入技术:OpenTelemetry也开始提供可以自动代码注入的实现,目前已经支持Java各类主流框架的自动注入。
3、厂商无关性:OpenTelemetry提供了Collector用于收集各个SDK发送的数据并支持对接到各种后端存储系统。
4、云原生:OpenTelemetry设计之初就已经考虑了云原生的特性,并且还提供了Kubernetes Operator用于快速部署使用
APM (Application Performance Management) 即应用性能管理系统,是对企业系统即时监控以实现
对应用程序性能管理和故障管理的系统化的解决方案。应用性能管理,主要指对企业的关键业务应用进
行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本。
APM系统是可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和
解决问题。
而 OpenTracing 就完美的解决了这个问题,OpenTracing 通过提供平台无关、厂商无关的 API,帮助开发人员能够方便地添加(或更换)追踪系统。
- 本文标签: 其他
- 本文链接: https://liuyangjob.cn/article/3
- 版权声明: 本文由熊猫大侠原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
热门推荐
-
浏览(513)
-
浏览(513)
-
浏览(467)
-
浏览(445)
-
浏览(440)
-
浏览(374)
-
浏览(346)
-
浏览(332)