210 - 《node-retry 和指数退避策略》

发布于 2022年11月9日

今天翻到 node-retry 库,感觉还挺有意思,包括其中的指数退避策略,也算是填补了我的知识盲区。指数退避之前在做 websocket 重连时也用过,但没有仔细去看他的公式、参数和定义。

先看指数退避策略(或者称为算法)是啥。根据 wikipedia 上的定义,他根据「反馈」来降低某些操作的速率,以找到一个可接收的合理的速率,在无线电、计算机网络方面用地都比较多。具体场景是常用于因不确定因素报错,可重试解决的场景,比如网络异常、服务器异常等。

以上是默认值,但其实有个公式「delay = MIN( R * T * F ^ N , M )」。

1、R 是 1-2 之间的随机数,用于在一定时间内分散负载
2、T 是初始超时
3、F 是指数系数,通常用 2
4、N 是重试次数
5、M 是最大超时

其中 M 是比较重要的。要尽可能低,让客户满意;但也要足够高,让系统能满足负载要求。不限制 M 时第 10 次尝试就要 17 分钟多了。比如 UDP 的 M 是 4s,是 500ms、1s、2s、4s、4s、4s、4s、…。比如 pm2 的重启尝试最大延迟是 15s。

再看 node-retry。顾名思义,就是处理

内容预览已结束

此内容需要会员权限。请先登录以查看完整内容。