3 个版本 (破坏性)
0.3.0 | 2022 年 11 月 13 日 |
---|---|
0.2.0 | 2022 年 11 月 10 日 |
0.1.0 | 2021 年 4 月 17 日 |
在 #分布式系统 中排名第 5
30KB
557 行(不包括注释)
集群模式
在 Rust 中创建和管理分布式应用程序。
秉承口号 - 插入 crate,它会自动处理。
用法
#[tokio::main]
async fn main() {
let result = KubernetesDiscoverService::init("demo".to_string(), "default".to_string())
.await;
if let Ok(k8s) = result {
let cluster = Arc::new(Cluster::default());
let client = DiscoveryClient::new(k8s);
tokio::spawn(start_cluster(cluster, client));
}
}
Cluster
结构体提供了一组函数,例如 async fn primaries(&self) -> Option<HashSet<RestClusterNode>>
或 async fn is_active(&self) -> bool
与集群通信。
查看 doc.rs
集群模式是如何工作的
cluster-mode
处理三个任务 -
- 发现
- 共识
- 集群
发现
它使用 rust-cloud-discovery crate 来处理发现服务。给定该 crate 的有效实现,集群模式应该能够处理新节点的添加或现有或不可达节点的终止。
查看 rust-cloud-discovery 以获取可用的实现。
共识
分布式系统的主要障碍是共识。为此,我们使用 almost-raft;该 crate 仅处理领导选举,一旦发现服务发现足够的信息。
请注意,cluster-mode
仅支持单个主节点,这是由 almost-raft
强加的限制。此外,它不处理日志一致性;如何维护一致性取决于开发者。
希望未来能添加这些功能。
集群
cluster-mode
初始化集群为 Inactive
状态。然后与发现服务和共识算法协同工作,选举主节点和副节点。该 crate 尝试维护一组一致的副节点并提供一组 API,使开发者能够与集群协同工作。
依赖项
~70MB
~1M SLoC