zookeeper工作原理
1、zookeeper的角色
1)上司者(leader),負責進行投票的發起和決議,更新系統狀态;
2)學習者(learner),包括跟随者(follower)和觀察者(observer);follower用于接受用戶端請求并向用戶端傳回結果,在選主過程中參與投票;
observer可以接受用戶端連接配接,将寫請求轉發給leader,但observer不參與投票過程,隻同步leader的狀态,observer的目的是為了擴充系統,提供讀寫速度
3)用戶端(client),請求的發起方。
zookeeper的核心是原子廣播,這個機制保證了各個server之間的同步;實作這個機制的協定叫做zab協定
zab協定有兩種模式,分别是恢複模式(選主)和廣播模式(同步);當服務啟動或者在上司者崩潰後,zab就進入了恢複模式,當上司者被選舉出來,且大多數server完成了和leader的狀态同步以後,恢複模式就結束了;
狀态同步保證了leader和server具有相同的系統狀态;
為了保證事務的順序一緻性,zookeeper采用了遞增的事務id号(zxid)來辨別事務;所有的提議(proposal)都在被提出的時候加上了zxid。實作中zxid是一個64位的數字,它高32位是epoch用來辨別leader關系是否改變,每次一個leader被選出來,他都會有一個新的epoch,辨別目前屬于那個leader的統治時期,低32位用于遞增計數。
每個server在工作過程中有三種狀态:
looking: 目前server不知道leader是誰,正在搜尋
leading: 目前server即為選舉出來的leader
following: leader已經選舉出來,目前server與之同步