286 lines
7.2 KiB
Markdown
286 lines
7.2 KiB
Markdown
# 情绪博物馆Spring Cloud Alibaba微服务架构设计
|
|
|
|
**版本**: v1.0
|
|
**创建时间**: 2025-07-12
|
|
**技术栈**: Spring Cloud Alibaba 2022.0.0.0
|
|
**Spring Boot版本**: 3.0.2
|
|
**JDK版本**: 17+
|
|
|
|
---
|
|
|
|
## 📋 架构分析
|
|
|
|
### 业务模块分析
|
|
基于功能需求文档分析,情绪博物馆包含以下核心业务模块:
|
|
|
|
1. **用户认证模块** - 账号、密码、手机号登录
|
|
2. **AI对话模块** - 智能对话、情绪分析
|
|
3. **情绪记录模块** - 情绪日历、记录管理
|
|
4. **成长课题模块** - 课题系统、互动记录
|
|
5. **地图探索模块** - 地点标记、社区分享
|
|
6. **成就奖励模块** - 成就系统、积分奖励
|
|
7. **用户统计模块** - 数据统计、分析报告
|
|
|
|
### 技术架构选型
|
|
|
|
#### Spring Cloud Alibaba 2022.0.0.0 组件
|
|
- **Nacos**: 服务注册发现 + 配置中心
|
|
- **Sentinel**: 流量控制、熔断降级
|
|
- **Seata**: 分布式事务
|
|
- **Gateway**: API网关
|
|
- **OpenFeign**: 服务间调用
|
|
- **Dubbo**: RPC通信(可选)
|
|
|
|
#### 基础设施组件
|
|
- **MySQL 8.0**: 主数据库
|
|
- **Redis 7.0**: 缓存 + 分布式锁
|
|
- **RocketMQ**: 消息队列
|
|
- **Elasticsearch**: 搜索引擎
|
|
- **MinIO**: 对象存储
|
|
|
|
---
|
|
|
|
## 🏗️ 微服务架构设计
|
|
|
|
### 服务拆分策略
|
|
|
|
```mermaid
|
|
graph TB
|
|
A[API Gateway] --> B[用户服务]
|
|
A --> C[AI对话服务]
|
|
A --> D[情绪记录服务]
|
|
A --> E[成长课题服务]
|
|
A --> F[地图探索服务]
|
|
A --> G[成就奖励服务]
|
|
A --> H[统计分析服务]
|
|
|
|
B --> I[MySQL-用户库]
|
|
C --> J[MySQL-对话库]
|
|
D --> K[MySQL-情绪库]
|
|
E --> L[MySQL-成长库]
|
|
F --> M[MySQL-地图库]
|
|
G --> N[MySQL-奖励库]
|
|
H --> O[MySQL-统计库]
|
|
|
|
P[Nacos] --> A
|
|
P --> B
|
|
P --> C
|
|
P --> D
|
|
P --> E
|
|
P --> F
|
|
P --> G
|
|
P --> H
|
|
|
|
Q[Redis] --> B
|
|
Q --> C
|
|
Q --> D
|
|
Q --> E
|
|
Q --> F
|
|
Q --> G
|
|
Q --> H
|
|
```
|
|
|
|
### 微服务清单
|
|
|
|
| 服务名称 | 端口 | 职责 | 数据库 |
|
|
|---------|------|------|--------|
|
|
| emotion-gateway | 8080 | API网关、路由、鉴权 | - |
|
|
| emotion-user | 8081 | 用户认证、资料管理 | user, user_stats |
|
|
| emotion-ai | 8082 | AI对话、情绪分析 | conversation, message |
|
|
| emotion-record | 8083 | 情绪记录、日历管理 | emotion_record |
|
|
| emotion-growth | 8084 | 成长课题、互动记录 | growth_topic, topic_interaction |
|
|
| emotion-explore | 8085 | 地图探索、社区分享 | location_pin, community_post, comment |
|
|
| emotion-reward | 8086 | 成就奖励、积分管理 | achievement, reward |
|
|
| emotion-stats | 8087 | 数据统计、分析报告 | 跨库查询 |
|
|
|
|
---
|
|
|
|
## 📦 技术版本选择
|
|
|
|
### Spring Cloud Alibaba 2022.0.0.0
|
|
这是当前最稳定的版本,具有以下优势:
|
|
- ✅ 与Spring Boot 3.0.x完美兼容
|
|
- ✅ 支持JDK 17+
|
|
- ✅ 生产环境验证充分
|
|
- ✅ 社区活跃,文档完善
|
|
- ✅ 阿里云原生支持
|
|
|
|
### 版本依赖关系
|
|
```xml
|
|
<properties>
|
|
<java.version>17</java.version>
|
|
<spring-boot.version>3.0.2</spring-boot.version>
|
|
<spring-cloud.version>2022.0.0</spring-cloud.version>
|
|
<spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>
|
|
<mysql.version>8.0.33</mysql.version>
|
|
<redis.version>7.0.8</redis.version>
|
|
<mybatis-plus.version>3.5.3.1</mybatis-plus.version>
|
|
</properties>
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 核心配置设计
|
|
|
|
### Nacos配置中心
|
|
```yaml
|
|
# application-dev.yml
|
|
spring:
|
|
cloud:
|
|
nacos:
|
|
discovery:
|
|
server-addr: localhost:8848
|
|
namespace: emotion-dev
|
|
group: DEFAULT_GROUP
|
|
config:
|
|
server-addr: localhost:8848
|
|
namespace: emotion-dev
|
|
group: DEFAULT_GROUP
|
|
file-extension: yml
|
|
shared-configs:
|
|
- data-id: common-mysql.yml
|
|
group: DEFAULT_GROUP
|
|
refresh: true
|
|
- data-id: common-redis.yml
|
|
group: DEFAULT_GROUP
|
|
refresh: true
|
|
```
|
|
|
|
### 数据库配置
|
|
```yaml
|
|
# common-mysql.yml
|
|
spring:
|
|
datasource:
|
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
|
url: jdbc:mysql://localhost:3306/emotion_museum?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
|
|
username: ${DB_USERNAME:root}
|
|
password: ${DB_PASSWORD:123456}
|
|
hikari:
|
|
minimum-idle: 5
|
|
maximum-pool-size: 20
|
|
idle-timeout: 600000
|
|
max-lifetime: 1800000
|
|
connection-timeout: 30000
|
|
|
|
mybatis-plus:
|
|
configuration:
|
|
map-underscore-to-camel-case: true
|
|
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
|
global-config:
|
|
db-config:
|
|
id-type: assign_uuid
|
|
logic-delete-field: deleted
|
|
logic-delete-value: 1
|
|
logic-not-delete-value: 0
|
|
```
|
|
|
|
### Redis配置
|
|
```yaml
|
|
# common-redis.yml
|
|
spring:
|
|
data:
|
|
redis:
|
|
host: localhost
|
|
port: 6379
|
|
password: ${REDIS_PASSWORD:}
|
|
database: 0
|
|
timeout: 3000ms
|
|
lettuce:
|
|
pool:
|
|
max-active: 20
|
|
max-idle: 10
|
|
min-idle: 5
|
|
max-wait: 3000ms
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 实施计划
|
|
|
|
### Phase 1: 基础设施搭建 (1周)
|
|
1. **父工程创建**
|
|
- Maven多模块项目结构
|
|
- 版本依赖管理
|
|
- 公共组件抽取
|
|
|
|
2. **注册中心部署**
|
|
- Nacos Server安装配置
|
|
- 命名空间和分组设置
|
|
- 配置文件管理
|
|
|
|
3. **数据库初始化**
|
|
- MySQL数据库创建
|
|
- 表结构和索引创建
|
|
- 初始数据导入
|
|
|
|
### Phase 2: 核心服务开发 (2-3周)
|
|
1. **网关服务** (emotion-gateway)
|
|
- 路由配置
|
|
- 统一鉴权
|
|
- 限流熔断
|
|
|
|
2. **用户服务** (emotion-user)
|
|
- 用户注册登录
|
|
- JWT Token管理
|
|
- 用户资料CRUD
|
|
|
|
3. **AI对话服务** (emotion-ai)
|
|
- 对话管理
|
|
- 消息处理
|
|
- AI接口集成
|
|
|
|
### Phase 3: 业务服务开发 (3-4周)
|
|
1. **情绪记录服务** (emotion-record)
|
|
2. **成长课题服务** (emotion-growth)
|
|
3. **地图探索服务** (emotion-explore)
|
|
4. **成就奖励服务** (emotion-reward)
|
|
|
|
### Phase 4: 数据服务开发 (1-2周)
|
|
1. **统计分析服务** (emotion-stats)
|
|
2. **监控告警配置**
|
|
3. **性能优化调试**
|
|
|
|
---
|
|
|
|
## 📊 服务间通信设计
|
|
|
|
### API调用关系
|
|
```
|
|
emotion-gateway
|
|
├── emotion-user (用户认证)
|
|
├── emotion-ai (AI对话)
|
|
│ └── emotion-user (用户信息)
|
|
├── emotion-record (情绪记录)
|
|
│ └── emotion-user (用户验证)
|
|
├── emotion-growth (成长课题)
|
|
│ ├── emotion-user (用户信息)
|
|
│ └── emotion-reward (奖励发放)
|
|
├── emotion-explore (地图探索)
|
|
│ └── emotion-user (用户信息)
|
|
├── emotion-reward (成就奖励)
|
|
│ └── emotion-user (用户信息)
|
|
└── emotion-stats (统计分析)
|
|
├── emotion-user (用户数据)
|
|
├── emotion-ai (对话数据)
|
|
├── emotion-record (情绪数据)
|
|
├── emotion-growth (成长数据)
|
|
└── emotion-explore (探索数据)
|
|
```
|
|
|
|
### 消息队列设计
|
|
```yaml
|
|
# RocketMQ Topic设计
|
|
topics:
|
|
- emotion-user-events # 用户事件
|
|
- emotion-conversation # 对话事件
|
|
- emotion-record-events # 情绪记录事件
|
|
- emotion-growth-events # 成长事件
|
|
- emotion-explore-events # 探索事件
|
|
- emotion-reward-events # 奖励事件
|
|
- emotion-stats-events # 统计事件
|
|
```
|
|
|
|
---
|
|
|
|
*接下来将按照此架构设计逐步创建各个微服务模块*
|