You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
738 B
39 lines
738 B
2 years ago
|
package selector
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// Balancer is balancer interface
|
||
|
type Balancer interface {
|
||
|
Pick(ctx context.Context, nodes []WeightedNode) (selected WeightedNode, done DoneFunc, err error)
|
||
|
}
|
||
|
|
||
|
// BalancerBuilder build balancer
|
||
|
type BalancerBuilder interface {
|
||
|
Build() Balancer
|
||
|
}
|
||
|
|
||
|
// WeightedNode calculates scheduling weight in real time
|
||
|
type WeightedNode interface {
|
||
|
Node
|
||
|
|
||
|
// Raw returns the original node
|
||
|
Raw() Node
|
||
|
|
||
|
// Weight is the runtime calculated weight
|
||
|
Weight() float64
|
||
|
|
||
|
// Pick the node
|
||
|
Pick() DoneFunc
|
||
|
|
||
|
// PickElapsed is time elapsed since the latest pick
|
||
|
PickElapsed() time.Duration
|
||
|
}
|
||
|
|
||
|
// WeightedNodeBuilder is WeightedNode Builder
|
||
|
type WeightedNodeBuilder interface {
|
||
|
Build(Node) WeightedNode
|
||
|
}
|