分布式追踪中的上下文传播与工具概述
1. 上下文传播的重要性与挑战
上下文传播能被多个工具共享十分重要,因为添加上下文传播的仪表化工作成本很高。所有横切工具都需要仪表化来随请求传播上下文,而且无论部署哪种横切工具,这种仪表化都是相同的。若仪表化能被复用,那么系统只需进行一次仪表化,而非每次部署新工具都要操作。
2. 分布式追踪中的行李(Baggage)问题
分布式追踪中已有行李的概念,它是一组键值对。任何组件都能向请求的行李中添加新的键值对,后续组件也能从中查询值,这已实现了一些有趣的用例,如安全审计、流量标记和测试等。
然而,当出现多父因果关系时,这种简单的键值对定义就会失效。多父因果关系主要有两种情况:
- 多个父跨度(Multiple parent spans) :某个执行跨度因果依赖于多个父跨度或兄弟跨度完成。此时,需要将两个父跨度或兄弟跨度的上下文传递给新跨度,并进行合并。
- 响应传播(Response propagation) :并非所有分布式追踪实现都需要或使用响应传播,但很多会用到。一般来说,横切工具可能会修改其上下文,并将修改后的上下文传回父级。这时,父级需要将响应上下文与原始上下文合并,且父级可能在此期间也修改了自身上下文。
简单来说,需要能够将两个上下文合并为一个。合并发生在请求的两个并发分支汇合处,这对于并发程序至关重要,而分布式架构本质上就是并发的。
回到分布式追踪中使用的键值行李,假设服务 B 插入了 priority:low ,服务 C 插入了 p
超级会员免费看
订阅专栏 解锁全文
6万+

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



