本节分析gRPC的失败重试机制,从原理、源码上进行深入分析,下节编写测试代码,验证Retry机制。
官方文档在失败重试方面的讲解比较透彻,下面内容是对官方文档的整理、归类、总结。
1. 两种重试策略简介
1)retry策略
retry策略:发送RPC,服务端应用层返回指定的异常码后,客户端的LIB层继续重试,直到到达重试次数,返回给客户端应用层。下图非常好的说明retry策略。
这里出现Application和Lib层,简单理解我们前几节编写的客户端代码、服务端代码都为Application,gRPC内部实现的通信逻辑叫做Lib层。
2)hedging(对冲)策略
对冲策略不需要等待前一个请求返回,并发访问服务端,这需要服务端Application保证幂等性,否则多个请求到达服务端执行,将影响业务逻辑。
原始 RPC 发送完成,在 hedgingDelay 过去而没有成功响应后,将发出第二个 RPC。 如果在 hedgingDelay 再次过去后两个 RPC 都没有收到响应,则发送第三个 RPC,依此类推,直到 maxAttempts。