隨着計算機系統規模變得越來越大,將所有的業務單元集中部署在一個或若干個大型機上的體系結構,已經越來越不能滿足當今計算機系統,分佈式的處理方式越來越受到業界的青睞——計算機系統正經歷從集中式向分佈式架構的變革。
分佈式的特點
- 分佈性
- 對等性
- 併發性
- 缺乏全局時鐘
- 故障總是會發生
分佈式環境的各種問題
分佈式環境中存在一些典型的問題:
- 通信異常
- 網絡分區
- 三態
- 節點故障
事務的ACID特性
事務是由一系列對系統中數據進行訪問與更新的操作所組成的一個程序執行邏輯單元,狹義的事務特指數據庫事務。一方面,當多個應用程序併發訪問數據庫時,事務可以在這些應用程序之間提供一個隔離方法,以防止彼此的操作互相干擾。另外一方面,事務爲數據庫操作序列提供了一個從失敗中恢復到正常狀態的方法,同時提供了數據庫即使在異常狀態下仍能保持數據一致性的方法。事務具有四個特徵:原子性,一致性,隔離性和持久性。事務的ACID特性如下圖所示:
分佈式事務
在單機數據庫中,我們很容易實現一個滿足ACID特性的事務處理系統,但是在分佈式的數據庫中,數據分散在各個不同的機器上,如何對這些數據進行分佈式的事務處理具有非常大的挑戰,比如前面說到的機器宕機和各種網絡異常問題等。
分佈式事務是指事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位於分佈式系統的不同節點之上。通常一個分佈式事務中會涉及到對多個數據源或業務系統的操作。例如,一個跨銀行的轉賬操作涉及調用兩個異地的銀行服務,其中一個是本地銀行提供的取款服務,另一個是目標銀行提供的存款服務,這兩個服務本身是無狀態並且是互相獨立的,共同構成了一個完整的分佈式事務。如果從本地銀行取款成功,但是因爲某種原因存款服務失敗了,那麼就必須回滾到取款前的狀態,否則用戶可能會發現自己的錢不翼而飛。一個分佈式事務可以看作是由多個分佈式的操作序列組成的,例如上面舉例中的取款服務和存款服務,通常可以把這一系列分佈式的操作序列稱爲子事務。
CAP和BASE理論
CAP定理
CAP理論告訴我們,一個分佈式系統不可能同時滿足一致性(C:Consistency)、可用性(A:Available)和分區容錯性(P:Partition Tolerance)這三個基本需求,最多隻能同時滿足其中的兩項。CAP定理的示意圖如下所示:
- 一致性
- 可用性
可用性是指系統提供的服務必須一直處於可用的狀態,對於用戶的每一個操作請求總是能夠在有限的時間內返回結果。“有效的時間內”是指,對於用戶的一個操作請求,系統必須能夠在指定的時間(即響應時間)內返回對應的處理結果,如果超過了這個時間範圍,那麼系統就被認爲是不可用的。
“返回結果”是可用性的另一個非常重要的指標,它要求系統在完成對用戶請求的處理後,返回一個正常的響應結果。正常的響應結果通常能夠明確的反映出對請求的處理結果,即成功或失敗,而不是一個讓用戶感到困惑的返回結果。
- 分區容錯性
分區容錯性約束了一個分佈式系統需要具有如下特性:分佈式系統在遇到任何網絡分區故障的時候,仍然需要能夠保證對外提供滿足一致性和可用性的服務,除非是整個網絡環境都發生了故障。
網絡分區是指在分佈式系統中,不同的節點分佈在不同的子網絡(機房或異地網絡等)中,由於一些特殊的原因導致這些子網絡之間出現網絡不連通的狀況,但各個子網絡的內部網絡是正常的,從而導致整個系統的網絡環境被切分成了若干個孤立的區域。需要注意的是,組成一個分佈式系統的每個節點的加入與退出都可以看作是一個特殊的網絡分區。
由於一個分佈式系統無法同時滿足上面的三個需求,而只能滿足其中的兩項,因此在進行對CAP定理的應用的時候,需要根據業務的要求拋棄其中的一項,下表所示是拋棄CAP定理中任意一項特性的場景說明。