白手起家之注册中心 zookeeper

249 阅读4分钟

这是我参与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的集群架构的特点图: