最近一直都在寫理論方面的東西,這篇也是理論,但這次也當(dāng)做對ZooKeeper的一個(gè)小階段總結(jié),之前所提到的ZooKeeper都屬于基礎(chǔ)的部分,高級部分的進(jìn)階還需要一起共同探討。

最近更新ZooKeeper速度也相對快了一點(diǎn),快的話質(zhì)量不能保證太多,也有一點(diǎn)是學(xué)習(xí)新知識的時(shí)候,入門那段時(shí)間我們覺得最有收獲,然后呢,需要一段時(shí)間的瓶頸期,再次進(jìn)入高手階段。

入門是人收獲較多的時(shí)候,原本對一個(gè)東西不了解到突然知道原來有個(gè)東西可以做這個(gè),做那個(gè),心中就覺得收獲很多。接下來呢,做東西不可能一直停留在入門的水平,我們需要不斷的進(jìn)步,但是發(fā)現(xiàn)中級的人員用到的也不過是新手的那些東西,中級的人不過是熟悉更多的參考文檔,遇到問題的時(shí)候往哪里找資料。
前面寫的一些ZooKeeper理論,不過是個(gè)參考,收獲不會有那么多,但是想要進(jìn)階為更高級的人員總要經(jīng)歷一段時(shí)間的積累。
就不瞎扯了,這篇當(dāng)做ZooKeeper初級的分割線,往下面再去寫就試著寫一些ZooKeeper高階的內(nèi)容。
這里我們學(xué)習(xí)分布式的理論相關(guān)內(nèi)容。
常見的分布式理論:
- 2PC 兩段式提交,較早的理論,有助于理解分布式理論
- CAP與BASE理論 CAP為較重要的分布式理論之一
- Paxos理論
理論
了解以下概念:
- 節(jié)點(diǎn)
- 通信
- 存儲
- 異常,分布式系統(tǒng)要處理的核心問題,解決各種各樣的異常
- 副本,貫穿整個(gè)分布式系統(tǒng)的理論核心。數(shù)據(jù)或服務(wù)冗余。
- 衡量分布式系統(tǒng)的直播
- 性能
- 可用性
- 一致性
- 擴(kuò)展性
2PC
2PC,又稱為兩段式提交,最早提出來是用于數(shù)據(jù)庫的事務(wù),數(shù)據(jù)庫的事務(wù)要滿足ACID操作。2PC是一種 “中心化副本控制” 協(xié)議,參與的節(jié)點(diǎn)有兩類,一是協(xié)調(diào)者節(jié)點(diǎn),二是參與者節(jié)點(diǎn)。
兩階段提交的思路:
第一階段,協(xié)調(diào)者詢問所有的參與者是否可以提交事務(wù)(請參與者投票),所有參與者向協(xié)調(diào)者投票。
第二階段,協(xié)調(diào)者根據(jù)所有參與者的投票結(jié)果做出是否事務(wù)可以全局提交的決定,并通知所有的參與者執(zhí)行該決定。
在一個(gè)兩階段交提流程中,參與者不能改變自己的投票結(jié)果。兩階段提交協(xié)議的可以全局提交的前提是所有的參與者都同意提交事務(wù),只要有一個(gè)參與者投票選擇放棄(abort)事務(wù),則事務(wù)必須被放棄。

后面有衍生出了3PC,3PC的我的理解是在準(zhǔn)備提交之前,再發(fā)送一個(gè)請求,問計(jì)算機(jī)是否正常工作,能不能執(zhí)行事務(wù)操作。
CAP理論和Base理論
CAP三個(gè)字母分別代表了分布式系統(tǒng)中三個(gè)相互矛盾的屬性:
- Consistency (一致性):CAP理論中的副本一致性特指強(qiáng)一致性;
- Availiablity(可用性): 指系統(tǒng)在出現(xiàn)異常時(shí)已經(jīng)可以提供服務(wù);
- Tolerance to the partition of network (分區(qū)容忍):指系統(tǒng)可以對網(wǎng)絡(luò)分區(qū)這種異常情況進(jìn)行容錯(cuò)處理;
CAP理論指出,系統(tǒng)不可能同時(shí)滿足三折,最多只能同時(shí)滿足其中的兩項(xiàng)。

BASE是Basically Availaible(基本可用),Soft state(軟狀態(tài)),和Eventually consistent(最終一致性)三個(gè)短語的簡寫。它是由CAP逐步演化來的,核心思想是:
即使無法做到強(qiáng)一致性,但每個(gè)應(yīng)用可以根據(jù)自身業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞绞窍到y(tǒng)達(dá)到最終一致性。
軟狀態(tài)指的是系統(tǒng)中數(shù)據(jù)的中間狀態(tài),中間狀態(tài)的存在不會影響系統(tǒng)的整體可用性。
Paxos理論
Paxos協(xié)議是少數(shù)在工程實(shí)踐中證實(shí)的強(qiáng)一致性、高可用的去中心化分布式協(xié)議。
Paxos協(xié)議的流程較為復(fù)雜,但基本思想類似人類投票過程。
Paxos協(xié)議中,有一組完全對等的參與節(jié)點(diǎn)(稱為accpetor),這組節(jié)點(diǎn)各自就某一事件做出決議,如果某個(gè)決議獲得了超過半數(shù)節(jié)點(diǎn)的同意則生效。Paxos協(xié)議中只要有超過一半的節(jié)點(diǎn)正常,就可以工作,能很好對抗宕機(jī)、網(wǎng)絡(luò)分化等異常情況。
Paxos具體的理論較為復(fù)雜,感興趣的可以看Lamport的論文,或查看一些相關(guān)資料...
額外
數(shù)據(jù)庫的隔離級別:
- 未提交讀(Read Uncommitted):允許臟讀,也就是可能讀取到其他會話中未提交事務(wù)修改的數(shù)據(jù)。
- 提交讀(Read Committed):只能讀取到已經(jīng)提交的數(shù)據(jù)。Oracle等多數(shù)數(shù)據(jù)庫默認(rèn)都是該級別 (不重復(fù)讀)。
- 可重復(fù)讀(Repeated Read):可重復(fù)讀。在同一個(gè)事務(wù)內(nèi)的查詢都是事務(wù)開始時(shí)刻一致的,InnoDB默認(rèn)級別。保證在事務(wù)處理的過程中,多次讀取同一個(gè)數(shù)據(jù),其值都和事務(wù)開始時(shí)刻是一一致的。
- 串行讀(Serializable):完全串行化的讀,每次讀都需要獲得表級共享鎖,讀寫相互都會阻塞。
最后
剛開始瞎侃了一下,下面對分布式的理論做了簡單說明,未深入講解。最后提了一下數(shù)據(jù)的隔離級別。
參考
- 《分布式系統(tǒng)原理介紹》
- 《從Paxos到ZooKeeper-分布式一致性原理與實(shí)踐》
- Innodb中的事務(wù)隔離級別和鎖的關(guān)系