V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
wunonglin
V2EX  ›  Go 编程语言

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

  •  
  •   wunonglin · 2020-12-03 23:09:03 +08:00 · 1494 次点击
    这是一个创建于 1232 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    5 条回复    2020-12-04 13:57:21 +08:00
    Jooooooooo
        1
    Jooooooooo  
       2020-12-03 23:12:08 +08:00   ❤️ 1
    这种往下看还是 tpc

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

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

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

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

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

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

    噢噢,我还以为是要等原本的链接挂了才去注册中心拿新的。。
    joesonw
        5
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3417 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:06 · PVG 08:06 · LAX 17:06 · JFK 20:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.