Universal context propagation for distributed system instrumentation

如题目所说,解决分布式系统中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.