当前位置: 首页 > Web前端 > HTML5

Serverless极弹解构网游行业痛点

时间:2023-04-05 20:00:56 HTML5

简介:本文将针对具体场景和案例一一分析,希望能引起相关游戏开发同学的共鸣,也希望能给非游戏行业带来一些启发学生。一、前言1、云上游戏客户的关注点游戏行业是一个充满创意、竞争激烈的市场,被誉为第九艺术。游戏客户上云主要关注以下四个方面:快速迭代和全球部署。快速迭代是游戏行业的普遍要求,包括开发效率、运维效率、架构解耦等。全球部署策略。高并发、高弹性每款游戏上线都会经历开服、开新等阶段。游戏本身每天也有高峰和低谷,加上偶尔的活动运营,也会有高峰,所以在游戏行业,高并发和高弹性也是一个普遍的需求。稳定性、可靠性和安全性为保证游戏的公平性和用户的玩家体验,防止作弊,需要保证游戏的稳定性、可靠性和安全性。数据、运维、成本控制游戏上线后,从日志中收集数据分析用户行为,根据分析结果针对不同的玩家实施不同的运维策略,对中间的摇摆玩家进行重点运营,从而从而实现精准定位和控制成本。2.理解函数计算下面要介绍的案例主要是和函数计算相关的。因此,这里简单介绍一下阿里云的无服务器产品——函数计算。函数计算:只需要关注业务代码,面向函数的极简编程(各种编程语言),丰富的云产品集成和事件驱动的方式提供端到端的解决方案。聚焦业务代码如上图所示,对于游戏开发者来说,使用函数计算,你只需要选择一个你最擅长的代码,编写这段代码,上传到计算平台即可完成开发任务。之后可以通过API/SDK调用该函数,也可以通过云产品事件源触发该函数。上图是一个简单的例子。写一个Java函数的“HelloWorld”,设置为Java8的执行环境,256MB内存,设置后上传到函数计算,开发任务完成,然后主动调用函数,无需关心任何基础设施。这里单独介绍“云产品事件源触发功能”。除了主动触发功能,还可以使用云产品来触发。比如使用阿里云的对象存储OSS,上传一个zip包到OSSBucket的某个目录,希望上传后能自动触发一个功能,然后这个功能可以自动解压zip包,就可以实现通过触发云产品事件源。影响。除此之外还有很多其他的事件源,比如日志事件源、MNS消息事件源、定时触发事件源等。100<代码量面向功能极简编程,只需要关注核心代码.它还支持各种编程语言,对开发者非常友好。开发者可以选择自己最擅长的语言,编写完成后上传到函数计算。100ms极致灵活如果你触发一个函数,你不用担心同时有10、100、1000甚至10000个请求。函数计算会在100毫秒级别弹出执行环境。每个执行环境执行函数逻辑代码,然后将函数执行结果返回,帮助线上业务应对各种突发流量。100%资源利用率在计费方面,函数计算是按照执行环境的内存和执行时间来计费的。计费粒度可以达到毫秒级,只为请求产生的资源消耗付费。资源利用率达到100%,降低成本。.2.Serverless游戏场景实战案例1.高弹性的战斗结算业务战斗结算是CPU密集型的,结算系统每天都需要大量的算力,尤其是在开服或者大量玩家突然涌入的时候事件,导致所需的计算。数额瞬间增加数倍,同时结算系统需要保持稳定的延迟,以保证玩家的用户体验。以SLG游戏或回合制游戏场景为例。一场战斗结束后,为了用户体验,客户端需要先进行结算,显示这一局的结果,比如赢了就弹出胜利动画,输了就弹出失败动画。如果单纯依赖客户端,客户端很可能会作弊(比如作弊者),所以最后的结算还是要由服务端来结算。随着游戏策划团队想法的增多,游戏变得越来越复杂,比如buff、debuff、暴击等等。随着游戏越来越好玩,结算系统也会越来越复杂,游戏过程很可能会卡住。最好的解决方案是提取战斗结算的CPU密集型逻辑。该解决方案还特别适用于新服务器、活动期间以及每日高峰和低谷时。如上图,当客户将战斗结算迁移到函数计算时,可以明显看出,即使TPS在每日峰谷呈90°直线上升,但Latency延迟基本不变稳定在200到300毫秒之间,充分保证了用户的播放体验。在这个场景下,函数计算的核心价值是:弹性和高可用:在不预留任何资源的情况下,百毫秒级别的伸缩和伸缩。CI/CD和版本灰度能力:每当游戏策划有新意,战斗结算功能必然更新。您可以直接为该功能设置版本和别名,以便您可以放心灰度下一个版本的战斗结算功能。这是游戏场景中非常经典的例子。CPU密集型逻辑被抽取出来放在函数计算上。在不影响Gameserver服务器的同时,还具备100毫秒内的伸缩扩展能力,保证玩家的用户体验。.2、Serverless实现超大规模游戏营销。游戏厂商和广告商联合投放了大量互联网广告。该业务场景无法准确预估运营流量。高并发、高弹性的后台服务对业务成果至关重要。并且需要对大量的营销数据和原始日志进行线下分析,驱动运营策略的升级。游戏厂商的需求是:第一,游戏需要大规模营销,波峰波谷无法预测;第二,游戏需要快速上线,对开发效率要求高。解决方案如上图,将函数埋在网页中,点击时自动触发函数,然后函数将点击传递的用户信息持久化到kafka。这个step函数的TPS很高,估计有几万、几十万。第二步,消息通过kafkaconnector持久化后,connector可以进行批量操作,比如将50次点击的数据批量化为一个发送给另一个函数,相当于后者的1/50function另外,这个函数是异步触发的,配合批处理,可以削峰填谷,因为只需要将消息写入数据库就可以完成任务,只要数据不丢失。同时该功能打印的日志也可以通过SLS进行分析或者写入数据库RDS/ADP进行玩家画像分析。客户压测数据如下图所示。第一个功能TPS涨到10万以上,削峰填谷后第二个功能TPS不到3万。在这个场景下,函数计算的核心价值在于:事件驱动,解耦架构难点;灵活高可用,削峰填谷;快速开发上线,一天内完成开发和压测。3、Serverless实现Android游戏APK包的渠道分发。UC游戏分发平台的游戏APK包需要根据实时请求中的参数获取频道号,并将频道号写入APK文件的固定位置。UC每天都有大量不同的游戏文件。频道下载请求可以让用户实时下载指定频道的APK游戏包。以阿里内部UC游戏分发平台为例,在对象存储中放置一个原始包,其他包可以添加到文件中的固定位置。但是UC频道每天都有不同的下载请求。通过Channel=UC/小米/华为到CDN,CDN直接回源给函数计算。写进去,然后直接把这个包返回给CDN。其他渠道包也是一样,只要下载一次,就会缓存在CDN中。在这种情况下,函数计算的核心价值在于:CDN直接回源到弹性高可用的函数计算服务(FC);降低成本,按需付费。客户高峰期无需预留计算资源,流量单价降低40%。4、Serverless实现快速多渠道游戏打包在游戏发布前,通常会针对不同的分发渠道,将游戏主包和不同渠道的数据包构建成渠道包。在这个构建过程中,如果采用人工方式,存在容易出错、效率低、成本高的痛点。效率低:针对不同渠道进行打包,传统的方式是固定购买几台打包机,这可能会浪费大部分时间,而且一周只有几次;高成本:接入的频道越多,打包机就那么几个,如果要查看频道包状态,可能需要通宵玩才能第二天看到。随着渠道越来越多,打包机数量需要增加,闲置成本也越来越高;容易出错:如何给打包机分配任务,调度系统需要自己开发,如果打包机出现异常,需要自己解决Packer问题。本场景引入一个serverless工作流,如下图所示:工作流定义:第一步,从OSS下载父包;第二步,将这些包并行打包,每个通道包都有一个并行任务;第三步,封装后,后处理。在这个场景下,函数计算的核心价值在于:任务自动化:事件一键触发,自动运行,完整的工作流跟踪记录整个打包过程,提高打包成功率;并行打包:多通道打包构建过程并行,提高打包效率,同时支持配置模板;低成本:按量付费,计算资源利用率高。5.Serverless实现游戏服务全球快速部署。阿里云作为国内第一家集成Terraform的云厂商,生态支持比较完善(Serverless对云服务的依赖比较大,国内支持比较完善)。由于游戏不太可能使用许多其他云服务,因此使用Terraform可以实现快速的多云部署。6、实战案例总结CPU密集型界面战斗解决方案;社交游戏、游戏内截图、游戏直播视频在线截图、离线转码等;聊天敏感词检测过滤,聊天翻译;排行榜等游戏活动操作激活码生成、消费等封测操作;游戏包装发行、广告购买、活动页面、运营平台等业务平台。用户基础业务数据处理三、阿里云函数计算现状1、函数计算是国内企业实施Serverless架构和业务创新的首选根据《2020年中国云原生用户调查报告》,阿里云Serverless用户占比66%。根据CNCF2019年中国云原生报告,函数计算是国内企业实施Serverless架构和业务创新的首选产品。二、阿里云函数计算产品全景图函数计算是目前国内生态最完整、功能最丰富的Serverless产品。开发者一步上云,一键Serverless将成为现实。图:阿里云函数计算产品全景系统层面:支持多种语言,开发者可以选择自己喜欢的语言,还支持容器镜像,拥抱容器生态;实例类型:默认选择100毫秒弹性实例,也可以选择Performance实例(如强CPU密集型音视频转码);触发层:可由API网关或SDK直接触发,也可由Kafka、OSS、CDN等事件源触发;工具层:新增Serverless-Tool、Fun、开发者框架等;可观察性:包括日志、监控、指标、告警、追踪等;应用中心:有很好的落地案例,可以快速体验经典案例。作者:罗松(XiLiu)原文链接本文为阿里云原创内容,未经许可不得转载