目录
💟这里是CS大白话专场,让枯燥的学习变得有趣!
💟没有对象不要怕,我们new一个出来,每天对ta说不尽情话!
💟好记性不如烂键盘,自己总结不如收藏别人!
🤗 谈谈对Zookeeper的理解
💌Zookeeper是为分布式应用提供协调服务的Apache项目,是基于观察者模式设计的分布式服务管理框架。Zookeeper = 文件系统 + 通知机制。
观察者模式(Observer Pattern):定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。又名发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属(Dependents)模式。
💌最核心的思想就是半数机制,即集群中半数以上的服务器正常,则集群可用。
🧡节点类型
🍠持久化目录节点:客户端和服务器断开连接后节点仍然存在。
🍠持久化顺序编号目录节点:对节点名称顺序编号,客户端和服务器断开连接后节点仍然存在。
🍠临时目录节点:客户端和服务器断开连接后节点被删除。
🍠临时顺序编号目录节点:对节点名称顺序编号,客户端和服务器断开连接后节点被删除。
🧡选举机制
第一次启动
💌当票数没有达到半数时,将票投给当前myid大的服务器,直到达到半数后该服务器自动选举为Leader,剩下的服务器变为Follower。也就是如果有N台服务器,在顺序启动情况下Leader的myid为,在随机启动情况下,投票过半时,Leader为myid大的服务器。
非第一次启动
💌若Leader挂掉了,根据以下三个值来选取,顺序判断谁大谁为Leader:
🍠Epoch:每个Leader任期代号,每投完一次票任期号增加。
🍠ZXID:事务id,用来标识一次服务器状态的变更。
🍠SID:服务器id,与myid一致。
🧡监听原理
🍠在main线程中创建客户端,创建两个线程:connect负责网络连接,listener负责监听。
🍠通过connect将注册的监听事件发送给zk服务器。
🍠将注册的监听事件添加到zk服务器的监听器列表中。
🍠当zk服务器监听到变化,将消息发给listener。
🧡写数据原理
写入请求直接发送给Leader节点
💌由Leader发送写请求给Follower,Follower完成写数据后返回ask给Leader,若超过半数的服务端完成写数据,则Leader返回ask给客户端,剩下的服务器再慢慢完成写数据。
写入请求直接发送给Follower节点
💌先将写请权限转给Leader,流程同上,若超过半数的服务端完成写数据,返回ask给与客户端建立连接的Follower,再由其返回ask给客户端。