1 个不稳定版本

0.1.0 2020年9月3日

#1694 in 数据结构

MIT/Apache

8KB
123

纳威

Crates.io Docs MIT/APACHE-2.0 GitHub Workflow Status

从一致性哈希算法出发思考分布式系统的构建。

纳威 的愿景是成为构建稳健且高可用分布式系统的基础。可能的最终产品是一系列重要的算法或某种意义上的框架。

当然,您已经可以在项目中使用它了,目前仅是 rust-hash-ring 的移植版。

功能

用法

  • 哈希环

    extern crate nave;
    
    use nave::HashRing;
    
    /// Custom Node Info. 
    #[derive(Clone, Debug)]
    struct NodeInfo {
        pub host: &'static str,
        pub port: u16,
    }
    
    /// Impl ToString to format NodeInfo
    impl ToString for NodeInfo {
        fn to_string(&self) -> String {
            format!("{}:{}", self.host, self.port)
        }
    }
    
    fn main() {
        let mut nodes: Vec<NodeInfo> = Vec::new();
        nodes.push(NodeInfo { host: "localhost", port: 15324 });
        nodes.push(NodeInfo { host: "localhost", port: 15325 });
        nodes.push(NodeInfo { host: "localhost", port: 15326 });
        nodes.push(NodeInfo { host: "localhost", port: 15327 });
        nodes.push(NodeInfo { host: "localhost", port: 15328 });
        nodes.push(NodeInfo { host: "localhost", port: 15329 });
    
        let mut hash_ring: HashRing<NodeInfo> = HashRing::new(nodes, 10);
    
        println!("{}", hash_ring.get_node(("hello").to_string()).unwrap().to_string());
    
        println!("{}", hash_ring.get_node(("dude").to_string()).unwrap().to_string());
    
        println!("{}", hash_ring.get_node(("martian").to_string()).unwrap().to_string());
    
        println!("{}", hash_ring.get_node(("tardis").to_string()).unwrap().to_string());
    
        hash_ring.remove_node(&NodeInfo { host: "localhost", port: 15329 });
    
        println!("{}", hash_ring.get_node(("hello").to_string()).unwrap().to_string());
    
        hash_ring.add_node(&NodeInfo { host: "localhost", port: 15329 });
    
        println!("{}", hash_ring.get_node(("hello").to_string()).unwrap().to_string());
    }
    

联系方式

Chojan Shang - @PsiACE - [email protected]

项目链接: https://github.com/psiace/nave

赞助

如果我的工作能让您感到开心,您可以考虑给我买一杯咖啡

许可证

许可协议为以下之一

任选其一。

依赖

~145KB