📚

247

一杯咖啡的时间,聊聊技术与成长

连载中 9/20

ZAB 协议:ZooKeeper 的灵魂

Leader 换人凭什么不丢账不乱账?答案是 ZAB。正常时它像一台不要全体点头、只要过半举手的 2PC;故障时它像一场带朝代号的选举:epoch 管谁新谁旧,zxid 管谁先谁后,旧 Leader 复活也要乖乖退位。

#ZAB#ZooKeeper#epoch#zxid#崩溃恢复#消息广播
2026-06-29 · 1852 阅读 · 0 评论 · 0 赞
连载中 8/20

ZooKeeper 基础:ZNode、Watch、临时节点

ZooKeeper 不是数据库也不是缓存,是协调服务。树形命名空间、一次性 Watch、绑会话的临时节点——三个概念撑起全部精彩。临时节点尤其妙:锁的生死绑在客户端心跳上,进程崩了锁自动蒸发,防死锁不靠超时赌命。

#ZooKeeper#ZNode#临时节点#Watch#会话#协调服务
2026-06-28 · 6087 阅读 · 0 评论 · 0 赞
连载中 7/20

主从切换下的锁失效:异步复制的原罪

客户端刚在主库上锁成功,主库没来得及同步就从库升了主——锁凭空蒸发,第二个客户端照样加锁。这是异步复制的原罪,不是配置错误。WAIT 命令、min-replicas 限写、换协调服务,各有各的价钱。

#分布式锁#主从切换#异步复制#哨兵#min-replicas#丢失锁
2026-06-28 · 4683 阅读 · 0 评论 · 0 赞
连载中 6/20

锁竞争与等待唤醒:一百个线程抢一把锁

零点大促,一百个请求同时抢同一张卡上的锁,抢到的在干活,剩下九十九个在干嘛?自旋会把 Redis 打爆,傻等会拖垮响应。pub/sub 唤醒、公平排队、单飞收敛——等待的艺术,决定了锁系统的上限。

#分布式锁#自旋#等待唤醒#pubsub#单飞#公平锁
2026-06-27 · 6085 阅读 · 0 评论 · 0 赞
连载中 5/20

RedLock 之争:Martin 与 antirez 的隔空交锋

五台独立 Redis、多数派加锁、失败全解锁——RedLock 看起来无懈可击。分布式系统权威 Martin 发文质疑:GC 停顿和时钟跳变面前,RedLock 的安全性站不住。antirez 下场应战。这场论战给所有用锁的人留下了两句话:锁分效率与正确性,正确性要靠令牌兜底。

#分布式锁#RedLock#Martin Kleppmann#antirez#fencing token
2026-06-27 · 4347 阅读 · 0 评论 · 0 赞
连载中 4/20

Redisson:可重入锁的完整实现

方法 A 拿了锁,内部调用的方法 B 还要同一把锁——不会重入的锁会用自锁的方式杀死自己。Redisson 用一个 Hash 结构把重入计数、看门狗续期、安全释放全部封装,三行代码背后是一整套工程化答案。

#分布式锁#Redisson#可重入锁#看门狗#Hash结构
2026-06-26 · 2561 阅读 · 0 评论 · 0 赞
连载中 3/20

锁误删与续期:看门狗从哪来

过期时间设短了业务没跑完锁先没了,设长了持有人真崩了全员干等。两头堵的困局里,看门狗给出了第三条路:锁的生死不靠猜,靠持有人活着的事实来续。一段 Lua 加一个后台线程,把赌局变成雇佣关系。

#分布式锁#看门狗#续期#GC停顿#Lua脚本
2026-06-25 · 6074 阅读 · 0 评论 · 0 赞
连载中 2/20

从 SETNX 到 SET NX PX:一条命令的二十年进化

用 Redis 加锁,第一反应是 SETNX。但「加锁」和「设过期」分两步会崩出原子性问题,「删除」不看身份会误伤后来者,校验加删除又差一个原子——三代写法排着队踩坑,最后收敛成一条命令加一段 Lua。

#分布式锁#SETNX#SET NX PX#Lua脚本#误删锁
2026-06-25 · 4098 阅读 · 0 评论 · 0 赞
连载中 1/20

同一个账户,两家门店同时扣款:JVM 锁管不了的事

503 咖啡馆开到第三家店,储值卡同一天在两店同时扣款,账对不上了。synchronized 在多实例面前形同虚设,数据库行锁也没拦住读改写的竞态——把互斥从 JVM 内提升到全进程共享,是本系列第一课。

#分布式锁#JVM锁#丢失更新#互斥#503咖啡馆
2026-06-24 · 1392 阅读 · 0 评论 · 0 赞