版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
CAPCAP由三個(gè)性質(zhì)組成:一致性(Consistency)、可用性(Availability)(Partitiontolerance)。其中,分區(qū)容錯(cuò)性指的是網(wǎng)絡(luò)出現(xiàn)了問(wèn)題,把原本通過(guò)網(wǎng)絡(luò)連有,最多只能有兩個(gè),那么三選二之后,排列組合一共有三種選擇,分別是CA、CPAP,CAP一個(gè)。也就是說(shuō)你只能選擇CP或者AP。在一些早期的文章中你還能看到這個(gè)常見的錯(cuò)誤。所以CAP并不是像下面這幅圖左邊展示的三選二,而是像右邊展示的那樣二選一:對(duì)于CAP,我們還有另一個(gè)常見的誤解。通常我在介紹名詞的時(shí)候都會(huì)先給個(gè)定義,但是對(duì)于CAP卻沒有。那你知道一致性的具體定義是什么嗎?我們一般對(duì)一致性都有一個(gè)模糊的認(rèn)識(shí),知道一致性描述了一個(gè)正確的數(shù)據(jù)讀寫場(chǎng)景,但是很少有人能說(shuō)清楚,具體怎樣才算是正確呢?我們會(huì)在這節(jié)課的后面告訴你,其實(shí)CP的一致性指的是可線性化(Liearizailiy)。這就是CAP的第二個(gè)問(wèn)題,定義不明確,容易產(chǎn)生誤解。CAPCAP在當(dāng)中,對(duì)于CAP三選二的誤解爭(zhēng)論不大,原因是這個(gè)誤解比較容易澄清?,F(xiàn)在比較是CAP對(duì)一致性的定義太過(guò)于簡(jiǎn)單。因?yàn)榉植际江h(huán)境不但有一致和不一致,中間還有很大的選擇空間。CAP將多種不一致選擇CAP來(lái)給第一次學(xué)習(xí)分布式理論的人啟蒙,但是在真正做架構(gòu)設(shè)計(jì)的時(shí)候要盡量少用。 我們?cè)诘?節(jié)課講支付系統(tǒng)的時(shí)候提到過(guò),支付系統(tǒng)會(huì)碰到信息流和流不一致的情況,因此需要用到異步系統(tǒng)對(duì)接的方式,最終信息流會(huì)和流一致。這里有一個(gè)關(guān)鍵的術(shù)語(yǔ)是最終一致性。性的時(shí)候,一般會(huì)自己是最終一致的。為了說(shuō)明一致性,我們要先弄明白什么叫作可見性(Visible)。假設(shè)有兩臺(tái)機(jī)器A和B,如果你在機(jī)器A上對(duì)數(shù)據(jù)的修改,經(jīng)過(guò)一段時(shí)間之后反映在了機(jī)器B上,這時(shí)候你的修改在機(jī)器B上就是可見的。一旦在機(jī)器B上是可見的之后,你就可以在機(jī)器B上使用在機(jī)器A上的修改結(jié)果。下面這幅圖展示了可見性的意義:“最終”則定義了一致性的時(shí)間范圍。它用到了數(shù)學(xué)上的極限(∞)概念。在有容災(zāi)的情況下,你對(duì)一臺(tái)機(jī)器的數(shù)據(jù)修改會(huì)被慢慢到其他的機(jī)器。隨著時(shí)間的推移,沒有到數(shù)據(jù)的機(jī)器數(shù)目會(huì)越來(lái)越少。當(dāng)這個(gè)時(shí)間是無(wú)窮大的時(shí)候,沒有到數(shù)據(jù)的機(jī)器數(shù)目跟CAP沒有對(duì)一致性做出準(zhǔn)確的分類一樣,最終一致性對(duì)于最終的定義也沒有提出準(zhǔn)確4(Session)有關(guān)。會(huì)話是個(gè)使用者的概念,而不是服務(wù)器端在單機(jī)或者沒有容災(zāi)的情況下,能不能判斷出是同一個(gè)用戶的作用不大。但是在有容災(zāi)的情況下,多臺(tái)功能一樣的機(jī)器會(huì)作為彼此的備份節(jié)點(diǎn)。這時(shí)候同一個(gè)用戶的不同請(qǐng)求可能會(huì)被發(fā)送到不同的機(jī)器上處理。雖然這時(shí)候是多臺(tái)機(jī)器在處理你的請(qǐng)求,但是從用戶的角度來(lái)看,你需要保證最后的處理結(jié)果,和在一臺(tái)機(jī)器上處理的結(jié)果是一樣的。這里的一樣并不要求完全一樣,因此也會(huì)有一些選擇的余地,這就是為什么我們會(huì)有4個(gè)不同的和會(huì)話相關(guān)的一致性。為了你理解起來(lái)更方便,在正式講解之前,我們先來(lái)看看簡(jiǎn)化版的容災(zāi)模型。在簡(jiǎn)化版的容災(zāi)模型里,用戶會(huì)往集群的主節(jié)點(diǎn)寫入數(shù)據(jù)。主節(jié)點(diǎn)負(fù)責(zé)將數(shù)據(jù)到備份節(jié)點(diǎn)。在這里對(duì)于的同步和異步?jīng)]有任何要求,對(duì)于節(jié)點(diǎn)的個(gè)數(shù)也沒有要求,只用戶的請(qǐng)求比較復(fù)雜。用戶既可以從主節(jié)點(diǎn)上數(shù)據(jù),也可以選擇從備份節(jié)點(diǎn)數(shù)據(jù),也可以有時(shí)候從主節(jié)點(diǎn)讀,有時(shí)候從備份節(jié)點(diǎn)讀。哪個(gè)節(jié)點(diǎn)取決于用戶和服務(wù)器之間的協(xié)議,也可能有一定的偶然因素。下面這幅圖展示了一個(gè)同步備份的例子。用戶把數(shù)據(jù)寫到主節(jié)點(diǎn)后,并不會(huì)直接返回,主節(jié)點(diǎn)會(huì)將數(shù)據(jù)同步寫入兩個(gè)容災(zāi)節(jié)點(diǎn)。只有這兩個(gè)容災(zāi)節(jié)點(diǎn)都寫入成功之后,主節(jié)點(diǎn)才會(huì)通知用戶說(shuō)數(shù)據(jù)已經(jīng)寫入成功。單調(diào)寫一致的英文名是MootocWrie。如果你往有容災(zāi)的集群里寫了多次數(shù)據(jù),單調(diào)寫一致要求所有的節(jié)點(diǎn)的寫入順序和你的寫入順序完全一致。這樣我們就能保證對(duì)于任何一個(gè)節(jié)點(diǎn),它看到的別人的寫操作和自己的寫操作是完全一致的。1的時(shí)候,前面兩個(gè)寫操作順序發(fā)生了錯(cuò)位,因此整個(gè)集群不滿足單調(diào)寫一致。和單調(diào)寫一致對(duì)應(yīng)的是單調(diào)讀一致,英文名是MonooicRea。你要注意的是,單調(diào)讀一致并不表示所有機(jī)器上的讀順序都是一致的。單調(diào)讀一致依然和寫的順序有關(guān)。它要求新的讀操作不能讀到老的結(jié)果。比如說(shuō),你如果從集群里讀到了一個(gè)值,那么如果你再讀一次的話,一定不能讀到之前的值。單調(diào)讀不一致的情況一般發(fā)生在的節(jié)點(diǎn)發(fā)生變化的時(shí)候。如果你的兩次讀發(fā)生在兩個(gè)不同的備份節(jié)點(diǎn),那么由于備份的速度不同,很有可能你的后一次會(huì)讀到更早一些的結(jié)果。的時(shí)候是從主節(jié)點(diǎn)上讀的,因此讀的是的寫入結(jié)果。第二次讀發(fā)生在容災(zāi)節(jié)點(diǎn)1上面。由于主節(jié)點(diǎn)將數(shù)據(jù)備份到容災(zāi)節(jié)點(diǎn)1需要很長(zhǎng)的時(shí)間,第二次讀的操作發(fā)生的時(shí)候,容災(zāi)節(jié)點(diǎn)還沒有的數(shù)據(jù),因此第二次讀返回了第一次寫入的數(shù)據(jù),這樣就了單調(diào)讀一致的要求。ReadYourWrite,也就是說(shuō)你能把自己寫入的值讀回來(lái)。它不僅僅為了能保證自讀自寫的一致性要求,服務(wù)器的節(jié)點(diǎn)在處理你讀請(qǐng)求的時(shí)候,需要確保自己節(jié)點(diǎn)上有這個(gè)會(huì)話過(guò)去所有的寫入記錄。這樣你才能確定所有寫入的結(jié)果都沒有丟失,而且在讀的時(shí)候前面的寫入都已經(jīng)完成了。操作。讀操作發(fā)生在容災(zāi)節(jié)點(diǎn)1上。由于主節(jié)點(diǎn)到容災(zāi)節(jié)點(diǎn)1的備份速度過(guò)慢,容災(zāi)節(jié)點(diǎn)1在處理讀請(qǐng)求的時(shí)候,還沒有收到第二個(gè)寫請(qǐng)求,因?yàn)榻Y(jié)果漏掉了一個(gè)寫入的WritefollowReads。前面三個(gè)一致性規(guī)定了一個(gè)會(huì)話的行為應(yīng)該是話,你的寫入一定要在另一個(gè)人的寫入之后發(fā)生。也就是說(shuō),倆之間的寫入有個(gè)先后想再寫點(diǎn)新東西進(jìn)去,那么整個(gè)集群需要保證倆寫入的先后順序。用戶1向主節(jié)點(diǎn)寫入了第一個(gè)數(shù)據(jù),接下來(lái)用戶2馬上從主節(jié)點(diǎn)讀到了這個(gè)寫入的數(shù)據(jù),然后又立刻寫了一個(gè)新的數(shù)據(jù)。由于主節(jié)點(diǎn)第一個(gè)數(shù)據(jù)到容災(zāi)節(jié)點(diǎn)1的速度太慢,導(dǎo)致容災(zāi)節(jié)點(diǎn)1先保存了后一個(gè)寫入的數(shù)據(jù),然后才保存前一個(gè)寫入的數(shù)據(jù),因此不是先讀Linearizability。線性一致性是分布式系統(tǒng)里最重要的一致性。你對(duì)于單個(gè)程序來(lái)說(shuō),它所有的操作之間沒有時(shí)間上的,也就是說(shuō)屬于同一個(gè)程序的兩個(gè)操作不會(huì)并發(fā)執(zhí)行。但是屬于不同程序的操作可以在執(zhí)行時(shí)間上有所,比如說(shuō)下面這幅圖展示了3個(gè)程序一共6個(gè)操作的時(shí)序圖:所有操作之間沒有任何時(shí)間上的。和我們?cè)?第12節(jié)課講的可串行化一樣,線性一致性對(duì)時(shí)間的調(diào)整也有一個(gè)要,那就是如果兩個(gè)操作之間沒有時(shí)間上的,那么這兩個(gè)操作之間的時(shí)間先后順序不能發(fā)下面這幅圖展示了對(duì)前面例子的分析。前面的例子一共有3個(gè)地方有時(shí)間,因此這些彼此的操作可以隨意調(diào)整先后順序。例子里還有兩個(gè)地方有操作的先后關(guān)系,因此在當(dāng)你把所有操作按照線性一致性的要求進(jìn)行調(diào)整之后,所有操作可以看作是先后進(jìn)行的,沒有任何并發(fā)。所以,你可以按照業(yè)務(wù)邏輯來(lái)分析所有程序的所有操作是否合理,比如說(shuō)加減錢是否正確,或者消息入棧出棧的順序。線性一致性是分布式環(huán)境下最重要的一致性。它在分布式環(huán)境下對(duì)所有操作進(jìn)行了排序,因此能幫助我們分析最后結(jié)果的合理性。線性一致性的實(shí)現(xiàn)還需要用到接下來(lái)兩節(jié)課的內(nèi)容,你先有個(gè)印象就行。在第12節(jié)課我給你介紹了單機(jī)情況下最強(qiáng)的一致性是可串行化。而這節(jié)課我們又學(xué)了式情況下最重要的一致性是可線性化。那么把這兩者結(jié)合起來(lái),就得到了分布式情況下最強(qiáng)的一致性,叫作嚴(yán)格可串行化(StrictSerializailiy)。這兩個(gè)事務(wù)的某一個(gè)順序執(zhí)行結(jié)果。這里對(duì)“某一個(gè)”并沒有做任何限定。而嚴(yán)格可串行化則對(duì)這個(gè)“某一個(gè)”做出了規(guī)定,它要求兩個(gè)事務(wù)的運(yùn)行結(jié)果等價(jià)于唯一一個(gè)順序執(zhí)行結(jié)果。在這個(gè)結(jié)果里,原來(lái)誰(shuí)的事務(wù)先結(jié)束,那么在順序執(zhí)行的情況下誰(shuí)的所有操作先結(jié)束。嚴(yán)格可串行化雖然有著極強(qiáng)的正確性保障,但是它的運(yùn)行效率特別低,所以一般很少用到。首先我給你簡(jiǎn)單介紹了分布式系統(tǒng)中最常見的CAP理論。CAP能方便初學(xué)者理解,但是由于它容易被誤解,而且對(duì)于分布式問(wèn)題的復(fù)雜度有一個(gè)過(guò)于籠統(tǒng)的結(jié)論,建議你在真正討論問(wèn)題的時(shí)候盡量少用。然后我們講了最終一致性。異步處理架構(gòu)一般具有最終一致性,但是最終一致性和CAP理接著我們從會(huì)話的角度來(lái)看一致性,一共有單調(diào)寫一致、單調(diào)讀一致、自讀自寫和先讀后寫這4種一致性分類。這4類之間都是并列關(guān)系,沒有高低強(qiáng)弱之分。接下來(lái)我們了解了線性一致性。線性一致性是分布式系統(tǒng)中最重要的一致性級(jí)別。它對(duì)所有操作開始和結(jié)束時(shí)間進(jìn)行合理的調(diào)整,最后的結(jié)果是所有操作能按順序執(zhí)行,這也是為什么叫作線性一致性的原因。在第三個(gè)模塊的前面三節(jié)課里,我給你介紹了單機(jī)、多機(jī)無(wú)備份和多機(jī)有備份這三種情況下對(duì)一致性的分類。很多情況下,我們并不是的一致性,而是根據(jù)我們的業(yè)務(wù)和經(jīng)濟(jì)情況來(lái)選擇合適的一致性級(jí)別,這一點(diǎn)在你設(shè)計(jì)金融系統(tǒng)的時(shí)候尤為重要?,F(xiàn)在分布式數(shù)據(jù)解決方案眾多,我們對(duì)這些技術(shù)宣傳的內(nèi)容一定不能盲從,根據(jù)它們的實(shí)現(xiàn)做選擇。當(dāng)然了,一致性選擇也不是完全沒有規(guī)律可循。下面這幅圖列出了我們前三節(jié)課大部分內(nèi)容之間的層級(jí)關(guān)系和我們通常的選擇。分析的思路是這樣的。首先我們要看是單機(jī)問(wèn)題還是多機(jī)問(wèn)題。如果是單機(jī)問(wèn)題,那么首選快照,一般不需要用到可串行化。這里還可以細(xì)分成兩種更詳細(xì)的情況,如果你只需要保證一個(gè)會(huì)話的正確性,那么一致性要求就是保證單調(diào)讀一致、單調(diào)寫一致和自讀自寫。如果需要保證多個(gè)會(huì)話之間的正確性,就要保證先讀后寫。最后,如果你要解決的是在
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度金融產(chǎn)品創(chuàng)新設(shè)計(jì)與推廣服務(wù)合同2篇
- 2025年度科技創(chuàng)新產(chǎn)品采購(gòu)項(xiàng)目委托代理服務(wù)合同3篇
- 2025年度科技園區(qū)不動(dòng)產(chǎn)使用權(quán)出讓合同3篇
- 2025年訴訟保全擔(dān)保流程執(zhí)行與賠償責(zé)任合同3篇
- 二零二五年度酒店行業(yè)員工派遣合同3篇
- 養(yǎng)殖場(chǎng)2025年度保險(xiǎn)服務(wù)合同3篇
- 二零二五版財(cái)產(chǎn)保全擔(dān)保與訴訟保全合同3篇
- 2025年度龍門吊租賃及項(xiàng)目管理咨詢服務(wù)合同4篇
- 2025年度教育信息化平臺(tái)建設(shè)與運(yùn)維外包合同3篇
- 2025版體育賽事贊助合同3篇
- 餐飲行業(yè)智慧餐廳管理系統(tǒng)方案
- 2025年度生物醫(yī)藥技術(shù)研發(fā)與許可協(xié)議3篇
- 電廠檢修安全培訓(xùn)課件
- 殯葬改革課件
- 2024企業(yè)答謝晚宴會(huì)務(wù)合同3篇
- 雙方個(gè)人協(xié)議書模板
- 車站安全管理研究報(bào)告
- 初中中考英語(yǔ)總復(fù)習(xí)《代詞動(dòng)詞連詞數(shù)詞》思維導(dǎo)圖
- 植物和五行關(guān)系解說(shuō)
- 滬教牛津版初中英語(yǔ)七年級(jí)下冊(cè)全套單元測(cè)試題
- 因式分解法提公因式法公式法
評(píng)論
0/150
提交評(píng)論