4个版本 (2个破坏性更新)
0.3.0 | 2024年7月12日 |
---|---|
0.2.0 | 2024年5月10日 |
0.1.1 | 2024年4月18日 |
0.1.0 | 2024年2月28日 |
在算法类别中排名1788
每月下载量2,834次
在7个crate中使用(通过pingora-load-balancing)
44KB
303 行
pingora-ketama
nginx一致性哈希算法的Rust版
此crate提供了一致性哈希算法,其行为与nginx一致性哈希相同。
当需要最小化节点添加或删除时需要重新哈希到不同节点上的请求数量时,使用此类一致性哈希策略非常有用。
以下是一个简单示例,说明如何使用它
use pingora_ketama::{Bucket, Continuum};
fn main() {
// Set up a continuum with a few nodes of various weight.
let mut buckets = vec![];
buckets.push(Bucket::new("127.0.0.1:12345".parse().unwrap(), 1));
buckets.push(Bucket::new("127.0.0.2:12345".parse().unwrap(), 2));
buckets.push(Bucket::new("127.0.0.3:12345".parse().unwrap(), 3));
let ring = Continuum::new(&buckets);
// Let's see what the result is for a few keys:
for key in &["some_key", "another_key", "last_key"] {
let node = ring.node(key.as_bytes()).unwrap();
println!("{}: {}:{}", key, node.ip(), node.port());
}
}
# Output:
some_key: 127.0.0.3:12345
another_key: 127.0.0.3:12345
last_key: 127.0.0.2:12345
我们在pingora-ketama/examples/health_aware_selector.rs
中提供了一个健康感知的示例。
有关精心制作的实际示例,请参阅pingora-load-balancing
crate。
依赖项
~78KB