GRPC 调用服务时候的连接的一些疑惑

2020-12-03 23:09:03 +08:00
 wunonglin

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

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

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

1500 次点击
所在节点    Go 编程语言
5 条回复
Jooooooooo
2020-12-03 23:12:08 +08:00
这种往下看还是 tpc

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

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

(当然更细节的看也有自动回收 idle 连接, 断开无效连接等等逻辑
wunonglin
2020-12-04 10:56:48 +08:00
@Jooooooooo #1

对了,因为我是用注册中心的
这样的话是可以拿 N 个服务的地址分别创建多个 conn 组成连接池,还是只是拿一个地址创建多个 conn 比较好点?
Jooooooooo
2020-12-04 11:12:09 +08:00
@wunonglin 得拿多个地址创建链接, 要不然你的负载均衡就没了.

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

一般来讲集群机器数量不是特别多的情况下 (超过 5000), 和每个机器都弄个连接池成本也不大
wunonglin
2020-12-04 11:18:25 +08:00
@Jooooooooo #3

噢噢,我还以为是要等原本的链接挂了才去注册中心拿新的。。
joesonw
2020-12-04 13:57:21 +08:00
你这是要 GRPC LoadBalancer
1. grpc dialOptions 里面可以用自己的 resolver 去解析地址, 可以参考这里 https://github.com/sercand/kuberesolver
2. 可以上 envoy 之类的, 对于你客户端来说是透明的, 只有一个地址. envoy 可以做 load balancing

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/731931

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX