动态多数据源的连接池分析

源码github地址

https://github.com/javahub/dynamic-datasource

需求

应用程序需要操作多个数据库,企业场景通常为多租户操作

proxy与客户端方案对比

  1. proxy可以提供一个类似mysql的协议,透明进行。360的proxy,mycat,oneproxy都可以实现类似效果。客户端从连接数的损耗来讲,不具备优势。算法无论怎么写,都存在分散资源,无法统一管理的效果,站在资源利用率角度,proxy可以统一管理所有链接,更优,并且由于本身透明,应用层复杂度降低。

  2. 客户端的动态数据源方案,直接jdbc处理,不会有proxy的bug概率,方案上对更简单可以简单做到做到动态性比如动态增加数据源,更简单易用

现有数据源方案

  1. 数据结构针对固定数据源,连接池底层都会跑好几个线程,对应我们不确定量的多数据源数量,比如企业上千数据源,然后相乘每一个都会开几个线程,基本几千线程,会爆掉。

  2. 当然也可以更改已有数据库连接池的数据结构,支持动态多数据源方案,但本身就不是一个维度,基本等于重写。

如何设计一个动态链接池
  1. 识别冷数据,需要一个清理线程定期清理闲置链接。

  2. 识别热数据(使用频繁的租户动态新增链接成倍创建),提供更好的性能。

  3. 配置变更响应(更新与增加配置)。比如用zookeeper的watcher方式来进行更新通知,不过这个借口时外部使用者应该考虑,响应更变事件,来对已有生成的

  4. 可监控性:收集线程统一收集监控信息,当前应用的连接池的配置与。需要定期发送连接池状态,便于分析。

  5. 收集线程对比服务端能动态调整应用连接池配置。

你可能感兴趣的:(连接池)