前言
ZooKeeper是什么?这是我长久以来一直没有答案的疑惑。
第一次听说Zookeeper是在接触Spring Cloud的时候。在学习Eureka的过程中资料上也提到了另一种注册中心Zookeeper,但当时的我沉迷于Spring Cloud全家桶无法自拔,自然而然的也就忽视了这个外来者,只是习惯性记住了Zookeeper这个词汇以备不时之需,并理所当然的在心中为之打上了“注册中心”的标签。
第二次听说ZooKeeper是在接触分布式锁的时候。在实现分布式锁的三大方案(数据库,Redis,ZooKeeper)中ZooKeeper赫然身列其一,虽然在权衡三者的利弊后,我最终将学习的重点投向了Redis(没别的理由,就性能好,这里着重推荐Redisson,Redis官方客户端,实现了不仅限于分布式锁的多种功能,好用),但心中疑虑也已萌发,那东西不是分布式注册中心么?很迷茫,可忙于学习的我也只匆匆为之打上“分布式锁”的标签后就投向Redisson的怀抱了。
第三次,也是最后一次听说ZooKeeper是在准备学习大数据时候。在漫长又辽阔的学习路线中我一眼就发现了它——ZooKeeper,静静躺在不起眼的角落,她好像说了什么,又好像什么都没说。那一刻我似浪子回头的负心人,再见苦心等候的良家,两人执手相看泪眼,竟无语凝咽:
“你回来啦?”
“对不起,我回来晚了。”
… … … …
好么,这东西又和大数据有一腿…
既然如此也算是命中注定,我决定就从ZooKeeper入手,一窥大数据的芳容。
一.ZooKeeper是什么?
话已至此,言归正传,我们来说一说ZooKeeper到底是个什么东西。
先引用一段菜鸟教程的说法。
1.ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。
2.ZooKeeper 的架构通过冗余服务实现高可用性。
3.Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
4.一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
看懂了吗!?看懂了吗!?没看懂对不对!?没错!我也没看懂… …
坦白说每次学习新东西的时候这些极度学术化的简介就是阻拦学习者的第一个门槛,玲琅满目一大篇,就是不知道再说些什么东西。它或许是正确的,但绝不是易懂的,这种深度描述理解起来相当有难度,可引用的人就是一批接一批。
我们需要一个简单到极致的描述。
总结:ZooKeeper 是一个树型结构的资源管理系统,其以key-value(键值对)的方式储存数据,并将绝对路径作为键使用。
这便是我对ZooKeeper的简易总结,结合上述文字与图片,大家应该对ZooKeeper也有了一定初步理解,没错ZooKeeper就是这么一个类似标准文件系统的东西。至于那些数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等等功能,实际上都是对该系统的使用方式,这就能解释我为什么会在注册中心、分布式锁、大数据中都见到它的身影。
注:以上都是我对ZooKeeper的个人理解,它是片面的,甚至可以说是错误的,但是基于这个错误的说法,初学者们可以踏上寻求真知的道路,而我也会在学习的过程中不断修改该理解,以求不断接近真理,同时也欢迎大家在评论中对之批判。
对与ZooKeeper的学习我会以《菜鸟教程》为主,但同时也会在参杂一些其他的资料(菜鸟教程讲的还是很粗略的),我会将相关的链接放在文章中,供大家翻阅。