1.为了解决分布式事务性一致的问题
2.文件系统也是一个树形的文件系统,但比linux系统简单,不区分文件和文件夹,所有的文件统一称为znode
3.znode的作用:存放数据,但上限是1M ;存放ACL(access control list)访问控制列表,每个znode被创建的时候,都会带有一个ACL,身份验证方式有三种:digest(用户名密码验证),host(主机名验证),ip(ip验证) ,ACL到底有哪些权限呢?create(增),delete(删)read (getChildren ,getData),write(写),admin(selectACL)
4.数据模型:短暂znode( zkCli.sh 客户端断掉连接之后,就不存在了)和持久znode
5顺序号:每个znode在创建的时候都会编一个号,按照那他们就会按照创建的时间编号,同样的父节点的znode共用一套编号(牛一,牛二,牛三),由父节点维护,是唯一的,锁机制要用到
6.观察(watch):观察子节点的变化,类似于我们传统关系型数据库中的触发器
7.操作:create delete setData getData exists(znode是否存在并且查询他的data) getACL setACL
8.集群是无中心的,只要有超过一半以上的节点没有down掉就能工作,出于这个原因,我们zookeeper的节点数通常要设置成奇数。
9.在整个集群没有down掉之前,至少有一个节点是最新的状态,这是通过Zap,该zap协议是包括2个无限重复的阶段:1.选举(选举出一个leader,其他节点就变成了follower)2.原子广播(所有写请求转发给leader,再由leader广播给各个follower,当半数以上follower将修改持久化后,leader才会提交这个更新,接下来客户端才会收到一个更新成功的响应)
10.应用:1.配置文件的同步(放一个watch,检测到数据改动后,立刻同步到其他节点,确保配置文件的一致性)2.锁机制的实现,比如很多客户端访问一个znode的资源,先给这个znode设置一个观察,观察节点的删除,其他客户端进来后,会添加一个对应的短暂znode,因为zookeeper的顺序号机制,给每个要访问资源的客户端对应的znode分配一个顺序号,通过对比顺序号,决定能不能使用这个资源