一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

頂級分布式開源項目,配上這款可視化工具,真香!

 昵稱10087950 2022-07-26 發(fā)布于江蘇

ZooKeeper作為頂級分布式開源項目,應(yīng)用非常廣泛,Dubbo和Kafka這些知名的開源項目都在使用。之前只是聽說過它,并沒有仔細(xì)研究過。今天帶大家來學(xué)習(xí)下ZooKeeper,主要從ZooKeeper的安裝、可視化工具、應(yīng)用三方面來介紹,希望對大家有所幫助!

簡介

ZooKeeper是一款分布式協(xié)調(diào)框架,它可以為分布式系統(tǒng)提供一致性服務(wù)。ZooKeeper最初由Yahoo開發(fā),后來捐獻(xiàn)給了Apache基金會,現(xiàn)已成功Apache的頂級項目,目前在Github上有9.5k+Star。

分布式協(xié)調(diào)

要理解ZooKeeper我們首先需要了解下什么是分布式協(xié)調(diào)?這里拿Spring Cloud中注冊中心的例子來說吧。

微服務(wù)(分布式)系統(tǒng)中有很多服務(wù),相同的服務(wù)又有多個實例,我們在應(yīng)用中可以通過服務(wù)名來負(fù)載均衡地調(diào)用服務(wù),而這些服務(wù)有可能會掛掉,也有可能會有新的實例加入。此時我們就需要一個東西來做協(xié)調(diào),保存好服務(wù)名稱和可用實例調(diào)用IP的對應(yīng)關(guān)系,此時注冊中心就是一個分布式協(xié)調(diào)者的角色,而ZooKeeper就可以用來充當(dāng)這個協(xié)調(diào)者。

安裝

ZooKeeper的安裝無論是Windows還是Linux都是很方便的,我們先來學(xué)習(xí)下它的安裝。

Windows安裝

  • 首先下載ZooKeeper安裝包,下載地址:https://www./dyn/closer.lua/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
圖片
  • 解壓到指定目錄,解壓完成后目錄結(jié)構(gòu)如下;
圖片
  • conf目錄下創(chuàng)建配置文件zoo.cfg,內(nèi)容如下;
# 設(shè)置心跳時間,單位毫秒
tickTime=2000
# 存儲內(nèi)存數(shù)據(jù)庫快照的文件夾
dataDir=I:/developer/env/apache-zookeeper-3.7.0-bin/data
# 監(jiān)聽客戶端連接的端口
clientPort=2181
  • 進(jìn)入bin目錄,啟動ZooKeeper服務(wù);
zkServer.cmd
  • 服務(wù)啟動成功后,控制臺會輸出如下信息。
圖片

Linux安裝

  • 使用Docker安裝ZooKeeper無疑是最方便的,首先我們下載它的Docker鏡像;
docker pull zookeeper:3.7.0
  • 創(chuàng)建好ZooKeeper的配置文件目錄,并切換到該目錄創(chuàng)建配置文件zoo.cfg;
mkdir /mydata/zookeeper/conf/ -p
cd /mydata/zookeeper/conf/
touch zoo.cfg
  • 配置文件zoo.cfg內(nèi)容如下,直接使用VIM編輯即可;
# 設(shè)置心跳時間,單位毫秒
tickTime=2000
# 存儲內(nèi)存數(shù)據(jù)庫快照的文件夾
dataDir=/tmp/zookeeper
# 監(jiān)聽客戶端連接的端口
clientPort=2181
  • 運行ZooKeeper容器。
docker run -p 2181:2181 --name zookeeper \
-v /mydata/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \
-d zookeeper:3.7.0

命令行操作

接下來我們用命令行來操作下ZooKeeper,熟悉下ZooKeeper的使用。

  • 首先使用zkCli命令行工具連接到ZooKeeper;
zkCli.cmd -server 127.0.0.1:2181
  • 通過help可以命令查看ZooKeeper的常用命令;
