lb

package
v1.4.1 Latest Latest
Warning

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

Go to latest
Published: Feb 28, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Overview

Package lb 提供负载均衡器接口和实现。

Index

Constants

This section is empty.

Variables

View Source
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 原子替换目标列表。

Jump to

Keyboard shortcuts

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