ACID
ACID,指數(shù)據(jù)庫事務正確執(zhí)行的四個基本要素的縮寫赡突。包含:原子性(Atomicity)对扶、一致性(Consistency)、隔離性(Isolation)惭缰、持久性(Durability)浪南。一個支持事務(Transaction)的數(shù)據(jù)庫,必須要具有這四種特性从媚,否則在事務過程(Transaction processing)當中無法保證數(shù)據(jù)的正確性逞泄,交易過程極可能達不到交易方的要求患整。
原子性(Atomicity)
原子性是指事務是一個不可分割的工作單位拜效,事務中的操作要么都發(fā)生,要么都不發(fā)生各谚。
一致性(Consistency)
事務前后數(shù)據(jù)的完整性必須保持一致紧憾。
隔離性(Isolation)
事務的隔離性是多個用戶并發(fā)訪問數(shù)據(jù)庫時,數(shù)據(jù)庫為每一個用戶開啟的事務昌渤,不能被其他事務的操作數(shù)據(jù)所干擾赴穗,多個并發(fā)事務之間要相互隔離。
持久性(Durability)
持久性是指一個事務一旦被提交膀息,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久性的般眉,接下來即使數(shù)據(jù)庫發(fā)生故障也不應該對其有任何影響。
具有ACID的特性的數(shù)據(jù)庫支持強一致性潜支,強一致性代表數(shù)據(jù)庫本身不會出現(xiàn)不一致甸赃,每個事務是原子的,或者成功或者失敗冗酿,事物間是隔離的埠对,互相完全不影響络断,而且最終狀態(tài)是持久落盤的,因此项玛,數(shù)據(jù)庫會從一個明確的狀態(tài)到另外一個明確的狀態(tài)貌笨,中間的臨時狀態(tài)是不會出現(xiàn)的,如果出現(xiàn)也會及時的自動的修復襟沮,因此是強一致的锥惋。
BASE理論
BASE理論解決CAP理論提出了分布式系統(tǒng)的一致性和可用性不能兼得的問題。
BASE在英文中有“堿”的意思臣嚣,對應本節(jié)開頭的ACID在英文中“酸”的意思净刮,基于這兩個名詞提出了酸堿平衡的結論,簡單來說是在不同的場景下硅则,可以分別利用ACID和BASE來解決分布式服務化系統(tǒng)的一致性問題淹父。
BASE模型與ACID模型截然不同,滿足CAP理論怎虫,通過犧牲強一致性暑认,獲得可用性,一般應用在服務化系統(tǒng)的應用層或者大數(shù)據(jù)處理系統(tǒng)大审,通過達到最終一致性來盡量滿足業(yè)務的絕大部分需求蘸际。
BASE模型包含個三個元素:
BA:Basically Available,基本可用
系統(tǒng)出現(xiàn)了不可預知的故障徒扶,但還是能用粮彤,相比較正常的系統(tǒng)而言會有響應時間上的損失和功能上的損失。
S:Soft State姜骡,軟狀態(tài)导坟,狀態(tài)可以有一段時間不同步
什么是軟狀態(tài)呢?相對于原子性而言圈澈,要求多個節(jié)點的數(shù)據(jù)副本都是一致的惫周,這是一種“硬狀態(tài)”。
軟狀態(tài)指的是:允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài)康栈,并認為該狀態(tài)不影響系統(tǒng)的整體可用性递递,即允許系統(tǒng)在多個不同節(jié)點的數(shù)據(jù)副本存在數(shù)據(jù)延時。
E:Eventually Consistent啥么,最終一致登舞,最終數(shù)據(jù)是一致的就可以了,而不是時時保持強一致悬荣。
上面說軟狀態(tài)菠秒,然后不可能一直是軟狀態(tài),必須有個時間期限隅熙。在期限過后稽煤,應當保證所有副本保持數(shù)據(jù)一致性核芽,從而達到數(shù)據(jù)的最終一致性。這個時間期限取決于網(wǎng)絡延時酵熙、系統(tǒng)負載轧简、數(shù)據(jù)復制方案設計等等因素。
而在實際工程實踐中匾二,最終一致性分為5種:
因果一致性(Causal consistency)
因果一致性指的是:如果節(jié)點A在更新完某個數(shù)據(jù)后通知了節(jié)點B哮独,那么節(jié)點B之后對該數(shù)據(jù)的訪問和修改都是基于A更新后的值。于此同時察藐,和節(jié)點A無因果關系的節(jié)點C的數(shù)據(jù)訪問則沒有這樣的限制皮璧。
讀己之所寫一致性(Read-your-writes consistency)
讀己之所寫指的是:節(jié)點A更新一個數(shù)據(jù)后,它自身總是能訪問到自身更新過的最新值分飞,而不會看到舊值悴务。其實也算一種因果一致性。
會話一致性(Session consistency)
會話一致性將對系統(tǒng)數(shù)據(jù)的訪問過程框定在了一個會話當中:系統(tǒng)能保證在同一個有效的會話中實現(xiàn) “讀己之所寫” 的一致性譬猫,也就是說讯檐,執(zhí)行更新操作之后,客戶端能夠在同一個會話中始終讀取到該數(shù)據(jù)項的最新值染服。
單調(diào)讀一致性(Monotonic read consistency)
單調(diào)讀一致性指的是:如果一個節(jié)點從系統(tǒng)中讀取出一個數(shù)據(jù)項的某個值后别洪,那么系統(tǒng)對于該節(jié)點后續(xù)的任何數(shù)據(jù)訪問都不應該返回更舊的值。
單調(diào)寫一致性(Monotonic write consistency)
單調(diào)寫一致性指的是:一個系統(tǒng)要能夠保證來自同一個節(jié)點的寫操作被順序的執(zhí)行柳刮。
在實際的實踐中挖垛,這5種系統(tǒng)往往會結合使用,以構建一個具有最終一致性的分布式系統(tǒng)秉颗。
BASE模型的軟狀態(tài)是實現(xiàn)BASE理論的方法痢毒,基本可用和最終一致是目標。按照BASE模型實現(xiàn)的系統(tǒng)站宗,由于不保證強一致性闸准,系統(tǒng)在處理請求的過程中益愈,可以存在短暫的不一致梢灭,在短暫的不一致窗口請求處理處在臨時狀態(tài)中,系統(tǒng)在做每步操作的時候蒸其,通過記錄每一個臨時狀態(tài)敏释,在系統(tǒng)出現(xiàn)故障的時候,可以從這些中間狀態(tài)繼續(xù)未完成的請求處理或者退回到原始狀態(tài)摸袁,最后達到一致的狀態(tài)钥顽。
簡單地來說BASE理論的思想是:系統(tǒng)可能處于不一致的狀態(tài),但最終會變得一致靠汁。
參考
[1] https://juejin.im/post/5b2663fcf265da59a401e6f8
[2] https://itknowledgeexchange.techtarget.com/enterprise-IT-tech-trends/eventual-consistency-gives-scalability-and-availability/