MST

星途 面试题库

面试题:分布式系统中ZooKeeper如何实现数据的一致性

在基于ZooKeeper的分布式协调服务里,ZooKeeper采用了何种机制来保证数据在多个节点间的一致性?请简要描述其原理。
44.8万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

ZooKeeper采用ZAB(ZooKeeper Atomic Broadcast)协议来保证数据在多个节点间的一致性。其原理如下:

  1. 领导者选举
    • 当集群初始化或领导者崩溃时,ZooKeeper会进行领导者选举。每个节点都有一个唯一的ID和事务ID(ZXID),ZXID越大表示数据越新。
    • 节点会相互交换自己认为的领导者信息,最终选出ZXID最大的节点作为领导者。
  2. 事务广播
    • 客户端的写请求会被转发到领导者节点。
    • 领导者接收到写请求后,会为该事务分配一个全局唯一递增的ZXID,并将事务以Proposal的形式广播给所有的Follower节点。
    • Follower节点接收到Proposal后,会将其写入到本地的事务日志中,并向领导者发送ACK响应。
    • 当领导者收到超过半数Follower节点的ACK响应后,会向所有Follower节点发送Commit消息,通知它们提交该事务。
    • Follower节点收到Commit消息后,将事务应用到内存数据库中,从而保证所有节点的数据一致性。
  3. 崩溃恢复
    • 当领导者崩溃或与过半Follower失去联系时,集群进入恢复模式。
    • 剩余节点重新进行领导者选举,选出新的领导者。
    • 新领导者会从自身日志中获取最新的ZXID,并向其他节点发送Sync消息,让其他节点同步到最新的状态,之后集群重新进入正常工作状态。