[zk: 127.0.0.1:2181(CONNECTED) 0] help
ZooKeeper -server host:port -client-configuration properties-file cmd args
        addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
        addauth scheme auth
        close
        config [-c] [-w] [-s]
        connect host:port
        create [-s] [-e] [-c] [-t ttl] path [data] [acl]
        delete [-v version] path
        deleteall path [-b batch size]
        delquota [-n|-b|-N|-B] path
        get [-s] [-w] path
        getAcl [-s] path
        getAllChildrenNumber path
        getEphemerals path
        history
        listquota path
        ls [-s] [-w] [-R] path
        printwatches on|off
        quit
        reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
        redo cmdno
        removewatches path [-c|-d|-a] [-l]
        set [-s] [-v version] path data
        setAcl [-s] [-v version] [-R] path acl
        setquota -n|-b|-N|-B val path
        stat [-w] path
        sync path
        version
        whoami
  • 大家都知道Redis是通過key-value的形式存儲數(shù)據(jù)的,而ZooKeeper是通過znode-value的形式存儲數(shù)據(jù)的,znode有點像目錄,而/目錄就是ZooKeeper中的根目錄,通過如下命令可以查看所有znode;
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /
[zookeeper]
  • 創(chuàng)建一個znode叫做/zk_test,存儲字符串my_data,這用起來有點像Redis;
[zk: 127.0.0.1:2181(CONNECTED) 2] create /zk_test my_data
Created /zk_test
  • 查看所有znode,可以看到zk_test這個znode;
[zk: 127.0.0.1:2181(CONNECTED) 3] ls /
[zk_test, zookeeper]
  • 獲取znode中存儲的數(shù)據(jù);
[zk: 127.0.0.1:2181(CONNECTED) 4] get /zk_test
my_data
  • 修改znode中的數(shù)據(jù);
[zk: 127.0.0.1:2181(CONNECTED) 5] set /zk_test test_data
[zk: 127.0.0.1:2181(CONNECTED) 6] get /zk_test
test_data
  • 刪除znode中的數(shù)據(jù);
[zk: 127.0.0.1:2181(CONNECTED) 7] delete /zk_test
[zk: 127.0.0.1:2181(CONNECTED) 8] ls /
[zookeeper]

可視化管理

PrettyZoo是一款基于 Apache Curator 和 JavaFX 實現(xiàn)的 Zookeeper 圖形化管理客戶端。顏值很高,推薦使用。

  • 首先下載PrettyZoo的安裝包,下載地址:https://github.com/vran-dev/PrettyZoo/releases
圖片
  • 我們需要創(chuàng)建一個連接,連接到ZooKeeper,可以發(fā)現(xiàn)PrettyZoo是支持通過SSH通道連接的;
圖片
  • 雙擊連接,我們可以查看到ZooKeeper中存儲的數(shù)據(jù),很清楚的發(fā)現(xiàn),ZooKeeper是按目錄結(jié)構(gòu)存儲數(shù)據(jù)的;
圖片
  • 右鍵目錄,我們可以創(chuàng)建和刪除znode,有了這個工具,基本上可以和命令行操作說再見了;
圖片
  • 如果你還是覺得命令行比較炫酷的話,PrettyZoo也實現(xiàn)了命令行功能,打開命令行標(biāo)簽就可以愉快地敲命令了。
圖片

節(jié)點類型

ZooKeeper中的節(jié)點(znode)是有生命周期的,這取決于節(jié)點的類型。類型有主要有下面四種:

  • 持久節(jié)點(Persistent):默認(rèn)節(jié)點類型,節(jié)點創(chuàng)建后,會一直存在。
  • 持久順序節(jié)點(Persistent Sequential):具有持久節(jié)點特性,節(jié)點名稱后會增加自增數(shù)字后綴。
  • 臨時節(jié)點(Ephemeral):臨時存在,當(dāng)創(chuàng)建節(jié)點的會話關(guān)閉時,節(jié)點被刪除。
  • 臨時順序節(jié)點(Ephemeral Sequential):具有臨時節(jié)點特性,節(jié)點名稱后會增加自增數(shù)字后綴。

如果你用命令行創(chuàng)建節(jié)點的話,順序特性對應(yīng)-s選項,臨時特性對應(yīng)-e選項,比如如下命令:

# 創(chuàng)建持久順序節(jié)點
create -s /test/seq segText
# 創(chuàng)建臨時節(jié)點
create -e /test/tmp tmpText
# 創(chuàng)建臨時順序節(jié)點
create -s -e /test/seqTmp setTmpText

創(chuàng)建成功后顯示如下:

圖片

如果你用PrettyZoo來創(chuàng)建的話,只要勾選一個選項即可。

圖片

作為注冊中心使用

