#round-robin #load-balancing #consistent-hashing #algorithm #random #weighted #nginx

rsbalancer

A rust library that implements load balancing algorithms

3 releases (breaking)

0.3.0 Aug 15, 2023
0.2.0 Jul 4, 2023
0.1.0 Jun 29, 2023

#1575 in Algorithms

21 downloads per month

MIT license

31KB
821 lines

rsbalancer

A rust library that implements load balancing algorithms.

  • round robin
  • weighted round robin(like nginx)
  • random
  • consistent hashing

Installation

cargo add rsbalancer

Usage

Weighted round robin

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());
    }
}

Consistent hashing

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()
        );
    }
}

Dependencies

~310KB