01、ZooKeeper 介绍

是什么

ZooKeeper 是一个典型的分布式数据一致性解决方案

能干什么

分布式应用程序能够通过zookeeper来实现如下功能

1、 负载均衡;
2、 数据发布/订阅;
3、 配置中心;
4、 Master选举;
5、 分布式锁;
6、 分布式队列;
7、 命名服务;

CAP

zookeeper实现了CP,丢失了A
当集群进行leader选举期间,整个集群都是不可用的,因此不满足A(可用性)

特性

顺序一致性

从一个客户端发起的事务请求,最终将会严格的按照其发起的顺序被应用到zookeeper中去
集体什么是顺序一致性,可以看这篇文章https://lotabout.me/2019/QQA-What-is-Sequential-Consistency/

原子性

从客户端发起的事务请求是原子性的,要么在所有的机器上都执行完成,要么都是失败,不会一部分成功,一部分失败

全局数据一致性

无论客户端连接到服务器的哪个节点,都能保证读取到的数据是一致的

可靠性

一旦事务被处理,并且向客户端发送了响应,那么该事务引起的服务端数据修改将会一直保存

实时性

当事务被正确处理后,zookeeper保证在一段时间范围内客户端可以读取到最新的数据

重要概念

会话

当客户端连接到服务端的一个节点时,会创建一个连接到服务端节点的tcp连接并且开始一个新的会话周期。通过这个tcp连接,客户端可以向服务端发送命令,接收服务端的响应以及watch事件通知。当有大量空闲连接连接到服务端节点时,会影响服务端的性能,因此会话有会话过期时间。当一个客户端长时间不和服务端交互时,会关闭连接并且结束会话周期。当连接因为一些异常情况断开时,客户端只要在会话过期时间内连接到任意一个服务端节点,之前创建的会话仍然生效。

znode

znode类似于文件路径,zookeeper的底层存储结构是一个树形结构,该树形结构上的每个节点是znode,znode上可以存储数据,每一个 znode 默认能够存储 1MB 的数据
znode有如下几种类型:

1、 持久性节点;
该节点创建之后,不会因为会话的过期而被删除,会一直存在,除非被删除 2、 持久顺序节点;
在持久节点的基础上,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序。基于这个特性,在创建子节点的时候,可以设置这个属性,那么在创建节点过程中,ZK 会自动为给定节点名加上一个数字后缀,作为新的节点名。 3、 临时节点;
和会话的生命周期绑定,当会话过期时,临时节点会被删除。在临时节点下面不能创建子节点。 4、 临时顺序节点;
类比于持久顺序节点

watcher

客户端可以注册一些watcher到服务端,当服务端发生指定的事件时,可以通知到客户端

acl

zookeeper中引入了acl权限控制

1、 create:创建子节点的权限;
2、 read:获取节点数据和子节点列表的权限;
3、 write:更新节点的权限;
4、 delete:删除节点的权限;
5、 admin:设置节点ACL的权限;

节点角色

Leader

负责进行投票的发起和决议,并且最终更新状态

Follower

用于接收客户请求并返回响应结果,参与leader选举的投票

Observer

用于接收客户端请求并返回响应结果,不参与leader选举的投票,只同步leader状态

为什么需要Observer

client可以连接到任意一台服务器并发送请求。当是读请求时,接收到client请求的节点会查询本节点存放的副本并发送响应结果。如果是写请求,会将请求转发给leader,由leader来发起proposal,对该操作进行投票,其他server会进行投票,当投票量超过半数时,leader会向所有的节点发送通知,节点收到通知会将变更保存到当前节点中,此时接收请求的节点会向client发送响应结果。
从上面的过程可以看出,服务器的节点一共有两个职能:1

1、 参与投票;
2、 接收并响应客户端请求;
当请求量逐渐增多而需要拓展集群从而能够响应更多客户端请求时,可以增加observer的数量,因为其不参与投票,因此不会因为observer数量的增多导致参与投票的节点个数增多,从而减慢投票速度

Learner

同步leader的数据的角色都称为学习者,包括follower和observer

版权声明:「DDKK.COM 弟弟快看,程序员编程资料站」本站文章,版权归原作者所有