08ea5fbe98
添加用户管理视图、API和状态管理文件
276 lines
7.4 KiB
Markdown
276 lines
7.4 KiB
Markdown
# 双应用架构文档
|
|
|
|
## 架构概述
|
|
|
|
本项目采用双应用架构,将客户端应用和后台管理应用分离,通过网关统一路由,实现独立部署和运维。
|
|
|
|
## 架构图
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ 客户端/浏览器 │
|
|
└──────────────────────┬──────────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────┐
|
|
│ Gateway │ 8080
|
|
│ (网关) │
|
|
└────────┬────────┘
|
|
│
|
|
┌────────────┴────────────┐
|
|
│ │
|
|
▼ ▼
|
|
┌──────────────────┐ ┌──────────────────┐
|
|
│ Client App │ │ Admin App │ 8082
|
|
│ (客户端应用) │ │ (后台管理应用) │
|
|
│ 8081 │ │ │
|
|
└────────┬─────────┘ └────────┬─────────┘
|
|
│ │
|
|
└────────────┬───────────┘
|
|
│
|
|
▼
|
|
┌─────────────────┐
|
|
│ PostgreSQL │
|
|
│ (数据库) │
|
|
└─────────────────┘
|
|
```
|
|
|
|
## 模块说明
|
|
|
|
### 1. 网关模块 (everything-is-suitable-gateway)
|
|
- **端口**: 8080
|
|
- **职责**:
|
|
- 统一入口,路由请求到对应的应用
|
|
- JWT 认证和 RBAC 权限验证
|
|
- 负载均衡和熔断降级
|
|
- **路由规则**:
|
|
- `/api/client/**` → Client App (8081)
|
|
- `/api/admin/**` → Admin App (8082)
|
|
- `/api/auth/**` → Client App (8081)
|
|
- `/api/fortune/**` → Client App (8081)
|
|
|
|
### 2. 客户端应用 (everything-is-suitable-client-app)
|
|
- **端口**: 8081
|
|
- **职责**:
|
|
- 处理客户端用户请求
|
|
- 提供命理查询服务
|
|
- 用户认证和授权
|
|
- **依赖**:
|
|
- everything-is-suitable-client-api (接口层)
|
|
- everything-is-suitable-biz (业务逻辑)
|
|
- everything-is-suitable-common (公共组件)
|
|
|
|
### 3. 后台管理应用 (everything-is-suitable-admin-app)
|
|
- **端口**: 8082
|
|
- **职责**:
|
|
- 处理后台管理请求
|
|
- 用户管理和权限控制
|
|
- 统计数据查询
|
|
- **依赖**:
|
|
- everything-is-suitable-admin-api (接口层)
|
|
- everything-is-suitable-sys (系统管理)
|
|
- everything-is-suitable-statistics (统计分析)
|
|
|
|
### 4. 客户端接口层 (everything-is-suitable-client-api)
|
|
- **职责**:
|
|
- 定义客户端 API 路由
|
|
- 实现 Handler 处理请求
|
|
- 参数验证和响应封装
|
|
|
|
### 5. 后台管理接口层 (everything-is-suitable-admin-api)
|
|
- **职责**:
|
|
- 定义后台管理 API 路由
|
|
- 实现 Handler 处理请求
|
|
- RBAC 权限控制
|
|
|
|
### 6. 公共模块 (everything-is-suitable-common)
|
|
- **职责**:
|
|
- 提供通用工具类
|
|
- JWT 认证工具类
|
|
- JWT 认证过滤器
|
|
- RBAC 权限过滤器
|
|
|
|
### 7. 业务模块 (everything-is-suitable-biz)
|
|
- **职责**:
|
|
- 命理分析业务逻辑
|
|
- 数据访问层
|
|
- 业务规则实现
|
|
|
|
## 认证和授权
|
|
|
|
### JWT 认证
|
|
- **实现**: `JwtTokenProvider`
|
|
- **功能**:
|
|
- 生成 JWT Token
|
|
- 验证 JWT Token
|
|
- 解析 JWT Token
|
|
- **过滤器**: `JwtAuthenticationFilter`
|
|
- 自动提取和验证 JWT Token
|
|
- 将用户信息添加到请求头
|
|
|
|
### RBAC 权限控制
|
|
- **实现**: `RbacAuthorizationFilter`
|
|
- **角色定义**:
|
|
- **ADMIN**: 管理员,拥有所有权限
|
|
- **MANAGER**: 经理,拥有读取权限
|
|
- **OPERATOR**: 操作员,拥有基础权限
|
|
- **权限映射**:
|
|
- `users:read`, `users:write`, `users:delete`
|
|
- `statistics:read`
|
|
- `fortune:read`, `fortune:write`
|
|
- `settings:read`, `settings:write`
|
|
|
|
## 缓存策略
|
|
|
|
### Caffeine 本地缓存
|
|
- **用户信息**: 缓存 5 分钟
|
|
- **命理结果**: 缓存 10 分钟
|
|
- **统计数据**: 缓存 1 分钟
|
|
- **配置**:
|
|
```yaml
|
|
spring:
|
|
cache:
|
|
type: caffeine
|
|
caffeine:
|
|
spec: maximumSize=1000,expireAfterWrite=5m
|
|
```
|
|
|
|
## 部署方案
|
|
|
|
### Docker 部署
|
|
- **容器化**: 所有应用使用 Docker 容器部署
|
|
- **编排**: 使用 Docker Compose 编排服务
|
|
- **网络**: 使用 bridge 网络连接服务
|
|
|
|
### 部署命令
|
|
```bash
|
|
# 构建和部署
|
|
./build-and-deploy.sh
|
|
|
|
# 停止服务
|
|
./stop-services.sh
|
|
|
|
# 使用 Docker Compose
|
|
docker-compose up -d
|
|
docker-compose down
|
|
```
|
|
|
|
### 环境变量
|
|
- `JWT_SECRET`: JWT 密钥
|
|
- `JWT_EXPIRATION`: JWT 过期时间
|
|
- `SPRING_PROFILES_ACTIVE`: Spring Profile
|
|
- `SPRING_DATASOURCE_URL`: 数据库连接 URL
|
|
- `SPRING_DATASOURCE_USERNAME`: 数据库用户名
|
|
- `SPRING_DATASOURCE_PASSWORD`: 数据库密码
|
|
|
|
## 监控和运维
|
|
|
|
### Actuator 端点
|
|
- `/actuator/health`: 健康检查
|
|
- `/actuator/metrics`: 性能指标
|
|
- `/actuator/prometheus`: Prometheus 指标
|
|
|
|
### 日志管理
|
|
- 使用 SLF4J + Logback
|
|
- 日志级别可配置
|
|
- 支持结构化日志输出
|
|
|
|
## 性能优化
|
|
|
|
### JVM 优化
|
|
- 堆内存: `-Xms512m -Xmx1024m`
|
|
- GC 策略: `-XX:+UseG1GC -XX:MaxGCPauseMillis=200`
|
|
- 其他优化: `-XX:+UseStringDeduplication`
|
|
|
|
### 数据库优化
|
|
- 连接池配置
|
|
- 查询优化和索引
|
|
- 使用 R2DBC 非阻塞访问
|
|
|
|
### 响应式优化
|
|
- 使用 WebFlux 非阻塞特性
|
|
- 背压处理
|
|
- 避免阻塞操作
|
|
|
|
## 安全考虑
|
|
|
|
### 认证安全
|
|
- JWT Token 过期机制
|
|
- Token 刷新机制
|
|
- 密钥安全管理
|
|
|
|
### 授权安全
|
|
- RBAC 权限控制
|
|
- 路径级别的权限验证
|
|
- HTTP 方法级别的权限控制
|
|
|
|
### 数据安全
|
|
- 敏感数据加密
|
|
- SQL 注入防护
|
|
- XSS 防护
|
|
|
|
## 扩展性
|
|
|
|
### 水平扩展
|
|
- 可独立扩展客户端应用
|
|
- 可独立扩展后台管理应用
|
|
- 网关支持负载均衡
|
|
|
|
### 垂直扩展
|
|
- 增加 JVM 堆内存
|
|
- 优化数据库连接池
|
|
- 增加缓存容量
|
|
|
|
## 迁移指南
|
|
|
|
### 从单体应用迁移
|
|
1. 创建新的应用模块
|
|
2. 迁移 Handler 到接口层
|
|
3. 配置网关路由
|
|
4. 更新客户端调用地址
|
|
5. 验证功能完整性
|
|
6. 逐步切换流量
|
|
|
|
### 数据迁移
|
|
- 数据库结构保持不变
|
|
- 共享数据库连接
|
|
- 使用 Flyway 管理迁移
|
|
|
|
## 故障排查
|
|
|
|
### 常见问题
|
|
1. **网关无法连接后端服务**
|
|
- 检查服务是否启动
|
|
- 检查网络连接
|
|
- 检查端口配置
|
|
|
|
2. **JWT 认证失败**
|
|
- 检查 JWT 密钥配置
|
|
- 检查 Token 过期时间
|
|
- 检查 Token 格式
|
|
|
|
3. **权限验证失败**
|
|
- 检查角色配置
|
|
- 检查权限映射
|
|
- 检查请求头传递
|
|
|
|
### 日志查看
|
|
```bash
|
|
# 查看网关日志
|
|
docker logs everything-is-suitable-gateway
|
|
|
|
# 查看客户端应用日志
|
|
docker logs everything-is-suitable-client-app
|
|
|
|
# 查看后台管理应用日志
|
|
docker logs everything-is-suitable-admin-app
|
|
```
|
|
|
|
## 总结
|
|
|
|
双应用架构通过分离客户端和后台管理应用,实现了:
|
|
- ✅ 独立部署和运维
|
|
- ✅ 灵活的扩展能力
|
|
- ✅ 统一的认证和授权
|
|
- ✅ 高性能的响应式架构
|
|
- ✅ 完善的监控和日志 |