Yoyo Data 是一个基于 Spring Boot 的高并发单体项目框架,集成了多种中间件,包括 MySQL、MongoDB、Redis、Kafka 和 MinIO 等,适用于处理高并发场景下的数据业务。
高性能
可扩展
安全可靠
功能丰富
易于部署
- 高性能:采用多级缓存、异步处理等优化策略
- 可扩展:模块化设计,易于扩展和维护
- 安全可靠:完善的认证授权和安全防护机制
- 功能丰富:集成多种中间件,满足各种业务需求
- 易于部署:支持容器化部署和集群扩展
┌───────────────────────────────────────────────────────────────────────────┐
│ 接入层 🎯 │
├──────────────┬──────────────┬──────────────┬──────────────────────────────┤
│ API接口 │ 认证授权 │ 流量控制 │ 负载均衡 │
├──────────────┼──────────────┼──────────────┼──────────────────────────────┤
│ Controller │ Security │ RateLimit │ 外部负载均衡器 │
└──────────────┴──────────────┴──────────────┴──────────────────────────────┘
│
┌─────────────────────────────▼─────────────────────────────────────────────┐
│ 业务层 🏭 │
├──────────────┬──────────────┬──────────────┬──────────────┬──────────────┤
│ 业务服务 │ 事务管理 │ 业务规则 │ 事件处理 │ 异步任务 │
├──────────────┼──────────────┼──────────────┼──────────────┼──────────────┤
│ Service │ Transaction │ BusinessRule│ EventHandler│ AsyncTask │
└──────────────┴──────────────┴──────────────┴──────────────┴──────────────┘
│
┌─────────────────────────────▼─────────────────────────────────────────────┐
│ 数据层 💾 │
├──────────────┬──────────────┬──────────────┬──────────────┬──────────────┤
│ 数据访问 │ 缓存管理 │ 消息队列 │ 文件存储 │ 数据同步 │
├──────────────┼──────────────┼──────────────┼──────────────┼──────────────┤
│ Repository │ Cache │ Kafka │ MinIO │ SyncTask │
└──────────────┴──────────────┴──────────────┴──────────────┴──────────────┘
│
┌─────────────────────────────▼─────────────────────────────────────────────┐
│ 基础设施层 🔧 │
├──────────────┬──────────────┬──────────────┬──────────────┬──────────────┤
│ 配置管理 │ 监控告警 │ 日志管理 │ 工具类 │ 连接池管理 │
├──────────────┼──────────────┼──────────────┼──────────────┼──────────────┤
│ Config │ Monitoring │ Logging │ Utils │ ConnectionPool│
└──────────────┴──────────────┴──────────────┴──────────────┴──────────────┘
│
┌─────────────────────────────▼─────────────────────────────────────────────┐
│ 中间件层 🛠️ │
├──────────────┬──────────────┬──────────────┬──────────────┬──────────────┤
│ MySQL │ MongoDB │ Redis │ Kafka │ MinIO │
└──────────────┴──────────────┴──────────────┴──────────────┴──────────────┘
yoyo_data/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── yoyo_data/
│ │ │ ├── YoyoDataApplication.java # 应用启动类
│ │ │ ├── api/ # 接入层
│ │ │ │ ├── controller/ # 控制器
│ │ │ │ ├── handler/ # 异常处理器
│ │ │ │ ├── interceptor/ # 拦截器
│ │ │ │ └── validator/ # 数据校验
│ │ │ ├── business/ # 业务层
│ │ │ │ ├── service/ # 业务服务
│ │ │ │ ├── event/ # 事件处理
│ │ │ │ ├── async/ # 异步任务
│ │ │ │ └── rule/ # 业务规则
│ │ │ ├── data/ # 数据层
│ │ │ │ ├── repository/ # 数据访问
│ │ │ │ ├── cache/ # 缓存管理
│ │ │ │ ├── message/ # 消息队列
│ │ │ │ └── storage/ # 文件存储
│ │ │ ├── domain/ # 领域模型
│ │ │ │ ├── entity/ # 实体类
│ │ │ │ ├── vo/ # 视图对象
│ │ │ │ └── enums/ # 枚举类
│ │ │ ├── infrastructure/ # 基础设施层
│ │ │ │ ├── config/ # 配置管理
│ │ │ │ ├── monitor/ # 监控告警
│ │ │ │ ├── logging/ # 日志管理
│ │ │ │ ├── security/ # 安全管理
│ │ │ │ └── utils/ # 工具类
│ │ │ ├── support/ # 支持层
│ │ │ │ ├── constant/ # 常量定义
│ │ │ │ ├── dto/ # 数据传输对象
│ │ │ │ ├── exception/ # 异常定义
│ │ │ │ ├── response/ # 响应封装
│ │ │ │ └── vo/ # 视图对象
│ │ │ └── jwt/ # JWT相关
│ │ └── resources/
│ │ ├── static/ # 静态资源
│ │ ├── mapper/ # MyBatis 映射文件
│ │ ├── application.yml # 主配置文件
│ │ ├── application-dev.yml # 开发环境配置
│ │ └── application-prod.yml # 生产环境配置
│ └── test/ # 测试代码
├── pom.xml # Maven 依赖
├── README.md # 项目说明
├── ARCHITECTURE_DESIGN.md # 架构设计文档
└── .gitignore # Git 忽略文件
| 类别 | 技术 | 版本 | 用途 |
|---|---|---|---|
| 基础框架 | Spring Boot | 2.3.12 | 应用基础框架 |
| 数据库 | MySQL | 8.0+ | 关系型数据存储 |
| 数据库 | MongoDB | 4.4+ | 非关系型数据存储 |
| 缓存 | Redis | 6.0+ | 分布式缓存 |
| 消息队列 | Kafka | 2.8+ | 异步消息处理 |
| 对象存储 | MinIO | 2023+ | 文件存储服务 |
| ORM 框架 | MyBatis-Plus | 3.5.1 | 数据库访问 |
| 安全 | JWT | 0.9.1 | 认证授权 |
| 工具类 | Hutool | 5.8.38 | 通用工具类 |
| 工具类 | Lombok | 1.18+ | 代码简化 |
| JSON 处理 | FastJSON | 1.2.83 | JSON 序列化/反序列化 |
| 连接池 | Druid | 1.2.18 | 数据库连接池 |
| 依赖 | 版本 | 安装说明 |
|---|---|---|
| JDK | 1.8+ | Oracle JDK 或 OpenJDK |
| Maven | 3.6+ | Maven 下载 |
| MySQL | 8.0+ | MySQL 安装 |
| MongoDB | 4.4+ | MongoDB 安装 |
| Redis | 6.0+ | Redis 安装 |
| Kafka | 2.8+ | Kafka 安装 |
| MinIO | 2023+ | MinIO 安装 |
项目启动后,可通过以下地址访问:
- 🔗 API 接口:http://localhost:8080/api
- 🔗 健康检查:http://localhost:8080/actuator/health
| 配置项 | 说明 | 默认值 |
|---|---|---|
| spring.datasource | 数据库连接配置 | - |
| spring.redis | Redis 连接配置 | - |
| spring.data.mongodb | MongoDB 连接配置 | - |
| spring.kafka | Kafka 连接配置 | - |
| minio | MinIO 连接配置 | - |
| jwt.secret | JWT 密钥 | mySecretKeyForJwtTokenGenerationAndValidation1234567890 |
| jwt.expiration | JWT 过期时间(毫秒) | 7200000 |
| server.port | 服务器端口 | 8080 |
| server.servlet.context-path | 上下文路径 | /api |
-
POST
/api/auth/login- 用户登录 -
POST
/api/auth/register- 用户注册 -
GET
/api/auth/info- 获取用户信息 -
PUT
/api/auth/update- 更新用户信息
-
GET
/api/data/list- 获取数据列表 -
GET
/api/data/detail/{id}- 获取数据详情 -
POST
/api/data/create- 创建数据 -
PUT
/api/data/update/{id}- 更新数据 -
DELETE
/api/data/delete/{id}- 删除数据
-
POST
/api/file/upload- 上传文件 -
GET
/api/file/download/{id}- 下载文件 -
DELETE
/api/file/delete/{id}- 删除文件 -
GET
/api/file/list- 获取文件列表
- 多级缓存:本地缓存 + Redis 分布式缓存
- 缓存预热:系统启动时加载热点数据
- 缓存更新:异步更新或延迟双删策略
- 缓存降级:当缓存不可用时,直接访问数据库
- 缓存穿透:布隆过滤器防止缓存穿透
- 缓存雪崩:随机过期时间防止缓存雪崩
- 连接池优化:使用 Druid 连接池,合理配置连接数
- 索引优化:为常用查询字段建立索引
- SQL 优化:避免复杂查询,使用分页查询
- 读写分离:主库写,从库读,提高并发能力
- 分库分表:对大表进行分库分表,提高查询效率
- 批量操作:使用批量插入和更新,减少网络开销
- 消息队列:使用 Kafka 处理异步任务和事件
- 线程池:合理配置线程池,处理并发请求
- CompletableFuture:使用异步非阻塞编程模式
- 定时任务:使用 Spring Task 或 Quartz 处理定时任务
- 分布式限流:使用 Redis + Lua 脚本实现分布式限流
- 服务降级:当系统负载过高时,降级非核心功能
- 熔断机制:使用 Sentinel 或 Hystrix 实现服务熔断
- 超时控制:为所有外部调用设置合理的超时时间
- HTTP 连接池:使用 HttpClient 或 OkHttp 连接池
- CDN:使用 CDN 加速静态资源访问
- GZIP 压缩:启用 HTTP 压缩,减少网络传输量
- WebSocket:对于实时通信,使用 WebSocket 替代 HTTP 轮询
- 长连接:使用 TCP 长连接,减少连接建立开销
- Spring Boot Actuator:提供系统健康检查、指标监控等
- 自定义监控:针对业务指标的监控
- 告警机制:当系统指标异常时,触发告警
- SLF4J + Logback:标准日志框架
- 日志级别:可通过配置文件调整
- 日志输出:控制台和文件输出
- 日志归档:定期归档和清理日志
- 分布式日志:可集成 ELK 或 Loki 实现分布式日志管理
- JWT 令牌:无状态认证,便于水平扩展
- 密码加密:使用 bcrypt 进行密码加密
- 基于角色的访问控制:细粒度的权限管理
- 令牌刷新:支持令牌自动刷新
- 令牌黑名单:已注销的令牌加入黑名单
- 参数验证:使用 Spring Validation 进行参数验证
- 防 SQL 注入:使用 MyBatis-Plus 防止 SQL 注入
- 防 XSS 攻击:对输入输出进行过滤
- 防 CSRF 攻击:实现 CSRF 令牌验证
- HTTPS:生产环境使用 HTTPS
- CORS 配置:合理配置跨域资源共享
- 请求限流:防止恶意请求和 DoS 攻击
- 敏感信息保护:敏感信息加密存储和传输
适用于开发和测试环境:
- 安装并配置所有中间件
- 编译打包项目
- 运行 jar 包
建议使用以下部署方式:
-
容器化部署:
- 使用 Docker 容器化应用
- 使用 Docker Compose 管理多容器
-
集群部署:
- 多实例部署,配合负载均衡
- 使用 Kubernetes 进行容器编排
-
配置管理:
- 使用 Nacos 或 Consul 管理配置
- 实现配置的动态更新
-
服务发现:
- 实现服务自动发现
- 支持服务健康检查
-
监控告警:
- 配置完善的监控和告警机制
- 集成 Prometheus + Grafana
- 命名规范:使用驼峰命名法
- 代码风格:遵循 Java 代码规范
- 注释规范:关键代码必须添加注释
- 日志规范:合理使用日志级别,避免过度日志
- 异常处理:统一的异常处理机制
- 需求分析:明确功能需求和技术要求
- 设计:进行系统设计和数据库设计
- 编码:按照规范编写代码
- 测试:单元测试、集成测试、性能测试
- 代码审查:提交代码前进行代码审查
- 部署:部署到测试环境进行验证
- 上线:灰度发布到生产环境
- 问题:项目启动失败
- 原因:中间件未启动或配置错误
- 解决方案:
- 检查中间件是否正常运行
- 检查配置文件是否正确
- 检查端口是否被占用
- 查看启动日志,定位具体错误
- 问题:系统响应慢
- 原因:数据库查询慢、缓存未生效、并发处理能力不足
- 解决方案:
- 检查数据库索引是否合理
- 检查缓存是否有效使用
- 检查是否存在慢查询
- 检查线程池配置是否合理
- 考虑使用异步处理
- 问题:系统存在安全漏洞
- 原因:输入验证不足、密码加密不当、权限控制不严格
- 解决方案:
- 定期更新依赖包,防止安全漏洞
- 加强密码策略,使用强加密算法
- 完善权限控制,实现最小权限原则
- 对输入输出进行严格验证和过滤
- 定期进行安全扫描和渗透测试
欢迎贡献代码和提出建议!
- Fork 项目
- 创建分支:
git checkout -b feature/your-feature - 提交修改:
git commit -m 'Add some feature' - 推送到分支:
git push origin feature/your-feature - 创建 Pull Request
- 开发团队:Yoyo Data Team
- 邮箱:contact@yoyodata.com
- GitHub:https://github.com/yoyodata/yoyo_data
- 文档:https://docs.yoyodata.com
本项目采用 MIT 许可证,详见 LICENSE 文件。
Yoyo Data - 高性能、可扩展的数据业务系统