资金服务平台 (FundPlatform) - 架构设计文档
文档版本: v1.0
创建日期: 2026-02-13
项目名称: 资金服务平台
项目代号: fundplatform
一、架构设计概述
1.1 设计目标
| 目标 |
描述 |
| 高可用性 |
系统可用性≥99.5%,支持故障自动恢复 |
| 高性能 |
支持≥100人并发,接口响应<3秒 |
| 可扩展性 |
微服务架构,支持水平扩展 |
| 安全性 |
数据加密传输,完善的权限控制 |
| 可维护性 |
模块化设计,代码结构清晰 |
1.2 架构风格
采用 微服务架构 + 前后端分离 模式:
- 后端:Spring Cloud Alibaba 微服务框架
- 前端:Vue 3 + UniApp 多端应用
- 数据层:MySQL + Redis 缓存
- 基础设施:Nacos 服务治理、Nginx 负载均衡
二、系统整体架构
2.1 架构全景图
┌─────────────────────────────────────────────────────────────────────────────┐
│ 接入层 (Access Layer) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Web端 │ │ 移动端 │ │ 小程序 │ │ H5页面 │ │
│ │ (Vue3) │ │ (UniApp) │ │ (UniApp) │ │ (UniApp) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
└─────────┼────────────────┼────────────────┼────────────────┼───────────────┘
│ │ │ │
└────────────────┴────────────────┴────────────────┘
│
┌────────────────────────────────────┼────────────────────────────────────────┐
│ 网关层 (Gateway Layer) │
│ ┌─────────────────────────────────┴─────────────────────────────────────┐ │
│ │ Nginx 负载均衡 │ │
│ │ SSL终止 / 静态资源 / 反向代理 │ │
│ └─────────────────────────────────┬─────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────┴─────────────────────────────────────┐ │
│ │ Spring Cloud Gateway │ │
│ │ 路由转发 / 限流熔断 / 鉴权认证 / 日志记录 │ │
│ └─────────────────────────────────┬─────────────────────────────────────┘ │
└────────────────────────────────────┼────────────────────────────────────────┘
│
┌────────────────────────────────────┼────────────────────────────────────────┐
│ 服务层 (Service Layer) │
│ │ │
│ ┌─────────────────────────────────┴─────────────────────────────────────┐ │
│ │ Nacos 服务注册与配置中心 │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 系统服务 │ │ 客户中心 │ │ 项目中心 │ │ 需求中心 │ │
│ │ fund-sys │ │ fund-cust │ │ fund-proj │ │ fund-req │ │
│ │ │ │ │ │ │ │ │ │
│ │ • 用户管理 │ │ • 客户管理 │ │ • 项目管理 │ │ • 需求工单 │ │
│ │ • 权限管理 │ │ • 联系人管理 │ │ • 成员管理 │ │ • 应收款管理 │ │
│ │ • 部门管理 │ │ │ │ │ │ │ │
│ │ • 日志管理 │ │ │ │ │ │ │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ ┌──────┴───────┐ ┌──────┴───────┐ ┌──────┴───────┐ ┌──────┴───────┐ │
│ │ 支出中心 │ │ 收款中心 │ │ 报表中心 │ │ 文件中心 │ │
│ │ fund-exp │ │ fund-receipt │ │ fund-report │ │ fund-file │ │
│ │ │ │ │ │ │ │ │ │
│ │ • 支出类型 │ │ • 收款记录 │ │ • 收支统计 │ │ • 文件上传 │ │
│ │ • 支出申请 │ │ • 收款凭证 │ │ • 趋势分析 │ │ • 文件存储 │ │
│ │ • 付款管理 │ │ • 账期管理 │ │ • 数据导出 │ │ • 文件下载 │ │
│ │ • 统计分析 │ │ │ │ │ │ │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
│
┌────────────────────────────────────┼────────────────────────────────────────┐
│ 数据层 (Data Layer) │
│ │ │
│ ┌─────────────────────────────────┴─────────────────────────────────────┐ │
│ │ Redis 缓存集群 │ │
│ │ 会话缓存 / 热点数据 / 分布式锁 / 限流计数器 │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ MySQL 8.0 主从集群 │ │
│ │ 用户库 / 业务库 / 日志库 / 报表库 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 腾讯COS 对象存储 │ │
│ │ 文件存储 / 图片存储 / 凭证附件 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
2.2 服务划分
| 服务名 |
服务编码 |
职责 |
端口范围 |
| 网关服务 |
fund-gateway |
路由、鉴权、限流 |
8080 |
| 系统服务 |
fund-sys |
用户、权限、部门、日志 |
8100-8109 |
| 客户中心 |
fund-cust |
客户、联系人管理 |
8110-8119 |
| 项目中心 |
fund-proj |
项目、成员管理 |
8120-8129 |
| 需求中心 |
fund-req |
需求工单、应收款 |
8130-8139 |
| 支出中心 |
fund-exp |
支出类型、支出管理 |
8140-8149 |
| 收款中心 |
fund-receipt |
收款记录、账期管理 |
8150-8159 |
| 报表中心 |
fund-report |
统计分析、数据导出 |
8160-8169 |
| 文件中心 |
fund-file |
文件上传、存储管理 |
8170-8179 |
三、技术架构
3.1 技术栈选型
3.1.1 后端技术栈
| 层级 |
技术选型 |
版本 |
用途 |
| 基础框架 |
Spring Boot |
3.2.x |
应用基础框架 |
| 微服务框架 |
Spring Cloud Alibaba |
2022.x |
微服务治理 |
| 服务注册 |
Nacos |
3.0.0 |
服务注册与配置中心 |
| 服务网关 |
Spring Cloud Gateway |
4.x |
API网关 |
| 负载均衡 |
Spring Cloud LoadBalancer |
4.x |
客户端负载均衡 |
| 服务调用 |
OpenFeign |
4.x |
声明式HTTP客户端 |
| 服务容错 |
Sentinel |
1.8.x |
限流、熔断、降级 |
| ORM框架 |
MyBatis-Plus |
3.5.x |
数据访问层 |
| 数据库连接池 |
Druid |
1.2.x |
连接池、监控 |
| 缓存框架 |
Spring Data Redis |
3.x |
Redis操作 |
| 安全框架 |
Spring Security |
6.x |
认证授权 |
| JWT令牌 |
jjwt |
0.12.x |
Token生成与验证 |
| API文档 |
Knife4j |
4.x |
Swagger增强 |
| 对象存储 |
腾讯云COS SDK |
5.x |
文件存储 |
| 定时任务 |
XXL-JOB |
2.4.x |
分布式任务调度 |
| 日志框架 |
Logback + SLF4J |
- |
日志记录 |
| 工具类库 |
Hutool |
5.8.x |
常用工具 |
3.1.2 前端技术栈
| 端 |
技术选型 |
版本 |
用途 |
| 管理后台 |
Vue |
3.4.x |
前端框架 |
|
TypeScript |
5.x |
类型安全 |
|
Element Plus |
2.5.x |
UI组件库 |
|
Pinia |
2.x |
状态管理 |
|
Vue Router |
4.x |
路由管理 |
|
Axios |
1.x |
HTTP客户端 |
|
ECharts |
5.x |
图表库 |
|
Vite |
5.x |
构建工具 |
| 移动端 |
UniApp |
3.x |
跨端框架 |
|
Vue |
3.x |
前端框架 |
|
uView UI |
2.x |
移动端UI库 |
3.2 架构分层
┌─────────────────────────────────────────────────────────────┐
│ 表现层 (Presentation) │
│ Controller / DTO / VO / 参数校验 / 异常处理 │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ 业务层 (Business) │
│ Service / 业务逻辑 / 事务管理 / 权限校验 │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ 数据访问层 (Data Access) │
│ Mapper / DAO / MyBatis-Plus / 数据库操作 │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ 基础设施层 (Infrastructure) │
│ Redis / MySQL / COS / MQ / 缓存 / 消息队列 │
└─────────────────────────────────────────────────────────────┘
四、数据架构
4.1 数据库设计
4.1.1 数据库划分
| 数据库 |
用途 |
主要表 |
| fund_sys |
系统数据 |
sys_user, sys_dept, sys_role, sys_menu, sys_log |
| fund_biz |
业务数据 |
customer, project, requirement, expense, receivable, receipt |
| fund_file |
文件数据 |
file_record, file_chunk |
4.1.2 分库分表策略
| 表名 |
策略 |
分片键 |
说明 |
| sys_operation_log |
按时间分表 |
created_time |
每月一张表 |
| expense |
按时间分表 |
expense_date |
每季度一张表 |
| receipt |
按时间分表 |
receipt_date |
每季度一张表 |
4.2 缓存设计
4.2.1 缓存策略
| 缓存类型 |
Key前缀 |
过期时间 |
说明 |
| 用户会话 |
session: |
30分钟 |
JWT Token 黑名单 |
| 用户信息 |
user:info: |
1小时 |
用户基本信息缓存 |
| 字典数据 |
dict: |
24小时 |
系统字典数据 |
| 热点数据 |
hot: |
10分钟 |
频繁访问数据 |
| 限流计数 |
limit: |
1分钟 |
API限流计数 |
| 分布式锁 |
lock: |
30秒 |
并发控制 |
4.2.2 缓存更新策略
┌─────────────┐ 查询 ┌─────────────┐
│ 业务请求 │ ───────────> │ 查询缓存 │
└─────────────┘ └──────┬──────┘
│
┌───────────────┼───────────────┐
│ 命中 │ 未命中 │
▼ ▼ │
┌─────────────┐ ┌─────────────┐ │
│ 返回缓存 │ │ 查询数据库 │ │
│ 数据 │ │ │ │
└─────────────┘ └──────┬──────┘ │
│ │
▼ │
┌─────────────┐ │
│ 写入缓存 │<─────┘
│ 设置过期 │
└─────────────┘
五、安全架构
5.1 认证授权
5.1.1 JWT认证流程
┌─────────┐ ┌─────────┐
│ 客户端 │ │ 服务端 │
└────┬────┘ └────┬────┘
│ │
│ 1. 登录请求 (username/password) │
│ ──────────────────────────────────────> │
│ │
│ ┌─────────┴─────────┐
│ │ 验证用户名密码 │
│ │ 生成JWT Token │
│ └─────────┬─────────┘
│ │
│ 2. 返回 Token │
│ <────────────────────────────────────── │
│ │
│ 3. 业务请求 (Header: Authorization) │
│ ──────────────────────────────────────> │
│ ┌─────────┴─────────┐
│ │ 验证Token有效性 │
│ │ 解析用户信息 │
│ │ 权限校验 │
│ └─────────┬─────────┘
│ │
│ 4. 返回业务数据 │
│ <────────────────────────────────────── │
5.1.2 权限模型
采用 RBAC (Role-Based Access Control) 模型:
用户 (User) ──N:M──> 角色 (Role) ──N:M──> 权限 (Permission)
│
└─N:M──> 菜单/按钮 (Menu)
5.2 数据安全
| 安全措施 |
实现方式 |
| 传输加密 |
HTTPS/TLS 1.3 |
| 密码加密 |
BCrypt (强度10) |
| 敏感数据 |
AES-256 加密存储 |
| SQL注入 |
MyBatis预编译语句 |
| XSS攻击 |
前端转义 + 后端过滤 |
| CSRF攻击 |
Token验证 + SameSite Cookie |
六、部署架构
6.1 生产环境部署
┌─────────────────────────────────────────────────────────────────┐
│ 负载均衡层 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Nginx (主) + Nginx (备) │ │
│ │ Keepalived VIP: 192.168.1.10 │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────────┐
│ 应用服务层 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Gateway-1 │ │ Gateway-2 │ │ Gateway-3 │ │
│ │ :8080 │ │ :8080 │ │ :8080 │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ ┌──────┴────────────────┴────────────────┴──────┐ │
│ │ Nacos 集群 (3节点) │ │
│ │ 8848 / 9848 / 7848 │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │fund-sys │ │fund-cust │ │fund-proj │ │fund-req │ │
│ │ x 2 │ │ x 2 │ │ x 2 │ │ x 2 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │fund-exp │ │fund-rec │ │fund-rpt │ │fund-file │ │
│ │ x 2 │ │ x 2 │ │ x 2 │ │ x 2 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────────┐
│ 数据存储层 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Redis 集群 (6节点,3主3从) │ │
│ │ 6379 / 6380 / 6381 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ MySQL 主从集群 │ │
│ │ Master: 3306 ──> Slave: 3306 (x2) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
6.2 容器化部署
6.2.1 Docker Compose 配置
version: '3.8'
services:
# Nacos
nacos:
image: nacos/nacos-server:v3.0.0
ports:
- "8848:8848"
- "9848:9848"
environment:
- MODE=standalone
# Redis
redis:
image: redis:8.0.2
ports:
- "6379:6379"
command: redis-server --requirepass zjf@123456
# MySQL
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=zjf@123456
volumes:
- ./sql:/docker-entrypoint-initdb.d
# Gateway
gateway:
image: fundplatform/fund-gateway:1.0.0
ports:
- "8080:8080"
environment:
- NACOS_SERVER=nacos:8848
# Services
fund-sys:
image: fundplatform/fund-sys:1.0.0
deploy:
replicas: 2
environment:
- NACOS_SERVER=nacos:8848
- DB_HOST=mysql
- REDIS_HOST=redis
七、监控与运维
7.1 监控体系
| 监控类型 |
工具 |
监控内容 |
| 应用监控 |
Prometheus + Grafana |
JVM、接口响应、错误率 |
| 链路追踪 |
SkyWalking |
调用链、性能瓶颈 |
| 日志收集 |
ELK Stack |
业务日志、错误日志 |
| 告警通知 |
AlertManager |
钉钉/邮件/短信告警 |
7.2 运维脚本
# 服务启动脚本
#!/bin/bash
SERVICES=("gateway" "sys" "cust" "proj" "req" "exp" "receipt" "report" "file")
for service in "${SERVICES[@]}"; do
docker-compose up -d fund-${service}
sleep 5
done
# 健康检查脚本
#!/bin/bash
curl -f http://localhost:8080/actuator/health || exit 1
八、开发规范
8.1 代码结构
fund-sys/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/fundplatform/sys/
│ │ │ ├── SysApplication.java
│ │ │ ├── config/ # 配置类
│ │ │ ├── controller/ # 控制器层
│ │ │ ├── service/ # 业务层
│ │ │ │ └── impl/
│ │ │ ├── mapper/ # 数据访问层
│ │ │ ├── entity/ # 实体类
│ │ │ ├── dto/ # 数据传输对象
│ │ │ ├── vo/ # 视图对象
│ │ │ ├── enums/ # 枚举类
│ │ │ ├── utils/ # 工具类
│ │ │ └── handler/ # 处理器
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── application-dev.yml
│ │ ├── application-prod.yml
│ │ └── mapper/ # XML映射文件
│ └── test/
├── Dockerfile
├── pom.xml
└── README.md
8.2 API 设计规范
| 规范项 |
要求 |
| URL |
/api/{service}/{version}/{resource}/{action} |
| HTTP方法 |
GET(查)、POST(增)、PUT(改)、DELETE(删) |
| 响应格式 |
{ "code": 200, "message": "", "data": {} } |
| 分页 |
pageNum, pageSize, total, list |
| 版本 |
v1, v2 在URL中体现 |
九、附录
9.1 端口分配表
| 服务 |
端口 |
说明 |
| Nginx |
80/443 |
负载均衡 |
| Gateway |
8080 |
API网关 |
| Nacos |
8848/9848 |
注册配置中心 |
| Redis |
6379 |
缓存服务 |
| MySQL |
3306 |
数据库 |
| XXL-JOB |
8081 |
任务调度中心 |
9.2 文档修订记录
| 版本 |
修订日期 |
修订内容 |
修订人 |
| v1.0 |
2026-02-13 |
初始版本 |
zhangjf |
文档结束