我想了解ZooKeeper的,它是如何工作以及它的作用。 是否有任何应用程序,它是相当的ZooKeeper?
如果你知道,那么你会如何形容ZooKeeper的一个门外汉?
我曾尝试阿帕奇维基,动物园管理员sourceforge的......但我还是没能涉及到它。
我刚才读通http://zookeeper.sourceforge.net/index.sf.shtml ,所以没有更多的像这样的服务? 它是那样简单只是复制服务器的服务?
我想了解ZooKeeper的,它是如何工作以及它的作用。 是否有任何应用程序,它是相当的ZooKeeper?
如果你知道,那么你会如何形容ZooKeeper的一个门外汉?
我曾尝试阿帕奇维基,动物园管理员sourceforge的......但我还是没能涉及到它。
我刚才读通http://zookeeper.sourceforge.net/index.sf.shtml ,所以没有更多的像这样的服务? 它是那样简单只是复制服务器的服务?
概括地说,动物园管理员帮助您构建分布式应用程序。
您可以对动物园管理员与最终一致性复制的同步服务。 它是健壮的,因为持久性数据的多个节点之间分配(这组节点被称为“合奏”)和一个客户端连接到它们中的任何(即,一个特定的“服务器”)中,如果一个节点故障迁移; 只要严格大多数节点都工作,ZooKeeper的节点的集合是活的。 特别地,主节点动态地合奏内共识选择; 如果主节点发生故障,主服务器的角色迁移到另一个节点。
主是用于写入的权限:以这种方式写入可以保证被保留在-顺序,即,写操作是线性的 。 每一个客户端写入合奏时,大部分节点的持续的信息:这些节点包括客户端的服务器,显然主人。 这意味着每个写入使服务器上最新与主。 这也意味着,但是,你不能有并发写入。
线性写的保证是事实,ZooKeeper的不写主导的工作负载性能良好的原因。 特别是,它不应该被用于大型数据,例如媒体的交换。 只要您的通信需要共享数据,ZooKeeper的帮助你。 当数据可以被同时写入,ZooKeeper的实际得到的方式,因为它规定从作家的角度操作的严格排序,即使不是绝对必要的。 其理想的用途是用于协调,在消息客户端之间进行交换。
这是动物园管理员擅长:读取,但同时,因为它们是由客户端连接到特定的服务器提供服务。 然而,这也为最终一致性的原因是:客户端的“视图”可能是过时的,因为主机更新与有界,但不确定的延迟对应的服务器。
动物园管理员的复制数据库包括znodes,其大致代表文件系统节点实体(把它们想象成目录)的一棵树。 每个Z序节点可以通过一个字节数组,存储数据被富集。 而且,每个Z序节点可以具有其它znodes下它,实际上形成内部目录系统。
有趣的是,Z序节点的名称可以是连续的 ,这意味着在创建Z序节点当客户端提供的名称是唯一的前缀:全名也被由合奏中选择的序列号给出。 这是有用的,例如,用于同步的目的:如果多个客户希望得到的资源的锁,他们每个人都能同时在一个位置创建一个连续的Z序节点:谁得到最低的数字有权锁。
此外,Z序节点可能是短暂的 :这意味着它尽快销毁创建它断开连接客户端。 这主要是有用的,以便知道当一个客户端失败,这可能是相关的,当客户端本身应该采取新的客户端的责任。 以锁的例子,只要具有锁断开客户,其他客户端可以检查他们是否有权锁。
与客户端断开连接的例子,如果我们需要定期轮询znodes的状态可能是有问题的。 幸运的是,动物园管理员提供了一个事件系统,其中手表可以在Z序节点设置。 这些手表可以被设置为触发一个事件,如果Z序节点具体更改或删除的或新的儿童下创建的。 这是结合了znodes顺序和短暂的选项显然是有用的。
动物园管理员使用的典型的例子是分布式存储器计算,其中一些数据被客户端节点之间共享,并且必须被访问/更新在一个非常谨慎的方式来考虑同步。
动物园管理员提供了构建您的同步原语库,同时运行一个分布式服务器的能力,避免了您使用的是集中(经纪人等)信息资源库时有单点故障问题。
动物园管理员是特征的光,这意味着机制,如领导人选举,锁具,障碍等是不存在,但可以在上面所述的ZooKeeper原语写入。 如果C / Java API的是你的目的过于笨重,你应该依靠建立在ZooKeeper的库如笼 ,特别是馆长 。
正式文件分开,这是非常好的,我建议阅读的第14章的Hadoop权威指南 ,其具有〜35页说明的ZooKeeper确实基本上就是,其次是配置服务的一个例子。
我理解一般的ZooKeeper但与术语“仲裁”和“脑裂”的问题,也许我可以和你分享我的发现(我认为自己也是一个外行)。
比方说,我们有5台服务器的集群的ZooKeeper。 一台服务器将成为领导者和其他人将成为追随者。
这些5个服务器组成quorum。 法定人数仅仅意味着“这些服务器可以在谁应该是领导者投票”。
所以投票是基于多数。 多数只表示“超过一半”等十余服务器数量的一半必须同意为特定的服务器成为领导者。
所以这一点,可能会发生所谓的“裂脑”坏事。 裂脑仅仅是这一点,据我的理解:5个服务器集群分成两个部分,或者我们称之为“服务器团队”,用2也许有一部分和其他的3台服务器。 这真是一个糟糕的情况是如果“服务器团队”必须执行一个特定的顺序你会如何决定至极的团队应该是首选? 他们可能已经从客户端接收不同的信息。 因此,它是真正重要的是要知道什么是“服务器团队”仍然是相关的,哪一个可以/应该被忽略。
多数也应该使用奇数服务器的原因。 如果你有4个服务器和脑裂,其中2台服务器独立那么这两个“服务器团队”可以说“嘿,我们要决定谁是领导者!” 但你应该如何决定哪2个服务器,你应该选择? 随着5个服务器很简单:服务器团队,3台服务器拥有多数,被允许选择新的领导人。
即使你只是有3台服务器,其中一个发生故障,其它2仍然占大多数,可以认为,他们中的一个将成为新的领先者。
我知道,一旦你想想看一段时间,并了解它没有那么复杂了条件。 我希望这可以帮助任何人在理解这些条款。
动物园管理员是最好的开源服务器和服务,帮助协调可靠的分布式进程的一个。 动物园管理员是一个CP系统(参见CAP定理),提供一致性和分区容忍性。 在所有节点动物园管理员状态的复制,使得它最终一致性分布式服务。
此外,任何新当选的领导人将更新其追随者缺失的建议或与状态的快照,如果追随者有许多建议失踪。
动物园管理员还提供了一个API,是非常容易使用。 本博客文章, 动物园管理员的Java API的例子 ,有一些例子,如果你正在寻找的例子。
那么,我们用这个? 如果您的分布式服务需要一个集中的,可靠的和一致的配置管理,锁,队列等,你会发现一个的ZooKeeper可靠的选择。
动物园管理员的维护和管理配置信息,命名约定和同步分布式集群环境的集中开源服务器。 动物园管理员帮助分布式系统提供低延迟和高可用性,以降低其管理的复杂性。 动物园管理员最初是一个子项目Hadoop的,但现在是Apache软件基金会的顶级独立的项目。
更多信息