ZooKeeper 基本概念並介紹RPC中Netty和Zookeeper的使用


前言

ZooKeeper 是一個分布式協調服務,可用於服務發現,分布式鎖,分布式領導選舉,配置管理等。Zookeeper提供一個類似Linux文件系統的屬性結構,每個節點可存儲少量的內存文件,並提供每個節點的監控與通知機制。本文介紹一下Zookeeper基本概念以及介紹一下通過Netty 結合 Zookeeper 的來體驗一下Zookeeper 的使用流程。

1. ZooKeeper 基本概念

Session:

表示某個系統和ZooKeeper 之間的連接會話,連接后,此系統需要周期的向 ZooKeeper 發送心跳信息。如果 ZooKeeper 在特定時間內收不到心跳,就會認為這個系統已經死掉了, Session 就會結束。

會話延續能力,方便在斷開時間不長的時候找回原來的會話。

znode:

樹形結構中的每個節點叫做znode, 按是否可永久保存可以分為永久的znode(除非主動刪除,否則一直存在),臨時的znode(Session結束就會刪除)

按是否唯一可以分為唯一節點和順序znode。唯一節點再多個客戶端同時創建時,只有一個可創建成功,其他均失敗,創建的節點名稱是和自己創建時指定的名稱完全一樣。順序節點創建出的節點名在指定的名稱之后帶有10位10進制數的序號。多個客戶端創建同一名稱的節點時,都能創建成功,只是序號不同。

Watch:

某個客戶系統(例如Batch Job)可以監控znode, znode節點的變化(刪除,修改數據等)都可以通知Batch Job, 這樣Batch Job可以采取相應的動作,例如爭搶着去創建節點。

這個Watch是一次性的,即只能使用一次。也就是說,zookeeper通知過進程B之后,Watch就被用掉了,以后就不會再通知了。

如果進程B還需要被通知怎么辦?很簡單,那就在foo節點上再放一個新的Watch即可。如此這般下去,就可以保證一直被通知了。

2. 使用 Netty 將服務端提供的服務存根注冊到 ZooKeeper 上

首先思考一下需要做那些事情:

  1. 服務端定義存根,開啟Netty服務並基於Netty將存根注冊到Zookeeper 上的臨時節點上。 並和Zookeeper 保持Session 心跳
  2. 客戶端watch Zookeeper 上的服務器列表,在服務端新增 刪除服務時 進行獲取服務端的可服務列表,進行訪問。
  3. 客戶端訪問服務端地址,服務端Netty接收,通過反射獲取結果返回給客戶端。
項目案例:

案例


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM