【云原生】 游戏接入网关开源方案调研报告

游戏接入网关开源方案调研报告

调研背景:当前业务采用"一房间一StatefulSet"的Kubernetes部署模式,每个房间通过NodePort对外暴露TCP端口。本文旨在调研开源游戏接入网关方案,为后续方案验证提供技术依据。

一、业务场景与核心需求

1.1 当前架构特征

特征 描述
部署模式 每个游戏房间对应一个独立的StatefulSet(replicas=1),由调度服务动态生成YAML并管理生命周期
网络暴露 每个房间通过独立的NodePort Service对外暴露TCP端口
规模 上限2000个
生命周期 房间临时性,创建到销毁约5小时,创建后永不更新

1.2 网关引入的核心诉求

  1. 统一接入入口 :客户端只需连接一个固定地址(如 gateway.company.com:27015),而非动态变化的NodePort
  2. 接入认证:连接建立时进行身份校验(Token/ID验证),防止未授权访问
  3. 会话管理 :建立连接后维护Session上下文,关联 SessionID ↔ (RoomID, PlayerID)
  4. 智能路由:根据RoomID将流量转发到对应的后端Pod
  5. 跨云部署能力:方案须能在私有云、腾讯云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)

实施要点

  1. 调度服务在创建房间时,将 (RoomID → PodIP:Port) 映射写入Redis/etcd
  2. 网关收到请求时,解析Session获取RoomID,查表转发
  3. 调度服务销毁房间时同步删除映射

适用方案:Nginx Stream、Envoy、APISIX(需自建路由表同步逻辑)

路径二:替换StatefulSet为游戏工作负载 + 网关自动化

复制代码
客户端 → 网关(统一入口)→ OKG/Agones自动路由 → GameServer Pod

实施要点

  1. 用OKG的GameServerSet或Agones的GameServer替代独立StatefulSet
  2. 网关(Higress或自建)通过K8s API/Operator自动发现游戏服并生成路由
  3. 调度服务简化为调用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 关键决策因素

  1. 团队技术栈:Go为主 → Janus/APISIX;Java为主 → Spring Cloud Gateway;运维导向 → Nginx/Envoy
  2. 云环境:阿里云为主 → OKG+Higress(天然集成);腾讯云/私有云为主 → Agones或自建方案
  3. 长期规划:仅需统一接入+认证 → Nginx/APISIX足够;计划大规模游戏服编排 → OKG/Agones

六、结论

当前业务规模(峰值500房间)下,引入网关的主要价值在于统一接入和认证,而非解决容量瓶颈。因此:

  1. 短期推荐 :采用 Nginx StreamAPISIX 作为统一TCP入口,配合调度器维护路由表,以最小改动实现统一接入
  2. 认证机制:可在网关前增加轻量认证服务,或使用APISIX的认证插件
  3. 长期演进 :当房间数突破2000或需要更复杂的游戏服管理能力时,建议评估 Janus (Go技术栈)或 OKG+Higress(K8s原生)方案

以上方案均可部署于私有云、TKE、ACK环境,调度器代码无需因云环境差异而修改。建议从第一阶段(Nginx Stream + 路由表)开始验证,逐步演进。