分布式追踪:开销、成本与采样策略解析
1. 分布式追踪概述
在分布式系统中,对服务进行适当的检测是分布式追踪的第一步。这一过程会产生大量数据,远超开发者能够处理的范围。因此,需要有工具来筛选这些数据,以找到理解和改进应用程序性能所需的洞察。
多数追踪解决方案包含以下组件:
- SDK :让应用开发者创建和注释跨度(spans)。
- 代理(Agent) :部分解决方案会有代理,以边车进程形式或在同一主机上靠近应用服务运行。
- 收集器(Collectors) :启动聚合过程。
- 中央服务 :对跨度进行分析和存储。
2. 应用程序开销
2.1 延迟(Latency)
延迟指处理请求所需的时间,对应用程序所有者至关重要。收集构建追踪所需的数据也可能增加延迟。创建和完成跨度、添加标签和日志等操作都会产生延迟。
以下是一些具体操作及其可能产生的延迟:
- 创建跨度 :可能需要分配新对象、添加操作名称引用、读取性能计时器值,还可能更新线程本地状态。
- 记录事件 :可能需要将数据结构序列化为可通过网络发送的通用格式,通常是JSON,这需要额外的分配和时间来转换数据。
- 完成跨度 :可能需要读取性能计时器值、更新对象字段并将对象存储到共享缓冲区。
为减少序列化成本,可以将