5 个版本

0.1.202 2020 年 5 月 26 日
0.1.201 2020 年 5 月 26 日
0.1.20 2020 年 5 月 25 日
0.1.1 2020 年 5 月 25 日
0.1.0 2020 年 5 月 25 日

#517 in 并发

MIT/Apache

160KB
3K SLoC

License Rust 1.36+ Cargo Cargo

TCB

Rust 中的标记因果关系广播中间件服务。

提供基于图和版本向量方法的中间件,可以按因果关系顺序交付消息。此中间件仅在完全网格拓扑结构中工作,其中对等方在连接之前已经知道彼此的地址和监听端口。

此服务确保按因果关系顺序交付消息,并允许跟踪消息的因果关系稳定性。

目前,只有基于线程的实现。对于组中的每个对等方,中间件创建一对读取器/发送线程。这对的原因是中间件不需要知道建立连接的顺序。

除了中间件服务外,还创建了一个因果关系检查器,在广播结束时验证消息是否在每个对等方上正确标记为已交付和稳定。为此,必须将每个对等方的点序列传递给检查器,这是一个支持检查图形和 VV 方法因果关系的回溯算法。

因果关系交付

有许多一致性模型,每个模型都定义了系统在特定情况下的行为方式。此 crate 专注于因果关系一致性。此模型旨在捕获系统中事件的因果关系,其中进程只观察到同一因果关系顺序中因果相关的事件。也就是说,系统中每个节点都同意相关事件的因果关系顺序。

还有比顺序一致性更强的模型,但对于此模型,要求所有事件在每个进程都以相同的总顺序出现,但与此隐含的权衡是:为了获得更强的一致性保证而牺牲了系统的可用性。因此,尽管它较弱,但在网络分区和故障发生时,因果关系一致性是实现高可用性和高响应性的最佳选择。

因果关系稳定性

假设一个带有因果关系时间戳 t 的标记消息 m 在进程 p1 上交付。当所有随后在 p1 上交付的消息都有一个因果关系时间戳 t’ 时,此消息 m 将被视为因果关系稳定

t' > t

这意味着当没有与 m 同时交付的消息将在 m 之后交付给 p1 时,m 被认为是因果关系稳定的。

因果关系稳定性的概念可用于垃圾收集或消息重传。但是,这是一个中间件配置参数,可以将其关闭,因为计算稳定性会在消息交付上添加一些延迟。

用法

首先将其添加到您的 Cargo.toml

[dependencies]
tcb = "0.1.202"

在创建中间件实例之前,每个对等点必须具备以下条件

  • 一个全局唯一标识符
  • 一个连接到的地址和端口号列表
  • 一个监听连接的端口号
  • 中间件配置文件

中间件配置文件使用TOML格式,组中的对等点必须有一个唯一的标识符,该标识符以整数形式表示,从0开始,每个对等点递增。此外,在通过TCP网络发送之前,必须对消息进行序列化。

添加了TCB特质,以简化创建使用中间件的通用代码,无论实现如何。因此,它必须与middleware_configuration以及GRAPH/VV模块一起导入。

示例

对等点、配置文件和因果关系检查器的示例可以在这里找到。

许可证

根据您的选择,许可如下

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您提交给作品作为有意包含在内的任何贡献,将根据上述内容双许可,不附加任何其他条款或条件。

依赖项

~4MB
~71K SLoC