3个版本
0.1.2 | 2022年5月17日 |
---|---|
0.1.1 | 2022年5月17日 |
0.1.0 | 2022年5月17日 |
#642 在 调试
用于 xal
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