一、zookeeper的定义
打开zookeeper官网,赫然一行大字,写着:“Apache ZooKeeper致力于开发和维护实现高度可靠的分布式协调的开源服务器”。什么意思呢?就是Apache ZooKeeper的目标是开发和维护开源服务器,这服务器是干什么的呢?是做分布式协调的。这服务器的特点是什么呢?是高度可靠的。关键就是高度可靠,不用去验证,也不用怀疑zookeeper的高度可靠性,搜索应用界的大佬solr和大数据服务界的大佬Hadoop就是使用zookeeper提供集群管理。
二、什么是zookeeper
ZooKeeper诞生于Yahoo,后转入Apache孵化,最终孵化成Apache的顶级项目,是Hadoop和Hbase的重要组件。ZooKeeper是一种集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。所有这些类型的服务都以分布式应用程序的某种形式使用。由于实现上述需求都需要做很多工作来修复不可避免的错误和竞争条件。因此,这些服务的实现变得非常困难,即使这些服务顺利完成,管理和运维的成本也非常高,所以zookeeper以救世主的身份出现,解决上述技术难题,降低了分布式应用程序的开发难度和工作量,让程序员专注于分布式架构的设计。
三、zookeeper的三中部署方式
1、独立部署模式,即部署在单台机器上的一个zookeeper服务,适用于学习、了解zookeeper基础功能。
2、伪分布模式,即部署在一台机器上的多个(原则上大于3个)zookeeper服务,虚拟分布式的zookeeper集群,适用于学习、开发和测试,不适用生产环境。
3、全分布式模式(复制模式),即在多台机器上部署zookeeper服务,真正的集群模式,适合于学习、开发和测试,可投入到生产环境中使用。
三、在什么场景下使用zookeeper
1、集群管理
①、节点监控:集群环境下,有很多节点,节点可能因为网络故障连接不上,可能因为机器故障无法工作,要求保证集群中的节点都能正常工作,就需要把异常的节点从集群中屏蔽掉,这时使用zookeeper的短暂节点和watcher机制,可以很好的实现集群的管理。
②、领导者选举:集群是多个节点(可把节点理解为机器)协同工作,这是需要一个把控全局的领导者节点来接收外部请求、任务派发等,那么,领导者节点如何产生?领导者节点出现故障怎么处理?领导者选举是zookeeper最优秀的功能之一,如果当前领导者节点出现故障,zookeeper可在很短的时间内选举出新的领导者来接替故障领导者的工作。
2、配置管理
实际应用中,配置使应用变得灵活,但是在分布式应用下,需要到每一台机上面修改配置,维护配置则复杂很多,基于这种场景,把配置放在zookeeper的znode中,分布式应用的机器到zookeeper的znode中读取配置应用到系统中即可。此外,利用zookeeper的watcher机制,如果配置(znode)发生改变,zookeeper通知各个机器配置信息已经被修改,各机器通过刷新来获取到最新的配置。
zookeeper还可以应用到很多场景,比如分布式锁、数据的发布和订阅、队列管理等等,此处就不一一介绍了。
四、zookeeper的性能
zookeeper旨在提供高性能,但是zookeeper的性能如何呢?zookeeper官网提供了一份性能测试结果图,通过分析测试结果图,可以大概了解zookeeper的性能,如下图所示:
从测试结果图得知测试分为5组,分别为3台服务器一组(暂且称为A组)、5台服务器一组(暂且称为B组)、7台服务器一组(暂且称为C组)、9台服务器一组(暂且称为D组)、13台服务器一组(暂且称为E组),观察到几个现象:
①、读取请求的百分比在60%之前,吞吐率为A>B>C>D>E。
②、读取请求百分比到达80%偏左侧一点,大概75%时,吞吐率开始发生变化,A组的吞吐率开始被其他组超越。
③、读取请求百分比到达约95%时,吞吐率发生逆转,约为E>D>C>B>A,读取请求百分比趋近于瓶颈时,zookeeper集群约庞大,满足的吞吐率约高。
④、zookeeper集群的吞吐率起点大约在10000左右,性能下限很高。
结论:
①、zookeeper小规模集群也能提供较高的吞吐率,如果对吞吐率有较高要求时,可以通过新增zookeepe服务节点来满足需求。
②、随着zookeeper服务节点的增加,zookeeper的性能呈指数上升。
这篇博文是zookeeper系列的第一篇,对zookeeper做一个简单的介绍,关于zookeeper的更多内容和实际操作,会在后续博文中详述。
由于能力有限,如有不足和错误之处,还望不吝指出!