广州市番禺区住房和建设局网站,网站托管公司,领英定制通网站建设,网络规划与设计思维导图如今#xff0c;网络游戏采用免费游玩#xff08;Free to Play#xff09;加内购的比例要远大于买断制#xff0c;这是因为前者能带来更低的用户门槛。甚至有游戏为了获取更多的用户#xff0c;选择把原来的买断制改为免费游玩#xff0c;一个典型的例子就是最近的网易的…如今网络游戏采用免费游玩Free to Play加内购的比例要远大于买断制这是因为前者能带来更低的用户门槛。甚至有游戏为了获取更多的用户选择把原来的买断制改为免费游玩一个典型的例子就是最近的网易的永劫无间改免费。不过修改付费模式后可能带来用户量的大幅增长这就对原来的服务端架构有了更高的要求。
在GDC 2021上来自《火箭联盟》项目的工程师就为我们分享了类似的经验——《《火箭联盟》为免费游玩而进行的扩展》Rocket League: Scaling for Free to Play。他讲述了如何优化架构以支撑改版后用户量多达5倍的增长。
《火箭联盟》是一款由美国独立游戏工作室Psyonix开发的赛车竞速游戏获得过TGA年度最佳体育游戏大奖在国内也有腾讯代理。为了拓展更多的用户它在2020年夏天转为免费游戏。
分享主要包括几方面一是为改版做的准备和压力测试二是对架构的扩展和改进三是从改版中获得的经验。
改版准备
项目组估计改版后新玩家数量是改版前常规release发布时的3-5倍。因此压力测试以5倍上限作为目标。
同时项目组向Google和Redis Labs需求技术支持花费在这上面的代价肯定小于机器宕机的代价。 压力测试选用的框架是Locust。这是一个用Python写的开源压力测试工具它是分布式和可伸缩的可以支持成千上万用户而且提供基于Web的UI查看测试结果。
测试结果的评估包括几个方面HTTP返回码、服务日志及资源利用率。根据测试结果对代码做了相应的调整和改进。 架构扩展
首先是核心服务迁移到Kubernetes。从原来的Google App EngineGAE迁移到Google Kubernetes EngineGKE。前者只有容器功能而后者提供了完整的服务编排和集群功能。 其次是匹配服务的改造。原有的匹配服务是一个单线程的.NET应用性能较差。新版匹配服务改用了性能更好的OpenMatch。OpenMatch是一个谷歌发布的开源游戏匹配框架依托于容器和Kubernetes来运行它的匹配算法基于MapReduce可扩展性强。 再次是Redis企业版移植。Redis企业版的全自动重分片Re-sharding功能是他们特别需要的特性尽管它会带来一些性能开销。另外Redis企业版提供了更好的命令可视化以及完善的监视图表。 然后是MySQL改进。原来的架构只支持MySQL垂直扩展面对改版后更高的并发压力单机承载面临瓶颈又没有时间迁移到水平扩展的架构因此选择使用ProxySQL。ProxySQL是一种MySQL代理中间件选择它主要是看中了动态查询路由、故障切换等功能以及扩展能力强的特点尽管使用它会带来一定的学习曲线。 最后是流量限制Rate Limit。使用了登录队列来控制流量这也是许多游戏的通常做法。后续还进一步对除了登录外的其他服务进行流量控制。 经验总结
上线之后的巅峰在线人数多于改版前的5倍但是少于压力测试的最高值因此还在允许的承载范围内原先的5倍预估还算比较准确。在线人数稳定后也仍然维持在3倍的高位更多的在线对服务器带来了更大的承载压力因此后续版本迭代也在进行持续的压力测试。 经过这次改版收获了以下经验
早早开始规划。不要羞于寻求外界帮助但也不要过度规划。要做好压力测试很难但是非常重要。有序安排好重要的特性开发依据中间的时间节点按时完成。像流量限制一样实现多种功能的控制。