zookeeper类似于一个按摩会所app,生产者相当于技师,消费者相当于去按摩的顾客,而app上面就保存了几号技师available,技师有可能当天请假啥的,当前技师是不是available,就需要通知给客户了
采用观察者模式
zookeeper只存储一些简单的配置信息,因为每个Node只能存储1MB的数据,所以不能像UNIX一样存储海量信息
统一命名服务,类似于nginx,还有负载均衡也类似nginx
统一配置管理
同步参数
zk客户端命令行
Zookeeper能做什么?
1 服务器动态上下线 服务器创建临时节点,然后在服务器关闭的时候,临时节点自动消失,client端通过watch监听指定路径,便可知道是否有服务器提供服务了
2 分布式锁 (成熟的Curator框架) 自己写用countDownLatch
3 配置实时更改 (之前在拼多多的时候就有用到,ZooService),其实运用的就是监听机制(watch的process函数)
其实这三者都是运用了Zookeeper的节点新增create、获取getData及getChildren、删除Delete
节点包括永久节点和临时节点,而节点又分为带序号的和不带序号的 参数为-e -s
Paxco算法解决多机器的一致性问题,角色有三种Proposer,Acceptor,Learner,但是问题在于多个Proposer会导致活锁问题,为此使用改进的Paxco算法,即ZAB协议,只有一个Leader当做Proposer,解决活锁问题
CAP原理
一致性 可用性 分区容错性(Patition Toralance)
P是必须的,所以一般是AP 或者CP
Zookepper实现了CP,因为Leader选举时不可用
zookeeper启动源码流程
start启动时恢复快照和编辑日志到内存中
选举日志源码解析:
非第一次启动
选举源码,选举和对外通讯 解耦
具体源码流程图
同步源码解析
同步源码流程图:
Zookeeper的Leader启动
Follower启动
客户端启动
读源码也要化繁为简
确认接口的反思,能不做就不做,绝对不做