“一入Java深似?!?/strong>,本文將重點(diǎn)介紹分布式相關(guān)理論以及Zookeeper的基礎(chǔ)應(yīng)用,深入內(nèi)容之后會(huì)持續(xù)更新。
分布式基本概念
分布式架構(gòu):在集中式的系統(tǒng)環(huán)境中,可以簡(jiǎn)單通過(guò)事務(wù)(ACID)保證數(shù)據(jù)的一致性;而在分布式系統(tǒng)環(huán)境中,由于缺少全局時(shí)鐘、故障無(wú)法避免等痛點(diǎn),過(guò)去的方式不在適用,而適用新的CAP定理和BASE理論。
CAP
Consistency一致性:指數(shù)據(jù)在多個(gè)副本間是否能保持一致的特性。針對(duì)一個(gè)數(shù)據(jù)項(xiàng)的更新,所有用戶(hù)都可以讀取到最新的值,則系統(tǒng)被認(rèn)為是強(qiáng)一致的。
Availablity可用性:指系統(tǒng)一直處于可用狀態(tài),對(duì)于每一個(gè)請(qǐng)求都能在單位時(shí)間內(nèi)返回結(jié)果。
Partition tolerance分區(qū)容錯(cuò)性:分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)故障時(shí),仍然可以對(duì)外提供滿(mǎn)足一致性和可用性的服務(wù),除非整個(gè)網(wǎng)絡(luò)都出現(xiàn)故障。
該原理指出,一個(gè)分布式系統(tǒng)無(wú)法同時(shí)滿(mǎn)足這三個(gè)基本需求,因此需要作出合理的選擇。由于P是分布式系統(tǒng)的基礎(chǔ),那么核心就是平衡A和C,最常見(jiàn)的就是BASE理論。
BASE:其核心思想是即使無(wú)法做到強(qiáng)一致性,但每個(gè)應(yīng)用都可以根據(jù)自身業(yè)務(wù)特點(diǎn),
Basically Available基本可用:指分布式系統(tǒng)出現(xiàn)不可知故障時(shí),允許損失部分可用性,比如響應(yīng)時(shí)間上的損失、功能上的損失(服務(wù)降級(jí))。
Soft state軟狀態(tài):允許系統(tǒng)中數(shù)據(jù)存在中間狀態(tài),即允許不同節(jié)點(diǎn)的數(shù)據(jù)副本之間進(jìn)行數(shù)據(jù)同步時(shí)存在延時(shí)。
Eventually consistent最終一致性:需要保證最終數(shù)據(jù)保持一致,而不需要實(shí)時(shí)保證系統(tǒng)的強(qiáng)一致性。在實(shí)踐中,最終一致性存在5中變種,因果一致性,讀自己之所寫(xiě),會(huì)話(huà)一致性,單調(diào)讀一致性和單調(diào)寫(xiě)一致性。比如關(guān)系型數(shù)據(jù)庫(kù),常通過(guò)同步或一部的方式實(shí)現(xiàn)主備數(shù)據(jù)復(fù)制,其實(shí)主備之間就存在數(shù)據(jù)不一致,但其通過(guò)多次重試或認(rèn)為數(shù)據(jù)修訂等方式保證了數(shù)據(jù)最終一致性,算是一個(gè)經(jīng)典案例。
一致性協(xié)議:提到一致性協(xié)議,最基礎(chǔ)的就是2PC(Two-Phase Commit protocol)兩階段提交協(xié)議,絕大多數(shù)的關(guān)系型數(shù)據(jù)庫(kù)都是采用的2PC來(lái)完成分布式事務(wù)處理的。
2PC的流程:提交事務(wù)階段,包括事務(wù)詢(xún)問(wèn)、執(zhí)行事務(wù)、各參與者向協(xié)調(diào)者反饋事務(wù)詢(xún)問(wèn)的響應(yīng)等步驟;執(zhí)行事務(wù)階段,包含兩種情況,成功時(shí)執(zhí)行事務(wù)提交,包括發(fā)送提交請(qǐng)求、事務(wù)提交、反饋事務(wù)提交結(jié)果、完成事務(wù)等步驟,而失敗時(shí)會(huì)中斷事務(wù),包括發(fā)送回滾請(qǐng)求、事務(wù)回滾、反饋事務(wù)回滾結(jié)果、中斷事務(wù)等步驟。其優(yōu)點(diǎn)是原理簡(jiǎn)單、實(shí)現(xiàn)方便,但存在同步阻塞、單點(diǎn)問(wèn)題、腦裂等痛點(diǎn)。
3PC:其實(shí)就是2PC的改進(jìn)版,將提交事務(wù)請(qǐng)求階段分成了CanCommit,PreCommit階段,最后的DoCommit沒(méi)有變化。
Paxos:是Lamport與1990提出的基于消息傳遞且有高度容錯(cuò)特性的一致性算法,其成功的解決了“拜占庭將軍”問(wèn)題(這個(gè)問(wèn)題在區(qū)塊鏈中也涉及)。其包括三種參與角色,分別是Proposer、Acceptor和Learner,這兒不展開(kāi)介紹其基于數(shù)據(jù)歸納法的證明(個(gè)人也沒(méi)打算深入研究),但一個(gè)重點(diǎn)的觀念就是,2PC是基于所有參與者都同意的情況,而Paxos是基于讀書(shū)參與者同意的情況
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式