https://github.com/javahub/dynamic-datasourcejava
應用程序須要操做多個數據庫,企業場景一般爲多租戶操做mysql
proxy能夠提供一個相似mysql的協議,透明進行。360的proxy,mycat,oneproxy均可以實現相似效果。客戶端從鏈接數的損耗來說,不具有優點。算法不管怎麼寫,都存在分散資源,沒法統一管理的效果,站在資源利用率角度,proxy能夠統一管理全部連接,更優,而且因爲自己透明,應用層複雜度下降。git
客戶端的動態數據源方案,直接jdbc處理,不會有proxy的bug機率,方案上對更簡單能夠簡單作到作到動態性好比動態增長數據源,更簡單易用github
數據結構針對固定數據源,鏈接池底層都會跑好幾個線程,對應咱們不肯定量的多數據源數量,好比企業上千數據源,而後相乘每個都會開幾個線程,基本幾千線程,會爆掉。算法
固然也能夠更改已有數據庫鏈接池的數據結構,支持動態多數據源方案,但自己就不是一個維度,基本等於重寫。sql
識別冷數據,須要一個清理線程按期清理閒置連接。數據庫
識別熱數據(使用頻繁的租戶動態新增連接成倍建立),提供更好的性能。數據結構
配置變動響應(更新與增長配置)。好比用zookeeper的watcher方式來進行更新通知,不過這個藉口時外部使用者應該考慮,響應更變事件,來對已有生成的性能
可監控性:收集線程統一收集監控信息,當前應用的鏈接池的配置與。須要按期發送鏈接池狀態,便於分析。線程
收集線程對比服務端能動態調整應用鏈接池配置。