4个版本 (1个稳定版)
1.0.0 | 2022年7月30日 |
---|---|
0.1.2 | 2022年5月2日 |
0.1.1 | 2022年5月1日 |
0.1.0 | 2022年5月1日 |
#18 in #工具箱
49KB
998 行
rust_net
RustNet是一个响应式分布式系统工具箱,它提供了一个简单模块化的方法来构建你的分布式应用
特性
- 简洁且清晰的架构
- 对第三方库的依赖最少
- 松散耦合的组件
- 可扩展
安装
将以下内容添加到你的 cargo.toml 文件中
rust_net = "0.1.1"
组件
节点
- 通过几个可定制的Builder语句封装了rust_net的所有复杂性
- 添加自己的组件,无需担心与其他组件通信的实现细节
- 节点作为组件之间的中介,它接收外部调用并将它们转发到适当的组件
- 可以在接收到外部消息时注册用户定义的回调
PS:组件的添加顺序必须遵守,以便节点能正确工作,例如,每个可靠交付组件都需要一个故障检测器,这意味着顺序错误会导致节点在执行前崩溃。
故障检测器
- 假设同步,这意味着网络和进程的时序界限由
timeout
变量固定
交付
- 尽力交付
- 只有在发送者正确的情况下才保证可靠性
- 可靠交付
- 无论发送者是否正确都保证可靠性
- 确保所有或没有正确的节点收到消息
- 即使发送者在将消息交付给所有人之前崩溃,已经收到消息的所有正确节点也将扮演发送者的角色
- 需要故障检测器
- 示例:需要保证消息即使发送者在发送给一个正确节点后崩溃,也能到达所有正确的节点。
- 均匀可靠交付
- 保证可靠性和考虑失败节点的行为
- 可靠交付更快,但它不保证包括失败节点在内的所有节点都交付了消息
示例
- 创建一个具有故障检测器、仅当所有节点提交时才提交消息、最大5个对等节点并在收到均匀可靠交付消息时触发用户定义的回调的节点
let peers = vec![
String::from("172.17.0.2:8888"),
String::from("172.17.0.3:8888"),
String::from("172.17.0.4:8888"),
String::from("172.17.0.5:8888"),
]
let mut node = Node::new("MyNode".to_string(), 8888, 5);
node.has_faillure_detector(Duration::from_millis(5000), Duration::from_millis(5000))
.on_receive_message(
MessageType::UniformReliableDelivery,
Box::new(|msg| println!("FROM USER: Triggering my callback")),
)
.has_uniform_reliable_delivery();
node.start().join().expect("Failled Joining node handle");
- 如果故障检测器检测到崩溃,它将发布一个事件,相关组件将相应地作出反应,在均匀可靠广播的情况下,它将重新分发所有先前崩溃的节点消息以确保可靠性
运行示例,请在终端中输入以下命令
./Build.sh
./Run.sh
这将创建一个包含4个节点的网状网络,每个节点都在独立的Docker容器中运行
联系方式
电子邮件: [email protected]
依赖关系
约3-14MB
约134K SLoC