百度百科上解释,ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。
作用是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3src ecipes。
Zookeeper的基础是Fast Paxos算法,该算法可以解决Paxos“活锁”的问题。
ZooKeeper的基本运转流程:
1、选举Leader。
2、同步数据。
3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。
4、Leader要具有最高的执行ID,类似root权限。
5、集群中大多数的机器得到响应并接受选出的Leader。
以上内容不难理解。
Zookeeper能做什么事情呢,简单的例子:假设我们有20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以提供搜索服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。
这一段意思,简便来说,就是把zookeeper比作一个监控者,管理着下方的员工做事,每个员工同时只能做一件事,但可以做不同的事,zookeeper需要随时监控员工,发现哪个员工事情做完了,就给他安排新的工作。
这句话逻辑清晰看似十分简便,但若想达到真正的高效,不让任务分错人,不让员工闲着,其中牵扯出的算法就极为复杂。
(以上内容参考https://baike.baidu.com/item/zookeeper/4836397?fr=aladdin)。
(以上内容参考https://baike.baidu.com/item/zookeeper/4836397?fr=aladdin)。