源码github地址
https://github.com/javahub/dynamic-datasource
需求
应用程序需要操作多个数据库,企业场景通常为多租户操作
proxy与客户端方案对比
proxy可以提供一个类似mysql的协议,透明进行。360的proxy,mycat,oneproxy都可以实现类似效果。客户端从连接数的损耗来讲,不具备优势。算法无论怎么写,都存在分散资源,无法统一管理的效果,站在资源利用率角度,proxy可以统一管理所有链接,更优,并且由于本身透明,应用层复杂度降低。
客户端的动态数据源方案,直接jdbc处理,不会有proxy的bug概率,方案上对更简单可以简单做到做到动态性比如动态增加数据源,更简单易用
现有数据源方案
数据结构针对固定数据源,连接池底层都会跑好几个线程,对应我们不确定量的多数据源数量,比如企业上千数据源,然后相乘每一个都会开几个线程,基本几千线程,会爆掉。
当然也可以更改已有数据库连接池的数据结构,支持动态多数据源方案,但本身就不是一个维度,基本等于重写。
如何设计一个动态链接池
识别冷数据,需要一个清理线程定期清理闲置链接。
识别热数据(使用频繁的租户动态新增链接成倍创建),提供更好的性能。
配置变更响应(更新与增加配置)。比如用zookeeper的watcher方式来进行更新通知,不过这个借口时外部使用者应该考虑,响应更变事件,来对已有生成的
可监控性:收集线程统一收集监控信息,当前应用的连接池的配置与。需要定期发送连接池状态,便于分析。
收集线程对比服务端能动态调整应用连接池配置。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。