Zookeeper集群典型分布式应用场景

1.配置管理——需求是数据一致性

ZooKeeper 采用的是推拉相结合的方式:客户端向服务端注册自己需要关注的节点,一旦该节点的数据发生变更,那么服务端就会向相应的客户端发送Watcher事件通知,客户端接收到这个消息通知之后,需要主动到服务端获取最新的数据。

2.命名服务

服务需要被访问,如服务提供的uri,但是uri是易变的,所以需要给变化的uri取一个固定的名字,每次通过这个名字来获取服务的uri。

         Zookeeper让服务可以创建一个节点,节点名为服务名,数据为uri,通过这种方式来完成命名。

3.负载均衡

1)负载注册/更新——负载ip:port可以保存到zookeeper的临时节点数据中,并具有一致性

2)负载健康检查——对于下线的负载,由于其创建的临时节点自动删除,ip:port数据也会一并删除

3)负载分派——获取负载节点下的所有临时节点,使用负载均衡算法选取一个负载

4.master选举

客户端集群每天都会定时往ZooKeeper. 上创建- - 个临时节点,例如/master_ election/

2013-09- 20/binding。在这个过程中,只有一个客户端能够成功创建这个节点,那么这个;

客户端所在的机器就成为了Master.同时,其他没有在ZooKeeper.上成功创建节点的客

户端,都会在节点/master_ election/2013-09-20. 上注册一个子节点变更的Watcher, 用于

监控当前的Master机器是否存活,一旦发现当前的Master挂了,那么其余的客户端将

会重新进行Master选举。

5.分布式锁

在需要获取排他锁时,所有的客户端都会试图通过调用create()接口, 在

/exclusive_ lock 节点下创建临时子节点/exclusive_ lock/lock. 在前面几节中我们也介绍了,

ZooKeeper会保证在所有的客户端中,最终只有一个客户端能够创建成功,那么就可以

认为该客户端获取了锁。同时,所有没有获取到锁的客户端就需要到/exclusive_lock节

点上注册一一个子节点变更的Watcher监听,以便实时监听到lock节点的变更情况。

猜你喜欢

转载自www.cnblogs.com/handwrit2000/p/12688012.html