概述
文章目录
- grpc keepalive
- TCP KeepAlive
grpc keepalive
官方原文链接:https://github.com/grpc/grpc/blob/master/doc/keepalive.md#keepalive-user-guide-for-grpc-core-and-dependents
keepalive ping是一种通过transport发送HTTP2 ping来检查通道当前是否工作的方法。它是周期性发送的,如果在某个超时周期内该ping没有得到对等方的确认,则传输断开连接。
本指南记录了gRPC core中控制keepalive ping行为方式。
keepalive ping由两个重要的通道参数控制:
-
GRPC_ARG_KEEPALIVE_TIME_MS
此channel参数控制在transport上发送keepalive ping的时间间隔(以毫秒为单位)。 -
GRPC_ARG_KEEPALIVE_TIMEOUT_MS
此channel参数控制keepalive ping的发送方等待确认的时间(以毫秒为单位)。如果在此时间内未收到确认,它将关闭连接。
上面的两个通道参数对于大多数用户来说应该足够了,但是以下参数在某些用例中也很有用。
-
GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS
如果将此通道参数设置为1(0:false; 1:true),则即使没有请求进行,也可以发送keepalive ping。 -
GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA
当没有其他数据(数据帧或标头帧)要发送时,此通道参数控制可发送的最大ping数。如果超出限制,GRPC Core将不会继续发送ping。将其设置为0将允许在不发送数据的情况下发送ping命令。 -
GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS
如果transport中没有接收到数据帧,则此channel参数控制gRPC Core在连续的ping之间等待的最短时间(以毫秒为单位)。 -
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS
如果transport中没有发送数据帧,则服务器端的此channel参数控制gRPC Core在接收连续ping之间期望的最短时间(以毫秒为单位)。如果连续两次ping之间的时间少于此时间,则该ping将被视为对等端的不良ping。这样的ping算作“ ping strike”。在客户端,这没有任何效果。 -
GRPC_ARG_HTTP2_MAX_PING_STRIKES
此arg控制在发送HTTP2 GOAWAY帧并关闭传输之前,服务器允许的错误ping的最大数量。将其设置为0允许服务器接受任意数量的错误ping。(注:也就是达到这个数量的ping strike就会发送GOWAY帧–用于发起关闭连接的请求,或者警示严重错误。GOAWAY 会停止接收新流,并且关闭连接前会处理完先前建立的流)
FAQ:
-
Keepalive计时器何时启动?
transport完成连接后(握手后),将启动keepalive计时器。 -
当keepalive计时器触发时会发生什么?
当keepalive计时器触发时,gRPC Core将尝试在传输中发送keepalive ping。但是以下情况可以阻止此ping的发送- 该transport上没有活动调用,并且GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS为false。
- transport中已发送的ping数目(在transport中没有其他data发送时)已超过GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA。
- 自上次ping以来经过的时间少于GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS。
-
如果keepalive的ping没有被blocked并在transport中发送,那么将启动keepalive watchdog计时器:如果在触发(timeout)前还未收到ping的确认,就会关闭transport
TCP KeepAlive
TCP KeepAlive则是为了探测/保鲜(心跳检测,连接错误检测):用于探测对端的状态及网络情况(有可能客户端崩溃、强制关闭了应用、主机不可达等等),也有保鲜功能。比如如防止nat超时。TCP keepalive则是通过发送发送侦测包实现。在Linux中通过net.ipv4.tcp_keepalive_intvl,net.ipv4.tcp_keepalive_probes,net.ipv4.tcp_keepalive_time配置。
和 grpc keepalive 两者应该是2个层面上的东西!
最后
以上就是羞涩钻石为你收集整理的grpc keepalivegrpc keepalive的全部内容,希望文章能够帮你解决grpc keepalivegrpc keepalive所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复