zookeeper系列(一)—概要和基本特點

zookeeper系列(一)—基礎知識

前言

大家好,牧碼心今天給大家推薦一篇zookeeper系列(一)—概要和基本特點的文章,在實際工作中有很多應用場景,希望對你有所幫助。內容如下:

  • 背景
  • 特點
  • 數據模型
  • 會話

背景

在分佈式場景中,往往會產生多個節點之間協同的問題。如:

  1. 每天的定時任務由誰哪個節點來執行?
  2. RPC調用時的服務發現?
  3. 如何保證併發請求的冪等

這些問題可以統一歸納爲多節點協調問題,如果靠節點自身進行協調這是非常不可靠的,性能上也不可取。必須由一個獨立的服務做協調工作,它必須可靠,而且保證性能。
ZooKeeper則是用於分佈式應用程序的協調服務。它公開了一組簡單的API,分佈式應用程序可以基於這些API用於同步,節點狀態、配置等信息、服務註冊等信息。其由JAVA編寫,支持JAVA 和C兩種語言的客戶端。
圖片

特點

  • 共享空間
    zookeeper允許分佈式程序之間通過一個共享的命名空間進行協調-這個命名空間被組織成類似linux文件系統的方式,這個空間由多個數據寄存器(data registry)組成,這個在zk中叫做znode,他們類似文件和目錄。但與典型的文件系統不同,zk的數據保存在內存中,這意味着zk可以獲得高吞吐量和低延遲。
  • 可複製
    zk服務(zk service)的服務器們必須相互之間能夠感知,它們在內存中維護狀態的映像,同時持久化事務日誌以及內容快照。客戶端連接到單個ZooKeeper服務器。客戶端維護一個TCP連接,通過它發送請求、獲取響應、獲取監視事件和發送心跳。如果到服務器的TCP連接中斷,客戶端將連接到另一個服務器。
  • 讀多寫少的工作模式中很快

數據模型

zookeeper 中數據基本單元叫節點,節點之下可包含子節點,最後以樹級方式程現。每個節點擁有唯一的路徑path。客戶端基於l路徑上傳節點數據,zookeeper 收到後會實時通知對該路徑進行監聽的客戶端。結構如圖:
在這裏插入圖片描述

會話

Session 指的是 ZooKeeper 服務器與客戶端會話。在 ZooKeeper 中,一個客戶端連接是指客戶端和服務器之間的一個 TCP 長連接。客戶端啓動的時候,首先會與服務器建立一個 TCP 連接,從第一次連接建立開始,客戶端會話的生命週期也開始了。通過這個連接,客戶端能夠通過心跳檢測與服務器保持有效的會話,也能夠向Zookeeper服務器發送請求並接受響應,同時還能夠通過該連接接收來自服務器的Watch事件通知。

Session的sessionTimeout值用來設置一個客戶端會話的超時時間。當由於服務器壓力太大、網絡故障或是客戶端主動斷開連接等各種原因導致客戶端連接斷開時,只要在sessionTimeout規定的時間內能夠重新連接上集羣中任意一臺服務器,那麼之前創建的會話仍然有效。

在爲客戶端創建會話之前,服務端首先會爲每個客戶端都分配一個sessionID。由於 sessionID 是 Zookeeper 會話的一個重要標識,許多與會話相關的運行機制都是基於這個 sessionID 的,因此,無論是哪臺服務器爲客戶端分配的 sessionID,都務必保證全局唯一。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章