rsbalancer

Crates.iorsbalancer
lib.rsrsbalancer
version0.3.0
sourcesrc
created_at2023-06-29 04:00:58.846089
updated_at2023-08-15 14:16:53.184093
descriptionA rust library that implements load balancing algorithms.
homepagehttps://github.com/blabla-yy/rsbalancer
repositoryhttps://github.com/blabla-yy/rsbalancer
max_upload_size
id902937
size31,844
(blabla-yy)

documentation

README

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

Commit count: 30

cargo fmt