面试题答案
一键面试- Zookeeper节点特性:
- Zookeeper利用其树形结构的节点特性。当创建分布式锁时,通常会创建一个临时顺序节点。例如,在
/locks
路径下创建临时顺序节点,如/locks/lock - 0000000001
。 - 临时节点的生命周期与客户端会话绑定,客户端会话结束,临时节点自动删除。这确保了如果持有锁的客户端出现故障(如网络分区导致与Zookeeper集群断开连接),锁会自动释放。
- Zookeeper利用其树形结构的节点特性。当创建分布式锁时,通常会创建一个临时顺序节点。例如,在
- 选举机制:
- 在Zookeeper分布式锁场景中,多个客户端同时竞争锁时,每个客户端创建的临时顺序节点编号是递增的。编号最小的节点对应的客户端获得锁。
- 例如,客户端A创建
/locks/lock - 0000000001
,客户端B创建/locks/lock - 0000000002
,那么客户端A获得锁。
- Watcher机制:
- 没有获得锁的客户端(如客户端B)会在比自己编号小的节点(如
/locks/lock - 0000000001
)上注册Watcher。 - 当持有锁的客户端(客户端A)释放锁(如会话结束,临时节点
/locks/lock - 0000000001
被删除)时,Zookeeper会通知注册了Watcher的客户端(客户端B)。客户端B收到通知后,检查自己是否是当前编号最小的节点,如果是,则获得锁。
- 没有获得锁的客户端(如客户端B)会在比自己编号小的节点(如
- 网络分区处理:
- 在网络分区导致脑裂的情况下,Zookeeper遵循半数以上节点可用的原则。假设Zookeeper集群有5个节点,至少3个节点保持连通才能组成一个有效的集群。
- 当出现网络分区时,不同分区内的客户端会尝试与各自分区内的Zookeeper节点交互。但只有包含半数以上节点的分区才能正常提供服务,其他分区内的客户端无法成功创建锁节点或者获取锁相关的信息(因为这些操作需要多数节点的确认)。
- 例如,5节点集群分为2个节点和3个节点的两个分区,只有3节点分区能正常处理锁操作,2节点分区内的客户端无法获取锁,从而避免了不同分区同时获取到锁,保证了数据一致性和系统正常运行。