面试题答案
一键面试底层架构差异
- Redis:基于内存存储,采用单线程模型处理命令,通过网络协议与客户端交互。其数据结构简单,分布式锁实现主要依赖
SETNX
等命令,利用键值对存储锁状态。例如在一个简单的抢购场景中,通过SETNX lock_key value
尝试获取锁,若返回1则获取成功。 - Zookeeper:采用树形结构存储数据,每个节点称为
znode
。其分布式锁实现依赖于临时顺序节点。客户端在获取锁时,在锁节点下创建临时顺序节点,通过比较节点序号确定锁的归属。例如在分布式任务调度场景中,任务客户端在/lock
节点下创建如/lock/lock-0000000001
这样的临时顺序节点。
数据一致性模型差异
- Redis:提供最终一致性模型。在分布式环境下,由于异步复制机制,主从节点间数据同步存在延迟。比如主节点获取锁后,在从节点同步完成前,从节点可能无法感知锁已被获取,这在对一致性要求不高的缓存场景可接受,如电商商品浏览量统计,短暂的数据不一致不影响业务。
- Zookeeper:提供强一致性模型。通过 Zab 协议保证数据在集群内的一致性。所有写操作都要经过 Leader 节点,Leader 会将写请求广播给所有 Follower 节点,超过半数节点确认后才会提交,确保每个节点数据状态一致。在如银行转账这类对数据一致性要求极高的分布式事务场景中,Zookeeper 锁更适用。
网络拓扑适应性差异
- Redis:对网络抖动较为敏感。当网络出现分区时,可能导致数据同步延迟甚至数据丢失。比如在网络分区期间,主从节点无法正常通信,主节点上的锁操作无法及时同步到从节点,可能出现数据不一致。如果网络分区持续时间过长,可能影响锁机制的正常运行,适合网络相对稳定的场景。
- Zookeeper:具有较好的网络拓扑适应性。即使在网络分区情况下,只要每个分区内存在过半节点,集群仍能正常工作。Zab 协议能保证在网络恢复后,各分区数据最终达成一致。在跨地域的分布式系统中,不同地域网络可能出现短暂分区,Zookeeper 分布式锁能更好地适应这种复杂网络环境。
Zookeeper分布式锁独特优势及应用场景
- 优势:
- 可靠性高:基于树形结构和强一致性保证,锁状态在集群内可靠存储和维护,不易出现锁丢失或误判情况。
- 公平性好:通过临时顺序节点实现,按照节点创建顺序获取锁,保证公平竞争。
- 应用场景:
- 分布式选举:如在分布式数据库集群中,需要选举一个主节点负责写操作,Zookeeper 分布式锁可保证选举过程的公平性和一致性,确保只有一个主节点被选出。
- 分布式资源调度:在大型分布式计算平台中,多个计算节点竞争有限资源,Zookeeper 锁能公平分配资源,保证资源使用的一致性和可靠性。