一、Zookeeper概述
1.分布式系统的问题
zookeeper提供分布式的锁服务,对于一个集群的稳定起到非常关键的作用,因为它可以协调不同节点之间的工作(核心是分布式的锁服务)。
I.分布式系统的问题
- 与单机系统不同:单机开发涉及到锁的地方是进程的多线程的开发,可能会搞一些内存锁、互斥锁、读写锁等。为什么通过锁可以控制有效地运转,是因为锁可以作为一个全局唯一的一个标准 。
- 内存地址一致 :存在竞争公共资源
- 单机出问题概率低
- 分布式系统
- 一致性问题 :HDFS的一致性,分为强一致和弱一致(还没有达到三副本平衡,在只有一个副本可以对外提供服务,之后慢慢拷贝得到三副本)。
- 容灾容错 :如一台机器挂了
- 执行顺序问题 :锁服务
- 事务性问题
单机多线程情况时锁的经典例子:
如下图:蓝色的方块是公共变量,黄色的方块是线程。在线程1还没来得及去写时线程2也要执行。
II.核心问题
- 没有一个全局的主控,协调或控制中心:导致没有一个正确的顺序。
- 需要一个松散耦合(对硬件依赖性不强,不需要高配置机器,如内存、硬盘特别大,cpu核数多么的多)的分布式系统中粗粒度锁(进程间多线程是细粒度的)以及可靠性存储(低容量,这个系统可以存储一些数据)的系统(例如zookeeper就是这样一个系统)。
2.zookeeper概述
I.简介
- Hadoop系统:zookeeper属于hadoop生态里的重要成员
- 开源高效可靠
- 名字服务器(zookeeper系统可以给各个机器取名字,要求每台机器名字不一致),分布式同步(如用5台机器搭建zookeeper集群,用其中任意一台机器得到的信息都是一致的),组服务
- Google内部实现叫Chubby:没有开源,雅虎模拟这么个服务搞出了zookeeper且开源捐给了Apache。
- 基于Paxos协议:保证集群里访问任意一台机器得到的结果是一样的。
- zookeeper以类似目录树的方式来管理节点
- 数据模型类似于linux环境下的文件系统,比如目录里面有文件和目录,文件和目录中有层级关系,zookeeper中不能用相对路径。
zookeeper的形象图如下:很像文件目录树,图中的绿色方块都是节点。
- 数据模型类似于linux环境下的文件系统,比如目录里面有文件和目录,文件和目录中有层级关系,zookeeper中不能用相对路径。