線上數據平滑遷移思考及拙見

前言

服務重構,老版系統爲php代碼,新版系統改成Java。
數據層面沿用以前老版服務的數據庫結構,部分庫字段進行修改。php

最終目的:服務實現切換,數據實現切換(老庫到新庫),不能停機升級,儘可能減少對用戶影響。數據庫

實現方案:日誌追加
下面具體說一下本身的實現方案,可能會有紕漏的地方,僅作參考。工具

日誌追加法

  1. 步驟一
    經過用戶執行的新增、修改、刪除操做,記錄到日誌文件中,old_db再也不寫入新數據。
    日誌的格式統一爲被修改的庫、被修改的表、被修改的字段等信息。
    保證日誌的統一性,方便日誌同步服務同步數據。
    日誌

  2. 步驟二
    開發一個數據同步服務syn-data-service,將舊庫的數據同步到新庫中。
    server

  3. 步驟三
    當數據同步完畢後,將new-service設置爲暫不可寫數據(日誌同步很快,會犧牲部分用戶體驗)。 且開發一個日誌同步工具syn-log-service,將日誌同步到新庫中
    blog

4,步驟四
開發一個compare-service,進行數據校驗
開發

5,步驟五
數據沒有問題後切換爲new-db,用戶執行的新增、修改、刪除 雙寫到日誌和new_db中。
同步

6,步驟六
兜底策略:若是發現數據有大規模不一致或者大規模數據丟失的狀況,能夠經過日誌回寫到old_db中,而後切換服務到old_server。用戶體驗

大體步驟如上所示,可能有考慮不周全的地方,這裏只是短期的犧牲了用戶的體驗來完整數據同步的一致性。
步驟六是我多加的一個步驟,作任何事情都要想一個兜底策略,這也是我最近感觸最深的一點體驗。用於不要過度相信依賴的調用方,作好plan b。bfc

相關文章
相關標籤/搜索