🌱

243

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

连载中 14/20

etcd 分布式锁:一个 Lease 管生死,一个 Revision 排公平

etcd 造锁只用了两块积木:Lease 租约绑住 key 的生死,keepalive 续命——进程崩了锁自动蒸发;创建 revision 全局单调——排队公平白送。对照 ZK 临时顺序节点概念一一对应,但流式 Watch 让实现简洁了一个量级。

#etcd#分布式锁#Lease#keepalive#revision#concurrency
2026-07-02 · 4595 阅读 · 0 评论 · 0 赞
连载中 13/20

Raft 深入:两条提交红线与一份不可能丢的日志

过半 ACK 就提交?没那么简单。旧任期的日志哪怕复制到五台也不能直接提交,否则会丢已提交数据——Raft 用「只提交当前任期」的红线堵死它。本篇把安全性抠到细节:日志新旧的精确判定、读请求的线性一致、脑裂为何数学上不成立。

#Raft#提交规则#ReadIndex#Lease Read#脑裂#日志安全
2026-07-01 · 4055 阅读 · 0 评论 · 0 赞
连载中 12/20

etcd 基础与 Raft 入门:一票、一任期、一份日志

Kubernetes 的心脏跳在 etcd 上,etcd 的心脏是 Raft。一票(一个任期只投一次)、一任期(逻辑时钟代替物理钟)、一份日志(过半确认才提交)——三个概念入门共识协议,顺带看清它和 ZAB 的兄弟相。

#etcd#Raft#任期#选举#日志复制#MVCC#Kubernetes
2026-06-30 · 2589 阅读 · 0 评论 · 0 赞
连载中 11/20

ZooKeeper 的坑:会话超时与幽灵持有人

GC 停顿二十秒,ZK 判了持有人死刑,锁转手他人;进程复活后自以为还在持锁,继续往下游写——幽灵持有人登场。ZK 把协议级安全做到了位,却依然逃不过「进程不知道自己被冻结」的宿命。五个坑,各有各的缓解与代价。

#ZooKeeper#会话超时#幽灵持有人#GC停顿#sync#性能天花板
2026-06-30 · 4624 阅读 · 0 评论 · 0 赞
连载中 10/20

ZooKeeper 分布式锁:临时顺序节点的排队艺术

创建临时顺序节点、看兄弟谁最小、只盯住前一个——三步走完,锁成了。互斥靠最小序号,防死锁靠会话蒸发,公平靠全局排队,防惊群靠「只盯前一个」。前五篇在 Redis 里拼命修的坑,ZK 方案里很多压根不存在。

#ZooKeeper#分布式锁#临时顺序节点#羊群效应#Curator
2026-06-29 · 2930 阅读 · 0 评论 · 0 赞
连载中 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 赞