1.Zookeeper是什么?
Zookeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题
例如电商的订单系统,在单体架构时,需要有定时任务每隔一段时间去检测是未付款的订单是否超时(例如每隔10分钟检测一次),如果超时就关闭该订单;此时只有一个进程去操作数据库;因此可以保证数据安全。
而随着业务量的上升,系统架构会变更为分布式集群,同时有多个web应用部署在各自的服务器上同时为用户提供服务。多台服务的代码都是一样的,当它们同时执行定时任务时,容易出现数据安全问题,造成数据错乱;类似于多线程操作同一个资源时出现的线程安全问题
而Zookeeper就可以帮助我们解决这种数据一致性问题,
- Zookeeper本质上是一个分布式的轻量级文件存储系统,提供了类似文件系统的目录树的方式存储数据,并且可以对树中的节点进行有效管理,类似于Windows系统中文件管理
- Zookeeper提供给客户端监控存储在其内部的数据的功能,也就是说当Zookeeper内部的数据发生变化时,可以通过一定的机制让客户端程序感知到。从而达到基于数据的集群管理,例如:微服务的注册中心和或配置中心、分布式消息队列(sub/pub)、分布式锁、分布式协调等功能
如果看到这里,你感觉还不太明白;没有关系上文的介绍只是让你对Zookeeper有一个基本的认识,你只需要记住三条即可;后文会详细说明
- Zookeeper是来解决分布式集群中应用系统的一致性问题
- Zookeeper本质上是一个分布式的轻量级文件存储系统
- Zookeeper客户端可以监控到Zookeeper内部的数据的变化
2。 Zookeeper的架构
多台Zookeeper节点组成Zookeeper集群,主要有Leader和Follower。
2.1 Leader
- 是Zookeeper集群的核心组件
- 集群中各个服务器的调度者
- 事务(写操作)请求的唯一调度和处理者,保证集群处理事务的顺序性;对于新增、更新、删除等写操作,统一由leader来进行编号并处理;这一过程称为一个事务。
- Leader并不是由用户指定的,而是服务启动之后,各个节点投票选举产生的
2.2 Follower
- 处理非事务(读操作)请求
- 转发事务(写操作)请求给Leader
- 参与集群中Leader的选举
初次之外,针对访问量大的Zookeeper集群,还可以新增观察员角色。
2.3 Observer
- 观察Zookeeper集群的最新状态变化并将这些状态同步过来,可以处理非事务请求,事务请求会转发给Leader进行处理
- 不会参与投票选举,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力,提高集群并发的读能力。
3 Zookeeper的特点
- 全局数据一致,每个节点保存一份相同的数据副本,client无论连接到哪个节点数据都是一致的
- Leader负责进行投票的发起和决议,更新系统状态(后文会详解)
- Follower用于接收客户请求并向客户端返回结果,在选举Leader过程中参与投票
- 只要有半数以上节点存货,Zookeeper集群就能正常服务
- 更新的请求是顺序执行的
- 数据更新具有原子性,一次数据更新要么成功,要么失败会返回给client一个明确的结果
- Leader和Follower是主从架构,一个主节点(leader)多个从节点(follower)