Handle timeout
超时处理
我们要探讨的问题是:如果我们遇到一个非常非常慢的API调用最终超时,并且我们假设(a)它成功或(b)失败,我们就会遇到错误。超时(或更糟糕的是,无限长的等待)是分布式系统的一个基本事实,我们需要如何处理它们
解决方法:
- 假设成功
- 使用默认值
- 假设远程操作失败,然后自动重试
- 重试是否安全
- 同步重试还是异步重试
- 同步重试会减慢您的速度
- 重试多少次
- 重试之间延迟策略(等间隔、指数退避、使用抖动)
- 如果远程服务出现性能问题,重试是否会使他们的情况变得更差
检查请求是否成功,如果安全再试一次
让用户知道这个结果
Resource
- microservices aren’t magic handing timeout: https://8thlight.com/blog/colin-jones/2018/09/18/microservices-arent-magic-handling-timeouts.html
- 超时、重试和抖动回退: https://aws.amazon.com/cn/builders-library/timeouts-retries-and-backoff-with-jitter/
- 微服务调用超时处理: https://www.jianshu.com/p/d68d572b0613