一、异常处理机制的重要性
在生鲜电商系统中,异常处理机制是保障系统稳定运行、提升用户体验和业务连续性的关键组成部分。美菜生鲜系统作为B2B生鲜供应链平台,需要处理复杂的订单、库存、物流等环节,任何异常都可能导致重大业务损失。
二、核心业务场景的异常分类
1. 订单处理异常
- 库存不足导致的订单创建失败
- 支付异常(超时、失败、风控拦截)
- 地址无效或配送区域不覆盖
- 订单取消/修改时的数据不一致
2. 供应链异常
- 供应商交货延迟或短缺
- 质检不合格导致的退货
- 仓储管理中的库存差异
- 冷链运输中的温度异常
3. 物流配送异常
- 配送超时
- 商品损坏
- 配送地址无法到达
- 签收异常(拒收、代收问题)
4. 系统级异常
- 微服务间调用失败
- 数据库连接中断
- 第三方服务不可用(支付、短信、地图等)
- 性能瓶颈导致的超时
三、异常处理机制设计原则
1. 分级处理原则:根据异常严重程度分级处理(警告、错误、严重错误)
2. 幂等性设计:确保异常恢复后操作可安全重试
3. 最终一致性:允许短暂不一致,通过补偿机制保证数据最终正确
4. 可追溯性:完整记录异常上下文信息
5. 自动化与人工干预结合:自动处理常见异常,复杂异常转人工
四、具体实现方案
1. 异常捕获与日志体系
```java
// 示例:统一异常捕获处理
@RestControllerAdvice
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(BusinessException.class)
public ResponseEntity handleBusinessException(BusinessException ex) {
logger.error("Business exception occurred: {}", ex.getMessage(), ex);
return ResponseEntity.status(ex.getHttpStatus())
.body(new ErrorResponse(ex.getCode(), ex.getMessage()));
}
@ExceptionHandler(Exception.class)
public ResponseEntity handleUnexpectedException(Exception ex) {
logger.error("Unexpected exception occurred", ex);
// 发送告警通知
AlertService.sendAlert("系统异常", ex.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("SYSTEM_ERROR", "系统繁忙,请稍后重试"));
}
}
```
2. 订单处理异常处理流程
1. 库存预扣减:下单时先预扣减库存,设置15分钟支付超时
2. 支付异常处理:
- 支付失败:自动解锁库存,记录失败原因
- 支付超时:定时任务检查未支付订单,自动取消并回滚库存
3. 订单状态机:
```mermaid
graph TD
A[待支付] -->|支付成功| B[已支付]
A -->|支付超时/取消| C[已取消]
B -->|出库成功| D[已出库]
B -->|出库失败| E[出库异常]
D -->|配送中| F[配送中]
F -->|签收成功| G[已完成]
F -->|签收异常| H[异常订单]
```
3. 供应链异常补偿机制
- 供应商交货延迟:
- 自动触发备选供应商查询
- 通知采购人员人工干预
- 更新预计到货时间并同步给客户
- 质检异常处理:
- 自动生成退货单
- 触发补货流程
- 记录供应商质量评分
4. 物流异常处理
- 配送超时:
- 自动升级为加急配送
- 通知客户预计到达时间
- 补偿优惠券
- 商品损坏:
- 配送员现场拍照上传
- 自动生成退款/补发工单
- 触发质量追溯流程
5. 系统级异常恢复
- 熔断机制:使用Hystrix或Sentinel实现服务降级
- 重试策略:
```java
@Retryable(value = {RemoteAccessException.class},
maxAttempts = 3,
backoff = @Backoff(delay = 1000))
public Order createOrder(OrderRequest request) {
// 远程调用订单服务
}
```
- 死信队列:处理MQ消费失败的消息
五、监控与告警体系
1. 实时监控面板:
- 异常类型分布
- 异常发生频率趋势
- 关键业务指标异常检测
2. 告警规则配置:
- 同一类型异常5分钟内发生10次 → 严重告警
- 关键服务响应时间超过阈值 → 警告告警
- 库存差异率超过5% → 业务告警
3. 告警渠道:
- 企业微信/钉钉机器人
- 短信+邮件
- 电话告警(针对P0级故障)
六、测试与演练
1. 混沌工程实践:
- 模拟数据库故障
- 注入网络延迟
- 杀死关键服务实例
2. 异常场景测试用例:
- 库存扣减后支付失败恢复
- 订单取消时的库存回滚
- 物流信息同步中断恢复
3. 灾备演练:
- 区域性数据中心故障切换
- 关键服务降级演练
七、持续优化机制
1. 异常根因分析:
- 每周异常复盘会议
- 鱼骨图分析高频异常
2. 处理流程迭代:
- 根据业务变化更新异常处理SOP
- 自动化脚本优化
3. 技术债务清理:
- 定期重构易出异常的代码模块
- 升级依赖库版本修复已知问题
通过完善的异常处理机制,美菜生鲜系统能够实现:
- 99.9%以上的系统可用性
- 异常恢复时间(MTTR)控制在15分钟内
- 用户投诉率降低40%以上
- 运营成本节约20%通过自动化处理
建议每季度进行异常处理机制的评估和优化,确保系统能够适应业务快速发展带来的新挑战。