游戏接入网关开源方案调研报告
调研背景:当前业务采用"一房间一StatefulSet"的Kubernetes部署模式,每个房间通过NodePort对外暴露TCP端口。本文旨在调研开源游戏接入网关方案,为后续方案验证提供技术依据。
一、业务场景与核心需求
1.1 当前架构特征
| 特征 | 描述 |
|---|---|
| 部署模式 | 每个游戏房间对应一个独立的StatefulSet(replicas=1),由调度服务动态生成YAML并管理生命周期 |
| 网络暴露 | 每个房间通过独立的NodePort Service对外暴露TCP端口 |
| 规模 | 上限2000个 |
| 生命周期 | 房间临时性,创建到销毁约5小时,创建后永不更新 |
1.2 网关引入的核心诉求
- 统一接入入口 :客户端只需连接一个固定地址(如
gateway.company.com:27015),而非动态变化的NodePort - 接入认证:连接建立时进行身份校验(Token/ID验证),防止未授权访问
- 会话管理 :建立连接后维护Session上下文,关联
SessionID ↔ (RoomID, PlayerID) - 智能路由:根据RoomID将流量转发到对应的后端Pod
- 跨云部署能力:方案须能在私有云、腾讯云TKE、阿里云ACK上一致部署
二、开源方案全景扫描
根据架构层级和专业化程度,可将现有开源方案分为三大类:
2.1 专用游戏网关(Game-Native Gateway)
2.1.1 go-pantheon/Janus
项目概述:Janus是go-pantheon游戏生态的核心网关组件,基于Go语言和go-kratos微服务框架构建,专为游戏客户端连接处理和请求转发设计。
核心架构:
- Janus作为边缘服务(Edge Service),位于外部客户端与内部微服务之间,提供统一的客户端通信入口
- 配套生态包含:Roma(游戏核心逻辑服务)、Lares(用户认证服务)、Senate(后台管理服务),构成完整的游戏服务器集群解决方案
协议支持:
| 协议 | 端口 | 适用场景 |
|---|---|---|
| TCP | 7001 | 高性能游戏客户端(Worker Pool架构) |
| WebSocket | 7002 | 浏览器客户端 |
| KCP (UDP) | 7003 | 低延迟实时游戏(FEC + 重传) |
| HTTP | 8100 | REST API和健康检查 |
| gRPC | 9100 | 内部服务通信 |
安全机制:
- ECDH密钥交换 + Ed25519证书签名
- AES-GCM端到端消息加密
- Token验证(与Lares认证服务集成)
- 支持zlib数据压缩优化传输
路由系统:基于Redis的三层路由架构------网关路由表(服务发现与负载分发)、玩家路由表(玩家特定连接路由)、房间路由表(游戏房间和会话管理)。
部署依赖:etcd(服务发现)、Redis(路由表)、Go 1.24+。
与业务场景匹配度评估:
| 维度 | 评估 |
|---|---|
| 统一接入 | ✅ 原生支持,多协议统一入口 |
| 接入认证 | ✅ 内置完整握手+Token验证机制 |
| 会话管理 | ✅ 内置Player/Route/Room三层路由表 |
| 智能路由 | ✅ Redis动态路由,支持房间级路由 |
| K8s部署 | ⚠️ 需自行编写Helm Chart或YAML部署,无官方K8s Operator |
| 跨云能力 | ✅ 纯Go应用,依赖etcd/Redis,可部署于任何K8s集群 |
优缺点:
- ✅ 优点:功能最匹配游戏场景,安全机制完善,协议支持丰富
- ❌ 缺点:非独立组件,需融入go-pantheon整套框架;文档和社区相对有限(GitHub Star较少)
2.1.2 channeld
项目概述:channeld是为大型多人交互系统(如MMO、虚拟演唱会)设计的高性能网关服务,可无缝接入UE、Unity等引擎,用于分布式地模拟多房间及无缝大世界。
与业务匹配度:
- 主要面向"无缝大世界"场景,强调多房间/大世界的数据同步与分发
- 对于当前"独立房间"场景可能功能过重
- 需要评估其对纯TCP/gRPC协议的支持程度
优缺点:
- ✅ 优点:专为大规模多人交互设计,架构先进
- ❌ 缺点:与当前"房间制"场景匹配度一般,引入复杂度较高
2.1.3 nodehub
项目概述:Nodehub是为社交类游戏、棋牌类游戏设计的服务器端框架,通讯方式建立于gRPC基础之上。网关支持WebSocket、TCP、QUIC三种连接方式。
与业务匹配度:
- 基于gRPC的架构与当前业务(gRPC + DDS)有一定契合度
- 主要面向社交/棋牌类,对于实时战斗场景的适配需验证
优缺点:
- ✅ 优点:gRPC原生支持,协议栈较新(含QUIC)
- ❌ 缺点:场景定位偏向社交/棋牌,非通用游戏网关
2.2 云原生网关 + K8s游戏工作负载集成方案
2.2.1 Higress + OpenKruiseGame (OKG)
项目概述:
- OpenKruiseGame (OKG):CNCF工作负载项目OpenKruise在游戏领域的子项目,是一个面向多云的开源游戏服Kubernetes工作负载,提供热更新、原地升级、定向管理等游戏服管理功能
- Higress:基于阿里内部两年多的Envoy网关实践沉淀,以开源Istio与Envoy为核心构建的下一代云原生网关,实现了安全防护网关、流量网关、微服务网关三层网关合一
核心能力:
- OKG的GameServerSet可自动化管理游戏服的接入网络,为每个游戏服生成独立访问域名(如
game0.postio.example.com) - 支持多种网络模型:TCP/UDP游戏支持HostPort、SLB、NATGW;H5/WebSocket支持Ingress(Higress、Nginx、ALB等)
- Higress支持配置热更新,OKG水平伸缩时不会导致现有连接断开
与当前架构的对比:
| 维度 | 当前方案(N个StatefulSet) | OKG + Higress |
|---|---|---|
| 房间管理 | 每个房间一个StatefulSet | GameServerSet统一管理,自动生成网络配置 |
| 网络接入 | 手动创建NodePort Service | 自动生成Ingress/域名路由 |
| 扩容 | 调度器生成新YAML | GameServerSet调整replicas |
| 热更新 | 不适用(房间永不更新) | 支持原地升级 |
优缺点:
- ✅ 优点:与K8s深度集成,自动化程度高;Higress三层网关合一,运维成本低;支持多云部署
- ❌ 缺点:需要同时引入OKG和Higress两个新组件;当前"房间永不更新"的特性使OKG的热更新能力无法充分发挥;阿里云生态倾向明显(但开源可部署于任何K8s)
2.2.2 Agones + 自建/集成网关
项目概述:Agones是Google和Ubisoft共同发起的CNCF孵化项目,是行业内在Kubernetes上运行专用游戏服务器的事实标准。提供GameServer、Fleet、FleetAutoscaler、GameServerAllocation等CRD。
与网关集成:
- Agones本身专注于游戏服生命周期管理,不提供接入网关
- 需配合Envoy、Higress等网关组件实现统一接入
- Agones提供GameServerAllocation API,可用于网关查询可用房间
优缺点:
- ✅ 优点:CNCF孵化项目,社区最成熟;与当前"单Pod单房间"理念高度一致
- ❌ 缺点:需额外选型网关组件;引入Agones意味着改变当前StatefulSet管理模式
2.3 通用代理/网关 + 自建业务逻辑
2.3.1 Nginx Stream Module
项目概述:Nginx的stream模块提供TCP/UDP四层代理能力,适用于数据库连接、游戏服务器通信等非HTTP协议场景。支持stream-sticky模块实现TCP/UDP会话保持。
与业务匹配度:
- 可作为TCP四层代理,将统一入口的流量转发到后端Pod
- 但认证(Token验证)、Session管理、RoomID路由等业务逻辑需自行在Lua脚本或上层服务中实现
优缺点:
- ✅ 优点:成熟稳定,性能优秀,几乎所有的K8s环境都支持
- ❌ 缺点:业务逻辑(认证、路由)需自行开发;动态配置更新需reload(可能导致连接中断)
2.3.2 Envoy Proxy
项目概述:Envoy本质上是L3/L4服务器,TCP代理过滤器(TCP proxy filter)可执行1:1网络连接代理。支持TLS终结、SNI路由等高级特性。
与业务匹配度:
- 可作为高性能TCP代理,支持TLS终结
- 通过xDS协议支持动态配置更新,无需reload
- 认证、Session管理等业务逻辑需自行实现或配合外部服务
优缺点:
- ✅ 优点:云原生事实标准,性能极高,动态配置
- ❌ 缺点:配置复杂,学习曲线陡峭;业务逻辑需额外开发
2.3.3 Apache APISIX
项目概述:APISIX是基于NGINX和etcd构建的动态、高性能API网关。支持Stream模式进行TCP/UDP四层代理。
游戏场景实践:已有将APISIX用于游戏服务器代理的实践案例,通过etcd服务发现将玩家请求路由到后端Game Server。
与业务匹配度:
- 支持TCP/UDP stream代理
- etcd-based动态配置,适合K8s环境
- 认证(如JWT、Key Auth)和路由逻辑可通过插件扩展
优缺点:
- ✅ 优点:动态配置,插件生态丰富,已有游戏场景实践
- ❌ 缺点:主要面向API网关场景,游戏TCP长连接场景的适配需验证
2.3.4 Kong Gateway
项目概述:Kong Gateway可作为TCP Stream Proxy置于游戏服务器前端,玩家连接单一公网地址和端口,Kong接受连接并转发到上游游戏服务器。
与业务匹配度:
- 支持TCP四层代理
- 通过Kong Ingress Controller可与K8s集成
优缺点:
- ✅ 优点:成熟的企业级网关,插件丰富
- ❌ 缺点:TCP代理非其主要场景;开源版功能有限
三、方案综合对比
| 方案 | 类型 | 统一接入 | 接入认证 | 会话管理 | 智能路由 | K8s原生 | 跨云部署 | 改造成本 | 成熟度 |
|---|---|---|---|---|---|---|---|---|---|
| Janus | 专用游戏网关 | ✅ | ✅内置 | ✅内置 | ✅内置 | ⚠️手动 | ✅ | 高 | 中 |
| channeld | 专用游戏网关 | ✅ | 需扩展 | 需扩展 | ✅ | ⚠️手动 | ✅ | 高 | 中 |
| nodehub | 专用游戏框架 | ✅ | 需扩展 | 需扩展 | ✅ | ⚠️手动 | ✅ | 中高 | 中 |
| OKG+Higress | K8s原生方案 | ✅ | Higress插件 | 需扩展 | OKG自动 | ✅原生 | ✅ | 高 | 高 |
| Agones+网关 | K8s原生方案 | 取决网关 | 取决网关 | 取决网关 | Agones API | ✅原生 | ✅ | 高 | 最高 |
| Nginx Stream | 通用代理 | ✅ | 需自建 | 需自建 | 需自建 | ⚠️手动 | ✅ | 低 | 最高 |
| Envoy | 通用代理 | ✅ | 需自建 | 需自建 | 需自建 | ⚠️手动 | ✅ | 中 | 高 |
| APISIX | 通用API网关 | ✅ | 插件 | 需扩展 | etcd动态 | ✅原生 | ✅ | 中 | 高 |
四、与当前架构的集成路径分析
当前架构核心是"调度服务动态生成StatefulSet YAML + NodePort直连"。引入网关后,有两种集成路径:
路径一:保留StatefulSet,网关作为前置代理层
客户端 → 网关(统一入口)→ 根据RoomID查路由表 → 后端Pod (StatefulSet)
实施要点:
- 调度服务在创建房间时,将
(RoomID → PodIP:Port)映射写入Redis/etcd - 网关收到请求时,解析Session获取RoomID,查表转发
- 调度服务销毁房间时同步删除映射
适用方案:Nginx Stream、Envoy、APISIX(需自建路由表同步逻辑)
路径二:替换StatefulSet为游戏工作负载 + 网关自动化
客户端 → 网关(统一入口)→ OKG/Agones自动路由 → GameServer Pod
实施要点:
- 用OKG的GameServerSet或Agones的GameServer替代独立StatefulSet
- 网关(Higress或自建)通过K8s API/Operator自动发现游戏服并生成路由
- 调度服务简化为调用K8s API调整副本数或分配GameServer
适用方案:OKG+Higress、Agones+Envoy
五、选型建议
5.1 按场景推荐
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 快速验证,最小改动 | Nginx Stream + 调度器维护路由表 | 改动最小,Nginx成熟稳定,只需在调度器中增加路由表写入逻辑 |
| 追求游戏专用能力 | Janus (go-pantheon) | 功能最匹配,内置认证、会话、路由,但需接受框架约束 |
| 长期演进,与K8s深度整合 | OKG + Higress | 自动化程度最高,未来可平滑扩展,阿里云生态支持 |
| 行业标准,最大社区 | Agones + Envoy/APISIX | CNCF孵化项目,社区最成熟,但需额外选型网关 |
5.2 分阶段实施路线图
第一阶段(验证期) :采用 Nginx Stream + 调度器路由表 方案
- 在调度服务中增加Redis路由表写入(RoomID → PodIP:Port)
- Nginx Stream配置TCP代理,通过Lua或stream-sticky实现基于RoomID的路由
- 验证统一接入和基础路由能力
第二阶段(完善期) :引入认证能力
- 在网关前增加认证层(可使用APISIX的Key Auth插件,或自建轻量认证服务)
- 实现"握手包→Token验证→Session建立"流程
第三阶段(规模化期) :评估是否迁移到专业方案
- 当房间数超过2000或调度器逻辑超过3000行时
- 评估Janus或OKG+Higress,根据团队技术栈和云环境偏好选择
5.3 关键决策因素
- 团队技术栈:Go为主 → Janus/APISIX;Java为主 → Spring Cloud Gateway;运维导向 → Nginx/Envoy
- 云环境:阿里云为主 → OKG+Higress(天然集成);腾讯云/私有云为主 → Agones或自建方案
- 长期规划:仅需统一接入+认证 → Nginx/APISIX足够;计划大规模游戏服编排 → OKG/Agones
六、结论
当前业务规模(峰值500房间)下,引入网关的主要价值在于统一接入和认证,而非解决容量瓶颈。因此:
- 短期推荐 :采用 Nginx Stream 或 APISIX 作为统一TCP入口,配合调度器维护路由表,以最小改动实现统一接入
- 认证机制:可在网关前增加轻量认证服务,或使用APISIX的认证插件
- 长期演进 :当房间数突破2000或需要更复杂的游戏服管理能力时,建议评估 Janus (Go技术栈)或 OKG+Higress(K8s原生)方案
以上方案均可部署于私有云、TKE、ACK环境,调度器代码无需因云环境差异而修改。建议从第一阶段(Nginx Stream + 路由表)开始验证,逐步演进。