CAP定理介紹
CAP 定理指的是在一個(gè)分布式系統(tǒng)中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區(qū)容錯(cuò)性),三者不可兼得。
通俗來說:
一致性(C):當(dāng)系統(tǒng)數(shù)據(jù)發(fā)生更新操作后,各個(gè)主機(jī)中的數(shù)據(jù)仍然處于一致的狀態(tài)。
可用性(A):對(duì)于用戶的每一個(gè)請(qǐng)求,系統(tǒng)總是可以在有限的時(shí)間內(nèi)對(duì)用戶做出響應(yīng)。
分區(qū)容錯(cuò)性(P):分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障時(shí),仍能夠保證對(duì)外提供滿足一致性或可用性的服務(wù)。
對(duì)于分布式系統(tǒng)來說,網(wǎng)絡(luò)??環(huán)境是相對(duì)不可控制的,出現(xiàn)網(wǎng)絡(luò)分區(qū)是不可避免的。網(wǎng)絡(luò)分區(qū)的出現(xiàn)很可能就會(huì)帶來腦裂問題(例如:機(jī)房之間的網(wǎng)絡(luò)通信出現(xiàn)故障),這就會(huì)導(dǎo)致集群分裂成兩個(gè)或多個(gè),它們都認(rèn)為只有自己沒有崩潰,都可以獨(dú)立運(yùn)行。對(duì)于zk這分布式協(xié)調(diào)系統(tǒng)來說,數(shù)據(jù)的一致性是基本的要求,它需要保證在任何時(shí)刻訪問都能得到一致性的數(shù)據(jù)結(jié)果,所以分區(qū)容錯(cuò)性是需要保證的。zk默認(rèn)是通過“過半機(jī)制”防止腦裂的。
不難發(fā)現(xiàn),一致性和可用性是不能同時(shí)保證的。原因:數(shù)據(jù)同步是需要時(shí)間的,在同步的期間,若允許client訪問,則client從不同節(jié)點(diǎn)讀取到的數(shù)據(jù)就可能是不同的(犧牲了一致性保證了可用性)。若不允許client訪問,則client在同步期間無法獲取服務(wù),但是在同步后無論訪問哪個(gè)節(jié)點(diǎn)讀取的數(shù)據(jù)都會(huì)是一樣的(犧牲了可用性從而保證一致性)。
網(wǎng)絡(luò)分區(qū)是指在分布式系統(tǒng)中,由于網(wǎng)絡(luò)故障、節(jié)點(diǎn)故障等原因,導(dǎo)致集群中的節(jié)點(diǎn)被分割成多個(gè)獨(dú)立的子集,每個(gè)子集之間無法進(jìn)行通信的現(xiàn)象。網(wǎng)絡(luò)分區(qū)會(huì)導(dǎo)致分布式系統(tǒng)的可用性和一致性受到影響,因此需要采取一定的措施來避免或解決網(wǎng)絡(luò)分區(qū)問題。
BASE 理論
BASE 是 Basically Available(基本可用)、Soft state(軟狀態(tài))和 Eventually consistent(最終一致性)三個(gè)短語的簡寫,BASE 是對(duì) CAP 中一致性和可用性權(quán)衡的結(jié)果,其來源于對(duì)大規(guī)?;ヂ?lián)網(wǎng)系統(tǒng)分布式實(shí)踐的結(jié)論,是基于 CAP 定理逐步演化而來的。
BASE 理論的核心思想是:即使無法做到強(qiáng)一致性,但每個(gè)系統(tǒng)都可以根據(jù)自身的業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞絹硎瓜到y(tǒng)達(dá)到最終一致性。
1.基本可用:分布式系統(tǒng)出現(xiàn)不可預(yù)知故障的時(shí)候,允許損失部分可用性。體現(xiàn)在:響應(yīng)時(shí)間上的損失 和 功能上的損失(服務(wù)降級(jí))。
2.軟狀態(tài):允許系統(tǒng)數(shù)據(jù)存在的中間狀態(tài),并認(rèn)為該中間狀態(tài)的存在不會(huì)影響系統(tǒng)的整體可用性。例如允許zk之間的數(shù)據(jù)同步存在一定的數(shù)據(jù)延遲。
3.最終一致性:強(qiáng)調(diào)所有的數(shù)據(jù)副本在經(jīng)過一段時(shí)間后,最終能夠達(dá)到一個(gè)一致性的狀態(tài)。
從zk的角度談cp
在zk集群中,leader節(jié)點(diǎn)宕機(jī)后,整個(gè)集群會(huì)有一段時(shí)間是不能被訪問的,后面又可以訪問了。在這段不可訪問的時(shí)間內(nèi),zk集群是在做leader選舉,期間是不接受客戶端的讀寫操作的。也可以這么理解在leader選舉期間,zk集群是處于癱瘓期間的,同步完畢后讀取到的數(shù)據(jù)是一致性的數(shù)據(jù)。滿足了一致性,犧牲了一定的可用性。
分布式一致性
通俗來說,分布式事務(wù)是將多個(gè)操作組成一個(gè)事務(wù)來完成,并且這多個(gè)操作要么一起成功,要么一起失敗。這個(gè)很有名的一個(gè)處理分布式事務(wù)的組件就是阿里的seats。一般分布式一致性是由分布式事務(wù)實(shí)現(xiàn)的,需要保證客戶端從分布式系統(tǒng)中的每一個(gè)server節(jié)點(diǎn)獲取的數(shù)據(jù),在某一段時(shí)間是可以保證是一致的(最終一致性)。
2PC算法:每一個(gè)server對(duì)本地事務(wù)的確認(rèn),需要經(jīng)歷兩個(gè)階段,prepare階段和commit階段。在MySQL中通過2pc保證Redo和Binlog的保持一致。1)當(dāng)事務(wù)提交時(shí)InnoDB存儲(chǔ)引擎進(jìn)行prepare操作,將數(shù)據(jù)寫入到binglog日志中。2)InnoDB存儲(chǔ)引擎將事務(wù)寫入到Redo Log文件中。在seata的事務(wù)模式中XA,AT,TCC都是2PC的。
3PC算法:在2PC的基礎(chǔ)上新增一個(gè)Accept階段(提交指令階段)。該階段主要是事務(wù)協(xié)調(diào)者(TC)向資源管理者(RM)發(fā)送accept指令,RM收到指令后判斷是否可以完成自己的事物并且將判斷結(jié)果給TC。文章來源:http://www.zghlxwxcb.cn/news/detail-724208.html
Paxos算法:該算法要解決的問題是在分布式系統(tǒng)中如何就某個(gè)決議達(dá)成一致。ZAB(Zookeeper Atomic Broadcast)協(xié)議是Paxos算法的一種工業(yè)實(shí)現(xiàn)。在zookeeper中使用一個(gè)單一主進(jìn)程來接收并處理客戶端的所有請(qǐng)求(寫請(qǐng)求),當(dāng)數(shù)據(jù)發(fā)生變更,ZAB采用原子廣播協(xié)議,以事務(wù)提案 Proposal 的形式廣播到所有的副本進(jìn)程上并且為每一個(gè)事務(wù)分配一個(gè)全局遞增的編號(hào)Xid. 客戶端連接到一個(gè)z k集群后,如果是讀請(qǐng)求,那么當(dāng)前節(jié)點(diǎn)就會(huì)根據(jù)自己保存的數(shù)據(jù)對(duì)其進(jìn)行相應(yīng)數(shù)據(jù)返回。如果是寫請(qǐng)求并且不是leader節(jié)點(diǎn),那么當(dāng)前節(jié)點(diǎn)就會(huì)首先將請(qǐng)求轉(zhuǎn)發(fā)給leader節(jié)點(diǎn),leader節(jié)點(diǎn)以提案的方式廣播該寫操作,只有超過過半的節(jié)點(diǎn)同意該寫操作該寫請(qǐng)求才會(huì)被提交,然后leader廣播給所有的follower節(jié)點(diǎn),通知它們同步數(shù)據(jù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-724208.html
到了這里,關(guān)于通過zookeeper淺談一致性算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!