统一命名空间
zookeeper初探
在zookeeper里面,所有节点都称为znode,znode作用:
1,存放数据,上限是1M
2,ACL(access control list)访问控制列表,哪个客户端可以访问该节点
权限 允许的操作
CREATE create(子节点)
READ getChildren
getData
WRITE setData
DELETE delete(子节点)
ADMIN setACL
zookeeper中的数据模型
短暂znode:当客户端访问时创建,当客户端断掉连接,znode将删掉,生存周期仅仅为客户端与zookeeper服务器的一次连接里面
持久znode:
顺序号:在创建znode时在名称后面追加一个唯一的编号
观察:在节点上放一个观察,当节点改变状态时会通知客户端
使用zookeeper构建应用
1,配置服务
在zookeeper的树形结构中,保存着集群的各种配置,每个客户端在有配置的znode上放一个watch,当一个客户端的配置修改后,它会对zookeeper的znode进行修改(setData),znode就会通知在此放有watch的其它客户端进行setData,这样就同步了配置更新
2,分布式锁
zookeeper初探
指定一个作为锁的znode,用它来描述被锁的实体,称为leader,然后希望获取锁的客户端创建一些短暂顺序znode,作为leader的子节点,任何时候,顺序号小的客户端将持有锁,客户端释放锁,或者客户端进程死亡,对应的短暂znode将会被删除,然后紧跟的下一个顺序号的客户端将持有锁,通过创建一个关于leader删除的watch,可使客户端在获得锁时得到通知。
羊群效应
在以上实现过程中,当节点发生变化,所有客户端都会得到通知,尝试获取锁,会对zookeeper服务器造成压力,为了避免这种情况,需要优化通知,仅仅只有前一个顺序号的子节点消失时才会通知下一个客户端,而不是删除(或者创建)任何子节点时都需要通知。例如在上图中,只有lock-2消失时才需要通知lock-3对应的客户端,lock-1消失或者有新的子节点加入时,不需要通知lock-3。
网友评论