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