当前位置:科技 > 业界 > 互联网络 > 正文

腾讯互娱DBA谈分布式存储在游戏的实践

2016-04-18 19:30:00    IT168  参与评论()人

  【IT168评论】游戏云存储GCS是互娱运营部沉淀多年的贴合游戏生命周期的数据存储及“一站式”管理平台, 它提供了数据缓存层及持久化层的技术解决方案,帮助业务快速接入的同时降低存储成本,减少硬件故障及常规DB维护导致的停机时间,助力公司游戏业务长期发展。

  在PC端游戏时代,GCS主要解决DB管理效率和成本问题,我们从mysql源码层面做了很多定制化的功能特性,以适应游戏快速迭代的需要:譬如TMySQL快速加字段特性实现100GB级甚至TB级表的秒级增加新字段;innodb表大字段透明压缩特性实现减少innodb内存和磁盘空间 的占用,以CPU换MEM及IO,进而提升mysql整体吞吐能力。

  在移动游戏时代,特别是腾讯手游精品2.0战略的推进,对DB运维管理提出了更高的挑战:如 何实现在不停机情况下,进行用户体验无感知的存储层扩容、缩容,用户数据在线搬迁?互娱DBA团队在2013年底开始探索分布式存储领域,目前GCS包含了TRedis高性能缓存及持久化和TSpider分布式数据库两个产品线。研发也不再需要关注用户数据的切片路由逻辑,至今我们在线上做过了20 次不停机的扩容缩容的调度,存储层的扩容、缩容过程实现了对研发、运维、玩家的基本透明。

  GCS-TRedis高性能缓存及持久化

  随着手游市场这两年爆发,腾讯游戏尤其是代理业务较多的使用Redis作为数据Cache层。移动时代,游戏上线,贵在神速。Redis本身性能已经足够好,但是在海量用户场景下,其单线程的性能还是难以支持,在容量快速增长的情况下,管理和扩容也面临极大的挑战。因此,我们决定基于Redis定制TRedis,以满足快速上线和快速扩缩容的需要,并兼顾成本和效率。

  单个Redis管理内存数量有限,为了提供给业务大量数据存储及访问的支持,我们定制了基于Twemproxy的TRedis集群方案,让业务可以不用关心Redis的存储及容量上的扩展能力,专注 于业务逻辑。TRedis集群方案的源码定制改造涉及Redis及Twemproxy,改造后的集群方案实现了Redis故障切换(基于GCS的DBHA)、在线迁移及在线扩缩容,业务访问基本无感知, 连接不中断。

  此外,手游生命周期相对较短,上线后头几个月快速爆发,稳定期后活跃玩家比例逐步下降, 对应到Cache层就是缓存的内容没变少,但访问量会减少很多。此时,如果数据还全在内存里边,在成本上来讲并不划算。因此我们设计了TRedis集群的冷热分离方案,使用rocksdb作为落盘存储,让内存只保留少量热点的数据,提升了数据安全性的同时可以让Redis管理的数据远超过内存的容量。目前现网单集群存储数据超过10T,访问性能稳定。

  GCS-TSpider分布式关系型数据库

  腾讯互娱运营着数百款游戏,包括端游、页游和手游,其中大部分使用MySQL作为存储。随着游戏玩法的轻量化,尤其是手游的爆发,传统的MySQL Master-Slave(简称MySQL M-S架 构)存储方式逐步暴露出了如下问题:

  1 分区分服的游戏,不同区服玩家活跃度不一致,单服对应后端MySQL M-S架构的部署 策略在资源调度上不够灵活,容易造成资源压力不够均摊,形成浪费;

  2 全区全服的游戏,研发须根据DB的存储能力和业务特性进行分库分表,存储层分表和 业务逻辑耦合太强;

  3 无有效的在线扩缩容机制,存储层扩容、缩容需协调业务停机后再进行操作;

  而TSpider是突破了MySQL的单机性能及容量瓶颈的MySQL分布式解决方案,弹性可扩展。TSpider是基于开源的Spider3.1版本进行源码定制的,并建设了完整的配套管理系统,其主要特点包括:

  1 透明分库分表和在线扩缩容能力。

  这是TSpider首先需要支持的功能,也是解决以上痛点的关键。得益于此,开发者可以 仅专注于业务逻辑的开发及运营,无需编写数据分片逻辑,在海量用户并发情况下,也 无须关心DB存储层的负载压力,TSpider的管理系统会根据负载压力从而进行在线扩缩 容调度。

  举个例子来说,某手游上线前,其iOS-QQ渠道的用户数据,我们上架的TSpider集群一般仅包含2组PCIe-SSD作为后端存储机器,随着该游戏快速增长,我们可以在该游戏不停机的情况下,将TSpider集群后端存储机器增加到4组或8组PCIe-SSD,而随着游戏的衰退,我们又可以随时将集群机器减少到2组,这些扩与缩的操作,均不需要研发或运 维的参与,并对玩家的游戏体验无影响。

  2 兼容MySQL协议,支持MySQL 99%以上用法。

  腾讯游戏对接的开发商众多,在接入腾讯平台前很多已经有现成的开发框架和代码。因 此,在分布式技术方案选型前,协议兼容性是非常关键的一个指标。因为让开发商大量修改代码是一件比较困难的事情,也不符合手游生命周期中快速上线的特点。事实上, 接入TSpider的游戏业务确实使用了比较多“奇怪”的用法,包括表连接、子查询、多表更新等,就是基本上将TSpider当成了一个普通的单机MySQL来使用了。

  在兼容协议的同时,我们也做了大量的性能优化,如执行智能下推及并行化查询,在某 些复杂查询场景下没有命中shard-key,则效率比较低,需要遍历所有的后端存储节点,在打开并行化功能情况下,经过游戏的实践验证,在此场景可提升6-8倍的查询效率。

  3 高可用

  TSpider后端存储节点采用一主一备架构,我们会监控Slave跟进情况及数据一致性。当Master发生机器故障时,可在分钟级完成故障切换,切换过程对应用透明,并且应用无 需重连。

  4 老业务数据支持在线接入

  除了新业务,老业务也可以享受TSpider带来的收益,MySQL M-S架构迁移到TSpider环境中支持数据在线迁移,但需要短暂的停机时间进行业务访问的切换。

