一、异常处理流程设计目标
1. 保障系统稳定性:确保生鲜供应链系统在异常情况下仍能维持基本服务
2. 数据完整性:防止因异常导致订单、库存等关键数据丢失或不一致
3. 快速恢复:建立标准化流程缩短系统恢复时间
4. 可追溯性:完整记录异常发生及处理过程
5. 用户体验:最小化对终端用户(商家/消费者)的影响
二、异常分类与分级
1. 按系统模块分类
- 订单系统异常:下单失败、支付异常、订单状态不一致
- 库存系统异常:库存扣减失败、库存同步延迟
- 物流系统异常:配送路线计算失败、司机位置上报异常
- 支付系统异常:第三方支付接口故障、对账不平
- 数据系统异常:数据库连接中断、数据同步失败
2. 按严重程度分级
- P0(致命):系统完全不可用、数据丢失风险
- P1(严重):核心功能不可用、影响大部分用户
- P2(一般):部分功能异常、影响少数用户
- P3(提示):非核心功能异常、不影响主要业务流程
三、异常处理流程架构
1. 异常监测层
- 实时监控:
- 业务指标监控(订单成功率、支付成功率)
- 系统指标监控(CPU、内存、响应时间)
- 日志异常检测(错误日志频率阈值)
- 告警机制:
- 分级告警(邮件/短信/企业微信)
- 告警升级规则(30分钟未处理自动升级)
2. 异常捕获层
- 代码级防护:
```java
try {
// 业务逻辑
} catch (SpecificException e) {
// 记录详细错误信息
log.error("订单处理异常", e);
// 执行补偿操作
compensationService.rollback(orderId);
// 返回友好提示
throw new BusinessException("系统繁忙,请稍后重试");
}
```
- AOP切面捕获:统一处理未捕获异常
- API网关防护:熔断、限流、降级策略
3. 异常处理层
- 自动处理机制:
- 数据库连接中断 → 自动重试(3次,间隔递增)
- 第三方服务超时 → 切换备用接口
- 缓存穿透 → 返回空值并记录日志
- 人工处理流程:
```mermaid
graph TD
A[异常告警] --> B{自动处理成功?}
B -->|是| C[恢复服务]
B -->|否| D[创建工单]
D --> E[分配处理人员]
E --> F[问题诊断]
F --> G{需要升级?}
G -->|是| H[技术负责人介入]
G -->|否| I[实施修复]
I --> J[验证修复]
J --> K[关闭工单]
```
4. 异常恢复层
- 数据修复:
- 订单状态不一致 → 人工核对后修正
- 库存数据异常 → 从主库同步至从库
- 服务恢复:
- 重启服务实例
- 切换至备用集群
- 回滚至上一稳定版本
四、关键场景处理方案
1. 订单支付异常处理
```
1. 用户支付后未收到成功通知
→ 支付结果轮询机制(5分钟内重查3次)
→ 最终一致性处理(T+1日对账后修正)
2. 支付成功但订单状态未更新
→ 补偿任务扫描异常订单
→ 人工核对支付凭证后手动处理
```
2. 库存扣减异常处理
```
1. 超卖场景
→ 预扣减机制(下单时锁定库存)
→ 最终一致性校验(每日全量核对)
2. 库存同步延迟
→ 本地缓存+定时刷新
→ 库存不足时实时查询主库
```
3. 物流配送异常处理
```
1. 司机位置上报失败
→ 离线存储位置数据
→ 网络恢复后批量上传
2. 配送路线计算失败
→ 回退至默认配送方案
→ 记录异常地址供后续优化
```
五、异常处理保障体系
1. 日志系统:
- 结构化日志(TraceID贯穿全链路)
- 异常日志单独存储(保留90天)
2. 监控看板:
- 实时异常数量统计
- 异常处理时效分析
- 高频异常TOP榜
3. 演练机制:
- 每月故障演练(混沌工程)
- 季度灾备演练(同城双活切换)
4. SOP文档:
- 50+常见异常处理手册
- 应急联系人清单(7×24小时)
5. 复盘改进:
- 每次重大异常后48小时内完成复盘
- 根因分析(5Why法)
- 改进措施纳入迭代计划
六、技术实现要点
1. 分布式事务:
```java
// Seata实现分布式事务示例
@GlobalTransactional
public void createOrder(OrderDTO order) {
// 1. 创建订单
orderService.create(order);
// 2. 扣减库存
inventoryService.decrease(order.getSkuId(), order.getQuantity());
// 3. 锁定配送资源
logisticsService.lockResource(order.getDeliveryTime());
}
```
2. 补偿机制:
```yaml
补偿任务配置示例
compensation:
tasks:
- name: order_status_check
cron: 0 */5 * * * ?
maxRetry: 3
callback: /api/compensation/order/fix
```
3. 熔断降级:
```java
// Hystrix熔断配置
@HystrixCommand(
fallbackMethod = "getInventoryFallback",
commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000"),
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "20"),
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50")
}
)
public Inventory getInventory(Long skuId) {
// 调用库存服务
}
```
七、持续优化机制
1. 异常模式分析:
- 每月统计TOP10异常类型
- 识别系统性风险点
2. 自动化改进:
- 高频异常自动生成改进工单
- 自动化测试用例补充
3. 容量规划:
- 根据异常历史数据调整资源配额
- 峰值流量预测模型优化
4. 架构演进:
- 单元化架构改造(减少跨机房调用)
- 边缘计算节点部署(降低中心压力)
通过构建上述异常处理体系,快驴生鲜系统可实现99.95%以上的可用性,确保在生鲜电商这种对时效性要求极高的场景下,仍能提供稳定可靠的服务。