zookeeper 的特点和应用场景
zookeeper 是什么
ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hadoop) 、 蜜蜂(Hive) 、 小猪(Pig) 的管理员, Apache Hbase 和 Apache Solr 以及 LinkedIn sensei 等项目中都采用到了 Zookeeper。
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,ZooKeeper 是以 Fast Paxos 算法为基础,实现同步服务,配置维护和命名服务等分布式应用
zookeeper 哪里用到
Zookeeper 是针对大型分布式系统的高可靠的协调系统。由这个定义我们知道 zookeeper 是个协调系统,作用的对象是分布式系统。为什么分布式系统需要一个协调系统了?理由如下:
开发分布式系统是件很困难的事情,其中的困难主要体现在分布式系统的“部分失败”。“部分失败”是指信息在网络的两个节点之间传送时候,如果网络出了故障,发送者无法知道接收者是否收到了这个信息,而且这种故障的原因很复杂,接收者可能在出现网络错误之前已经收到了信息,也可能没有收到,又或接收者的进程死掉了。
Zookeeper 就是解决分布式系统“部分失败”的框架。Zookeeper 不是让分布式系统避免“部分失败”问题,而是让分布式系统当碰到部分失败时候,可以正确的处理此类的问题,让分布式系统能正常的运行。
zookeeper 的实际运用场景:
场景一
有一组服务器向客户端提供某种服务(例如:我前面做的分布式网站的服务端,就是由四台服务器组成的集群,向前端集群提供服务),我们希望客户端每次请求服务端都可以找到服务端集群中某一台服务器,这样服务端就可以向客户端提供客户端所需的服务。
场景二
分布式锁服务。当分布式系统操作数据,例如:读取数据、分析数据、最后修改数据。在分布式系统里这些操作可能会分散到集群里不同的节点上,那么这时候就存在数据操作过程中一致性的问题,如果不一致,我们将会得到一个错误的运算结果,在单一进程的程序里,一致性的问题很好解决,但是到了分布式系统就比较困难,
场景三
配置管理。在分布式系统里,我们会把一个服务应用分别部署到 n 台服务器上,这些服务器的配置文件是相同的(例如:我设计的分布式网站框架里,服务端就有 4 台服务器,4 台服务器上的程序都是一样,配置文件都是一样),
场景四
为分布式系统提供故障修复的功能。集群管理是很困难的,在分布式系统里加入了 zookeeper 服务,能让我们很容易的对集群进行管理。
zookeeper 的特点:
zookeeper 是一个精简的文件系统。这点它和 hadoop 有点像,但是 zookeeper 这个文件系统是管理小文件的,而 hadoop 是管理超大文件的。
zookeeper 提供了丰富的“构件”,这些构件可以实现很多协调数据结构和协议的操作。例如:分布式队列、分布式锁以及一组同级节点的“领导者选举”算法。
zookeeper 是高可用的,它本身的稳定性是相当之好,分布式集群完全可以依赖 zookeeper 集群的管理,利用 zookeeper 避免分布式系统的单点故障的问题。
zookeeper 采用了松耦合的交互模式。这点在 zookeeper 提供分布式锁上表现最为明显,zookeeper 可以被用作一个约会机制,让参入的进程不在了解其他进程的(或网络)的情况下能够彼此发现并进行交互,参入的各方甚至不必同时存在,只要在 zookeeper 留下一条消息,在该进程结束后,另外一个进程还可以读取这条信息,从而解耦了各个节点之间的关系。
zookeeper 为集群提供了一个共享存储库,集群可以从这里集中读写共享的信息,避免了每个节点的共享操作编程,减轻了分布式系统的开发难度。
zookeeper 的设计采用的是观察者的设计模式,zookeeper 主要是负责存储和管理大家关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应,从而实现集群中类似 Master/Slave 管理模式
版权声明: 本文为 InfoQ 作者【浅羽技术】的原创文章。
原文链接:【http://xie.infoq.cn/article/a589120635ef842bb0a20c656】。文章转载请联系作者。
评论