天天看點

談一談你對zookeeper 的了解(大資料面試題系列~~)

文章目錄

      • Zookeeper 幾個基本概念
        • 叢集角色
        • 會話
        • 資料節點Znode
        • Watcher 事件監聽器
      • 幾個典型應用場景
        • Master 選舉
        • 實作分布式鎖
        • 用作微服務的注冊中心

Apache Zookeeper 是由Apache Hadoop 的子項目發展而來,之後正式成為了Apache 的頂級項目。

Zookeeper 是一個典型的分布式資料一緻性的解決方案,它 為分布式應用提供了高效可靠的分布式協調服務,分布式應用程式可以基于它實作諸如資料釋出/訂閱、負載均衡、命名服務、分布式協調與通知、叢集管理、Master 選舉、分布式鎖等功能。

Zookeeper 幾個基本概念

叢集角色

Zookeeper 沒有沿用傳統的Master/Slave 概念,而是引入了Leader、Follower和Observer 三種角色。Zookeeper 叢集中的所有機器通過一個Leader 選舉過程來標明一台被稱為“leader”的機器,Leader 伺服器為用戶端提供讀寫服務。Follower 和Observer 都能提供讀服務,唯一的差別在于,Observer 機器不參與Leader 選舉過程,也不參與寫操作的“過半寫成功”政策,是以Observer 可以在不影響寫性能的情況下提升叢集的讀性能。

會話

在Zokeeper 中, 一個用戶端連接配接是指用戶端和伺服器之間的一個TCP 長連接配接。用戶端啟動的時候,首先會先與伺服器建立一個TCP 連接配接,從第一次連接配接建立開始,用戶端會話的生命周期也開始了。通過這個連接配接,用戶端能夠通過心跳檢測與伺服器保持有效的會話,也能向Zookeeper 伺服器發送請求并接受響應,同時還能通過該連接配接接受來自于伺服器的Watcher 事件通知。

資料節點Znode

Znode 是Zookeeper 資料模型中的資料單元。Zookeeper 将所有資料存儲在記憶體中,資料模型是一棵樹,路徑由/ 進行分割, 例如/home/path1。每個Znode 上都會儲存自己的資料内容,同時還會儲存一系列屬性資訊。

在Zookeeper 中,Znode 分為持久節點和臨時節點兩類。所謂持久節點是指一旦這個Znode 被建立了,這個Znode 将一直儲存在Zookeeper 上,除非進行主動删除操作。臨時節點的生命周期和用戶端會話綁定,一旦用戶端會話失效,那麼這個臨時節點就會被移除。另外Zookeeper 還允許使用者為每個節點添加自增的屬性,就是節點名後面會追加上一個自增的整型數字。

Watcher 事件監聽器

Zookeeper 允許使用者在指定節點上注冊一些Watcher, 并且在一些特定事件觸發的時候,Zookeeper 伺服器會通知到特定的用戶端。

幾個典型應用場景

Master 選舉

Master 選舉是分布式系統中非常常見的應用場景。下圖為一個最簡實作:

談一談你對zookeeper 的了解(大資料面試題系列~~)

如上圖,三個節點1,2,3競選master, 三個節點同時在/master 路徑下建立臨時節點node, 但zookeeper 隻會保證一個用戶端建立成功。建立成功的節點即為master,建立失敗的節點則需注冊一個對/master/node 路徑的變更監聽。一旦master 節點當機了,則此臨時節點也會被删除,其它節點就會收到消息重新開始競選master。

實作分布式鎖

關于zookeeper 實作分布式鎖可以看這篇博文》》》

用作微服務的注冊中心

下圖隻是介紹最簡的實作:

談一談你對zookeeper 的了解(大資料面試題系列~~)
  1. 服務注冊釋出

    例如用戶端host1 在port1 想要釋出注冊UserService 服務,則它需要在/services/com.demo.UserServie 路徑下建立臨時節點,臨時節點值為服務位址host1:port1。服務當機,臨時節點自動關閉。

  2. 服務調用

    例如有消費端想要調用UserService 服務,它隻需擷取/services/com.demo.UserService 下的所有節點,然後按照一定規則選取一個服務釋出方即可遠端調用其服務。

繼續閱讀