日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL数据库主从同步的3种一致性方案实现,及优劣比较

發(fā)布時間:2024/7/5 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL数据库主从同步的3种一致性方案实现,及优劣比较 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

數(shù)據(jù)主從同步的由來

互聯(lián)網(wǎng)的很多業(yè)務(wù),特別是在高并發(fā)的場景下,基本都是讀遠遠大于寫,如果數(shù)據(jù)庫讀和寫的壓力都同在一臺主機上,這顯然不太合理。

于是,把一臺數(shù)據(jù)庫主機分為單獨的一臺寫主庫(主要負責(zé)寫操作),而把讀的數(shù)據(jù)庫壓力分配給讀的從庫,而且讀從庫可以變?yōu)槎嗯_,這就是讀寫分離的典型場景如下:

為了進一步的降低數(shù)據(jù)庫端的壓力(高并發(fā)的瓶頸),這個時候也會在業(yè)務(wù)層部署分布式緩存集群(redis、memcached)等,把讀的壓力轉(zhuǎn)移給應(yīng)用服務(wù)器端,其實與數(shù)據(jù)主從的設(shè)計是遵循同一個原則,降低后端數(shù)據(jù)庫的壓力。

問題:

讀寫分離提高了資源的利用效率的同時也引出了一個問題,就是由于延時(網(wǎng)絡(luò)傳輸,操作)而引起的數(shù)據(jù)庫主從不一致的問題,以下會詳細談相關(guān)的數(shù)據(jù)一致性解決方案。

數(shù)據(jù)同步一致性解決方案

1.半同步復(fù)制

辦法就是等主從同步完成之后,等主庫上的寫請求再返回,這就是常說的“半同步復(fù)制”。

實現(xiàn)方案

mysql的半同步復(fù)制方案,下面我以mysql為例介紹。

MySQL半同步復(fù)制

MySQL的Replication默認是一個異步復(fù)制的過程,從MySQL5.5開始,MySQL以插件的形式支持半同步復(fù)制,我先談下異步復(fù)制,這樣可以更好的理解半同步復(fù)制。

1)異步復(fù)制

MySQL默認的復(fù)制是異步的,主庫在執(zhí)行完客戶端提交的事務(wù)后會立即將結(jié)果返給給客戶端,并不關(guān)心從庫是否已經(jīng)接收并處理,這樣就會有一個問題,主如果crash掉了,此時主上已經(jīng)提交的事務(wù)可能并沒有傳到從庫上。

2)半同步復(fù)制

介于異步復(fù)制和全同步復(fù)制之間,主庫在執(zhí)行完客戶端提交的事務(wù)后不是立刻返回給客戶端,而是等待至少一個從庫接收到并寫到relay
log中才返回給客戶端。相對于異步復(fù)制,半同步復(fù)制提高了數(shù)據(jù)的安全性,同時它也造成了一定程度的延遲,這個延遲最少是一個TCP/IP往返的時間。所以,半同步復(fù)制最好在低延時的網(wǎng)絡(luò)中使用。

半同步復(fù)制原理:

  • 事務(wù)在主庫寫完binlog后需要從庫返回一個已接受,才放回給客戶端
  • mysql5.5版本以后,以插件的形式存在,需要單獨安裝
  • 確保事務(wù)提交后binlog至少傳輸?shù)揭粋€從庫
  • 不保證從庫應(yīng)用完成這個事務(wù)的binlog
  • 性能有一定的降低
  • 網(wǎng)絡(luò)異常或從庫宕機,卡主庫,直到超時或從庫恢復(fù)

該方案優(yōu)點:

利用數(shù)據(jù)庫原生功能,比較簡單

該方案缺點:

主庫的寫請求時延會增長,吞吐量會降低


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

流程:

1)所有的讀寫都走數(shù)據(jù)庫中間件,通常情況下,寫請求路由到主庫,讀請求路由到從庫

2)記錄所有路由到寫庫的key,在主從同步時間窗口內(nèi)(假設(shè)是500ms),如果有讀請求訪問中間件,此時有可能從庫還是舊數(shù)據(jù),就把這個key上的讀請求路由到主庫。

3)在主從同步時間過完后,對應(yīng)key的讀請求繼續(xù)路由到從庫。

相關(guān)的中間件有:

1)canal:是阿里巴巴旗下的一款開源項目,純Java開發(fā),基于數(shù)據(jù)庫增量日志解析,提供增量數(shù)據(jù)訂閱&消費,目前主要支持了MySQL。

2)otter:也是阿里開源的一個分布式數(shù)據(jù)庫同步系統(tǒng),尤其是在跨機房數(shù)據(jù)庫同步方面,有很強大的功能。它是基于數(shù)據(jù)庫增量日志解析,實時將數(shù)據(jù)同步到本機房或跨機房的mysql/oracle數(shù)據(jù)庫。

兩者的區(qū)別在于:

otter目前嵌入式依賴canal,部署為同一個jvm,目前設(shè)計為不產(chǎn)生Relay Log。

otter目前允許自定義同步邏輯,解決各類需求。

該方案優(yōu)點

能保證絕對一致

該方案缺點:

數(shù)據(jù)庫中間件的成本較高


緩存記錄寫key法

寫流程:

1)如果key要發(fā)生寫操作,記錄在cache里,并設(shè)置“經(jīng)驗主從同步時間”的cache超時時間,例如500ms

2)然后修改主數(shù)據(jù)庫

讀流程:

1)先到緩存里查看,對應(yīng)key有沒有相關(guān)數(shù)據(jù)

2)有相關(guān)數(shù)據(jù),說明緩存命中,這個key剛發(fā)生過寫操作,此時需要將請求路由到主庫讀最新的數(shù)據(jù)。

3)如果緩存沒有命中,說明這個key上近期沒有發(fā)生過寫操作,此時將請求路由到從庫,繼續(xù)讀寫分離。

該方案優(yōu)點:

相對數(shù)據(jù)庫中間件,成本較低

該方案缺點:

為了保證“一致性”,引入了一個cache組件,并且讀寫數(shù)據(jù)庫時都多了緩存操作。

以上就是數(shù)據(jù)庫主從同步一致性方案詳解,更多分布式大數(shù)據(jù)分布式文件系統(tǒng)和分布式數(shù)據(jù)庫的一致性可以參考:

阿里P8架構(gòu)師談:分布式數(shù)據(jù)庫數(shù)據(jù)一致性的原理、與技術(shù)實現(xiàn)方案

你可能也喜歡:

  • 阿里P8架構(gòu)師談:MySQL行鎖、表鎖、悲觀鎖、樂觀鎖的特點與應(yīng)用
  • 阿里P8架構(gòu)師談:MySQL有哪些存儲引擎,各自的優(yōu)缺點,應(yīng)用場景
  • 阿里P8架構(gòu)師談:架構(gòu)設(shè)計之?dāng)?shù)據(jù)庫垂直、水平拆分六大原則
  • 阿里P8架構(gòu)師談:MySQL數(shù)據(jù)庫的索引原理、與慢SQL優(yōu)化的5大原則
  • 阿里P8架構(gòu)師談:分布式系統(tǒng)全局唯一ID簡介、特點、5種生成方式
  • 最全MySQL面試60題和答案

  • 總結(jié)

    以上是生活随笔為你收集整理的MySQL数据库主从同步的3种一致性方案实现,及优劣比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。