【ACID】
在傳統數據庫系統中,事務具備 ACID 4 個屬性( Jim Gray 在《事務處理:概念與技術》中對事務進行了詳盡的討論)。 html
- 原子性(Atomicity):事務是一個原子操做單元,其對數據的修改,要麼全都執行,要麼全都不執行。
- 一致性(Consistent):在事務開始和完成時,數據都必須保持一致狀態。這意味着全部相關的數據規則都必須應用於事務的修改,以保持數據的完整性;事務結束時,全部的內部數據結構(如B樹索引或雙向鏈表)也都必須是正確的。
- 隔離性(Isolation):數據庫系統提供必定的隔離機制,保證事務在不受外部併發操做影響的「獨立」環境執行。這意味着事務處理過程當中的中間狀態對外部是不可見的,反之亦然。
- 持久性(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 。
- Consistency(一致性):一致性是說數據的原子性,這種原子性在經典的數據庫中是經過事務來保證的,當事務完成時,不管其是成功仍是回滾,數據都會處於一致的狀態。在分佈式環境中,一致性是說多個節點的數據是否一致。
- Availability(可用性):可用性是說服務能一直保證是可用的狀態,當用戶發出一個請求,服務能在有限時間內返回結果。
- 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 的含義:
- Basically Available:基本可用;
- Soft-state:軟狀態/柔性事務,即狀態能夠有一段時間的不一樣步;
- 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