#集群 #kubernetes #分布式系统

集群模式

在 Rust 中创建和管理集群的一些帮助

3 个版本 (破坏性)

0.3.0 2022 年 11 月 13 日
0.2.0 2022 年 11 月 10 日
0.1.0 2021 年 4 月 17 日

#分布式系统 中排名第 5

MIT 许可证

30KB
557 行(不包括注释)

Build Crates.io MIT licensed

集群模式

在 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