部署架构初步方案
文档编号: SYS-TR-AR-005
版本: 1.0
日期: 2026-03-10
编制: 系统架构师
审核: 审核通过 ✅
1. 部署目标
- 高可用:单点故障不影响整体服务
- 可扩展:支持水平扩展应对业务增长
- 易运维:简化部署流程,降低运维成本
- 安全性:网络隔离,安全访问控制
2. 部署架构图
┌─────────────────────────────────────────────────────────────────┐
│ 外部网络 │
│ 互联网用户 / VPN用户 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 接入层 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ CDN(静态资源加速) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 负载均衡(Nginx / SLB) │ │
│ │ SSL终止 / 流量分发 / 健康检查 │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 应用层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 前端服务器1 │ │ 前端服务器2 │ │ 前端服务器N │ │
│ │ (Vue+Nginx)│ │ (Vue+Nginx)│ │ (Vue+Nginx)│ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────────┼────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 后端服务器1 │ │ 后端服务器2 │ │ 后端服务器N │ │
│ │(SpringBoot) │ │(SpringBoot) │ │(SpringBoot) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
└─────────┼────────────────┼────────────────┼────────────────────┘
│ │ │
└────────────────┼────────────────┘
▼
┌─────────────────────────────────────────────────────────────────┐
│ 数据层 │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ MySQL主库 │ │ MySQL从库 │ │ Redis Cluster │ │
│ │ (写操作) │ │ (读操作) │ │ (缓存/会话) │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────┘3. 环境规划
3.1 环境划分
| 环境 | 用途 | 配置 | 数据 |
|---|---|---|---|
| 开发环境 | 开发联调 | 单机部署 | 模拟数据 |
| 测试环境 | 功能测试 | 双机部署 | 测试数据 |
| 预发布环境 | 上线前验证 | 同生产 | 生产脱敏数据 |
| 生产环境 | 正式运行 | 集群部署 | 真实数据 |
3.2 服务器规划(生产环境)
| 角色 | 数量 | 配置 | 说明 |
|---|---|---|---|
| 负载均衡 | 2 | 4C8G | Nginx主备 |
| 前端应用 | 2 | 4C8G | Vue静态资源 |
| 后端应用 | 2 | 8C16G | Spring Boot服务 |
| MySQL | 2 | 8C32G | 主从架构 |
| Redis | 3 | 4C16G | 3主3从集群 |
| 监控 | 1 | 4C8G | Prometheus+Grafana |
4. 容器化部署
4.1 Docker镜像
dockerfile
# 前端镜像
FROM nginx:alpine
COPY dist/ /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
# 后端镜像
FROM eclipse-temurin:17-jre-alpine
COPY target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]4.2 Docker Compose编排
yaml
version: '3.8'
services:
# 前端服务
frontend:
image: system-platform/frontend:latest
ports:
- "80:80"
depends_on:
- backend
deploy:
replicas: 2
# 后端服务
backend:
image: system-platform/backend:latest
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
- MYSQL_HOST=mysql
- REDIS_HOST=redis
depends_on:
- mysql
- redis
deploy:
replicas: 2
# MySQL
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=xxxx
- MYSQL_DATABASE=system_platform
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
# Redis
redis:
image: redis:7-alpine
command: redis-server --appendonly yes
volumes:
- redis_data:/data
ports:
- "6379:6379"
volumes:
mysql_data:
redis_data:5. 高可用设计
5.1 应用层高可用
┌─────────────────────────────────────────┐
│ 负载均衡(Nginx) │
│ 健康检查 + 故障转移 │
└─────────────────────────────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 应用实例1 │ │ 应用实例2 │
│ (健康) │ │ (健康) │
└─────────────────┘ └─────────────────┘
故障场景:
┌─────────────────────────────────────────┐
│ 负载均衡(Nginx) │
│ 健康检查 + 故障转移 │
└─────────────────────────────────────────┘
│ │
▼ X
┌─────────────────┐ ┌─────────────────┐
│ 应用实例1 │ │ 应用实例2 │
│ (健康) │ │ (故障) │
│ 接收全部流量 │ │ 自动剔除 │
└─────────────────┘ └─────────────────┘5.2 数据库高可用
MySQL主从架构:
┌─────────────┐ ┌─────────────┐
│ MySQL主库 │<───────>│ MySQL从库 │
│ (写) │ 同步 │ (读) │
└──────┬──────┘ └──────┬──────┘
│ │
│<────── 故障切换 ──────>│
│ (Keepalived) │Redis Cluster:
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Master1 │<───>│ Master2 │<───>│ Master3 │
│ (slot) │ │ (slot) │ │ (slot) │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Slave1 │ │ Slave2 │ │ Slave3 │
└─────────┘ └─────────┘ └─────────┘6. 监控告警
6.1 监控指标
| 层级 | 监控项 | 工具 |
|---|---|---|
| 基础设施 | CPU、内存、磁盘、网络 | Prometheus + Node Exporter |
| 应用服务 | QPS、响应时间、错误率 | Prometheus + Micrometer |
| 数据库 | 连接数、慢查询、主从延迟 | Prometheus + MySQL Exporter |
| 缓存 | 命中率、内存使用、连接数 | Prometheus + Redis Exporter |
| 业务 | 登录次数、操作频率 | 自定义指标 |
6.2 告警规则
| 告警项 | 阈值 | 级别 |
|---|---|---|
| CPU使用率 | >80% | 警告 |
| CPU使用率 | >90% | 严重 |
| 内存使用率 | >80% | 警告 |
| 磁盘使用率 | >85% | 警告 |
| 应用响应时间 | >500ms | 警告 |
| 应用错误率 | >1% | 严重 |
| MySQL主从延迟 | >1s | 警告 |
| Redis命中率 | <90% | 警告 |
7. 备份恢复
7.1 备份策略
| 数据类型 | 备份方式 | 频率 | 保留期 |
|---|---|---|---|
| MySQL全量 | mysqldump | 每日 | 30天 |
| MySQL增量 | binlog | 实时 | 7天 |
| Redis | RDB + AOF | 每小时 | 7天 |
| 配置文件 | 文件备份 | 变更时 | 永久 |
7.2 恢复流程
1. 确认故障范围
↓
2. 停止受影响服务
↓
3. 恢复数据(全量+增量)
↓
4. 验证数据完整性
↓
5. 启动服务
↓
6. 验证服务正常
↓
7. 恢复业务流量8. 安全部署
8.1 网络安全
互联网 ──> 防火墙 ──> DMZ区(Nginx)──> 内网(应用+数据)
安全组规则:
- 外网只允许访问 80/443
- 内网只允许内网IP访问
- 数据库只允许应用服务器访问8.2 访问控制
| 访问方式 | 控制措施 |
|---|---|
| 服务器登录 | SSH密钥 + 堡垒机 |
| 数据库访问 | 白名单 + 独立账号 |
| 管理后台 | VPN + 双因素认证 |
| API访问 | Token + 限流 |
9. 下一步行动
- [ ] 编写Dockerfile和Docker Compose配置
- [ ] 搭建Harbor镜像仓库
- [ ] 配置CI/CD流水线
- [ ] 部署Prometheus监控
- [ ] 配置告警通知
- [ ] 制定灾备方案
文档版本历史
| 版本 | 日期 | 修改内容 | 修改人 |
|---|---|---|---|
| 1.0 | 2026-03-10 | 初始版本 | 系统架构师 |
