#load-balancing #hashing #consistent #key-hash #evict #alogrithm

nightly consistent_hashing

ConsistentHashing Alogrithm in Rust

7 releases (4 breaking)

0.5.0 Aug 21, 2020
0.4.1 Aug 14, 2020
0.3.1 Aug 13, 2020
0.2.0 Aug 11, 2020
0.1.0 Aug 10, 2020

#29 in #key-hash

MIT license

11KB
232 lines

Consistent Hash

Consistent Hashing is a distributed system algorithm for assigning values to partitions in a highly dynamic environment.

Example:

Using the algorithm to LB redis cache. (Crate redis = "0.17.0").

While the key must implement the hash trait to define a hashing strategy.

The Value must implement the Evict trait to define rebalancing behavior.

let mut ring: ConsistentHash<String,redis::Client> = match ConsistentHash::new(100).unwrap();

ring.add_node("redis://my-redis-node-1".to_string(), redis::Client::open("redis://my-redis-node-1")?).unwrap();
ring.add_node("redis://my-redis-node-2".to_string(), redis::Client::open("redis://my-redis-node-2")?).unwrap();
ring.add_node("redis://my-redis-node-3".to_string(), redis::Client::open("redis://my-redis-node-3")?).unwrap();
ring.add_node("redis://my-redis-node-4".to_string(), redis::Client::open("redis://my-redis-node-4")?).unwrap();

let client = match ring.get_node(String::from("some-key")){
    Some(node) => node,
    None => panic!("Not found!"),
};

let mut con = client.get_connection()?;
con.get("some-key");

Dependencies

~1.4–2MB
~37K SLoC