一、异常处理流程设计目标
1. 保障系统稳定性:确保异常情况下系统能够优雅降级而非崩溃
2. 快速定位问题:提供完整的异常追踪信息便于快速排查
3. 用户体验保障:最小化异常对用户操作的影响
4. 数据一致性:防止异常导致数据不一致或丢失
二、异常分类与分级
1. 按业务场景分类
- 用户操作异常:表单验证失败、权限不足等
- 业务流程异常:库存不足、支付失败、物流异常等
- 系统级异常:数据库连接失败、服务不可用、第三方API故障等
2. 按严重程度分级
- 致命错误(S1):系统完全不可用
- 严重错误(S2):核心功能不可用
- 一般错误(S3):非核心功能异常
- 警告(S4):不影响功能但需关注的问题
三、异常处理架构设计
1. 分层处理机制
```
前端展示层 → 业务逻辑层 → 数据访问层 → 基础设施层
↑ ↑ ↑ ↑
异常捕获 → 异常转换 → 异常记录 → 异常上报
```
2. 关键组件
- 异常捕获器:统一捕获各层异常
- 异常转换器:将技术异常转换为业务异常
- 异常记录器:记录完整异常上下文
- 异常通知器:实时告警机制
- 异常恢复器:自动重试/补偿机制
四、详细处理流程
1. 前端异常处理
```javascript
// 示例:前端统一异常处理
window.addEventListener(unhandledrejection, (event) => {
const error = event.reason;
logErrorToServer(error); // 上报错误
showUserFriendlyMessage(error.code); // 用户友好提示
});
axios.interceptors.response.use(
response => response,
error => {
if (error.response) {
// 业务异常处理
handleBusinessError(error.response.data);
} else {
// 系统异常处理
handleSystemError(error);
}
return Promise.reject(error);
}
);
```
2. 后端异常处理(Spring Boot示例)
```java
@ControllerAdvice
public class GlobalExceptionHandler {
// 业务异常处理
@ExceptionHandler(BusinessException.class)
@ResponseBody
public ResponseEntity handleBusinessException(BusinessException ex) {
return ResponseEntity.status(ex.getHttpStatus())
.body(new ErrorResponse(ex.getCode(), ex.getMessage()));
}
// 系统异常处理
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseEntity handleSystemException(Exception ex) {
log.error("System error occurred", ex);
return ResponseEntity.internalServerError()
.body(new ErrorResponse("SYSTEM_ERROR", "系统繁忙,请稍后重试"));
}
// 验证异常处理
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ResponseEntity handleValidationException(MethodArgumentNotValidException ex) {
// 提取验证错误信息
return ResponseEntity.badRequest()
.body(new ErrorResponse("VALIDATION_ERROR", "参数校验失败"));
}
}
```
3. 数据库异常处理
```java
@Repository
public class OrderRepositoryImpl implements OrderRepository {
@PersistenceContext
private EntityManager entityManager;
@Override
@Transactional(rollbackFor = Exception.class)
public void updateOrderStatus(Long orderId, String status) {
try {
Order order = entityManager.find(Order.class, orderId);
order.setStatus(status);
// 其他业务逻辑
} catch (PersistenceException e) {
// 数据库异常处理
if (e.getCause() instanceof SQLException) {
SQLException sqlEx = (SQLException) e.getCause();
if (sqlEx.getErrorCode() == 1205) { // 死锁错误码
throw new BusinessException("ORDER_UPDATE_LOCK", "订单更新冲突,请重试");
}
}
throw new BusinessException("ORDER_UPDATE_FAIL", "订单更新失败");
}
}
}
```
4. 第三方服务异常处理
```java
@Service
public class PaymentService {
@Autowired
private PaymentGatewayClient paymentGatewayClient;
@Retryable(value = {PaymentGatewayException.class},
maxAttempts = 3,
backoff = @Backoff(delay = 1000))
public PaymentResult processPayment(PaymentRequest request) {
try {
return paymentGatewayClient.process(request);
} catch (PaymentGatewayException e) {
// 记录重试日志
log.warn("Payment gateway error, retry {}/3", e);
throw e; // 触发重试机制
}
}
}
```
五、异常监控与告警
1. 实时监控指标:
- 异常发生率(按类型/级别)
- 异常处理时长
- 重试成功率
- 熔断触发次数
2. 告警策略:
```yaml
示例告警规则配置
alerts:
- name: "致命错误告警"
condition: "S1级别异常 > 5次/分钟"
actions:
- 短信通知运维团队
- 钉钉群机器人告警
- 自动创建工单
- name: "业务异常激增告警"
condition: "特定业务异常 > 50次/小时"
actions:
- 邮件通知产品团队
- 自动扩容相关服务
```
3. 日志分析:
- 结构化日志记录(使用ELK或Sentry)
- 异常模式识别
- 根因分析看板
六、异常恢复机制
1. 自动恢复策略:
- 指数退避重试(针对临时性故障)
- 熔断机制(Hystrix或Resilience4j)
- 降级方案(备用流程/静态页面)
2. 人工干预流程:
```mermaid
graph TD
A[异常发生] --> B{自动恢复成功?}
B -->|是| C[恢复服务]
B -->|否| D[触发告警]
D --> E[运维介入]
E --> F{问题定位}
F -->|配置问题| G[修改配置]
F -->|代码问题| H[紧急修复]
F -->|依赖问题| I[联系第三方]
G --> J[验证修复]
H --> J
I --> J
J --> K[恢复服务]
```
七、测试与验证
1. 异常场景测试:
- 模拟数据库连接中断
- 模拟第三方API超时
- 模拟网络分区
- 模拟高并发下的资源耗尽
2. 混沌工程实践:
- 定期进行故障注入测试
- 验证熔断、限流、降级等机制的有效性
- 评估系统在异常情况下的恢复能力
八、持续优化
1. 异常模式分析:
- 定期回顾异常日志
- 识别高频异常场景
- 优化系统设计减少异常发生
2. A/B测试:
- 对新异常处理策略进行灰度发布
- 对比不同处理方案的效果
- 根据数据反馈调整策略
通过构建完善的异常处理流程,快驴生鲜系统能够显著提升系统稳定性、用户体验和运维效率,为生鲜电商业务的高效运行提供坚实保障。