本章介紹分布式架構(gòu)的底層技術(shù)。主要說明面試過程中可能被問到的技術(shù)點。
Zookeeper
分布式
Zookeeper是一個分布式的、開源的分布式應(yīng)用程序協(xié)調(diào)服務(wù)。它是集群的管理者,監(jiān)視著集群中各個節(jié)點的狀態(tài),并根據(jù)節(jié)點提交的反饋進行下一步合理的操作。
對于客戶端的讀操作,可以被集群中任意一臺機器處理。如果讀請求在節(jié)點上注冊了監(jiān)聽器,這個監(jiān)聽器也是由所連接的機器來執(zhí)行
對于客戶端的寫操作,這些請求會同時發(fā)給其他的zookeeper機器并達成一致后,請求才會返回成功
因此,隨著集群機器的增多,讀請求的吞吐會提高,而寫請求的吞吐會下降
有序性是Zookeeper的另一個特點,所有的更新操作都是全局有序的;每個更新都有唯一的時間戳,稱為zxid(Zookeeper Transaction Id);而讀請求只會相對于更新有序,也就是讀請求的返回結(jié)果中會帶有這個zookeeper的最新zxid
文件系統(tǒng) 和 通知機制
Zookeeper提供了一個多層級的節(jié)點命名空間(節(jié)點稱為znode)
與文件系統(tǒng)不同的是,它的每個節(jié)點都可以設(shè)置關(guān)聯(lián)數(shù)據(jù),而文件系統(tǒng)只有文件節(jié)點可以存放數(shù)據(jù)而目錄節(jié)點不行
Zookeeper為了保證高吞吐和低延遲,在內(nèi)存中維護了這個樹狀的目錄結(jié)構(gòu),所以它不能存放大量的數(shù)據(jù),每個節(jié)點的存放數(shù)據(jù)上限是1M
PERSISTENT
,持久化目錄節(jié)點:客戶端與Zookeeper斷開連接后,該節(jié)點依舊存在PERSISTENT_SEQUENTIAL
,持久化順序編號目錄節(jié)點:客戶端與Zookeeper斷開連接后,該節(jié)點依舊存在,只是Zookeeper給該節(jié)點名稱進行順序編號EPHEMERAL
,臨時目錄節(jié)點:客戶端與Zookeeper斷開連接后,該節(jié)點被刪除EPHEMERAL_SEQUENTIAL
,臨時順序編號目錄節(jié)點:客戶端與Zookeeper斷開連接后,該節(jié)點被刪除,只是Zookeeper給該節(jié)點名稱進行順序編號客戶端注冊監(jiān)聽它關(guān)心的目錄節(jié)點,會對該znode建立一個watcher事件,當(dāng)該znode發(fā)生變化(數(shù)據(jù)刪除、被刪除、子目錄節(jié)點增加刪除等)時,Zookeeper會通知客戶端
? 命名服務(wù)是指通過指定的名字來獲取資源或服務(wù)的地址,即利用Zookeeper創(chuàng)建一個全局的路徑,也就是唯一的路徑,這個路徑可以作為一個名字,指向集群中的機器、提供服務(wù)的地址、一個遠程對象等
? 程序分布式的部署在不同的機器上,將程序的配置信息放在zookeeper的znode下,當(dāng)配置發(fā)生變化時,也就是znode發(fā)生變化時,利用watcher通知各個客戶端,從而更改配置
? 所謂集群管理無非兩點,是否有機器退出或加入、選舉master
? 第一點,所有機器約定在父目錄下創(chuàng)建臨時目錄節(jié)點,然后監(jiān)聽父目錄節(jié)點的子節(jié)點變化信息;如果有機器掛了,該機器就會與Zookeeper斷開連接,其創(chuàng)建的臨時目錄就會刪除,此時就會通知所有機器,有個兄弟機器掛了;同理,機器加入也是一樣
? 第二點,所有機器創(chuàng)建臨時順序編號目錄節(jié)點,每次都選取編號最小的機器作為master
? 有了Zookeeper的一致性文件系統(tǒng),鎖變得簡單。鎖服務(wù)可以分為兩類:保持獨占,控制時序
? 對于保持獨占,我們將znode看作一把鎖,通過createznode的方式來實現(xiàn);所有客戶端都去創(chuàng)建/distribute_lock節(jié)點,最終成功創(chuàng)建的那個客戶端也就獲取了這把鎖,用完刪掉/distribute_lock節(jié)點,即可釋放鎖
? 對于控制時序,/distribute_lock已經(jīng)預(yù)先存在,所有客戶端在它下面創(chuàng)建臨時順序編號目錄節(jié)點,和選舉master一樣,編號最小的獲得鎖,用完刪除自己的臨時順序編號目錄節(jié)點
在分布式鎖的場景下,會提前在Zookeeper中創(chuàng)建一個持久節(jié)點ParentLocker(名字叫什么都可以)
當(dāng)客戶端要獲取鎖時,需要在ParentLocker下創(chuàng)建一個臨時順序編號節(jié)點Locker-n,首先,查找ParentLocker下的所有臨時子節(jié)點并排序,并且判斷自己創(chuàng)建的Locker-n是不是順序編號最小的,如果是,則臨時節(jié)點Locker-n創(chuàng)建成功,也就是獲取鎖成功;如果不是最小的,此時找到排序僅比自己靠前的節(jié)點,向其注冊監(jiān)聽Watcher,監(jiān)聽其是否存在(exist),也就是該客戶端獲取鎖失敗,進入等待;當(dāng)前一個節(jié)點被刪除時,客戶端會收到通知,然后再次判斷自己是不是最小的,如果是則獲取鎖成功,如果不是,則再重復(fù)以上步驟
Zookeeper的核心是原子廣播,保證了各個Server之間的同步;實現(xiàn)這個機制的協(xié)議叫做Zab協(xié)議。Zab協(xié)議有兩種模式,恢復(fù)模式(選主)和廣播模式(同步)。當(dāng)服務(wù)啟動或者領(lǐng)導(dǎo)者崩潰后,Zab進入恢復(fù)模式;當(dāng)選舉了新的領(lǐng)導(dǎo)者,并且大多數(shù)Server和leader的狀態(tài)同步完成之后,恢復(fù)模式就結(jié)束了。狀態(tài)同步保證了leader和server之間有相同的系統(tǒng)狀態(tài)
采用遞增的事務(wù)ID:zxid來標(biāo)識,所有的proposal(提議)都會加上zxid。zxid是64位的數(shù)字,高32位是epoch,用來標(biāo)識leader是否發(fā)生變化,如果是新選舉的leader,則epoch會遞增;低32位是遞增計數(shù)的。當(dāng)有新的proposal提出時,首先向其他server發(fā)出事務(wù)執(zhí)行請求,如果有超過半數(shù)的機器都能執(zhí)行且能夠執(zhí)行成功,然后才會開始執(zhí)行
當(dāng)leader崩潰或失去大多數(shù)follower,這時會進入恢復(fù)模式。選舉算法有兩種:一種是基于basic paxos實現(xiàn)的,一種是基于fast paxos實現(xiàn)的,默認是fast paxos。
basic paxos算法
a) 每個Server上的選舉線程由當(dāng)前Server發(fā)起選舉的線程擔(dān)任,主要職責(zé)是對各個投票結(jié)果進行統(tǒng)計,選舉 出新的leader
b) 選舉線程向所有Server發(fā)起一次詢問(包括自己)
c) 選舉線程收到回復(fù)后,驗證是否是自己發(fā)出的詢問(驗證zxid是否一致),然后獲取對方的myid,將之存儲到當(dāng)前詢問的對象列表中,最后獲取對方提議的leader相關(guān)信息(myid,zxid),存儲到當(dāng)次選舉的投票記錄中
d) 收到所有的Server回復(fù)后,計算出zxid大的Server,然后統(tǒng)計它的票數(shù),如果它獲得了n/2+1的Server票數(shù),則設(shè)置為新的leader。否則,重新再次選舉
通過該選舉流程可以得出,要使leader獲得多數(shù)Server的支持,Server的總數(shù)必須是奇數(shù)2n+1,且存活的Server數(shù)目不得少于n+1
fast paxos算法
在選舉時,首先向所有Server提議自己要成為leader,當(dāng)其他Server收到提議后,會進行PK(zxid大myid大的獲勝),并回復(fù)同意還是拒絕,重復(fù)這個流程,就會選擇出一個新的leader
選完leader后,進入同步流程
zk的負載均衡可以調(diào)控,nginx只能調(diào)權(quán)重,其他的都要自己寫插件,但是nginx的吞吐量比zk大得多
一個watch事件是一個一次性的觸發(fā)器,當(dāng)被設(shè)置了watch的數(shù)據(jù)發(fā)生了變化時,服務(wù)器會將這個變化發(fā)送給設(shè)置了watch的客戶端
public Zookeeper(String connStr, int sessionTimeout, Watcher watcher)
),服務(wù)器端只是存儲了是否設(shè)置了watch的布爾變量另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站標(biāo)題:掌握之分布式-2.Zookeeper-創(chuàng)新互聯(lián)
本文路徑:http://www.rwnh.cn/article4/dgchie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、ChatGPT、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站收錄、定制開發(fā)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)