backoffAlgorithm 核心算法详解
算法概述
什么是退避算法(Backoff Algorithm)?
退避算法是一种用于处理失败重试的策略,通过逐渐增加重试之间的等待时间,避免在系统繁忙或网络拥塞时造成'雷群效应'(Thundering Herd Problem)。
Full Jitter 策略
backoffAlgorithm 库实现了 'Full Jitter' 指数退避策略,这是 AWS 推荐的一种退避算法变体。
核心思想:
- 指数增长:每次重试的等待时间上限呈指数增长(2^n)
- 随机抖动:在每次重试时,实际等待时间是在 [0, 最大等待时间] 范围内随机选择
- 避免同步:多个设备同时重试时,由于随机性,重试时间会分散,避免同时冲击服务器
算法公式
第 n 次重试的等待时间 = random(0, min(backOffBase * 2^n, maxBackoffDelay))
其中:
backOffBase:基础退避时间(毫秒)2^n:指数增长因子maxBackoffDelay:最大退避延迟(毫秒)random(0, max):在 [0, max] 范围内随机选择
数据结构分析
BackoffAlgorithmContext_t 结构体
typedef struct BackoffAlgorithmContext {
uint16_t maxBackoffDelay; // 最大退避延迟(毫秒)
uint32_t attemptsDone; // 已完成的尝试次数
uint16_t nextJitterMax; // 下一次重试的最大抖动值(毫秒)
uint32_t maxRetryAttempts; // 最大重试次数
} BackoffAlgorithmContext_t;
字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
maxBackoffDelay | uint16_t | 最大退避延迟(毫秒)。这是退避时间的上限,无论重试多少次,都不会超过这个值 |
attemptsDone | uint32_t | 已完成的尝试次数。每次调用 时递增 |

