1 个不稳定版本
0.1.0 | 2020年9月3日 |
---|
#1694 in 数据结构
8KB
123 行
纳威
从一致性哈希算法出发思考分布式系统的构建。
纳威 的愿景是成为构建稳健且高可用分布式系统的基础。可能的最终产品是一系列重要的算法或某种意义上的框架。
当然,您已经可以在项目中使用它了,目前仅是 rust-hash-ring 的移植版。
功能
- 移植 rust-hash-ring,使用 xxhash 替代 md5。
用法
-
哈希环
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
赞助
如果我的工作能让您感到开心,您可以考虑给我买一杯咖啡
- Paypal: https://paypal.me/psiace
- 爱发电: https://afdian.net/@psiace [爱发电 - 国内]
许可证
许可协议为以下之一
- Apache License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖
~145KB