赞
踩
对于每个接触过大数据开发的同学而言,Zookeeper一定是不陌生的。它是一个开源的分布式服务框架,主要的用处就是为其他分布式框架的稳定运行提供服务。它有很多应用场景,比如分布式配置管理、分布式锁等。
笔者将从架构设计、数据模型、选举机制、读写数据流程、Watch机制五个方面展开。
通常来讲,Zookeeper中主要有三个角色:
Zookeeper中的数据模型很简单,和标准文件系统类似,采用树形结构,每个节点称之为Znode,根节点为/。
Znode可以存储数据,至多可以存储1M数据,也可以创建子节点。需要注意的是当通过路径引用节点时,必须采用绝对路径。
在Zookeeper中,存在四种类型的Znode节点:
# 查看所有命令选项 help # 查看根路径下所有节点 ls / # 创建普通节点 create /app1 "helloworld" # 创建带序号的永久节点 create -s /app2 "app2" # 创建临时节点 create -e /app3 "app3" # 创建带序号的临时节点 create -e -s /app4 "app4" # 查看节点数据 get /app1 # 修改节点数据 set /app1 "app1" # 删除节点 delete /app1 # 递归删除节点 rmr /app1 # 查看节点状态 stat /app3
前面提过Zookeeper中是有Leader、Follower、Observer三种角色的,可是我们在配置文件中并没有指定这些角色,那么它们是怎样产生的呢?这就不得不提Zookeeper中的选举机制了。
假设有三台服务器组成的Zookeeper集群,它们的id分别是从1-3,那么当它们第一次启动后,谁才会成为Leader呢?我们简单地分析一下这个流程:
peerType=observer
server.1=bigdata01:2888:3888:observer
我们知道znode节点可以存储数据,但是在一个分布式系统中,如何才能保证数据的一致性呢?
相比写数据流程,读数据流程就简单得多;因为每台server中数据一致性都一样,所以随便访问哪台server读数据就行;没有写数据流程中请求转发、数据同步、成功通知这些步骤。
一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某一个主题对象。当这个主题对象自身状态变化时,会通知所有订阅者,使它们都做出相应的处理。
而在Zookeeper中,就是引入了Watch机制来实现这种分布式的通知功能。
触发通知事件的种类很多,包括节点创建、节点删除、节点改变、子节点改变等。
总体来说,Watch可以分为以下三个过程:
# 创建普通节点
create /app1 "ap1"
# 监听节点值变化
get /app1 watch
# 监听子节点变化
ls /app1 watch
总体而言,Zookeeper中的Watch机制有以下特点:
Zookeeper中的Watch机制实现原理如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。