最近發(fā)生了比較多的大事情
- 很遺憾浴鸿,之前的測試小姐姐被組織給分配走了,以后就是別人的測試小姐姐了
- 最近成功忽悠到某個開發(fā)小姐姐一起寫文檔蔬顾,所以新的文檔都會先在github上合作開發(fā)郊供,等到定稿之后再發(fā)布出來
附:原文鏈接
目錄
1. CAP定理
一個分布式系統(tǒng)不可能同事滿足一致性(Consistency),可用性(Availability)和分區(qū)容忍性(Partition tolerance),最多只能同時滿足兩個
一致性:數(shù)據(jù)在多個副本之間保持一致。這很好理解,你在同一時間從集群的任意一個節(jié)點進行讀寫操作,結(jié)果都應(yīng)該一樣
可用性:每一個請求都應(yīng)該在一定時間內(nèi)獲得明確響應(yīng)瞎惫。服務(wù)一直可以對請求返回相應(yīng),而且是正常響應(yīng)時間
分區(qū)容忍性:大多數(shù)分布式系統(tǒng)都分布在多個子網(wǎng)絡(luò)译株。每個子網(wǎng)絡(luò)就叫做一個區(qū)(partition)瓜喇。分區(qū)容錯的意思是,區(qū)間通信可能失敗歉糜,失敗的情況下仍然能夠提供服務(wù)乘寒。
2. 可用性(Availability)
??可用性有兩個指標(biāo)
- 明確響應(yīng):所有可能的響應(yīng)結(jié)果都應(yīng)該在契約中有明確定義,不應(yīng)該出現(xiàn)協(xié)議之外的響應(yīng)或異常
- 一定時間:所有的請求都應(yīng)該在一定時間內(nèi)返回匪补,不能讓請求方一直等待
??對于一個本地調(diào)用來說伞辛,請求結(jié)果通常只有兩種狀態(tài):成功和失敗。但是引入了網(wǎng)絡(luò)之后夯缺,除了成功和失敗之外始锚,還會產(chǎn)生超時,這時候是無法確定請求到底是成功還是失敗的喳逛。
3. 分區(qū)容忍性(Partition tolerance)
3.1 分區(qū)
??首先分區(qū)如何產(chǎn)生?因為網(wǎng)絡(luò)棵里、硬件或軟件的原因润文,導(dǎo)致兩個節(jié)點之間的消息不能正常投遞姐呐。那么不能被正常訪問到的節(jié)點和其它節(jié)點就形成了不同的分區(qū)。
比如典蝌,一臺服務(wù)器放在中國曙砂,另一臺服務(wù)器放在美國,這就是兩個區(qū)骏掀,它們之間可能無法通信鸠澈。
3.2 分布式系統(tǒng)為什么不能同時選擇CA
??基于網(wǎng)絡(luò)的不可靠性,分區(qū)必然是會發(fā)生的截驮。當(dāng)分區(qū)發(fā)生的時候笑陈,你或者失去一致性(因為允許分別更新分區(qū)兩邊)或者失去可用性(因為你檢測到錯誤,關(guān)閉系統(tǒng)葵袭,直到分區(qū)消失)
如果不要求P(不允許分區(qū))涵妥,則C(強一致性)和A(可用性)是可以保證的。但放棄P的同時也就意味著放棄了系統(tǒng)的擴展性坡锡,也就是分布式節(jié)點受限蓬网,沒辦法部署子節(jié)點,這是違背分布式系統(tǒng)設(shè)計的初衷的鹉勒。
4. 一致性(Consistency)
4.1 ACID
??一致性要求我們在同一時間在系統(tǒng)任何一個節(jié)點進行的讀寫操作都能得到一致的結(jié)果帆锋。關(guān)系型數(shù)據(jù)庫通常會談到ACID特性,滿足ACID特性的數(shù)據(jù)庫都通過事務(wù)機制來達到一致性
- A: Atomicity禽额,原子性
- C : Consistency锯厢, 一 致性
- I: Isolation,隔離性绵疲。
- D: Durability哲鸳,持久性。
4.2 為什么不一致
??分布式系統(tǒng)為了解決大數(shù)據(jù)盔憨、高并發(fā)徙菠、復(fù)雜業(yè)務(wù)邏輯的問題,會對服務(wù)進行水平擴展或垂直拆分
- 水平擴展:將一個節(jié)點擴展為多個節(jié)點郁岩,那么這些節(jié)點之間的數(shù)據(jù)就可能會產(chǎn)生不一致
- 垂直拆分:將一個業(yè)務(wù)拆分成多個職責(zé)單一的模塊進行合作婿奔,那么這些模塊之間的數(shù)據(jù)和狀態(tài)也就有可能產(chǎn)生不一致
??我們?nèi)匀豢梢酝ㄟ^分布式事務(wù)來盡量保證一致性,但那將會付出更大的代價
5. BASE理論
??在分區(qū)容忍性這一節(jié)已經(jīng)分析過了问慎,分區(qū)是不可避免的萍摊,所以我們需要在C和A之間進行取舍,當(dāng)然這種取舍也并不是非此即彼的如叼,我們可以在這兩者之間找到一個平衡
BASE理論
- BA: Basically Available冰木,基本可用 。基本可用是指在出現(xiàn)故障時踊沸,可以損失一部分非核心流程的可用性來保證系統(tǒng)基本可用
- S: Soft State歇终,軟狀態(tài)。允許狀態(tài)在一段時間內(nèi)不同步逼龟。
- E: Eventually Consistent评凝,最終一致。你不能讓系統(tǒng)永遠(yuǎn)處于軟狀態(tài)腺律,所以在一定的時間窗口內(nèi)奕短, 最終數(shù)據(jù)達成一致即可。
??BASE理論是在CAP定理下在一致性和可用性之間進行博弈的結(jié)果匀钧。不要求強一致性翎碑,而是根據(jù)自身的業(yè)務(wù)特點,采用適當(dāng)?shù)姆绞絹硎瓜到y(tǒng)達到最終一致性
??最終一致性強調(diào)的是系統(tǒng)中所有的數(shù)據(jù)副本榴捡,在經(jīng)過一段時間的同步后杈女,最終能夠達到一個一致的狀態(tài)。因此吊圾,最終一致性的本質(zhì)是需要系統(tǒng)保證最終數(shù)據(jù)能夠達到一致达椰,而不需要實時保證系統(tǒng)數(shù)據(jù)的強一致性
??事實上,最終一致性并不是只有那些大型分布式系統(tǒng)才設(shè)計的特性项乒,許多現(xiàn)代的關(guān)系型數(shù)據(jù)庫都采用了最終一致性模型啰劲。在現(xiàn)代關(guān)系型數(shù)據(jù)庫中,大多都會采用同步和異步方式來實現(xiàn)主備數(shù)據(jù)復(fù)制技術(shù)檀何。在同步方式中蝇裤,數(shù)據(jù)的復(fù)制通常是更新事務(wù)的一部分,因此在事務(wù)完成后频鉴,主備數(shù)據(jù)庫的數(shù)據(jù)就會達到一致栓辜。而在異步方式中,備庫的更新往往存在延時垛孔,這取決于事務(wù)日志在主備數(shù)據(jù)庫之間傳輸?shù)臅r間長短藕甩,如果傳輸時間過長或者甚至在日志傳輸過程中出現(xiàn)異常導(dǎo)致無法及時將事務(wù)應(yīng)用到備庫上,那么顯然周荐,從備庫中讀取的的數(shù)據(jù)將是舊的狭莱,因此就出現(xiàn)了不一致的情況。當(dāng)然概作,無論是采用多次重試還是認(rèn)為數(shù)據(jù)訂正腋妙,關(guān)系型數(shù)據(jù)庫還是能搞保證最終數(shù)據(jù)達到一致——這就是系統(tǒng)提供最終一致性保證的經(jīng)典案例。
TIPS
什么是4個9
系統(tǒng)可用性=系統(tǒng)可用時間/(系統(tǒng)可用時間+系統(tǒng)故障時間) 比如說你有一個系統(tǒng)讯榕,在過去一年里總共有24小時的時間因為各種故障導(dǎo)致不能對外提供服務(wù)骤素,那么可用性就是364/365=99.73% emmm...這就叫兩個9
通俗叫法 | 可用性級別 | 年度停機時間 |
---|---|---|
2個9 | 99% | 87.6小時 |
3個9 | 99.9% | 8.8小時 |
4個9 | 99.99% | 53分鐘 |
5個9 | 99.999% | 5分鐘 |
參考
- 《分布式服務(wù)架構(gòu):原理匙睹、設(shè)計與實戰(zhàn)》一書作者李艷鵬、楊彪谆甜,電子工業(yè)出版社2017年8月出版》
- CAP迷思:關(guān)于分區(qū)容忍性