1. 程式人生 > >ACID、Data Replication、CAP與BASE

ACID、Data Replication、CAP與BASE

ACID、Data Replication、CAP與BASE
ACID

在傳資料庫系統中,事務具有ACID 4個屬性(Jim Gray在《事務處理:概念與技術》中對事務進行了詳盡的討論)。

(1)原子性(Atomicity):事務是一個原子操作單元,其對資料的修改,要麼全都執行,要麼全都不執行。

(2)一致性(Consistent):在事務開始和完成時,資料都必須保持一致狀態。這意味著所有相關的資料規則都必須應用於事務的修改,以保持資料的完整性;事務結束時,所有的內部資料結構(如B樹索引或雙向連結串列)也都必須是正確的。

(3)隔離性(Isolation):資料庫系統提供一定的隔離機制,保證事務在不受外部併發操作影響的“獨立”環境執行。這意味著事務處理過程中的中間狀態對外部是不可見的,反之亦然。

(4)永續性(Durable):事務完成之後,它對於資料的修改是永久性的,即使出現系統故障也能夠保持。

對於單個節點的事務,資料庫都是通過併發控制(兩階段封鎖,two phase locking或者多版本,multiversioning)和恢復機制(日誌技術)保證事務的ACID特性。對於跨多個節點的分散式事務,通過兩階段提交協議(two phase commiting)來保證事務的ACID。

可以說,資料庫系統是伴隨著金融業的需求而快速發展起來。對於金融業,可用性和效能都不是最重要的,而一致性是最重要的,使用者可以容忍系統故障而停止服務,但絕不能容忍帳戶上的錢無故減少(當然,無故增加是可以的)。而強一致性的事務是這一切的根本保證。

Data Replication

資料複製(data replication)屬於分散式計算的範疇,它並不僅僅侷限於資料庫,但這裡主要是指分散式資料庫的複製。

在多副本構成的分散式資料庫系統中, 其事務特性與單個數據庫系統的差別主要表現在原子性和一致性兩個方 面。在原子性方面, 要求同一分散式事務的所有操作在所有相關副本上要麼提交, 要麼回滾, 即除了保證原有的區域性事務的原子性,還需要控制全域性事務的原子性; 在一致性方面,多副本之間需要保證單一副本一致性。

針對分散式事務的原子性和一致性這兩個複製協議中的核心問題, 經過近20年的研究 , 人們提出了各種各樣的複製協議。這些協議在外在功能和內部實現兩方面都有較大的差別。據此,我們可以從這兩個大的方面進行分類說明。

從外在功能的角度看, 依據文獻[1], 可以從事務執行的地點和時間兩個方面進行分類。從事務執行的地點,可以分為兩類: 主從( Priamry / Copy)方式和更新所有( Update-Anywhere ) 方式。

前者的處理過程一般是系統中僅僅指定一個Primary節點接受更新請求 , 在事務操作執行完畢後, 在事務提交前或後將操作廣播到其他Copy節點。

後者的處理過程稍微複雜, 系統中的任何副本具有相同的地位,都可以接收Update請求 ,在檢測事務衝突、 事務提交前或後將各個節點的Update傳播到其他副本節點。

Primary / Copy方式併發控制較為簡單, 由Primary本地的事務控制即可實現, 事務的原子性的實現也較為簡單, 一般由Primary節點作為協調節點來實現。但是, 其缺陷也顯而易見: 僅僅單個節點提供Update請求處理能力, 對於Update密集型別的應用, 如OLTP, 容易形成單點效能瓶頸。Update-Anywhere方式則與其相輔相成, 可以通過多點提高事務吞吐率, 但隨之而來的是多個分散式事務之間複雜的併發控制和原子性問題。

  從事務提交的時間點看, 可以分為積極 (Eager)和消極(Lazy) 兩類。其區別在於, 前者是在事務提交前傳播更新,後者則是在提交之後才將事務操作傳播到其他副本。實際上,前者即通常無謂的同步複製(synchronous replication),後者即無謂的非同步複製(asynchronous replication)。

非同步複製的優點是可以提高響應速度, 但犧牲了一致性 ,一般實現該類協議的演算法需要增加額外的補償機制。同步複製的優點是可以保證一致性(一般通過兩階段提交協議),但是開銷較大,可用性不好(參見CAP部分),帶來了更多的衝突和死鎖等問題。值得一提的是Lazy+Primary/Copy的複製協議在實際生產環境中是非常實用的,MySQL的複製實際上就屬於這種。

CAP

在2000的PODC(Principles of Distributed Computing)會議上,Brewer提出了著名的CAP理論。2002年,Seth Gilbert和Nancy Lynch證明了這一理論。CAP指的是:Consistency、Availability和Partition Tolerance。

(1)Consistency(一致性):一致性是說資料的原子性,這種原子性在經典的資料庫中是通過事務來保證的,當事務完成時,無論其是成功還是回滾,資料都會處於一致的狀態。在分散式環境中,一致性是說多個節點的資料是否一致。

(2)Availability(可用性):可用性是說服務能一直保證是可用的狀態,當用戶發出一個請求,服務能在有限時間內返回結果。

(3)Partition Tolerance(分割槽容錯性):Partition是指網路的分割槽。可以這樣理解,一般來說,關鍵的資料和服務都會位於不同的IDC。

CAP理論告訴我們,一個分散式系統不可能同時滿足一致性,可用性和分割槽容錯性這三個需求,三個要素中最多隻能同時滿足兩點。三者不可兼顧,此所謂魚與熊掌不可兼得也!而對於分散式資料系統而言,分割槽容錯性是基本要求,否則就不稱其為分散式系統了。因此架構設計師不要把精力浪費在設計如何能同時滿足三者的完美分散式系統上,而是應該進行權衡取捨。這也意味著分散式系統的設計過程,也就是根據業務特點在C(一致性)和A(可用性)之間尋求平衡的過程,要求架構師真正理解系統需求,把握業務特點。

BASE

BASE來自於網際網路的電子商務領域的實踐,它是基於CAP理論逐步演化而來,核心思想是即便不能達到強一致性(Strong consistency),但可以根據應用特點採用適當的方式來達到最終一致性(Eventual consistency)的效果。BASE是Basically Available、Soft state、Eventually consistent三個片語的簡寫,是對CAP中C & A的延伸。BASE的含義:

(1)Basically Available:基本可用;

(2)Soft-state:軟狀態/柔性事務,即狀態可以有一段時間的不同步;

(3)Eventual consistency:最終一致性;

BASE是反ACID的,它完全不同於ACID模型,犧牲強一致性,獲得基本可用性和柔性可靠性並要求達到最終一致性。

CAP、BASE理論是當前在網際網路領域非常流行的NoSQL的理論基礎。

主要參考

[1]J.N.Gray, P.Helland,and a.D.S.P.O’Neil. The dangers of replication and a solution. In Proceedings of the 1996 ACM SIGMOD International Conference on Management of Data, pages 173–182,Montreal, Canada, June 1996.SIGMOD.

[2]Gilbert , S., Lynch, N. 2002. Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant Web services. ACM SIGACT News 33(2).

[3]http://www.allthingsdistributed.com/2008/12/eventually_consistent.html

[4]http://queue.acm.org/detail.cfm?id=1394128

[5]http://en.wikipedia.org/wiki/ACID

作者:arrowcat
出處:http://www.cnblogs.com/hustcat/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。