Documentation
¶
Overview ¶
Package loadbalancer 提供 mgin v2 的客户端负载均衡能力。
v2 引入:在 client.CallCtx 内部用 registry.Registry.GetServices 拉取多实例后, 通过 LoadBalancer.Pick 选一个具体实例发起调用。框架默认使用 RoundRobin, 业务可通过 loadbalancer.SetDefault 切换到其它策略。
设计目标:
- 零第三方依赖(与 v2 主体一致)
- 线程安全:多 goroutine 并发 Pick 不会脏写
- 一致性哈希的 key 用于把同一请求的多个调用路由到同一实例(如 session/缓存)
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ConsistentHashLB = &ConsistentHash{replicas: 160}
ConsistentHashLB 默认注册实例,160 副本(vnode),业界常用值。
var ErrEmptyInstances = errors.New("loadbalancer: 实例列表为空")
ErrEmptyInstances 在 Pick 收到空实例列表时返回,调用方应转 fallback。
var LeastConnectionsLB = &LeastConnections{}
LeastConnectionsLB 默认注册实例。
var RandomLB = &Random{}
RandomLB 默认注册实例。
var RoundRobinLB = &RoundRobin{}
RoundRobinLB 是默认注册实例,init 时由 Register 注册。
Functions ¶
func Register ¶
func Register(name string, lb LoadBalancer)
Register 把一个策略注册到全局表。重复注册会覆盖。 一般由各策略实现文件在 init() 中调用。
Types ¶
type ConsistentHash ¶
type ConsistentHash struct {
// contains filtered or unexported fields
}
ConsistentHash 一致性哈希策略。线程安全。 key 相同的请求会路由到同一实例,适合"同一 session 走同一服务"的场景。
type LeastConnections ¶
type LeastConnections struct {
// contains filtered or unexported fields
}
LeastConnections 最少连接策略。线程安全。 用 sync.Map 跟踪每个实例当前的活跃请求数。
func (*LeastConnections) Inc ¶
func (l *LeastConnections) Inc(instance string) (func(), bool)
Inc 业务侧在请求开始时调用以让 LB 跟踪活跃连接数;返回的"减"函数应在请求结束时调用。
与 Pick 共享同一个 sync.Map;Inc 第一次调用会 LoadOrStore 创建条目(值 0), 随后 Add(1) 增加。典型用法:
dec, _ := lb.Inc(best) defer dec()
type LoadBalancer ¶
LoadBalancer 是所有负载均衡策略的统一接口。
参数:
- instances:可用实例 URL 列表(来自 registry.GetServices)
- key:路由键(用于一致性哈希),空字符串时退化为非一致性策略
返回:被选中的实例 URL;调用方负责发起调用。
type RoundRobin ¶
type RoundRobin struct {
// contains filtered or unexported fields
}
RoundRobin 轮询策略。线程安全。