周末出去吃饭,席间聊到了Zookeeper。他们也在用,不过他们定制了自己的keeper。我们的工程里也用到了zookeeper,却从没仔细研究过。所以今天给自己补补课,把应该掌握的东西消化掉。
1. zookeeper是什么东东?有什么作用?为什么用它?
按照zookeeper官方的说法:为管理分布式节点之间的配置、命名、同步规则等提供的一种服务。鉴于不同分布式系统中都会存在此类操作,zookeeper提供了一种统一的管理框架,简单高效地解决分布式系统中的这些必要的操作和情况。
作为分布式系统的开发者来讲,通过zookeeper来进行个节点/服务器之间的交互,可以更专注节点内提供服务的实现,而不用花更多精力去定义节点之间通信/规则等细节。
对于一个具有多个服务器的分布式系统来说,每个服务器作为一个节点,所有的节点都提供相同的服务,将节点挂在zookeeper下,通过简单的接口就可以实现对于所有服务器的管理,这确实是方便又省力的方式。
2.zookeeper结构
zookeeper节点结构类似于Linux系统的文件结构,呈树状分布。每个节点以“/”开头
如图所示:
在asshole中,以每台服务器的ip地址作为一个节点,那么某个服务器节点名即为:/192.168.1.1
3. 节点 Znode
znode用来来描述zookeeper中的数据节点。每个节点维护一个stat结构,包括数据变更, 权限变更的版本信息等。每当znode的数据变更时,版本号都会递增.例如, 每次client在获取数据时,它同时也获得了数据的版本信息.
存储在znode中的数据对read, write都是原子性操作的.read会获取znode中的所有字节, write会整个替换znode中的信息.每个znode都包含一个访问控制列表(ACL)以约束谁可以访问此节点.
4 watches 监听器
zookeeper提供监听器的概念。 client可以在某个znode上设置watch. 当znode有变更时, 相关的watch会被触发或删除.一旦watch触发, client将会收到一个数据包以通知znode的变更.如果在client和zookeeper server之间的连接被中断了, client将会收到一个本地的通知。
5. 简单的接口
create: 在树种某个位置创建一个节点.
通过这些简单的接口,就可以实现对于分布式系统中多个节点的管理,基础部分大致如此,接下来我们会创建一个简单的实例,进入zookeeper代码,看看内部如何实现。
另外,zookeeper的选举算法需要好好研究。