跳转至

超大并发分布式锁架构设计

一、挑战

  • 每秒几十万上百万加锁请求。
  • 不能用一把锁串行所有请求。
  • 锁粒度要细。

二、锁分片

把一个大锁拆成 N 个小锁:

lock:order:0, lock:order:1, ..., lock:order:99

请求按 hash 分到不同分片,并行加锁。

例子

库存扣减:商品 ID % 100,分到 100 把锁。

三、锁分级

粗粒度锁

跨分片操作,用更大的锁。

细粒度锁

单分片操作,小锁。

四、Redis 集群

  • 分片锁分散到不同 Redis 节点。
  • 每个节点扛一部分 QPS。
  • Redisson 看门狗自动续期。

五、无锁化

能不用锁就不用:

1. 乐观锁

UPDATE stock SET count = count - 1 WHERE id = 1 AND count > 0

2. 分段

库存拆成多个段,每段独立扣减。

3. 异步化

扣库存异步化,MQ 削峰。

六、Zookeeper/etcd 做元数据

CP 系统做锁协调: - 选主。 - 配置中心。 - 分布式锁(关键路径)。

Redis 做缓存和高性能锁(非关键路径)。

七、架构图

客户端
Nginx 限流
应用层(本地锁 → 分布式锁)
Redis Cluster(分片锁)
DB

八、关键指标

  • 锁等待时间。
  • 锁冲突率。
  • Redis QPS。
  • 死锁率。

九、总结

超大并发锁架构: 1. 分片,并行。 2. 分级,不同场景不同锁。 3. 无锁化优先(乐观锁、异步)。 4. CP 系统做关键路径,AP 系统做性能路径。

不要一上来就分布式锁

先想能不能不用锁,再想能不能用本地锁,最后才分布式锁。