1. 一致性(Consistency)
一致性(Consistency)是指多副本(Replications)問題中的數據一致性。可以分為強一致性、順序一致性與弱一致性。
1.1 強一致性(Strict Consistency)
也稱為:
原子一致性(Atomic Consistency)
線性一致性(Linearizable Consistency)
兩個要求:
任何一次讀都能讀到某個數據的最近一次寫的數據。
系統中的所有進程,看到的操作順序,都和全局時鍾下的順序一致。
簡言之,在任意時刻,所有節點中的數據是一樣的。
例如,對於關系型數據庫,要求更新過的數據能被后續的訪問都能看到,這是強一致性。
1.2 順序一致性(Sequential Consistency)
the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program. - - Lamport
兩個要求:
任何一次讀都能讀到某個數據的最近一次寫的數據。
系統的所有進程的順序一致,而且是合理的。即不需要和全局時鍾下的順序一致,錯的話一起錯,對的話一起對。
舉個栗子:
Write(x, 4):寫入x=4
Read(x, 0):讀出x=0
1)圖a是滿足順序一致性,但是不滿足強一致性的。原因在於,從全局時鍾的觀點來看,P2進程對變量X的讀操作在P1進程對變量X的寫操作之后,然而讀出來的卻是舊的數據。但是這個圖卻是滿足順序一致性的,因為兩個進程P1,P2的一致性並沒有沖突。從這兩個進程的角度來看,順序應該是這樣的:Write(y,2) , Read(x,0) , Write(x,4), Read(y,2),每個進程內部的讀寫順序都是合理的,但是這個順序與全局時鍾下看到的順序並不一樣。
2)圖b滿足強一致性,因為每個讀操作都讀到了該變量的最新寫的結果,同時兩個進程看到的操作順序與全局時鍾的順序一樣,都是Write(y,2) , Read(x,4) , Write(x,4), Read(y,2)。
3)圖c不滿足順序一致性,當然也就不滿足強一致性了。因為從進程P1的角度看,它對變量Y的讀操作返回了結果0。那么就是說,P1進程的對變量Y的讀操作在P2進程對變量Y的寫操作之前,這意味着它認為的順序是這樣的:write(x,4) , Read(y,0) , Write(y,2), Read(x,0),顯然這個順序又是不能被滿足的,因為最后一個對變量x的讀操作讀出來也是舊的數據。因此這個順序是有沖突的,不滿足順序一致性。
1.3 弱一致性
數據更新后,如果能容忍后續的訪問只能訪問到部分或者全部訪問不到,則是弱一致性。
最終一致性就屬於弱一致性。
最終一致性
不保證在任意時刻任意節點上的同一份數據都是相同的,但是隨着時間的遷移,不同節點上的同一份數據總是在向趨同的方向變化。
簡單說,就是在一段時間后,節點間的數據會最終達到一致狀態。
最終一致性根據更新數據后各進程訪問到數據的時間和方式的不同,又可以區分為:
因果一致性(Casual Consistency)。如果進程A通知進程B它已更新了一個數據項,那么進程B的后續訪問將返回更新后的值,且一次寫入將保證取代前一次寫入。與進程A無因果關系的進程C的訪問,遵守一般的最終一致性規則。
“讀己之所寫(read-your-writes)”一致性。當進程A自己更新一個數據項之后,它總是訪問到更新過的值,絕不會看到舊值。這是因果一致性模型的一個特例。
會話(Session)一致性。這是上一個模型的實用版本,它把訪問存儲系統的進程放到會話的上下文中。只要會話還存在,系統就保證“讀己之所寫”一致性。如果由於某些失敗情形令會話終止,就要建立新的會話,而且系統的保證不會延續到新的會話。
單調(Monotonic)讀一致性。如果進程已經看到過數據對象的某個值,那么任何后續訪問都不會返回在那個值之前的值。
單調寫一致性。系統保證來自同一個進程的寫操作順序執行。要是系統不能保證這種程度的一致性,就非常難以編程了。
2. 共識(Consensus)
共識問題中所有的節點要最終達成共識,由於最終目標是所有節點都要達成一致,所以根本不存在一致性強弱之分。
例如,Paxos是共識(Consensus)算法而不是強一致性(Consistency)協議。共識算法沒有一致性級別的區分。
————————————————
版權聲明:本文為CSDN博主「chao2016」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/chao2016/article/details/81149674