分布式锁体系设计 —— 如何在复杂业务中保证一致性与高性能?

21 阅读1分钟
  1. 前言:为什么分布式锁一直被“低估”?

    • 很多系统不是因为 DB 慢,而是因为并发写入导致一致性问题
    • 分布式锁是防止混乱写入的基础能力
    • 但做不好会变成性能黑洞
  2. 分布式锁的正确使用场景

    • 并发写库存
    • 保证任务唯一执行
    • 防止重复扣减、重复发券、重复创建
    • 防止并行修改同一业务对象
  3. 常见错误用法(危险)

    • 用 Redis SETNX 但不加过期
    • 锁过期太短导致锁提前失效
    • 同一业务对象使用全局锁(阻塞太大)
    • 释放锁时误删他人锁(经典死锁坑)
  4. 分布式锁的四大核心难点

    • 可重入需求
    • 锁自动续期
    • 锁粒度控制
    • 高性能加锁(百万QPS)
  5. 分布式锁解决方案对比

    • Redis SETNX
    • Redlock(公式与争议)
    • Zookeeper + 临时节点
    • Etcd 分布式锁
    • 数据库悲观锁 / 乐观锁(高一致性场景)
  6. 锁粒度设计(非常关键)

    • global lock → 锁所有资源(最差)
    • resource-level lock → 按业务对象加锁
    • hashed lock → 解决百万资源锁爆炸问题
    • sharding lock → 热点对象的分段锁
  7. 锁的工程化平台化

    • 锁的监控
    • 锁的可视化
    • 锁冲突率分析
    • 锁等待时间曲线
    • 锁过期策略配置化
  8. 典型场景:订单扣库存分布式锁设计

    • 单商品锁
    • 多商品锁 → 如何避免死锁?
    • 扣减失败的补偿机制
    • 如何在高并发场景依然保持高性能?
  9. 总结

    • 分布式锁不是“用 Redis 实现一下”的事情
    • 是一个完整的工程体系
    • 一旦做不好,会造成一致性事故与性能灾难