Serverless 极致弹性解构在线游戏行业痛点
作者 | 罗松(西流) 来源 | 阿里巴巴云原生公众号
导读:本文将通过剖析一个个具体的场景案例,以期望给相关的游戏开发同学带来共鸣,同时也希望能给非游戏行业的同学带来一些启发。
一、前言
1. 游戏客户上云关注点
游戏行业是一个富有创意又竞争激烈的市场,被称为第九艺术。游戏客户上云主要关注以下 4 个方面:
- 快速迭代,全球部署
快速迭代是游戏行业的通用需求,包括开发效率、运维效率、架构解耦;同时游戏可能也会出海,所以也需要海外部署或全球部署战略。
- 高并发、高弹性
每个游戏上线时都会经历新开服、运营拉新等阶段,游戏本身也有日常峰谷,再加上偶尔的活动运营,也会产生峰值,因此在游戏行业高并发高弹性也是一个通用需求。
- 稳定、可靠、安全
要保证游戏的公平性和用户的玩家体验,防止作弊,所以需要保证游戏的稳定可靠与安全。
- 数据、运维、成本控制
游戏上线后,通过日志收集数据对用户行为进行分析,根据分析结果针对不同的玩家实施不同的运维策略,将运营重点放在中间的摇摆玩家上,从而做到精准定位、控制成本。
2. 认识函数计算
下文将要介绍的案例主要与函数计算相关,因此在此先对阿里云 Serverless 产品——函数计算做一下简单介绍。
函数计算:只需要专注业务代码,面向函数极简编程(各种编程语言),丰富的云产品间集成与事件驱动方式提供端到端解决方案。
- 专注业务代码
如上图所示,对于游戏开发者来说,使用函数计算,就只需要选择一个你最擅长的代码,编写这段代码,上传到计算平台,就可以完成开发任务。之后可以通过 API/SDK 调用这个函数,也可以通过云产品事件源去触发函数。
上图是一个简单的例子,用 Java 函数写一个“Hello World”,把它设置成 Java8 的执行环境,256MB 的内存,设置完上传到函数计算,开发任务就完成了,之后主动调用函数即可,无需关注任何基础设施。
这里单独介绍一下“云产品事件源触发函数”。除了主动触发函数,还可以用云产品来触发。比如使用阿里云的对象存储 OSS,上传一个 zip 包到 OSS Bucket 的某个目录,希望上传之后可以自动触发一个函数,然后这个函数可以把 zip 包自动进行解压,云产品事件源触发就可以实现这种效果。另外还有其他很多事件源,比如日志的事件源、 MNS 消息事件源、定时触发事件源等。
- 100< 代码量
面向函数极简编程,只需要关注核心代码。还支持各种编程语言,对开发者非常友好,开发者可以选一个自己最擅长的语言,写完后上传到函数计算即可。
- 100ms 极致弹性
如果触发函数,同时过来 10 个、 100 个、1000 个甚至 1 万个请求都不用担心,函数计算会百毫秒级弹出执行环境,每个执行环境去执行函数逻辑代码,再把函数执行的结果返回,帮助在线业务应对各种突发流量。
- 100% 资源利用率
在计费方面,函数计算是按执行环境的内存和执行时间计费,计费粒度可达毫秒级,只为请求产生的资源消耗买单,资源利用率达 100%,降低成本。
二、Serverless 游戏场景实践案例
1. 高弹性战斗结算业务
战斗结算是强 CPU 密集型,结算系统每日需要大量的计算力,尤其是开服或者活动期间突然涌入的大量玩家,导致需要的计算量瞬间几倍增长,同时需要结算系统保持稳定的延时来保证玩家的用户体验。
以 SLG 游戏或者回合制游戏场景为例,一场战斗结束后,为了用户体验,客户端需要先行结算,展示这一回合的结果,比如打赢了弹出胜利动画,打输了弹出失败动画。如果纯粹依赖客户端,很可能会出现客户端作弊的情况(比如作弊器),所以最后的结算肯定还是由服务器做结算。
随着游戏策划团队想法的增加,游戏越来越复杂,比如 buff、debuff、暴击等等。随着游戏越来越好玩,结算系统会越来越复杂,游戏进程很可能会出现卡顿现象,而最好的解决方案就是把战斗结算这一 CPU 密集型的逻辑抽离出来。这一方案也尤其适用于新开服、活动期间以及每日有日常峰谷的情况等。
如上图,当客户把战斗结算迁移到函数计算上后,明显可以看到, 即使 TPS 在日常峰谷呈 90° 直线上升,但是 Latency 延时仍然基本稳定在 200~300 毫秒之间,,充分保证了用户的玩家体验。
在这个场景中,函数计算的核心价值是:
- 弹性高可用:百毫秒级伸缩扩容,无需预留任何资源。
- CI/CD 和版本灰度能力:每当游戏策划有新想法时,战斗结算函数必然会更新,可以通过直接给这个函数设置版本和别名,从而非常安全地灰度到下一个版本的战斗结算函数。
这是游戏场景里非常经典的例子,将 CPU 密集型的逻辑抽离出来放到函数计算上,在不影响 Game server 的服务器的同时,又具备了百毫秒伸缩扩容的能力,保证了玩家用户体验。
2. Serverless 实现超大规模游戏营销
游戏厂商与广告商联合投放大量互联网广告,该业务场景无法准确预估运营流量,高并发、高弹性的后台服务对业务结果至关重要。且大量的营销数据和原始日志需要进行离线分析,驱动运营策略升级。
游戏厂商的需求是:第一,游戏需要大规模营销,波峰波谷无法预估;第二,游戏需要快速上线,对开发效率要求较高。
解决方案如上图,将函数埋点到网页里面,点击时自动触发这个函数,函数再把点击传过来的用户消息持久化到 kafka。这一步函数 TPS 非常高,预估是几万或者十万级别。第二步,通过 kafka connector 把消息持久化以后,connector 可以有 batch 操作,比如把 50 次点击的数据 batch 成 1 个再发给另外一个函数,相当于后面的这个函数变成了 1/50 的调用量,另外这个函数是异步触发,加上 batch 操作,起到削峰填谷的作用,因为只需要把消息写入到数据库就可以完成任务,只要不丢数据就好。同时这个函数打印的日志也可以用 SLS 进行分析或者写入数据库 RDS/ADP 进行玩家画像的分析。
客户压测数据如下图所示,第一个函数 TPS 上升到十几万,第二个削峰填谷后变成不到 3 万。
在这个场景中,函数计算的核心价值是:
- 事件驱动,解耦架构难点;
- 弹性高可用,削峰填谷;
- 快速开发上线,1 天完成开发和压测。
3. Serverless 实现安卓游戏 APK 包按渠道分发
UC 的游戏分发平台的游戏 APK 包需要根据实时请求中的参数获取渠道号,并将渠道号写入 APK 文件固定位置, UC 有每天有大量的且不同渠道的下载请求,能实时让用户断点下载指定渠道的 APK 游戏包。
以阿里内部 UC 游戏分发平台为例,在对象存储里面放了一个原始包,其他包在文件固定位置加一些东西就可以。但是 UC 渠道每天有不同的下载请求,通过 Channel=UC/小米/华为到 CDN,CDN 直接回源到函数计算, 比如在函数计算看到回源是小米,从 OSS 拿到原始包把小米渠道信息写进去,再把这个包直接返还给 CDN, 其他渠道包同理, 只要被下载过一次,都被缓存到 CDN。
这个案例中,函数计算的核心价值是:
- CDN 直接回源到弹性高可用的函数计算服务(FC);
- 降低成本,按需付费。客户不需要为峰值预留计算资源,流量单价降价 40%。
4. Serverless 实现快速多渠道游戏打包
在发行游戏之前,通常会针对不同的发行渠道,将游戏母包和不同的渠道资料包构建成渠道包。在这个构建过程中,如果使用手工方式,存在易出错、效率低、高成本的痛点。
- **效率低:**针对不同的渠道去打包,传统的做法是固定买几台打包机,打包机可能大部分时间浪费,每周就打几次;
- **高成本:**渠道越接越多,打包机只有几台,想查看渠道包情况,可能需要打一晚上第二天才能看到。随着渠道越增越多,打包机也需要不断增加,闲置成本也越来越高;
- **易出错:**如何给打包机分配任务,调度系统需要自己开发,如果打包机出现了异常,需要自己去解决打包机的问题。
这个场景下,引入 Serverless 工作流,如下图所示:
工作流定义:第一步,把母包从 OSS 上下载下来;第二步,并行去打包这些包,每个渠道包有一个并行的任务;第三步,打包完以后,进行后处理。
在这个场景下,函数计算的核心价值是:
- 任务自动化:事件一键触发、自动运行,工作流完整跟踪记录整个打包流程,提高打包成功率;
- 打包并行化:多个渠道包构建过程并行,提高打包效率,同时支持配置模板化;
- 低成本: 按量付费,计算资源利用率高。
5. Serverless 实现游戏服务快速全球部署
阿里云作为国内第一家与 Terraform 集成的云厂商,生态支持较完整(Serverless 重度依赖云服务,中国支持较完整)。由于游戏不可能使用很多其他的云服务,而使用 Terraform 可以实现快速多云部署。
6. 实践案例总结
- CPU 密集接口
- 战斗结算;
- 社交类游戏中,游戏内截图、游戏直播视频在线截图、离线转码等;
- 聊天敏感词检测过滤,聊天翻译;
- 排行榜等。
- 游戏活动运营
- 激活码生成、消耗等一些封测运营活动;
- 游戏打包发行、广告买量、活动页、运营平台等业务平台。
- 用户基本业务数据处理
三、阿里云函数计算现状
1. 函数计算是国内企业 Serverless 架构落地、业务创新的首选产品
2020 年中国云原生用户调查报告,阿里云 Serverless 用户占比是 66%。CNCF 2019 年中国云原生报告中显示,函数计算是国内企业 Serverless 架构落地和业务创新的首选产品。
2. 阿里云函数计算产品全景
函数计算是国内生态最完整、功能最丰富的 Serverless 产品,开发者一步上云、一键 Serverless 化将成为现实。
图:阿里云函数计算产品全景
- 系统层面:支持了各种语言,开发者可以选一个自己最喜欢的语言,同时也支持了容器镜像,拥抱容器生态;
- 实例类型:默认选择百毫秒弹性实例,也可以选择性能实例(比如强 CPU 密集型的音视频转码);
- 触发层:可以 API Gateway 或者 SDK 直接触发,也可以用 Kafka、OSS、CDN 等事件源触发;
- 工具层:有全新的 Serverless-Tool、Fun、开发者框架等等;
- 可观测性:包括日志、监控、 Metrics、告警、Tracing 等;
- 应用中心:有非常好的落地案例,可以快速体验经典案例。
四、附录参考
- 江娱互动:游戏领域 Serverless 架构探索之路
- 游戏打包过程枯燥且工作繁琐,如何提升打包效率?看鲸旗游戏的新思路
- 在游戏运营行业,Serverless 如何解决数据采集分析痛点?
- 函数计算 FC 助力游戏群采集营销数据滴水不漏
- 基于 ECI+FaaS 构建游戏战斗结算服
- 娱乐/教育行业:推流、转码一站式解决方案
- 零售行业:线上线下业务 Serverless 改造
作者简介: 罗松(西流),目前负责阿里云函数计算产品功能开发:runtime 开发、事件源集成以及工具链的开发等,毕业后,从事了两年手游开发,经历过完整的手游立项、研发、上线流程,17 年投身 Serverless 大潮,致力于将更好的 Serverless/FaaS 实践案例落地,打造国内最好的开源开放的 Serverless 社区。
本文整理自【Serverless Live 系列直播】1 月 27 日场 直播回看链接:https://developer.aliyun.com/topic/serverless/practices
Serverless 电子书下载
本书亮点:
- 从架构演进开始,介绍 Serverless 架构及技术选型构建 Serverless 思维;
- 了解业界流行的 Serverless 架构运行原理;
- 掌握 10 大 Serverless 真实落地案例,活学活用。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
在主动要求涨工资这事上,不要学我!从第一份工资800开始说起
在主动要求涨工资这方面,不要学我,为什么? 因为在我工作的十几年里,我从来都没有主动要求过涨工资。这不是优点,这并不对! 先说说我的经历,工作这么久,待过很多公司,我在涨工资方面一直很被动。 经历一 我第一家公司在北京,是一个非常小的公司,算上我程序员就 4 个人,靠给客户做一些小软件项目为生。小公司工资开的也很低,说出来你们可能不信,我刚去的时候工资只有 800 块钱。 工资 800?程序员?在北京? 没写错,就是 800,就是 2002 年,我来北京之后第一份工资。 那时候我们大学一起毕业的几个同学,来北京做程序员,工资起步价差不多两三千块钱左右。 我的情况和那些同学们不一样,在大学我不是计算机专业的,而且我们大学名气也一般般,就是一所普通二本大学。另外,我可以住家里,不用负担房租,无形中省了很大一笔开支。所以有一个公司,不管公司多小,能让我做程序员,能让我入行,800 块钱,我完全可以接受。 哦对了,当时钱还很值钱,物价比现在低多了。给你们来几个鲜活的例子: 零几年的时候,北京路上出租车还是夏利和富康,如果没记错的话,北京的煎饼果子、鸡蛋灌饼不到 2 块,大排档的燕京大绿棒子 2...
- 下一篇
【白话科普】CDN & 游戏加速器,两者是一个原理吗?
说起加速,大家可能就会联想到“游戏加速”之类的场景,而说到现在流行的云服务加速,则离不开 CDN 这个词。那么 CDN 和游戏加速器是同一种东西么?从效果上看两者都是为了“加速”,似乎是一样的。但是,在本质上却有区别。 以上图举例,假设我们需要从 A 地点到 B 地点取东西,那么走直线肯定是最短距离。但如果 AB 之间的通路路面满是巨大的障碍物,极其难走,通行时间为 4 小时。而C和AB之间的通路十分通畅,从 A 经过 C 再到 B 只需要 2 小时,你会如何选择呢?相信大家肯定会选择走 C 去 B,毕竟虽然路远了,但是时间更短。游戏加速器就是让大家通过 C 点,能够更快速地到达 B。而 CDN 则是让东西放置在 C 点,从而加倍缩短时间。 当然以上只是一个简单的举例,游戏加速器和 CDN 的具体运作原理我们下面细说。 游戏加速器的原理 游戏加速器是针对个人用户快速、安全连接服务器的一种服务。它使用的是 VPN(虚拟专用网络)技术,通过虚拟专用网络将电信加速到网通,或将网通加速到电信等等,为玩家提供优质的网络加速服务。 在没有使用游戏加速器的时候走的就是平常通道,登录游戏加速器以后,玩...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8编译安装MySQL8.0.19