Apache Zookeeper - 分布式服务框架

参考资料

1、官方网站:http://zookeeper.apache.org/

Zookeeper 介绍

Zookeeper 是一个典型的分布式数据一致性的解决方案。设计目的是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。分布式应用程序可以基于它实现诸如:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、master 选举、分布式锁、分布式队列等功能。

Zookeeper 使用场景

维护配置信息

在分布式服务中,不同的服务器提供不同的服务,但不同的服务中可能会有相同的配置文件,当配置文件中的某些内容需要修改的时候如果没有 zookeeper 的存在那么将需要手动登录不同的服务器进行逐个的修改且修改完以后还需要重启服务来使配置生效,这样不仅麻烦而且容易出错。如果使用 zookeeper 来维护配置信息,只需要把各个服务器相同的配置内容整理出来并且放在 zookeeper 的节点中然后让服务器来监听这个节点,当节点的内容发生改变时服务器自动更新自己所需要的配置信息。

命名服务

zookeeper的命名服务功能主要是根据指定名字来获取资源或服务的地址,提供者等信息,利用其 znode 的特点和 watcher 机制,将其作为动态注册和获取服务信息的配置中心,统一管理服务名称和其对应的服务器列表信息,我们能够近乎实时地感知到后端服务器的状态(上线、下线、宕机)。

分布式锁

分布式锁在整个系统提供一个全局、唯一的锁,在分布式系统中每个系统在进行相关操作的时候需要获取到该锁,才能执行相应操作。利用 Zookeeper 可以创建临时带序号节点的特性来实现一个分布式锁。当有一个线程访问服务器的时候会在 zookeeper 中创建一个具有顺序的临时节点,这时候线程会判断自己的序号是不是最小的,如果是最小的那么它就可以获得锁,从而对数据进行处理,当该线程与服务器结束会话时这个创建的临时节点也会被删除。如果不是最小的则会监听它是上一个节点,当这个节点被删除时再获取锁。注意这里每个节点都是只监听它的上一个节点即可,而不是监听序号最小的节点。因为临时节点都是带序号的,而且序号不会回退,所以只需要 监听比其小1的节点。只要比它小1的节点被清除,则它就可以拿到资源去操作。

集群管理

在多台服务器组成的集群中,需要监控每台服务器的状态,一旦某台服务器挂掉了或有新的机器加入集群,集群都要感知到,从而采取相应的措施。一个主动的集群可以自动感知节点的死亡和新节点的加入,它才对更高效的提供服务。通常的做法是有台主机器定时的去获取其他机器的心跳,或其他机器定时主动汇报自己的状态,这种方式存在一定的延时,并且主机器成为单点,一旦挂掉便影响整个集群。使用 Zookeeper 可以方便的实现集群管理的功能。思路如下,每个服务器启动时都向 zk 服务器提出创建临时节点的请求,并且使用 getChildren 设置父节点的观察,当该服务器挂掉之后,它创建的临时节点也被 Zookeeper 服务器删除,然后会触发监视器,其他服务器便得到通知。创建新节点也是同理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章