ZooKeeper:分布式协调服务
现在越来越多的程序使用ZooKeeper来完善自身的分布式服务
ZooKeeper对分布式系统中“部分失败”进行正确处理
特点:
1.核心是一个精简的文件系统,它提供一些简单的操作和一些额外的抽象对象,如排序通知
2.实现很多协调数据结构和协议:分布式队列,分布式锁和一组同级节点中的“领导者选举”
3.高可用:运行在多台计算机上,避免出现单点故障
4.松耦交互:系统中的彼此并不需要了解彼此,参与协调的各方可以不必同时存在
5.通用共享存储库:简化编写这类需求的通用协议
结构说明:
ZooKeeper维护着一个树形层次结构,数据读取具有原子性,可以同步也可以异步
znode通过路径方式引用,有2种类型:短暂和持久,顺序号,事件,触发器
ZooKeeper功能理解:确保对znode树的每一个修改都会被复制到集合体中超过半数的机器上,如果少于半数机器出现故障,则最少有一台机器会保存最新的状态,其余副本最终也会更新到这个状态
zab协议实现以上功能:
1.领导者选举:集合体中所有机器通过一个选择过程来选出一台被称为“领导者”的机器,其他机器被称为“跟随者”。超过半数(或指定数量)的跟随者将其状态与领导者同步,则表明阶段结束
当领导者出现故障,其余机器会选出另一个领导者,随后之前的领导者回复则成为跟随者。
2.原子广播:所有写请求都被转发给领导者,再由领导者将更新广播给跟随者,当半数跟随者将该修改持久化,领导者才会提交该更新,然后客户端才会收到更新响应
ZooKeeper使分布式系统中不同角色之间沟通难度大大降低,在开发分布式服务中,不用对“部分失败”进行权衡(当然是在接受ZooKeeper过程的前提下)