zookeeper是我们的业务系统架构中常见的一个分布式协调框架中间件(中间件是部署在服务模块之间的组件,目的是实现服务之间的解耦),它的作用是为分布式系统提供一致性服务(下文会详细解释)。

zookeeper的特点:

zookeeper的部署方式为集群部署(分布式),通常集群的节点数量为奇数个(这和它的选举及高可用性有关)。既然它能作为中介,给其他服务模块提供公共功能,那么它应当是比较可靠的,特点如下:

1.高可用性:
集群只要有一半以上的节点存活,就能正常提供服务

2.全局数据一致性:
这对于集群来说至关重要,它通过zab协议确保了集群中的每个节点都保留了一份相同的数据

3.数据更新原子性:
确保数据要么更新成功,要么失败,不存在其他状态

4.实时性:
在一定时间范围内,客户端能够读到最新数据(zookeeper可以确保数据最终一致,但需要一定时间在节点间同步数据)

image.png

zookeeper的作用

为什么要使用zookeeper? -----为分布式系统提供一致性服务

什么是分布式系统的一致性?
分布式系统指部署在多台服务器上,通过协作来实现某种功能的系统。所谓的一致性就是共识和相同的状态,例如一个订单系统部署了5个实例节点,组成了一个集群提供服务,如何保障集群内的每个可用节点的服务配置一致,时间一致,数据一致?集群内部要选举出leader,怎么保证能够选举出leader,并且其他节点都认可这个leader?当有节点故障的时候,谁来更新集群的可用节点信息? 这就是分布式系统要解决的部分一致性问题。

再看看zookeeper集群自身有哪些功能:

1.存储数据
zookeeper可以存储数据,它的数据结构是层次化的多叉树,在节点上可以存储数据,节点容量上限为1M。并且存储的数据可靠不易丢失(zookeeper本身是高可用且能保证数据一致性的),读取速度快

2.监听机制
zookeeper可以监听节点数据的事件,包括节点数据的创建/删除/修改以及子节点的变化。当这些事件发生时,zookeeper可以主动通知客户端。

基于zookeeper的这两个功能,我们来看看zookeeper的作用。

数据发布和订阅

我们可以将少量数据存放在zookeeper上,其他服务可以从zookeeper集群读取数据。利用监听机制,让其他服务在zookeeper上注册一个监听器,当数据发生变化时主动通知其他服务

统一配置管理

可以作为一个公用的配置中心,存储各个服务模块所需的配置数据

集群选举

我们的业务中包含了各种各样的集群,这些集群通常由多个节点组成,需要选举出leader或者master角色。以前的选举机制由各个集群自行维护,现在可以由zookeeper实现。各个节点只需向zookeeper注册临时序列节点,谁先注册成功谁就成为集群leader。

负载均衡

image.png
如图所示,将所有可用的服务节点信息注册在zookeeper上,用户可以读取所有的可用节点信息,并根据自己的负载均衡策略选择节点来访问

服务发现

服务模块可以将自己的对外服务信息(如服务名称,连接地址,端口等)注册在zookeeper上,其他服务便可以获取信息并调用该服务,起到一个类似euraka这样的服务注册中心的作用
image.png

分布式锁

参考如下文章理解 https://zhuanlan.zhihu.com/p/639756647


千里之行
1 声望0 粉丝

SRE体系践行者