-
Notifications
You must be signed in to change notification settings - Fork 338
链路追踪
hueng edited this page Apr 29, 2020
·
3 revisions
流量录制不仅要录制接口inbound请求流量,还要录制下游outbound请求流量,那如何将inbound请求和outbound请求关联起来呢?
-
串行录制:利用时间分割来关联请求,一次只能录制一个inbound请求流量,录制流量覆盖率低。【不推荐,之前月光宝盒方案】
-
并发录制:利用分布式追踪原理,用唯一的traceID将请求关联起来。【推荐,sharingan采用的方案】
常见的分布式追踪方案,需要修改业务代码实现traceID透传,不容易全面覆盖,对于我们需要回放的场景,少追踪一个流量都不行。
对于http服务,每个请求会单独开一个goroutine处理,对于大部分的场景都是在一个goroutine完成。如下图:
可以使用goroutineID来关联inbound和outbound请求,对于大部分场景都适用。
对于少数并发等不在一个goroutine处理的请求,就需要使用下面要讲的工作委托
技术。
- 在goroutine结构体里面增加一个delegatedFromGoid属性,标识从哪个goroutine委托过来的。
- 对外暴露GET/SET方法,方法我们设置或者获取委托ID。
- 使用示例:(需要少量业务代码改动)