文章插圖

文章插圖
先不管CAP是什么,就談談對于一個分布式的系統,它有哪些特征或行為 。
(1)分布式系統會把服務部署在多個節點上
(2)每個節點都有可能存儲數據,一份數據可能在多個節點上有副本
(3)節點之間通過網絡進行數據的同步
假設有個服務,需要部署在3個節點上,每個節點都需要存儲同一份數據id,id的初始值都是1 。
C(Consistence)一致性,對于指定的副本數據,訪問任意一個節點,都能讀到相同的值 。
A(Availability)可用性,訪問非故障的節點,總能在合理的時間內得到合理的響應 。
P(Partition Tolerance)分區容錯性,發生網絡分區時,整個系統依然能對外提供服務 。
一致性
對節點1執行數據更新的操作后,如果不進行同步操作,這個時候再去讀取節點2的數據,就會得到不一樣的結果,從而產生不一致 。如果任意用戶能在任意時間訪問不同節點,都能得到相同的數據,那么這個分布式系統就是強一致的 。
CAP中的C代表的就是強一致性,并且不考慮數據同步之間的延遲 。
此外,還有
弱一致性,指的是在更新某個節點的數據之后,訪問其余一小部分的節點得不到最新的結果 。
最終一致性,指的是某個節點的數據之后,在一段時間內訪問其他節點得不到最新的結果,但在稍后的某一個時刻,能夠得到最新的結果 。
可用性
指的是能在合理的時間內得到合理的響應,或者說在有限的時間內得到一個可以理解的響應 。對于不同的系統,有不同的“有限時間” 。“可以理解的響應”指的是要么返回執行成功,要么執行失敗(但狀態碼是200),而不是返回404、500等 。
分區容錯性
網絡分區指的是,由于網絡是不可靠的,本來A機房與B機房可以互相訪問,是一個整體 。當A機房與B機房的光纖斷了,A機房便不能與B機房進行通信,整體被劃分成了兩個區域(區域內部是可以互相通信的),于是網絡也被劃分成了兩個區域,形成所謂的網絡分區 。
對于一個分布式系統,發生網絡分區是必然存在的 。必定不發生網絡分區的系統,那就是一個單體系統,并不是分布式系統 。
當然,一個分布式系統,在極端的情況下,如果要犧牲P保證AC也是可以的 。
一般來說,分布式系統都會選擇滿足P 。
那么,剩余的CA可以同時滿足嗎?
先說結論,在存在網絡分區的情況下(即滿足P),那就不可以同時滿足A與C 。
假設節點1存在于分區a中,節點2與節點3存在于分區b中 。
如果此時要滿足A(可用性),且節點2與節點3只是在另外一個分區中,并沒有發生節點本身的故障,由可用性的定義,三個節點都可以進行訪問 。
【分布式是指什么 分布式怎么理解】此時用戶訪問節點1,得到id=2,訪問節點2時,得到id=1,發生數據不一致的情況 。
所以,滿足A的情況下,就滿足不了C(一致性) 。
如果一開始要滿足C呢?
為了保證訪問各個節點,都能用戶最新更新的值,就要禁止任何對節點2與節點3的讀寫操作,這就違背了A 。
所以,在滿足C的情況下,就滿足不了A 。
既然在發生網絡分區的時候,不能同時滿足A與C,那么怎么在兩者之間進行權衡呢?
選擇AP
在發生網絡分區的情況下,選擇可用性,就要放棄一致性 。
Eureka就是典型的AP系統
在Eureka集群中,各個server節點沒有主從之分,都是相互平等的個體 。
各個server節點會互相復制數據,產生沖突時,直接用最新的數據覆蓋掉舊數據即可 。
每一個client只會向一個server節點注冊,server會將該client的ip等信息放入到注冊列表中 。
之后client會向server節點定時發送心跳并同時拉取注冊列表到client的本地緩存中,超過一定時間不發送,server會將該client從注冊列表中剔除 。
如果一個client下線,首先需要過一段時間才能在server的注冊列表中體現出來,隨后才能在其他的client上的本地緩存中體現出來 。因此client上本地緩存中的服務注冊數據并不是最新的,因此這里不能保證強一致性 。
一個server節點宕機或出現網絡分區聯系不上其他節點,其他節點仍然能提供注冊與查詢服務,因此保證了可用性 。該server節點沒有將自己的注冊列表同步到其他節點,就會使得部分client的注冊信息丟失,因此這里不能保證一致性 。
當上述server節點重新上線或網絡穩定后,就能將當前的注冊列表同步到其他節點,整體又能達到最終一致性 。
Eureka作為一個專門的服務注冊與發現的系統,能夠容忍數據不一致的情況(例如當A調用B,B已經下線,但A查詢server時,依然能夠獲得B的注冊信息 。A隨后發起對B的調用,結果肯定是調用失敗,這個時候A選擇重試或者直接熔斷即可) 。即使發生不一致的情況,也基本上是少數數據的不一致,如果這個時候直接強行讓注冊中心不可用,顯然是忍受不了的 。
- 五險一金是什么 五險一金指什么多少錢
- 運維各個崗位的職責是什么 運維項目經理的職責
- 肉卡在牙縫里一會就臭了是什么原因
- 平面ui是什么意思 平面設計和UI的區別
- 淘寶客軟件有哪些 淘寶客都使用什么軟件
- 男生會因為女生這個動作悄然心動 什么動作可以讓男生對你心動
- 不建議在一起的星座情侶 什么星座的情侶不適合談戀愛
- 為什么男人對初戀情有獨鐘 男生初戀后還會有真愛
- 跟初戀分手又復合 和初戀分手一年復合是什么心理
- 周柏豪的個人資料簡介 周柏豪和周焯華是什么關系
