【大数据】分布式协调系统 Zookeeper

本文详细介绍了Zookeeper,一个用于分布式应用协调服务的开源框架,包括其分布式架构、特点(如CP模型、数据一致性等)、数据结构(类似Unix文件系统)以及在统一命名服务、配置管理、集群管理和服务器动态上下线等方面的实际应用场景。
摘要由CSDN通过智能技术生成

Zookeeper 是 Apache 开源的一个顶级项目,目的是为分布式应用提供协调服务,当然 Zookeeper 本身也是分布式的。

而从设计模式的角度来理解:Zookeeper 是一个基于观察者模式设计的 分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接收观察者的注册。一旦数据的状态发生变化,Zookeeper 就会通知那些已经注册的观察者,以便它们能够及时做出反应。

在这里插入图片描述
所以 Zookeeper 可以看作是一个 文件系统 + 通知机制。文件系统指的是 Zookeeper 可以存储数据,尽管数据量比较少,但还是像文件一样可以存储的;而通知机制指的是当数据有变化,会立即通知观察者。

1.Zookeeper 的特点

那么 Zookeeper 都有哪些特点呢?

  • 1️⃣ Zookeeper 本身也是分布式的,可以组成集群。Zookeeper 集群由一个领导者节点(Leader)和多个追随者节点(Follower)组成,Leader 负责接收写请求,Follower 负责和 Leader 之间进行数据同步并接收读请求。
  • 2️⃣ 集群中只要有半数以上的节点存活,Zookeeper 集群就能正常服务,所以集群内部的节点数量最好是奇数个。
  • 3️⃣ Zookeeper 是 CP 模型,在一致性(Consistency)和可用性(Availability)之间选择了一致性,因此集群里面的数据是全局一致的,每个 Server 都保存了一份相同的数据副本。客户端无论连接到哪一个 Server,数据都是一致的。这也意味着 Leader 只有将新数据同步给所有的 Follower 之后,整个 Zookeeper 集群才能对外提供服务,否则客户端就有可能读到旧数据。因为根据 CAP 理论,在保证 P(Partition tolerance)的前提下,C 和 A 是不可兼顾的,至于选择哪一个则看是否对数据有强一致性的要求。而 Zookeeper 存储的数据一般都不大,所以选择了一致性。
  • 4️⃣ 写请求顺序进行,来自同一个 Client 的写请求按其发送顺序依次执行。
  • 5️⃣ 实时性,Client 可以很快地读到最新数据。虽然 Leader 和 Follower 之间的数据同步需要一定时间,但 Zookeeper 保存的数据量很小,因此同步速度非常快。

2.Zookeeper 的数据结构

Zookeeper 数据结构和 UNIX 文件系统很类似,整体上可以看做是一棵树,节点被称为 ZNode。每个 ZNode 默认能够存储 1MB 的数据,因为 Zookeeper 是 CP 模型,所以它不适合存储大量的数据,只适合存储一些简单的配置信息。此外,每个节点都可以通过路径进行唯一标识,我们通过 ZNode 的路径即可获取某个 ZNode 存储的数据。

在这里插入图片描述
整体还是很好理解的,但是要明白,ZNode 能够存储的数据量比较少,不应该超过 1MB。

3.Zookeeper 的应用场景

Zookeeper 在生产上都能解决哪些问题呢?其实能解决的问题还蛮多的,比如 统一命名服务统一配置管理统一集群管理服务器节点动态上下线软负载均衡 等等。下面一个一个介绍。

3.1 统一命名服务

在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。例如:IP 不容易记住,但是域名容易记住。
在这里插入图片描述
当访问域名的时候,会自动转发到某个服务器当中。

3.2 统一配置管理

分布式环境下,配置文件同步非常常见。一个集群中,所有节点的配置信息是一致的,对配置文件修改之后,希望能够快速同步到各个节点上。比如 Kafka 集群,当然 Kafka 自带 Zookeeper,但是我们一般不用自带的。
在这里插入图片描述
配置管理可交由 Zookeeper 实现,可将配置信息写入 Zookeeper 的一个 ZNode,各个客户端监听这个 ZNode。一旦 ZNode 中的数据被修改,Zookeeper 将通知各个客户端,这样一来每个客户端读到的配置信息都是一致的。

3.3 统一集群管理

分布式环境中,实时掌握每个节点的状态是必要的,这样便可根据节点的实时状态做出一些调整。

而 Zookeeper 可以实现实时监控节点的变化,通过将节点信息写入 Zookeeper 的一个 ZNode,监听这个 ZNode 便可获取它的实时状态变化。

此外每一个客户端的状态也可以写到节点上面,只要状态发生变化,就会更新节点上客户端的数据。只要数据发生更新,会立刻同步到其他的节点上,从而通知其他的客户端。

3.4 服务器动态上下线

客户端能实时洞察到服务器上线的情况,还是最开始说的,如果某台服务器宕机,比如 Server3。那么客户端就会被 Zookeeper 通知,之后就不会再请求 Server3 了。

当然这只是宕机的情况,如果 Server3 修好了重新上线,那么 Zookeeper 也要通知客户端。客户端会再次重新注册监听,之后仍然可以访问 Server3。

3.5 软负载均衡

在 Zookeeper 中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求。
在这里插入图片描述
当新的客户端来访问的时候,会自动分发到访问次数比较少的服务器上。也就是类似 Nginx 负载均衡的效果,让每一台服务器的压力都不会那么大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G皮T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值