Skip to content

链路追踪

hueng edited this page Apr 29, 2020 · 3 revisions

背景

流量录制不仅要录制接口inbound请求流量,还要录制下游outbound请求流量,那如何将inbound请求和outbound请求关联起来呢?

  • 串行录制:利用时间分割来关联请求,一次只能录制一个inbound请求流量,录制流量覆盖率低。【不推荐,之前月光宝盒方案】

  • 并发录制:利用分布式追踪原理,用唯一的traceID将请求关联起来。【推荐,sharingan采用的方案】

常见的分布式追踪方案,需要修改业务代码实现traceID透传,不容易全面覆盖,对于我们需要回放的场景,少追踪一个流量都不行。

方案

对于http服务,每个请求会单独开一个goroutine处理,对于大部分的场景都是在一个goroutine完成。如下图:

可以使用goroutineID来关联inbound和outbound请求,对于大部分场景都适用。

对于少数并发等不在一个goroutine处理的请求,就需要使用下面要讲的工作委托技术。

trace

工作委托

  • 在goroutine结构体里面增加一个delegatedFromGoid属性,标识从哪个goroutine委托过来的。

trace_1

  • 对外暴露GET/SET方法,方法我们设置或者获取委托ID。

trace_2

  • 使用示例:(需要少量业务代码改动)

trace_3

Clone this wiki locally