loadbalancer

package
v1.8.3 Latest Latest
Warning

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

Go to latest
Published: Apr 7, 2020 License: Apache-2.0 Imports: 11 Imported by: 5

Documentation

Overview

Package loadbalancer is client side load balancer

Index

Constants

View Source
const (
	StrategyRoundRobin        = "RoundRobin"
	StrategyRandom            = "Random"
	StrategySessionStickiness = "SessionStickiness"

	OperatorEqual   = "="
	OperatorGreater = ">"
	OperatorSmaller = "<"
	OperatorPattern = "Pattern"
)

constant strings for load balance variables

View Source
const StrategyLatency = "WeightedResponse"

StrategyLatency is name

View Source
const (
	ZoneAware = "zoneaware"
)

constant string for zoneaware

Variables

View Source
var (
	//ProtocolStatsMap saves all stats for all service's protocol, one protocol has a lot of instances
	ProtocolStatsMap = make(map[string][]*ProtocolStats)
	//maintain different locks since multiple goroutine access the map
	LatencyMapRWMutex sync.RWMutex
)

variables for latency map, rest and highway requests count

View Source
var (
	// ErrNoneAvailableInstance is to represent load balance error
	ErrNoneAvailableInstance = LBError{Message: "None available instance"}
)
View Source
var Filters = make(map[string]Filter)

Filters is a map of string and array of *registry.MicroServiceInstance

Functions

func BuildKey

func BuildKey(microServiceName, tags, protocol string) string

BuildKey return key of stats map

func DeleteSuccessiveFailureCount

func DeleteSuccessiveFailureCount(cookieValue string)

DeleteSuccessiveFailureCount deleting cookie from failure count map

func Enable

func Enable(strategyName string) error

Enable function is for to enable load balance strategy

func GetStrategyPlugin

func GetStrategyPlugin(name string) (func() Strategy, error)

GetStrategyPlugin get strategy plugin

func GetSuccessiveFailureCount

func GetSuccessiveFailureCount(cookieValue string) int

GetSuccessiveFailureCount get failure count

func IncreaseSuccessiveFailureCount

func IncreaseSuccessiveFailureCount(cookieValue string)

IncreaseSuccessiveFailureCount increase failure count

func InstallFilter

func InstallFilter(name string, f Filter)

InstallFilter install filter

func InstallStrategy

func InstallStrategy(name string, s func() Strategy)

InstallStrategy install strategy

func ResetSuccessiveFailureMap

func ResetSuccessiveFailureMap()

ResetSuccessiveFailureMap make map again

func SetLatency

func SetLatency(latency time.Duration, addr, microServiceName string, tags utiltags.Tags, protocol string)

SetLatency for a instance ,it only save latest 10 stats for instance's protocol

Types

type Criteria

type Criteria struct {
	Key      string
	Operator string
	Value    string
}

Criteria is rule for filter

type Filter

type Filter func(instances []*registry.MicroServiceInstance, criteria []*Criteria) []*registry.MicroServiceInstance

Filter receive instances and criteria, it will filter instances based on criteria you defined,criteria is optional, you can give nil for it

type LBError

type LBError struct {
	Message string
}

LBError load balance error

func (LBError) Error

func (e LBError) Error() string

Error for to return load balance error message

type ProtocolStats

type ProtocolStats struct {
	Latency    []time.Duration
	Addr       string
	AvgLatency time.Duration
}

ProtocolStats store protocol stats

func (*ProtocolStats) CalculateAverageLatency

func (ps *ProtocolStats) CalculateAverageLatency()

CalculateAverageLatency make avg latency

func (*ProtocolStats) SaveLatency

func (ps *ProtocolStats) SaveLatency(l time.Duration)

SaveLatency save latest 10 record

type RandomStrategy

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

RandomStrategy is strategy

func (*RandomStrategy) Pick

Pick return instance

func (*RandomStrategy) ReceiveData

func (r *RandomStrategy) ReceiveData(inv *invocation.Invocation, instances []*registry.MicroServiceInstance, serviceName string)

ReceiveData receive data

type RoundRobinStrategy

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

RoundRobinStrategy is strategy

func (*RoundRobinStrategy) Pick

Pick return instance

func (*RoundRobinStrategy) ReceiveData

func (r *RoundRobinStrategy) ReceiveData(inv *invocation.Invocation, instances []*registry.MicroServiceInstance, serviceKey string)

ReceiveData receive data

type SessionStickinessStrategy

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

SessionStickinessStrategy is strategy

func (*SessionStickinessStrategy) Pick

Pick return instance

func (*SessionStickinessStrategy) ReceiveData

func (r *SessionStickinessStrategy) ReceiveData(inv *invocation.Invocation, instances []*registry.MicroServiceInstance, serviceName string)

ReceiveData receive data

type Strategy

type Strategy interface {
	ReceiveData(inv *invocation.Invocation, instances []*registry.MicroServiceInstance, serviceKey string)
	Pick() (*registry.MicroServiceInstance, error)
}

Strategy is load balancer algorithm , call Pick to return one instance

func BuildStrategy

func BuildStrategy(i *invocation.Invocation,
	s Strategy) (Strategy, error)

BuildStrategy query instance list and give it to Strategy then return Strategy

Jump to

Keyboard shortcuts

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