CAP是分布式架構(gòu)中的重要理論,其包括一致性(Consistency)、可用性(Availability)和分區(qū)容忍性(Partition tolerance)。我們經(jīng)常使用的Eureka支持AP,而ZooKeeper支持CP。接下來我們學(xué)習(xí)下ZooKeeper在Spring Cloud中作為注冊中心的應(yīng)用。

  • ZooKeeper作為注冊中心使用,用法基本和Eureka和Consul相同,首先我們需要在pom.xml中添加ZooKeeper的服務(wù)發(fā)現(xiàn)組件;
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
  • 之后修改配置文件application.yml,添加ZooKeeper相關(guān)配置;
spring:
  cloud:
    zookeeper:
      # zookeeper連接地址
      connect-string: localhost:2181
      discovery:
        # 作為服務(wù)注冊
        register: true
        # 注冊時使用IP地址而不是hostname
        prefer-ip-address: true
  • 這里還是使用《Spring Cloud學(xué)習(xí)教程》中的例子,有兩個服務(wù)zookeeper-ribbon-servicezookeeper-user-service,前者通過Ribbon遠(yuǎn)程調(diào)用后者;
圖片
  • 分別啟動兩個服務(wù),我們通過PrettyZoo可以發(fā)現(xiàn),當(dāng)ZooKeeper作為注冊中心時,注冊服務(wù)的名稱、IP、端口都被存儲到了里面;
圖片
  • 我們調(diào)用zookeeper-ribbon-service中的接口測試下,發(fā)現(xiàn)可以正常訪問,接口地址:http://localhost:8301/user/1
圖片
  • 如果這時候我們把zookeeper-user-service服務(wù)關(guān)掉的話,我們可以發(fā)現(xiàn)ZooKeeper會自動刪除存儲的數(shù)據(jù);
圖片
  • 由此可以看出,ZooKeeper作為微服務(wù)的注冊中心是通過臨時節(jié)點來實現(xiàn)的,當(dāng)服務(wù)上線時會向ZooKeeper中注冊,當(dāng)服務(wù)下線時會被ZooKeeper刪除,保障了微服務(wù)的高可用。

總結(jié)

今天我們學(xué)習(xí)了下ZooKeeper的安裝、可視化工具PrettyZoo的使用以及ZooKeeper在Spring Cloud中作為注冊中心的應(yīng)用。其實ZooKeeper在分布式系統(tǒng)中還有很多應(yīng)用,比如說做分布式鎖、實現(xiàn)選主功能、取代UUID來生成唯一ID,大家感興趣的話可以深入研究下!

參考資料

官方文檔:https://zookeeper./doc/current/zookeeperStarted.html

項目源碼地址

https://github.com/macrozheng/springcloud-learning


微信8.0將好友放開到了一萬,小伙伴可以加我大號了,先到先得,再滿就真沒了

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    又大又紧又硬又湿又爽又猛| 久久精品亚洲精品一区| 久久一区内射污污内射亚洲| 99久久精品久久免费| 中国少妇精品偷拍视频| 日韩国产亚洲一区二区三区| 日韩蜜桃一区二区三区| 久久老熟女一区二区三区福利| 国产精品一区二区三区日韩av| 小黄片大全欧美一区二区| 果冻传媒在线观看免费高清| 日韩毛片视频免费观看| 一级欧美一级欧美在线播| 国产午夜福利在线免费观看| 亚洲高清一区二区高清| 成人国产激情福利久久| 日韩国产精品激情一区| 女生更色还是男生更色| 女同伦理国产精品久久久| 国产中文字幕一区二区| 熟女白浆精品一区二区| 亚洲综合日韩精品欧美综合区| 亚洲av在线视频一区| 亚洲欧美视频欧美视频| 国产午夜精品福利免费不| 亚洲视频一区二区久久久| 欧美乱妇日本乱码特黄大片| 欧美日韩亚洲国产av| 国产欧美精品对白性色| 99久久精品一区二区国产| 欧美日韩国产自拍亚洲| 国产欧美精品对白性色| 免费观看潮喷到高潮大叫 | 国产精品不卡一区二区三区四区| 亚洲国产av精品一区二区| 加勒比系列一区二区在线观看| 色综合久久中文综合网| 热情的邻居在线中文字幕| 日韩在线中文字幕不卡| 国产午夜在线精品视频| 中国黄色色片色哟哟哟哟哟哟|