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 SW{}" to use it. The other is wrr used in LVS and you can use "w := new RRW{}" to use it.
For Nginx smooth weighted round-robin balancing algorithm, you can check https://github.com/phusion/nginx/commit/27e94984486058d73157038f7950a0a36ecc6e35. For LVS round-robin balancing algorithm, you can check http://kb.linuxvirtualitem.org/wiki/Weighted_Round-Robin_Scheduling.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type RRW ¶
type RRW struct {
// contains filtered or unexported fields
}
RRW is a struct that contains weighted items implement LVS weighted round robin algorithm.
http://kb.linuxvirtualitem.org/wiki/Weighted_Round-Robin_Scheduling http://zh.linuxvirtualitem.org/node/37
type RandW ¶
type RandW struct {
// contains filtered or unexported fields
}
RandW is a struct that contains weighted items implement weighted random algorithm.
type SW ¶
type SW struct {
// contains filtered or unexported fields
}
SW (Smooth Weighted) is a struct that contains weighted items and provides methods to select a weighted item. 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)
type W ¶
type W interface { // Next gets next selected item. // Next is not goroutine-safe. You MUST use the snchronization primitive to protect it in concurrent cases. Next() (item interface{}) // Add adds a weighted item for selection. Add(item interface{}, weight int) // All returns all items. All() map[interface{}]int // RemoveAll removes all weighted items. RemoveAll() // Reset resets the balancing algorithm. Reset() }
W is a interface that implement a weighted round robin algorithm.