作者:李爽,腾讯应用性能观测产品经理
为什么需要采样
随着越来越多的企业步入数字化转型,IT 系统也逐步向分布式、微服务化发展。面对海量和请求和服务间复杂的依赖关系,链路追踪系统通过收集、汇聚、串联、分析请求链路,为我们提供了端到端的业务实时监控能力。
但当业务量级不断增长,链路数据也会随之增多,或早或晚,我们终将面临一个决策:是否还要全量采集调用链?
一方面,全量采集可以让我们不错过任何一个系统异常,并且每一个异常的发生,我们都可以通过完整的请求链路,快速定位根因;另一方面,我们无法否认全量采集会给每个业务实例的网络 I/O 以及链路处理的计算和存储层带来压力。
采样是目前解决这类问题最快速且主流的方式。
但是具体以什么样的采样策略?如何在可控的资源开销内,保证最大概率保留事故相关链路,支持高效的故障排查和性能监控?我们将在下文中重点探讨。
采样的原理有哪些
如上文讨论的,采样是大多数链路追踪系统必须要讨论的命题,它已经是主流调用链追踪系统的必备组成部分。采样的算法和策略学术界有很多相关的研究,但我们基本可以按照采样实施的时机,将他们分成如下三类:
-
头部采样:Head-based sampling
-
尾部采样:Tail-based sampling
-
单元采样:Unitary sampling
它们的示意图如下所示: