不同複製結構的資料同步一致性

2021-10-10 19:45:26 字數 1675 閱讀 5473

本篇我們再來看一下不同複製結構的資料同步一致性。

當p發生時,只能在ca之間做權衡。主從、主主、無主,三者都是為了在p發生時,盡量保證c或者a。結合以前的學習,我們來看看這裡的權衡與博弈。

主從資料同步,主節點負責寫入,從節點可以提供讀取能力。如果資料是非同步複製,當主節點寫入成功後,從節點可能還未同步到資料,就會出現不一致的情況。

假如客戶端要求讀自己的寫,也就是如果我寫入成功,那麼不論我什麼時候讀取,都能讀到相同的資料。這也叫做讀寫一致性。前文提到的線性一致性、因果一致性和最終一致性是三個主要的一致性。而讀寫一致性在本場景中,效果等於線性一致性。

如何實現讀寫一致性呢?

比如讀寫都走主節點,那麼可以利用session思想去實現特定請求都走主節點。這樣,當主節點掛了以後,該功能也就失效了。或者當這種功能請求很多時,主節點就成為了效能瓶頸。充分體現了c和a的權衡。

或者主節點同步寫入乙個從節點,其他從節點非同步寫入。有讀寫一致性需求的客戶端,讀操作就向從節點讀取。但是當這個從節點掛掉後,會阻塞主節點的所有寫入。

現實中,由於負載均衡功能的存在,可能第一次訪問路由到a伺服器,該伺服器將此請求發往資料節點1;第二次路由到b伺服器,b將請求發往節點2。假如節點1、節點2和主節點之間的資料同步速率不同,那麼客戶端可能會先看到最新的資料,再看到舊資料。這明顯違背了上文我們講到的因果一致性。

其實,通過上面的分析,我們可以總結出當出現一致性問題時,解決的方向有哪些?1. 固定節點讀取;2. 客戶端讀取的時候進行處理,比如讀時修復,或者讀多個等等。

從節點宕機重啟,或者新增從節點。都要考慮從節點資料和主節點資料的同步。從節點只有同步完資料後才能對外提供服務。主節點宕機後,這也就是上一章提到的和共識演算法的區別:新的主節點是如何產生的?共識又會引出新舊主節點的身份認同,即需要考慮腦裂是如何解決的。

對於主主複製來說,一般都是不同資料中心之間的複製。舉個極端的例子,系統面向全球市場。假如在北京有個資料中心,紐約有個資料中心。那麼a在美國修改了資料。a的朋友在中國登入a賬號,此時資料還未同步完成。他也修改了資料,那麼最後看的資料應該是什麼樣?

主主複製最主要的問題就是如何處理寫入衝突。寫入衝突實現方案有很多種,主要是思路:

區分資料,要麼分流成主從,要麼覆蓋寫入

維持全部資料,進行合併

國外版,國內版。都是針對該演算法的**,可以加深印象。

無主複製,會比較特殊,特殊在沒有主節點,那麼就可以針對所有節點寫入資料。那麼如何保證資料的一致性呢?這就引出了quorom機制。

也就是意味著系統中存在 n 個節點,向系統寫入資料時,需要同時寫入 w 個節點。只有w個節點全部寫入成功後,才算寫成功。從系統中讀取資料時,從r個節點中讀取資料。只返回客戶端最新的那條記錄。

所以 n 和 w、r 之間存在比例關係,當 w + r 的數量大於 n 時,就可以實現資料強一致性。通過調節 nwr 之間的比例,可以在可靠性、一致性和效能之間權衡調節。

那麼對於那些沒及時寫入的節點,資料該如何同步呢?方法也有很多,比如客戶端讀取的時候進行修復,這就需要客戶端的配合。

再比如定時同步資料,在各個節點之間進行反熵。反熵也就是將各個節點間的不同趨於相同。如何進行反熵,可以節點乙個接乙個進行資料對比同步。也可以參考 gossip 協議的實現方式,進行謠言式的傳播同步。

學完前面的,本篇其實就比較簡單了。不是理論上的重點,而共識演算法才是分布式領域的核心。下篇文章開始,我們就進入分布式共識演算法領域,結合所學知識,首先去研究 paxos 演算法。

強一致性 弱一致性 最終一致性

這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...

同步非同步中的一致性

共識問題 可稱作協作,所有正確的程序對提議的值達成一致。分布式系統中,節點之間通過通訊,對請求達成一致的定序。問題定義 程序pi處於未決狀態 undecideed 提議集合d中的某個值vi。程序之間相互通訊,交換各自的提議。每個程序設定自己的決定變數 decision variable 進入決定狀態...

資料讀一致性

undo段由兩個元件組成 undo頭和undo入口。undo段的第一塊是undo頭。undo被建立時僅有undo頭被建立。保留時間表 retention table 這是自動管理undo新增的乙個元件。儲存了undo段中每乙個區最後乙個事務提交的時間。事務表 transaction table 儲存...