内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

掌握之分布式-2.Zookeeper-創(chuàng)新互聯(lián)

掌握高并發(fā)、高可用架構(gòu)

第三章 分布式

本章介紹分布式架構(gòu)的底層技術(shù)。主要說明面試過程中可能被問到的技術(shù)點。

10年積累的成都網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有卓資免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
第二節(jié) Zookeeper

Zookeeper 分布式

1. 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

2. Zookeeper提供了什么

文件系統(tǒng) 和 通知機制

3. Zookeeper文件系統(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

4. 四種類型的znode
  1. PERSISTENT,持久化目錄節(jié)點:客戶端與Zookeeper斷開連接后,該節(jié)點依舊存在
  2. PERSISTENT_SEQUENTIAL,持久化順序編號目錄節(jié)點:客戶端與Zookeeper斷開連接后,該節(jié)點依舊存在,只是Zookeeper給該節(jié)點名稱進行順序編號
  3. EPHEMERAL,臨時目錄節(jié)點:客戶端與Zookeeper斷開連接后,該節(jié)點被刪除
  4. EPHEMERAL_SEQUENTIAL,臨時順序編號目錄節(jié)點:客戶端與Zookeeper斷開連接后,該節(jié)點被刪除,只是Zookeeper給該節(jié)點名稱進行順序編號
5. Zookeeper通知機制

客戶端注冊監(jiān)聽它關(guān)心的目錄節(jié)點,會對該znode建立一個watcher事件,當(dāng)該znode發(fā)生變化(數(shù)據(jù)刪除、被刪除、子目錄節(jié)點增加刪除等)時,Zookeeper會通知客戶端

掌握之分布式-2.Zookeeper

6. Zookeeper可以做什么
  1. 命名服務(wù)(利用文件系統(tǒng)的功能):

? 命名服務(wù)是指通過指定的名字來獲取資源或服務(wù)的地址,即利用Zookeeper創(chuàng)建一個全局的路徑,也就是唯一的路徑,這個路徑可以作為一個名字,指向集群中的機器、提供服務(wù)的地址、一個遠程對象等

  1. 配置管理(利用文件系統(tǒng)、通知機制):

? 程序分布式的部署在不同的機器上,將程序的配置信息放在zookeeper的znode下,當(dāng)配置發(fā)生變化時,也就是znode發(fā)生變化時,利用watcher通知各個客戶端,從而更改配置

  1. 集群管理(文件系統(tǒng)、通知機制):

? 所謂集群管理無非兩點,是否有機器退出或加入、選舉master

? 第一點,所有機器約定在父目錄下創(chuàng)建臨時目錄節(jié)點,然后監(jiān)聽父目錄節(jié)點的子節(jié)點變化信息;如果有機器掛了,該機器就會與Zookeeper斷開連接,其創(chuàng)建的臨時目錄就會刪除,此時就會通知所有機器,有個兄弟機器掛了;同理,機器加入也是一樣

? 第二點,所有機器創(chuàng)建臨時順序編號目錄節(jié)點,每次都選取編號最小的機器作為master

  1. 分布式鎖(文件系統(tǒng)、通知機制):

? 有了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é)點

  1. 隊列管理(文件系統(tǒng)、通知機制):
    • 同步隊列,只有隊列成員都聚齊時才可用,否則一直等待:在約定目錄下創(chuàng)建臨時目錄節(jié)點,查看監(jiān)聽節(jié)點的數(shù)量是否是我們要求的數(shù)量
    • 隊列按照FIFO方式進行入隊和出隊操作:和分布式鎖的控制時序的基本原理一致,在特定目錄下創(chuàng)建持久順序編號目錄節(jié)點,創(chuàng)建成功則Watcher通知等待的隊列,刪除最小號的節(jié)點用于消費
7. 獲取分布式鎖的過程

在分布式鎖的場景下,會提前在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ù)以上步驟
掌握之分布式-2.Zookeeper

掌握之分布式-2.Zookeeper

8. Zookeeper的工作原理

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)

9. Zookeeper如何保證事務(wù)的一致性

采用遞增的事務(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í)行

10. Zookeeper的Server工作狀態(tài)
  • LOOKING,當(dāng)前server不知道leader是誰,正在搜索
  • LEADING,當(dāng)前server為leader
  • FOLLOWING,普通server,與leader進行同步
11. Zookeeper是如何選舉leader的

當(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
    掌握之分布式-2.Zookeeper

  • fast paxos算法

    在選舉時,首先向所有Server提議自己要成為leader,當(dāng)其他Server收到提議后,會進行PK(zxid大myid大的獲勝),并回復(fù)同意還是拒絕,重復(fù)這個流程,就會選擇出一個新的leader

12. 同步流程

選完leader后,進入同步流程

  1. leader等待server連接
  2. follower連接leader,將自己大的zxid發(fā)送給leader
  3. leader根據(jù)follower的zxid判斷同步點
  4. 完成同步后通知follower已成為uptodate狀態(tài)
  5. follower收到uptodate通知后,就可以接收客戶端的請求了
13. Zookeeper的負載均衡和NGINX的負載均衡

zk的負載均衡可以調(diào)控,nginx只能調(diào)權(quán)重,其他的都要自己寫插件,但是nginx的吞吐量比zk大得多

14. watch機制

一個watch事件是一個一次性的觸發(fā)器,當(dāng)被設(shè)置了watch的數(shù)據(jù)發(fā)生了變化時,服務(wù)器會將這個變化發(fā)送給設(shè)置了watch的客戶端

  1. 數(shù)據(jù)發(fā)生改變時,一個watch event會被發(fā)送給客戶端,但是只會發(fā)送一次
  2. watch event從server發(fā)送到client是異步的,只保證數(shù)據(jù)的最終一致性
  3. getData()、exists()設(shè)置數(shù)據(jù)監(jiān)控,getChildren()設(shè)置子節(jié)點監(jiān)控
  4. 注冊watcher:getData、exists、getChildren
  5. 觸發(fā)watcher:create、delete、setData
  6. setData()成功的話會觸發(fā)當(dāng)前znode的數(shù)據(jù)監(jiān)控;create()成功的話會觸發(fā)當(dāng)前znode的數(shù)據(jù)監(jiān)控,以及父節(jié)點的子節(jié)點監(jiān)控;delete()成功的話會觸發(fā)當(dāng)前znode的數(shù)據(jù)監(jiān)控和子節(jié)點監(jiān)控(因為子節(jié)點也發(fā)生了變化),以及其父節(jié)點的子節(jié)點監(jiān)控
  7. 當(dāng)客戶端與服務(wù)器斷開連接后,是無法收到watch事件的,而當(dāng)客戶端重新連接后,如果有需要的話,之前注冊的watch會被重新注冊的
  8. Watch是輕量級的,其實就是本地的Callback(客戶端創(chuàng)建連接時,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)

h5響應(yīng)式網(wǎng)站建設(shè)
六盘水市| 临清市| 正安县| 延川县| 贵定县| 邹平县| 遂川县| 阳谷县| 九寨沟县| 汤阴县| 分宜县| 景东| 博罗县| 阿克苏市| 鄂伦春自治旗| 甘谷县| 富宁县| 勐海县| 会东县| 怀化市| 上栗县| 巴林右旗| 亚东县| 都兰县| 章丘市| 福泉市| 闻喜县| 扎囊县| 六枝特区| 韩城市| 葵青区| 武功县| 宁都县| 阜平县| 东乡族自治县| 呼和浩特市| 阿荣旗| 神木县| 诸城市| 林甸县| 茂名市|