ZooKeeper 简单介绍

zookeeper 是一个发布/订阅模式的,分布式数据管理协调的框架。

  • 发布/订阅:基于节点的
    发布(creat):创建一个新的节点的时候,相当于存储或发布一份数据
    订阅(watch):基于已经存储的节点上的数据的变化,节点的子节点变化及连接变化(客户端与节点连接)
  • 数据管理
    zookeeper数据结构为树形结构,根节点为'/'。节点有父子关系,可以用文件路径标识如:/server/game1,表示根节点/下的server节点下的game节点。所有的数据的存储必须基于节点,根节点不存数据。每个节点存储数据最大1M(默认)。
  • 协调
    观察事件的变化(数据变化、链接状态、节点的个数等),当有事件变化时,通知watch观察者。
  • 节点
    临时节点:基于会话的,创建完节点后,如果会话消失,则该节点消失。应用 如:dubbo的服务注册与发现。
    持久化节点:创建节点后如果不主动删除,该节点会一直存在。

ZAB协议(ZooKeeper Atomic Broadcast )

  1. 集群在半数以上节点存活的状态下,可以对外提供服务(大于半数不包括半数)
  2. 客户端所有的写请求都交给leader来做,leader确保数据变更同步给follower
  3. leader宕机或者集群重启的时候,宕机前没有完成的事物操作,在集群重启后会快速恢复到故障之前的状态,即该干嘛赶紧干嘛。

zookeeper集群中有一个leader和多个follower:

  1. zookeeper 不用自己配置主从关系,集群启动后会自己选举leader,当leader宕机后,集群会重新选择新的leader。
  2. zookeeper没有主从关系,程序不关心哪台是leader哪台是follower。都可以读写,只是leader干活多点,当follower有写请求时,会转给leader,leader写完后会广播告诉集群其他follower(弱一致性)

使用
一般不会使用zookeeper提供的原生的api,可以用封装过的Curator http://curator.apache.org/来开发。

总结

zookeeper主要就做两件事:数据存储事件通知

你可能感兴趣的:(ZooKeeper 简单介绍)