Keepalive User Guide for gRpc Core(and dependents)

Keepalive User Guide for gRpc Core(and dependents)

keepalive ping 是一种检查 channel 当前是否在工作的方式,通过在通信端口上发送HTTP2 pings 的方式。他会定期的发送,且如果在特定的时间内,对端没有确认ping,通信端口断开连接。

grpc ping frame 是双向发送的。

keepalive ping 由两个重要的 channel 参数控制-

  • GRPC_ARG_KEEPALIVE_TIME_MS
    • 这个 channel 参数在keepalive ping 在通信端口上发送之后的时段(以毫秒为单位)。
  • GRPC_ARG_KEEPALIVE_TIMEOUT_MS
    • 这个 channel 参数控制时间的数量(以毫秒为单位),keepalive ping 的发送方等待确认的时间。如果在这个时间内,发送方没有收到一个确认,将关闭连接。

上述两个参数对于大部分的用户来说已经足够了,但是下述的参数在特定的使用场景中也有用:

  • GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS
    • 这个 channel 参数被设置为1(0:false, 1:true),允许 keepalive ping被发送,即使in flight中没有调用。
  • GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA
    • 这个channel参数控制能被发送的pings的最大数量,当没有 data/header frame 被发送时。GRPC Core 将不会继续发送ping,如果超出发送数量限制。设置为0则不设限制。
  • GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS
    • 如果没有 data/frames 在通信端口上被发送,服务器边的这个 channel 参数控制 gRPC Core 期望两次成功的pings接受的最小间隔时间(以毫秒为单位)。如果两次成功的 pings 间的间隔时间小于设定的时间,ping 将被认为是一个来自对端的 bad ping。这样的ping被认为是 “ping strike”。在客户端方面,这无任何影响。
  • GRPC_ARG_HTTP_MAX_PING_STRIKES
    • 这个参数控制最大的 bad ping 的数量,在发送HTTP2 GOAWAY frame 和关闭通信端口前,服务器会忍受这些 bad pings。将它设置为0允许服务器接收任意数量的bad pings。

Default Values

channel 参数客户端服务器
GRPC_ARG_KEEPALIVE_TIME_MSINT_MAX (disabled)7200000 (2 hours)
GRPC_ARG_KEEPALIVE_TIMEOUT_MS20000 (20 seconds)20000 (20 seconds)
GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS0(false)0(false)
GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA22
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MSN/A300000 (5 minutes)
GRPC_ARG_HTTP2_MAX_PING_STRIKESN/A2

FAQ

  • 何时 keepalive 定时器启动?

    • 当通信端口连接完成后(在握手之后)。
  • keepalive 定时器 fires 后会发生什么?

    • 当keepalive定时器fires,gRPC Core 将尝试在通信端口上发送 keepalive ping。ping可能会阻塞,如果:
      • 在通信端口上没有活动的调用,且GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS是false。
      • 已经发送到通信端口的不携带任何 data 的 pings 的数量已经超过了 GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA。
    • 如果keepalive ping 在通信端口上发送,且不阻塞,然后 keepalive watchdog timer 被启动,如果ping在他fire之前没有被识别,他将关闭端口。
  • 为何我接受到一个GOAWAY,错误码为ENHANCE_YOUR_CALM?

    • 如果客户端发送太多的 misbehaving 的pings,服务器会发送一个携带ENHANCE_YOUR_CALM的GOAWAY。一些可能发生这种情况的情境:
      • 如果一个服务器的GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS被设置为fasle,同时客户端将其设置为true,这造成纵使没有call in flight,resulting ping还是会被一直发送。
      • 客户端的GRPC_ARG_KEEPALIVE_TIME_MS设置的比服务器的GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 要小。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值