前言
《剑与远程:启程》[1]于8月8日开启全平台公测,当下热度持续占据各类新游榜单首位。《启程》倾注了开发者团队多年心血,也是莉莉丝游戏首次尝试将放置卡牌的玩法与世界地图结合。
不仅如此,《启程》也是莉莉丝游戏采用云原生架构的核心项目,也标志着莉莉丝游戏步入全面云原生化的重要阶段。本文将介绍莉莉丝游戏云原生化的背景、挑战,以及应对的解决方案,记录了莉莉丝游戏云原生化历程,为游戏架构云原生转型提供经验。
云原生化背景与初衷
成本和效率在这些年来逐渐成为了游戏基础设施领域热烈讨论的话题。传统机器运维模式在业务规模化部署的情况下将带来巨大的人力与资源的成本投入,已然不符合当下游戏精细化运营的时代趋势。
面对传统游戏Infra时代留下的问题,云原生化成为了莉莉丝游戏不二选择。
Kubernetes作为云原生时代的实施标准,其强大的编排管理的能力,解耦资源与业务,大幅度降低运维人力成本;声明式的运维方式,可实现符合业务预期的重启与自愈,提升系统的稳定性;弹性可扩展特性使资源可以根据需求动态分配,有效地降低闲时的资源浪费。此外,容器的业务承载形态实现了研发环境与测试环境的有机统一,加速了游戏研发迭代的过程,并且在测试阶段就能尽早发现问题,加强了游戏线上的健壮性。
云原生转型面临挑战
尽管云原生转型具有多种优势和重要性,但转型之路并非一帆风顺。游戏服务由于其特殊的性质,在落地Kubernetes时存在着一系列的挑战。
游戏服优雅更新
由于游戏服是有状态服务,内存中缓存了玩家的数据信息,如何优雅地管理游戏服务生命周期是重要难题。Kubernetes的Pod是针对基础设施的状态抽象,无法体现业务状态,因此非常需要一种方式能够透出业务状态,且基于业务状态进行发布或迁移,实现游戏服的优雅更新。
游戏服资源热加载困难
游戏通常使用热更新作为资源更新的主要方式,以避免停服对玩家体验造成负面影响。然而在容器环境下,资源的更新是比较大的挑战。尽管存在着多种方式可以实现资源热更,但实际使用上存在着各种问题,并不优雅。比如,基于持久化存储的方式无法进行云原生条件下的版本管理,出现问题难以定位和回滚;且无法动态感知更新状态,无法确定更新是否成功。
游戏服容器IP/名称变化
游戏服的通信机制往往基于服务IP或者名称。然而,在原生的Kubernetes下,Deployment在pod重启时会更改其名称与IP,这与传统研运模式有着较大的出入。而StatefulSet负载类型无法对游戏服进行定向管理,如删除或更新指定的ID游戏服。这种现状让游戏服容器化面临进退两难的境地。
Kruise助力游戏服容器化平滑落地
《剑与远程:启程》于2021年决心采用云原生架构,在当时的游戏行业,游戏与云原生的结合方式并不成熟,虽然一些头部厂商已经实现游戏服容器化部署,但其运维方式更偏向传统虚拟机,未能充分利用编排/调度/自愈等云原生的先天优势,核心问题是源于Kubernetes并未提供一个符合游戏业务的工作负载。
面对上述挑战,项目组积极探索更合适、更优雅的解决方案,并最终看到来自社区的开源项目OpenKruise. Kruise以原地升级能力吸引着广大云原生社区的开发者们,莉莉丝发觉该能力与游戏服这种有状态类型的业务非常契合,决定将其引入到《剑与远程:启程》项目中,替代了Deployment、StatefulSet原生Kubernetes工作负载。
基于Kruise的原地更新能力,莉莉丝将游戏服拆分出sidecar容器来存储热更新资源,并通过新镜像替换的方式实现资源热更新。在这个过程中,Kruise保证了Pod生命周期不受影响,针对性更新sidecar容器,不影响主容器正常运行,进而保证资源更新的过程玩家不受影响。
不仅如此,面对Pod无法展现业务状态的弊端,莉莉丝游戏基于Kruise工作负载,在此之上开发了游戏专用的Operator,识别游戏服状态,并根据游戏业务状态在保证玩家体验的同时实现了游戏服的优雅更新。
经过不懈努力,莉莉丝游戏云原生化效果显著:
• 资源利用率提高。硬件资源利用率提高了40%-60%;
• 发布周期缩短,应用发布时间从几小时缩短到分钟级;
• 运维管理成本降低40%以上。
共建云原生游戏社区
从2022年开始,莉莉丝与OpenKruise社区展开深度合作,共同探讨游戏云原生化的未来发展。《剑与远程:启程》基于Kruise开发的Operator给予了社区启发 —— 具备游戏语意的Kubernetes工作负载将会降低游戏用云成本,帮助游戏开发者更好地利用云原生各方的优势。因此OpenKruise社区联合莉莉丝共同孵化了OKG(OpenKruiseGame)[2],致力于打造游戏云原生化理想路径,推动游戏行业降本增效、高效用云。
OKG具有更加通用的游戏使用场景,提供更广泛的游戏语意抽象;不仅支持类似《剑与远程:启程》RPG类型游戏,也支持会话类单局短生命周期等全品类游戏类型;推出Cloud Provider模型,当前已支持AlibabaCloud / AWS / Volcengine,便于开发者在多种不同的云环境下实现游戏的一致性交付。莉莉丝游戏《众神派对》[3]即采用OpenKruiseGame,实现了线上游戏快速发布。
当前OpenKruiseGame已经帮助多家游戏公司实现云原生化转型。莉莉丝赋予OpenKruise社区以游戏属性,作为游戏云原生的先行者为游戏行业提供了宝贵经验,不仅与社区共同孵化了OpenKruiseGame,并且积极贡献了Faketime项目,帮助游戏服容器实现时间更改,以面对奖励发放、活动计时等游戏测试场景。在未来,莉莉丝游戏也将更多参与云原生游戏社区,为推动游戏行业发展做出更多贡献。
[1] https://afkjourney.lilith.com/
[2] https://openkruise.io/zh/kruisegame/introduction
[3] https://zspd.lilith.com/