zookeeper为什么会出现?
关于分布式系统先来思考几个问题
- 对于leader/follower或master/slave结构的分布式系统,leader挂了怎么办?
- 分布式系统中,一个应用的多个节点相同的配置如何变更?变更后如何让节点不需要重启就能做出反应?
- 分布式系统中如何动态新增、移除节点?
上面所有这些问题分布式系统都可以自行实现并管理,但既然是大部分系统都需要的功能,那么何不单独把这些功能独立地实现在一个单独的协调服务软件中,实际上zookeeper也正是作为hadoop的一个组件独立出来的。这就是Zookeeper/Consul/etcd等这类软件的作用。
zookeeper代码量
zookeeper是CS架构包含客户端和服务端,下图是使用Sonar扫描Zookeeper源码的总大小情况统计信息:
zk代码量
从上图统计信息可以看出Zookeeper代码行数不到3万行,有效代码行大致只有1万4千行,涉及到的类有382个,源码文件210个,总体来看代码量比较少。
zookeeper功能
zookeeper功能并不多,通常包含下面四类:
统一命名服务
配置管理
集群管理
队列管理
[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port
通过help命令可以看出zk提供的命令也很少,基本都是一些最基本的命令。
小结
通过上面几点可以粗略的看出,zookeeper就是一个代码很少、功能也不多的小组件,而且zookeeper整体代码相比较netty/spring/tomcat这些来说还是比较简单的,非常适合茶余饭后研究一下。
网友评论