微信小游戏流水过亿的技术揭秘 腾讯云数据库MongoDB攻略篇

随着微信小游戏的爆发,越来越多开发者关注到MongoDB与小游戏业务的契合度。

腾讯云已为多个爆款微信小游戏提供服务,腾讯云数据库团队在多年MongoDB运营&支持微信小游戏服务经验总结,MongoDB产品经理李晓慧在7月26日在厦门举行的《腾讯云GAME-TECH游戏开发者技术沙龙》上,为广大开发者分享了腾讯云MongoDB在小游戏中的实践应用,帮助刚刚走进小游戏开发的同学们提供干货。

以下为分享内容要点:

一、为什么在小游戏开发场景下,使用MongoDB是比较合适的?

1.需求灵活多变:

如果使用Schema的数据库,那么每次需求变动都可能需要开发者去改数据库。带来得开发成本极大。

使用MongoDB这种no Schema的数据库可以在需求变动时不用更改数据结构,可以灵活增减字段,节约成本并提高效率。

2.附近的玩家:小游戏之所以爆发,很大一个因素是借助微信自带的社交元素,通过调用微信的API推荐好友ID和获取附近的玩家。

MongoDB原生支持GEO地理位置信息存储,同时还提供GeoSearch和GeoNear等API,可以获取用户附近玩家信息,用户可以方便通过API拉取好友ID和获取附近的玩家,使用起来非常方便。

3.海量数据支持&动态不停服升级:

很多开发者在小游戏上线前无法预测数据量,所以最初开始配数据库时都是标配,使用腾讯云数据库的MongoDB的分片集群,可以横向和纵向扩容,能够在不影响服务的前提下,把数据库扩展到很大。

4.运营数据分析支持:

MongoDB原生MapReduce功能,运营分析系统可以直接连过来使用数据进行分析,无论是用户登录数据还是行为数据轻松搞定。

5.nodejs完美支持:

6.nodejs和MongoDB是一起配合成长起来的。在小游戏的开发场景下,一般后面会有一个分布式的gameservice,前面配一个负载均衡,最后配多个MongoDB数据库。

二、腾讯云数据库MongoDB是如何助力TOP3的两款小游戏的?

在17年12月底到18年1月初,随着撒币答题直播兴起的同时,一款小游戏在微信好友圈高速发展,一跃成为TOP3的微信小程序。与此同时,因业务扩张太快,带来的操作响应慢确实让用户抓狂不已。腾讯云MongoDB团队在接收到客户的反馈后,迅速做出响应,通过优化MongoDB连接和创建读快照减少慢查询等操作,消除了小游戏卡顿的现象,助力客户拥有了上亿用户口碑的小游戏。因为靠着腾讯云产品过硬的功能和性能,以及优质的服务,腾讯云数据库MongoDB也为客户的另一款现象级微信小游戏带来峰值日活2kw且流水上亿 。腾讯云数据库MongoDB为微信小游戏提供:

1、 优化MongoDB的连接模型,支持更多的长连接。

由于原生MongoDB的后端连接模型分两部分,第一部分是Mongos对客户端的连接,第二部分是MongoS对Mongod的连接。对客户端的连接,采用的是one-thread-pear-connection,也就是每一个客户端连接打过来的时候,都会去建一个线程,每一个线程都会占用1MB的内存,所以当连接非常多的话,实例就会变得很卡。在后端建立连接的时候,是采用一个线程池的结构。每一个线程池,负责处理一个客户端的连接,然后每一个Worker里面又有N个线程池,每一个线程池又负责每一个Mongod连接。

腾讯云数据库MongoDB针对连接进行优化,优化后较原生的MongoDB可以多支持20%的长连接,让微信小游戏使用起来更顺畅,此优化让客户对腾讯云好感和信任度倍增。

  1. 读写分离,提高QPS,减少慢查询

一般原生MongoDB一主多从,如果不做任何操作,它会把所有的读写请求都打到primary上面,那么流量峰值来了,数据库主的写压力会非常大。客户就这个问题做了一个改善,把读引到了从上面,本以为这样会对主写的压力变小,然而却发生了游戏卡顿的现象。针对卡顿,腾讯云数据库MongoDB团队通过排查,发现当MongoDB主写压力非常大的情况下,从同步数据的压力也很大,此时MongoDB为了不让业务读到脏数据做了一个全局锁,导致业务的读操作就会被锁住,从而导致慢查询增多引起了小游戏卡顿。

腾讯云数据库MongoDB提供优化,从在回放Oplog的过程中,立即创建一个快照,所有的读都是读快照,不会被锁住。这个方案对效果优化是非常明显的。慢查询几乎没有,同时QPS是原来的2倍。这个优化目前已经申请专利。

腾讯云数据库MongoDB同时在只读实例上又做了优化方案:提供只读实例,此时只读实例会从主实例去同步数据,所有的读都打到只读实例上去。实际实现效果和读快照的方案性能差不多,此方案也在其他的小游戏大放异彩。

  1. 提供分片集群,业务量暴增时可灵活扩展

一款小游戏在未上线时候可能根本无法预估数据量,如果申请非常大的数据库会受到运维同事的挑战,但是如果后来量爆起来了,数据库扛不住压力时再进行扩容是非常麻烦的。为了更好的支持这种业务场景,腾讯云数据库MongoDB提供分片集群,在量还不会爆很多的时候,进行纵向扩容就可以满足需求。对于像客户爆款游戏,可以提供横向扩容,这时候使用分片集群,对线上业务几乎是无感知的。

  1. 提供库表回档,细粒度快速处理错误。

通常在业界MongoDB仅提供实例级别的回档,不管因为什么原因需要回档,客户均要通过整实例回档实现。作为目前国内提供MongoDB服务云厂商当中,唯一提供提供库表回档的腾讯云数据库MongoDB,为客户提供更细粒度回档服务。举个例子,例如有一天游戏的某个模块上线之后,发现有用户在刷钱,分析发现因为一个Bug引起的,此时如果直接强制性把用户的钱收回来,是非常不合理的,所以此时仅需要把这个bug引起的库表进行回档就可以。

  1. 提供表级监控,更精准、更细粒度监控业务健康度。

腾讯云数据库MongoDB是国内唯一提供表级监控的云厂商。业界大部分数据库仅提供实例级别的监控,监控实例的各种CRUD的操作,慢查询,延时,聚合操作。而多数微信小游戏在起步之初,通常是将多个小游戏的数据写在同一个实例里面,通过不同的库标管理不同的小游戏,此时表级监控相比实例监控对客户更有用和有效。

  1. 时序数据库CTSDB的应用

存储业务的日志和监控数据,客户使用腾讯云时序数据库产品方便存储业务的日志和监控数据。同时,时序数据库已经在烟草和电力行业实现规模部署。腾讯云数据库提供一系列的界面和日志采集工具方便大家使用。想详细了解这款数据库产品可以访问:https://cloud.tencent.com/product/ctsdb

最后,作为小游戏的开发者,如果你在数据库操作使用上有任何困难和疑问,不妨尝试一下腾讯云数据库产品和团队的服务,让我们携手共同为游戏客户提供更优质体验的娱乐产品服务。

访问以下链接或扫描下方二维码马上体验腾讯云MongoDB

https://cloud.tencent.com/product/mongodb

访问以下链接或扫描下方二维码马上体验更多腾讯云数据库产品

https://cloud.tencent.com/solution/database


原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑白安全

上传恶意文件时无意泄露两个0-day,被研究人员抓个正着

一个未知的黑客组织在向公开恶意软件扫描引擎上传一个用于攻击的 PDF 文件时,无意间泄露了两个 0-day 漏洞。漏洞被研究人员捕获,并及时上报给厂商修复。

10430
来自专栏云基础安全

网站安全防护指南

99020
来自专栏向治洪

Android 绿色应用公约

Android 绿色应用公约(草案) 宗旨 这是一项旨在推动Android生态中的优秀应用共同维护一个更加良性的『设备体验』而发起的开放公约。 设备体验:影响效...

32560
来自专栏腾讯移动品质中心TMQ的专栏

腾讯TMQ在线沙龙回顾|电量测试

电量测试 活动时间:2017年9月19日 斗鱼直播分享 活动介绍:TMQ在线沙龙第三十期分享 本次分享的主题是:电量测试 在线平均人气 70人! 想知道活动分享...

33080
来自专栏知晓程序

小程序微信认证太麻烦?那是你没看这篇文章 | 小程序接入指南

38840
来自专栏数据和云

“月底难过”- 都是统计信息惹的祸

作者简介 ? 案例说明 某大型电商公司数据仓库系统经常出现在月底运行缓慢的情况,但在平时系统运行却非常正常。这是因为月底往往有月报等大批量作业运行,而就在这个时...

30060
来自专栏Android开发实战

别哭!程序员/开发人员的真实生活:)

各位程序员/开发人员,你们有过上面这些经历么?我是希望会有,如果没有,或许你不算是个真正的程序员/开发人员啊。O(∩_∩)O~

10920
来自专栏Spark学习技巧

spark源码导读一

1,业务需求,现有框架满足不了项目需要,需要对源码的一部分进行修改或者叫做二次开发,需要阅读部分源码。那么这个针对性就很强了,修改不符合需求的部分。

15810
来自专栏Debian社区

Linux:为什么那么多人讨厌 Systemd

Systemd在Linux社区引起了无限争议。一些Linux用户对systemd的反对绝不屈从,还有一些Linux用户对systemd喜爱有加,还有很多人满不在...

16120
来自专栏张善友的专栏

Windows SharePoint Services 3.0 Service Pack 1

微软于2008年3月6日发布了Windows SharePoint Services 3.0 Service Pack 1,Windows SharePoint...

19590

扫码关注云+社区

领取腾讯云代金券