为复杂的 SLG(Simulation & Strategy)游戏服务器设计一个完整可信的后端分层架构,需要满足高并发、高一致性、长生命周期状态管理、复杂行为流转等核心诉求。下面是一个成熟级别的分层架构设计方案,广泛借鉴了《三国志战略版》《万国觉醒》等头部游戏实践经验,适合 MMO-SLG 类型游戏开发使用。
SLG 游戏服务端完整分层架构设计
一、整体架构分层视图(逻辑视角)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
├── 接入层(Gateway)
│ ├── WebSocket / TCP / HTTP 接入
│ ├── 鉴权 / 登录
│ ├── 用户连接 & 会话状态
│ └── 请求转发(按模块路由)
│
├── 网关后服务集群(微服务 + Actor / 领域划分)
│ ├── 玩家逻辑服务(Java / Actor)
│ │ ├── 科技 / 建筑 / 资源产出
│ │ ├── 背包 / 道具 / VIP
│ │ └── 任务 / 活动 / 功能开启
│ │
│ ├── 世界地图服务(Java / Actor)
│ │ ├── 分片地图(分区级别 Actor)
│ │ ├── 联盟 / 领地 / 采集 / 战斗
│ │ └── 资源 / 怪物 / 地图事件
│ │
│ ├── 战斗服务(Go / C++)
│ │ ├── 单人战斗模拟(PVE)
│ │ ├── 行军战斗(状态对碰)
│ │ └── 实时帧同步(如竞技模式)
│ │
│ ├── 房间服务(Go)
│ │ ├── 房间生命周期管理
│ │ ├── 玩家同步广播
│ │ └── 帧同步逻辑调度
│ │
│ ├── 聊天服务(Go + Redis PubSub)
│ │ ├── 世界 / 国家 / 联盟频道
│ │ └── 私聊、通知、系统广播
│ │
│ ├── 联盟服务
│ │ ├── 创建 / 管理 / 宣战 /科技
│ │ └── 成员列表 / 公告 / 活动进度
│ │
│ ├── 社交服务
│ │ └── 好友 / 黑名单 / 点赞 / 关注
│
├── 支撑层(用户、资源、配置等)
│ ├── 账号服务(登录注册、认证)
│ ├── 用户中心(实名认证、Ban、在线状态)
│ ├── 数据存储(MySQL、Redis、Mongo、OSS)
│ ├── 配置中心(热更配置、多语言支持)
│ ├── 日志系统(埋点日志、战斗录像、异常日志)
│ └── 消息系统(Kafka / NATS:异步事件总线)
│
├── 后台服务
│ ├── GM 后台(封号、资源调控)
│ ├── 数据分析(ETL / BI / 用户留存)
│ ├── 运维监控(Prometheus + Grafana)
│ └── 活动运营(限时活动脚本执行等)
|
二、模块分层说明(详细职能)
1. 接入层(Gateway / Proxy Layer)
| 模块 |
说明 |
| 长连接管理 |
每个连接代表一个玩家会话(保持心跳、断线重连) |
| 路由协议 |
Protobuf/JSON 协议解析 → 路由给不同服务 |
| 鉴权与验证 |
校验 Token / Device / IP 黑白名单 |
| 限流与防刷 |
接入层可限流(全局QPS、IP限频等) |
2. 玩家逻辑服务(Player Logic Service)
| 子模块 |
说明 |
| 建筑系统 |
升级建筑、CD处理、功能开启 |
| 科技系统 |
解锁、研究、与战斗相关联 |
| 背包/道具系统 |
使用道具、叠加、绑定属性等 |
| 成长系统 |
任务链、活跃奖励、签到等 |
| 状态持久化 |
玩家数据入 MySQL / Redis 快照 |
| 日志记录 |
埋点行为、异常操作 |
3. 世界地图服务(Map/World)
| 子模块 |
说明 |
| 地图管理 |
世界地图切片(格子级),每格子状态 |
| 行军控制 |
玩家部队调度、到达、战斗/采集 |
| 联盟占领逻辑 |
占城 / 领地扩张 / 建设系统 |
| 怪物刷怪逻辑 |
分时刷新、掉落表 |
| 大世界同步 |
地图广播(区域推送) |
注:建议使用 Akka / ProtoActor 等 Actor 模型分片实现地图格子服务。
4. 战斗服务(Battle Service)
| 模式 |
说明 |
| PVE 战斗 |
怪物、城防、剧情副本,回合制模拟 |
| PVP 行军战斗 |
多人城池战,预计算胜负/伤害 |
| 实时帧同步战斗 |
特殊竞技模式(如擂台、5v5) |
| 战斗录像 |
每场战斗可存储回放数据,便于审核与复盘 |
战斗模块可完全无状态,仅接收战斗请求 + 输出战报结果。
5. 房间服务(Room Service)
| 模块 |
说明 |
| 房间生命周期管理 |
创建/销毁房间、房间人数、状态控制 |
| 帧同步管理 |
定时 Tick,收集指令 → 广播帧 |
| 状态同步 |
玩家状态变化广播(差量同步) |
| 断线重连 |
保存玩家上下帧索引,实现帧补发 |
6. 账号与用户中心
| 模块 |
功能 |
| 注册/登录 |
多方式支持(手机号/游客/平台) |
| Token 管理 |
JWT + Redis 实现在线状态 |
| 玩家信息查询 |
昵称 / 头像 / 设备绑定 |
| 多端登录控制 |
是否允许双端、踢下线机制 |
| 安全策略 |
冻结、封号、黑名单管理 |
7. 异步服务 & 支撑组件
| 模块 |
用途 |
| Kafka / NATS |
模块间解耦(如战斗完成 → 发奖励) |
| Redis |
玩家缓存、帧缓冲、排行榜等 |
| MySQL |
主数据存储(玩家/地图/联盟) |
| MongoDB / OSS |
战报/录像/地图快照 |
| 配置中心 |
动态热更新游戏配置(YAML / JSON) |
三、微服务拆分建议(部署视角)
| 微服务名称 |
语言推荐 |
横向扩展 |
典型数量 |
说明 |
| gateway |
Go |
✅ |
多实例 |
保持短连接、协议转发 |
| player-service |
Java |
✅ |
按业务拆分 |
状态复杂,推荐按功能领域切割 |
| map-service |
Java |
✅ |
按地图区域 |
Actor 模型映射地图格子 |
| battle-service |
Go / C++ |
✅ |
每战斗池隔离 |
高性能战斗模拟 |
| chat-service |
Go |
✅ |
分频道部署 |
广播/私聊系统 |
| auth-service |
Go/Java |
✅ |
轻量级 |
登录鉴权 |
| gm-service |
Java |
✅ |
轻量 |
后台操作 |
| scheduler/timer |
Python |
✅ |
定时触发 |
CD倒计时、活动调度等 |
| analytics |
Python |
✅ |
ETL脚本 |
BI 与数据统计 |
四、总结优势
- ✨ 高可维护性:逻辑与地图完全解耦,可独立迭代
- ✨ 高并发能力:战斗与连接服务使用 Go,轻量高效
- ✨ 弹性扩展:按地图、战斗房间可横向拉伸
- ✨ 业务解耦:异步事件总线支撑复杂联动逻辑
- ✨ 热更新支持:配置中心 + GM 控制支持在线变更