Golang Go语言中GRPC调用服务时候的连接的一些疑惑

发布于 1周前 作者 phonegap100 来自 Go语言

Golang Go语言中GRPC调用服务时候的连接的一些疑惑

我应该是客户端启动时 Dial 了服务,得到了 conn 。

那么假设服务不挂的情况下,我调用服务是一直用这个 conn,还是客户端启动时先不 Dial,然后每次调用服务都 Dial 获得新的 conn 然后 close ?

客户端请求服务的频次不确定会有多少,可能时多时少

6 回复

这种往下看还是 tpc

因为建立连接成本大, 一般都是连接池

所以每次调用都是复用之前的连接

(当然更细节的看也有自动回收 idle 连接, 断开无效连接等等逻辑

更多关于Golang Go语言中GRPC调用服务时候的连接的一些疑惑的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


#1

对了,因为我是用注册中心的
这样的话是可以拿 N 个服务的地址分别创建多个 conn 组成连接池,还是只是拿一个地址创建多个 conn 比较好点?

得拿多个地址创建链接, 要不然你的负载均衡就没了.

试想这单独地址的机器挂了, 发起请求还得重建链接, 效率不高. 那个瞬间的请求估计得都超时了

一般来讲集群机器数量不是特别多的情况下 (超过 5000), 和每个机器都弄个连接池成本也不大

#3

噢噢,我还以为是要等原本的链接挂了才去注册中心拿新的。。

你这是要 GRPC LoadBalancer
1. grpc dialOptions 里面可以用自己的 resolver 去解析地址, 可以参考这里 https://github.com/sercand/kuberesolver
2. 可以上 envoy 之类的, 对于你客户端来说是透明的, 只有一个地址. envoy 可以做 load balancing

在Go语言中,使用gRPC调用服务时,连接管理是一个关键方面,涉及到性能、可靠性和资源利用等多个维度。以下是对一些常见疑惑的专业解答:

  1. 连接复用:gRPC默认支持连接复用,即通过单个连接发送多个请求和接收多个响应。这减少了连接建立和关闭的开销,提高了性能。确保客户端和服务端配置正确以启用此功能。

  2. 负载均衡:gRPC客户端支持多种负载均衡策略,如轮询、随机和基于权重的选择等。根据需求选择合适的策略,并在客户端配置中指定。

  3. 超时与重试:为gRPC调用设置合理的超时时间,以避免长时间等待无响应的服务。同时,配置重试策略以处理瞬时故障,提高服务的可用性。

  4. 连接池:虽然gRPC没有显式的连接池概念,但通过连接复用和负载均衡,它实现了类似连接池的效果。如果需要更复杂的连接管理,可以考虑在客户端实现自定义的连接池逻辑。

  5. 健康检查:定期检查服务健康状态,确保gRPC连接指向的是可用的服务端实例。这可以通过健康检查服务或自定义逻辑实现。

  6. 安全性:使用TLS加密gRPC连接,以保护数据传输的安全。配置正确的证书和密钥,确保客户端和服务端之间的安全通信。

总之,在使用gRPC调用服务时,合理管理连接是确保高效、可靠通信的关键。根据具体需求配置和优化连接相关参数,以达到最佳性能。

回到顶部