zookeeper浅出深入1

来源:互联网 发布:淘淘商城 源码 编辑:程序博客网 时间:2024/06/03 21:47

什么是zookeeper

zookeeper是一个分布式协调系统,这里有两个关键字:分布式,协同.什么是分布式?所谓分布式就是同一件事情”一个人”干不完,需要”多个人”一起干.既然需要一起干活,那么”每个人”不能乱干,即需要有人去协调他们需干的活,这就是协同.那么既然有分布式协调系统,又没有非分布式协调系统呢?当然有,其中一个就是多线程,只不过多线程的协调是通过内存做的,多个服务器之间只能通过网络通信,因此有zookeeper的出现,通过网络控制各个干活的人.我们知道多线程中很多的协调是通过“锁”来做的,因此zookeeper中肯定有分布式锁的功能,实际上,zk除了分布式锁还有其他很多功能。

zookeeper的功能

zookeeper的提供的功能有:
* 数据发布订阅
* 负载均衡
* 命名服务
* 分布式协调/通知
* 集群管理
* Master选举
* 分布式锁
* 分布式队列
这些功能是如何实现的这里先不说,等弄清zookeeper的体系结构再来看.

zookeeper的体系结构

zk的体系架构图如下:

zookeeper体系架构

zk服务由若干服务器组成,每台服务器内存中维护相同的类似于文件系统的树形数据结构,其中的一台通过ZAB原子广播协议选举作为主控服务器,其他的作为从属服务器.这里要注意:zk服务中每台服务存有整个集群的所有数据,存在内存中,也会刷到磁盘上.如果从存储的角度来看这与HDFS等分布式存储是不一样,HDFS服务的每台服务器只存一部分分片数据,且不会一直存到内存中,那么为什么有这样的区别呢?这是由zk的功能来决定的,在分布式存储系统中,存储的数据可以分为业务数据(用户所传的数据)与集群内部管理数据,前者数据量较大,而重要性较后者低.后者数据量非常小,以至于单台服务器内存能放下所有数据(不分片)因此zk将这部分重要数据放到内存中以供客服端大量调用.

学习一个框架原理最重要的一点就是弄清其主要流程,而对于分布式系统来说,保证数据一致性是非常重要的功能,那么zk是如何保证其数据一致性的呢?
* zk服务的每台机器都可以响应客服端的读操作
* 只有zk的主控服务器才可以响应客户端的更新操作(写,更新,删除)
* 客户端可以连接zk任意一台服务器,如果是更新操作需转发到主控服务器来处理.

以上就是zk数据读写的主要流程,这样做的好处就是数据更新只有一个入口,不会产生数据冲突.如果有多个更新的入口会发生什么事情呢?比如像我们使用git等版本控制工具,多个人更新同一段代码,发生冲突就只有人工介入了,因此为了简化更新的操作,单入口更新.当然这样做的坏处就是更新操作可能慢些吧.

0 0