分布式系统中如何进行重试

摘选自《Google SRE》

重试#

错误的重试方式会导致后端服务雪崩。为使后端服务恢复正常,减少客户端的请求量非常重要 —— 尤其是重试请求。

使用客户端自动重试时,务必注意一下事项:

确保后端服务实现了 load shedding 和优雅降级,否则重试可能导致后端服务雪崩#

使用随机指数后退算法(randomized exponential backoff),见AWS Architecture Blog#

限制每个请求的重试次数,不要无限重试#

考虑设置一个全局重试预算,例如,每个进程每分钟最多重试 60 次#

谨慎考虑是否要在每一层(客户端、框架、中间件 等等)都实现重试,总重试次数等于 每一层重试次数相乘,后果可能非常恐怖#

使用清晰的响应码来区分不同类型的错误,例如:可重试型错误和不可重试型错误,对 于不可重试的错误,就不要再重试了,重试多少次肯都不会成功#

comments powered by Disqus