記錄一次成功的數據源熱切換

1. 需求場景

      因業務線越做越大,需要將數據庫進行拆分隔離。因此梳理已有的十餘個服務,需要進行兩種方式的拆分。一種是整個服務的數據源全量遷移,一種是服務中庫表需部分遷移,需做雙數據源。

      接着分析發現需做雙數據源的服務屬於基礎服務,更新不會很頻繁,因此做靜態上線——即配置雙數據源。dba做表全量遷移,之後服務發佈上線。需要數據源全量遷移的服務屬於實時要求高的服務,訪問量高,不可停機維護。因此採用熱切換。

2. 前期準備

     1. 代碼部分: 使用Spring提供的AbstractRoutingDataSource類,進行對當前數據源的監聽。另外新寫切面判斷apollo開關是否開啓,如開啓則使用新數據源。

     需要注意,部分註解會使AbstractRoutingDataSource的動態數據源監聽失效,如@Transaction註解。因爲事務註解的執行順序優先於自己建的切換數據源的切面,此時需要配置order順序保證數據源切換優先執行。

     2. dba準備:    在切換的前五分鐘做好從老庫到新庫的雙寫,保證新庫數據的同步性。在切換後做老庫和新庫流量的監控。

3. no bb, show me code

git地址: https://github.com/bkxpao/datasource-switch

目前線上已成功熱切換, 求star :)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章