在2000年的分布式計(jì)算原則研討會(huì)(PODC)上,計(jì)算機(jī)科學(xué)家埃里克.布魯爾針對分布式計(jì)算系統(tǒng)的一致性(Consistency)、可用性(Availability)、分區(qū)容錯(cuò)性(Partition-tolerant)提出了猜想。在2002年,他的猜想得到了來自麻省理工學(xué)院的兩位教授Nancy Lynch 和 Seth Gilbert的證明,并被稱為CAP定理。
CAP定理證實(shí)的是,在一個(gè)分布式計(jì)算系統(tǒng)中,不可能同時(shí)滿足下面三個(gè)條件:
- 一致性(Consistency)
- 可用性(Availability)
- 分區(qū)容錯(cuò)性(Partition-tolerant)
在分布式系統(tǒng)中,一致性(Consistency)分為不同的類型。如果要求分布式系統(tǒng)的數(shù)據(jù)存儲(chǔ)層,在更新數(shù)據(jù)后,在后續(xù)的訪問中都能獲取到,并且保證結(jié)果一致,則是強(qiáng)一致性;如果能夠允許后續(xù)的部分或者全部訪問不到,則是弱一致性;如果允許經(jīng)過一段時(shí)間后,能夠訪問到更新的數(shù)據(jù),并保持一致,則是最終一致性。CAP定理中所說的不可能滿足的是強(qiáng)一致性。
可用性指的是在正常響應(yīng)時(shí)間內(nèi),服務(wù)一直可用。在分布式系統(tǒng)中存在許多節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都承擔(dān)著相應(yīng)的職責(zé),如果其中某個(gè)節(jié)點(diǎn)出現(xiàn)故障,就有可能導(dǎo)致整個(gè)系統(tǒng)的癱瘓,所以保障系統(tǒng)的可用性是設(shè)計(jì)分布式系統(tǒng)必須要重點(diǎn)考慮的。對于一個(gè)具備可用性的分布式系統(tǒng),每一個(gè)正常運(yùn)行的節(jié)點(diǎn)都必須對請求做出響應(yīng)。所以,通常我們都會(huì)通過停機(jī)時(shí)間來衡量一個(gè)系統(tǒng)的可用性。
| 可用性分類 | 可用水平 | 年可容忍停機(jī)時(shí)間 |
|---|---|---|
| 容錯(cuò)可用性 | 99.9999% | <1min |
| 極高可用性 | 99.999% | <5 min |
| 自恢復(fù)可用性 | 99.99% | <53 min |
| 高可用性 | 99.9% | <8.8h |
| 商品可用性 | 99% | <87.6h |
分區(qū)容錯(cuò)性是指,當(dāng)分布式系統(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ī)器宕掉了,其他剩下的機(jī)器還能夠正常運(yùn)轉(zhuǎn)滿足系統(tǒng)需求,或者是機(jī)器之間有網(wǎng)絡(luò)異常,將分布式系統(tǒng)分隔未獨(dú)立的幾個(gè)部分,各個(gè)部分還能維持分布式系統(tǒng)的運(yùn)作,這樣就具有好的分區(qū)容錯(cuò)性。