資料庫讀寫分離時,主從延時導致資料不一致的解決方案

2021-10-13 20:54:00 字數 1348 閱讀 9689

引入主從架構,資料讀寫分離,目的是為了解決業務快速發展,請求量變大,併發量變大,從而引發的資料庫的讀瓶頸。不過當引入新乙個架構解決問題時,勢必會帶來另外乙個問題,資料庫讀寫分離之後,主從延遲從而導致資料不一致的情況。

公司業務發展的前期,由於資料訪問量小,這時我們可以直接採用單庫的架構,承載所有的訪問請求。不過因為存在單點的問題。若資料庫出現故障,這段期間業務將會不可用。

這時我們可以增加乙個備庫,實時同步主庫的資料

一旦主庫出了故障,通過人工的方式,手動地將主機下線,將備機改為主機來繼續提供服務。這種架構,部署維護簡單,業務開發也無需任何改造。不過缺點也很明顯,備庫只有在主庫有問題的時候才會被啟用,存在一定的資源浪費的情況。

隨著業務發展,請求量不斷變大,資料量也不斷變大,業務變得更加複雜,很快資料將會到達瓶頸。

由於大多數業務都是讀多寫少,所以資料庫讀時最容易成為系統瓶頸。

這時候我們可以採用以下方案提高讀的效能:增加從例項,主從同步,資料讀寫分離。

這個架構與主備區別不大,主要區別在於主從架構下,從庫與主庫一樣,時刻需要幹活,主庫提供寫服務,從庫只提供讀服務。

如果後續讀的壓力還是太大,我們還可以增加從庫的數量,水平擴充讀的能力。

雖然主從架構幫我們解決讀的瓶頸,但是由於主從之間需要資料同步,這自然就存在一定延時。在這延時視窗期內,從庫的讀只能讀到舊資料。

主從資料同步方案,一般都是採用的非同步方式同步給備庫。我們可以將其修改為同步方案,主從同步完成,主庫上的寫才能返回。

業務系統發起寫操作,資料寫主庫;

寫請求需要等待主從同步完成才能返回;

資料讀從庫,主從同步完成就能讀到最新資料。

這種方案,我們只需要修改資料庫之間同步配置即可,業務層無需修改,相對簡單。但隨著從庫的資料增加,由於主庫寫需要等待主從完成,寫請求的時延將會增加,吞吐量將會降低。

寫請求發往主庫,同時快取記錄操作的 key,快取的失效時間設定為主從的延時;

讀請求首先判斷快取是否存在:

這種方案相對中介軟體的方案成本較低,但是又引入乙個快取元件,所有讀寫之間就又多了一步快取操作,整體複雜度變高,業務開發也變得複雜。

資料庫讀寫分離主從間資料同步延時怎麼保證資料一致性

資料庫讀寫分離主從間資料同步延時怎麼保證資料一致性 在gfd 1.緣起 網際網路專案架構中,經常會在專案中配置多個資料來源進行資料庫的讀寫分離以此來提高資料庫操 作效能,區間範圍內的 規避資料庫瓶頸,提公升資料庫應用效能 不通常資料庫都是一主多從 或多 主多從 亦或 mysq ha 中的多主多從 集...

資料庫的主從複製,讀寫分離。

相信作為乙個伺服器端開發者,資料庫是 必修的一門課 今天主要講講什麼是資料庫的主從同步,讀寫分離。在 古代 網際網路剛起步的時候,資料庫中儲存的資料是很小的,一台資料庫完全可以搞定一切,隨著時間的推移,網際網路作為連線一切的中介,世界上任何乙個地方的人都可以訪問你的 並且隨著網際網路經濟的急速擴張,...

解決資料庫讀寫分離的延時問題 redis

主從延時解決辦法 總結資料庫採用主從架構,資料讀寫分離,資料查詢走的是從庫。資料寫入都是直接操作主庫,後續再同步到從庫。由於資料庫同步存在延時,這就導致資料同步的這段時間,主從資料將會不一致,從庫無法查詢到最新的資料。如果你之前的資料庫系統架構是單庫或者主備結構,當你第一次轉到資料讀寫分離架構,這個...