引言
行内在构建微服务平台时,选用了 Zookeeper
作为服务注册核心。
就分布式 CAP
定理而言,Zookeeper
做 CP
,Eureka
做 AP
,但其实是 AP
场景更适宜服务注册核心的高可用,可用性要比一致性更重要。
目前国内的 Zookeeper
遍及受影响于 Dubbo
的开源,阿里巴巴有一套本人的服务注册核心配合 Dubbo
,但该服务注册核心却并未随 Dubbo
一起开源,主观环境限度下,Dubbo
官网举荐应用 Zookeeper
作为服务注册核心,这影响了一大批企业,尽管在起初阿里巴巴官网相干团队曾经公布文章不举荐应用 Zookeeper
,但这就像流言和造谣一样,流言流传的范畴远远高于造谣信息的流传范畴。
阿里巴巴为什么不必 ZooKeeper 做服务发现?– 阿里中间件团队博客
所以,如果不是非要用 Zookeeper
搭建服务注册核心的话,本文请选择性观看,就当做是一个对 Zookeeper
的理解学习就好。Zookeeper
依然是一款平凡的框架,当之无愧的分布式顶级我的项目,在数据一致性方面无可匹敌。
再次关上 Spring
官网,不由得感叹开源社区的平凡,在去年学习微服务时,仅有 Eureka
、Zuul
、Feign
、Ribbon
、Hystrix
等几个组件,现在曾经倒退至 30
多个开源组件;现在的 Spring Cloud
,曾经反对 Zookeeper
,成为业界最风行的微服务解决方案。
Zookeeper
官网定义:
ZooKeeper: A Distributed Coordination Service for Distributed Applications.
Zookeeper
:面向分布式应用的分布式协调服务。
装置
Zookeeper
下载地址:Releases – Apache Zookeeper
抉择一个稳固的 Release
版本下载:
Zookeeper
采纳 Java
编写,运行 Zookeeper
之前须要配置 Java
环境。
默认 conf
目录下没有配置文件,此处只做学习应用,创立文件 zoo.cfg
,内容与 zoo_sample.cfg
统一,应用默认配置即可。
在命令行中运行 bin
目录下的 zkServer.cmd
启动 Zookeeper
服务器 (若在 Unix
环境下请运行 .sh
脚本,下同 )。
启动客户端连贯。
运行 zkCli.cmd
启动 Zookeeper
客户端,是一个可对服务器数据进行操作的命令行界面,与 Redis
相似。
数据结构
援用 Zookeeper
官网的一张图,Zookeeper
的外部数据结构采纳树状构造,以 /
为根节点,相似于 Unix
文件系统,每个节点中能够存储信息。
Zookeeper
节点分为永恒节点、程序节点、长期节点,如下图所示。
永恒节点:节点始终存在,除非显式执行删除命令,永恒节点下能够创立子节点。
程序节点:节点创立之后,Zookeeper
为节点增加一个序列号,如图中的 zk-sequence-node0000000008
,其中 0000000008
为 Zookeeper
追加的序列号。该序列号在同一父节点下是惟一的,格局为 10
位数字,有余 10
位用 0
补齐。
长期节点:该节点的生命周期依赖于创立它的会话,当客户端断开连接后,该节点会被主动删除,长期节点不容许有子节点。
这里的长期节点就非常适合做微服务注册核心。
微服务启动时作为客户端向 Zookeeper
注册,创立蕴含以后微服务信息的长期节点,当微服务下线时,该长期节点主动被 Zookeeper
删除,保障了微服务的高可用。
并且客户端能够增加对节点的监听 watch
,也就是观察者,当节点更新时,会告诉客户端,这样能保障微服务获取到的服务列表始终是最新的。
可视化工具
Zookeeper
的根底命令就不做解说了,Zookeeper
的命令无非是对节点的减少、删除、更新、查问,没有必要深刻学习,作为非专业利用反对人员,简略做理解即可。
这里举荐应用可视化工具对 Zookeeper
进行学习,能够可视化对节点进行操作,不须要打命令那么麻烦了。
zkui – Github
实战
新建 maven
我的项目,增加依赖:
<dependencies>
<!-- Zookeeper 服务发现组件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
</dependencies>
增加配置:
spring:
application:
# 利用名
name: sample-application
cloud:
zookeeper:
# Zookeeper 地址,此处演示只应用单 Zookeeper 节点,未部署集群
connect-string: localhost:2181
# 服务发现
discovery:
# 注册本身
register: true
# 优先注册 IP
prefer-ip-address: true
server:
port: 9000
启动利用,会打印出很多 Zookeeper
连贯相干的日志:
查看 Zookeeper
服务器的节点信息,在 services/sample-application
节点下挂载了一个 name
为 UUID
格局的长期节点,节点内存储了该微服务的相干信息。
总结
当前有工夫一起学习 Zookeeper
集群及其他支流分布式解决方案。
本文作者:河北工业大学梦云智开发团队 张喜硕