哪些场景下需要重试?重试的策略有哪些?重试设计的重点有哪些?

打卡Day15:今天学习了《47|弹力设计篇之“重试设计”》,我的收获如下:

重试的场景

判断故障是暂时的,而不是永久的。需要重试包括:调用超时、返回可重试的错误码;不要重试包括:业务错误如没有权限、技术错误如HTTP的503。

重试的策略

  • 最大重试次数;
  • 指数级退避(Exponential Backoff)。间隔时间成倍增加。

重试设计的重点

  • 确定什么错误需要重试;
  • 重试时间和重试次数;
  • 放弃重试后需要结合熔断设计恢复;
  • 被调用方是否有幂等设计;
  • 尽量不侵入业务代码(Annotation、Service Mesh);
  • 长时间重试需要持久化请求上下文以节约内存。

左耳朵耗子带你重学《左耳听风》

https://time.geekbang.org/column/article/4121