
1) 【一句话结论】
高并发交易系统需以Saga模式为核心分布式事务方案,结合Redis缓存(设置合理过期时间防雪崩)、数据库分库分表(水平拆分缓解瓶颈)、消息队列异步解耦,通过补偿机制保障数据最终一致性,平衡性能与用户体验(如《三国杀》商城秒杀场景)。
2) 【原理/概念讲解】
高并发交易的核心矛盾是“强一致性”与“系统吞吐量”的冲突。关键技术需围绕“事务处理”与“资源隔离”设计:
类比:分布式事务的Saga模式像“多人协作记账”,每个步骤(扣余额、扣库存)记录状态,若某步失败,后续步骤调用“补账”操作(补偿),最终确保账目平衡;缓存像“临时钱包”,减少频繁去银行(数据库)取钱,但需设置“有效期”和“防抢钱”措施(布隆过滤器、锁),避免钱包空了(雪崩)。
3) 【对比与适用场景】
以分布式事务模式为例:
| 模式 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 两阶段提交(2PC) | 领导者(协调者)与参与者(执行者)分阶段提交(预备、提交) | 强一致性,阻塞严重(协调者故障导致全阻塞),性能低 | 需强一致性场景(如金融转账、银行交易) | 领导者故障导致所有参与者阻塞,无法处理高并发 |
| Saga模式 | 分为多个本地事务,通过补偿逻辑回滚 | 最终一致性(允许短暂不一致),降低阻塞(本地事务快速执行),补偿逻辑复杂 | 非强一致性场景(如电商订单、资源转移、游戏商城购买) | 补偿逻辑需幂等,避免重复回滚;补偿失败可能导致最终不一致 |
| 事务补偿链 | 每个步骤有对应的补偿步骤 | 最终一致性,流程可扩展 | 复杂交易流程(如购买+激活+赠送道具) | 补偿链需维护状态,确保按顺序执行 |
4) 【示例】(商城购买流程伪代码,含补偿逻辑):
用户点击“购买”按钮 → 请求服务器
1. 检查用户余额(Redis缓存,布隆过滤器过滤,缓存5分钟过期)
2. 获取商品库存(Redis缓存,布隆过滤器过滤,5分钟随机过期,加分布式锁防击穿)
3. 加锁(Redis锁,key=商品ID,value=用户ID,10秒过期)
4. 扣减余额(Redis减操作,失败则释放锁,调用余额补偿:加余额)
5. 扣减库存(Redis减操作,失败则释放锁,调用库存补偿:加库存)
6. 插入订单表(数据库事务,主从复制,索引:订单ID+用户ID)
7. 发送消息到Kafka(订单ID,队列积压阈值1000条)
8. 返回成功响应
// 补偿逻辑(库存扣减失败)
库存补偿:Redis加库存(商品ID,数量1)
// 补偿逻辑(余额扣减失败)
余额补偿:Redis加余额(用户ID,金额)
// Kafka消费者处理消息(异步通知)
消费订单消息 → 发送订单通知(短信/邮件) → 写入日志(异步)
5) 【面试口播版答案】
“面试官您好,针对高并发交易系统,比如《三国杀》商城购买场景,核心是通过Saga模式+Redis缓存+数据库分库分表+消息队列的组合,平衡数据一致性与性能。具体来说:首先,采用Saga模式处理交易流程(下单→扣余额→扣库存→写订单),每个步骤失败后调用补偿(如库存扣减失败则加库存),避免2PC的阻塞;其次,用Redis缓存用户余额、商品库存,设置5分钟随机过期时间防雪崩,加布隆过滤器防穿透,分布式锁防击穿;然后,数据库按商品分类分库,用户交易表按ID分表,读写分离提升读性能;最后,用Kafka异步处理订单通知,队列积压超过1000条时暂停新订单。这样既能保证交易原子性(通过本地事务+补偿),又能应对秒杀等高并发,提升用户体验。”(约100秒)
6) 【追问清单】
7) 【常见坑/雷区】