deploy-ease-platform/backend/docs/workflow-engine-design.md

671 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 工作流引擎改造方案设计文档
## 1. 现状分析
### 1.1 现有组件
1. 工作流引擎核心组件
- `AbstractNodeExecutor`: 节点执行器抽象类,提供基础的节点执行逻辑
- `WorkflowGraph`: 工作流图模型,管理节点和转换关系
- `INodeExecutor`: 节点执行器接口
- `WorkflowInstance`: 工作流实例实体
- `NodeInstance`: 节点实例实体
2. 数据模型
```sql
-- 工作流定义表
CREATE TABLE wf_workflow_definition (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
create_by VARCHAR(255) NULL COMMENT '创建人',
create_time DATETIME(6) NULL COMMENT '创建时间',
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0未删除1已删除',
update_by VARCHAR(255) NULL COMMENT '更新人',
update_time DATETIME(6) NULL COMMENT '更新时间',
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
code VARCHAR(100) NOT NULL COMMENT '工作流编码',
name VARCHAR(100) NOT NULL COMMENT '工作流名称',
description VARCHAR(255) NULL COMMENT '工作流描述',
status TINYINT NOT NULL COMMENT '工作流状态0草稿1已发布2已禁用',
version_no INT NOT NULL DEFAULT 1 COMMENT '版本号',
node_config TEXT NULL COMMENT '节点配置(JSON)',
transition_config TEXT NULL COMMENT '流转配置(JSON)',
form_definition TEXT NULL COMMENT '表单定义(JSON)',
graph_definition TEXT NULL COMMENT '图形信息(JSON)',
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用',
CONSTRAINT UK_workflow_definition_code_version UNIQUE (code, version_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流定义表';
-- 工作流实例表
CREATE TABLE wf_workflow_instance (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
create_by VARCHAR(255) NULL COMMENT '创建人',
create_time DATETIME(6) NULL COMMENT '创建时间',
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0未删除1已删除',
update_by VARCHAR(255) NULL COMMENT '更新人',
update_time DATETIME(6) NULL COMMENT '更新时间',
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
workflow_definition_id BIGINT NOT NULL COMMENT '工作流定义ID',
business_key VARCHAR(100) NOT NULL COMMENT '业务标识',
status TINYINT NOT NULL COMMENT '状态0已创建1等待执行2执行中3已完成4执行失败5已取消6已暂停7已终止',
start_time DATETIME(6) NULL COMMENT '开始时间',
end_time DATETIME(6) NULL COMMENT '结束时间',
error TEXT NULL COMMENT '错误信息',
CONSTRAINT FK_workflow_instance_definition FOREIGN KEY (workflow_definition_id) REFERENCES wf_workflow_definition (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流实例表';
-- 节点实例表
CREATE TABLE wf_node_instance (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
create_by VARCHAR(255) NULL COMMENT '创建人',
create_time DATETIME(6) NULL COMMENT '创建时间',
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0未删除1已删除',
update_by VARCHAR(255) NULL COMMENT '更新人',
update_time DATETIME(6) NULL COMMENT '更新时间',
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
workflow_instance_id BIGINT NOT NULL COMMENT '工作流实例ID',
node_id VARCHAR(100) NOT NULL COMMENT '节点ID',
node_type TINYINT NOT NULL COMMENT '节点类型0开始节点1结束节点2任务节点3网关节点4子流程节点5Shell脚本节点6审批节点7Jenkins任务节点8Git操作节点',
name VARCHAR(100) NOT NULL COMMENT '节点名称',
status TINYINT NOT NULL COMMENT '状态0已创建1等待执行2执行中3已完成4执行失败5已取消6已暂停7已终止',
start_time DATETIME(6) NULL COMMENT '开始时间',
end_time DATETIME(6) NULL COMMENT '结束时间',
config TEXT NULL COMMENT '节点配置(JSON)',
description TEXT NULL COMMENT '节点描述',
input TEXT NULL COMMENT '输入参数(JSON)',
output TEXT NULL COMMENT '输出结果(JSON)',
error TEXT NULL COMMENT '错误信息',
pre_node_id VARCHAR(100) NULL COMMENT '前置节点ID',
CONSTRAINT FK_node_instance_workflow FOREIGN KEY (workflow_instance_id) REFERENCES wf_workflow_instance (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='节点实例表';
-- 工作流变量表
CREATE TABLE wf_workflow_variable (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
create_by VARCHAR(255) NULL COMMENT '创建人',
create_time DATETIME(6) NULL COMMENT '创建时间',
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0未删除1已删除',
update_by VARCHAR(255) NULL COMMENT '更新人',
update_time DATETIME(6) NULL COMMENT '更新时间',
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
workflow_instance_id BIGINT NOT NULL COMMENT '工作流实例ID',
name VARCHAR(100) NOT NULL COMMENT '变量名',
value TEXT NULL COMMENT '变量值',
type VARCHAR(20) NOT NULL COMMENT '变量类型',
CONSTRAINT FK_workflow_variable_instance FOREIGN KEY (workflow_instance_id) REFERENCES wf_workflow_instance (id),
CONSTRAINT UK_workflow_variable_instance_name UNIQUE (workflow_instance_id, name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流变量表';
-- 工作流日志表
CREATE TABLE wf_log (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
workflow_instance_id BIGINT NOT NULL COMMENT '工作流实例ID',
node_id VARCHAR(50) NULL COMMENT '节点ID',
level VARCHAR(10) NOT NULL COMMENT '日志级别',
message TEXT NOT NULL COMMENT '日志内容',
detail TEXT,
create_time DATETIME NOT NULL,
create_by VARCHAR(50),
update_time DATETIME,
update_by VARCHAR(50),
version INT DEFAULT 0,
deleted BOOLEAN DEFAULT FALSE,
CONSTRAINT FK_workflow_log_instance FOREIGN KEY (workflow_instance_id) REFERENCES wf_workflow_instance (id)
);
-- 工作流权限表
CREATE TABLE wf_workflow_permission (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
workflow_definition_id BIGINT NOT NULL COMMENT '工作流定义ID',
type VARCHAR(50) NOT NULL COMMENT '权限类型',
user_id BIGINT COMMENT '用户ID',
role_id BIGINT COMMENT '角色ID',
department_id BIGINT COMMENT '部门ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
create_by BIGINT NOT NULL COMMENT '创建人',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
update_by BIGINT NOT NULL COMMENT '更新人',
version INT NOT NULL DEFAULT 0 COMMENT '版本号',
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
INDEX idx_workflow_definition_id (workflow_definition_id),
INDEX idx_user_id (user_id),
INDEX idx_role_id (role_id),
INDEX idx_department_id (department_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工作流权限';
-- 节点类型表
CREATE TABLE wf_node_type (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
create_by VARCHAR(255) NULL COMMENT '创建人',
create_time DATETIME(6) NULL COMMENT '创建时间',
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0未删除1已删除',
update_by VARCHAR(255) NULL COMMENT '更新人',
update_time DATETIME(6) NULL COMMENT '更新时间',
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
code VARCHAR(100) NOT NULL COMMENT '节点类型编码',
name VARCHAR(100) NOT NULL COMMENT '节点类型名称',
description TEXT NULL COMMENT '节点类型描述',
category VARCHAR(50) NOT NULL COMMENT '节点类型分类',
icon VARCHAR(100) NULL COMMENT '节点图标',
color VARCHAR(20) NULL COMMENT '节点颜色',
executors TEXT NULL COMMENT '执行器列表(JSON)',
config_schema TEXT NULL COMMENT '节点配置模式(JSON)',
default_config TEXT NULL COMMENT '默认配置(JSON)',
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用',
CONSTRAINT UK_node_type_code UNIQUE (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='节点类型表';
## 2. 改造目标
### 2.1 核心需求
1. 支持审批节点
2. 实现实时日志
3. 工作流状态持久化
4. 支持程序重启后恢复执行
### 2.2 技术要求
1. 遵循现有代码规范
2. 保持向后兼容
3. 确保高可用性
4. 支持并发执行
## 3. 详细设计
### 3.1 数据库改造
#### 3.1.1 修改现有表
```sql
-- 修改工作流实例表,添加执行状态字段
ALTER TABLE wf_workflow_instance
ADD COLUMN current_node_id varchar(100) COMMENT '当前执行的节点ID',
ADD COLUMN execution_status varchar(32) COMMENT '执行状态';
-- 修改节点实例表,添加重试相关字段
ALTER TABLE wf_node_instance
ADD COLUMN retry_count INT DEFAULT 0 COMMENT '重试次数',
ADD COLUMN max_retry_count INT DEFAULT 0 COMMENT '最大重试次数',
ADD COLUMN retry_interval INT DEFAULT 0 COMMENT '重试间隔(秒)',
ADD COLUMN last_retry_time TIMESTAMP COMMENT '最后重试时间';
```
#### 3.1.2 新增审批相关表
```sql
-- 审批配置表
CREATE TABLE wf_approval_config (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
create_by VARCHAR(255) NULL COMMENT '创建人',
create_time DATETIME(6) NULL COMMENT '创建时间',
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0未删除1已删除',
update_by VARCHAR(255) NULL COMMENT '更新人',
update_time DATETIME(6) NULL COMMENT '更新时间',
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
project_id VARCHAR(64) NOT NULL COMMENT '项目ID',
env_type VARCHAR(20) NOT NULL COMMENT '环境类型',
approval_type VARCHAR(20) NOT NULL COMMENT '审批类型SINGLE/MULTI/ANY',
approver_ids TEXT NOT NULL COMMENT '审批人ID列表(JSON)',
required_count INT NOT NULL COMMENT '需要的审批人数',
timeout_hours INT NOT NULL COMMENT '审批超时时间(小时)',
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用',
CONSTRAINT UK_approval_config_project_env UNIQUE (project_id, env_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批配置表';
-- 审批实例表
CREATE TABLE wf_approval_instance (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
create_by VARCHAR(255) NULL COMMENT '创建人',
create_time DATETIME(6) NULL COMMENT '创建时间',
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0未删除1已删除',
update_by VARCHAR(255) NULL COMMENT '更新人',
update_time DATETIME(6) NULL COMMENT '更新时间',
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
node_instance_id VARCHAR(64) NOT NULL COMMENT '节点实例ID',
workflow_instance_id VARCHAR(64) NOT NULL COMMENT '工作流实例ID',
project_id VARCHAR(64) NOT NULL COMMENT '项目ID',
env_type VARCHAR(20) NOT NULL COMMENT '环境类型',
status VARCHAR(20) NOT NULL COMMENT '状态PENDING/APPROVED/REJECTED/TIMEOUT',
initiator_id VARCHAR(64) NOT NULL COMMENT '发起人ID',
approved_time DATETIME(6) NULL COMMENT '审批通过时间',
approver_id VARCHAR(64) NULL COMMENT '审批人ID',
comment TEXT NULL COMMENT '审批意见',
INDEX idx_workflow_instance (workflow_instance_id),
INDEX idx_node_instance (node_instance_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批实例表';
-- 审批记录表
CREATE TABLE wf_approval_record (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
create_by VARCHAR(255) NULL COMMENT '创建人',
create_time DATETIME(6) NULL COMMENT '创建时间',
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0未删除1已删除',
update_by VARCHAR(255) NULL COMMENT '更新人',
update_time DATETIME(6) NULL COMMENT '更新时间',
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
approval_instance_id BIGINT NOT NULL COMMENT '审批实例ID',
approver_id VARCHAR(64) NOT NULL COMMENT '审批人ID',
action VARCHAR(20) NOT NULL COMMENT '审批动作APPROVE/REJECT',
comment TEXT NULL COMMENT '审批意见',
CONSTRAINT FK_approval_record_instance FOREIGN KEY (approval_instance_id)
REFERENCES wf_approval_instance (id),
INDEX idx_approval_instance (approval_instance_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批记录表';
### 3.2 代码改造
#### 3.2.1 新增枚举
```java
/**
* 节点类型枚举扩展
*/
public enum NodeTypeEnum {
SCRIPT, // 脚本节点
HTTP, // HTTP请求节点
APPROVAL, // 审批节点
// ... 其他节点类型
}
/**
* 审批类型枚举
*/
public enum ApprovalTypeEnum {
SINGLE, // 单人审批
MULTI, // 多人会签
ANY // 任意人审批
}
/**
* 审批状态枚举
*/
public enum ApprovalStatusEnum {
PENDING, // 待审批
APPROVED, // 已通过
REJECTED, // 已拒绝
TIMEOUT // 已超时
}
```
#### 3.2.2 实体类
```java
/**
* 审批配置实体
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "wf_approval_config")
@LogicDelete
public class ApprovalConfig extends BaseEntity<Long> {
@Column(nullable = false)
private String projectId;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private String envType;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private ApprovalTypeEnum approvalType;
@Column(nullable = false)
private String approverIds;
@Column(nullable = false)
private Integer requiredCount;
@Column(nullable = false)
private Integer timeoutHours;
}
/**
* 审批实例实体
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "wf_approval_instance")
@LogicDelete
public class ApprovalInstance extends BaseEntity<Long> {
@Column(nullable = false)
private String nodeInstanceId;
@Column(nullable = false)
private String workflowInstanceId;
@Column(nullable = false)
private String projectId;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private String envType;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private ApprovalStatusEnum status;
@Column(nullable = false)
private String initiatorId;
private LocalDateTime approvedTime;
private String approverId;
private String comment;
}
```
#### 3.2.3 Repository接口
```java
/**
* 审批配置Repository
*/
@Repository
public interface IApprovalConfigRepository extends IBaseRepository<ApprovalConfig, Long> {
ApprovalConfig findByProjectIdAndEnvType(String projectId, String envType);
}
/**
* 审批实例Repository
*/
@Repository
public interface IApprovalInstanceRepository extends IBaseRepository<ApprovalInstance, Long> {
List<ApprovalInstance> findByStatus(ApprovalStatusEnum status);
ApprovalInstance findByWorkflowInstanceIdAndNodeInstanceId(String workflowInstanceId, String nodeInstanceId);
}
```
#### 3.2.4 Service接口
```java
/**
* 审批服务接口
*/
public interface IApprovalService {
/**
* 创建审批实例
*/
ApprovalInstance createApprovalInstance(String nodeInstanceId, String workflowInstanceId,
String projectId, ApprovalConfig config);
/**
* 处理审批结果
*/
void handleApproval(Long approvalInstanceId, String approverId,
boolean approved, String comment);
/**
* 检查审批状态
*/
ApprovalStatusEnum checkApprovalStatus(Long approvalInstanceId);
/**
* 发送审批通知
*/
void sendApprovalNotifications(ApprovalInstance instance);
}
```
#### 3.2.5 工作流执行管理器
```java
/**
* 工作流执行管理器
*/
@Component
@Slf4j
public class WorkflowExecutionManager {
@Resource
private ThreadPoolExecutor workflowExecutor;
@Resource
private WorkflowInstanceRepository instanceRepository;
@PostConstruct
public void init() {
// 初始化线程池
workflowExecutor = new ThreadPoolExecutor(
10, 20, 60L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100),
new ThreadFactoryBuilder().setNameFormat("workflow-executor-%d").build()
);
// 恢复运行中的工作流
resumeRunningWorkflows();
}
// ... 其他方法实现
}
```
#### 3.2.6 审批节点执行器
```java
/**
* 审批节点执行器
*/
@Component
@Slf4j
public class ApprovalNodeExecutor extends AbstractNodeExecutor {
@Resource
private IApprovalService approvalService;
@Override
public NodeTypeEnum getNodeType() {
return NodeTypeEnum.APPROVAL;
}
@Override
protected void doExecute(WorkflowInstance workflowInstance, NodeInstance nodeInstance) {
// ... 实现审批节点执行逻辑
}
}
```
### 3.3 实时日志实现
#### 3.3.1 日志收集器
```java
/**
* 日志收集器
*/
@Component
@Slf4j
public class ProcessLogManager {
@Resource
private WorkflowLogService workflowLogService;
private final Map<String, CircularBuffer> logBuffers = new ConcurrentHashMap<>();
private final Map<String, List<Consumer<String>>> subscribers = new ConcurrentHashMap<>();
// ... 实现日志收集和推送逻辑
}
```
#### 3.3.2 SSE控制器
```java
/**
* 日志SSE控制器
*/
@RestController
@RequestMapping("/api/v1/logs")
@Tag(name = "工作流日志", description = "工作流日志相关接口")
public class LogController {
@GetMapping(value = "/{nodeInstanceId}/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter streamLogs(@PathVariable String nodeInstanceId) {
// ... 实现SSE日志推送
}
}
```
## 4. 开发计划
### 4.1 核心功能改造
#### 4.1.1 工作流引擎核心
1. **状态管理优化**
- 实现工作流实例状态机,支持更细粒度的状态转换
- 增加节点实例的状态追踪和历史记录
- 添加工作流暂停/恢复机制
2. **并发控制增强**
- 实现基于数据库的分布式锁
- 添加节点级别的并发控制
- 优化多实例并行执行的性能
3. **错误处理机制**
- 完善节点执行失败的重试机制
- 实现节点回滚功能
- 添加全局异常处理和日志记录
- 支持自定义错误处理策略
#### 4.1.2 审批功能实现
1. **审批节点开发**
- 实现审批节点执行器
- 支持多种审批模式(单人、多人、任意人)
- 添加审批超时处理机制
- 实现审批回调通知
2. **审批流程管理**
- 开发审批配置管理接口
- 实现审批人动态配置
- 支持审批规则的版本控制
- 添加审批历史查询功能
3. **审批UI组件**
- 开发审批任务列表
- 实现审批详情页面
- 添加审批操作接口
- 支持审批意见和附件上传
### 4.2 新增功能
#### 4.2.1 工作流监控
1. **实时监控**
- 实现工作流执行状态实时展示
- 添加节点执行时间统计
- 支持执行瓶颈分析
- 实现资源使用监控
2. **报警机制**
- 添加执行超时告警
- 实现错误率监控告警
- 支持自定义告警规则
- 集成多种告警通道邮件、短信、webhook等
#### 4.2.2 工作流分析
1. **统计分析**
- 实现工作流执行趋势分析
- 添加节点执行效率分析
- 支持审批效率统计
- 开发自定义报表功能
2. **可视化展示**
- 实现工作流执行路径可视化
- 添加状态转换图表展示
- 支持审批流程可视化
- 开发数据大屏功能
### 4.3 性能优化
1. **数据库优化**
- 优化表结构和索引
- 实现分库分表方案
- 添加缓存机制
- 优化大数据量查询性能
2. **执行引擎优化**
- 优化线程池管理
- 实现节点执行预热
- 添加资源限流机制
- 优化内存使用
### 4.4 开发排期
#### Phase 1: 核心功能改造4周
- Week 1-2: 工作流引擎核心改造
- Week 3-4: 审批功能实现
#### Phase 2: 新增功能开发3周
- Week 1-2: 工作流监控功能
- Week 3: 工作流分析功能
#### Phase 3: 性能优化2周
- Week 1: 数据库优化
- Week 2: 执行引擎优化
#### Phase 4: 测试与上线1周
- Day 1-3: 功能测试与bug修复
- Day 4-5: 性能测试与优化
- Day 6-7: 准备上线与部署
### 4.5 风险评估
1. **技术风险**
- 分布式环境下的状态一致性
- 大规模并发下的性能表现
- 复杂工作流的稳定性保证
2. **项目风险**
- 开发周期可能超出预期
- 新旧版本兼容性问题
- 现有业务的平滑迁移
### 4.6 后续规划
1. **功能扩展**
- 支持更多类型的节点
- 添加工作流模板功能
- 实现工作流版本管理
- 支持跨系统工作流
2. **生态建设**
- 开发SDK工具包
- 提供更多开箱即用的组件
- 完善开发文档
- 建设示例中心
## 5. 注意事项
1. 数据迁移
- 需要处理已有的运行中工作流
- 确保数据一致性
2. 性能考虑
- 控制线程池大小
- 合理设置日志缓冲区
- 定期清理历史数据
3. 监控告警
- 添加工作流执行监控
- 配置审批超时告警
- 监控系统资源使用
## 6. 后续优化
1. 功能优化
- 支持更多审批策略
- 优化日志查询性能
- 添加工作流统计分析
2. 性能优化
- 引入分布式锁
- 优化数据库查询
- 添加缓存机制
3. 运维优化
- 完善监控指标
- 优化日志清理
- 添加性能诊断工具