分布式追踪中的上下文传播与工具应用
上下文传播的重要性与挑战
上下文传播能被多个工具共享十分重要,因为添加上下文传播的插桩工作十分繁重。所有的跨领域工具都需要插桩来随请求传播上下文,而且无论部署何种跨领域工具,这种插桩都是相同的。若插桩能够复用,那么系统只需插桩一次,而非每次部署新工具时都进行插桩。
分布式追踪中的行李概念及其局限
分布式追踪中已有行李(baggage)的概念,它是一系列键值对。任何组件都能向请求的行李中添加新的键值对,后续组件也能从中查询值,这已经催生了一些有趣的用例,例如在 Jaeger 留言板上有关于安全审计、流量标记和测试用例的讨论。
然而,当出现多父因果关系时,这种简单的键值对定义就显得力不从心。多父因果关系主要通过两种方式出现:
- 多个父跨度(Multiple parent spans) :当某个执行跨度在因果关系上依赖于多个父跨度或兄弟跨度完成时,就需要将来自父跨度或兄弟跨度的上下文传递给新的跨度,并将它们合并。
- 响应传播(Response propagation) :并非所有分布式追踪实现都需要或使用响应传播,但很多实现会用到。一般来说,跨领域工具可能会修改其上下文,并将修改后的上下文传回父级。此时,父级需要将响应上下文与原始上下文合并。由于父级在这期间可能也在继续工作并修改了自身的上下文,所以合并操作是必要的。
简单来说,需要能够将两个上下文合并为一个。合并操作在请求的两个并发分支汇合的任何地方都会发生,它是并发程序的基础,而分布式架构本质上就是并发的。
以分布式追踪中使用的键值行李
超级会员免费看
订阅专栏 解锁全文
6万+

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



