本周主要介紹了分布式數(shù)據(jù)庫和NoSql數(shù)據(jù)庫的相關(guān)知識。
大多數(shù) NoSQL 無法實現(xiàn)真正符合 ACID 的事務(wù),只能實現(xiàn)數(shù)據(jù)的最終一致性。
CAP 理論
對于一個分布式系統(tǒng)而言,網(wǎng)絡(luò)失效一定會發(fā)生,也就是說,分區(qū)耐受性是必須要保證的,那么在可用性和一致性上就必須二選一。針對不同的使用場景,來決定實現(xiàn)AP還是CP。
BASE理論
基本可用(Basically Available)系統(tǒng)在出現(xiàn)不可預(yù)知故障時,允許損失部分可用性,如響應(yīng)時間上的損失或功能上的損失。
Soft state(弱狀態(tài))軟狀態(tài),指允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認為該中間狀態(tài)的存在不會影響系統(tǒng)的整體可用性,即允許系統(tǒng)在不同節(jié)點的數(shù)據(jù)副本之間進行數(shù)據(jù)同步的過程存在延時。
Eventually consistent(最終一致性)指系統(tǒng)中所有的數(shù)據(jù)副本,在經(jīng)過一段時間的同步后,最終能夠達到一個一致的狀態(tài),因此最終一致性的本質(zhì)是需要系統(tǒng)保證數(shù)據(jù)能夠達到一致,而不需要實時保證系統(tǒng)數(shù)據(jù)的強一致性。
ZooKeeper
ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是按照CP原則構(gòu)建的。
Zookeeper是使用Paxos算法實現(xiàn)的,Paxos算法主要有三個角色,Proposer、Acceptor和Learner。
第一階段:Prepare 階段。Proposer 向Acceptors 發(fā)出Prepare 請求,Acceptors 針對收到的Prepare 請求進行Promise 承諾。
第二階段:Accept 階段。Proposer 收到多數(shù)Acceptors 承諾的Promise 后,向Acceptors 發(fā)出Propose 請求,Acceptors 針對收到的Propose 請求進行Accept 處理。
第三階段:Learn 階段。Proposer 在收到多數(shù)Acceptors 的Accept 之后,標志著本次Accept 成功,決議形成,將形成的決議發(fā)送給所有Learners。