Documentation ¶
Overview ¶
Package weighted implements two weighted round robin algorithms. One is the smooth weighted round-robin balancing algorithm used in Nginx, and you can use "w := new W1{}" to use it. The other is wrr used in LVS and you can use "w := new W2{}" to use it.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type W ¶
type W interface { Next() interface{} Add(server interface{}, weight int) RemoveAll() Reset() }
W is a interface that implement a weighted round robin algorithm.
type W1 ¶
type W1 struct {
// contains filtered or unexported fields
}
W1 is struct that contains weighted servers and provides methods to select a weighted server. It is used for the smooth weighted round-robin balancing algorithm. This algorithm is implemented in Nginx: https://github.com/phusion/nginx/commit/27e94984486058d73157038f7950a0a36ecc6e35.
Algorithm is as follows: on each peer selection we increase current_weight of each eligible peer by its weight, select peer with greatest current_weight and reduce its current_weight by total number of weight points distributed among peers.
In case of { 5, 1, 1 } weights this gives the following sequence of current_weight's: (a, a, b, a, c, a, a)
func (*W1) Next ¶
func (w *W1) Next() interface{}
Next returns next selected server.
Example ¶
w := &W1{} w.Add("a", 5) w.Add("b", 2) w.Add("c", 3) for i := 0; i < 10; i++ { fmt.Printf("%s ", w.Next()) }
Output: a c b a a c a b c a
func (*W1) NextWeighted ¶
NextWeighted returns next selected weighted object.
type W2 ¶
type W2 struct {
// contains filtered or unexported fields
}
W2 is struct that contains weighted servers implement LVS weighted round robin algorithm.
http://kb.linuxvirtualserver.org/wiki/Weighted_Round-Robin_Scheduling http://zh.linuxvirtualserver.org/node/37