从分布式系统的三种典型应用场景来说
集群管理
在多个节点组成的集群中,为了去保证集群的HA的特性。
【补充】在集群中,HA通常指的是高可用性(High Availability)。高可用性是指系统或服务能够在出现故障或中断的情况下保持正常运行的能力。
每个节点都会去冗余一份数据副本。
那么这种情况下,需要保证客户端访问集群中
任意一个节点都是最新的数据。
分布式锁
如何保证跨进程的共享资源的并发安全性,对于分布式系统来说,也是一个比较大的挑战。
而为了达到这个目的,必须要使用跨进程的锁,也就是分布式锁来实现。
Master选举
在多个节点组成集群中,为了降低集群数据同步的一个复杂度,一般会存在Master和Slave两种角色的节点。
Master负责去做事务和非事务性的请求处理。Slave专门负责非事务请求处理,但是在分布系统中如何去确定某个节点是Master还是Slave,也成了一个难度不小的挑战。
基于这三类常见的场景的需求,所以产生了Zookeeper这样一个中间件。它是一个分布式开源的协调组件。简单来说,就是一个类似于裁判员的角色。专门负责组织和协调解决分布系统中的各类问题。
针对上述问题的具体解决方案
比如针对上述问题,Zookeeper都可以用来解决。
集群管理
Zookeeper提供了CP模型来保证集群中的每个节点的数据一致性。
当然Zk本身的集群并不是一个强一致性模型。而是一个顺序一致性模型。
如果我们需要去保证CP特性的话,我们需要调用sync
方法进行同步。
分布式锁
Zookeeper提供了多种不同的节点类型。比如持久化节点、临时节点、有序节点和容器节点等等。
其中对于分布式锁这个场景来说,Zookeeper可以利用有序节点这样一个特性来实现。
除此之外,还可以利用同一级节点的唯一特性来实现分布式锁。
Master选举
Zookeeper可以利用持久化节点来存储和管理其他集群节点的一些信息,从而去进行Master选取的一种机制。
或者还可以利用集中的一些有序节点的特性来实现Master选举。
目前主流的Kafka、Hbase、Hadoop都是通过Zookeeper来实现集群中节点的一个主从选举。
总结
Zookeeper本就是一个经典的分布式数据一致性解决方案。
它主要致力于分布式应用中的一些高性能的、高可用的,并且具有严格访问顺序控制的一些能力模型。实现分布式的协调服务。
它底层的数据一致性算法是基于Paxos算法演进而来ZAB协议实现。