0


ZooKeeper知识点

0、定义

ZooKeeper: A Distributed Coordination Service for Distributed Applications
面向分布式应用的分布式协调服务,主要功能:统一配置管理、统一命名服务、分布式锁、集群管理

1.ZooKeeper 是如何实现数据一致性

ZooKeeper 是通过 Zab 协议来保证分布式事务的最终一致性。Zab(ZooKeeper Atomic Broadcast,ZooKeeper 原子广播协议)支持崩溃恢复,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间数据一致性。
在这里插入图片描述

在 ZooKeeper 集群中,所有客户端的请求都是写入到 Leader 进程中的,然后,由 Leader 同步到其他节点,称为 Follower。在集群数据同步的过程中,如果出现 Follower 节点崩溃或者 Leader 进程崩溃时,都会通过 Zab 协议来保证数据一致性。

Zab 协议的具体实现可以分为以下两部分:

(1)消息广播阶段

Leader 节点接受事务提交,并且将新的 Proposal 请求广播给 Follower 节点,收集各个节点的反馈,决定是否进行 Commit,在这个过程中,也会使用上一课时提到的 Quorum 选举机制。

(2)崩溃恢复阶段

如果在同步过程中出现 Leader 节点宕机,会进入崩溃恢复阶段,重新进行 Leader 选举,崩溃恢复阶段还包含数据同步操作,同步集群中最新的数据,保持集群的数据一致性

崩溃恢复完成选举以后,接下来的工作就是数据同步,在选举过程中,通过投票已经确认 Leader 服务器是最大Zxid 的节点,同步阶段就是利用 Leader 前一阶段获得的最新Proposal历史,同步集群中所有的副本。

2.Zookeeper 特点

https://baijiahao.baidu.com/s?id=1706671245428350724&wfr=spider&for=pc

(1)Zookeeper 是一个分布式协调服务,是为了解决多个节点状态不一致的问题,充当中间机构来调停。如果出现了不一致,则把这个不一致的情况写入到 Zookeeper 中,Zookeeper 会返回响应,响应成功,则表示帮你达成了一致。比如,A、B、C 节点在集群启动时,需要推举出一个主节点,这个时候,A、B、C 只要同时往 Zookeeper 上注册临时节点,谁先注册成功,谁就是主节点。

(2)Zookeeper 虽然是一个集群,但是数据并不是分散存储在各个节点上的,而是每个节点都保存了集群所有的数据。
其中一个节点作为主节点,提供分布式事务的写服务,其他节点和这个节点同步数据,保持和主节点状态一致。

(3)Zookeeper 所有节点的数据状态通过 Zab 协议保持一致。当集群中没有 Leader 节点时,内部会执行选举,选举结束,Follower 和 Leader 执行状态同步;当有 Leader 节点时,Leader 通过 ZAB 协议主导分布式事务的执行,并且所有的事务都是串行执行的。

(4)Zookeeper 的节点个数是不能线性扩展的,节点越多,同步数据的压力越大,执行分布式事务性能越差。推荐3、5、7 这样的数目。

3.Zookeeper 角色的理解

Zookeeper 并没有沿用 Master/Slave 概念,而是引入了 Leader,Follower,Observer 三种角色。
通过 Leader 选举算法来选定一台服务器充当 Leader 节点,Leader 服务器为客户端提供读、写服务。
Follower 节点可以参加选举,也可以接受客户端的读请求,但是接受到客户端的写请求时,会转发到 Leader 服务器去处理。
Observer 角色只能提供读服务,不能选举和被选举,所以它存在的意义是在不影响写性能的前提下,提升集群的读性能。

Leader一个ZooKeeper集群同一时间只会有一个实际工作的Leader,它会发起并维护与各Follwer及Observer间的心跳。所有的写操作必须要通过Leader完成再由Leader将写操作广播给其它服务器。

4.Zab节点3种状态

following: 服从leader的命令
leading:负责协调事务
election/looking:选举转态

5.事务编号Zxid

Zxid事务编号,64位
低32位,事务数量,处理一个事务请求,加一
高32位,每代leader编号,选举一次,加一(选举时,从日志中取得上一代leader的高32位leader编号)

6.Sequential Consistency顺序一致性

Sequential Consistency规定了两点:
每个processor按照程序指定的顺序(program order)执行操作。(单个processor视角)
Processor并行交错的情况下,程序执行顺序可以任意,但所有processor看到的执行顺序必须一致,即所谓的顺序一致性。(多processor构成的程序全局视角)

操作可以交错,但是对于同一个操作,多个节点必须顺序执行操作里面的所有动作

7.Linearizable Consistency线性一致性

Linearizability则关心时间顺序,它在Sequential Consistency模型基础上,为每个操作增加了时间戳,并定义:如果操作1的时间戳小于(意即早于)操作2的时间戳,那么操作1应该在操作2之前完成。

8.Causal Consistency因果一致性

Causal Consistency[4]要求对于有因果关系(causally related)的若干操作,在所有节点上看到的执行顺序都必须一致,而没有因果关系的并行操作,在不同节点上可以看到不同的执行顺序。


本文转载自: https://blog.csdn.net/zhan107876/article/details/126450576
版权归原作者 cy谭 所有, 如有侵权,请联系我们删除。

“ZooKeeper知识点”的评论:

还没有评论