【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版本进行源码定制的,并建设了完整的配套管理系统,其主要特点包括: