主從同步一致性解決方案

背景

讀寫分離提高了資源的利用效率的同時(shí)也引出了一個(gè)問題,就是由于延時(shí)(網(wǎng)絡(luò)傳輸,操作)而引起的數(shù)據(jù)庫主從不一致的問題,對(duì)于這個(gè)問題,給一下集中解決方案。

半同步復(fù)制

  • 先對(duì)主庫進(jìn)行一個(gè)寫操作
  • 等主從同步完成,寫主庫的請(qǐng)求才返回
  • 讀從庫,讀到最新的值

優(yōu)點(diǎn):利用數(shù)據(jù)庫原生功能,比較簡(jiǎn)單
缺點(diǎn):主庫的寫請(qǐng)求時(shí)延會(huì)增長(zhǎng),吞吐量會(huì)降低

數(shù)據(jù)庫中間件

  • 所有的讀寫都走數(shù)據(jù)庫中間件,通常情況下,寫請(qǐng)求路由到主庫,讀請(qǐng)求路由到從庫
  • 記錄所有路由到寫庫的key,在主從同步時(shí)間窗口內(nèi)(假設(shè)是500ms),如果有讀請(qǐng)求訪問中間件,此時(shí)有可能從庫還是舊數(shù)據(jù),就把這個(gè)key上的讀請(qǐng)求路由到主庫
  • 主從同步時(shí)間過完后,對(duì)應(yīng)key的讀請(qǐng)求繼續(xù)路由到從庫

優(yōu)點(diǎn):能保證絕對(duì)一致
缺點(diǎn):數(shù)據(jù)庫中間件的成本比較高

緩存記錄寫key

當(dāng)寫請(qǐng)求發(fā)生的時(shí)候:

  • 當(dāng)某個(gè)key要發(fā)生寫操作時(shí),記錄在緩存里,設(shè)置緩存超時(shí)時(shí)間為主從同步時(shí)間,假設(shè)為500ms
  • 修改數(shù)據(jù)庫

當(dāng)讀請(qǐng)求發(fā)生的時(shí)候:

  • 先到緩存里查看有沒有對(duì)應(yīng)的key
  • 如果有,說明這個(gè)key上剛發(fā)生過寫操作,此時(shí)直接從緩存中讀取值并返回
  • 如果沒有,說明這個(gè)key上近期沒有發(fā)生過寫操作,此時(shí)將請(qǐng)求路由到從庫,繼續(xù)讀寫分離

優(yōu)點(diǎn):相對(duì)數(shù)據(jù)庫中間件,成本較低
缺點(diǎn):引入了一個(gè)緩存組件,并且讀寫數(shù)據(jù)庫時(shí)都多了一步讀寫緩存操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容