gprc自带多路复用,项目初期除非是对已有大流量项目改造升级,不必要一定上连接池,不但增加额外复杂度,实际可能靠单连接就能扛住,从结果角度就可能是无用功。具体要不要,压测一下实际性能,根据预估流量进行评估即可。一个数据是单连接支持8w qps没有问题,可以大概作为指标。高并发情况下,单连接会有上限,需要根据情况适当扩展连接池。但是并非越多越好,这个要看业务具体确定。
MySQL 连接池这种是单个连接只能负载一个并发,没有可用连接时会阻塞执行,并发跟不上的时候连接池相应调大点。然而 grpc 的 HTTP2 连接有复用能力,N 个 goroutine 用一个 HTTP2 连接没有任何问题,不会单纯因为没有可用连接而阻塞执行。grpc 内建的 balancer 已经有很好的连接管理的支持了,每个后端实例一个 HTTP2 物理连接,而且可以用插件扩展,如果希望对单个后端实例创建多个 HTTP2 连接,小改个 balancer 插件即可。
grpc不是通信协议,底层是http2协议,http2协议只需要一个tcp连接。
grpc和http2俩个团队哭死在你怀里。
https://github.com/flyaways/pool
Pool 用于管理客户端到服务集群之间的连接.
Pool的主要功能:
通用连接池 - Pool for GRPC,RPC,TCP.support RPC timeout.
支持集群 - Connet to Cluster.
动态更新 - Danamic update targets.
Pool runs on Linux, Mac OS X, and Windows.
声明:当前使用随机数策略达到动态负载均衡.
https://studygolang.com/articles/19777
http://xiaorui.cc/archives/6001
https://blog.csdn.net/java06051515/article/details/103767741
https://github.com/fatih/pool