
1) 【一句话结论】
针对南光集团大宗商品(石油、农产品等)贸易的供应链需求,采用微服务+事件驱动架构,通过多活部署保障高可用,用Saga模式解决多系统(订单-库存-WMS-TMS-ERP)数据一致性,分层风控(快速规则+信用评估+反欺诈)控制风险,结合ABC分类+季节性安全库存算法优化库存周转,应对高并发订单处理场景。
2) 【原理/概念讲解】
老师来解释几个核心概念,确保你理解透彻:
3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Saga模式 | 分段提交,每步成功发布事件,失败回滚 | 最终一致性,异步处理,需幂等性 | 多系统强一致性(订单-库存-物流) | 需补偿机制,复杂回滚逻辑 |
| 两阶段提交 | 领导者协调,准备-提交 | 强一致性,同步 | 单系统或严格强一致性场景 | 性能低,故障时阻塞 |
| 主从部署 | 单主节点,多从节点同步 | 简单,强一致性 | 小规模系统 | 主节点故障导致服务中断 |
| 多活部署 | 多节点同时对外服务 | 高可用,故障切换快 | 大规模高并发系统 | 需负载均衡与数据同步(同步延迟) |
4) 【示例】
订单创建流程(伪代码,含幂等性、Saga补偿):
# 订单服务
def create_order(order_id, product_id, qty):
# 1. 快速风控检查(快速规则)
if not risk_quick_check(order_id):
raise Exception("风险拦截")
# 2. 扣减库存(库存服务,幂等性)
result = stock_service.deduct_stock(product_id, qty, order_id) # 订单ID为幂等键
if result == "success":
publish_event("stock_deducted", order_id, product_id, qty)
else:
publish_event("stock_deduct_failed", order_id, product_id, qty)
raise Exception("库存不足")
# 3. 调用WMS出库
wms_service.issue_order(order_id)
# 4. 调用TMS安排运输
tms_service.schedule_transport(order_id)
return "order_created"
库存扣减失败补偿流程(伪代码):
# 库存服务
def handle_stock_deduct_failed(event):
order_id = event["order_id"]
product_id = event["product_id"]
qty = event["qty"]
stock_service.restore_stock(product_id, qty, order_id) # 恢复库存
消息队列事件(JSON):
{
"event_type": "stock_deducted",
"order_id": "ORD-20240501-001",
"product_id": "PETRO-001",
"qty": 100
}
5) 【面试口播版答案】
面试官您好,针对南光集团大宗商品供应链管理系统的需求,我的核心方案是构建一个微服务+事件驱动的混合架构,通过多活部署保障高可用,用Saga模式解决多系统数据一致性,同时分层风控和智能库存算法提升风险控制与周转效率。
具体来说,系统拆分为订单、库存、风控、物流等微服务,各服务通过消息队列(如Kafka)异步通信,避免强依赖。高可用方面,采用多活部署,比如订单服务部署在多个区域(如华南、华东),一个区域故障时自动切换,确保7×24小时服务。数据一致性上,订单创建后,通过Saga模式依次调用库存扣减、WMS出库、TMS运输,每步成功发布事件,失败则回滚(比如库存扣减失败,发布补偿事件触发库存恢复),保证数据最终一致。风险控制分三层:快速规则(如IP黑名单、订单金额阈值,秒级拦截)、信用评估(调用外部API,分钟级)、反欺诈模型(机器学习,小时级),先快速拦截高风险,再精准分析。库存优化用ABC分类法,A类大宗商品(石油)每日盘点,结合季节性波动调整安全库存(如农产品旺季增加安全库存),动态补货提升周转率。这样既能应对高并发订单,又能保证多系统数据一致和风险控制,同时优化库存。
6) 【追问清单】
7) 【常见坑/雷区】