#weight #weighted #balancing

weighted-rs

A libray for weighted balancing algorithm

4 releases

0.1.3 Aug 25, 2021
0.1.2 Sep 16, 2019
0.1.1 Sep 1, 2019
0.1.0 Aug 30, 2019

#527 in Algorithms

Download history 428/week @ 2023-10-20 240/week @ 2023-10-27 242/week @ 2023-11-03 343/week @ 2023-11-10 567/week @ 2023-11-17 493/week @ 2023-11-24 344/week @ 2023-12-01 315/week @ 2023-12-08 310/week @ 2023-12-15 74/week @ 2023-12-22 78/week @ 2023-12-29 290/week @ 2024-01-05 559/week @ 2024-01-12 421/week @ 2024-01-19 901/week @ 2024-01-26 600/week @ 2024-02-02

2,533 downloads per month
Used in 5 crates (4 directly)

MIT license

16KB
330 lines

weight-rs

Build Status Crate API

A Rust library for weighted balancing algorithm.

It provides three weighted balancing (elect) algorithm. One is random algorithm. Another is weighted balancing algorithm used by LVS. The third is smooth weighted balancing algorithm used by Nginx.

The LVS weighted round-robin scheduling is introduced at http://kb.linuxvirtualserver.org/wiki/Weighted_Round-Robin_Scheduling. The Nginx smooth weighted round-robin balancing algorithm is introduced at https://github.com/phusion/nginx/commit/27e94984486058d73157038f7950a0a36ecc6e35. The random algorithm is not smooth although it follows weight configuration.

Using it is simple:

    use weighted-rs::{SmoothWeight, Weight};
    use std::collections::HashMap;

    let mut sw: SmoothWeight<&str> = SmoothWeight::new();
    sw.add("server1", 5);
    sw.add("server2", 2);
    sw.add("server3", 3);

    for _ in 0..100 {
        let s = sw.next().unwrap();
        println!("{}", s);
    }

Usage

Add this to your Cargo.toml:

[dependencies]
weighted-rs = "0.1.1"

License

weighted-rs is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT, and COPYRIGHT for details.

Dependencies

~300KB