- 分布式系统和应用不仅能提供更强的计算能力,还能为提供更好的容灾性和扩展性。
- Apache ZooKeeper旨在减轻构建健壮的分布式系统的任务。ZooKeeper基于分布式计算的核心概念而设计,主要目的是给开发人员提供一套容易理解和开发的接口,从而简化分布式系统构建的任务。
- ZooKeeper是Google的Chubby项目的开源实现,它曾经作为Hadoop的子项目,在大数据领域得到广泛应用。
- ZooKeeper以Fast Paxos算法为基础,同时为了解决活锁问题,对Fast Paxos算法进行了优化,因此也可以广泛用于大数据之外的其他分布式系统,为大型分布式系统提供可靠的协作处理功能(例如,异构系统中的协作通信问题)。
- Zookeeper从文件系统API得到启发,提供一组简单的API,使得开发人员可以实现通用的协作任务,包括选举主节点、管理组内成员关系、管理元数据等。
- Zookeeper包括一个应用开发库(主要提供Java和C两种语言的API)和一个用Java实现的服务组件。
- ZooKeeper的服务组件运行在一组专用服务器之上,保证了高容错性和可扩展性。
- 整个ZooKeeper服务所管理的就是协同数据(或称元数据)。因此当你决定使用ZooKeeper来设计应用时,最好将应用数据和协同数据独立开。比如,网络邮箱服务的用户对自己邮箱中的内容感兴趣,但是并不关心由哪台服务器来处理特定邮箱的请求。在这个例子中,邮箱内容就是应用数据,而从邮箱到某一台邮箱服务器之间的映射关系就是协同数据(或称元数据)。
1、ZooKeeper的使命
- ZooKeeper的功能有一条主线:它可以在分布式系统中协作多个任务。
- 一个协作任务是指一个包含多个进程的任务。这个任务可以是为了协作或者是为了管理竞争。
- 协作意味着多个进程需要一同(相互配合)处理某些事情,一些进程采取某些行动使得其他进程可以继续工作。
- 比如,在典型的主-从(master-worker)工作模式中,从节点处于空闲状态时会通知主节点可以接受工作,于是主节点就会分配任务给从节点。
- 竞争则不同。它指的是两个进程不能同时处理工作的情况,一个进程必须等待另一个进程。
- 同样在主-从工作模式的例子中,我们想有一个主节点,但是很多进程都想成为主节点,因此我们需要实现互斥排他锁(mutual exclusion) 。实际上,我们可以认为获取主节点身份的过程其实就是获取锁的过程,获得主节点锁的控制权的进程即主节点进程。
- 实际上,在一台计算机上运行的多个进程和跨计算机运行的多个进程从概念上区别并不大。在多线程情况下有用的同步原语在分布式系统中也同样有效。一个重要的区别在于,在典型的不共享环境下不同的计算机之间不共享除了网络之外的其他任何信息。虽然许多消息传递算法可以实现同步原语,但是使用一个提供某种有序共享存储的组件往往更加简便,这正是ZooKeeper所采用的方式。(ZooKeeper提供有序共享存储的组件来实现同步原语。)
1、ZooKeeper的使用实例
- Apache HBase
- HBase是一个通常与Hadoop一起使用的数据存储仓库。在HBase中,ZooKeeper用于选举集群内的主节点,以便跟踪可用的服务器,并保存集群的元数据。
- Apache Kafka
- Kafka是一个基于发布-订阅(pub-sub)模型的消息系统。其中ZooKeeper用于检测崩溃,实现主题(topic)的发现,并保持主题的生产和消费状态。
- Apache Solr
- Solr是一个企业级的搜索平台。Solr的分布式版本命名为SolrCloud,它使用ZooKeeper来存储集群的元数据,并协作更新这些元数据。
- Yahoo! Fetching Service
- Yahoo! Fetching Service是爬虫实现的一部分,通过缓存内容的方式高效地获取网页信息,同时确保满足网页服务器的管理规则(比如robors.txt文件)。该服务采用ZooKeeper实现主节点选举、崩溃检测和元数据存储。
- Facebook Messages
- Facebook推出的这个应用集成了email、短信、Facebook聊天和Facebook收件箱等通信通道。该应用将ZooKeeper作为控制器,用来实现数据分片、故障恢复和服务发现等功能。
- 除了以上介绍的这些应用外,还有很多使用ZooKeeper的例子。根据这些代表应用,我们可以从更抽象的层次上讨论ZooKeeper。当开发人员使用Zookeeper进行开发时,开发人员设计的那些应用往往可以看成一组连接到ZooKeeper服务器端的客户端,它们通过ZooKeeper的客户端API连接到ZooKeeper服务器端进行相应的操作。
- ZooKeeper的客户端API功能强大,其中包括:
- 保障强一致性、有序性和持久性。
- 实现通用的同步原语的能力。
- 在实际分布式系统中,并发往往导致不正确的行为。ZooKeeper提供了一种简单的并发处理机制。
1
# #