问题描述:
使用nebula-go连接池管理session
创建一个全局连接池,session使用goroutine并发执行报错
这是一个使用问题,所以我从需求分类捞出来改成使用问题了,然后这边补充下 连接池的config 的信息哈,方便研发们进一步地解决问题。
根据上述的实现,导致报错的原因是:
你把启动 goroutine 的过程放在了 for 循环的内部,当并发量大的时候,nGQL 执行需要一些时间,这样在短时间内就会将所有 connection pool 中的连接消耗殆尽,后面并发来的请求就获取不到连接了。
我觉得可能有几种解决方式:
tag
channel 中的数据分发给上面固定数量的 goroutine,分发的方式可以是每个 goroutine 还有个 channel 比如 sessCh,然后把 tagCh 的数据轮训给每个 sessCh。我们的初衷是不希望每执行一条语句就产生一个新的 session,因为这里会涉及到用户密码认证等开销,在高并发的场景下是不可接受的。