ZAB协议(算法)
一、ZAB(ZooKeeper Atomic Broadcast)介绍
ZAB 即 ZooKeeper Atomic Broadcast,是 ZooKeeper 实现分布式数据一致性的核心算法。它是一种原子广播协议,用于确保在分布式环境中,多个 ZooKeeper 服务器之间的数据一致性。
二、ZAB 的作用
-
保证数据一致性
-
在分布式系统中,由于节点故障、网络延迟等原因,数据可能会出现不一致的情况。ZAB 通过一系列的机制,确保所有的 ZooKeeper 服务器上的数据都是一致的。
-
例如,当一个客户端向 ZooKeeper 集群写入数据时,ZAB 会确保这个数据被所有的服务器正确地复制和存储,从而保证数据的一致性。
-
-
实现高可用性
-
ZAB 使得 ZooKeeper 具有高可用性。如果一个 ZooKeeper 服务器出现故障,其他服务器可以继续提供服务,不会影响整个系统的正常运行。
-
例如,当一个领导者服务器出现故障时,ZAB 会自动选举出一个新的领导者,继续处理客户端的请求,从而保证系统的高可用性。
-
-
提供顺序一致性
-
ZAB 保证了 ZooKeeper 中的事务是按照顺序执行的。这意味着,对于一个给定的客户端,它看到的事务执行顺序是一致的。
-
例如,当一个客户端先后执行了两个事务,ZAB 会确保这两个事务在所有的服务器上都是按照相同的顺序执行的,从而保证顺序一致性。
-
三、ZAB 的适用场景
-
分布式协调服务
-
ZooKeeper 作为一种分布式协调服务,广泛应用于分布式系统中。ZAB 是 ZooKeeper 实现分布式协调的核心算法,它可以用于实现分布式锁、分布式队列、配置管理等功能。
-
例如,在一个分布式系统中,可以使用 ZooKeeper 实现分布式锁。多个客户端可以通过 ZooKeeper 的节点来竞争锁资源,ZAB 会确保锁的状态在所有的客户端上都是一致的,从而保证分布式锁的正确性。
-
-
服务发现
-
在微服务架构中,服务发现是一个重要的问题。ZooKeeper 可以作为服务注册中心,使用 ZAB 算法来保证服务注册信息的一致性。
-
例如,当一个服务上线时,它可以将自己的信息注册到 ZooKeeper 中。其他服务可以通过 ZooKeeper 获取到这个服务的信息,从而实现服务发现。ZAB 会确保服务注册信息在所有的 ZooKeeper 服务器上都是一致的,从而保证服务发现的正确性。
-
-
分布式配置管理
-
在分布式系统中,配置管理是一个复杂的问题。ZooKeeper 可以作为分布式配置中心,使用 ZAB 算法来保证配置信息的一致性。
-
例如,当一个配置项发生变化时,只需要在 ZooKeeper 中修改这个配置项,ZAB 会确保这个配置项在所有的服务器上都是一致的,从而保证分布式配置管理的正确性。
-
总之,ZAB 是 ZooKeeper 实现分布式数据一致性的核心算法,它具有保证数据一致性、实现高可用性和提供顺序一致性等作用。ZAB 适用于分布式协调服务、服务发现和分布式配置管理等场景。
四、深入了解
ZAB(Zookeeper Atomic Broadcast)
-
epoch类似RATF的term,counter类似index
-
依旧是超过半数节点后才能在leader中提交数据
-
优先级epoch > counter > SID(epoch和counter又被合成为ZXID)
-
proposal事务/数据
新leader(存在前任未提交的数据)会将前任Leader未提交的先传播后提交。
新leader(不存在前任未提交的数据)会将前任Leader未提交直接覆盖。
与RAFT算法区别 Leader选举,ZAB根据ZXID(epoch和counter),包含未提交的数据。RAFT根据term和index,
新leader(存在前任未提交的数据)会传播提交,在RAFT不会存在未提交的数据新leader
ZAB中没有候选者概念,有个观察者概念,缓解读操作压力。
ZAB 更注重高可用性和快速恢复服务,而 RAFT 更强调强一致性和简单的系统设计。