事物要麼徹底成功並提交,要麼根本不執行。數據庫
示例:A轉帳給B 100元,最後要麼A帳號少了100元、B帳號增長了100元,要麼轉帳失敗,A和B帳戶都沒有變化。而不該該出現A帳戶減小了100元,但B帳戶沒有變化;或者A帳戶沒有變化,但B帳戶增長了100元的狀況。網絡
熟悉數據庫的朋友都知道,數據庫的一致性包括:分佈式
這裏的事務一致性表示:對數據庫單獨執行事務的時候,若是數據庫以前是一致的,執行完了以後也應該是一致的。ide
這裏須要強調的是:和原子性、隔離性和持久性不通,一致性須要由事務程序和執行這些事務程序的TP系統共同負責。操作系統
若是一個系統運行一個事務集的效果與系統一次運行其中的一個事務的效果相同,那麼就說這個事務集是可隔離(可串行的serializable)。設計
舉例:兩個事物A、B同時從一個銀行帳戶取最後100元,若是能保證A、B一塊兒執行的效果核A先B後或A後B先的效果同樣,就說這類事物是可串行的。對象
持久性是指當事物執行完畢,全部的更新都存儲在穩定的存儲器上,不受電源故障或操做系統對影響。之因此須要這樣,是由於每一個事物都會向用戶提供服務,至關於用戶核提供服務的企業直接的合同。事務
舉例:A向B轉帳100元完成以後,A的帳戶會少100元,B的帳戶多100元,這個信息須要持久化到非易失性存儲器上,以保證不會隨着系統重啓、異常掉電而丟失記錄。ci
若是一個事物中,設計多須要對多個數據(數據庫)的處理,一般須要用到兩階段提交:同步
分佈式系統爲了 高可用性,老是不可避免的使用副本的機制,從而引起副本一致性的問題。 根據具體的業務需求的不一樣,分佈式系統老是 供某種一致性模型,並基於此模型 供具體的服務。越是強的一致的性模型,對於用戶使用來講使用起來越簡單。例如一般咱們總 是但願某次更新後能夠馬上讀到最新的修改,若是成功更新後的數據依舊有可能不一致讀到舊數據, 那麼用戶就須要在寫入數據時加入序列號等信息,並在讀取數據時首先自行實現過濾去重後再使用 數據。
系統的可用性(availability)指系統在面對各類異常時能夠正確 供服務的能力。系統的可用性可 以用系統停服務的時間與正常服務的時間的比例來衡量,也能夠用某功能的失敗次數與成功次數的 比例來衡量。可用性是分佈式的重要指標,衡量了系統的魯棒性,是系統容錯能力的體現。
指系統能夠對網絡分區這種異常情 況進行容錯處理;
該理論指出:沒法設計一種分佈式協議,使得同時徹底具有 CAP 三個屬性,即:
分佈式系統 協議只能在 CAP 這三者間全部折中。CAP 理論的詳細證實能夠參考相關論文。這裏能夠簡單用一個反例證實不存在 CAP 兼具的系 統。假設系統只有兩個副本 A 和 B,Client 更新這兩個副本,假設在網絡分化時,Client 與副本 A 能夠正常通訊,但副本 B 與 Client、副本 B 與副本 A 沒法通訊,此時,Client 對副本 A 更新的信息 永遠沒法同步到副本 B 上。若是但願系統依舊具備強一致的屬性,則此時須要中止更新服務,即不 再修改數據,從而讓副本 A 與副本 B 保持一致;若是但願系統依舊能夠 供更新服務,則只能更新 副本 A 而沒法更新副本 B,此時沒法保證副本 A 與副本 B 一致。