Documentation
¶
Overview ¶
Package overloadctrl 提供反馈驱动的自适应限流。
与 pkg/ratelimit 的区别:ratelimit 是固定阈值(令牌桶/滑动窗口),阈值由调用方预设, 不随负载变化;本包是自适应——根据响应延迟和错误率动态收紧/放宽通过率,无需人工调参。
接口(对齐 trpc-go overloadctrl):Acquire(ctx, addr) 返回 Token,请求结束后 Token.OnResponse(ctx, err) 反馈结果,controller 据此更新该 addr 的负载画像。 调用方在 client 调用前 Acquire,拿到 Token 才发请求,调用结束 OnResponse。
算法(类 BBR/CoDel 的简化版):per-addr 维护 minRTT(滑动窗口最小值,作为健康基线) 和 lastRTT。当 lastRTT > k*minRTT(k 默认 2.0,表示延迟翻倍)且 inFlight 超过 minInflight(默认 10)时,认为过载,拒绝请求。错误率过高(连续错误)也收紧。 反馈闭环:OnResponse 更新 lastRTT/minRTT/inFlight/错误计数。
恢复:延迟梯度触发的拒绝会随在途请求自然排空(inFlight 降到 minInflight 以下)自动放开; 连续错误触发的锁定态则每隔 errRecovInterval(默认 5s)放行一个探测请求,探测成功解锁、 失败续锁——确保节点不会因连续错误被永久拒绝。
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrOverloaded = errors.New("overload controller rejected: node overloaded")
ErrOverloaded 节点过载,请求被拒绝。
Functions ¶
This section is empty.
Types ¶
type AdaptiveController ¶
type AdaptiveController struct {
// contains filtered or unexported fields
}
AdaptiveController 基于延迟梯度的自适应限流器。按 addr 维护独立负载画像。
func NewAdaptiveController ¶
func NewAdaptiveController(opts ...Option) *AdaptiveController
NewAdaptiveController 创建自适应限流器。
func (*AdaptiveController) Stats ¶
func (c *AdaptiveController) Stats() map[string]OverloadStats
Stats 返回所有 addr 的状态快照。
type NoopController ¶
type NoopController struct{}
NoopController 空实现。Acquire 永远放行,OnResponse 空操作。默认值,零开销。
type Option ¶
type Option func(*config)
Option 配置 AdaptiveController。
func WithErrorRecoveryInterval ¶
WithErrorRecoveryInterval 设置错误锁定后的探测放行间隔(默认 5s)。 连续错误达阈值进入锁定态后,每隔此间隔放行一个探测请求;探测成功则解除锁定, 失败则继续锁定。避免节点因连续错误被永久拒绝、无法恢复。
func WithErrorThreshold ¶
WithErrorThreshold 设置连续错误阈值(默认 5),达此值直接拒绝。
func WithMinInflight ¶
WithMinInflight 设置触发过载判断的最小在途请求数(默认 10)。 低于此值时即使延迟高也不拒绝(避免低负载时的偶发延迟误判)。
func WithRTTMultiple ¶
WithRTTMultiple 设置延迟梯度阈值倍数(默认 2.0,即延迟翻倍视为过载)。
type OverloadController ¶
OverloadController 自适应限流器接口。