Documentation
¶
Overview ¶
Package backoff 提供指数退避 + 抖动(jitter)的重试原语,纯标准库。
收敛散落各处的"delay *= 2 + jitter"手写退避(webhook / grpcclient / saga 等 各有一份),统一成可配置、可测试的一个件:计算第 n 次重试的等待时长,或直接 用 Retry 包住一个可能失败的操作。
退避序列:delay(n) = min(Base * Factor^n, Max),n 从 0 计;可叠加抖动打散 "重试风暴"(大量客户端同时失败后同一时刻重试,压垮刚恢复的服务)。 抖动策略对齐 AWS「Exponential Backoff and Jitter」:
- JitterNone:精确指数,无抖动;
- JitterFull(默认):在 [0, delay] 均匀取值,打散最彻底;
- JitterEqual:delay/2 + [0, delay/2],保留一半确定性 + 一半随机。
并发安全:Policy 是不可变值(构造后只读),Duration 可并发调用;抖动用 math/rand/v2(免播种、并发安全)。零值 Policy 不可用,用 New 构造。
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Jitter ¶
type Jitter int
Jitter 抖动策略。
const ( // JitterFull 全抖动:等待 = [0, base*factor^n] 均匀随机(默认,打散最彻底)。 JitterFull Jitter = iota // JitterEqual 半抖动:等待 = d/2 + [0, d/2],d = base*factor^n。 JitterEqual // JitterNone 无抖动:等待 = base*factor^n(精确指数)。 JitterNone // JitterProportional 比例抖动:等待 = d ± d*ratio,在 [d*(1-ratio), d*(1+ratio)] // 均匀取值(ratio 由 WithJitterRatio 设置,默认 0.25 即 ±25%)。 // 适合"围绕名义退避小幅扰动"的场景(如 RPC 客户端重试)。 JitterProportional )
type Option ¶
type Option func(*config)
Option 配置 Policy。
func WithJitterRatio ¶
WithJitterRatio 设置 JitterProportional 的比例(0..1,默认 0.25 即 ±25%)。 仅在 jitter 为 JitterProportional 时生效。
func WithMaxRetries ¶
WithMaxRetries 设置 Retry 的最大重试次数(额外次数,0=只试一次;默认 3)。
type Policy ¶
type Policy struct {
// contains filtered or unexported fields
}
Policy 退避策略(不可变)。零值不可用,用 New 构造。并发安全。
func (*Policy) Duration ¶
Duration 返回第 attempt 次重试前应等待的时长(attempt 从 0 计)。 已应用倍率封顶与抖动。attempt<0 视为 0。