Documentation ¶
Overview ¶
Package loadbalancer is client side load balancer
Index ¶
- Constants
- Variables
- func BuildKey(microServiceName, tags, protocol string) string
- func DeleteSuccessiveFailureCount(cookieValue string)
- func Enable(strategyName string) error
- func GetStrategyPlugin(name string) (func() Strategy, error)
- func GetSuccessiveFailureCount(cookieValue string) int
- func IncreaseSuccessiveFailureCount(cookieValue string)
- func InstallFilter(name string, f Filter)
- func InstallStrategy(name string, s func() Strategy)
- func ResetSuccessiveFailureMap()
- func SetLatency(latency time.Duration, addr, microServiceName string, tags utiltags.Tags, ...)
- type Criteria
- type Filter
- type LBError
- type ProtocolStats
- type RandomStrategy
- type RoundRobinStrategy
- type SessionStickinessStrategy
- type Strategy
Constants ¶
const ( StrategyRoundRobin = "RoundRobin" StrategyRandom = "Random" StrategySessionStickiness = "SessionStickiness" OperatorEqual = "=" OperatorGreater = ">" OperatorSmaller = "<" OperatorPattern = "Pattern" )
constant strings for load balance variables
const StrategyLatency = "WeightedResponse"
StrategyLatency is name
const (
ZoneAware = "zoneaware"
)
constant string for zoneaware
Variables ¶
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
var ( // ErrNoneAvailableInstance is to represent load balance error ErrNoneAvailableInstance = LBError{Message: "None available instance"} )
var Filters = make(map[string]Filter)
Filters is a map of string and array of *registry.MicroServiceInstance
Functions ¶
func DeleteSuccessiveFailureCount ¶
func DeleteSuccessiveFailureCount(cookieValue string)
DeleteSuccessiveFailureCount deleting cookie from failure count map
func GetStrategyPlugin ¶
GetStrategyPlugin get strategy plugin
func GetSuccessiveFailureCount ¶
GetSuccessiveFailureCount get failure count
func IncreaseSuccessiveFailureCount ¶
func IncreaseSuccessiveFailureCount(cookieValue string)
IncreaseSuccessiveFailureCount increase failure count
func InstallStrategy ¶
InstallStrategy install strategy
func ResetSuccessiveFailureMap ¶
func ResetSuccessiveFailureMap()
ResetSuccessiveFailureMap make map again
Types ¶
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 ProtocolStats ¶
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 ¶
func (r *RandomStrategy) Pick() (*registry.MicroServiceInstance, error)
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 ¶
func (r *RoundRobinStrategy) Pick() (*registry.MicroServiceInstance, error)
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 ¶
func (r *SessionStickinessStrategy) Pick() (*registry.MicroServiceInstance, error)
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