Zookeeper类似一个文件系统
Zookeeper数据保存在内存中,这意味着可以实现高吞吐量和延迟数量
Zookeeper非常重视高性能,高可用和严格的有序访问
Zookeeper从无主状态到可运行状态,恢复只需200ms
1、Zookeeper的特性
1.最终一致性:客户端看到的数据最终是一致的。
2.可靠性:服务器保存了消息,那么它就一直都存在。
3.实时性:ZooKeeper 不能保证两个客户端同时得到刚更新的数据。
4.独立性(等待无关):不同客户端直接互不影响。
5.原子性:更新要不成功要不失败,没有第三个状态。? ??????
2、Zookeeper下的节点叫做Znode
Znode节点由三部分组成:
1.stat(状态信息、描述Znode的版本、权限信息等)
2.data(与该Znode关联的数据)
3.children(该Znode下的子节点)
Znode节点有四种类型:
1.PERSISTENT:永久节点
2.EPHEMERAL:临时节点
3.PERSISTENT_SEQUENTIAL:序列化永久节点
4.EPHEMERAL_SEQUENTIAL:序列化临时节点
3、Zookeeper是什么?
server.1,1就是zk的id,在dataDir对应的目录下,创建myId文件,赋值为1
4、Zookeeper中快速领导者选举是怎么做的?
选班长:
1.投自己
2.交流?PK --> 最强的人
3.投票(先比较日志id? zxid大的,如果都相等,比较myid大的,myid肯定不相等)
4.统计? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
5、为什么集群启动一台ZK服务器,客户端连接会报错?
因为启动一条zk服务器,他自己本身都不知道自己是leader还是follower,所以zk会主动断开client,而client会进行重试一直去尝试连接,zk就一直主动断开,所以会一直抛异常
6、Zookeeper是如何通过两阶段提交来保证数据一致性的?
leader,commit到follower,使用的是异步方式
ZK尽可能的去保证强一致性,但是目前还是最终一致性
7、Zookeeper的观察者节点的作用是什么?
节点过多读的性能会提升,但是会影响写的性能
所以,出现了观察者节点,既提高了读性能,又不参加投票,所以不会影响写性能
8、什么是脑裂?
两台机房,选出两个leader来
解决方案:通过过半机制进行选举,然后一个机房多,一个机房少
1.Zookeeper是什么?
2.Zab协议是什么?
3.什么是分布式一致性?Zookeeper保证的是什么一致性?
4.什么是两阶段提交?
5.Zookeeper中快速领导者选举是怎么做的?
6.Zookeeper中的一致性是如何保障的?
7.Zookeeper的观察者节点的作用是什么?
8.为什么建议用奇数个节点来搭建集群?
9.什么是脑裂
10.Zookeeper集群中还会不会出现脑裂?为什么?
1.paxos算法
2.ZAB
3.watch机制
4.API,不怕写client
5.callback? -》 reactive 响应式编程(更充分的压榨OS操作系统,HW硬件 的资源和性能)
1、paxos算法(小岛议员提议故事)https://www.douban.com/note/208430424/?_i=00706411eesvs5
它是一个基于消息传递的一致性算法,paxos被认为是目前为止唯一的分布式一致性算法,其他的算法都是在其基础之上进行改进和简化的
最重要的两点:过半通过、两阶段提交
ZK Server是怎么实现的:
情况一:client要读数据,follower毫不犹豫直接给他,但告诉他这可能不是最新的,如果要最新的,等会我sync一下leader再告诉你
情况二:client要写数据,follower做不了主,然后告诉leader,leader询问了所有follower,都说没问题,然后同意写,并把数据返回
情况三:leader挂了,follower选个头出来,期间不接受client的任何请求
2、ZAB协议(ZK快速选举leader的过程)
Zab协议 的全称是Zookeeper Atomic Broadcast(Zookeeper原子广播)
队列:FIFO、有序性
?3、watch机制
1.watch一次性的,每次都需要重新注册
2.watch的回调执行是顺序执行的? A <-- B?<-- C?<-- D?
分布式锁,当A抢到了创建节点,B就会watch A节点,当A挂掉或者删掉时,会通知ZK,ZK就会通过watch的回调钩子,来唤醒B的方法,执行是在B的客户端执行的
3.watch是轻量级的,只告诉你发生了什么,不会告诉你具体内容
watch的事件类型:节点创建、节点删除、节点数据变化、子节点改变(添加/删除)