
1) 【一句话结论】:采用微服务架构拆分订单、库存、财务服务,通过事件驱动(消息队列)解耦,结合Saga模式(最终一致性)保障数据一致性,并利用分布式锁和幂等性处理高并发,确保百万级并发下的实时同步。
2) 【原理/概念讲解】:老师口吻,解释核心概念:
类比:订单创建像“发布新闻”,库存/财务像“订阅新闻的读者”,消息队列保证新闻可靠传递,Saga模式让读者各自处理,若某步失败则“撤销”操作(补偿)。
3) 【对比与适用场景】:
消息队列(Kafka vs RabbitMQ):
| 特性 | Kafka | RabbitMQ |
| --- | --- | --- |
| 事务支持 | 支持生产者/消费者事务(确保消息不丢失) | 不支持事务(依赖消息确认) |
| 顺序性 | 单分区顺序,多分区可能乱序 | 单队列顺序,多队列可能乱序 |
| 扩展性 | 高吞吐,适合大规模事件流 | 中等吞吐,适合中小规模 |
| 适用场景 | 实时数据流、事件总线(订单系统) | 传统消息队列,延迟低,适合点对点/发布订阅 |
Saga模式 vs 两阶段提交(2PC):
| 模式 | 定义 | 特性 | 使用场景 |
| --- | --- | --- | --- |
| 两阶段提交(2PC) | 强一致性,协调者控制所有参与者 | 需协调者,性能低,故障阻塞 | 需强一致性,事务短(如数据库事务) |
| Saga模式 | 最终一致性,通过补偿事务保证 | 无协调者,步骤独立,故障补偿 | 长事务(订单-库存-财务流程) |
4) 【示例】:订单创建请求(JSON)及流程:
{
"order_id": "ORD-20240101-001",
"user_id": "U1001",
"car_model": "i3",
"quantity": 1,
"payment_method": "credit_card",
"total_amount": 30000
}
流程:
伪代码(订单服务):
def create_order(order_data):
if not validate_user(order_data["user_id"]) or not check_inventory(order_data["car_model"], order_data["quantity"]):
return {"code": "error", "msg": "库存不足"}
order_id = generate_order_id()
save_order(order_id, order_data)
publish_event("order-created", order_data)
return {"code": "success", "order_id": order_id}
5) 【面试口播版答案】:
(约90秒)
“面试官您好,针对百万级并发的新车线上订单系统,我设计的方案核心是采用微服务架构拆分订单、库存、财务服务,通过事件驱动(消息队列)解耦,结合Saga模式保障数据一致性。首先,订单服务作为入口,处理订单创建请求,验证用户和库存后,发布‘订单创建’事件到Kafka。库存和财务服务订阅该事件,分别扣减库存和记账。由于强一致性会影响性能,我们采用Saga模式,将长事务拆分为多个短事务,通过补偿事务保证最终一致性。同时,库存扣减时使用Redis分布式锁防止超卖,每个服务接口都实现幂等性,避免重复操作。数据一致性方面,消息队列保证事件顺序和可靠性,分布式锁解决互斥问题,幂等性处理重复请求。这样既能支持百万级并发,又能实时同步库存和财务系统。”
6) 【追问清单】:
7) 【常见坑/雷区】: