Zookeeper是什么?
分布式协调服务,为分布式应用提供一致性服务。
应用场景
数据发布/订阅
发布者把数据发布到zk一个或一系列节点,供订阅者订阅到达动态获得数据的目的。
数据的发布/订阅有两种模式:推和拉。推就是服务端主动把数据更新发给所有订阅者,拉就是客户端主
动定时的发请求获取最新数据。
Zk将两者结合,客户端订阅自己需要的数据节点,如果对应节点发生数据变更,服务端给客户端发送
Watcher事件通知,客户端收到消息后主动获取最新数据。
集群管理
监控节点的存活状态
当前集群中的机器数量
集群中机器的运行时状态
集群中节点的上下线操作
集群节点的统一配置,该项功能一般是结合数据发布/订阅完成的
Master选举
Master选举也是对集群的一种管理,集群有多种模式,如:对等模式,就是每台机器都提供服务会通过
nginx之类的工具做负载,还有一种是主备模式的,主节点向外提供服务,备节点实时跟新数据,一旦主节点
挂掉了备节点开始新一轮选主。Master选举说的就是这个选举的过程,使用Zookeeper可以协助完成这个过程。
分布式锁
控制分布式系统之间同步访问共享资源的一种方式,Zookeeper提供两种锁:独占锁、共享锁。独占锁即
一次只能有一个线程使用资源,共享锁是读锁共享,读写互斥,即可以有多线线程同时读同一个资源,如果要
使用写锁也只能有一个线程使用。Zookeeper可以对分布式锁进行控制。
命名服务
命名服务也是分布式系统中比较常见的一类场景。在分布式系统中,通过使用命名服务,客户端应用能够
根据指定名字来获取资源或服务的地址,提供者等信息。被命名的实体通常可以是集群中的机器,提供的服务
地址,远程对象等等——这些我们都可以统称他们为名字(Name)。其中较为常见的就是一些分布式服务框
架中的服务地址列表。通过调用ZK提供的创建节点的API,能够很容易创建一个全局唯一的path,这个path就可
以作为一个名称。
比较常见的应用是Dubbo在zk上注册服务时就是使用zk的统一命名维护全局的服务地址列表。服务提供者
在启动的时候,向ZK上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就
完成了服务的发布。服务消费者启动的时候,首先订阅服务提供者指定目录下已注册的URL地址,并向消费者
指定的节点/dubbo/{serviceName} /consumers目录下写入自己的URL地址。
小结
以上只是Zookeeper功能中比较常用的几个,后面的博客详细的介绍Zookeeper的一些基础概念和以上功能的实现。