引言 過年的時候做過一個很簡單的動態數據源的模塊,給公司的一個新項目使用了,同時公司另外一個項目也參考了我做的動態數據源的設計,目前大家對我做的這個模塊還是比較認可的,但是也存在一些問題: 1. 對 load blance 的支持不夠 在先期設計的時候沒有考慮集群的情況,導致存儲在資料庫的數據源信息 ...
引言
過年的時候做過一個很簡單的動態數據源的模塊,給公司的一個新項目使用了,同時公司另外一個項目也參考了我做的動態數據源的設計,目前大家對我做的這個模塊還是比較認可的,但是也存在一些問題:
對 load blance 的支持不夠
在先期設計的時候沒有考慮集群的情況,導致存儲在資料庫的數據源信息的狀態等信息一旦被其中一臺機器修改,其他的機器就不能知曉這條數據被修改過。目前的解決方案是當一臺機器修改數據的時候把修改的數據放在redis,另外一臺機器先去讀取redis中的數據,然後再去看資料庫中的數據,其缺點就是就只能兩台機器在跑了對動態修改、刪除和添加新的數據源信息不友好
目前動態數據源的信息都是存在資料庫中,如果要修改、刪除和添加數據源信息,那麼將通過job定期調整,但是如果需要緊急調整數據源信息,只能重啟
擴展性不太好
舉個例子,我寫的動態數據源使用了Hikaricp,如果其他項目使用了其他數據源框架,那麼想要改起來比較麻煩。
想法
我希望可以設計一套動態數據源模塊,可以更好的適用於現有的項目,同時可以輕鬆將來的擴展,幫助到別人。
我希望可以做到:
- 很好的支持不同的數據源框架,主要是C3P0和Hikaricp(項目中主要使用這兩個)
- 很好支持多台機器部署的情況
- 提供一套很好的UI模板去輔助後端開發人員去開發一套系統運維人員修改、刪除和添加數據源信息
- 儘可能去降低Spring框架的依賴(目前還是直接使用Spring Boot的技術做擴展吧)
- 。。。(等項目遇到了在加)
而我不想做到的是:
- 支持事務,動態數據源的事務管理真的很難,涉及到的數據源越多,難度越大,超過了我的能力
- 最低支持Java8,不想相容Java8以下的版本,但是應該儘可能方便別人通過魔改代碼去支持Jdk8以下的版本
- 半途而廢
那麼現在我想做到的是:在Spring Boot2的基礎上實現動態數據源,同時可以支持至少三台機器部署的情況
總結
未來很美好,只是需要我們去腳踏實地。