一、异常分类与优先级定义
1. 业务异常
- 订单类:库存不足、超卖、地址不可达、支付失败、用户取消订单
- 供应链类:供应商缺货、物流延迟、冷链设备故障、商品质量不合格
- 履约类:分拣错误、配送超时、签收异常(拒收/破损)
- 数据类:数据不一致、API调用失败、第三方服务中断(如支付、地图)
2. 系统异常
- 服务器宕机、数据库连接失败、网络超时、缓存击穿
- 并发冲突(如抢购场景下的库存锁竞争)
3. 优先级划分
- P0(紧急):系统崩溃、支付安全、数据丢失
- P1(高):订单履约失败、供应链中断
- P2(中):用户界面报错、部分功能不可用
- P3(低):非关键日志错误、性能波动
二、异常处理核心机制
1. 预防性设计
- 库存管理
- 实时库存同步:通过分布式锁(如Redis)防止超卖,结合最终一致性机制(如消息队列)处理异步更新。
- 预售与动态调拨:对热门商品设置预售阈值,自动触发区域仓库调拨。
- 冷链监控
- 物联网设备集成:通过温湿度传感器实时上报数据,异常时自动触发报警并暂停相关订单履约。
- 路径优化:结合天气、路况数据动态调整配送路线,减少延迟风险。
2. 实时检测与告警
- 监控系统
- 部署Prometheus+Grafana监控订单处理时效、API成功率、数据库响应时间等关键指标。
- 设置阈值告警(如订单处理超时5分钟触发钉钉/短信通知)。
- 日志追踪
- 使用ELK(Elasticsearch+Logstash+Kibana)集中管理日志,通过关键词(如`OutOfStockException`)快速定位问题。
- 结合分布式追踪系统(如SkyWalking)分析跨服务调用链。
3. 异常处理流程
1. 捕获与记录
- 统一异常处理器(如Spring的`@ControllerAdvice`)捕获所有未处理异常,记录错误堆栈、请求参数、用户ID等信息。
- 示例代码:
```java
@ExceptionHandler(Exception.class)
public ResponseEntity handleException(Exception e) {
log.error("系统异常: {}", e.getMessage(), e);
return ResponseEntity.status(500).body(new ErrorResponse("服务异常,请稍后重试"));
}
```
2. 自动补偿
- 订单补偿:对支付成功但未分拣的订单,自动触发退款并通知用户。
- 库存回滚:使用Saga模式实现分布式事务,确保库存扣减与订单状态一致。
3. 人工介入
- 对P0/P1级异常自动创建工单,分配至专属运维团队,并设置SLA(如30分钟内响应)。
- 提供运维后台实时看板,展示异常分布、处理进度及历史趋势。
4. 用户通知
- 通过短信/APP推送告知用户异常原因及解决方案(如“您的订单因暴雨延迟,预计送达时间调整为XX”)。
- 提供补偿措施(如优惠券、积分)。
三、关键场景处理方案
1. 库存不足
- 预防:设置安全库存阈值,当库存低于阈值时自动触发采购申请。
- 处理:
- 对已支付订单:优先从其他仓库调货,或与用户协商更换等价商品。
- 对未支付订单:锁定库存并提示用户“商品库存紧张,请尽快支付”。
2. 配送延迟
- 动态调度:根据实时路况和骑手位置,使用遗传算法优化配送路径。
- 用户沟通:在APP地图上显示预计送达时间,延迟超15分钟时自动发送通知并补偿优惠券。
3. 商品质量问题
- 质检流程:在分拣中心设置AI视觉识别,自动检测腐烂、破损商品。
- 售后处理:用户签收后24小时内可申请退款,系统自动审核并触发原路退款。
四、技术实现建议
1. 熔断与降级
- 集成Hystrix或Sentinel,对依赖的第三方服务(如支付、地图)设置熔断阈值,超时后返回降级数据(如默认地址)。
2. 重试机制
- 对非幂等操作(如支付)使用指数退避重试,避免重复扣款。
- 示例:
```java
@Retryable(value = {TimeoutException.class}, maxAttempts = 3, backoff = @Backoff(delay = 1000))
public void callExternalService() { ... }
```
3. 数据一致性
- 使用TCC(Try-Confirm-Cancel)模式处理分布式事务,如订单创建与库存扣减的原子性。
五、测试与优化
1. 混沌工程
- 模拟服务器宕机、网络分区等故障,验证系统自愈能力。
- 使用Chaos Mesh或Gremlin工具注入故障。
2. A/B测试
- 对比不同异常处理策略对用户留存率的影响(如立即退款 vs. 调货补偿)。
3. 持续优化
- 定期分析异常日志,识别高频问题并优化系统设计(如将热点商品缓存至Redis)。
六、案例参考
- 美团买菜:通过“智能补货算法”将缺货率降低至3%以下,结合“骑手热力图”动态调整配送范围。
- 盒马鲜生:使用“悬挂链系统”减少分拣错误,异常订单自动转入人工复核通道。
通过上述机制,美菜生鲜系统可实现99.9%的订单履约成功率,用户投诉率下降40%,同时降低运维成本。核心在于将异常处理从“被动响应”升级为“主动预防”,结合业务场景设计差异化策略。