Java进阶:Zookeeper相关笔记

概要总结:

●Zookeeper是一个开源的分布式协调服务,需要下载并部署在服务器上(使用cmd启动,windows与linux都可用)。

●zookeeper一般用来实现诸如数据订阅/发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能。

●有多台服务器,每台服务器上部署一个zookeeper,在每个zookeeper中要创建myid文件,标注自己的id,然后在配置文件zoo.cfg中写好其它zookeeper的ip与通信端口,这些zookeeper之间就可以通信了。

●搭建zookeeper集群,一般是2n+1,防止投票选举时出问题。

●可以在zookeeper中创建节点、子节点,节点上可以保存数据;例如节点上保存数据库连接信息,供集群中的多个机器使用。

●可以使用cmd操作zookeeper。

●windows下操作zookeeper的命令(zkCli -server 127.0.0.1:2182)https://blog.csdn.net/zhangphil/article/details/100010629

●使用java操作zookeeper时,需要导入jar包,然后可以调用方法建立连接、创建节点、存取节点内容、删除节点、注册节点监听器等。

●使用java创建zookeeper连接对象时,可以同时连接多个zookeeper,就可以同时操作多个zookeeper了。(new方法中直接传入多个zookeeper的ip即可)

●在zookeeper集群中,如果只连接了其中一个zookeeper,进行了节点的创建/删除/修改数据,那么这个操作会自动同步到集群中的其它zookeeper上。(前提是正确搭建了zookeeper集群,就是zoo.cfg与myid文件配置正确)。如下图,在2181上创建了一个节点后,2182的再次查询,也会发现节点增加了。

●常用的jar包有org.apache.zookeeper、zkclient、curator等。

<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>

<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.2</version>
</dependency>

<dependency>
	<groupId>org.apache.curator</groupId>
	<artifactId>curator-recipes</artifactId>
	<version>2.12.0</version>
</dependency>
<dependency>
	<groupId>org.apache.curator</groupId>
	<artifactId>curator-framework</artifactId>
	<version>2.12.0</version>
</dependency>

注意要使用curator的节点监听器如NodeCache、PathChildrenCache等,需要导入上方的jar包:curator-recipes。

===========================================

笔记正文:

分布式服务治理、分布式协调服务Zookeeper深入

Zookeeper简介
Zookeeper最为主要的使用场景,是作为分布式系统的分布式协同服务。

分布式系统的协调工作就是通过某种方式,让每个节点的信息能够同步和共享。这依赖于服务进程之间的通信。通信方式有两种:
●通过网络进行信息共享。
●通过共享存储。

Zookeeper对分布式系统的协调,使用的是第二种方式,共享存储。其实共享存,分布式应用也需要和存储进行网络通信。
Zookeeper相当于SVN,存储了任务的分配、完成情况等共享信息。每个分布式应用的节点就是组员,订阅这些共享信息;
Zookeeper安排任务,节点得知任务分配,完成后将完成情况存储到Zookeeper。
可以说是把SVN与邮件系统合二为一,以Zookeeper代替。

大多数分布式系统中出现的问题,都源于信息共享出了问题。Zookeeper解决协同问题的关键,就是在于保证分布式系统信息的一致性。

-----------------------------

Zookeeper基本概念:
Zookeeper是一个开源的分布式协调服务,设计目标是将那些复杂的且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一些简单的接口提供给用户使用。Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据订阅/发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能。

--------------------------------------------
角色:

在Zookeeper中,使用了Leader、Follower、Observer三种角色。

客户端发送读写请求,follower与leader都有可能收到;

Leader服务器为客户端提供读写服务;

Follower可以处理客户端发来的读请求。
也可以将客户端发来的写请求转发给leader;
leader接收到follower转发来的写请求后,会把写请求转换成带有各种状态的事务,并把该事务进行广播(发送proposal);
所有接收到proposal的follower就要进行投票,给leader返回ACK,包含是否可以执行的信息;
如果大部分的ACK表示可以执行,那么leader就会把事务提交请求发送给follower;
follower收到事务提交请求后,就会把事务操作记录到日志中,真正完成写操作;
最后,由接收到客户端请求的follower响应,写请求成功。

如果follower有很多时,投票会引起性能瓶颈;
所以出现了Observer:
Observer与follower在功能上相似,能接收读写请求;
不同的是,observer不进行投票,只作为投票结果的听众。
因此,observer可以减轻投票压力;并且在不影响写操作的情况下保证服务性能。

------------------------------
会话:

Session指客户端会话,一个客户端连接是指客户端和服务端之间建立的一个TCP长连接。
通过这个链接,客户端能够心跳检测与服务器保持有效的会话,也能够向服务器发送请求并接受响应,还能够通过该链接接受服务器的通知。
Zookeeper对外的服务器端口默认为2181。

------------------------
节点:指构成集群的机器,也称为机器节点。

数据节点Znode:指数据模型中的数据单元。

Zookeeper将所有数据存储在内存中,数据模型是一棵树(ZNode Tree),由斜杠(/)进行分割的路径,就是一个Znode,例如/app/path1.每个ZNode上都会保存自己的数据内容,同时还会保存一系列属性信息。

----------------

版本:
对于每个Znode,Zookeeper都会为其维护一个叫做Stat的数据结构,Stat记录了这个ZNode的三个数据版本,分别是version(当前ZNode的版本)、cversion(当前Znode字节点的版本)、aversion(当前Znode的ACL版本)。

--------------------------
Watcher(事件监听器࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值