GRPC Connection Backoff Protocol
当我们向一个失败的后端进行连接时,通常不希望立即重试(为了避免请求flooding网络或者服务器) ,而是去做一些某种形式的指数backoff。
我们有几个参数:
- INITINAL_BACKOFF(第一次失败后的重试需要等待多长时间)
- MULTIPLIER(在一次失败的重试后,backoff的乘回因子)
- JITTER(随机backoffs的程度)
- MAX_BACKOFF(backoff 的上界)
- MIN_CONNECT_TIMEOUT(我们愿意给予连接完成的最小时间)
Proposed Backoff Algorithm
以指数方式回退尝试连接的起始时间,最大值为MAX_BACKOFF,并带有抖动(jitter)。
Resset Backoff
back off 应当在某一时间点被重置为 INITIAL_BACKOFF,所以重连行为是一致的,无论连接是新开始的一个,还是之前断连的一个。
当 SETTINGS frame 被接收到时,我们选择重置Backoff,在那时,我们明确知晓这个连接已经被服务器接受了。