收官,但地图要常翻
从那个 800ms 的下单接口开始,20 篇写完:为什么用、代价、选型、模型、不丢、不重、有序、延迟、事务、重试、死信、积压、Kafka、RocketMQ、容灾、监控、场景、陷阱。最后一篇不添新知识,只做一件事——把散落的内容拼成一张出事时能直接翻的作战地图。
作战地图:症状 → 篇目 → 第一动作
| 症状 | 第一动作 | 复习篇目 |
|---|---|---|
| 接口慢,下游全串在链路上 | 分清核心/附属链路,考虑异步化 | 第 1、2 篇 |
| 消息凭空丢失 | 按三段论排查:发送确认、刷盘复制、ACK 时机 | 第 5、6 篇 |
| 重复消费,业务翻倍 | 上幂等:唯一键/去重表/状态机 | 第 7 篇 |
| 数据对不上,先后错乱 | key 路由加分区内有序,或状态机免疫 | 第 8 篇 |
| 订单该关没关 | 延迟消息三保险 + 对账 | 第 9、18 篇 |
| 库和消息对不齐 | 事务消息或本地消息表,回查查库 | 第 10 篇 |
| 重试停不下来 | 查重试上限、死信告警与人工 SOP | 第 11 篇 |
| 积压疯涨 | 先诊断病因再止血,深的上转储 | 第 12 篇 |
| Kafka 消费组频繁停摆 | 查 GC 与 poll 间隔,上静态成员 | 第 14 篇 |
| 发送/消费全面变慢 | 查大消息与磁盘水位,看三看板 | 第 13、17 篇 |
| 机房级故障 | 按容灾预案切换,防脑裂先确认 | 第 16 篇 |
按场景走的阅读路径
- 入门线:第 1 → 2 → 3 → 4 篇,为什么用、代价、选型、模型;
- 可靠性线:第 5 → 6 → 7 → 8 篇,不丢、不重、有序三连;
- 进阶特性线:第 9 → 10 篇,延迟与事务;
- 运维线:第 11 → 12 → 17 篇,重试死信、积压、监控;
- MQ 深入线:第 13 → 14 → 15 篇,Kafka 两篇加 RocketMQ 一篇;
- 实战线:第 16 → 18 → 19 篇,容灾、场景、陷阱。
三条心法
- 先分清该不该,再想怎么用:强一致留同步链路,最终一致才交给 MQ。第 2 篇的四问清单,上队列前过一遍;
- 不丢靠层层确认,不重靠业务幂等:两个承诺天然冲突,MQ 负责不丢,你负责幂等。去重表和状态机不是可选项;
- MQ 是组合拳里的一拳:延迟消息配状态机,削峰配预扣库存,同步配对账。单靠 MQ 解不了业务题。
上线检查清单
- 发送禁用 oneway,异步回调处理异常,核心链路有本地消息表或事务消息;
- Broker:同步刷盘 + 同步复制(或 acks=all 加 min.insync.replicas 大于等于 2);
- 消费:手动提交,先处理后 ACK,重试有上限,死信有告警;
- 幂等:去重表与业务同事务,或状态机兜底;
- 顺序:按需开分区有序,毒消息预案齐备;
- 监控:三看板齐,lag 按追平时间告警;
- 容量:消费能力为峰值两倍,队列数预留,磁盘水位低于 80%;
- 容灾:按业务损失定价的容灾档位,切换演练按季度;
- 对账:生产消费两端业务单号每日核对;
- 值班手册:每条告警都写着第一动作。
Redis 缓存实战 16 篇、MySQL 实战 22 篇、消息队列实战 20 篇——咖啡馆后山的三座地标全部落成。下个系列候选还剩两块地:分布式 ID(MySQL 系列第 20 篇挖的坑)和 Elasticsearch 检索实战(本系列第 18 篇数据同步里露过脸)。选哪块,你说了算——咖啡豆照旧管够。
咖啡凉了,记得趁热喝。
评论 (0)