ZooKeeper介绍

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值