欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~javascript
本文由腾讯云数据库 TencentDB发表于云+社区专栏java
今天我分享的主题内容大概是两部分,最主要的仍是小游戏和小程序,第一部分就是跟你们分享下咱们在现网运营中服务小游戏以及爆款小游戏积累的经验。在现网运维中咱们作了一些改动,帮助爆款小游戏可以稳定运行。第二部分咱们推出了一套新的解决方案,适合小白开发者,适合初创公司,能够在微信开发小程序的同时,可以使用腾讯云的资源,享受腾讯云的各类服务。数据库
先讲第一部分的内容,刚才邹鹏最后讲的一段的时候,一直有一个图片,那个图片就是各类数据库的排名,可能你们没有注意到,MongoDB的排名其实已是第五名,再说一下MongoDB为何适合游戏开发场景。咱们知道游戏开发中一个最主要的特色是需求变化很是快的,由于在游戏不一样的阶段会加入一些新的元素黏住用户,例如道具,在游戏上线的不一样阶段加不一样道具,这种用传统的关系型数据库难免对表进行结构修改的DDL的操做,可能有些开发者说不须要,以前作的就是把全部的字段打包成一个字段塞进一个库表就能够了。使用MongoDB不须要改变表结构,对开发者是很是Nice的。另外,大多数游戏会添加社交元素加强用户的活跃度,黏住用户。咱们提供了地理位置索引以及配套的API,不须要在业务层作操做,数据库层已经原生支持了。海量数据的支持,咱们提供了分片的功能,其实数据最开始,在业务上线最开始阶段,并不知道到底未来是什么样的量级。使用关系型数据库的话,后期避免不了进行分库分表,扩容,MongoDB这边提供了分片集群,能够在不影响业务的同时进行水平的扩容,这个对运维来讲是很是好的解决方案。小程序
运营分析,如今是大数据时代,每一个业务都会根据数据分析的结果支持运营策略,咱们是原生支持MapReduce的,开发者能够直接使用。还有一点很是重要,假如你是小程序开发的话,用JS语言写,存在javascript技术栈MEAN和MERN,MongoDB和Nodejs二者是伴随成长起来的。总之,MongoDB特别适合游戏开发场景。后端
我想问一下如今在座的有没有用咱们腾讯云MongoDB的?或者是有没有用MongoDB的?自建也能够。大家用MongoDB存什么数据?(目前搜集用户行为日志)是自建的吗?(对,原本想用云上,后来发现自建会便宜一点)一主两从仍是一主一从?(作副本集,三个部分,没有固定说哪一个是主)实例多大?(如今几十G的数据量)大家买的CVM是多大?(500G空间,咱们前期使用起来,如今一个方向还不太明确,就是一个试探,我在以前用的都是阿里的比较多,腾讯是今年才开始接触)我大概了解了,因此说我以为今天能站在这分享,跟这么多用户见面,对我我的来讲是很是高兴的一件事,至少我知道你们如今怎么使用以及有没有用,不用我一一拜访了。缓存
小游戏的调用栈,不少开发者都很是清楚,我只须要简单的带过,通常会在前面加负载均衡,而后经过虚拟机搭建服务器,后面连数据库。安全
我刚才跟你们提了咱们其实在现网服务过不少爆款小游戏了,最主要的一个目的就是可以让客户的游戏稳定运行,咱们在服务他们的过程当中,累积了一些运维经验,作了一些链接参数的调优,帮客户实现实例价值的最大化。服务器
首先跟你们简单分享一下MongoDB的链接模型,分两部分,第一部分是Mongos对客户端的链接,第二是Mongos对后端的链接,第一部分链接采用的是很是古老的方式,叫one-Thread-per-connection,每一个链接分配一个线程,每一个线程栈1MB内存,1000个链接是1G内存,因此,MongoDB对链接是很是敏感的。对后端链接的模型就是每一个Mongos会绑定一个Worker池,假如你有三分片,每一个分片是一主两从,那就是9个Mongod,每一个worker就会有9个链接。微信
这里有一个参数,若是这个参数设计的不合理,业务体量比较高的状况下,后面链接池子的线程是不够用的,就会进行频繁的线程调度和切换,由于线程的切换和调度的开销是比较大的,因此运维人员比较关心的就是minConnection这个参数,这个参数咱们是单独提出来可以给运维人员直接修改的,这个参数的设置有一个公式,这个公式就是你须要根据,好比当前TPS为1000,每一个链接要求处理10毫秒,2个分片,minConnection=1000/2/(1000/10)。则第二个参数也是运维人员比较关心的,第二就是refreshRequirement,就是每一个业务会有一个估算的链接峰值,那么refreshRequirement设置要超过5分钟才行。以上是咱们对MongoDB链接模型的优化。网络
第二个咱们服务现网不少小游戏时遇到的慢查询问题。不少用户比较了解MongoDB的话,由于是一主两从,就会为了减小主的压力,就设置把读请求打到从,从能够同步数据,也能够接收读请求,主就作接收写请求,这是理想的方案,可是咱们服务用户过程当中发现这个方案也会带来问题,由于从3.2版本,引擎就默认是WT。WT引擎有一个操做就是从在同步数据的时候会加一个全局锁,这个锁会把全部的读请求都锁住,这样的话慢查询就可能会变多,基于这个问题,咱们这边是搞了一个专利,这个专利就是基于快照的读的一种方案,就是当你进行从读的时候,此时让你读快照,同步数据完成以后,全部读请求正常,快照被清掉。最左边的图是另一个解决方案,这种解决方案就是咱们提供了一种只读实例,在主实例上挂只读实例,主实例负责接收读写请求,其余业务模块只须要把全部的链接请求打到只读就能够了。这两种解决方案在通常状况下的优点不是很是明显,可是当你的实例Primary写入压力很是大的状况下,效果是很是明显的。最后面有一张图,蓝色部分是源生的Mongo,红色的部分是咱们基于读快照的方式的一个性能,X轴是写入大小,Y轴就是从库读请求的延时,咱们发如今源生的Mongo中最大的读延时能达到85毫秒左右。用咱们的解决方案的话,在10毫秒左右,很是快。以上是咱们第二个优化。
业务最开始上线的时候其实并不知道后期量级能达到多少,假设开发人员在最开始的时候申请比较大的实例的话,其实会被运维挑战的。可是假如用分片集群的话,就会避免这个问题。最开始的时候设置很小的,买一个很小的分片,后面你的业务量大起来以后,再水平扩分片。只须要指定分片的Key,就会把数据分到不一样的片里面去,自动作均衡,业务无感知。
库表回档,在游戏运维过程当中比较痛苦的一件事就须要回档。确实很痛苦,有时候我感受有些用户回档过程当中很是着急,一旦回档应该是发生了比较严重的事,要回档到以前的时间段。由于程序是避免不了有Bug的,或者游戏在上线过程当中有一个Leader手抖,发了不少道具,可能形成不少人民币的损失,这个时候就要进行回档。可是仅仅是某个库表进行回档,不须要整实例回档,针对这种状况,咱们支持库表回档,对运维人员是很是nice的功能。
个人第二部份内容就是针对小游戏和小程序的一种解决方案。小程序开发和小游戏开发特别是小游戏会遇到一个问题,使用本地缓存30-40M彻底不够,如何把小程序赋能到云,咱们提供了方案,不须要到腾讯买CVM、数据库、函数,只须要在小程序开发IDE上点击控制台上的按钮,开发者只须要关注业务逻辑的实现,后端的服务器的运维知识都不须要再去了解。小游戏和小程序的特色就是短平快,快速上线,迭代快法,强占市场,经过一些道具和广告迅速变现,生命周期不长。
咱们这个解决方案在服务层有数据库的管理、文件的管理、函数的管理,后面还会加一些日志、触发器的服务,底层服务有腾讯云MongoDB、云函数这一套。也就是说刚才咱们在服务现网其余游戏中的运维经验的累计都会应用到这个解决方案里面,因此说你们能够放心使用。
开发过程当中会有多个环境,开发环境、测试环境、生产环境,在云上开通这套服务以后咱们默认会包含多个环境,环境之间是相互隔离的。
这种方案特别适合我的开发者、初创团队,对于成熟团队须要上一些项目的话,能够当即使用。如下是咱们的控台,有三个功能,能够建立集合,咱们增长了导入和导出功能,能够把其余地方的数据导到这里面让你的小程序直接运行。第二就是索引,咱们把索引功能优先开出来了,默认给_id字段加了索引,用户也能够本身增长单列索引和复合索引。另外,权限管理这里也很是精细。
我今天的分享差很少是这样。更多数据库前沿技术可关注 咱们公众号:腾讯云数据库CDB
Q&A:
Q:老师,您好,您刚刚讲的关于监控数据,我想问的是关于小程序会让用户看到日志以及监控数据吗?大家有提供报警机制吗?
A:我以为你应该是深刻思考这件事了,确实是,监控和日志很重要,日志很快会包到解决方案里面,用的是ES。如今监控指标跟MongoDB公有云的数据是同样的。告警咱们作了策略,会对关键指标的告警系统进行预值自动设定,自动告警,用户自定义告警在短时间内尚未提供。
Q: 您好,老师,今天下午辛苦了。我曾经不太了解MongoDB,我据说MongoDB有一个安全的事件,应该在一年之内,但具体时间不清楚,我想了解一下,好比说云上Mongo的安全的这块,大家是怎么作的?
A:安全有两点,第一点是网络,咱们会有在前面加了安全组,这样对访问来源IP进行了第一层过滤,安全组,用户能够本身设置。第二咱们加了VPC网络,在本身虚拟机同一个网络类的CVM才能访问咱们的Mongo,这样就作了网络隔离。第二方面咱们有数据加密,咱们如今作的是存储型加密,这个加密功能是用户在购买的时候能够选择的,因此说用咱们腾讯云MongoDB的安全是彻底能够放心的,可是你自建的话可能就没有这么。
Q:您刚说的VBC,若是自建的话,我们的网络就是独立的。
A:自建的话,VBC能够作到,可是数据层的加密是作不到的。
此文已由做者受权腾讯云+社区发布,更多原文请点击
搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!
海量技术实践经验,尽在云加社区!