乐趣区

关于java:顶级分布式开源项目配上这款可视化工具真香

ZooKeeper 作为顶级分布式开源我的项目,利用十分宽泛,Dubbo 和 Kafka 这些出名的开源我的项目都在应用。之前只是据说过它,并没有认真钻研过。明天带大家来学习下 ZooKeeper,次要从 ZooKeeper 的装置、可视化工具、利用三方面来介绍,心愿对大家有所帮忙!

SpringBoot 实战电商我的项目 mall(40k+star)地址:https://github.com/macrozheng/mall

简介

ZooKeeper 是一款分布式协调框架,它能够为分布式系统提供一致性服务。ZooKeeper 最后由 Yahoo 开发,起初募捐给了 Apache 基金会,现已胜利 Apache 的顶级我的项目,目前在 Github 上有 9.5k+Star。

分布式协调

要了解 ZooKeeper 咱们首先须要理解下什么是 分布式协调?这里拿 Spring Cloud 中注册核心的例子来说吧。

微服务(分布式)零碎中有很多服务,雷同的服务又有多个实例,咱们在利用中能够通过服务名来负载平衡地调用服务,而这些服务有可能会挂掉,也有可能会有新的实例退出。此时咱们就须要一个货色来做协调,保留好服务名称和可用实例 3 调用 IP 的对应关系,此时注册核心就是一个分布式协调者的角色,而 ZooKeeper 就能够用来充当这个协调者。

装置

ZooKeeper 的装置无论是 Windows 还是 Linux 都是很不便的,咱们先来学习下它的装置。

Windows 装置

  • 首先下载 ZooKeeper 安装包,下载地址:https://www.apache.org/dyn/cl…

  • 解压到指定目录,解压实现后目录构造如下;

  • conf 目录下创立配置文件zoo.cfg,内容如下;
# 设置心跳工夫,单位毫秒
tickTime=2000
# 存储内存数据库快照的文件夹
dataDir=I:/developer/env/apache-zookeeper-3.7.0-bin/data
# 监听客户端连贯的端口
clientPort=2181
  • 进入 bin 目录,启动 ZooKeeper 服务;
zkServer.cmd
  • 服务启动胜利后,控制台会输入如下信息。

Linux 装置

  • 应用 Docker 装置 ZooKeeper 无疑是最不便的,首先咱们下载它的 Docker 镜像;
docker pull zookeeper:3.7.0
  • 创立好 ZooKeeper 的配置文件目录,并切换到该目录创立配置文件zoo.cfg
mkdir /mydata/zookeeper/conf/ -p
cd /mydata/zookeeper/conf/
touch zoo.cfg
  • 配置文件 zoo.cfg 内容如下,间接应用 VIM 编辑即可;
# 设置心跳工夫,单位毫秒
tickTime=2000
# 存储内存数据库快照的文件夹
dataDir=/tmp/zookeeper
# 监听客户端连贯的端口
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 的模式存储数据的,而 ZooKeeper 是通过 znode-value 的模式存储数据的,znode 有点像目录,而 / 目录就是 ZooKeeper 中的根目录,通过如下命令能够查看所有 znode;
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /
[zookeeper]
  • 创立一个 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 中存储的数据;
[zk: 127.0.0.1:2181(CONNECTED) 4] get /zk_test
my_data
  • 批改 znode 中的数据;
[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 中的数据;
[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 实现的 Zookeeper 图形化治理客户端。颜值很高,举荐应用。

  • 首先下载 PrettyZoo 的安装包,下载地址:https://github.com/vran-dev/P…

  • 咱们须要创立一个连贯,连贯到 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 的服务发现组件;
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
  • 之后批改配置文件application.yml,增加 ZooKeeper 相干配置;
spring:
  cloud:
    zookeeper:
      # zookeeper 连贯地址
      connect-string: localhost:2181
      discovery:
        # 作为服务注册
        register: true
        # 注册时应用 IP 地址而不是 hostname
        prefer-ip-address: true
  • 这里还是应用《Spring Cloud 学习教程》中的例子,有两个服务 zookeeper-ribbon-servicezookeeper-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/…

我的项目源码地址

https://github.com/macrozheng…

本文 GitHub https://github.com/macrozheng/mall-learning 曾经收录,欢送大家 Star!

退出移动版