gRPC keepalive 的作用:
gRPC 做服务间的通讯时,由于配置问题容易出现各类非预期的异常情况,能够很好的避免transport is closing 的错误,通过keepalive 机制能够解决这种连接长时间没被使用,被服务端断开的情况;
但是如果配置不当也会频繁出现各种异常;
服务端:
gRPC的服务端keepalive参数,:
/** MaxConnectionIdle 最大空闲链接时间,即空闲链接在配置的时间内,未收到新的心跳和请求,则会将链接关闭,比向客户端发送一个GoAway;
空闲链接的定义:最近未完成的RPC数变为0 的时间,或链接建立以来;
默认是无穷
*/
MaxConnectionIdle
// 最长链接时间,当stream超过这个时间会发一个GoAway;为了防止短时间内发送大量的GoAway 会根据 MaxConnectionAge 时间间隔随机+/- 10%
// 默认是无穷
MaxConnectionAge
// 是对MaxConnectionAge 的一个补充,超过了最长链接时间后延长的时间
// 默认是无穷
MaxConnectionAgeGrace
/**
服务端在设定的时间范围内未收到客户端任何活动,例如stream在时间内未收到数据信息,则会发送ping 信息检查链接是否可用;
及时发现及时重试;
当设置值小于1秒时,会被强制设置成1秒
*/
Time 默认是2小时
// 服务端发送ping请求后,等待配置的时间,若客户端在这个时间内未有任何响应则将该链接关闭回收
Timeout 默认是20秒
EnforcementPolicy的配置,用于在服务器端设置 keepalive 强制策略。服务器将关闭与违反此策略的客户端的连接
// MinTime 是客户端在发送 keepalive ping 之前应等待的最短时间;
// 即两个keepalive ping 之间的最小间隔,若小于这个间隔,则会关闭与客户端的链接
// 默认是5分钟
MinTime
// 没有 active stream, 也允许 ping
// 如果为 false,并且客户端在没有活动流时发送 ping,服务器将发送 GoAway 并关闭连接
PermitWithoutStream
客户端:
gRPC 客户端参数:
// 在时间范围内无消息来往,即链接空闲,则会发送一个ping 检查链接是否还存在
// 默认是无穷
// 最小值是10秒
Time
// 在发送一个keepalive 的ping 时,若Timeout 的时间内未ack ,则会断开链接
Timeout
// 没有 active stream, 也允许 ping
PermitWithoutStream
网友评论