分布式追踪系统中的采样策略与实践
1. 追踪成本与采样必要性
在分布式系统的追踪过程中,若捕获、存储和索引每个请求的所有跨度(span),追踪成本可能会超过运行应用程序本身的成本。因此,追踪解决方案必须以某种方式减少遥测数据量。其中,最广泛使用且有效的方法是通过采样来收集和处理部分跨度。因为几乎所有重要的应用程序行为都会在多个请求中体现,所以只要追踪解决方案能捕获每种有趣行为的至少一个示例,用户就可以利用这些示例来查找和解决错误及性能问题。
1.1 采样的最低要求
确定如何对跨度进行采样时,首要考虑的是确保追踪解决方案构建完整的跟踪。若追踪器选择捕获某个请求,就必须收集该请求的每个跨度,否则用户将和开始时一样充满疑问。
例如,在一个不完整的跟踪示例中,有三个跨度分别标记为 A(跟踪的根)、C(缺少父跨度 B)和 E(缺少父跨度 D)。用户可能会推断延迟是由 C 或 E 导致的,但图中显示有多种可能导致 C 和 E 被调用。它们最近的共同祖先可能是 A、B 或 D,每种可能性可能会让用户采取不同的行动来理解缓慢的原因。此外,C 或 E 的子跨度未出现在跟踪中,这些子跨度可能描述了延迟的最终原因。
在分布式系统中进行一致的采样很困难,因为这需要协调。要么进行全局采样决策,要么与每个服务关联的追踪器组件必须通过共享请求的某些信息达成相同的采样决策。而且,由于必须对应用程序处理的每个请求都执行此操作,所以必须以极其高效的方式进行。
由于在数据中心之间通过网络发送跨度的成本很高,采样决策必须在应用程序内或非常接近应用程序的地方做出,至少要在跨度离开数据中心或 VPC 之前做出。这对于跨区域甚至跨云提供商的应用程序来说是一个特别
超级会员免费看
订阅专栏 解锁全文
37

被折叠的 条评论
为什么被折叠?



