您的位置:首页 > 其它

【ZooKeeper 基础篇】初识

2016-04-11 09:04 274 查看
     在项目的使用过程中,或多或少的会遇到ZooKeeper的字眼,那么他到底是何方神圣呢?带我们慢慢揭开他神圣的面纱。在计算机科学领域,分布式一致性问题是一个相当重要,且被广泛探索与论证的问题,通常存在于诸如分布式文件系统,缓存系统和数据库等大型分布式存储系统中。当然说的这儿多,也是为了引出ZooKeeper在现在这个时代举足轻重的位置。
     在过去的日子里,大部分还是单一的,每一个CPU都是一个系统,还记得之前我们着手的教育类的学生考试系统,在众多学生考试的那一刻,只能眼睁睁的看着CPU不断升高,只能心里默默期待服务器不要崩溃。
     但慢慢的,仅仅在心里期待已经满足不了需求,在大数据的时代,当用户越来越多的时候,我们只能采取分布式的方式进行操作,此刻其数据行的一致性则是至关重要的。比如我们常用的12306,当只剩一张票的时候,比如A客户从网上看到了这张票,他选择了购买,付款成功;但与此同时,B客户在售票窗口也购买了此票,也付款成功,假如说售票系统没有进行一致性保障,两人同时购票成功,等检票的时候,必然会有以为乘客被告知车票无效,那么此情此景,到底是谁的错?其实对于用户来说,我们的希望很简单,只希望在没票的时候,能够温馨提示没有票了,这样省的到最后发生不必要的麻烦。

为什么选择ZooKeeper?

 ZooKeeper为分布式应用提供了高校且可靠的分布式协调服务,提供了诸如统一命名,配置管理和分布式锁等分布式的基础服务。除了ZooKeeper之外,目前还没有一个成熟稳定且被大规模应用的解决方案。ZooKeeper无论从性能,易用性,还是稳定性来说,都已经达到了一个工业级产品的标准。
 ZooKeeper是开放源码的,ZooKeeper是免费的,这是非常重要的一点。

ZooKeeper从何而来?

     ZooKeeper最早起源于雅虎研究院的一个研究小组。关于ZooKeeper这个项目的名字,在立项初期,考虑到之前内部很多项目都是使用动物的名字来命名的(Pig),所以对此分布式协调的研究也想起一个动物的名字。当时就开玩笑的说,再这样下去,我们则就变成动物园了!此话一出,大家纷纷表示,那就叫动物管理员吧!-因为各个以动物命名的分布式组件放在一起,雅虎的整个分布式系统看上去就像一个大型的动物园了。而ZooKeeper正好要用来进行分布式环境的协调-于是ZooKeeper名字就由此诞生了。

ZooKeeper设计的目标


目标一:简单的数据模型

     ZooKeeper使得分布式程序能够通过一个共享的,树型结构的名字空间来进行相互协调,树型结构其实就是指ZooKeeper服务器内存中的一个数据模型,由一些列的ZNode的数据节点组成。形象化比喻其实就是我们平常使用的文件系统,ZNode就是之间的层级关系。
     与文件系统不同的是,ZK将全量的数据存储在内存中,以此来提高服务吞吐。减少延迟的目的。


目标二:可以构建集群

     组成ZK集群的每台服务器都会在内存中维护当前的服务器状态,并且每台机器之间都保持着通信,只要集群中存在超过一半的机器能够正常工作,那么整个集群就能够正常对外服务。
    ZK的客户端程序和集群中任意一台机器共同创建一个TCP连接,而一旦客户端和某台服务器之间的连接断开,客户端会自动连接到集群中的其他机器。


目标三:顺序访问

     对于来自客户端的每个更新请求,ZK都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序,应用程序可以使用ZK的这个特性来实现更高同步原语。


目标四:高性能

     由于ZK将全量数据存储在内存中,并直接服务与客户端的所有非事务请求,因此它尤其适用于以读操作为主的应用场景,而且性能很好。
以上就是为何会用ZooKeeper的原因以及ZooKeeper设计的目标,下篇我们则着重介绍ZooKeeper的部署与运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: