NOTE

2.6 如何设计超时与重试系统

1. 超时重试是什么 - 超时:服务A调用服务B,为了防止服务A请求服务B但是一直没有响应,导致服务A的线程等资源一直hold着无法释放,因此需要设置超时 - 重试:服务A调用服务B,如果服务A请求服务B发生了网络错误,那么会触发超时,但是这个网络是暂时的,因此重试几次可能就好了 2. 怎么设计超时

系统设计创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 超时重试是什么

  • 超时:服务A调用服务B,为了防止服务A请求服务B但是一直没有响应,导致服务A的线程等资源一直hold着无法释放,因此需要设置超时
  • 重试:服务A调用服务B,如果服务A请求服务B发生了网络错误,那么会触发超时,但是这个网络是暂时的,因此重试几次可能就好了

2. 怎么设计超时重试

2.1. 超时

2.1.1. 超时时长

  • 刚上线的服务通过压测:一般N个9的耗时为200ms时,取平均耗时做超时时间
  • 已有的服务通过监控:平均响应时间

2.2. 重试

2.2.1. 什么错误可以重试

  • 调用超时、被调用端返回了某种可以重试的错误(如繁忙中、流控中、维护中、资源不足等)

2.2.2. 重试的策略

  • 指数级退避
  • 重置超时时间

2.2.3. 重试的前提

  • 被调是幂等的

2.2.4. 重试次数

  • 压测计算最大支持的并发度是多少
  • 如果上游有传递时间,那么根据这个时间来确定重试次数,否则走默认值,比如Linux TCP重试次数为5次

3. 超时重试组件

  • 如何设计容错组件.md(关联笔记尚未公开)

4. 参考