pygame-eat-bean 游戏服务架构(点击放大查看)
一、背景:用云部署一键搭建游戏服务
腾讯云智能顾问(TSA)提供了云部署最佳实践能力,可以基于经过验证的架构模板一键购买和部署云上资源。本文介绍的 pygame-eat-bean 吃豆游戏服务,正是通过智能顾问云部署能力快速搭建的一套完整游戏后端架构。
参考最佳实践:腾讯云智能顾问 — 云部署最佳实践:游戏服务架构
通过智能顾问云部署,可以一键完成 CLB + CVM + CDB + Redis 的资源购买和网络配置,大幅降低手动搭建的复杂度和出错概率。
在云部署完成基础设施搭建后,我们登录到云服务器上,对已部署的游戏服务进行了完整的架构梳理和分析。以下是梳理报告。
二、整体架构概览
EIP → 内网 VIP
HTTP :80 / :20000 / :30001
(跳板机)
DB: rumpetroll
会话/节点注册/心跳
后端节点分工
| 节点 | 角色 | 运行服务 | 端口 |
|---|---|---|---|
| login2-跳板机 | 登录服 A | user_server | 30001 |
| login1 | 登录服 B | user_server | 30001 |
| game1 | 游戏服 1 | game_server / golds | 20000 |
| game2 | 游戏服 2 | game_server / golds | 20000 |
三、云部署自动化搭建
整套架构通过腾讯云智能顾问云部署自动搭建,包括:
- CLB 负载均衡:自动创建并配置后端绑定,实现登录服的流量分发
- CVM 云服务器 x4:2 台登录服 + 2 台游戏服,自动配置安全组和网络
- CDB MySQL:游戏数据持久化存储(数据库名:rumpetroll)
- Redis 缓存:会话缓存和热数据存储
- VPC 网络:所有资源在同一 VPC 内,内网互通
云部署完成后,游戏服务的安装包会自动从腾讯云镜像源下载并部署到 CVM,服务自动注册为 systemd 管理,开机自启。整个过程无需手动 SSH 到服务器进行配置。
四、代码部署结构
游戏服务通过 RPM 包自动安装到 /data/pygame_eat_bean/ 目录:
二进制文件特征
| 文件 | 大小 | 格式 | 用途 |
|---|---|---|---|
| user_server | 18MB | ELF 64-bit 静态链接 (musl libc) | 用户认证/登录 |
| game_server | 30MB | ELF 64-bit 静态链接 (musl libc) | 游戏核心逻辑 |
| golds | 9.2MB | ELF 64-bit 静态链接 (musl libc) | 虚拟货币/金币 |
所有二进制文件均通过 PyInstaller + staticx 打包为完全静态链接的可执行文件,使用 musl libc 1.2.2,无需任何外部动态库依赖。
五、技术栈
| 层次 | 技术 | 说明 |
|---|---|---|
| 开发语言 | Python 3.11 | 主要业务逻辑 |
| 打包方式 | PyInstaller + staticx | 编译为静态链接 ELF 可执行文件 |
| C 运行时 | musl libc 1.2.2 | 轻量级 libc,无外部依赖 |
| 并发模型 | greenlet | 轻量级协程 |
| 数据库 ORM | SQLAlchemy | 关系型数据库访问 |
| 主数据库 | MySQL (CDB) | 持久化存储 |
| 缓存 | Redis | 会话缓存、热数据 |
| Web 框架 | libonion (嵌入式) | 内嵌 HTTP 服务 |
六、服务管理
游戏服务通过 systemd 管理生命周期,支持自动重启和日志收集:
运行状态
| 指标 | 值 |
|---|---|
| CPU 使用率 | 0.1% |
| 常驻内存 (RSS) | 86.5 MB |
| 虚拟内存 (VSZ) | 273.9 MB |
| 运行状态 | Active (running) |
附:部署后故障排查与修复
云部署完成后,登录服务器进行验证时,发现了两个问题并完成了修复。
问题一:注册/登录返回"系统繁忙"
根因:game_server 启动时未指定 --address 参数,向 Redis 注册了 0.0.0.0:20000 而非真实内网 IP。user_server 登录成功后从 Redis 获取游戏服地址,拿到 0.0.0.0:20000 无法连接。
修复:两台游戏服的 systemd service 添加 --address=<内网IP> 参数并重启,清理 Redis 中残留的旧注册记录。
问题二:外网 80 端口无法访问
根因:CLB 只配置了 30001(登录API)和 20000(游戏服)的监听规则,缺少 HTTP 80 端口监听器。游戏的 Web 前端由 game_server(端口 20000)提供。
修复:通过腾讯云 SDK 创建 HTTP 80 监听器,将前端端口 80 的请求转发到两台游戏服的 20000 端口。
修复后 CLB 监听器配置
| 前端端口 | 协议 | 后端端口 | 后端实例 | 说明 |
|---|---|---|---|---|
| 80 | HTTP | 20000 | game1, game2 | 新增 — 用户默认访问端口 |
| 20000 | HTTP | 20000 | game1, game2 | 游戏服直接访问 |
| 30001 | HTTP | 30001 | login1, login2 | 登录/注册 API |
修复验证
七、从云部署到架构梳理的完整流程
本次游戏服务的搭建和分析,展示了一个完整的「云部署 → 上机验证 → 架构梳理」工作流:
- 云部署阶段:通过智能顾问云部署最佳实践,一键购买 CLB + 4 台 CVM + CDB + Redis,自动完成网络配置和游戏服务安装
- 上机验证:SSH 登录云服务器,对服务器进行全面探测和架构分析
- 架构梳理:自动生成包含架构拓扑、代码结构、配置详情、技术栈、网络拓扑的完整分析报告
- 故障排查:发现并修复 game_server 注册地址错误和 CLB 80 端口缺失两个问题
- 报告传递:通过 GitHub 仓库将报告传递到博客平台,整理发布
核心价值:智能顾问云部署让基础设施搭建变成"一键操作",登录服务器后即可对代码和架构进行全面梳理——从资源购买到架构文档的全流程都可以在极短时间内完成。