分布式——ACID原则 CAP理论
分布式計(jì)算的原理
分布式計(jì)算就是將計(jì)算任務(wù)分?jǐn)偟酱罅康挠?jì)算節(jié)點(diǎn)上,一 起完成海量的計(jì)算任務(wù)。而分布式計(jì)算的原理和并行計(jì)算 類(lèi)似,就是將一個(gè)復(fù)雜龐大的計(jì)算任務(wù)適當(dāng)劃分為一個(gè)個(gè) 小任務(wù),任務(wù)并行執(zhí)行,只不過(guò)分布式計(jì)算會(huì)將這些任務(wù) 分配到不同的計(jì)算節(jié)點(diǎn)上,每個(gè)計(jì)算節(jié)點(diǎn)只需要完成自己 的計(jì)算任務(wù)即可,可以有效分擔(dān)海量的計(jì)算任務(wù)。而每個(gè) 計(jì)算節(jié)點(diǎn)也可以并行處理自身的任務(wù),更加充分利用機(jī)器 的CPU資源。最后再將每個(gè)節(jié)點(diǎn)的計(jì)算結(jié)果匯總,得到最 后的計(jì)算結(jié)果。
分布式計(jì)算的理論基礎(chǔ)
ACID原則
ACID是數(shù)據(jù)庫(kù)事務(wù)正常執(zhí)行的四個(gè)原則,分別指原子性、一致性、獨(dú)立性及持久性。
A(Atomicity)—— 原子性 原子性很容易理解,也就是說(shuō)事務(wù)里的所有操作要么全部做完,要么都不做,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個(gè)操作失 敗,整個(gè)事務(wù)就失敗,需要回滾。 例如銀行轉(zhuǎn)賬,從A賬戶(hù)轉(zhuǎn)100元至B賬戶(hù),分為兩個(gè)步驟:①?gòu)腁賬戶(hù)取 100元;②存入100元至B賬戶(hù)。 這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失 敗,錢(qián)會(huì)莫名其妙少了100元。
C(Consistency)—— 一致性 一致性也比較容易理解,也就是說(shuō)數(shù)據(jù)庫(kù)要一直處于一致的狀態(tài),事務(wù)的運(yùn)行不會(huì)改變數(shù)據(jù)庫(kù)原本的一致性約束。 例如現(xiàn)有完整性約束a + b = 10,如果一個(gè)事務(wù)改變了a,那么必須得改變 b,使得事務(wù)結(jié)束后依然滿(mǎn)足a + b = 10,否則事務(wù)失敗。
I(Isolation)—— 獨(dú)立性 所謂的獨(dú)立性是指并發(fā)的事務(wù)之間不會(huì)互相影響,如果一個(gè)事務(wù)要訪(fǎng)問(wèn) 的數(shù)據(jù)正在被另外一個(gè)事務(wù)修改,只要另外一個(gè)事務(wù)未提交,它所訪(fǎng)問(wèn) 的數(shù)據(jù)就不受未提交事務(wù)的影響。 例如交易是從A賬戶(hù)轉(zhuǎn)100元至B賬戶(hù),在這個(gè)交易還未完成的情況下,如 果此時(shí)B查詢(xún)自己的賬戶(hù),是看不到新增加的100元的。
D(Durability)—— 持久性 持久性是指一旦事務(wù)提交后,它所做的修改將會(huì)永久保存在數(shù)據(jù)庫(kù)上, 即使出現(xiàn)宕機(jī)也不會(huì)丟失。 這些原則解決了數(shù)據(jù)的一致性、系統(tǒng)的可靠性等關(guān)鍵問(wèn)題,為關(guān)系數(shù)據(jù) 庫(kù)技術(shù)的成熟以及在不同領(lǐng)域的大規(guī)模應(yīng)用創(chuàng)造了必要的條件。
CAP理論
一個(gè)分布式系統(tǒng)最多只 能同時(shí)滿(mǎn)足一致性(Consistency)、可用 性(Availability)和分區(qū)容錯(cuò)性(Partition tolerance)這三項(xiàng)中的兩項(xiàng)。
一致性
指“All nodes see the same data at the same time”,即更新操作成功并返 回客戶(hù)端完成后,所有節(jié)點(diǎn)在同一時(shí)間的數(shù)據(jù)完全一致。對(duì)于一致性,可以分 為從客戶(hù)端和服務(wù)端兩個(gè)不同的視角來(lái)看。
- 從客戶(hù)端來(lái)看,一致性主要指多并發(fā)訪(fǎng)問(wèn)時(shí)更新過(guò)的數(shù)據(jù)如何獲取的問(wèn)題。
- 從服務(wù)端來(lái)看,則是如何將更新復(fù)制分布到整個(gè)系統(tǒng),以保證數(shù)據(jù)的最終一 致性問(wèn)題。
可用性
- 指“Reads and writes always succeed”,即服務(wù)一直可用,而且是 在正常的響應(yīng)時(shí)間內(nèi)。對(duì)于一個(gè)可用性的分布式系統(tǒng),每一個(gè)非故障的節(jié)點(diǎn) 必須對(duì)每一個(gè)請(qǐng)求作出響應(yīng)。也就是該系統(tǒng)使用的任何算法必須最終終止
- 當(dāng)同時(shí)要求分區(qū)容錯(cuò)性時(shí),這是一個(gè)很強(qiáng)的定義:即使是嚴(yán)重的網(wǎng)絡(luò)錯(cuò)誤, 每個(gè)請(qǐng)求也必須終止。好的可用性主要是指系統(tǒng)能夠很好地為用戶(hù)服務(wù),不 出現(xiàn)用戶(hù)操作失敗或者訪(fǎng)問(wèn)超時(shí)等用戶(hù)體驗(yàn)不好的情況。通常情況下可用性 和分布式數(shù)據(jù)冗余、負(fù)載均衡等有著很大的關(guān)聯(lián)。
分區(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(mǎn)足一致性和可用性的服務(wù)。
- 分區(qū)容錯(cuò)性和擴(kuò)展性緊密相關(guān)。在分布式應(yīng)用中,可能因?yàn)橐恍┓植际降脑?因?qū)е孪到y(tǒng)無(wú)法正常運(yùn)轉(zhuǎn)。好的分區(qū)容錯(cuò)性要求應(yīng)用雖然是一個(gè)分布式系統(tǒng), 但看上去卻好像是一個(gè)可以運(yùn)轉(zhuǎn)正常的整體。例如現(xiàn)在的分布式系統(tǒng)中有某 一個(gè)或者幾個(gè)機(jī)器宕掉了,其他剩下的機(jī)器還能夠正常運(yùn)轉(zhuǎn)滿(mǎn)足系統(tǒng)需求, 或者是機(jī)器之間有網(wǎng)絡(luò)異常,將分布式系統(tǒng)分隔為獨(dú)立的幾個(gè)部分,各個(gè)部 分還能維持分布式系統(tǒng)的運(yùn)作,這樣就具有好的分區(qū)容錯(cuò)性。
CAP權(quán)衡
無(wú)法同時(shí)滿(mǎn)足一致性、可用性和分區(qū)容錯(cuò)性這三個(gè)特性,那應(yīng)該如何取舍呢?
(1)CA without P:如果不要求P(不允許分區(qū)),則C(強(qiáng)一致性)和A(可用 性)是可以保證的。但其實(shí)分區(qū)始終會(huì)存在,因此CA的系統(tǒng)更多的是允許分區(qū) 后各子系統(tǒng)依然保持CA。
(2)CP without A:如果不要求A(可用),相當(dāng)于每個(gè)請(qǐng)求都需要在Server之 間強(qiáng)一致,而P(分區(qū))會(huì)導(dǎo)致同步時(shí)間無(wú)限延長(zhǎng),如此CP也是可以保證的。很 多傳統(tǒng)的數(shù)據(jù)庫(kù)分布式事務(wù)都屬于這種模式。
(3)AP without C:要高可用并允許分區(qū),則需放棄一致性。一旦分區(qū)發(fā)生, 節(jié)點(diǎn)之間可能會(huì)失去聯(lián)系,為了高可用,每個(gè)節(jié)點(diǎn)只能用本地?cái)?shù)據(jù)提供服務(wù), 而這樣會(huì)導(dǎo)致全局?jǐn)?shù)據(jù)的不一致性。現(xiàn)在眾多的NoSQL都屬于此類(lèi)。
總結(jié)
以上是生活随笔為你收集整理的分布式——ACID原则 CAP理论的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021-07-23 小记
- 下一篇: VMware下主机与虚拟机剪切板独立,无