zookeeper应用场景

zookeeper是一个基于观察者模式设计的分布式管理框架,它负责管理和存储数据,接受观察者的注册,一旦数据发生变化,它负责将通知发送给观察者,从而实现集群中的master/slave管理模式。

1、统一命名服务

zookeeper是一个有层次的目录结构,用它做Name Service通常是一个理想的选择。

2、配置管理

一个分布式系统中,通常一个应用需要多台服务器,但这些服务器的某些配置是相同的,如果使用配置文件,发生修改时,需要修改每一台服务器,是非常麻烦的事情。如果使用zookeeper,将配置信息保存在zookeeper的某个目录节点中,一旦配置发生变化,zookeeper会把变化发送到每台服务器上,服务器就可以获取到最新的配置信息。

3、集群管理

如果有多台server组成一个集群,一旦有集群不能提供服务,其他集群必须知道,从而做出调整策略。实现方式是在zookeeper上创建一个临时节点,然后每个 Server 在它们创建目录节点的父目录节点上调用 getChildren(String path, boolean watch) 方法并设置 watch 为 true,由于是 EPHEMERAL 目录节点,当创建它的 Server 死去,这个目录节点也随之被删除,所以 Children 将会变化,这时 getChildren上的 Watch 将会被调用,所以其它 Server 就知道已经有某台 Server 死去了。新增 Server 也是同样的原理。

4、共享锁

共享锁在同一个进程中很容易实现,但是在跨进程或者在不同 Server 之间就不好实现了。Zookeeper 却很容易实现这个功能,实现方式也是需要获得锁的 Server 创建一个 EPHEMERAL_SEQUENTIAL 目录节点,然后调用 getChildren方法获取当前的目录节点列表中最小的目录节点是不是就是自己创建的目录节点,如果正是自己创建的,那么它就获得了这个锁,如果不是那么它就调用 exists(String path, boolean watch) 方法并监控 Zookeeper 上目录节点列表的变化,一直到自己创建的节点是列表中最小编号的目录节点,从而获得锁,释放锁很简单,只要删除前面它自己所创建的目录节点就行了。



4、队列管理

同步队列:当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员的到达;

生存者和消费者模型:队列按照FIFO进行入队和出队操作。

同步队列:

创建一个父目录 /synchronizing,每个成员都监控标志(Set Watch)位目录 /synchronizing/start 是否存在,然后每个成员都加入这个队列,加入队列的方式就是创建 /synchronizing/member_i 的临时目录节点,然后每个成员获取 / synchronizing 目录的所有目录节点,也就是 member_i。判断 i 的值是否已经是成员的个数,如果小于成员个数等待 /synchronizing/start 的出现,如果已经相等就创建 /synchronizing/start。

FIFO队列:

实现的思路也非常简单,就是在特定的目录下创建 SEQUENTIAL 类型的子目录 /queue_i,这样就能保证所有成员加入队列时都是有编号的,出队列时通过 getChildren( ) 方法可以返回当前所有的队列中的元素,然后消费其中最小的一个,这样就能保证 FIFO。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值