A rust library that implements load balancing algorithms.
- round robin
- weighted round robin(like nginx)
- random
- consistent hashing
cargo add rsbalancer
use rsbalancer::Node;
fn main() {
let mut balancer = rsbalancer::weighted_round_robin(vec![
Node::new("ip1", 1), // ip、weight
Node::new("ip2", 1),
Node::new("ip3", 2),
]);
for _ in 0..10 {
println!("{}", balancer.next_id().unwrap());
}
}
use rsbalancer::Node;
fn main() {
// number of virtual nodes = node.weight * replicas
let balancer = rsbalancer::consistent_hashing(
vec![
Node::new("ip1".to_string(), 1), // ip、weight
Node::new("ip2".to_string(), 1),
Node::new("ip3".to_string(), 1),
],
160, //replicas
);
for random_ip in 0..10 {
println!(
"{} == {}",
balancer
.get_matching_node_id(&random_ip.to_string())
.unwrap(),
balancer
.get_matching_node(&random_ip.to_string())
.unwrap()
.get_id()
);
}
}