weighted: github.com/smallnest/weighted Index | Examples | Files

package weighted

import "github.com/smallnest/weighted"

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

Package Files

weighted.go weighted1.go weighted2.go

type W Uses

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 Uses

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) Add Uses

func (w *W1) Add(server interface{}, weight int)

Add a weighted server.

func (*W1) Next Uses

func (w *W1) Next() interface{}

Next returns next selected server.

Code:

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 Uses

func (w *W1) NextWeighted() *Weighted1

NextWeighted returns next selected weighted object.

func (*W1) RemoveAll Uses

func (w *W1) RemoveAll()

RemoveAll removes all weighted servers.

func (*W1) Reset Uses

func (w *W1) Reset()

Reset resets all current weights.

type W2 Uses

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

func (*W2) Add Uses

func (w *W2) Add(server interface{}, weight int)

Add a weighted server.

func (*W2) Next Uses

func (w *W2) Next() interface{}

Next returns next selected server.

Code:

w := &W2{}
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 a a c a b c a b c

func (*W2) RemoveAll Uses

func (w *W2) RemoveAll()

RemoveAll removes all weighted servers.

func (*W2) Reset Uses

func (w *W2) Reset()

Reset resets all current weights.

type Weighted1 Uses

type Weighted1 struct {
    Server          interface{}
    Weight          int
    CurrentWeight   int
    EffectiveWeight int
}

Weighted1 is a wrapped server with weight

Package weighted is imported by 1 packages. Updated 2016-12-05. Refresh now. Tools for package owners.