nebula-go 连接池

问题描述:

使用nebula-go连接池管理session

创建一个全局连接池,session使用goroutine并发执行报错

这是一个使用问题,所以我从需求分类捞出来改成使用问题了,然后这边补充下 连接池的config 的信息哈,方便研发们进一步地解决问题。

配置就是默认的配置,不知道我这么写有没有什么问题哦:smile:

1 个赞

1 个赞

根据上述的实现,导致报错的原因是:

你把启动 goroutine 的过程放在了 for 循环的内部,当并发量大的时候,nGQL 执行需要一些时间,这样在短时间内就会将所有 connection pool 中的连接消耗殆尽,后面并发来的请求就获取不到连接了。

我觉得可能有几种解决方式:

  1. 在获取 session 的地方阻塞,只有获取到连接了再执行,获取不到就阻塞直到下次获取到连接。
  2. 事先启动好固定数量 goroutine,每个 goroutine 内部持有一个 session,然后把 tag channel 中的数据分发给上面固定数量的 goroutine,分发的方式可以是每个 goroutine 还有个 channel 比如 sessCh,然后把 tagCh 的数据轮训给每个 sessCh。

我们的初衷是不希望每执行一条语句就产生一个新的 session,因为这里会涉及到用户密码认证等开销,在高并发的场景下是不可接受的。

2 个赞