1-ZooKeeper背景和原理

zookeeper来源

zookeeper由雅虎研究院开发,后来捐赠给了Apache软件基金会。在当时,雅虎研究院的一个小组发现,雅虎内部很多大型系统都依赖着一个类似的组件来协调多个服务,但是这个组件却存在单点故障问题,所以研究人员就开始研发一个通用的协调框架,这个就是zookeeper的起源原因。至于为什么要叫zookeeper,是因为之前已经有很多项目都是用动物命名的,这个协调者刚好就起名叫动物园管理员了。

zookeeper工作原理

zookeeper工作原理就是接收所有分布式节点上报的数据,根据既定的算法进行存储和清理,进而达到动态感知和协调各个节点工作的目的。从设计模式的角度看,zookeeper是一个基于观察者模式设计的分布式服务协调框架,负责存储和管理分布式服务关心的数据,在数据发生变化时,通知给已经注册的观察者。可以将zookeeper约等于一个文件管理系统+通知框架的组合。

zookeeper架构

zookeeper在设计之处的目的之一就是要解决单点故障问题,所以zookeeper是支持集群部署的服务。
1、zookeeper集群中,有且只有一个leader,其他都是follower。
2、zookeeper集群中,只要有半数以上节点存活,才能正常工作,如6个节点,挂了3个,集群就瘫痪,5个节点,挂了3个,集群就瘫痪,从这个角度讲,部署6台并没有比部署5台可靠性增加,所以,zookeeper建议集群中节点数量为基数。
3、全局数据一致,每个节点的数据都一样,客户端无论连接哪个节点,读取的数据都是一致的。
4、来自同一个客户端的更新请求,按顺序执行。
5、数据更新保证原子性。
6、实时性,保证在很短时间内,客户端能读到最新数据。

zookeeper数据结构

zookeeper使用的数据模型是树形结构,与Unix文件系统很像。在内存中,zookeeper存储了整棵树的内容,包括所有的数据节点路径、节点数据、ACL信息,zookeeper会定时将这个数据存储到磁盘上。zookeeper的数据节点和分布式服务中实例可以实现一一对应的关系,但是并不是绝对,依赖使用者的开发逻辑。
每一个数据节点默认最大存储1MB的数据。
每个数据节点的路径名是唯一的,不允许重复,可以通过路径名唯一标识一个数据节点。

应用场景

1、统一命名服务
2、统一配置管理
3、统一集群管理
4、服务器节点上下线及时感知

分布式环境下,经常需要对服务进行统一命名,便于识别,命名服务的意思就是给服务起一个逻辑名字,代表一系列IP。这种功能Nginx也能实现。

统一配置管理实现时,可将配置文件写入zookeeper的一个数据节点中,所有客户端监听这个节点变化,就能够做到准实时同步配置的效果了。

分布式环境中,实时掌握每个服务的状态是必须的,可以将每个服务的信息写入zookeeper的一个数据节点上,监听zookeeper的数据节点就能动态感知服务的变化。

 分布式服务中服务的上下线状态也是一个非常重要的关注指标,zookeeper能够实现这种感知。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值