Zookeeper入门
什么是zookeeper?
想象这样一种场景,微服务模式里面,微服务服务地址和接口信息的存储有几个特点
- 需要被多机器非常频繁地访问,一旦出现问题影响整个系统的运作
- 需要经常变动,变动是确定的
- 数据量不大
基于第一点用db貌似不太合适,用redis的话要保证可靠只能做成集群的模式,但是redis集群并不保证数据的一致性。
以上场景,我们需求的是,一个分布式的,强一致性的存储系统,也就是zookeeper所做的事情。
zookeeper的特点
分布式
zookeeper进程支持分布式部署,分布式系统具有以下的好处:
可靠性:进程部署在多个机器上,只要所有进程的一半以上正常,就能保证zookeeper集群的正常
扩展性:进程和机器的数量可以根据实际业务动态扩展
黑盒子:系统隐藏了内部分布式的细节,对外只提供就像单体应用一样的接口。
一致性
zookeeper集群的节点在经过一个选主过程后会分为一个leader和多个follower的角色。所有的节点都可以直接接受客户端请求,读操作直接返回本节点保存的数据,写操作会转发给leader节点,leader节点群发通知,收集各节点的意见,取得过半数回复则写操作被认可。
监听
zookeeper可以提供对某个数据变化的监听,一旦监听的事件发生会通知到注册的节点。
监听具有以下特点:
-
所有的监听只通知一次
-
通知和查询的次序保证
a client will never see a change for which it has set a watch until it first sees the watch event.
- 支持数据监听和子节点监听
zookeeper的数据结构
所有zookeeper节点维护的是一个Tree,Tree的每个node称为一个ZNode。
每一个ZNode除了name,还内建了一个stat结构,存储了一些内建的数据。包括Version Number,ACL, Timestamp,Data length。
这个Tree,zookeeper习惯用目录的方式来表示。
ACL(ACCESS CONTROL LIST)
你可以为每个节点设置以下权限:create, read, write, delete,admin