分布式系统链路追踪技术

在软件开发过程中,服务间调用是在软件分层概念之后,必然存在的数据交互机制,尤其是现代软件对高可用的强要求,软件部署必然走向分布式微服务架构。服务间调用就变得非常繁杂,就像一张蜘蛛网一样,在这种情况下,就需要我们能够准确、高效的自上而下串联出一次请求的完整链路,从而进一步分析系统性能以及在发生系统故障时,快速定位和解决问题。链路追踪最早是由Goggle公开发布的一篇论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》被大家广泛熟悉。

1. 定义

分布式链路追踪就是将一次分布式请求还原成调用链路并集中展示,比如各个服务节点上的耗时、哪台机器、每个服务节点的请求状态等。

2. 功能

链路跟踪主要功能:
故障快速定位:可以通过调用链结合业务日志快速定位错误信息。
链路可视化:各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来。
链路分析:通过分析链路耗时、服务依赖关系可以得到用户的行为路径,汇总分析应用在业务场景。

3. 原理

图 1

Trace

含义比较直观,就是链路,指一个请求经过所有服务的路径。例如

chrome -> 服务A -> 服务B -> 服务C -> 服务D -> 服务E -> 服务C -> 服务A -> chrome

Span

在图【1】中可以看出来请求经过了服务A,同时服务A又调用了服务B和服务C,但是先调的服务B还是服务C呢?从图中很难看出来,只有通过查看源码才知道顺序。为了表达这种父子关系引入了Span的概念。

图 2

同一层级parent id相同,span id不同,span id从小到大表示请求的顺序,从图【2】中可以很明显看出服务A是先调了服务B然后再调用了C。

Sampling

由于每一个请求都会生成一个链路,为了减少性能消耗,避免存储资源的浪费,dapper并不会上报所有的span数据,而是使用采样的方式。举个例子,每秒有1000个请求访问系统,如果设置采样率为1/1000,那么只会上报一个请求到存储端。通过采集端自适应地调整采样率,控制span上报的数量,可以在发现性能瓶颈的同时,有效减少性能损耗。一般由sampler.type和sampler.param
控制。

const
采样器始终对所有traces做出相同的决定,要么采样所有跟踪(sampler.param=1),要么都不采样(sampler.param=0)。
probabilistic
采样器做出随机采样决策,采样概率等于sampler.param属性的值。例如,在sampler.param=0.1的情况下,将在10条迹线中大约采样1条。
ratelimiting
采样器使用漏斗速率限制器来确保以一定的恒定速率对轨迹进行采样。例如,当sampler.param=2.0时,它将以每秒2条迹线的速率对请求进行采样。
remote
采样器会向Jaeger代理咨询有关在当前服务中使用的适当采样策略。

Storage

In this deployment the collectors receive the data from traced applications and write it directly to storage. The storage must be able to handle both average and peak traffic. Collectors use an in-memory queue to smooth short-term traffic peaks, but a sustained traffic spike may result in dropped data if the storage is not able to keep up.
收集器把数据写入存储,在这个过程中间要流量峰值,一般会使用基于内存的队列去平滑处理短时间的流量峰值,但是如果存储跟不上,那就有可能丢失数据

以jaeger为例,如图【3】所示。

图 3

2. 方案对比

可参考文章,不做赘述
https://developer.aliyun.com/article/1143845

3. 参考文档

分布式链路追踪原理
https://developer.aliyun.com/article/1143845
jaeger tracing document

注:如有侵权,烦请联系删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值