分布式一致性
在計(jì)算機(jī)科學(xué)中,一致性模型(Consistency model)被用于分布式共享內(nèi)存系統(tǒng)(DSM, distributed shared memory systems)或分布式數(shù)據(jù)存儲(chǔ)(比如:文件系統(tǒng),數(shù)據(jù)庫(kù),樂(lè)觀復(fù)制系統(tǒng)或者網(wǎng)頁(yè)緩存)這兩大類分布式系統(tǒng)當(dāng)中。如果對(duì)內(nèi)存的操作滿足特定的一致性規(guī)則,這個(gè)系統(tǒng)就被認(rèn)為是支持這種一致性模型。數(shù)據(jù)一致性模型指的是程序員遵循某些規(guī)則,讓內(nèi)存數(shù)據(jù)保持一致,讓讀,寫或更新內(nèi)存這樣的操作變得可預(yù)測(cè)。這不同于另一個(gè)一致性(coherence)概念,Coherence只出現(xiàn)在Cache Coherence?一詞中,稱為“緩存一致性”,研究的是多核場(chǎng)景,保證多核上的CPU緩存數(shù)據(jù)一致,一般是單機(jī)維度。
數(shù)據(jù)庫(kù)事務(wù)的一致性
數(shù)據(jù)庫(kù)管理系統(tǒng)在寫入或更新資料的過(guò)程中,為了保證事務(wù)是正確可靠的,必須具備四個(gè)特性(ACID):原子性(atomicity),一致性(consistency),隔離性(isolation),持久性(durability)。這里的一致性指的是在事務(wù)開始之前和事務(wù)結(jié)束之后,數(shù)據(jù)庫(kù)的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預(yù)設(shè)約束、觸發(fā)器、級(jí)聯(lián)回滾等。ACID是傳統(tǒng)數(shù)據(jù)庫(kù)常用的設(shè)計(jì)理念,追求強(qiáng)一致模型。這個(gè)概念和數(shù)據(jù)庫(kù)的數(shù)據(jù)是否多副本沒有關(guān)系。
分布式理論中的一致性
在一個(gè)分布式系統(tǒng)中,一致性(Consistency),可用性(Availability),分區(qū)容錯(cuò)性(Partition tolerance)三者不可兼得,這個(gè)結(jié)論叫做CAP理論。這里的一致性指的是所有數(shù)據(jù)備份,在同一時(shí)刻是否具有同樣的值。系統(tǒng)一般對(duì)外提供的有不同的一致性級(jí)別,不同的一致性級(jí)別限定了系統(tǒng)允許的操作執(zhí)行順序,越嚴(yán)格的一致性模型,意味著性能、可用性或者擴(kuò)展性等有所損失。架構(gòu)師Dan Pritchett提出了BASE理論,BASE理論是對(duì)CAP理論的延伸,其核心思想是即使無(wú)法做到CAP理論中的強(qiáng)一致性,但應(yīng)用可以采用合適的方式達(dá)到最終一致性。? BASE是指基本可用(Basically Available)、軟狀態(tài)(Soft State)、最終一致性(Eventual Consistency)。最終一致性是指系統(tǒng)中所有數(shù)據(jù)副本經(jīng)過(guò)一定時(shí)間后,最終能夠達(dá)到一致的狀態(tài)。
強(qiáng)一致性(Strict consistency)
這是最嚴(yán)格的一種模型,采用全局時(shí)鐘的約束,任何寫操作都能立刻同步到其他所有進(jìn)程,任何讀操作都能讀取到最新的修改。這是一種理想的模型,因?yàn)樗矔r(shí)消息交換是不可能的。它解決不了并發(fā)寫同一數(shù)據(jù)的沖突問(wèn)題,因?yàn)檫@個(gè)模型的前提是假定并發(fā)寫入是不可能的。
在強(qiáng)一致模型中,P1對(duì)x執(zhí)行了寫操作,P2就可以立即讀到x的值為1;在非強(qiáng)一致模型中,P1對(duì)x執(zhí)行了寫操作,P2對(duì)x進(jìn)行讀的時(shí)候可能先讀到的是初始值0,然后讀到的是修改后的值1。
順序一致性(Sequential consistency)
順序一致性模型由Lamport 于1979年提出,這種一致性模型比強(qiáng)一致性模型要弱,采用分布式邏輯時(shí)鐘實(shí)現(xiàn),所有的進(jìn)程以相同的順序看到所有的寫操作修改,但是讀操作未必能及時(shí)讀到其他進(jìn)程對(duì)同一數(shù)據(jù)的寫更新。順序一致性可能會(huì)產(chǎn)生不確定的結(jié)果,因?yàn)樵诔绦虻牟煌\(yùn)行期間,處理器之間的順序操作順序可能會(huì)有不同,所有內(nèi)存操作都需要按照程序順序執(zhí)行。
上圖表示:P1對(duì)x執(zhí)行了寫操作,將x的值寫為3,P2對(duì)x執(zhí)行了寫操作,將x的值寫為了5,P2對(duì)x執(zhí)行讀操作的時(shí)候,讀出的結(jié)果是3。由此可見,順序一致性并不能保證讀到的是最新的結(jié)果5。
因果一致性(Causal consistency)
因果一致性是一種弱化的順序一致性,所有進(jìn)程必須以相同的順序看到具有潛在因果關(guān)系的寫操作。不同進(jìn)程可以以不同的順序看到并發(fā)的寫操作。
在第一個(gè)時(shí)刻,P1對(duì)x進(jìn)行了寫操作,將x的值寫為1,P2,P3,P4對(duì)x進(jìn)行讀操作,讀到的是1;在第二個(gè)時(shí)刻,P2對(duì)x進(jìn)行了寫操作,將x的值寫為了2;在第三個(gè)時(shí)刻,P1將X的值寫為了3,P3讀的是P1寫回后的結(jié)果3,P4讀的是之前的結(jié)果2; 在第四個(gè)時(shí)刻,P3讀取的結(jié)果是2,P4讀取的結(jié)果是3。這里W(x)1和W(x)2就是因果相關(guān),因?yàn)镻2對(duì)X的讀操作在P2對(duì)X的寫操作之前發(fā)生。
最終一致性(Eventual Consistency)
各個(gè)節(jié)點(diǎn)的數(shù)據(jù)不一致,可以通過(guò)一系列的措施來(lái)進(jìn)行更新補(bǔ)償,最終達(dá)到一致性的要求。這個(gè)過(guò)程就是最終一致性。強(qiáng)調(diào)的是要求最終一致,不需要實(shí)時(shí)保證系統(tǒng)數(shù)據(jù)的強(qiáng)一致。
參考:
[1]https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
[2]?https://en.wikipedia.org/wiki/Consistency_model?spm=a2c6h.12873639.0.0.71e375b9HP0WoA
[3]?https://jepsen.io/consistency
云數(shù)據(jù)庫(kù) GaussDB(for MySQL)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。