哪些场景下需要重试?重试的策略有哪些?重试设计的重点有哪些?
打卡Day15:今天学习了《47|弹力设计篇之“重试设计”》,我的收获如下:
重试的场景
判断故障是暂时的,而不是永久的。需要重试包括:调用超时、返回可重试的错误码;不要重试包括:业务错误如没有权限、技术错误如HTTP的503。
重试的策略
- 最大重试次数;
- 指数级退避(Exponential Backoff)。间隔时间成倍增加。
重试设计的重点
- 确定什么错误需要重试;
- 重试时间和重试次数;
- 放弃重试后需要结合熔断设计恢复;
- 被调用方是否有幂等设计;
- 尽量不侵入业务代码(Annotation、Service Mesh);
- 长时间重试需要持久化请求上下文以节约内存。