CAP与Base理论
分布一致性的提出
在分布式系統(tǒng)中要解決的一個(gè)重要問題就是數(shù)據(jù)的復(fù)制。在我們的日常開發(fā)經(jīng)驗(yàn)中,相信很多開發(fā)人員都遇到過這樣的問題:假設(shè)客戶端C1將系統(tǒng)中的一個(gè)值K由V1更新為V2,但客戶端C2無法立即讀取到K的最新值,需要在一段時(shí)間之后才能讀取到。這很正常,因?yàn)閿?shù)據(jù)庫復(fù)制之間存在延時(shí)。
分布式系統(tǒng)對(duì)于數(shù)據(jù)的復(fù)制需求一般都來自于以下兩個(gè)原因:
1、為了增加系統(tǒng)的可用性,以防止單點(diǎn)故障引起的系統(tǒng)不可用
2、提高系統(tǒng)的整體性能,通過負(fù)載均衡技術(shù),能夠讓分布在不同地方的數(shù)據(jù)副本都能夠?yàn)橛脩籼峁┓?wù)
數(shù)據(jù)復(fù)制在可用性和性能方面給分布式系統(tǒng)帶來的巨大好處是不言而喻的,然而數(shù)據(jù)復(fù)制所帶來的一致性挑戰(zhàn),也是每一個(gè)系統(tǒng)研發(fā)人員不得不面對(duì)的。
所謂分布一致性問題,是指在分布式環(huán)境中引入數(shù)據(jù)復(fù)制機(jī)制之后,不同數(shù)據(jù)節(jié)點(diǎn)之間 可能出現(xiàn)的,并無法依靠計(jì)算機(jī)應(yīng)用程序自身解決的數(shù)據(jù)不一致的情況。簡(jiǎn)單講,數(shù)據(jù)一致性就是指在對(duì)一個(gè)副本數(shù)據(jù)進(jìn)行更新的時(shí)候,必須確保也能夠更新其他的 副本,否則不同副本之間的數(shù)據(jù)將不一致。
那么如何解決這個(gè)問題?一種思路是"既然是由于延時(shí)動(dòng)作引起的問題,那我可以將寫入的動(dòng)作阻塞,直到數(shù)據(jù)復(fù)制完成后,才完成寫入動(dòng)作"。 沒錯(cuò),這似乎能解決問題,而且有一些系統(tǒng)的架構(gòu)也確實(shí)直接使用了這個(gè)思路。但這個(gè)思路在解決一致性問題的同時(shí),又帶來了新的問題:寫入的性能。如果你的應(yīng) 用場(chǎng)景有非常多的寫請(qǐng)求,那么使用這個(gè)思路之后,后續(xù)的寫請(qǐng)求都將會(huì)阻塞在前一個(gè)請(qǐng)求的寫操作上,導(dǎo)致系統(tǒng)整體性能急劇下降。
總得來說,我們無法找到一種能夠滿足分布式系統(tǒng)所有系統(tǒng)屬性的分布式一致性解決方案。因此,如何既保證數(shù)據(jù)的一致性,同時(shí)又不影響系統(tǒng)運(yùn)行的性能,是每一個(gè)分布式系統(tǒng)都需要重點(diǎn)考慮和權(quán)衡的。
于是,一致性級(jí)別由此誕生:
1、強(qiáng)一致性
這種一致性級(jí)別是最符合用戶直覺的,它要求系統(tǒng)寫入什么,讀出來的也會(huì)是什么,用戶體驗(yàn)好,但實(shí)現(xiàn)起來往往對(duì)系統(tǒng)的性能影響大
2、弱一致性
這種一致性級(jí)別約束了系統(tǒng)在寫入成功后,不承諾立即可以讀到寫入的值,也不久承諾多久之后數(shù)據(jù)能夠達(dá)到一致,但會(huì)盡可能地保證到某個(gè)時(shí)間級(jí)別(比如秒級(jí)別)后,數(shù)據(jù)能夠達(dá)到一致狀態(tài)
3、最終一致性
最終一致性是弱一致性的一個(gè)特例,系統(tǒng)會(huì)保證在一定時(shí)間內(nèi),能夠達(dá)到一個(gè)數(shù)據(jù)一致的狀態(tài)。這里之所以將最終一致性單獨(dú)提出來,是因?yàn)樗侨跻恢滦灾蟹浅M瞥绲囊环N一致性模型,也是業(yè)界在大型分布式系統(tǒng)的數(shù)據(jù)一致性上比較推崇的模型
?
網(wǎng)絡(luò)分區(qū)
當(dāng)網(wǎng)絡(luò)由于發(fā)生異常情況,導(dǎo)致分布式系統(tǒng)中部分節(jié)點(diǎn)之間的網(wǎng)絡(luò)延時(shí)不斷增大,最終導(dǎo)致組成分布式系統(tǒng)的所有節(jié)點(diǎn)中,只有部分節(jié)點(diǎn)之間能夠正常通信,而另一些節(jié)點(diǎn)則不能----我們將這個(gè)現(xiàn)象稱為網(wǎng)絡(luò)分區(qū)。當(dāng)網(wǎng)絡(luò)分區(qū)出現(xiàn)時(shí),分布式系統(tǒng)會(huì)出現(xiàn)局部小集群,在極端情況下,這些局部小集群會(huì)獨(dú)立完成原本需要整個(gè)分布式系統(tǒng)才能完成的功能,包括對(duì)數(shù)據(jù)的事物處理,這就對(duì)分布式一致性提出了非常大的挑戰(zhàn)。
網(wǎng)絡(luò)分區(qū)是指在分布式系統(tǒng)中,不同的節(jié)點(diǎn)分布在不同的子網(wǎng)絡(luò)(機(jī)房或異地網(wǎng)絡(luò)) 中,由于一些特殊的原因?qū)е?span style="color:#ff0000;">這些子網(wǎng)絡(luò)出現(xiàn)網(wǎng)絡(luò)不連通的狀況,但各個(gè)子網(wǎng)絡(luò)的內(nèi)部網(wǎng)絡(luò)是正常的,從而導(dǎo)致整個(gè)系統(tǒng)的網(wǎng)絡(luò)環(huán)境被切分成了若干個(gè)孤立的區(qū)域。 需要注意的是,組成一個(gè)分布式系統(tǒng)的每個(gè)節(jié)點(diǎn)的加入與退出都可以看作是一個(gè)特殊的網(wǎng)絡(luò)分區(qū)。
?
CAP
CAP指的是在一個(gè)分布式系統(tǒng)中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區(qū)容錯(cuò)性),三者不可得兼。
分布式系統(tǒng)的CAP理論:理論首先把分布式系統(tǒng)中的三個(gè)特性進(jìn)行了如下歸納:● 一致性(C):在分布式環(huán)境下,一致性是指數(shù)據(jù)在多個(gè)副本之間能否保持一致的特性。在一致性的需求下,當(dāng)一個(gè)系統(tǒng)在數(shù)據(jù)一致的狀態(tài)下執(zhí)行更新操作后,應(yīng)該保證系統(tǒng)的數(shù)據(jù)仍然處于一直的狀態(tài)。 ● 可用性(A):在集群中一部分節(jié)點(diǎn)故障后,集群整體是否還能響應(yīng)客戶端的讀寫請(qǐng)求。(對(duì)數(shù)據(jù)更新具備高可用性) ● 分區(qū)容錯(cuò)性(P):分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障的時(shí)候,仍然需要能夠保證對(duì)外提供滿足一致性和可用性的服務(wù),除非是整個(gè)網(wǎng)絡(luò)環(huán)境都發(fā)生了故障。 既然一個(gè)分布式系統(tǒng)無法同時(shí)滿足一致性、可用性、分區(qū)容錯(cuò)性三個(gè)特點(diǎn),所以我們就需要拋棄一樣: ?
?
?
BASE理論
BASE是Basically Available(基本可用)、Soft state(軟狀態(tài))和Eventually consistent(最終一致性)三個(gè)短語的縮寫。
BASE理論是對(duì)CAP中一致性和可用性權(quán)衡的結(jié)果,其來源于對(duì)大規(guī)?;ヂ?lián)網(wǎng)系統(tǒng)分布式實(shí)踐的總結(jié), 是基于CAP定理逐步演化而來的。
BASE理論的核心思想是:即使無法做到強(qiáng)一致性,但每個(gè)應(yīng)用都可以根據(jù)自身業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞絹硎瓜到y(tǒng)達(dá)到最終一致性。
接下來看一下BASE中的三要素:
1、基本可用
基本可用是指分布式系統(tǒng)在出現(xiàn)不可預(yù)知故障的時(shí)候,允許損失部分可用性----注意,這絕不等價(jià)于系統(tǒng)不可用。比如:
(1)響應(yīng)時(shí)間上的損失。正常情況下,一個(gè)在線搜索引擎需要在0.5秒之內(nèi)返回給用戶相應(yīng)的查詢結(jié)果,但由于出現(xiàn)故障,查詢結(jié)果的響應(yīng)時(shí)間增加了1~2秒
(2)系統(tǒng)功能上的損失:正常情況下,在一個(gè)電子商務(wù)網(wǎng)站上進(jìn)行購物的時(shí)候,消費(fèi)者幾乎能夠順利完成每一筆訂單,但是在一些節(jié)日大促購物高峰的時(shí)候,由于消費(fèi)者的購物行為激增,為了保護(hù)購物系統(tǒng)的穩(wěn)定性,部分消費(fèi)者可能會(huì)被引導(dǎo)到一個(gè)降級(jí)頁面
2、軟狀態(tài)
軟狀態(tài)指允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該中間狀態(tài)的存在不會(huì)影響系統(tǒng)的整體可用性,即允許系統(tǒng)在不同節(jié)點(diǎn)的數(shù)據(jù)副本之間進(jìn)行數(shù)據(jù)同步的過程存在延時(shí)
3、最終一致性
最終一致性強(qiáng)調(diào)的是所有的數(shù)據(jù)副本,在經(jīng)過一段時(shí)間的同步之后,最終都能夠達(dá)到一個(gè)一致的狀態(tài)。因此,最終一致性的本質(zhì)是需要系統(tǒng)保證最終數(shù)據(jù)能夠達(dá)到一致,而不需要實(shí)時(shí)保證系統(tǒng)數(shù)據(jù)的強(qiáng)一致性。
總的來說,BASE理論面向的是大型高可用可擴(kuò)展的分布式系統(tǒng),和傳統(tǒng)的事物ACID特性是相反的,它完全不同于ACID的強(qiáng)一致性模型,而是通過犧牲強(qiáng)一致性來獲得可用性,并允許數(shù)據(jù)在一段時(shí)間內(nèi)是不一致的,但最終達(dá)到一致狀態(tài)。但同時(shí),在實(shí)際的分布式場(chǎng)景中,不同業(yè)務(wù)單元和組件對(duì)數(shù)據(jù)一致性的要求是不同的,因此在具體的分布式系統(tǒng)架構(gòu)設(shè)計(jì)過程中,ACID特性和BASE理論往往又會(huì)結(jié)合在一起。
?
?
來源:https://www.cnblogs.com/szlbm/p/5588543.html
轉(zhuǎn)載于:https://www.cnblogs.com/theRhyme/p/9188482.html
總結(jié)
以上是生活随笔為你收集整理的CAP与Base理论的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 潘正磊谈微软研发团队管理和敏捷实践学习总
- 下一篇: 多行文本溢出省略号