資料庫讀寫分離主從間資料同步延時怎麼保證資料一致性
在gfd
1.緣起:
網際網路專案架構中,經常會在專案中配置多個資料來源進行資料庫的讀寫分離以此來提高資料庫操·
作效能,區間範圍內的 規避資料庫瓶頸,提公升資料庫應用效能;不通常資料庫都是一主多從 或多
主多從 亦或 mysq ha 中的多主多從 集群;當主從資料庫進行資料同步時 是有一定延遲的,尤
其是網路抖動或者 其他原因造成 主從資料庫資料不一致問題。那麼這種問題如何解決呢?
2.資料庫讀寫分離時 資料一致性保證
一切脫離了業務場景的架構設計都是耍流氓。。。
首先我們要確認這種主從同步延遲導致的 讀寫分離資料不一致性問題會不會對業務產生影響,影
響多大,業務能不能容忍,由以上維度可以推導出一下幾種場景:
2.1 業務能夠容忍資料不一致;
有容奶大。。。。
2.2 業務要求強一致性,不能容忍這種不一致;
舉個栗子:
銀行系統,扣費業務。 a使用者的賬戶餘額查詢 與扣費更新賬戶餘額在乙個事物中,
那麼在查詢從庫,更新主庫,當剛好併發存款時就有可能會出現賬戶金額查詢結果
不一致問題。業務上是絕對不允許的。
如此,怎麼破?-- 簡單粗暴的處理方案直接讀主庫,首先分析下 公司的這種業務的
場景 都是這樣要求強一致性的嗎?還是只有其中某幾個? 那麼分析後便可有針對
性的 對要求強一致的業務操作進行主庫查詢主庫更新。
2.3 業務強一致性,不能容忍不一致,的另外一種實現方案;
首先 分析下 從庫讀取操作場景。 為什麼會不一致? 因為主從同步有延遲,同步頻率是
個配置資料庫主從同步的屬性可配置的,那麼我們預設讓他1秒鐘同步一次。那麼這種
延遲導致資料不一致就是發生在這一秒鐘之內的未同步而已。
承接上述場景 極端一點,假如我在讀取從庫時距離主從同步發生還差0.0001毫秒,也就
是說在這個0.0001 毫秒之後我就可以在從庫中讀取到主從一致的資料了。解決主從同步
導致資料不一致的切入點就在這裡。
借助redis 這個緩衝中介軟體。我們按照某種規則將新增的更新的(此種操作都會發生在
主庫操作上)資料按照 使用者id+業務id+其他業務維度 做成key 將其儲存在 redis中並
設定失效時間就是1秒; 從庫做查詢時按照 上述key 去redis 中查詢如果存在 則讀取主
庫,如果不存在說明資料已經同步到了從庫直接查從庫即可。
此種方案有點投機取巧的意味。但實戰過很好用。。。既做到了資料一致性,又最大限
度的做到了主從資料庫間的讀寫分離;
3. 總結:
一切脫離了業務場景的架構設計都是耍流氓。。。。。
上述通過對業務場景的分析根據不同的業務要求:
1. 忽略不一致;
2. 強讀主庫;
3. 「選擇性的」強讀主庫;
第三中方案就是 讓讀寫分離最大化,最大限度的提高資料庫效能,規避db瓶頸。
資料庫的主從複製,讀寫分離。
相信作為乙個伺服器端開發者,資料庫是 必修的一門課 今天主要講講什麼是資料庫的主從同步,讀寫分離。在 古代 網際網路剛起步的時候,資料庫中儲存的資料是很小的,一台資料庫完全可以搞定一切,隨著時間的推移,網際網路作為連線一切的中介,世界上任何乙個地方的人都可以訪問你的 並且隨著網際網路經濟的急速擴張,...
主從資料庫 主從同步理論
主從資料庫資料同步原理 mysql的 replication 是乙個非同步的複製過程,從乙個 mysql instace 我們稱之為 主庫 複製到另乙個 mysqlinstance 我們稱之 從庫 在 主庫 與 從庫 之間的實現整個複製過程主要由三個執行緒來完成,其中兩個執行緒 sql執行緒和io執...
資料庫讀寫分離
隨著乙個 的業務不斷擴充套件,資料不斷增加,資料庫的壓力也會越來越大,對資料庫或者sql的基本優化可能達不到最終的效果,我們可以採用讀寫分離的策略來改變現狀。讀寫分離現在被大量應用於很多大型 這個技術也不足為奇了。ebay就做得非常好。ebay用的是oracle,聽說是用 quest share p...