一、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 更强调强一致性和简单的系统设计。