lawless-design/docs/00_项目概述/开发规范/规范-多环境与灾难恢复.md
2026-07-09 14:39:17 +08:00

104 行
3.2 KiB
Markdown

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

# 规范-多环境与灾难恢复
> **位置**: `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: 初始版本覆盖环境定义蓝绿部署灾难恢复高可用