mysql數據庫主從同步的3種一致性方案實現,以及優劣比較


方法1:半同步復制

介於異步復制和同步復制之間,主庫在執行完客戶端提交的事務后不會立即返回給客戶端,
而是至少要等到一個從庫接收並寫到redo log中,才會返回給客戶端,相對於異步復制,半同步復制提高了數據的安全性

  • 半同步復制原理
    事務在主庫寫完binlog后,需要從庫返回一個已接收,才能返回給客戶端
    確保事務提交后binlog至少傳輸到一個從庫
    不保證從庫應用完這個事務的binlog
    優點:利用數據庫原生功能,比較簡單
    缺點:主庫的寫請求時延會增長,吞吐量會降低

方法2:數據庫中間件

流程

  1. 所有的讀寫請求都走數據庫中間件,通常情況下寫請求走主庫,讀請求走從庫
  2. 記錄所有路由到寫庫的key, 如果在主從同步的窗口內(假設500ms),有讀請求過來了,
    此時從庫有可能還是舊的數據,就需要將key上的讀請求路由到主庫訪問
  3. 在主從同步時間過完后,對應key的讀請求繼續路由到從庫
    優點:能保證絕對一致,
    缺點:數據庫中間件的成本較高

方法3:緩存記錄寫key法

  • 寫請求
  1. 如果key要發生寫操作,記錄到cache里,設置主從同步的緩存超時時間,比如500ms
  2. 然后修改主數據庫
  • 讀請求
  1. 先到緩存里查,對應key有沒有相關數據
  2. 如果有,說明緩存命中,這個key剛剛發生過寫操作,此時需要將請求路由主庫讀取最新的數據
  3. 如果沒有,說明緩存沒有命中,說明這個key近期沒有發生過寫操作,此時將請求路由到從庫,繼續讀寫分離
    優點:相對數據庫中間件,成本較低
    缺點:為了保證一致性,引入了cache組件,並且讀寫數據庫時都多了緩存操作

參考文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM