8、分布式锁:别只用 Redis,你还知道 ZooKeeper、Etcd 吗?

116 阅读1分钟

今天我们聊聊分布式系统的关键组件:分布式锁

在单机里,synchronizedReentrantLock 就能搞定锁。
但分布式里,你要锁住的不是线程,而是跨机器的资源。


1️⃣ Redis 分布式锁

✅ 基于 setnx 命令实现
✅ RedLock 算法提高多节点一致性
✅ 优势:快、易用、生态好
⚠ 隐患:

  • 主从同步延迟,可能出现双主
  • 锁续期、超时、网络抖动容易踩坑

小幽默:

Redis 锁:“我快归快,但不是 100% 安全,别太依赖我。”


2️⃣ ZooKeeper 分布式锁

✅ 基于临时顺序节点 + Watcher 实现
✅ 线性一致性强、可靠性高
✅ 优势:天生支持选主、锁排队
⚠ 隐患:

  • 性能差,QPS 上不去
  • 开发和运维成本高

小幽默:

ZooKeeper 锁:“我是老大哥,稳得一批,就是慢点。”


3️⃣ Etcd 分布式锁

✅ 基于租约(Lease)和 Compare-And-Swap 实现
✅ 强一致性、高可用、云原生友好
✅ 优势:跟 K8s 生态天然契合
⚠ 隐患:

  • 社区使用率相对较小
  • 学习曲线略高

小幽默:

Etcd 锁:“我是新贵,云原生场景下你值得拥有。”


4️⃣ 什么时候用谁?

✅ 高性能要求 → Redis
✅ 高一致性要求 → ZooKeeper
✅ 云原生、K8s 环境 → Etcd

image.png


5️⃣ 总结

✅ 分布式锁没有银弹,场景决定方案
✅ 上锁之外,更重要的是想清楚:能否用幂等、重试、乐观锁代替?
✅ 工程师的成长,就是在这些选择中不断踩坑、爬坑、填坑