zookeeper

1、zab協(xié)議
分布式一致性協(xié)議包括proxy,但是 ZooKeeper并沒有完全采用Paxos算法,而是使用了一種稱為ZooKeeper Atomic Broadcast(ZAB,zookeeper原子消息廣播協(xié)議)的協(xié)議作為其數(shù)據(jù)一致性的核心算法。

ZAB協(xié)議是為分布式協(xié)調(diào)服務ZooKeeper專門設(shè)計的一種支持漰潰恢復的原子廣播協(xié)議。
所有事務請求必須由一個全局唯一的服務器來協(xié)調(diào)處理,這樣的服務器稱為Leader服務器,而余下的其他服務器則成為Follower服務器。Leader服務器負責將一個客戶端事務請求轉(zhuǎn)換成一個事務Proposal(提議),并將該Proposal分發(fā)給集群中所有的Follower服務器。之后Leader服務器需要等待所有Follower服務器的反饋,一旦超過半數(shù)的Follower服務器進行了正確反饋后,那么Leader就會再次向所有的Follower服務器分發(fā)Commit消息,要求其將前一個Proposal進行提交。

1、簡述ZAB協(xié)議

zab協(xié)議是一種支持崩潰恢復的原子廣播協(xié)議,他能夠保證集群中各個副本數(shù)據(jù)的一致,支持全局唯一的變更序列,支持崩潰恢復。

2、zab如何做個各個副本數(shù)據(jù)的一致?

在zab中只有l(wèi)eader可以處理事務請求,把數(shù)據(jù)變更的操作以事務proposal的形式廣播給集群中所有的節(jié)點,然后等待反饋,如果超過半數(shù)節(jié)點都通過,再次發(fā)送commit請求完成數(shù)據(jù)變更。

3、zab如何保證數(shù)據(jù)變更的全局順序?

通過zxid來保證,zxid是一個64位的數(shù)字,前32位是一個epoch編號,每次領(lǐng)導選舉之后就會加1,后32位是一個自增的序列,每個事務請求自動加1,并且leader會為所有的follwer維護一個發(fā)送隊列,將發(fā)送的proposal按照先后順序存入隊列中依次發(fā)送。

4、zab如何支持崩潰恢復?

集群中所有的服務器都以長連接的形式保持通信,如果集群中超過一半以上的follwer無法連接到leader,就會自動進入領(lǐng)導選舉,進而選舉出新的leader
5、zab的工作模式簡介
zab有兩種工作模式,一種是恢復模式,一種是廣播模式?;謴湍J较逻M行領(lǐng)導選舉,廣播模式處理事務請求。

6、簡述領(lǐng)導選舉過程

首先服務器將自身狀態(tài)轉(zhuǎn)換為looking,并向集群中所有的服務器發(fā)起投票(myid,zxid)
接收其他服務器發(fā)送的投票,并進行處理,按照zxid最大的作為leader,如果相同按照myid最大的作為leader,更新投票信息,再次向集群發(fā)送投票
統(tǒng)計投票結(jié)果,超過半數(shù)以上的投票即為leader
如果leader是自己,就把自己的狀態(tài)變更為leading,否則變?yōu)閒ollwing

7、簡述事務請求的過程

只有l(wèi)eader可以處理事務請求,follwer接收到事務請求后要轉(zhuǎn)發(fā)給leader
leader以proposal的形式發(fā)送給所有的follwer,等待響應
follwer接收到請求后首先記錄事務日志,然后返回響應
如果超過半數(shù)以上的follwer都返回正確的響應,再次向所有follwer發(fā)送commit請求
follwer開始變更內(nèi)存數(shù)據(jù)庫
最后響應客戶端

8、watcher機制簡介

客戶端使用watchmanager來存儲注冊節(jié)點和watcher對象的映射
客戶端向服務端發(fā)送注冊路徑和狀態(tài)信息,服務端會把路徑和當前的連接servercnxn存儲在內(nèi)部的watchmanager中
一旦節(jié)點數(shù)據(jù)有變化就從watchmanager中查出servercnxn,并回調(diào)process
回調(diào)客戶端,客戶端從watchmanager中取出watcher,執(zhí)行回調(diào)邏輯

9、zookeeper是如何保證原子更新的?

采用樂觀鎖,類似JDK中的cas操作,讀取數(shù)據(jù),校驗,提交,使用version來校驗數(shù)據(jù)從讀取后有沒有發(fā)送變化

10、sessionId是如何生成的,如何保證其全局唯一?

sessionId是64位的數(shù)字,前8位是myid,后56位是當前的時間戳

11、簡述zookeeper會話管理

zk使用會話管理器sessiontracker來管理session。sessiontracker使用分桶策略來管理session,客戶端創(chuàng)建或刷新session的時候會按超時時間來把session放到不同的桶里。后臺有一個專門線程負責來在固定的時間點定時檢查session,如果session在超時時間范圍內(nèi)已經(jīng)刷新,就會被重新放到新的桶里,如果沒有刷新就會被清理掉。

12、簡述zk的數(shù)據(jù)存儲

zk事務日志
zk dump,定期dump,可以配置日志記錄數(shù)量超過多少次之后就可以把內(nèi)存中的數(shù)據(jù)dump到快照文件中去。

14、zookeeper如何保證事務的一致性?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Apache Zookeeper是由Apache Hadoop的子項目發(fā)展而來,于2010年11月正式成為Apac...
    olostin閱讀 6,239評論 2 9
  • 本文將從系統(tǒng)模型、序列化與協(xié)議、客戶端工作原理、會話、服務端工作原理以及數(shù)據(jù)存儲等方面來揭示ZooKeeper的技...
    端木軒閱讀 3,905評論 0 42
  • 淺談分布式服務協(xié)調(diào)技術(shù) Zookeeper Google的三篇論文影響了很多很多人,也影響了很多很多系統(tǒng)。這三篇論...
    algernoon閱讀 1,694評論 1 12
  • 一個真正的寫數(shù)據(jù)流程是怎么樣的?一個真正的讀數(shù)據(jù)流程是怎么樣的?一個真正的同步數(shù)據(jù)流程是怎么樣的?從哪里到哪里?什...
    時待吾閱讀 4,308評論 0 14
  • 愛上一個人,不是一味的愿意付出,而是他值不值得你付出。 話好聽,但非真,別急著抗拒,善于辨別他的目的。 一個人的精...
    Joan饅頭閱讀 231評論 0 0

友情鏈接更多精彩內(nèi)容