RWN及Quorum與強一致性

2021-09-19 10:00:28 字數 1143 閱讀 7117

分布式理論系列

本文主要討論對等以及主從模型的讀寫衝突的解決方法。

即有多個master,同時接受讀寫操作

多個人在同時更新同一條資料(對於單機資料庫,就是併發問題,可由樂觀鎖或悲觀鎖來解決;對於對等分布式模型,則需要保證順序一致性,即所有節點都保證以相同順序執行操作)。

從各個節點讀取同乙個資料的內容不一樣。

強一致性:strong consistency(讀取的資料都是最新的),要求多少節點才行。

write quorum

假設某份資料需要複製到3個節點,為了保證強一致性,不需要所有節點都確認寫入操作,只需要其中兩個節點(也就是超半數節點)確認就可以了。在這種情況下,如果發生兩個相互衝突的寫入操作,那麼只有其中乙個操作能為超過半數的節點所認可,這就是寫入仲裁(write quorum),如果用稍微正規一點的方式說,那就是w>n/2,這個不等式的意思是參與寫入操作的節點數w,必須超過副本節點數n的一半,副本節點數又稱為複製因子(replication factor)。

read quorum

讀取仲裁(read quorum),也就是說想保證能夠讀到最新的資料,必須與多少個節點聯絡才行。假設寫入操作需要兩個節點來確認(w=2),那麼我們至少得聯絡兩個節點,才能保證獲取到最新資料。然而,假如某些寫入操作只被乙個節點所確認(w=1),那麼我們就必須3個節點都通訊一遍,才能確保獲取到的資料是最新的。乙個情況下,由於寫入操作沒有獲得足夠的節點支援率,所以可能會產生更新衝突。但是,只要從足夠數量的節點中讀出資料,就一定能偵測出此類衝突。因此,即使在寫入操作不具備強一致性的情況下,也可以實現除具有強一致性的讀取操作來。

這三者之間的關係,可以用乙個不等式來表述,即只有當r+w>n的時候,才能保證讀取操作的強一致性。

對於riak這樣的資料庫,可以控制cap中的引數:n(訪問鍵值對的副本節點數)、r(順利完成讀取操作所需的最小節點數)、w(順利完成寫入操作所需的最小節點數)。假設riak集群有5個節點,將n設為3,也就是所有資料都要至少複製到3個節點中,將r設為2,即get請求要求有兩個節點應答,才能成功,將w設為2,即put請求必須寫入到兩個節點才算寫入完畢。

針對主從分布式模型,只需要保證都向master寫入資料,就可以避免寫入衝突了,類似的,讀取操作從master,就可以避免讀寫衝突/讀取不一致了。

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

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

CAP原理與最終一致性 強一致性 透析

在足球比賽裡,乙個球員在一場比賽中進三個球,稱之為帽子戲法 hat trick 在分布式資料系統中,也有乙個帽子原理 cap theorem 不過此帽子非彼帽子。cap原理中,有三個要素 cap原理指的是,這三個要素最多只能同時實現兩點,不可能三者兼顧。因此在進行分布式架構設計時,必須做出取捨。而對...

資料庫的強一致性和弱一致性

強一致性可以理解為在任意時刻,所有節點中的資料是一樣的。同一時間點,你在節點a中獲取到key1的值與在節點b中獲取到key1的值應該都是一樣的 弱一致性 相當於非同步 系統並不保證續程序或者執行緒的訪問都會返回最新的更新過的值。系統在資料寫入成功之後,不承諾立即可以讀到最新寫入的值,也不會具體的承諾...