“这是我参与8月更文挑战的第20天,活动详情查看:8月更文挑战”
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
zookeeper的定位
Zookeeper 是apache Zookeeper开源的项目,
Zookeeper的主要作用
对于微服务分布式的协调管理,元数据的管理,Master选举, 实际使用场景下,主要是三类项目
1.zookeeper的适用方向
① 后端以Java为主的电商类管理系统
Zookeeper主要作用于 分布式锁,注册中心 ,这里Zookeeper主要保持CAP理论中的CP(一致性和分区容错性),也就是说Zookeeper保证的是强一致性
②对于大数据存储,数据管理,主从数据切换等系统
这里我们熟知的Kafla,canal 等在使用Zookeeper的元数据管理 ,通过master选举出具体的主从,ZAB原子一致性协议,
③大型互联网公司,自研的分布式组件
一般以zookeeper为原型, zookeeper已经被大规模的工业级适用于主要的分布式系统,做元数据管理,以及注册中心,一般使用于 dubbo+Zookeeper 做一个基本的微服务架构来实现基本的数据调用
小总结:
zookeeper 分布式协调系统, 封装了分布式架构中所有的核心和主流的需求和功能;
分布式锁, 元数据管理, master选举, 分布式协调和通知
zookeeper的基本特性:
在了解zookeeper的基本架构之前,我们来了解一下,zookeeper为什么可以实现分布式系统的协调通知, 元数据管理等;
熟悉zookeeper技术栈的都比较了解,它本身是处于通知协调机制,数据同步方面有很强的处理能力,这也就是为什么很多自研的框架,底层都用zookeeper的原因,好了,废话不多说,我们开干;
背景:
集群环境下,zookeeper集群搭建了3台物理机器;
1.顺序一致性
多个请求,不管是读取数据的,还是说写入数据的,都要按照顺序执行;
zookeeper内部要处理的请求,leader角色会给每一个请求分配一个全局唯一且自增的ZxID,用于请求数据
//这个唯一的全局ID就保证了顺序一致性
这里的zxid,先简单了解,作为一个请求的排列序号,后面会重点讲解的
2.原子性
要么全部机器都成功,要么全部机器都不成功,在同步数据操作时
//保证每次同步操作结果都是一致的
3.高可用性
集群化部署,避免宕机,
如果宕机,也可自己选举leader,重新提供服务
//从恢复模式到消息广播模式
4.数据一致性:
集群情况下,每台机器上的数据都是一致的,但是如果说,在数据同步的时候,宕机了,
其他机器会自动将数据保存到磁盘日志中,等到leader角色提交之后,才会同步到znode节点中,真正实现数据在每台机器都是一致的
//这里说的数据一致性,是强一致性,也是zookeeper的核心的特性,根据分布式系统保持的CAP理论,只能支持CP,
//其中C-consistency ,一致性对于,数据的强一致性,p-为系统的分区容错性 A-高可用性,其eureka就是支持AP特性
5.高性能性
高性能,这里提出一个zookeeper的数据模型,znode节点
//znode节点,基于纯内存的,速度很快,树形结构,类似于Linux的文件系统,每个节点都有数据
存储的数据,已经可以处理的能力也就比较强,后面会仔细讲的,接着看下去吧
小总结:
基于zookeeper的集群架构的特点图: