如题目所说,解决分布式系统中instrumentation的context propagation问题。
论文认为,分布式系统中的context propagation可以分成两个部分
- the instrumentation of the system components to propagate context
- 只和被插桩的系统和系统的并行性有关
- the tool logic itself - what the metadata is, such as IDs, tags, or
timings, and when it changes
- 取决于工具本身
论文提出了一种通用的底层格式,即袋式上下文(baggage context),这是一种交叉切割工具上下文的中间表示方法。 它使上面提到的系统工具的上下文传播与工具逻辑完全脱钩。
- 设计包袱式上下文,这是一个 "窄腰",将上下文的传播与跨领域的工具逻辑解耦。包袱式上下文很简单,但其表现力足以代表许多分布式数据类型,并保留其正确的合并语义。
- 提出了一个分层架构,将系统开发者和跨领域工具开发者的关注点分开,使系统的独立工具化,以及多个跨领域工具的部署和进化成为可能。
- 定义包袱定义语言(BDL),将嵌套的并发数据类型编译到包袱文本上,允许交叉工具开发者用简单的 "执行流范围内的变量 "来编程。
- 在Java和Go中实现跟踪平面栈。
- 通过实施几个跨领域工具并在多个现有的分布式系统上部署,展示了Tracing Plane的实用性和效率。
Background
这边感觉总结的不错。
和系统/系统并行性相关的
- 跨组件边界时的序列化/反序列化
- branch
- join
和工具逻辑有关的
- update
- query
Interfaces
Interface for System Instrumentation
系统开发者的主要关注点是对系统进行检测。他并不在乎工具怎么实现。
- BRANCH/JOIN
- SERIALIZE/DESERIALIZE
- TRIM:限制baggage的大小
Interface for Cross-Cutting Tools
工具开发者的主要关注点是指定工具使用的数据类型。BDL的目标是将baggage上下文中携带的数据的规范与数据如何编码的实现细节分开。
Baggage context design
在两套接口中间,是一个intermediate baggage context representation。 这个baggage context ir主要由两部分组成:
- 一个核心的baggage context representation,来提供了几个基本的属性
- data types到【包括nesting and multiplexing的core representation】的映射
Core Representation
core representation封装了前面提到的system instrumentation在propagate的时候的五个最小的操作。并不涉及任何cross-cutting tools的内容。
- Idempotent Merge:tenant ID或者trace ID这种write-once的contexts。所以需要在BRANCH和JOIN的位置处理。(这里怎么理解?)
- 懒惰解决:在合并的时候,如果说需要merge两个值,最后取最大最小值。因为core representation不负责理解baggage,所以这种留给用户自己做。
- 关联式合并:这边也没有很看懂
- Order-Preserving Merge:merge是保顺序的merge
Representing Data Types
为一系列不同的数据类型设计了编码,以保证在任意BRANCH和JOIN的情况下保持正确的语义。
Conflict-Free Replicated Data Types
在BRANCH和JOIN的过程中,借鉴现有的无冲突复制数据类型(CRDTs)的全面工作,这种复制的数据结构具有确定性的合并行为,并提供强大的最终一致性。
Layering Summary
图不错。
Implementation
zipkin为example的implementation
core representation
按照per-atom的字母顺序进行归并merge。
atom encoding
所有BDL数据类型共享的中间编码方案,它可以实现嵌套和寻址,并提供字段和工具的隔离和复用。
大概就是加一些头,来标识。同时有一些编码上的trick
Example / Complex Data Types / Overflow / Conflict-Free Replicated Data Types
discussion
pivot tracing里面虽然也有baggage,但是不是用来做decouple的。
Pivot Tracing [53] introduced a related, but more restricted concept of baggage as a generic set of key-value pairs that follows execution. Pivot Tracing does not decouple cross-cutting tools from instrumentation, and its baggage is not order preserving, a requirement for lexicographic merge.