第四篇 数据与消息:拆库后的一致性
第三篇我们把服务之间怎么说话的问题解决了:注册发现、gRPC 接口、网关收口、链路追踪。但服务拆了,数据还团在一起——订单、商品、用户三个服务仍然共用一个 MySQL 实例,订单服务一个大事务锁下来,商品服务的查询照样抖。这一篇就来拆开这团最硬的骨头。
本篇四节是一条完整的演进链,建议顺序读:先拆库、再补一致性,然后上消息队列削峰,最后用缓存兜住读流量,环环相扣。
- 4.1 每服务一库:拆库的代价与收益——边界怎么划、迁移怎么分阶段、join 消失之后怎么办。
- 4.2 分布式事务:从 2PC 到本地消息表——为什么不上 XA,本地消息表与事务消息如何落地。
- 4.3 RocketMQ 削峰:秒杀场景实战——三道关口削峰,消费重试、幂等与堆积治理。
- 4.4 缓存一致性:Redis 与数据库的协调——Cache Aside 配延迟双删,击穿穿透雪崩的对策。
拆库前建议先回顾第一篇的拆分边界,业务边界划错,拆库就要返工;事务方案怎么选和第三篇的服务间通信直接相关,对照着读更清楚。如果你也带着小团队做架构演进,云上架构实践案例集里有不少可以照抄的作业。
