本文分享自华为云社区《亿级月活游戏《迷你世界》全栈容器化实践分享》,作者:云容器大未来。
背景
迷你玩旗下《迷你世界》是一款国产沙盒创意平台,拥有全球数千万创作者进行去中心化内容创作,通过方块组合自由创造等方式,引导用户在平台上创作虚拟作品。2021《迷你世界》的每月活跃玩家人数已超过一亿。
《迷你世界》此前面临的突出问题在于服务端的弹性:迷你世界服务器的规格较大,每个服务器上承载了很多游戏服进程,不同玩家的游戏时间上差异也比较大,为了保障深度玩家的游戏体验,即使只有一个玩家还在进行游戏,对应的游戏服务器也是不会缩容的,这必然会影响服务端整体的资源利用率和运营成本。我们期望通过容器灵活规格来解决《迷你世界》服务端的缩容问题,同时提升整个游戏系统的扩缩容、部署升级效率。
挑战
云原生技术以其灵活性、可扩展性和可维护性等优势,正在迅速改变企业的 IT 架构。第三方报告显示,2022年已经有超过75%的互联网公司在基于K8s部署生产业务,预期2025年这个数字将超过90%。然而在游戏场景中,k8s的还面临一些局限性。首先,游戏业务天然是有状态的,K8S原生的有状态资源StatefulSet并不擅长处理大量的、复杂的状态管理任务。其次,时延敏感性也是一个问题。在游戏中,时延直接影响到游戏的流畅度和玩家的体验,这就对K8s的容器网络实现提出了更高的要求。同时,安全性也是一个挑战。游戏服中可能包含大量的敏感信息,普通容器的隔离程度与虚拟化相比仍有一定差距。
解决方案
华为云CCE在网络、容器运行时上进行了增强,再配合社区workload,使能《迷你世界》后端全栈容器化,资源使用量较虚拟化部署环境减少了50+%。整体架构如下:
网络方面,华为云CCE Turbo提供了一种更接近虚拟机的容器网络,这种模式下,容器成为和虚拟机等同的“一等公民”。容器网卡集成了虚拟网络的能力,比如通过CRD关联到安全组进行安全加固,更细粒度的IP地址管理等。更重要的是,这种容器网络支持Pod直接关联EIP,用户可以直接通过EIP访问应用。EIP的成本管理上,华为云提供了95计费的共享带宽,以多个EIP共享的带宽为计费单元。我们开发了专门的K8s webhook为不同的pod分配不同的共享带宽,来做到最优的成本控制。
有状态应用管理方面:我们使用了OpenKruise社区的CloneSet来管理游戏服pod。CloneSet提供了pod的原地升级能力,可以在不重建pod的情况下对运行中的容器进行更新。我们还深度使用了它的定向缩容能力,通过自定义Hooks判服务器托管网断指定游戏服pod是否有活跃玩家,实现对游戏服缩容的精细化控制。OpenKurise的CRD配合控制器的模式在不同的K8s环境中具有良好的扩展性,只要厂商提供社区一致的API,均可正常部署运行。
安全方面,当前我们的使用方式是服务端Pod与节点1:1部署,游戏服pod配置关联指定安全组,通过安全组和虚拟化对游戏服进行双重安全加固。
效果
《迷你世界》完成全量容器化后,在运维效率、资源成本都有了显著优化
- 资源占用节省50%
计算资源根据游戏的实施访问量自动管理,定时弹性伸缩配合指标触发的自动弹性伸缩,再加上定向缩容,资源总是能伸缩至合理水平,保障玩家的游戏体验。
- 迭代效率提升
容器化缩短了应用的迭代周期,通过灰度发布,流量治理等保证了业务平滑稳定升级,应用升级从小时级提升至分钟级。
迷你玩和华为云在未来将Serverless领域加深合作:华为云容器实例服务CCI具有秒级弹性、按量计费的特性,非常贴合我们的应用场景。此外,华为云CCE提供弹性突发引擎,可以将CCI资源池以虚拟节点的方式接入CCE。基于这项能力,我们仅需将与节点强绑定的部分资源稍服务器托管网作调整即可将应用部署到Serverless容器服务中,进一步提升后端的弹性能力。同时CCI基于安全容器构建,独享内核,具有虚拟机级别的安全保障。下一阶段,我们考虑将部分负载逐步迁移到Serverless容器上。
点击关注,第一时间了解华为云新鲜技术~
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 企业架构LB-服务器的负载均衡之Haproxy实现
企业架构LB-服务器的负载均衡之HAProxy实现 学习目标和内容 1、能够通过HAProxy实现负载均衡 ###1、介绍 Introduction HAProxy, which stands for High Availability Proxy, is a…