ZooKeeper作用详解(5大作用详细图解)

ZooKeeper作用详解(5大作用详细图解)-mikechen

ZooKeeper简介

ZooKeeper作用详解(5大作用详细图解)-mikechen

ZooKeeper 是一个开源的分布式  协调服务框架,它是一个为分布式应用提供一致性服务的软件,是雅虎公司创建,是 Google 的 Chubby 一个开源的实现。

ZooKeeper的使用场景非常丰富,主要会包含5种,下面我详解5种ZooKeeper作用@mikechen

 

命名服务

命名服务是分布式系统中比较常见的一类场景,在分布式应用中,需要一套完备的命名机制,既能产生唯一的标识,又方便人识别和记忆。

通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。

比如典型的应用场景:阿里的Dubbo,使用ZooKeeper来作为其命名服务,维护全局的服务地址列表。

ZooKeeper作用详解(5大作用详细图解)-mikechen

  1. 服务提供者在启动的时候,向ZKZooKeeper的指定节点:/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布;
  2. 服务消费者启动的时候,订阅:/dubbo/${serviceName}/providers目录下的提供者URL地址, 并向/dubbo/${serviceName} /consumers目录下写入自己的URL地址;

这就是Name Service(命名服务),在Dubbo服务注册中心的实现。

 

配置管理

我们做项目时用到的配置比如数据库配置等,我们都是写死在项目里面,如果需要更改,那么也是的修改配置文件然后再投产上去。

那么问题来了,如果做集群的呢,有100台机器、1000台机器的时候,这时候做修改那就太不切实际了,那么就需要用到统一配置管理。

ZooKeeper作用详解(5大作用详细图解)-mikechen

解决方案:

1.现在把这些配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中;

2.然后所有相关应用程序对这个目录节点进行监听;

3.一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中就好。

 

集群管理

在分布式的集群中,经常会由于各种原因,比如:硬件故障,软件故障,网络问题。

还经常会出现:有些服务器节点会进进出出,有新的节点加入进来,也有老的节点退出集群。

这个时候,集群中其他机器需要感知到这种变化,然后根据这种变化做出对应的决策,这就是集群管理。

一句话总结:集群管理无在乎两点:

  1. 是否有机器退出和加入;
  2. 以及选举master;

ZooKeeper作用详解(5大作用详细图解)-mikechen

对于第一点:所有机器约定在父目录GroupMembers下创建临时目录节点,然后监听父目录节点的子节点变化消息,一旦有机器挂掉,该机器与 zookeeper的连接断开,新机器加入 也是类似。

对于第二点:我们稍微改变一下,所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为Master就好。

 

分布式锁

在传统的应用程序中,线程、进程的同步,都可以通过操作系统提供的机制来完成。

比如:比如Synchronized、Lock锁等,这种方式线程锁只在同一JVM中有效果。

但是在分布式系统中,多个进程之间的同步,操作系统层面就无能为力了。

因为:已经跨了操作系统了,这时候就需要像ZooKeeper这样的分布式的协调服务来协助完成同步,这就是分布式锁。

解决方案:

1.每个客户端对某个方法加锁时,在zookeeper上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点;

2.判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个;

3.当释放锁的时候,只需将这个瞬时节点删除即可,同时可以避免服务宕机导致的锁无法释放,而产生的死锁问题。

可以直接使用zookeeper第三方库Curator客户端,这个客户端中封装了一个可重入的锁服务。

ZooKeeper作用详解(5大作用详细图解)-mikechen

 

数据发布与订阅

应用配置集中到节点上,应用启动时主动获取,并在节点上注册一个watcher,每次配置更新都会通知到应用。

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法