柚子快報(bào)邀請(qǐng)碼778899分享:分布式理論基礎(chǔ)
柚子快報(bào)邀請(qǐng)碼778899分享:分布式理論基礎(chǔ)
文章目錄
1、理論基礎(chǔ)2、CAP定理1_一致性2_可用性3_分區(qū)容錯(cuò)性4_總結(jié)
3、BASE理論1_Basically Available(基本可用)2_Soft State(軟狀態(tài))3_Eventually Consistent(最終一致性)4_總結(jié)
1、理論基礎(chǔ)
在計(jì)算機(jī)科學(xué)領(lǐng)域,分布式一致性是一個(gè)相當(dāng)重要的問(wèn)題。
分布式系統(tǒng)要解決的一個(gè)重要問(wèn)題是數(shù)據(jù)復(fù)制。
數(shù)據(jù)復(fù)制為分布式系統(tǒng)帶來(lái)了高可用、高性能,但也同時(shí)帶來(lái)了分布式一致性挑戰(zhàn):在對(duì)一個(gè)副本數(shù)據(jù)進(jìn)行更新時(shí),必須確保也更新其他副本,否則不同副本的數(shù)據(jù)將不一致。
如何解決這個(gè)問(wèn)題 ?
一種思路是:阻塞 “寫” 操作,直到數(shù)據(jù)復(fù)制完成。
但這個(gè)思路在解決一致性問(wèn)題的同時(shí),又帶來(lái)了 “寫” 操作性能低的問(wèn)題。
如果有高并發(fā)的 “寫” 請(qǐng)求,則在使用這個(gè)思路之后,大量 “寫” 請(qǐng)求阻塞,導(dǎo)致系統(tǒng)整體性能急劇下降。
如何既保證數(shù)據(jù)的一致性,又不影響系統(tǒng)運(yùn)行的性能,是每一個(gè)分布式系統(tǒng)都需要重點(diǎn)考慮和權(quán)衡的問(wèn)題。
如何實(shí)現(xiàn)一種既能保證ACID特性,又能保證高性能的分布式事務(wù)處理系統(tǒng)是一個(gè)世界性難題。
在技術(shù)演進(jìn)過(guò)程中,出現(xiàn)了諸如CAP和BASE 這樣的分布式系統(tǒng)理論。
2、CAP定理
1998年,加州大學(xué)的計(jì)算機(jī)科學(xué)家 Eric Brewer 提出,分布式系統(tǒng)有三個(gè)指標(biāo)。
Consistency(一致性)Availability(可用性)Partition tolerance (分區(qū)容錯(cuò)性)
它們的第一個(gè)字母分別是 C、A、P。
Eric Brewer 說(shuō),這三個(gè)指標(biāo)不可能同時(shí)做到,這個(gè)結(jié)論就叫做 CAP 定理。
CAP定理是分布式系統(tǒng)的指導(dǎo)理論,它指出:一個(gè)分布式系統(tǒng)不可能同時(shí)滿足 一致性(C: Consistency)、可用性(A: Availability) 和 分區(qū)容錯(cuò)性(P: PartitionTolerance) 這3個(gè)需求,最多只能同時(shí)滿足其中兩項(xiàng)。
1_一致性
Consistency (一致性):指 "all nodes see the same data at the same time",即更新操作成功并返回客戶端后,所有節(jié)點(diǎn)在同一時(shí)間的數(shù)據(jù)完全一致,這就是分布式的一致性。
一致性的問(wèn)題在并發(fā)系統(tǒng)中不可避免,對(duì)于客戶端來(lái)說(shuō),一致性指的是并發(fā)訪問(wèn)時(shí)更新過(guò)的數(shù)據(jù)如何獲取的問(wèn)題。
從服務(wù)端來(lái)看,則是更新如何復(fù)制分布到整個(gè)系統(tǒng),以保證數(shù)據(jù)最終一致。
這里的一致性是指強(qiáng)一致性,一般關(guān)系型數(shù)據(jù)庫(kù)就具有強(qiáng)-致性特性。
2_可用性
Availability (可用性):指 "Reads and writes always succeed",即服務(wù)一直可用,而且是正常響應(yīng)時(shí)間。
好的可用性主要是指系統(tǒng)能夠很好的為用戶服務(wù),不出現(xiàn)用戶操作失敗或者訪問(wèn)超時(shí)等用戶體驗(yàn)不好的情況。
3_分區(qū)容錯(cuò)性
Partition Tolerance (分區(qū)容錯(cuò)性):指 "the system continues to operate despite arbitrary message loss or failure of part of the system",即分布式系統(tǒng)在遇到某節(jié)點(diǎn)或網(wǎng)絡(luò)分區(qū)故障的時(shí)候,仍然能夠?qū)ν馓峁M足一致性和可用性的服務(wù)。
分區(qū)容錯(cuò)性要求能夠使應(yīng)用雖然是一個(gè)分布式系統(tǒng),而看上去卻好像是在一個(gè)可以運(yùn)轉(zhuǎn)正常的整體。
比如現(xiàn)在的分布式系統(tǒng)中有某一個(gè)或者幾個(gè)機(jī)器宕掉或失聯(lián)了,其他剩下的機(jī)器還能夠正常運(yùn)轉(zhuǎn)滿足系統(tǒng)需求,對(duì)于用戶而言并沒有什么體驗(yàn)上的影響。
因?yàn)榉植际较到y(tǒng)無(wú)法同時(shí)滿足一致性、可用性、分區(qū)容錯(cuò)性這3個(gè)基本需求,所以我們?cè)谠O(shè)計(jì)分布式系統(tǒng)時(shí)就必須有所取舍。
對(duì)于分布式系統(tǒng)而言,分區(qū)容錯(cuò)性是最基本的要求,因?yàn)榧热皇且粋€(gè)分布式系統(tǒng),那么分布式系統(tǒng)中的組件必然會(huì)被部署到不同的節(jié)點(diǎn),否則也就無(wú)所謂分布式系統(tǒng)了,因此必然會(huì)出現(xiàn)子網(wǎng)絡(luò)。
而對(duì)于分布式系統(tǒng)而言,網(wǎng)絡(luò)又必定會(huì)出現(xiàn)異常情況因此,分區(qū)容錯(cuò)性就成為了分布式系統(tǒng)必然需要面對(duì)和解決的問(wèn)題。
4_總結(jié)
在分布式系統(tǒng)中,系統(tǒng)間的網(wǎng)絡(luò)不能100%保證健康,一定會(huì)有故障的時(shí)候,而服務(wù)有必須對(duì)外保證服務(wù)。因此Partition Tolerance 不可避免。
當(dāng)節(jié)點(diǎn)接收到新的數(shù)據(jù)變更時(shí),就會(huì)出現(xiàn)問(wèn)題了:
如果此時(shí)要保證一致性,就必須等待網(wǎng)絡(luò)恢復(fù),完成數(shù)據(jù)同步后,整個(gè)集群才對(duì)外提供服務(wù),服務(wù)處于阻塞狀態(tài),不可用。
如果此時(shí)要保證可用性,就不能等待網(wǎng)絡(luò)恢復(fù),那 node01、node02 與 node03 之間就會(huì)出現(xiàn)數(shù)據(jù)不一致。
也就是說(shuō),在P一定會(huì)出現(xiàn)的情況下,A和C之間只能實(shí)現(xiàn)一個(gè)。
CP without A,即實(shí)現(xiàn)一致性和分區(qū)容錯(cuò)性。
此組合為數(shù)據(jù)強(qiáng)一致性模式,即要求在多服務(wù)之間數(shù)據(jù)一定要一致,弱化了可用性。 一些對(duì)數(shù)據(jù)要求比較高的場(chǎng)景(比如金融業(yè)務(wù)等)使用此模式,這種模式性能偏低。 常用方案有 XA 兩階段提交、Seata AT 模式的“讀已提交”級(jí)別等。
AP without C,即實(shí)現(xiàn)可用性和分區(qū)容錯(cuò)性。
此組合為數(shù)據(jù)最終一致性模式,即要求所有服務(wù)都可用,弱化了一致性。 互聯(lián)網(wǎng)分布式服務(wù)多數(shù)基于AP,這種模式性能高,可以滿足高并發(fā)的業(yè)務(wù)需求。 常用方案有TCC、基于消息的最終一致性、Saga等。
CA without P,即實(shí)現(xiàn)一致性和可用性:
如果不要求P(不允許分區(qū)),則C(強(qiáng)一致性)和A(可用性)是可以保證的。 但放棄P的同時(shí)也就意味著放棄了系統(tǒng)的擴(kuò)展性,也就是分布式節(jié)點(diǎn)受限,沒辦法部署子節(jié)點(diǎn),這是違背分布式系統(tǒng)設(shè)計(jì)的初衷的。
系統(tǒng)架構(gòu)師往往需要把精力花在如何根據(jù)業(yè)務(wù)特點(diǎn)在 C(一致性) 和 A(可用性) 之間做選擇,即選擇 CP 還是 AP。
3、BASE理論
BASE是 Basically Available(基本可用)、Soft State(軟狀態(tài)) 和 EventuallyConsistency(最終一致性) 這3個(gè)短語(yǔ)的縮寫。
BASE理論是對(duì)CAP中的一致性及可用性進(jìn)行權(quán)衡的結(jié)果,其核心思想是:無(wú)法做到強(qiáng)一致性,那么可以通過(guò)犧牲強(qiáng)一致性來(lái)獲得可用性。
BASE理論是對(duì)CAP的一種解決思路,包含三個(gè)思想:
1_Basically Available(基本可用)
基本可用是對(duì) A(可用性) 的一個(gè)妥協(xié),即在分布式系統(tǒng)出現(xiàn)不可預(yù)知故障時(shí),允許損失部分可用性。比如在秒殺場(chǎng)景和雪崩的業(yè)務(wù)場(chǎng)景下進(jìn)行降級(jí)處理,使核心功能可用,而不是所有的功能可用。
分布式系統(tǒng)在出現(xiàn)故障時(shí),允許損失部分可用性,即保證核心可用。
2_Soft State(軟狀態(tài))
軟狀態(tài)是相對(duì)于原子性而言的。
要求多個(gè)節(jié)點(diǎn)的數(shù)據(jù)副本是一致的,這是一種“硬狀態(tài)”。
“軟狀態(tài)” 指的是:允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該狀態(tài)不影響系統(tǒng)的整體可用性,即允許系統(tǒng)在多個(gè)不同節(jié)點(diǎn)的數(shù)據(jù)副本上存在數(shù)據(jù)延時(shí)。
在一定時(shí)間內(nèi),允許出現(xiàn)中間狀態(tài),比如臨時(shí)的不一致狀態(tài)。
3_Eventually Consistent(最終一致性)
不可能一直是 “軟狀態(tài)” ,必須有個(gè)時(shí)間期限。
在時(shí)間期限過(guò)后,應(yīng)當(dāng)保證所有副本保持?jǐn)?shù)據(jù)一致性,從而達(dá)到數(shù)據(jù)的最終一致性。
這個(gè)時(shí)間期限取決于網(wǎng)絡(luò)延時(shí)、系統(tǒng)負(fù)載、數(shù)據(jù)復(fù)制方案設(shè)計(jì)等因素。
雖然無(wú)法保證強(qiáng)一致性,但是在軟狀態(tài)結(jié)束后,最終達(dá)到數(shù)據(jù)一致。
不只是分布式系統(tǒng)使用最終一致性,關(guān)系型數(shù)據(jù)庫(kù)在某個(gè)功能上也使用最終一致性。
比如在備份時(shí),數(shù)據(jù)庫(kù)的復(fù)制過(guò)程是需要時(shí)間的,在這個(gè)復(fù)制過(guò)程中,業(yè)務(wù)讀取的值就是“舊”的。
當(dāng)然,最終還是達(dá)到了數(shù)據(jù)一致性。
4_總結(jié)
總體來(lái)說(shuō),BASE 理論面向的是大型高可用、可擴(kuò)展的分布式系統(tǒng)。
不同于 ACID,BASE 理論提出通過(guò)犧牲強(qiáng)一致性來(lái)獲得可用性,并允許在一定時(shí)間內(nèi)的不一致,但是最終達(dá)到一致。
在實(shí)際的分布式場(chǎng)景中,不同業(yè)務(wù)對(duì)數(shù)據(jù)的一致性要求不一樣。因此在設(shè)計(jì)時(shí),往往結(jié)合使用 ACID 和 BASE 理論。
柚子快報(bào)邀請(qǐng)碼778899分享:分布式理論基礎(chǔ)
精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。