分布式协调服务之zookeeper(二)基本概念

前言

上一章我们主要讲了zookeeper是什么以及它如何保证分布式一致性。这一章我们先了解zookeeper的数据结构以及它内部有哪些基本概念。了解了这些,我们才能深入了解它的原理,彻底掌握它是如何实现分布式一致性的。

zookeeper的基本概念

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

基本概念

集群角色

通常在分布式系统中,构成一个集群的每一台机器都有自己的角色,最典型的集群就是Master/Slave模式(主备模式),此情况下把所有能处理写操作的机器称为Master机器。把所有通过异步复制方式获取最新数据,并提供读服务的机器称为Slave机器。
而在zookeeper中,这些概念被颠覆了。它没有沿用传统的Master/Slave模式,而是引入了Leader、Follower、Observer三种角色。那么这三种角色有什么区别呢?

  • Leader
    Leader服务器是zookeeper集群工作的核心,其主要工作有以下两个:
  1. 处理所有的事务请求,当有写请求来的时候,如果接收到写请求的服务器是Follower,它会将请求转发给Leader,Leader来发起投票,看是否能执行本次事务请求。投票结束后,Leader会将结果广播给所有的Follower。
  2. 集群内部各服务器的调度者
  • Follower
  1. 处理所有的读请求。将写请求转发给Leader转发给Leader,Leader处理完毕后,具体的响应还是由接收到请求的Follower给出。
  2. 参与Leader选举。
  • Observer
  1. Observer是zookeeper3.3.0以后产生的一个新角色,它能处理所有的读请求。不参与任何形式的投票。因此Observer可以在不影响写性能的情况下提升集群的性能

会话(session)

session指客户端会话,一个客户端连接是指客户端和服务端之间的一个TCP长连接,zookeeper对外的服务端口默认为2181,客户端启动的时候,首先会与服务器建立一个TCP连接,从第一次连接建立开始,客户端会话的生命周期就开始了,通过这个连接,客户端能够心跳检测与服务器保持有效的会话,也能向zookeeper服务器发送请求并接收响应,同时还能够通过该连接接收来自服务器的watch时间通知。

数据节点(Znode)

在谈到分布式的时候,我们通常说的“节点”是指组成集群的每一台机器。然而,在zookeeper中,“节点”分为两类,第一类同样是指构成集群的机器,我们称之为“机器节点”;第二类是指数据模型中的数据单元,我们称之为数据节点–Znode。zookeeper将所有的数据存储在内存中,数据模型是一棵树(Znode Tree),由(/)进行分割的路径,就是一个Znode,例如/app/path1.每个Znode上都会保存自己的数据内容,同时还会保存一系列属性信息。

数据节点有以下几种分类:

  1. 持久节点(Persistent)

是zookeeper中最常见的一种节点类型,所谓的持久节点,就是指节点被创建后会一直存在服务器,直到删除操作主动删除

  1. 临时节点(Ephemeral)

就是会被自动清理的节点,它的生命周期和客户端会话绑在一起,客户端会话结束,临时节点就会被清除掉。临时节点不能创建子节点。zookeeper实现分布式锁,主要就是依赖临时节点的特性,不会出现死锁的情况。

  1. 有序节点(Sequential)

就是有顺序的节点,在其创建的时候,会在名字后面加上数字的顺序,表示它是有序的。zookeeper实现分布式id就是依赖有序节点的特性

版本(version)

我们刚刚提到,zookeeper的每个Znode上都会存储数据,对于每个Znode,zookeeper都会为其维护一个叫做stat的数据结构,stat记录了这个Znode的三个版本数据,分别是version(当前Znode的版本)、cversion(当前Znode的子节点版本)、aversion(当前Znode的ACL版本)。

Watcher(事件监听)

Watcher(事件监听),是zookeeper中一个非常重要的特性,zookeeper允许用户在指定节点上注册一些Watcher,并且在一些特定时间出发的时候,zookeeper服务端会将事件通知到感兴趣的客户端,该机制是zookeeper实现分布式协调服务的重要特性。zookeeper实现订阅/发布功能就是依靠watcher机制。

ACL

zookeeper才用ACL(Access ControlLists)策略来进行权限控制,其定义了如下五种权限:

  • CREATE:创建子节点的权限。
  • READ:获取节点数据和子节点列表的权限。
  • WRITE:更新节点数据的权限。
  • DELETE:删除子节点的权限。
  • ADMIN:设置节点ACL的权限。

小结
这一章我们主要讲了zookeeper中的基本概念,在学习概念的时候,往往是比较枯燥的。下一章,我们动手来搭建zookeeper的伪集群模式。在搭建好集群后,我们可以执行对应的操作,来加深对这些概念的认识。


版权声明:本文为qq_33195129原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。