为何要启用gRPC的grpc.keepalive_permit_without_calls参数?
gRPC keepalive 参数相关问题解答
根据gRPC官方文档定义,grpc.keepalive_permit_without_calls参数设为1时,允许在无活跃RPC调用的情况下发送保活探测包。基于此,有以下两个问题及解答:
问题1:启用该参数是否为了维持无RPC传输的空闲gRPC连接?
- 没错,启用这个参数的核心目的就是维持空闲状态的gRPC连接。当没有活跃RPC调用时,保活探测包可以让连接两端确认链路依然可用,避免中间网络设备(比如防火墙、负载均衡器)因为长时间没有流量传输而主动断开连接。
问题2:已知grpc.max_connection_idle_ms默认值为无穷大,是否仅当该参数设为非无穷值时才需要启用grpc.keepalive_permit_without_calls?
- 并非如此。哪怕
grpc.max_connection_idle_ms保持默认的无穷大(即不会主动因空闲超时关闭连接),启用grpc.keepalive_permit_without_calls依然有实际意义。因为即使服务端和客户端不会主动回收空闲连接,中间的网络节点可能会因为长时间无流量而切断链路,这时候保活探测包就能持续维持连接的可用性。只有当你明确希望空闲连接被自动回收,并且设置了grpc.max_connection_idle_ms为非无穷值时,才可能不需要启用该参数,但如果想在空闲周期内保持连接可用,还是得开启它。
内容的提问来源于stack exchange,提问作者cozos
相关产品推荐
相关产品推荐

