顶级分布式开源项目,配上这款可视化工具,真香!
ZooKeeper作為頂級分布式開源項目,應用非常廣泛,Dubbo和Kafka這些知名的開源項目都在使用。之前只是聽說過它,并沒有仔細研究過。今天帶大家來學習下ZooKeeper,主要從ZooKeeper的安裝、可視化工具、應用三方面來介紹,希望對大家有所幫助!
?
簡介
ZooKeeper是一款分布式協調框架,它可以為分布式系統提供一致性服務。ZooKeeper最初由Yahoo開發,后來捐獻給了Apache基金會,現已成功Apache的頂級項目,目前在Github上有9.5k+Star。
?
分布式協調
要理解ZooKeeper我們首先需要了解下什么是分布式協調?這里拿Spring Cloud中注冊中心的例子來說吧。
微服務(分布式)系統中有很多服務,相同的服務又有多個實例,我們在應用中可以通過服務名來負載均衡地調用服務,而這些服務有可能會掛掉,也有可能會有新的實例加入。此時我們就需要一個東西來做協調,保存好服務名稱和可用實例調用IP的對應關系,此時注冊中心就是一個分布式協調者的角色,而ZooKeeper就可以用來充當這個協調者。
?
安裝
ZooKeeper的安裝無論是Windows還是Linux都是很方便的,我們先來學習下它的安裝。
Windows安裝
首先下載ZooKeeper安裝包,下載地址:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
解壓到指定目錄,解壓完成后目錄結構如下;
在conf目錄下創建配置文件zoo.cfg,內容如下;
進入bin目錄,啟動ZooKeeper服務;
服務啟動成功后,控制臺會輸出如下信息。
Linux安裝
使用Docker安裝ZooKeeper無疑是最方便的,首先我們下載它的Docker鏡像;
創建好ZooKeeper的配置文件目錄,并切換到該目錄創建配置文件zoo.cfg;
配置文件zoo.cfg內容如下,直接使用VIM編輯即可;
運行ZooKeeper容器。
?
命令行操作
接下來我們用命令行來操作下ZooKeeper,熟悉下ZooKeeper的使用。
首先使用zkCli命令行工具連接到ZooKeeper;
通過help可以命令查看ZooKeeper的常用命令;
大家都知道Redis是通過key-value的形式存儲數據的,而ZooKeeper是通過znode-value的形式存儲數據的,znode有點像目錄,而/目錄就是ZooKeeper中的根目錄,通過如下命令可以查看所有znode;
創建一個znode叫做/zk_test,存儲字符串my_data,這用起來有點像Redis;
查看所有znode,可以看到zk_test這個znode;
獲取znode中存儲的數據;
修改znode中的數據;
刪除znode中的數據;
?
?
可視化管理
PrettyZoo是一款基于 Apache Curator 和 JavaFX 實現的 Zookeeper 圖形化管理客戶端。顏值很高,推薦使用。
首先下載PrettyZoo的安裝包,下載地址:https://github.com/vran-dev/PrettyZoo/releases
我們需要創建一個連接,連接到ZooKeeper,可以發現PrettyZoo是支持通過SSH通道連接的;
雙擊連接,我們可以查看到ZooKeeper中存儲的數據,很清楚的發現,ZooKeeper是按目錄結構存儲數據的;
右鍵目錄,我們可以創建和刪除znode,有了這個工具,基本上可以和命令行操作說再見了;
如果你還是覺得命令行比較炫酷的話,PrettyZoo也實現了命令行功能,打開命令行標簽就可以愉快地敲命令了。
?
節點類型
ZooKeeper中的節點(znode)是有生命周期的,這取決于節點的類型。類型有主要有下面四種:
持久節點(Persistent):默認節點類型,節點創建后,會一直存在。
持久順序節點(Persistent Sequential):具有持久節點特性,節點名稱后會增加自增數字后綴。
臨時節點(Ephemeral):臨時存在,當創建節點的會話關閉時,節點被刪除。
臨時順序節點(Ephemeral Sequential):具有臨時節點特性,節點名稱后會增加自增數字后綴。
如果你用命令行創建節點的話,順序特性對應-s選項,臨時特性對應-e選項,比如如下命令:
#?創建持久順序節點 create?-s?/test/seq?segText #?創建臨時節點 create?-e?/test/tmp?tmpText #?創建臨時順序節點 create?-s?-e?/test/seqTmp?setTmpText創建成功后顯示如下:
如果你用PrettyZoo來創建的話,只要勾選一個選項即可。
?
作為注冊中心使用
CAP是分布式架構中的重要理論,其包括一致性(Consistency)、可用性(Availability)和分區容忍性(Partition tolerance)。我們經常使用的Eureka支持AP,而ZooKeeper支持CP。接下來我們學習下ZooKeeper在Spring Cloud中作為注冊中心的應用。
ZooKeeper作為注冊中心使用,用法基本和Eureka和Consul相同,首先我們需要在pom.xml中添加ZooKeeper的服務發現組件;
之后修改配置文件application.yml,添加ZooKeeper相關配置;
這里還是使用《Spring Cloud學習教程》中的例子,有兩個服務zookeeper-ribbon-service和zookeeper-user-service,前者通過Ribbon遠程調用后者;
分別啟動兩個服務,我們通過PrettyZoo可以發現,當ZooKeeper作為注冊中心時,注冊服務的名稱、IP、端口都被存儲到了里面;
我們調用zookeeper-ribbon-service中的接口測試下,發現可以正常訪問,接口地址:http://localhost:8301/user/1
如果這時候我們把zookeeper-user-service服務關掉的話,我們可以發現ZooKeeper會自動刪除存儲的數據;
由此可以看出,ZooKeeper作為微服務的注冊中心是通過臨時節點來實現的,當服務上線時會向ZooKeeper中注冊,當服務下線時會被ZooKeeper刪除,保障了微服務的高可用。
?
總結
今天我們學習了下ZooKeeper的安裝、可視化工具PrettyZoo的使用以及ZooKeeper在Spring Cloud中作為注冊中心的應用。其實ZooKeeper在分布式系統中還有很多應用,比如說做分布式鎖、實現選主功能、取代UUID來生成唯一ID,大家感興趣的話可以深入研究下!
參考資料
官方文檔:https://zookeeper.apache.org/doc/current/zookeeperStarted.html
項目源碼地址
https://github.com/macrozheng/springcloud-learning
?
有道無術,術可成;有術無道,止于術
歡迎大家關注Java之道公眾號
好文章,我在看??
總結
以上是生活随笔為你收集整理的顶级分布式开源项目,配上这款可视化工具,真香!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL Replication--复
- 下一篇: kafka消息存储原理及查询机制