c语言中cap是什么缩写,ACID中C与CAP定理中C的区别
原標題:ACID中C與CAP定理中C的區別
ACID和CAP定理中都有C,代表Consistent一致性,很多人容易將這兩個C混為一談,其實這兩個一致性是有區別的。 事務的定義是一系列操作要么全部成功,要么全部不成功,數據庫的事務機制是通過ACID實現的,數據庫ACID的具體定義見這里,ACID中的一致性的定義是:一個事務可以封裝狀態改變(除非它是一個只讀的)。事務必須始終保持系統處于一致的狀態,不管在任何給定的時間并發事務有多少。 也就是說:如果事務是并發多個,系統也必須如同串行事務一樣操作。其主要特征是保護性和不變性(Preserving an Invariant),以轉賬案例為例,假設有五個賬戶,每個賬戶余額是100元,那么五個賬戶總額是500元,如果在這個5個賬戶之間同時發生多個轉賬,無論并發多少個,比如在A與B賬戶之間轉賬5元,在C與D賬戶之間轉賬10元,在B與E之間轉賬15元,五個賬戶總額也應該還是500元,這就是保護性和不變性。 如果說ACID的C是節點服務器的數據完整性,而CAP的一致性是分布式多服務器之間復制數據以取得這些服務器擁有同樣的數據,這是一種分布式領域的一致性概念。因此兩者是完全不同的概念。 分布式領域中的一致性有的強弱之分,強一致性也就是指一旦有寫操作寫入任何一個服務器,立即在其他服務器之間同步復制新的數據,這樣, 任何服務器上任何讀操作總是能看到最近寫入的新數據。如果不能立即看到最近寫入的新數據,而可能過了一段時間才能看到,則屬于弱一致性或最終一致性了。 強一致性分為由寫實現一致性Consistency by writes、由讀實現一致性Consistency by reads和由沖裁實現一致性Consistency by Quorum。 由寫實現一致性:在寫入數據同時,將數據復制到其他服務器上,讀取任何一臺都可以獲得新的寫入數據,復制數據是在寫操作完成,讀操作輕量。 由讀實現一致性:寫入一旦服務器后,不再復制,而是在讀取時使用版本來協調復制(如vector clock算法),這樣我們簡化了寫操作,而將負擔加在讀操作。 由沖裁實現一致性:如果寫入時復制到其他2/3大多數服務器,讀取時也是從2/3大多數服務器讀取,讀取這邊負責解決哪個更新是最新結果,這在讀操作和寫操作之間分擔了負載。 回到事務話題,如果要在分布式系統中實現像ACID那樣的事務機制,只有強一致性還是不夠的,如果我們操作步驟順序很重要,不可以中斷或打亂,我們要么一起一次執行它們,如果并發執行這些操作步驟,無論怎么并發,也要如同它們是在獨立執行,我們最終得到的結果總是相同的,這是一種更強的一致性:線性一致性linearizable consistency,類似ACID中的隔離層(serial isolation level)。 The CAP FAQ將CAP定理中的一致性定義為這種線性一致性或稱為atomic原子一致性。一種比普通一致性更強的一致性,這也是大家又將ACID的C和CAP的C等同在一起的原因。ACID的C與CAP的C的關系類似精確與一致性的關系,如下圖:
這種分布式的線性強一致性有兩種實現方式:2PC兩段提交和Paxos算法是常見兩種。 通過2PC寫入新數據需要經過兩次來回,第一次請求commit,第二次才正式確認commit,在這兩者之間過程中,所有服務器都會堵塞等待發起者發出整個事務成功還是失敗的結果(只有發起者知道所有服務器的情況),如果失敗,所有服務器返回之前狀態,相當于寫入數據失敗,寫入數據沒有發生過一樣。 而Paxos算法能夠回避2PC的堵塞死鎖等問題更好地實現服務器之間數據強一致復制,具體內容見:Paxos算法。也可參考比Paxos算法改進的Raft算法。 返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的c语言中cap是什么缩写,ACID中C与CAP定理中C的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云计算之云计算架构图
- 下一篇: 如何使用代理服务器上网,从基础到高手--