Files
cs-note/hzh/Gen2D/14-部署架构.md
T

201 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 14. 部署架构
> **一句话概括**:Docker Compose 编排 + Prometheus 监控 + Grafana 可视化 + 自动化部署脚本。
---
## 容器拓扑
```mermaid
flowchart TB
subgraph "Docker Compose"
subgraph "应用层"
FE["frontend-v2\nReact SPA\nNginx :80"]
BE["backend-v2\nGo HTTP Server\n:8080"]
end
subgraph "数据层"
DB["MySQL\n持久化存储"]
RD["Redis\n缓存 + 限流"]
RMQ["RabbitMQ\n消息队列"]
end
subgraph "监控层"
PR["Prometheus\n指标采集 :9090"]
GF["Grafana\n可视化 :3000"]
end
subgraph "外部服务"
AI["LLM API\n(OpenAI 兼容)"]
IG["Image Gen API\n文生图"]
QN["七牛云 CDN\n对象存储"]
end
end
FE -->|"HTTP API"| BE
BE -->|"SQL"| DB
BE -->|"Redis 协议"| RD
BE -->|"AMQP"| RMQ
BE -->|"HTTP"| AI
BE -->|"HTTP"| IG
BE -->|"Upload"| QN
PR -->|"/metrics\n每 10s"| BE
GF -->|"PromQL"| PR
FE -->|"CDN URL"| QN
style FE fill:#61dafb,stroke:#333,color:#000
style BE fill:#00add8,stroke:#333,color:#fff
style PR fill:#e6522c,stroke:#333,color:#fff
style GF fill:#f46800,stroke:#333,color:#fff
```
---
## 服务组成
| 服务 | 镜像 | 端口 | 职责 |
|------|------|------|------|
| `backend-v2` | 自建 Go 镜像 | `9001:8080` | HTTP API + 管线执行 |
| `frontend-v2` | 自建 Nginx 镜像 | `9000:80` | React SPA 静态资源 |
| `redis` | `redis:7-alpine` | `6379` | 令牌桶限流 + 缓存 |
| `rabbitmq` | `rabbitmq:3-management` | `5672/15672` | 可选消息队列 |
| `prometheus` | `prom/prometheus` | `9090` | 指标采集与告警 |
| `grafana` | `grafana/grafana` | `3000` | 仪表盘可视化 |
---
## 监控栈
### Prometheus 配置
```yaml
# deploy/prometheus/prometheus.yml
scrape_configs:
- job_name: "gen2d-backend"
static_configs:
- targets: ["backend-v2:8080"]
metrics_path: "/metrics"
scrape_interval: 10s
```
Prometheus 每 **10 秒**抓取一次后端的 `/metrics` 端点,采集全部 35+ 指标。
### Grafana 自动化
```mermaid
flowchart LR
subgraph "Provisioning"
DS["datasources/\n自动配置数据源"]
DB["dashboards/\n自动导入仪表盘"]
end
subgraph "Grafana"
GF["Grafana Server\n:3000"]
end
DS -->|"启动时加载"| GF
DB -->|"启动时加载"| GF
```
Grafana 通过 provisioning 机制自动加载:
- **数据源配置** — 指向 Prometheus 实例
- **仪表盘 JSON** — 预定义的 3 个仪表盘
### 告警规则
10 条告警规则覆盖全栈关键指标:
| 告警名称 | 条件 | 严重程度 |
|----------|------|----------|
| 后端实例宕机 | `up == 0` 持续 1 分钟 | Critical |
| HTTP 5xx 错误率 | `> 5%` 持续 2 分钟 | Warning |
| 请求延迟过高 | `P99 > 5s` 持续 3 分钟 | Warning |
| 管线任务失败率 | `> 10%` 持续 5 分钟 | Warning |
| 协程池队列满 | `pool_queued_tasks > 90` | Warning |
| 协程池拒绝率 | `> 20%` 持续 2 分钟 | Critical |
| 用户限流触发 | `rate_limit_rejected > 50/min` | Info |
| Redis 连接失败 | `redis_up == 0` | Warning |
| RabbitMQ 连接失败 | `rabbitmq_up == 0` | Warning |
| 磁盘空间不足 | `< 10%` 可用 | Critical |
---
## 部署脚本
```mermaid
flowchart TD
A["deploy.sh"] --> B["拉取最新代码"]
B --> C["构建后端镜像\ndocker build"]
C --> D["构建前端镜像\ndocker build"]
D --> E["docker compose up -d"]
E --> F["健康检查\n等待服务就绪"]
F --> G["部署完成"]
style A fill:#4caf50,stroke:#333,color:#fff
```
部署脚本 `deploy.sh` 负责:
1. 拉取最新代码
2. 构建 Docker 镜像
3. 使用 Docker Compose 启动所有服务
4. 执行健康检查验证部署
---
## 配置管理
```mermaid
flowchart LR
subgraph "配置源"
Y["config.yaml\n文件配置"]
E[".env\n环境变量"]
D["默认值\n代码内置"]
end
subgraph "加载优先级"
P["ENV > YAML > Default"]
end
subgraph "运行时"
C["Config Struct\n全局配置对象"]
end
D --> P
Y --> P
E --> P
P --> C
```
| 环境 | 配置方式 | 说明 |
|------|----------|------|
| 开发 | `config.yaml` 文件 | 本地开发,配置直观 |
| 测试 | 环境变量覆盖 | CI/CD 管线注入 |
| 生产 | K8s ConfigMap / Secret | 容器编排平台管理 |
---
## 网络与存储
### Docker 网络
所有服务加入 `gen2d-v2-net` 桥接网络,容器间通过服务名互相访问。
### 数据卷
| 卷名 | 挂载点 | 用途 |
|------|--------|------|
| `backend-v2-data` | `/data` | 后端持久化数据 |
| MySQL data | 默认 | 数据库持久化 |
| Redis data | 默认 | 缓存持久化 |
---
## 关联文档
| 文档 | 关系 |
|------|------|
| [07 - 可观测性](07-observability.md) | Prometheus 指标与 Grafana 仪表盘详情 |
| [15 - 配置级联](15-config-cascade.md) | YAML / ENV / Default 三层配置机制 |
| [01 - 系统总览](01-system-overview.md) | 部署架构在整体系统中的位置 |
| [00 - 索引](00-index.md) | 返回文档总览 |