去年负责一个海外游戏发行项目,服务器部署是个系统工程。这篇记录一下完整的部署流程和踩过的坑。
部署前准备
1. 服务器拓扑图
部署前必须提供清晰的架构图,明确各组件关系。
1 | ┌─────────────────────────────────────────────────────────────────────┐ |
拓扑图必须包含:
- 负载均衡器(LB)配置
- 各服务器名称和功能
- 对内开放端口号
- 对外开放端口号
- 数据库、缓存等中间件位置
常见问题:
- 对外开发端口一般只能是 80 和 443
- 部分服务器需要渠道方重新配置访问权限才能访问外网和内网
2. 服务器配置表
提供详细的服务器资源配置清单:
| No | Environment | Instance Name | IP | Instance Type | Configurations | CPU | RAM | Extra Volumes | Volumes | Module | System Type |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Production | Game-01 | 111.111.111.111 | EC2 | c4.xlarge | 8 | 16GB | - | 100GB | Game/H5 | CentOS 7 |
| 2 | Production | Game-02 | 111.111.111.112 | EC2 | c4.xlarge | 8 | 16GB | - | 100GB | Game/H5 | CentOS 7 |
| 3 | Production | Redis-Master | 111.111.111.113 | EC2 | r4.large | 4 | 32GB | - | 50GB | Cache | CentOS 7 |
| 4 | Production | MySQL-Master | 111.111.111.114 | EC2 | r4.xlarge | 8 | 64GB | 500GB SSD | 100GB | Database | CentOS 7 |
注意事项:
- 需求的配置可能不会一次性到位
- 对高配置服务器需要详细说明用途以获得批准
- 预留 20% 的冗余资源应对突发流量
3. 域名与端口表
| No | Instance Name | IP | Ports | Domain Name |
|---|---|---|---|---|
| 1 | Game-API | 111.111.111.111 | 80, 443, 8080 | api.game.com |
| 2 | Game-WS | 111.111.111.112 | 8080, 8443 | ws.game.com |
| 3 | Admin | 111.111.111.113 | 80, 443 | admin.game.com |
| 4 | CDN | - | 80, 443 | cdn.game.com |
常见问题:
- 每个域名绑定两个固定 IP 实现高可用
- 极少情况下会出现其中一个 IP 不通,导致连接不稳定
部署执行清单
阶段 1:基础设施准备
1 | ┌─────────────────────────────────────────────────────────────┐ |
阶段 2:服务部署
1 | # 2.1 环境准备 |
阶段 3:安全加固
1 | # 3.1 防火墙配置 |
集成与联调
1. CAS 登录联调
中央认证服务(CAS)集成是游戏渠道发行的关键环节。
1 | ┌─────────────────────────────────────────────────────────────┐ |
联调检查项:
| 检查项 | 浏览器调试 | Staging 测试 | Production |
|---|---|---|---|
| OAuth 流程 | ✓ | ✓ | ✓ |
| Token 验证 | ✓ | ✓ | ✓ |
| 用户信息获取 | ✓ | ✓ | ✓ |
| 错误处理 | ✓ | ✓ | ✓ |
2. SPS 计费联调
计费系统(SPS)联调需要特别注意:
1 | // 计费回调处理示例 |
联调环境要求:
| 环境 | URL | 用途 |
|---|---|---|
| Staging | https://staging.game.com | 内部测试 |
| H5 | https://h5.game.com | H5 渠道测试 |
| Production | https://game.com | 正式上线 |
注意事项:
- H5 和 Production 环境测试需要配置代理才能访问
- 需要提供 staging 环境测试的 APP
- 需要渠道方配置到 staging 环境
3. 测试账号配置
| 环境 | 测试账号 | 用途 |
|---|---|---|
| Staging | staging_user_001 | CAS 登录测试 |
| Staging | staging_pay_001 | SPS 计费测试 |
| Production | prod_test_001 | 生产环境验证 |
监控与告警
1. 监控需求表
部署前需向渠道方提交监控需求:
| 监控项 | 告警阈值 | 通知方式 | 响应时间 |
|---|---|---|---|
| CPU 使用率 | > 80% | 邮件+短信 | 5分钟 |
| 内存使用率 | > 85% | 邮件+短信 | 5分钟 |
| 磁盘使用率 | > 90% | 邮件 | 30分钟 |
| 服务可用性 | = 0 | 电话+邮件+短信 | 立即 |
| 响应时间 | > 500ms | 邮件 | 10分钟 |
| 错误率 | > 1% | 邮件 | 10分钟 |
| 在线用户数 | < 基准值 50% | 邮件 | 30分钟 |
2. 日志收集配置
1 | # filebeat.yml |
测试与验收
1. 压力测试报告
测试环境:
1 | 服务器配置:16 CPU / 32G RAM / 100G DISK |
测试目标:
| 指标 | 目标值 | 实际结果 | 状态 |
|---|---|---|---|
| 并发连接数 | 5000 | 5000+ | ✓ |
| TPS | 3000 | 5000 | ✓ |
| 平均响应时间 | < 100ms | 15ms | ✓ |
| 错误率 | < 0.1% | 0.01% | ✓ |
2. 兼容性测试
测试设备清单:
| 设备类型 | 品牌/型号 | 系统版本 | 分辨率 | 状态 |
|---|---|---|---|---|
| Android | Samsung S10 | Android 10 | 3040x1440 | ✓ |
| Android | Xiaomi 9 | Android 9 | 2340x1080 | ✓ |
| iOS | iPhone 11 | iOS 13 | 1792x828 | ✓ |
| Android TV | Mi Box | Android 8 | 1920x1080 | ✓ |
注意事项:
- 部分渠道方主流机型国内无法找到
- 可通过浏览器模拟特殊分辨率进行测试
3. 测试用例清单
| 模块 | 测试项 | 优先级 | 状态 |
|---|---|---|---|
| 登录 | CAS 登录成功 | P0 | ✓ |
| 登录 | CAS 登录失败处理 | P0 | ✓ |
| 计费 | 道具购买成功 | P0 | ✓ |
| 计费 | 重复支付处理 | P0 | ✓ |
| 游戏 | 创建房间 | P1 | ✓ |
| 游戏 | 匹配系统 | P1 | ✓ |
| 游戏 | 实时对战 | P0 | ✓ |
| 系统 | 断线重连 | P0 | ✓ |
| 系统 | 消息推送 | P1 | ✓ |
上线检查清单
1 | ┌─────────────────────────────────────────────────────────────┐ |
常见问题与解决方案
问题 1:服务器访问权限
现象: 部分服务器无法访问外网或内网
解决:
- 联系渠道方 IT 部门重新配置访问权限
- 通常需要 2-3 轮调整才能完全正常
问题 2:域名解析不稳定
现象: 域名绑定两个 IP,偶尔其中一个不通
解决:
- 配置健康检查和自动切换
- 在客户端实现失败重试机制
问题 3:数据库远程访问
现象: 需要设置 root 密码并允许远程登录
解决:
1 | -- 设置 root 密码 |
问题 4:GD 访问权限
现象: Google Drive 文档访问受限
解决:
- 向渠道方申请 GD 访问权限
- 方便文档同步和 Bug 跟踪
写在最后
游戏服务器部署是个系统工程,需要多个团队密切配合。这篇记录涵盖了从基础设施准备到上线运维的全过程,可作为部署工作的参考模板。
关键成功要素:
- 充分沟通:与渠道方保持密切沟通,及时反馈问题
- 文档先行:所有配置和需求必须有文档记录
- 环境一致:Staging 和 Production 环境保持一致
- 监控完善:部署前确保监控系统就绪
- 应急预案:准备好回滚方案和应急联系人
通过遵循标准化的部署流程,可以大幅降低上线风险,确保游戏服务的稳定运行。