MST

星途 面试题库

面试题:基于不同场景的分布式锁选型分析

假设你正在开发一个电商秒杀系统,高并发场景下对库存的扣减需要精确控制,以及一个分布式定时任务调度系统,对任务执行的唯一性有要求。针对这两个场景,你会分别如何选择分布式锁,并详细说明理由。
41.3万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

电商秒杀系统库存扣减场景

  1. 分布式锁选择:建议使用 Redis 分布式锁。
  2. 理由
    • 高性能:Redis 基于内存操作,读写速度极快,能在高并发场景下快速响应锁的获取与释放请求,满足秒杀系统对高性能的要求。例如在抢购瞬间,大量请求同时到达,Redis 能快速处理锁相关操作,保证系统的流畅性。
    • 简单易用:通过 SETNX(SET if Not eXists)等简单命令就能实现基本的分布式锁逻辑。代码实现相对简洁,开发成本低。如 SETNX lock_key value,当 key 不存在时设置成功返回 1 获取锁,存在返回 0 表示锁已被占用。
    • 支持分布式环境:Redis 天然支持分布式部署,可在多个节点组成的集群中稳定运行,适合电商系统这种分布式架构。通过集群的方式,还能提高系统的可用性和扩展性,应对高并发的流量冲击。

分布式定时任务调度系统任务执行唯一性场景

  1. 分布式锁选择:Zookeeper 分布式锁是较好选择。
  2. 理由
    • 可靠性高:Zookeeper 采用了 Paxos 算法保证数据一致性和可靠性,其节点数据存储在内存和磁盘,即使部分节点故障,也能保证锁的状态可靠。对于定时任务执行唯一性要求,可靠性至关重要,确保任务不会因锁的问题重复执行。
    • 具备顺序性:Zookeeper 的临时顺序节点特性可以实现锁的公平获取。每个获取锁的客户端会创建一个临时顺序节点,通过比较节点序号确定获取锁的顺序。在定时任务调度场景下,能保证任务按照一定顺序依次获取锁执行,避免混乱。
    • 节点监听机制:Zookeeper 提供了节点监听功能。当持有锁的节点异常断开(如任务执行节点崩溃),Zookeeper 会通知其他等待获取锁的节点,以便它们重新竞争锁,确保任务能继续执行,保证任务执行的连续性和唯一性。