浅谈Zookeeper【一】Zookeeper基础知识介绍

前言

由于在实际工作中,几乎都是使用公司提供的基础服务或者采用开源的框架,很少与ZK实际打交道,对ZK的底层原理一知半解,无法将各个知识点串起来,所以打算记录下自己所了解的ZK,并且将学习回顾知识汇总。

本文作为Zk系列知识的开篇,只介绍Zk的基本知识,附带提一嘴Zk的实际应用场景,不深入介绍原理。

Zookeeper介绍

一、什么是Zookeeper

Zookeeper是典型的为解决分布式一致性所带来的问题的方案组件,分布式应用可以基于zk来实现集群管理、服务注册、动态配置、负载均衡、分布式锁、发布订阅等一系列功能,并且zk可以保证分布式一致性特性

Zk的目标是致力于提供一个高性能、高可用、严格顺序一致性的分布式协调服务。

二、Zookeeper基础概念

1. Zk数据节点(文件系统)

zk的数据模型采用一系列节点来构成,节点按照树状进行分布,类似于文件系统,所以一般说zk是一个分布式文件系统

在zk中创建的所有数据与文件系统中的目录结构一样,采用 /aa/bb格式,不过传统的文件系统通过磁盘来存储数据,zk则采用内存存储数据,所以可以提供高吞吐、降低延迟的功能。

zk中的每个数据节点,称作为一个ZNode节点,并且ZNode按照持久化分为四种类型
(1)持久化目录节点:该节点一但创建将进行持久化,客户端断开不会丢失节点。
(2)持久化顺序目录节点:与持久化节点一致,但是zk会为节点名称自动添加顺序编号如:/znode00000001
(3)临时目录节点:该节点由客户端创建后,一但客户端断开连接便自动清除该节点。
(4)临时顺序目录节点:与临时节点一致,zk也会为节点名称自动添加顺序编号如:/znode00000001

2. Zk会话Session

Session会话指的是客户端会话,也就是客户端与zk服务的一次TCP连接周期。在Zookeeper中客户端与服务器之间采用建立TCP长连接的方式,从第一次与服务器建立连接开始到客户端断开连接都处于一个session会话周期。

通过长连接的方式,客户端能够通过定时的心跳发送来保持与服务端的会话,并且发送请求和接受响应。Session会话还会维持一个超时时间SessionTimeOut,这个值用来标识会话的过期时间,如果客户端与服务端断开连接后,只要在超时时间内重新连接,便可以继续使用之前的会话。

3. Zk集群角色Role

Zk集群与传统分布式主从模型区别在于多了一个Observer角色用来提高吞吐量。
(1)Leader:也就是主节点,一个集群当中只有一个Leader节点,主要用来提供读写能力,其中数据写操作只能通过Leader节点发起。
(2)Follower:从节点,从节点主要提供客户端数据读取的能力和与Leader节点同步数据的能力,当遇到写请求时会转发给Leader进行处理,并且当Leader节点宕机或断开时进行投票选举。
(3)Observer:ob节点在平时与Follower节点功能一致,只是不参与Leader选举投票,没有选举权。

4. 版本号Version

zk中数据是由一个个ZNode节点组成,zk为每个ZNode节点提供一个Stat数据结构,其中包含ZNode三个数据版本号,version(当前ZNode版本),cversion(当前ZNode子节点版本),aversion(当前ZNode的ACL版本),版本号的功能主要是为了避免并发数据写入时的一些问题,通过CAS的操作来进行数据更新,也就是说每次数据的写入请求会包含一个版本号,服务端进行数据写入时会判断版本号是否一致。

5. Watch监听

Watch监听功能是Zk中非常重要且常用的机制,zk允许客户端对指定的节点注册一些监听事件,并且在特定的事件发生时通知给注册的客户端,该机制是ZK实现分布式协调服务的重要特性。

6. ACL

ACL是zk中用来做权限控制的策略,类似于Linux系统的权限控制,zk定义了5种权限。

  1. CREATE:创建子节点权限
  2. READ:读取节点数据和子节点列表权限
  3. WRITE:更新节点数据权限
  4. DELETE:删除子节点权限
  5. ADMIN:设置节点ACL的权限

三、Zookeeper应用场景

1、注册中心

在实际应用中,通常采用Zookeeper用来做为应用服务的注册中心,比如常用的RPC框架Dubbo。

如何实现注册中心服务?
例如,可以在服务端在启动时,将服务接口的信息注册到zookeeper的一个节点上,利用zk高可用的特性来实现一个注册服务表。
比如说一个分布式集群中提供一个Service接口,那么在服务启动时可以注册一个节点/{service}/{version}/{ip:port},然后服务消费者就可以从zk中获取服务提供者的接口信息进行访问,为了避免每次都从zk读取数据,可以在消费端将服务提供者List进行缓存,并且注册一个监听事件,当服务提供方变更时更新缓存。

2、配置中心

配置中心也是利用ZK的发布/订阅机制来实现的,也就是通过我们自建的前端配置平台来添加数据,然后将数据发布到zk节点上,这里的配置平台也就是数据的生产者、发布者。
然后我们需要依赖配置的服务可以通过注册事件订阅机制,来实时的监听数据的变更。

3、集群管理

在搭建分布式集群,通常需要对集群服务进行有效的监控和控制,对整体进行服务治理。这时可以通过zk来进行上报服务状态,其实采用的也是zk中的watcher监听,当数据节点发生变更时就可以监听到状态,进行一系列操作。
例如,当需要监控分布式集群节点状态时,通过创建一个/clusterServers节点的监听事件,当新增节点时创建一个临时目录节点,这样每当添加机器或者机器下线时,就可以监听到变更状态。

4、分布式锁

我们可以通过创建一个节点目录的方式来创建一个目录,因为zk特性只会保证一个客户端创建成功,这样就可以将创建目录认为是创建了一个分布式锁,这里不具体讲锁过期、锁释放等等问题。

5、其他应用

其实基于zk的应用特别多,例如Master选举、分布式队列、负载均衡等等,这里不一一讲述。

四、总结

通过本文大概的介绍了zookeeper是什么,zookeeper基本的概念以及应用场景,对zk大体上已经有了一些清晰的认识,接下来几篇文章会更加深入的描述一些zk实现原理和应用。

参考文献:
1、书: 从Paxos到Zookeeper分布式一致性原理与实践
2、https://www.cnblogs.com/felixzh/p/5869212.html
3、网络上部分博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值