
1) 【一句话结论】
针对旅游零售高并发订单处理,设计微服务解耦+事件驱动+Seata TCC分布式事务+Redis缓存+Kafka消息队列的架构,通过分布式锁保证库存安全,补偿机制处理异常,应对峰值通过水平扩展和限流,确保订单-支付-库存同步与系统稳定性。
2) 【原理/概念讲解】
核心是“解耦+加速+一致”三原则:
3) 【对比与适用场景】
| 组件 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 数据库 | 持久化核心数据(订单、支付、库存) | MySQL(分库分表,ShardingSphere),读写分离,事务隔离REPEATABLE READ | 订单、支付、库存等需持久化的数据 | 需分库分表避免单库瓶颈,事务隔离防止脏读 |
| Redis | 加速热点数据读取 | 集群(主从+哨兵),库存余量5分钟过期 | 订单状态、库存余量、用户信息等高频访问数据 | 设置过期时间防缓存雪崩,热点数据预加载 |
| Kafka | 异步解耦服务,处理高并发消息 | 高吞吐、持久化、按SKU/订单ID分区 | 订单创建、支付成功、库存扣减等事件传递 | 消息持久化,消费者负载均衡,消息丢失处理(事务性消息) |
| Seata TCC | 保证分布式数据一致性 | 预留库存(检查库存并锁定)、扣减库存(数据库事务)、释放库存(补偿) | 订单-支付-库存同步,避免超卖 | 补偿逻辑需明确,确保失败时能回滚 |
4) 【示例】
订单创建流程伪代码(含分布式锁、消费者重试与回滚):
1. 用户请求创建订单 → 订单服务验证信息 → 调用库存服务预留库存(Redis SETNX key value EX 10s,检查库存余量)→ 写入订单表(数据库事务提交)→ 发布“订单创建事件”到Kafka(topic:order-create)。
2. 支付服务消费事件 → 调用支付网关(如支付宝)→ 支付成功 → 发布“支付成功事件”到Kafka(topic:payment-success)。
3. 库存服务消费事件 → 扣减库存(数据库事务,若失败回滚)→ 发布“库存扣减完成事件”到Kafka(topic:stock-decr-done);若失败则发送“库存补偿事件”到Kafka(topic:stock-compensate)。
4. 通知服务消费事件 → 发送订单确认通知(短信/短信)。
5) 【面试口播版答案】
“面试官您好,针对旅游零售高并发订单处理,我设计的系统采用微服务架构,核心是订单、支付、库存、通知四个服务,通过Kafka异步解耦,Redis缓存热点数据,MySQL分库分表处理高并发。订单创建时,订单服务先通过Redis分布式锁检查库存并预留,写入数据库后发布订单创建事件;支付服务消费后处理支付,支付成功发布支付成功事件;库存服务消费扣减库存(事务提交),若扣减失败则回滚并发布补偿消息;通知服务发送通知。应对峰值时,通过缓存预热(提前加载热门商品库存)、消息队列限流(积压阈值)、水平扩展服务实例,以及Seata TCC保证数据一致性,避免超卖或数据不一致,确保订单-支付-库存的同步与系统稳定性。”
6) 【追问清单】
7) 【常见坑/雷区】