3个版本

0.1.2 2022年5月17日
0.1.1 2022年5月17日
0.1.0 2022年5月17日

#642调试


用于 xal

MIT 许可证

18KB
335 代码行

Rust的关联向量

关联向量-Rust为通过分布式系统跟踪和关联事件提供了关联向量协议的Rust实现。

关联向量

背景

关联向量(又称cV)是一个基于轻量级向量时钟的格式和协议标准,用于通过分布式系统跟踪和关联事件。该标准在微软内部被广泛用于第一方应用程序和服务,并支持多个日志库和平台(服务、客户端 - 原生、托管、Js、iOS、Android等)。该标准支持各种不同的数据处理需求,从分布式跟踪和调试到系统和商业智能,在各个商业组织中。

有关关联向量规范及其支持的场景的更多信息,请参阅规范仓库

功能

种子

生成一个新的关联向量。

CorrelationVector::new();

扩展

这将在向量时钟中添加一个新的计数器。

let mut cv = CorrelationVector::new();
cv.extend();

增量

这增加向量时钟中最新计数器的值。

let mut cv = CorrelationVector::new();
cv.increment();

自旋

这是关联向量中最复杂的函数。自旋更改关联向量,使得结果应该是唯一的且单调递增的,而不需要锁定/原子操作。当父跨度无法原子地增加每个子跨度的时间向量时钟时使用。

let mut cv = CorrelationVector::new();
cv.spin();

说明和示例

关联向量包含一个base64编码的uuid和一个向量时钟。uuid用于识别向量时钟,而向量时钟用于跟踪事件的序列。

sequenceDiagram
    participant A as Service A
    participant B as Service B
    participant C as Service C

    A -> A: A generates a correlation vector seed e.g. c3xEQzjqRlmr7zcQx9sBiQ.0
    A ->> B: A sends the message to B
    B -> B: B extends the correlation vector seed with a new event e.g. c3xEQzjqRlmr7zcQx9sBiQ.0.1
    B ->> C: B sends first message to C
    B -> B: B increments the cV when calling C again e.g. c3xEQzjqRlmr7zcQx9sBiQ.0.2
    B ->> C: B sends second message to C

这使我们能够跟踪复杂分布式系统中事件的序列。

免责声明

我在微软工作并使用关联向量,但与关联向量团队无关。此仓库不应被视为关联向量规范的参考实现。

依赖关系

~1–1.5MB
~31K SLoC