# 规范-多环境与灾难恢复

> **位置**: `docs/开发规范/规范-多环境与灾难恢复.md`
> **版本**: v1.0
> **日期**: 2026-07-08
> **关联**: AGENTS.md、TDD-00（技术栈方案）、TDD-03（开服自动化）

---

## 1. 环境定义

| 环境 | 用途 | 数据 | 暴露范围 |
|------|------|------|----------|
| **dev** | 开发调试 | 本地/测试数据 | 开发机/局域网 |
| **staging** | 预发布测试 | 生产脱敏副本 | 内网 + VPN |
| **prod** | 生产环境 | 真实玩家数据 | 公网 |

### 1.1 环境配置分离

```
docker-compose.dev.yml      → 开发环境（热重载、调试端口开放、日志详细）
docker-compose.staging.yml  → 预发布（数据隔离、全功能测试、性能监控）
docker-compose.prod.yml     → 生产环境（最小化暴露、高可用、限流严格）
```

- 生产配置（密码/密钥）**禁止提交到 git**，走环境变量或密钥管理服务（AWS Secrets Manager / HashiCorp Vault）
- Staging 数据定期从生产脱敏同步（用于真实压力测试）

---

## 2. 部署策略

### 2.1 蓝绿部署

```
[流量 100%] → 蓝环境（当前版本 v1.2.3）
                    ↓ 发版
[流量 0%]   → 绿环境（新版本 v1.3.0）← 验证通过
                    ↓ 切换
[流量 100%] → 绿环境（v1.3.0）
[流量 0%]   → 蓝环境（待命，可秒级回切）
```

| 规则 | 说明 |
|------|------|
| 蓝绿双活 | 生产环境两套实例，发版时切换流量 |
| 验证窗口 | 切流量前运行冒烟测试（5 分钟） |
| 秒级回切 | 发现问题立即切回旧版本 |
| 会话保持 | 切换时在线玩家不中断（Nakama 支持） |

### 2.2 金丝雀发布（可选）

- 先给 5% 玩家发新版，监控 30 分钟无异常后全量
- 用于高风险更新（如战斗公式调整）

---

## 3. 灾难恢复

### 3.1 回滚机制

| 场景 | 回滚方式 | 时间 |
|------|----------|------|
| 代码 bug | 蓝绿切流量 | < 30 秒 |
| 数据库错误 | 执行 migration down 脚本 | < 5 分钟 |
| 配置错误 | Nacos 热更回滚 | < 10 秒 |
| 热更问题 | 热更包一键回滚 | < 1 分钟 |
| 全服宕机 | 切换备用集群 | < 2 分钟 |

### 3.2 数据库恢复

- **全量备份**: 每日 04:00 自动执行，保留 30 天
- **增量备份**: 每小时 WAL 归档，保留 7 天
- **时间点恢复(PITR)**: 可恢复到任意时间点（精度 ±5 分钟）
- **恢复演练**: 每季度执行一次灾难恢复演练

### 3.3 事故处理流程

```
1. 发现事故 → 立即在运维群告警
2. 判断影响范围 → 决定回滚/热修/降级
3. 执行恢复 → 验证恢复成功
4. 写事故复盘 → 存入 docs/事故复盘/YYYY-MM-DD-标题.md
5. 复盘内容：原因/影响/修复过程/预防措施/Action Items
```

---

## 4. 高可用要求

| 组件 | 高可用策略 | RTO | RPO |
|------|-----------|-----|-----|
| 游戏服 | 多实例 + 负载均衡 | < 2min | 0 |
| 数据库 | 主从 + 自动故障转移 | < 5min | < 1min |
| 缓存 | Valkey Cluster | < 1min | < 1min |
| 配置中心 | Nacos 集群 | < 1min | 0 |
| CDN | 多厂商备份 | < 5min | 0 |

---

## 5. 版本记录

- **v1.0**（2026-07-08）: 初始版本，覆盖环境定义、蓝绿部署、灾难恢复、高可用
