
Opentracing:ChildOf与FollowsFrom的应用场景详解
Opentracing中的ChildOf和FollowsFrom常被误用,本文将阐明两者间的关键差异,并指导您在实际应用中做出正确选择。
核心区别:上下文继承
官方文档指出,ChildOf表示父子Span间的直接继承关系,子Span继承父Span的上下文信息;而FollowsFrom则表示Span间的逻辑关联,子Span不继承父Span的上下文。
场景示例:
假设存在一个数据库查询Span(父Span)和一个处理查询结果的Span(子Span)。
-
使用
ChildOf的场景: 如果处理结果的Span需要使用数据库查询Span的上下文信息(例如,查询ID),则应该使用ChildOf。这样,子Span就能直接访问父Span的上下文。 -
使用
FollowsFrom的场景: 如果处理结果的Span仅依赖于数据库查询Span的完成,而不需要访问其上下文信息,则使用FollowsFrom。这表示两者存在因果关系,但子Span不依赖父Span的具体数据。
对比分析:
| 特性 | ChildOf | FollowsFrom |
|---|---|---|
| 上下文继承 | 是 | 否 |
| 关系类型 | 直接父子关系 | 逻辑关联 |
| 上下文依赖 | 子Span依赖父Span上下文 | 子Span不依赖父Span上下文 |
| 应用场景举例 | 数据库查询及结果处理(需要上下文) | 异步任务依赖(无需上下文) |
选择ChildOf还是FollowsFrom取决于子Span是否需要访问父Span的上下文信息。如果需要,则使用ChildOf;否则,使用FollowsFrom,以避免不必要的上下文传递,提高系统效率。 正确的选择能够清晰地展现应用的调用链路,并简化分布式追踪的分析。










