Documentation
¶
Overview ¶
Package lb 提供负载均衡器接口和实现。
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrNoHealthyTarget = errors.New("no healthy target available")
ErrNoHealthyTarget 当所有目标都不可用时返回。
Functions ¶
This section is empty.
Types ¶
type Balancer ¶
type Balancer interface {
// Pick 选取一个健康节点,无健康节点时返回 ErrNoHealthyTarget。
Pick() (*Target, error)
// UpdateTargets 原子替换目标列表(用于路由表更新)。
UpdateTargets(targets []Target)
// MarkHealthy 将指定 ID 的节点标记为健康。
MarkHealthy(id string)
// MarkUnhealthy 将指定 ID 的节点标记为不健康。
MarkUnhealthy(id string)
// Targets 返回当前目标列表的快照(只读)。
Targets() []Target
}
Balancer 负载均衡器接口。
type HealthChecker ¶
type HealthChecker struct {
// contains filtered or unexported fields
}
HealthChecker 对 Balancer 中的目标节点进行主动健康检查。
主动检查:每隔 interval 对每个节点发 GET /health,200 视为健康。 被动熔断:调用方通过 RecordSuccess/RecordFailure 上报结果, 连续 failThreshold 次失败后将节点标记为不健康。
func NewHealthChecker ¶
func NewHealthChecker(balancer Balancer, logger *zap.Logger, opts ...HealthCheckerOption) *HealthChecker
NewHealthChecker 创建并返回 HealthChecker。
func (*HealthChecker) RecordFailure ¶
func (hc *HealthChecker) RecordFailure(id string)
RecordFailure 被动上报:请求失败,增加连续失败计数,达阈值则标记不健康。
func (*HealthChecker) RecordSuccess ¶
func (hc *HealthChecker) RecordSuccess(id string)
RecordSuccess 被动上报:请求成功,重置连续失败计数,恢复健康状态。
func (*HealthChecker) SetNotifier ¶
func (hc *HealthChecker) SetNotifier(n *alert.Notifier)
SetNotifier 设置告警通知器(可选;nil 则不发告警)。 节点变为不健康时发送 EventNodeDown,恢复时发送 EventNodeRecovered。
func (*HealthChecker) Start ¶
func (hc *HealthChecker) Start(ctx context.Context)
Start 启动后台主动健康检查 goroutine,ctx 取消时退出。
type HealthCheckerOption ¶
type HealthCheckerOption func(*HealthChecker)
HealthCheckerOption 用于配置 HealthChecker。
func WithFailThreshold ¶
func WithFailThreshold(n int) HealthCheckerOption
WithFailThreshold 设置被动熔断阈值(默认 3)。
func WithHealthPath ¶
func WithHealthPath(p string) HealthCheckerOption
WithHealthPath 设置健康检查路径(默认 /health)。
func WithInterval ¶
func WithInterval(d time.Duration) HealthCheckerOption
WithInterval 设置主动检查间隔(默认 30s)。
func WithTimeout ¶
func WithTimeout(d time.Duration) HealthCheckerOption
WithTimeout 设置单次检查超时(默认 5s)。
type Target ¶
type Target struct {
ID string // 唯一标识(URL 或自定义 ID)
Addr string // 完整地址,如 "http://sp-2:9000"
Weight int // 权重(≥1)
Healthy bool // 当前是否健康
}
Target 表示一个上游节点。
type WeightedRandomBalancer ¶
type WeightedRandomBalancer struct {
// contains filtered or unexported fields
}
WeightedRandomBalancer 按权重随机选取健康节点。 权重为 0 或不健康的节点不参与选取。
func NewWeightedRandom ¶
func NewWeightedRandom(targets []Target) *WeightedRandomBalancer
NewWeightedRandom 创建加权随机负载均衡器。 targets 中 Weight ≤ 0 的节点会被视为权重 1。
func (*WeightedRandomBalancer) MarkHealthy ¶
func (b *WeightedRandomBalancer) MarkHealthy(id string)
MarkHealthy 将指定 ID 的节点标记为健康。
func (*WeightedRandomBalancer) MarkUnhealthy ¶
func (b *WeightedRandomBalancer) MarkUnhealthy(id string)
MarkUnhealthy 将指定 ID 的节点标记为不健康。
func (*WeightedRandomBalancer) Pick ¶
func (b *WeightedRandomBalancer) Pick() (*Target, error)
Pick 按权重随机选取一个健康节点。
func (*WeightedRandomBalancer) Targets ¶
func (b *WeightedRandomBalancer) Targets() []Target
Targets 返回当前目标列表的快照。
func (*WeightedRandomBalancer) UpdateTargets ¶
func (b *WeightedRandomBalancer) UpdateTargets(targets []Target)
UpdateTargets 原子替换目标列表。