loadbalance

package module
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 17, 2020 License: Apache-2.0 Imports: 5 Imported by: 1

README

loadbalance

介绍

loadbalance实现了常用的负载均衡算法:

标签 说明
轮询 从1开始,直到N,然后重新开始循环
加权轮询 根据相应权值数的轮询循环选择(平滑轮询)
随机 从1-N随机选择一个
加权随机 从相应权值数中随机选择一个

待完成项

  • 继续增加负载均衡算法

使用

1、直接创建
lb := loadbalance.NewRoundRobbinLoadBalance()
		lb.Add(1, "a")
		lb.Add(1, "b")
		lb.Add(1, "c")
		for i := 0; i < 10; i++ {
			t.Log(lb.Select(nil))
		}
1、使用factory
lb := loadbalance.Create(loadbalance.LBRoundRobbin)
		lb.Add(2, "a")
		lb.Add(5, "b")
		lb.Add(10, "c")
		for i := 0; i < 17; i++ {
			t.Log(lb.Select(nil))
		}

Documentation

Index

Constants

View Source
const (
	LBUnknown = iota
	LBRoundRobbin
	LBRoundRobbinWeight
	LBRandom
	LBRandomWeight
)

Variables

This section is empty.

Functions

func DefaultCompare

func DefaultCompare(a, b interface{}) int

Types

type BaseLoadBalance

type BaseLoadBalance struct {
	Compare Compare

	LockLoadBalance
	// contains filtered or unexported fields
}

func (*BaseLoadBalance) Add

func (lb *BaseLoadBalance) Add(factor interface{}, invoker interface{})

func (*BaseLoadBalance) AddInvokers

func (lb *BaseLoadBalance) AddInvokers(invokers ...interface{})

func (*BaseLoadBalance) Remove

func (lb *BaseLoadBalance) Remove(invoker interface{})

type Compare

type Compare func(a, b interface{}) int

type DummyLocker

type DummyLocker struct{}

func (*DummyLocker) Lock

func (l *DummyLocker) Lock()

func (*DummyLocker) RLock

func (l *DummyLocker) RLock()

func (*DummyLocker) RUnlock

func (l *DummyLocker) RUnlock()

func (*DummyLocker) Unlock

func (l *DummyLocker) Unlock()

type LoadBalance

type LoadBalance interface {
	//增加一个invoker
	//
	//factor影响选择的因素,不同的实现该类型不一致: 如带权值负载均,weight类型为int
	Add(factor interface{}, invoker interface{})
	//从记录中删除,不会再次被选中
	Remove(invoker interface{})
	//选择invoker
	Select(ctx context.Context) interface{}
	//设置锁
	WithLocker(RWLocker)
}

func Create

func Create(t int) LoadBalance

type LockLoadBalance

type LockLoadBalance struct {
	// contains filtered or unexported fields
}

func (*LockLoadBalance) WithLocker

func (lb *LockLoadBalance) WithLocker(locker RWLocker)

type RWLocker

type RWLocker interface {
	Lock()
	Unlock()

	RLock()
	RUnlock()
}

type RandomLoadBalance

type RandomLoadBalance struct {
	BaseLoadBalance
	// contains filtered or unexported fields
}

func NewRandomLoadBalance

func NewRandomLoadBalance() *RandomLoadBalance

func (*RandomLoadBalance) Select

func (lb *RandomLoadBalance) Select(ctx context.Context) interface{}

type RandomWeightLoadBalance

type RandomWeightLoadBalance struct {
	LockLoadBalance
	// contains filtered or unexported fields
}

func NewRandomWeightLoadBalance

func NewRandomWeightLoadBalance() *RandomWeightLoadBalance

func (*RandomWeightLoadBalance) Add

func (lb *RandomWeightLoadBalance) Add(weight interface{}, invoker interface{})

func (*RandomWeightLoadBalance) Remove

func (lb *RandomWeightLoadBalance) Remove(invoker interface{})

func (*RandomWeightLoadBalance) Select

func (lb *RandomWeightLoadBalance) Select(ctx context.Context) interface{}

type RoundRobbinLoadBalance

type RoundRobbinLoadBalance struct {
	BaseLoadBalance
	// contains filtered or unexported fields
}

func NewRoundRobbinLoadBalance

func NewRoundRobbinLoadBalance() *RoundRobbinLoadBalance

func (*RoundRobbinLoadBalance) Select

func (lb *RoundRobbinLoadBalance) Select(ctx context.Context) interface{}

type RoundRobbinWeightLoadBalance

type RoundRobbinWeightLoadBalance struct {
	Compare Compare

	LockLoadBalance
	// contains filtered or unexported fields
}

func NewRoundRobbinWeightLoadBalance

func NewRoundRobbinWeightLoadBalance() *RoundRobbinWeightLoadBalance

func (*RoundRobbinWeightLoadBalance) Add

func (lb *RoundRobbinWeightLoadBalance) Add(weight interface{}, invoker interface{})

func (*RoundRobbinWeightLoadBalance) Remove

func (lb *RoundRobbinWeightLoadBalance) Remove(invoker interface{})

func (*RoundRobbinWeightLoadBalance) Select

func (lb *RoundRobbinWeightLoadBalance) Select(ctx context.Context) interface{}

type RwLocker

type RwLocker sync.RWMutex

func (*RwLocker) Lock

func (l *RwLocker) Lock()

func (*RwLocker) RLock

func (l *RwLocker) RLock()

func (*RwLocker) RUnlock

func (l *RwLocker) RUnlock()

func (*RwLocker) Unlock

func (l *RwLocker) Unlock()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL