内容来源:2018 年 08 月 25 日,腾讯游戏云产品总监王永和在“腾讯云GAME-TECH游戏开发者技术沙龙 小游戏”进行《腾讯云小游戏解决方案》演讲分享。IT 大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。
阅读字数:3179 | 8分钟阅读
嘉宾演讲视频回放及PPT,请复制:http://t.cn/Evmofr1,粘贴至浏览器即可。
摘要小游戏的出现吸引了无数的开发者加入,短短时间内成为了游戏行业的又一新的风口。本次分享我们将从小游戏的特点讲起,向开发者全面讲解腾讯云小游戏解决方案。内容包括如何利用腾讯云工具快速开发小游戏、如何提高小游戏的下载效率、如何从容应对因社交传播导致小游戏瞬间爆发所带来的运维困境、以及腾讯云为小游戏开发者推出的扶持方案等内容。
小游戏,大世界大家先看一组数据,这是在腾讯上的一款小游戏的一些数据,可能大家关注的是每月流水,但是对云厂商来说我们关注的更多是后面的量。因为高收入后面其实是有着很多辛勤的工作的,比如上线初期流量爆发之后,我们团队直接跟客户交流整改架构。
小游戏本身还是有一定门槛的,一般的游戏开发者要做后端或者往重度的小游戏发展的时候依然存在一些不足,或者说资源投入上不具备。我们之前一直说棋牌是一个高风险、高投入的行业,其实小游戏同样如此。
小游戏同品类的游戏特别多,一旦某款游戏火了,立马就有一堆相似类型的游戏出现,竞争非常激烈。而从云厂商的角度来讲,如果能帮助这个行业降低入门门槛,对我们来说就是双赢。
腾讯云应用服务平台上面是将在8月底推出的腾讯云应用服务平台,目前在内测中。该平台做了很多简单的整改,我们发现很多开发者其实对购买服务器搭建数据库、初始化、扩缩容等,并不熟悉,包括CDN他们也不太明白。
所以我们把这些东西抽象成一个面板放置在客户端和云资源中间,前端开发的人员通过调用API的方式就可以直接使用它们,相当于云后面的资源对开发者是透明的。
这是腾讯云和微信小游戏部门共同打造的一个平台。它的优势在于,开发者不需要去集成第三方的SDK,直接用微信的wx.cloud就可以调用各种方法。
通常前端和后端通信的时候,会通过密钥或者其他加密技术来做鉴权,最终由服务端对前端请求进行验证。
而采用微信的官方健全后,开发者在腾讯云后端的资源不再需要考虑二次定制化健全,只要使用微信API来调数据库或者是访问存储,基本上就不用关心鉴权的各方面问题。
安全方面我们是在物理的网络层做的隔绝,即使别人知道你的访问地址和文件路径,也无法通过公网连接到腾讯云的资源的。
我们还提供了一些便利的工具,比如免费的运营、证书,原生的HTTPS协议的支持。并且还提供了很多PaaS服务,包括数据库、文件存储、CDN服务和云函数。
数据库存取
下面我们通过三个例子来看下这些服务是如何实现的。首先是数据库存取的场景,图中左边是josn格式的数据库记录,要想在微信的客户端获取到这样的数据,通常要服务器上实现服务端动态查询数据库,然后往前push数据。
但现在我们可以直接调用微信的SDK,使用wx.cloud.database来创建数据库的引用,后面直接调它的方法,就能完成查询数据库等一系列操作,目前支持所有的数据库的连接方法和组合。
这样就避免了前端开发人员还要进行后端编程的麻烦,让前端也可以开发可联网的轻量级游戏。当然我们也提供在数据控制台上做数据管理的面板。
图片上传
第二个场景是上传图片,有时我们需要将图片会上传到云端的存储,比如保存用户完整的自定义的头像,就需要把他的头像图片传到数据库上。通常这要在服务端开发一个上传图片的后端应用,最终返回图片保存的路径。
而如果用的是TCB(腾讯云应用平台),可以直接调用微信SDK的uploadFile方法指定要上传的图片和图片。个人认为,如果你的游戏非常简单,没有太复杂的后台逻辑,建议采用这种方式。
云函数
目前来看以上两个功能基本上满足之前开发单机游戏的需求。但是对于一些轻量级的功能不适用,比如地理位置的匹配,就需要在前端做大量的计算,从而对客户端的性能产生影响。
这种需求其实放在服务端计算可能会更快一些,不过我们仍坚持不引入后台服务器,而是使用云函数的方式来应对。
开发者可以定义部署到云端的函数,然后传递参数调用该函数,计算结果就会返回到客户端。云端函数的调用同样是通过调用API来完成。
由于我们和微信是深度集成的,所以可以直接获取到用户的信息,也就是上图代码中的userInfo参数,这对于拥有复杂逻辑运算的单机游戏很有帮助。
文件存储
文件存储涉及的不仅是存储还有加速。虽然图片存储到服务器上之后,可以简单的通过网络地址访问到,但是当有大量请求出现的时候,数据读写会对后端服务器造成很大压力。
一般这种情况会应用分布式CDN解决,将上传到存储空间的图片同步到全国各个CDN节点上,用户访问的时候,会优先选择离他最近的节点传输数据。我们同样也提供自动同步CDN的能力,只需开发者在TCB平台开通相关CDN功能即可。
稍微有点遗憾的地方是,目前平台中游戏方面的内容其实是比较少的,基本上可以说是一片空白。我们现在的计划是,在12月份之前推出基于TCB平台的游戏生态内容的对接,让开发者除了用到前面讲到功能外,还可以用到一些游戏方面的东西。
重度小游戏架构面临的挑战最近几年的游戏基本上都开始往重度方向发展,对于微信小游戏来说最大的特点是社交化,不过目前的微信单机游戏社交性过弱,而真正的社交互动的游戏一定会向重度游戏发展。
前面的轻量级游戏解决方案无法适用于重度游戏,所以我们总结了些重度小游戏在架构方面面临的一些挑战。
首先是弹性扩缩容,这也是目前最令运维最头痛的问题,因为我们无法预测到小程序何时会爆。有时候某个大V不经意的在朋友圈或者群里发了这个游戏,可能就会引发几何式的增长。
而此时游戏又没有办法做弹性扩容,因为可能架构上就不满足弹性扩缩容的要求。所以我们经常会看到,要么游戏一直不火,要么火了一段时间后停机维护,之后淡出视线。
第二个是高并发承载,这也是实现弹性扩缩容的先决条件,即如何应对突发的大流量涌入,在高压情况下保证游戏的流畅性。
重度小游戏架构思路
对此我们的架构思路是利用腾讯云的负载均衡和Auto Scaling去做高并发和自动扩容的服务。
需要提到的是数据库方面可能受到的注意并不多,不过个人建议数据库选型的时候应该考虑多个组合,而不升单用一个mysql来应对,要在缓存和高频数据的切片上做一些预留设计。
弹性扩容主要是通过腾讯云的云监控获取服务器、CPU、内存、读写的承载情况,然后判断这些数据是否达到阈值,一旦超过阈值就自动进行扩缩容。
对于高承载大多数人只关注链接数和并发量,但其实包括访问量、缓存、数据库、持久都是在一条链上的,不能将他们分割开。目前腾讯云方面是使用CLB做水平扩容和状态同步,采用腾讯自研的MongoDB分布式集群——CMongoDB,将数据通过片键存储在多台物理机上,实现存储容量无上限的能力。
CDN是小游戏加速的主要途径,它本质上是一种分布式下载和分发的技术,广泛应用于网站和游戏领域。腾讯目前在全国有1100多个OC加速节点,基本上覆盖了国内大多数中小城市。另外为了提升回源的效率,我们还设立了南北两大超级中间源。整个OC节点使用腾讯云的WAF为动态请求提供安全防护。
以上为今天的分享内容,谢谢大家!
编者:IT大咖说,转载请标明版权和出处
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved