一杯咖啡的时间,聊聊技术与成长
收官复盘:一张作战地图串起整个系列
十八篇走完,从订单与库存的裂缝讲到对账的兜底。症状速查表、三条铁律、四步选型、十项上线检查——分布式事务的全部家当收进一张作战地图,下次账对不上,先翻这张图。
踩坑实录:七个生产事故清单
注销消息还没消费,注册消息先到了;缓存删失败,旧余额挂了一天;异步线程池一开,全局事务 ID 凭空消失——七个前文没写透的生产事故:现象、根因、解法,条条都是纪律。
对账系统:最终一致的最后防线
防御做得再全,季度审计照样翻出差异。对账是分布式事务的最后一道防线:不信任任何一方自报,用独立数据源做全量比对——长款、短款、状态不符逐笔揪出,自动平账、人工差错池、挂账三路分流。
事务边界:@Transactional 的七宗罪
注解写了事务却没生效:方法不 public、同类自调用、异常被吞、rollbackFor 没配——四大失效姿势。事务里发消息、调远程、跑批处理——三大拖垮姿势。边界要小而纯粹:只包数据库操作,其余一律移出去。
超时与重试:三态结果的不确定性
超时五秒,下游第六秒成功了——上游判失败做退款,下游成功了扣款,一笔钱处理两遍。超时是三态不是两态,未知态的纪律是先查询再行动;重试要退避要预算,否则小故障被放大成雪崩。
热点账户:余额更新的锁冲突突围
大商户账户每秒几千笔交易都改同一行余额,AT 抢全局锁自旋、本地事务排队行锁——单行更新是天然的串行点。缓冲记账把减法变插入、子账户把一行拆 N 行、TCC 冻结绕开余额行,四条路各有走法。
Seata AT 原理:undo_log 与全局锁
业务零改造还能自动回滚,靠的是代理数据源偷偷记前后镜像:一阶段本地事务带着 undo_log 提前提交,二阶段回滚就按镜像生成反向 SQL。全局锁从数据库行锁挪到 TC 内存——这就是 AT 快的原因,也是它怕热点行的原因。
Seata 全景:四模式一张图选型
TC 协调、TM 发起、RM 参与——Seata 把前九篇的方案装进了一个框架:AT 零侵入、TCC 高性能、Saga 管长流程、XA 保强一致。四模式不是四选一的玄学,是按侵入度和一致性需求的四张门票。
幂等设计:分布式事务的压舱石
MQ 会重投、框架会重试、用户会手抖、网络会重发——重复是常态,幂等是活路。五大武器:唯一键防重插、去重表防重消、状态机防乱序、Token 防手抖、乐观锁防并发。先查后写有竞态,唯一索引才是最后的墙。