zk同步模式與廣播模式

(1) 初始化廣播

  • 前面我們說過,恢復模式具有兩個階段:Leader 選舉與初始化同步(廣播)。當完成 Leader
    選舉後,此時的 Leader 還是一個準 Leader,其要經過初始化同步後才能變爲真正的 Leader。

在這裏插入圖片描述

具體過程如下:

  1. 爲了保證 Leader 向 Learner 發送提案的有序,Leader 會爲每一個 Learner 服務器準備一個隊列
  2. Leader 將那些沒有被各個 Learner 同步的事務封裝爲 Proposal
  3. Leader 將這些 Proposal 逐條發給各個 Learner,並在每一個 Proposal 後都緊跟一COMMIT 消息,表示該事務已經被提交,Learner 可以直接接收並執行
  4. Learner 接收來自於 Leader 的 Proposal,並將其更新到本地
  5. 當 Learner 更新成功後,會向準 Leader 發送 ACK 信息
  6. Leader 服務器在收到來自 Learner 的 ACK 後就會將該 Learner 加入到真正可用的 Follower列表或 Observer 列表。沒有反饋 ACK,或反饋了但 Leader 沒有收到的 Learner,Leader不會將其加入到相應列表。

(2)更新算法廣播

當集羣中的 Learner 完成了初始化狀態同步,那麼整個 zk 集羣就進入到了正常工作模式
了。
如果集羣中的 Learner 節點收到客戶端的事務請求,那麼這些 Learner 會將請求轉發給
Leader 服務器。然後再執行如下的具體過程:

  1. Leader 接收到事務請求後,爲事務賦予一個全局唯一的 64 位自增 id,即 zxid,通過zxid 的大小比較即可實現事務的有序性管理,然後將事務封裝爲一個 Proposal。
  2. Leader 根據 Follower 列表獲取到所有 Follower,然後再將 Proposal 通過這些 Follower 的隊列將提案發送給各個 Follower。
  3. 當 Follower 接收到提案後,會先將提案的 zxid 與本地記錄的事務日誌中的最大的 zxid進行比較。若當前提案的 zxid 大於最大 zxid,則將當前提案記錄到本地事務日誌中,並向 Leader 返回一個 ACK。(提問學員)
  4. 當 Leader 接收到過半的 ACKs 後,Leader 就會向所有 Follower 的隊列發送 COMMIT消息,向所有 Observer 的隊列發送 Proposal。
  5. 當 Follower 收到 COMMIT 消息後,就會將日誌中的事務正式更新到本地。當 Observer收到 Proposal 後,會直接將事務更新到本地。
  6. 無論是 Follower 還是 Observer,在同步完成後都需要向 Leader 發送成功 ACK。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章