[高级]Zookeeper介绍(二)——Zookeeper概述

Zookeeper介绍(一)——背景知识中介绍过,随着网站的不断发展,逐渐从集中式演变到分布式。可是,在分布式系统中存在着不少数据一致性的问题。那么,有没有什么系统或者组件可以帮助咱们解决这些一致性问题呢?本文将简单介绍一个分布式服务协调组件——Zookeeper。算法

什么是Zookeeper

Zookeeper是一个开放源码的分布式服务协调组件,是Google Chubby的开源实现。是一个高性能的分布式数据一致性解决方案。他将那些复杂的、容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给用户使用。数据库

Zookeeper提供了哪些特性

他解决的分布式数据一致性问题,提供了顺序一致性、原子性、单一视图、可靠性、实时性等。服务器

顺序一致性:客户端的更新顺序与他们被发送的顺序相一致;网络

原子性:更新操做要么所有成功,要么所有失败;分布式

单一试图:不管客户端链接到哪个服务器,均可以看到相同的ZooKeeper视图;性能

可靠性:一旦一个更新操做被应用,那么在客户端再次更新它以前,其值将不会被改变;网站

实时性:在特定的一段时间内,系统的任何变动都将被客户端检测到;spa

Zookeeper工做过程

上图中,一个Zookeeper集群中有五台机器,在整个集群刚刚启动的时候,会进行Leader选举,当Leader肯定以后,其余机器自动成为Follower,并和Leader创建长链接,用于数据同步和请求转发等。当有客户端机器的写请求落到follower机器上的时候,follower机器会把请求转发给Leader,由Leader处理该请求,好比数据的写操做,在请求处理完以后再把数据同步给全部的follower。设计

CAP理论

在分布式领域,有一个著名的理论——CAP理论。CAP理论的核心观点是任何软件系统都没法同时知足一致性、可用性以及分区容错性。接口

值得一提的是,做为一个分布式系统,分区容错性是一个必需要考虑的关键点。一个分布式系统一旦丧失了分区容错性,也就表示放弃了扩展性。由于在分布式系统中,网络故障是常常出现的,一旦出如今这种问题就会致使整个系统不可用是绝对不能容忍的。因此,大部分分布式系统都会在保证分区容错性的前提下在一致性和可用性之间作权衡。

在CAP这三个关键的性质中,同时知足CA两点的是著名的数据库中ACID、同时知足AP两点的是注明的BASE理论。

Zookeeper和CAP的关系

上面介绍过,没有任何一个分布式系统能够同时知足CAP,Zookeeper通常以集群的形式对外提供服务,那么Zookeeper在CAP中是如何取舍的呢?

ZooKeeper是个CP(一致性+分区容错性)的,即任什么时候刻对ZooKeeper的访问请求能获得一致的数据结果,同时系统对网络分割具有容错性;可是它不能保证每次服务请求的可用性(注:也就是在极端环境下,ZooKeeper可能会丢弃一些请求,消费者程序须要从新请求才能得到结果)。可是别忘了,ZooKeeper是分布式协调服务,它的 职责是保证数据(注:配置数据,状态数据)在其管辖下的全部服务之间保持同步、一致;因此就不难理解为何ZooKeeper被设计成CP而不是AP特性的了,若是是AP的,那么将会带来恐怖的后果(注:ZooKeeper就像交叉路口的信号灯同样,你能想象在交通要道忽然信号灯失灵的状况吗?)。并且, 做为ZooKeeper的核心实现算法 Zab,就是解决了分布式系统下数据如何在多个服务之间保持同步问题的。

若是 ZooKeeper下全部节点都断开了,或者集群中出现了网络分割的故障(注:因为交换机故障致使交换机底下的子网间不能互访);那么ZooKeeper 会将它们都从本身管理范围中剔除出去,外界就不能访问到这些节点了,即使这些节点自己是“健康”的,能够正常提供服务的;因此致使到达这些节点的服务请求 被丢失了。

相关文章
相关标签/搜索