腾讯互娱DBA谈分布式存储在其中的实践

  以上GCS-TRedis、GCS-TSpider的实现原理和技术细节将在DTCC 2016大会的<专场2: NoSQL技术实践>和<专场23:数据库技术前瞻>两个专场中,由腾讯互娱高级DBA康中良和 陈福荣两位同学给大家一一进行阐述,敬请关注。

 

社会文史娱乐汽车科技旅游城市文化

新闻 军事 论坛 娱乐

新闻频道
国内国际社会评论文史专题经济新闻图库老照片
军事频道
军事要闻中国军情国际军情军事历史网友原创军事专题军事图库武器装备军事文化
汽车频道
车闻Update漫话车型漫记车映像实拍解析行业动态新车资讯独家评测汽车生活人文之旅
教育频道
留学移民高考中小学拒讲堂师说商道商论
游戏频道
游点意思网络游戏网页游戏单机游戏手机游戏军事游戏游戏产业发号中心游戏美女图说游戏囧游囧事
科技频道
业界互联网行业通信数码手机平板IT硬件相机笔记本家电产品库
旅游频道
X旅行视界目的地 美图发现社区
文化频道
专题非遗沙龙历史艺文博览读书图库书画禅文化
书画频道
资讯收藏展览在线展厅艺术家视觉专题
体育频道
国际足球中国足球NBACBA 综合体育图片汇总专题策划
视频频道
新闻军事中华出品原创娱乐纪录片微电影决胜海陆空
娱乐频道
明星电影电视音乐专题图库论坛
公益频道
老兵出镜老兵动态老兵资料库关爱老兵在行动公益组织公益人物
城市频道
城市聚焦城市设计城市生活城市策划城 市图赏城市加盟城市论坛
社区频道
中华论坛网上谈兵中华拍客社会时政国际风云生活消费休闲旅游美丽女人娱乐八卦经济风云情感世界文学天地
好医生频道
保健养生疾病防治行业资讯名医谈健康 医生专栏食疗跑步
经济频道
国内宏观海外经济产经商贸时尚消费电商眼球儿企业故事专栏评说识局经济