连接池熔断机制

SequoiaDB 巨杉数据库服务端默认为每个连接创建会话线程以处理请求任务,随着会话线程越来越多,线程切换开销会越来越大,系统占用资源也会随着增加。连接池通过有效管理客户端大量连接,能够有效减少开销,并且还可以通过指定不同的连接获取策略,从而达到提升性能效果。总体而言,连接池有两大优势:

  • 快速获取连接请求实例
  • 灵活地指定获取连接策略,有效实现连接管理

连接会话线程过多会增加系统资源的占用,为了管控系统资源,保证 SequoiaDB 服务端的连接请求控制在一定范围内,通常需要对连接池的最大连接数进行控制。

另外一方面,为了实现更好的连接请求分流,SequoiaDB 连接池会用地址列表保存集群中所有协调节点的地址,然后根据不同的分配策略获取连接,在地址列表中的协调节点异常时,通常需要移除异常节点,以实现连接的获取效率。

本文档从这两方面进行介绍说明,帮助用户深入了解连接池相关原理。

最大连接数

在初始化时,可以通过连接池的 sdbDataSourceConf 类进行配置相关参数,该类中的方法 setConnCntInfo 可以指定最大连接数,配置的更多使用方法可参见 Java驱动->连接池

  1. public class Datasource {
  2. public static void main(String[] args) throws InterruptedException {
  3. ArrayList<String> addrs = new ArrayList<String>();
  4. String user = "";
  5. String password = "";
  6. ConfigOptions nwOpt = new ConfigOptions();
  7. DatasourceOptions dsOpt = new DatasourceOptions();
  8. SequoiadbDatasource ds = null;
  9. // 设置连接池参数
  10. dsOpt.setMaxCount(500); // 连接池最多能提供500个连接。
  11. ……
  12. }
  13. ……

dsOpt.setMaxCount(500) 方法的参数500即为最大连接数。

当客户端连接请求数量达到了指定的最大连接数时,后续的新连接获取则需要进行等待,具体的等待时间可以在获取连接时进行指定(默认等待时间5s),还可以设置失败连接后的重试时间,更多使用方法可参见 Java驱动->连接池

  1. Sequoiadb db = null;
  2. // 设置网络参数
  3. nwOpt.setConnectTimeout(500); // 建连超时时间为500ms。
  4. nwOpt.setMaxAutoConnectRetryTime(0); // 建连失败后重试时间为0ms。

nwOpt.setConnectTimeout 方法的参数 timeOut 即为等待超时时间,单位ms。当等待时间达 timeOut 时,如果连接池中有以被获取的连接被释放成为了空闲连接,那么可以获取成功,否则获取失败。

nwOpt.setMaxAutoConnectRetryTime 可设置失败重试时间,以在获取失败后多少时间后进行重试。

连接池参数配置和连接获取的完整代码可参考 Java驱动->连接池

协调节点异常处理

连接池的连接策略 sdbDataSourceStrategy 类中,有个类成员变量地址列表,以保存 SequoiaDB 集群的所有协调节点的地址。

在初始化时,用户可以通过指定所有的协调节点地址,也可以指定其中一个。然后开启自动同步协调节点地址功能,连接池会自动进行同步保存所有协调节点地址。在后续操作中,还可以不断通过 addCoord 方法新添协调节点地址。下面为指定所有协调节点的地址的方式,更多使用可参考 Java驱动->连接池

  1. // 提供coord节点地址
  2. addrs.add("192.168.10.1:11810");
  3. addrs.add("192.168.10.2:11810");
  4. addrs.add("sdbserver01:11810");

当连接池地址列表中其中一个协调节点异常,导致从该节点上获取新的连接请求失败时,连接池为了保持连接请求获取效率,会及时将其地址从地址列表中移除,然后后续不再尝试从该节点获取新连接。

SequoiaDB 连接池有效地提升了连接获取效率,并提供大量连接时不同策略的连接管理,从而在整体上提升了客户端和服务端性能。限制最大连接数范围,能够很好的实现对系统资源进行管控;在协调节点异常时,及时移除异常节点,很好的保证了连接获取效率。