首頁(yè)技術(shù)文章正文

Python提高筆記整理(二)

更新時(shí)間:2018-07-30 來(lái)源:黑馬程序員 瀏覽量:

2.Zookeeper 集群 
2.1 Zookeeper 集群簡(jiǎn)介 
2.1.1 為什么搭建 Zookeeper 集群 
大部分分布式應(yīng)用需要一個(gè)主控、協(xié)調(diào)器或者控制器來(lái)管理物理分布的子進(jìn)程。目前,
大多數(shù)都要開(kāi)發(fā)私有的協(xié)調(diào)程序,缺乏一個(gè)通用機(jī)制,協(xié)調(diào)程序的反復(fù)編寫浪費(fèi),且難以形 成通用、伸縮性好的協(xié)調(diào)器,zookeeper 提供通用的分布式鎖服務(wù),用以協(xié)調(diào)分布式應(yīng)用。 所以說(shuō) zookeeper 是分布式應(yīng)用的協(xié)作服務(wù)。 
zookeeper 作為注冊(cè)中心,服務(wù)器和客戶端都要訪問(wèn),如果有大量的并發(fā),肯定會(huì)有等 待。所以可以通過(guò) zookeeper 集群解決。 
下面是 zookeeper 集群部署結(jié)構(gòu)圖: 
1532913170508_1.jpg2.1.2 了解 Leader 選舉 
Zookeeper 的啟動(dòng)過(guò)程中 leader 選舉是非常重要而且最復(fù)雜的一個(gè)環(huán)節(jié)。那么什么是 leader選舉呢?zookeeper為什么需要leader選舉呢?zookeeper的leader選舉的過(guò)程又是什 么樣子的? 
首先我們來(lái)看看什么是 leader 選舉。其實(shí)這個(gè)很好理解,leader 選舉就像總統(tǒng)選舉一樣, 每人一票,獲得多數(shù)票的人就當(dāng)選為總統(tǒng)了。在 zookeeper 集群中也是一樣,每個(gè)節(jié)點(diǎn)都會(huì) 投票,如果某個(gè)節(jié)點(diǎn)獲得超過(guò)半數(shù)以上的節(jié)點(diǎn)的投票,則該節(jié)點(diǎn)就是 leader 節(jié)點(diǎn)了。 
以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明整個(gè)選舉的過(guò)程.   假設(shè)有五臺(tái)服務(wù)器組成的 zookeeper 集群,它們的 id 從 1-5,同時(shí)它們都是最新啟動(dòng)的,也 就是沒(méi)有歷史數(shù)據(jù),在存放數(shù)據(jù)量這一點(diǎn)上,都是一樣的.假設(shè)這些服務(wù)器依序啟動(dòng),來(lái)看看會(huì) 發(fā)生什么 。 
   1) 服務(wù)器 1 啟動(dòng),此時(shí)只有它一臺(tái)服務(wù)器啟動(dòng)了,它發(fā)出去的報(bào)沒(méi)有任何響應(yīng),所以它的 選舉狀態(tài)一直是 LOOKING 狀態(tài)   
   2) 服務(wù)器 2 啟動(dòng),它與最開(kāi)始啟動(dòng)的服務(wù)器 1 進(jìn)行通信,互相交換自己的選舉結(jié)果,由于 兩者都沒(méi)有歷史數(shù)據(jù),所以id 值較大的服務(wù)器2勝出,但是由于沒(méi)有達(dá)到超過(guò)半數(shù)以上的服務(wù) 器都同意選舉它(這個(gè)例子中的半數(shù)以上是 3),所以服務(wù)器 1,2 還是繼續(xù)保持 LOOKING 狀態(tài).   
   3) 服務(wù)器 3 啟動(dòng),根據(jù)前面的理論分析,服務(wù)器 3 成為服務(wù)器 1,2,3 中的老大,而與上面不 同的是,此時(shí)有三臺(tái)服務(wù)器選舉了它,所以它成為了這次選舉的 leader.   
   4) 服務(wù)器 4 啟動(dòng),根據(jù)前面的分析,理論上服務(wù)器 4 應(yīng)該是服務(wù)器 1,2,3,4 中最大的,但是 由于前面已經(jīng)有半數(shù)以上的服務(wù)器選舉了服務(wù)器 3,所以它只能接收當(dāng)小弟的命了.   



作者:黑馬程序員人工智能+python培訓(xùn)學(xué)院
首發(fā):http://python.itheima.com/
分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!