我是靠谱客的博主 羞涩钻石,最近开发中收集的这篇文章主要介绍grpc keepalivegrpc keepalive,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部