LoadUp Framework - 架构设计文档¶
1. 架构概述¶
LoadUp Framework 是一个基于 Spring Boot 3.4.3 的企业级微服务开发框架,采用 Monorepo(单仓库)多模块架构,提供可复用的基础组件和最佳实践,帮助团队快速构建高质量的企业应用。
1.1 设计理念¶
- 模块化设计: 清晰的模块边界,单一职责原则
- 依赖倒置: 高层模块不依赖低层模块,都依赖抽象
- 可扩展性: 插件化架构,支持业务定制扩展
- 开箱即用: 自动配置,最小化配置原则
- 企业级: 高性能、高可用、可观测、安全
1.2 技术栈¶
| 技术领域 | 技术选型 | 版本 |
|---|---|---|
| 编程语言 | Java | 21 |
| 应用框架 | Spring Boot | 3.4.3 |
| 持久层框架 | MyBatis-Flex | 1.11.5 |
| 数据库 | MySQL | 8.0+ |
| 缓存 | Redis (Redisson) | - |
| 消息队列 | (待集成) | - |
| 服务治理 | Dubbo | 3.2.8 |
| 链路追踪 | OpenTelemetry | 1.57.0 |
| 任务调度 | Quartz/XXL-Job/PowerJob | - |
| 认证授权 | JWT | - |
| API 文档 | OpenAPI (Swagger) | v3 |
| 测试框架 | JUnit 5, Mockito, Testcontainers | - |
| 构建工具 | Maven | 3.6+ |
2. 模块架构¶
2.1 整体架构图¶
┌─────────────────────────────────────────────────────────────┐
│ LoadUp Framework │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Application │ │ Gateway │ │
│ │ (启动器/主应用) │◄────────►│ (API 网关) │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────┐ │
│ │ Modules (业务模块) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ UPMS │ │ ... │ │ ... │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └────────────────────┬──────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Components (技术组件层) │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │Database│ │ Cache │ │Scheduler│ │ Tracer │ ... │ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ │ │
│ └────────────────────┬────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Commons (通用基础层) │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ API │ │ DTO │ │ Util │ │ │
│ │ └────────┘ └────────┘ └────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Dependencies (依赖管理 BOM) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Testify (测试框架 - 独立) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
2.2 模块依赖关系¶
严格单向依赖规则:
dependencies (基础)
↑
commons (通用层)
↑
components (组件层)
↑
modules (业务模块层)
↑
application (应用层)
gateway (独立) ← → commons, components
testify (独立测试框架)
依赖原则: 1. ✅ 下层模块可以被上层模块依赖 2. ❌ 禁止反向依赖(上层不能被下层依赖) 3. ❌ 禁止跨层依赖(必须逐层依赖) 4. ❌ 严禁循环依赖
2.3 核心模块说明¶
2.3.1 loadup-dependencies¶
职责: 统一依赖版本管理(BOM)
内容: - 所有第三方依赖版本定义 - LoadUp 框架内部模块版本管理 - Maven 插件配置(Spotless、Compiler、Test 等)
特点:
- 采用 <dependencyManagement> 统一管理版本
- 子模块通过 <scope>import</scope> 引入
- 确保整个框架版本一致性
2.3.2 loadup-commons¶
职责: 提供通用的基础工具类和类型定义
子模块:
- loadup-commons-api: 通用接口、异常、枚举定义
- loadup-commons-dto: 数据传输对象、Result 封装、分页对象
- loadup-commons-util: 工具类(日期、字符串、集合、JSON 等)
特点: - 零业务逻辑 - 高度可复用 - 最小依赖(避免引入过多第三方库)
2.3.3 loadup-components¶
职责: 提供可复用的技术组件,屏蔽底层技术细节
子模块:
| 组件 | 功能 | 说明 |
|---|---|---|
database |
数据库访问 | MyBatis-Flex 集成、审计、多租户、逻辑删除 |
cache |
缓存抽象 | 支持 Redis/Caffeine,统一缓存接口 |
captcha |
验证码 | 图形验证码生成与验证 |
scheduler |
任务调度 | 支持 Quartz/XXL-Job/PowerJob 多种实现 |
tracer |
链路追踪 | 基于 OpenTelemetry 的分布式追踪 |
dfs |
分布式文件存储 | S3 兼容的文件存储抽象 |
liquibase |
数据库版本管理 | Liquibase 集成 |
extension |
扩展点机制 | 类似 SPI 的扩展点框架 |
gotone |
多租户支持 | 租户隔离与上下文管理 |
testcontainers |
集成测试支持 | Testcontainers 集成 |
web |
Web 增强 | 全局异常处理、统一响应等 |
设计原则: - 抽象优先: 定义统一接口,支持多种实现 - 自动配置: 利用 Spring Boot Auto-Configuration - 零侵入: 不强制业务代码依赖特定实现 - 开关控制: 通过配置启用/禁用功能
2.3.4 loadup-modules¶
职责: 业务功能模块
子模块:
- loadup-modules-upms: 用户权限管理系统(User Permission Management System)
- 用户管理
- 角色管理
- 权限管理
- 菜单管理
- 部门管理
- 数据权限
架构风格: COLA 4.0 分层架构
- adapter: 适配器层(REST API、DTO 转换)
- application: 应用层(Command/Query Handler)
- domain: 领域层(实体、值对象、Repository 接口)
- infrastructure: 基础设施层(Repository 实现、外部服务调用)
2.3.5 loadup-gateway¶
职责: API 网关
子模块:
- loadup-gateway-facade: API 定义
- loadup-gateway-core: 核心实现
- loadup-gateway-starter: Spring Boot Starter
- plugins/: 插件实现
- proxy-http-plugin: HTTP 代理
- proxy-rpc-plugin: RPC 代理(Dubbo)
- proxy-springbean-plugin: Spring Bean 代理
- repository-file-plugin: 文件配置存储
- repository-database-plugin: 数据库配置存储
特点: - 插件化架构 - 支持多种代理类型 - 动态路由配置
2.3.6 loadup-testify¶
职责: 声明式自动化测试框架
特点: - YAML 驱动的测试定义 - 动态 Mock(基于 AOP) - 数据驱动测试(TestNG DataProvider) - 复杂断言支持(JSONAssert、JsonPath)
子模块:
- loadup-testify-core: 核心引擎
- loadup-testify-assert-engine: 断言引擎
- loadup-testify-mock-engine: Mock 引擎
- loadup-testify-data-engine: 数据引擎
- loadup-testify-infra-container: 基础设施容器
- loadup-testify-spring-boot-starter: Spring Boot 集成
2.3.7 loadup-application¶
职责: 应用启动器
内容: - Spring Boot 主应用类 - 配置文件(application.yml) - 聚合所有业务模块
3. 分层架构¶
3.1 整体分层¶
┌─────────────────────────────────────────┐
│ 表现层 (Presentation) │ Controller, REST API
├─────────────────────────────────────────┤
│ 应用层 (Application) │ Service, 业务编排
├─────────────────────────────────────────┤
│ 领域层 (Domain) │ Entity, VO, Repository Interface
├─────────────────────────────────────────┤
│ 基础设施层 (Infrastructure) │ Mapper, Cache, External API
├─────────────────────────────────────────┤
│ 数据层 (Data) │ MySQL, Redis
└─────────────────────────────────────────┘
3.2 UPMS 模块分层(COLA 4.0)¶
┌─────────────────────────────────────────┐
│ Adapter Layer (upms-adapter) │
│ - Controller (REST API) │
│ - DTO Converter │
│ - Request/Response DTO │
└────────────────┬────────────────────────┘
│ depends on
┌────────────────▼────────────────────────┐
│ Application Layer (upms-application) │
│ - Command Handler │
│ - Query Handler │
│ - Service (业务编排) │
└────────────────┬────────────────────────┘
│ depends on
┌────────────────▼────────────────────────┐
│ Domain Layer (upms-domain) │
│ - Entity (充血模型) │
│ - Value Object │
│ - Domain Service │
│ - Repository Interface │
└────────────────▲────────────────────────┘
│ implemented by
┌────────────────┴────────────────────────┐
│ Infrastructure Layer (upms-infrastructure)│
│ - Repository Impl (MyBatis-Flex Mapper)│
│ - Cache Impl │
│ - External API Client │
│ - Config │
└─────────────────────────────────────────┘
4. 核心设计模式¶
4.1 策略模式 (Strategy Pattern)¶
应用场景: - ID 生成策略(Random/UUID v4/UUID v7/Snowflake) - 缓存实现策略(Redis/Caffeine) - 调度器实现策略(Quartz/XXL-Job/PowerJob)
实现方式:
// 定义策略接口
public interface IdGenerator {
String generate();
}
// 多种实现
@Component("randomIdGenerator")
public class RandomIdGenerator implements IdGenerator { ... }
@Component("snowflakeIdGenerator")
public class SnowflakeIdGenerator implements IdGenerator { ... }
// 策略选择
@Autowired
@Qualifier("${loadup.database.id-generator.strategy}")
private IdGenerator idGenerator;
4.2 模板方法模式 (Template Method Pattern)¶
应用场景: - BaseMapper 提供通用 CRUD 方法 - 测试基类提供测试流程模板
4.3 观察者模式 (Observer Pattern)¶
应用场景: - 审计回调(BeforeSaveCallback) - 事件驱动(Spring Event)
4.4 代理模式 (Proxy Pattern)¶
应用场景: - Gateway 路由代理 - AOP 拦截(事务、缓存、日志) - Testify Mock 拦截
4.5 工厂模式 (Factory Pattern)¶
应用场景: - Spring Bean 工厂 - 插件工厂(Gateway Plugin Factory)
5. 数据库设计规范¶
5.1 表命名规范¶
- 系统表前缀:
sys_(如sys_config) - 业务表前缀:
t_(如t_user,t_order) - 关联表:
{table1}_{table2}(如user_role) - 命名风格: snake_case(小写 + 下划线)
5.2 字段规范¶
基础审计字段(所有表必须包含):
id VARCHAR(64) NOT NULL PRIMARY KEY COMMENT '主键ID',
created_by VARCHAR(64) COMMENT '创建人',
created_time DATETIME COMMENT '创建时间',
updated_by VARCHAR(64) COMMENT '更新人',
updated_time DATETIME COMMENT '更新时间'
多租户字段(需要租户隔离的表):
逻辑删除字段(需要软删除的表):
5.3 索引规范¶
- 主键: 使用字符串 ID(由 ID 生成器生成)
- 唯一索引:
uk_{column_name} - 普通索引:
idx_{column_name} - 联合索引:
idx_{table}_{column1}_{column2} - 多租户索引: 必须在
tenant_id上建索引
6. API 设计规范¶
6.1 RESTful API 规范¶
URL 设计:
GET /api/{module}/{resource} # 列表查询
GET /api/{module}/{resource}/{id} # 单个查询
POST /api/{module}/{resource} # 创建
PUT /api/{module}/{resource}/{id} # 更新
DELETE /api/{module}/{resource}/{id} # 删除
统一响应格式:
6.2 分页查询¶
请求参数:
public class PageQuery {
private Integer pageNum = 1; // 页码(从 1 开始)
private Integer pageSize = 10; // 每页大小
private String sortBy; // 排序字段
private String sortOrder; // 排序方向(asc/desc)
}
响应格式:
{
"code": "0",
"message": "success",
"data": {
"records": [ ... ],
"total": 100,
"pageNum": 1,
"pageSize": 10,
"pages": 10
}
}
7. 安全设计¶
7.1 认证与授权¶
- 认证方式: JWT Token
- Token 存储: Header:
Authorization: Bearer {token} - 权限控制: 基于 RBAC(角色 + 权限)
- 数据权限: 支持多级数据范围(全部/部门/本人)
7.2 敏感信息保护¶
- 密码字段必须标注
@JsonIgnore - 敏感信息脱敏(手机号、身份证、邮箱)
- 日志中禁止打印 Token 和密码
7.3 SQL 注入防护¶
- 严禁字符串拼接 SQL
- 使用 MyBatis-Flex QueryWrapper 或参数化查询
- 对用户输入进行严格校验
8. 性能优化策略¶
8.1 缓存策略¶
多级缓存:
缓存模式: - Cache-Aside(旁路缓存) - Read-Through(读穿透) - Write-Through(写穿透)
8.2 数据库优化¶
- 连接池: HikariCP(默认)
- 批量操作:
insertBatch/updateBatch - 分页查询: MyBatis-Flex Page 对象
- 慢查询监控: p6spy 日志监控
8.3 并发控制¶
- 乐观锁(version 字段)
- 分布式锁(Redis/Redisson)
- 限流(Resilience4j RateLimiter)
9. 可观测性¶
9.1 日志¶
- 框架: SLF4J + Logback
- 级别: ERROR < WARN < INFO < DEBUG < TRACE
- 格式: JSON 格式(方便日志采集)
- MDC: 请求 ID、用户 ID、租户 ID
9.2 链路追踪¶
- 框架: OpenTelemetry
- 集成: Jaeger/Zipkin
- 采样率: 可配置
9.3 指标监控¶
- Spring Boot Actuator
- Micrometer + Prometheus
- 自定义业务指标
10. 测试策略¶
10.1 测试金字塔¶
┌──────────────┐
│ End-to-End │ (少量, Testify 集成测试)
└──────────────┘
┌────────────────┐
│ Integration │ (适量, Testcontainers)
└────────────────┘
┌──────────────────┐
│ Unit Tests │ (大量, JUnit + Mockito)
└──────────────────┘
10.2 测试工具¶
- 单元测试: JUnit 5 + Mockito + AssertJ
- 集成测试: Testcontainers (MySQL, Redis)
- 接口测试: Testify (YAML 驱动)
- 覆盖率: JaCoCo
11. 部署架构¶
11.1 容器化部署¶
┌────────────────────────────────────────┐
│ Kubernetes Cluster │
│ ┌──────────┐ ┌──────────┐ │
│ │ App Pod │ │ App Pod │ ... │
│ └────┬─────┘ └────┬─────┘ │
│ │ │ │
│ ┌────▼─────────────▼──────┐ │
│ │ Service (LB) │ │
│ └────────────┬─────────────┘ │
└───────────────┼────────────────────────┘
│
┌──────▼──────┐
│ Ingress │
└─────────────┘
11.2 配置管理¶
- 配置中心: Nacos / Spring Cloud Config
- 环境隔离: dev / test / staging / prod
- 敏感配置: 加密存储
12. 未来规划¶
12.1 短期目标(3-6 个月)¶
- [ ] 完善 Gateway 功能(限流、熔断、降级)
- [ ] 集成消息队列(Kafka/RabbitMQ)
- [ ] 增强监控告警能力
- [ ] 完善文档和示例
12.2 中期目标(6-12 个月)¶
- [ ] 支持多数据库(PostgreSQL、Oracle)
- [ ] 分布式事务支持(Seata)
- [ ] 服务网格集成(Istio)
- [ ] 低代码平台
12.3 长期愿景¶
- 打造完整的企业级开发平台
- 提供可视化配置工具
- 支持多语言客户端(Go、Python、Node.js)
- 构建活跃的开源社区
13. 参考资源¶
© 2025 LoadUp Framework. All rights reserved.