从找不到需求险些被叫停,到支撑亿级DAU的数据库行业标杆,腾讯云数据库TcaplusDB在风雨中走过了整整10年。辉映日月破风浪,十年一剑破九天。百万行代码就像淙淙流淌的数据溪流,终于在十年后汇成不可逾越的护城河。

出发

2010年前后,QQ空间很火,带动了基于SNS互动页游(WebSNS)的火爆,腾讯内部开始考虑怎么做页游。也开始建设页游基础技术体系,其中最重要的产出是研发自己的分布式数据库TcaplusDB。与MMOG游戏不同,通常WebSNS游戏是全区全服的,数据集中存储;而其游戏逻辑服务器是对等的,web客户端通过短连接与服务器进行通信,也就是说玩家游戏过程,后端交互的逻辑服务器随时会变动;这些特性导致在逻辑层不方便对用户数据做缓存。

此外,WebSNS游戏基于玩家之间社会关系的互动场景非常多,玩家的一个互动操作,需要读取和修改与此关联的其他多个玩家的数据;这意味着web游戏中数据读写访问频率高于同时在线数,其访问频率实际上是在线数的N倍;假如某个100万在线的web游戏,平均每个玩家有50个好友,如果同时有1%的玩家触发一个好友动作,则可能会触发50万次数据访问。也就是说,基于这样的场景,web游戏的数据库层需要支持比传统MMOG游戏大的多的访问频率,如果仍然采用传统的数据库管理系统(如MySQL),要支持这么大的访问频率,其代价非常大。

因此,在游戏逻辑层和传统数据库管理系统之间架设高速的缓存系统,对web游戏来说至关重要。

当时业界已经有比较多的提供高速数据访问的NoSQL产品,不可否认,这些NoSQL产品在一定场景下使用是很优秀的,但在部分场景或需求下存在不支持或不够出色的情况——比如全内存带来的成本问题或对异步数据读写支持不够等。

2011年起,腾讯内部开始着手研发一款自己的分布式游戏数据库系统——TcaplusDB。这是个很美好的愿景。但从零开始自己研发一款数据库又谈何容易?2009 年开始,大量新的NoSQL数据库涌现,在整个行业掀起了一场NoSQL 革命,如今赫赫有名的 Redis、MongoDB 皆诞生于那一年。研发TcaplusDB是高楼万丈平地起的事情,我们一边调研外部产品,一边抓住游戏行业特定的场景和需求,做最小化的产品验证。经过不断的验证,第一个版本在2012年初终于出炉。

时机

2012年4月,TcaplusDB首次正式提供服务,支持腾讯自研的页游《夜店之王》。《夜店之王》是腾讯自主研发的一款以时尚夜店为题材,以夜店经营为核心,融入吸血鬼元素的模拟经营类社交游戏。

当时的游戏,大部分是“分区分服”的形式,每个区域内的玩家自己玩。但基于社交场景的WebSNS需要所有的好友在一起玩。《夜店之王》就是这样典型的场景,TcaplusDB的高性能和低成本赢得了项目组的青睐。由于采用了包括 TcaplusDB 数据库在内的新技术,《夜店之王》通过“全区全服”,让玩家在一个池子里“大乱斗”并通过实时派对邀请好友体验。《夜店之王》通过QQgame游戏大厅、空间、游戏人生、朋友等诸多渠道进入取得了相当不错的成绩。

发展过程中,挫折并不是没有,2013年9月腾讯移动游戏《天天酷跑》火爆公测,开启QQ、微信双平台登陆,随时与QQ、微信好友一起玩。上线后,在不到一天的时间内就迅速登上了苹果App Store畅销榜第一位。

当初公测的时候,内部霸气地给《天天酷跑》这款新游戏配了100台服务器,对于一款新游戏,这显然是一个很充裕的配置。然而谁都没想到《天天酷跑》会这么火爆,准备的100台服务器很快就要高容量了。最后,在多部门的协同下,扩容的50台服务器快上架。硬件上架、网络打通、操作系统安装妥当,TcaplusDB的系统软件也很快部署完成。

但接下来就要通过部分数据的搬迁来实现数据库承载能力的扩容。按照正常逻辑,哪怕是停服维护,通常的扩容都有一个提前准备的过程,这次来得实在太快了,眼看旧数据库在逼近存储极限,那边不断涌入的玩家还在不断地制造新数据,搬迁的速度必须足够快,才能避免数据库爆仓。当时在业内深耕多年的大牛苦笑着说:“按照当前的情况,24小时后数据库就会崩溃,游戏只能暂时停服。”

谁都不敢面对这样的结局。

24小时很短,也能做很多事情,一个字,干!

于是,我们和当时酷跑的业务团队一起挺身而出,背水一战,连夜调试搬迁工具,在凌晨紧急上线,硬是抗住了一波又一波海量的用户访问冲击。有了这次的经历,我们下定决心,我们要做得更好。之后的几个月,我们都在重复一件事——一行一行地码代码,看得最多的是星夜、喝得最多的是咖啡,终于把这套数据库的自动扩容系统打磨得稳定高效。

成长

2014年2月,TcaplusDB已经深度优化了存储引擎,推出全托管的分布式存储服务。

但还不够,远远不够。

还记得上面说的《夜店之王》吗?经过2年多的发展,此时的《夜店之王》已经是排名第一的经营类社交游戏。而《夜店之王》使用的却还是TcaplusDB的老版本。TcaplusDB的全托管版本,性能得到了较大的提升,在服务上给项目组带来了较大的便利性。因此,将《夜店之王》TcaplusDB切换到全托管版本被提升日程。

由于《夜店之王》是线上业务,且此次切换TcaplusDB不能停服,还得解决新老协议不同、落地数据格式不同、数据分布不同等问题。对于任何一个团队,都是一个很大的挑战。

最终,在跟《夜店之王》团队的联合攻坚之下,我们通过数据双写、增加协议转换层、数据一致性校验工具等工作。最终完美实施了服务的迁移,在这个时期积累的数据迁移方案,也为后续TcaplusDB在无损水平扩展、无损数据迁移能力的产品化打下了坚实的基础。

2015年年底《王者荣耀》正式公测。这款游戏的火爆程度又一次突破了大家的想象力,这个游戏就像一个永远不能满足的巨兽,势不可挡地吞噬着各种后台资源。在打破各种游戏记录的同时,这个逆天的游戏每一秒钟都在创造数据库的新纪录。最疯狂的游戏浪潮,一般出现在周末。回想那个时候,一到周末,我们就在家盯着电脑,看着各种数字疯狂飙升。前期的技术积累终于派上了用场,严阵以待的技术人也终究见证了历史。几千台服务器在预先设定好的统一调度机制下不停服自动扩容,完美扛过流量高峰。同年,TcaplusDB又相继推出故障自动恢复、不停服升级、不停服扩缩容功能,成功支持了《天天爱消除》、《全民飞机大战》、《全民突击》、《CF手游》和《火影忍者手游》等游戏。2016年,TcaplusDB陆续推出细粒度备份回档、软硬件升级、机房裁撤搬迁、软硬件故障对业务无损等核心能力。同时优化单业务海量数据访问能力,提供稳健高性能的数据存储服务。

2017年元宵晚会,在春晚小品《回家》中,主持人提到了《王者荣耀》,这让团队即紧张又兴奋。接着,又是一路不断飙升的QPS陪伴着我们度过一个不眠之夜,好在最后又是有惊无险。

同年,TcaplusDB支持protobuf数据格式定义及访问,协议更加开放,兼容行业使用习惯。

2018年,TcaplusDB将高可用、无损扩缩容做到极致,深度优化性能降低成本,提升Api多语言、多平台、多模式、易使用的能力,陆续为《QQ飞车》、《无限法则》等游戏提供高品质数据存储服务。

开放

2019年凭借多年的积累和在游戏分布式系统情景中适配能力,TcaplusDB做为腾讯完全自研的NoSQL数据库,正式成为腾讯云Tcaplus,通过腾讯云对外提供服务。结合了腾讯云的优势后,腾讯云Tcaplus又在多租户、安全性、开放API和多语言SDK等方面有了极大的提升。

2020年NEXON、上海盛趣等游戏厂商开始选择腾讯云TcaplusDB做为游戏的核心数据库支撑业务。根据客户的测试与使用反馈,TcaplusDB的毫秒级时延、千万级QPS、无限水平扩展无需分库分表、细粒度回档、合服和无损弹性变配等能力能够实实在在的帮助到游戏业务。

腾讯云TcaplusDB的核心能力得到了客户的认可的同时,不得不提一提我们强大的迁移服务。当时上海盛趣使用的是DynamoDB,上海盛趣的技术团队需要解决开发者不熟悉腾讯云TcaplusDB的用法和已有代码迁移的问题。通过沟通,腾讯云TcaplusDB的接口的易用性得到了客户的充分认可,重点转移到了已有代码如何迁移到腾讯云TcaplusDB 接口上。经过双方技术团队的沟通,上海盛趣的架构中有一个数据访问适配层,所有的数据库访问均通过该适配层,问题一下变得清晰和简单了起来。腾讯云派出技术专家驻场,仅仅用了两周时间就和上海盛趣的研发团队一起完成了代码迁移的工作。 至此,TcaplusDB开始全面为公有云客户提供服务。

2020年12月14日,中国信息通信研究院官方权威公布第十一批大数据产品能力评测结果,腾讯云TcaplusDB成为首批通过键值型内存数据库功能评测的分布式NoSQL数据库产品。

2021年1月,TcaplusDB社区上线,这标志着TcaplusDB将通过和广大的用户及行业合作伙伴进行交流和共建,持续推动国产分布式NoSQL数据库生态的繁荣。

下一个十年:为行业提供更多助力

自诞生以来,腾讯云TcaplusDB就以服务更多开发者为目标,面向拥有使用高性能数据库的研发人员,分享经过腾讯内部检验的存储研发经验、工具和行业资源。而在未来,腾讯云TcaplusDB还将以国产数据库领航者的身份,在这条道路上走得更远,根据行业动态为平台引入更多元化的功能。同时,腾讯云TcaplusDB将和行业合作伙伴一起,继续分享腾讯分布式数据库方面的经验,并将积极投入基于多模和多负载能力的一站式低成本数据处理能力的研发;满足基于全球分布式能力,助力企业解决业务出海、全球同服/多活、跨域数据迁移等关键业务领域需求。

在下一个十年,诞生于游戏的TcaplusDB,还将继续为更多行业优化数据服务能力,贡献自己的力量。

TcaplusDB 10周年 风雨兼程破浪行 自研存储见成长的更多相关文章

  1. TFS 10周年生日快乐 – TFS与布莱恩大叔的故事

    今天看了一下Brian Harry大叔的博客,才发现2016年3月17日,是Team Foundation Server的10岁生日. Today marks the 10th anniversary ...

  2. Windows 10 周年更新正式版下载 + win10 快捷键

    Windows 10 周年更新正式版  360云资源总汇(施工中): https://yunpan.cn/c6Svi7Az52XBs (提取码:e5dd)今后提到周年更新版.1607版或RS1版,都是 ...

  3. python基础练习题(题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少)

    day13 --------------------------------------------------------------- 实例021:猴子偷桃 题目 猴子吃桃问题:猴子第一天摘下若干 ...

  4. SQL Server安全(10/11):行级别安全(Row-Level Security)

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...

  5. 10款Windows命令行工具

    Windows下CMD不好用,远没有Linux,或者一些SSH工具用起来方便.其实Windows下,也有一些不错的工具替代CMD: 0.powercmd经过比较,我最终选择了这款,这里补充一下截图:

  6. [开源] .Net ORM FreeSql 1.10.0 稳步向行

    写在开头 FreeSql 是 .NET 开源生态下的 ORM 轮子,转眼快两年了,说真的开源不容易(只有经历过才明白).今天带点干货和湿货给大家,先说下湿货. 认识我的人,知道 CSRedisCore ...

  7. Ubuntu12.10 设置默认命令行启动

    在虚拟机当中安装ubuntu12.10的时候默认把图形界面给装上了,由于不需要使用桌面,所以为了省去每次进入到图形界面然后再用ctrl+F1的方式切换到命令行的步骤,希望能够默认进入的是命令行模式,那 ...

  8. Git 10 周年之际,创始人 Linus Torvalds 访谈

    点这里 十年前的这一周,linux 内核社区面临一个根本性的挑战:他们不再能够使用他们的修复控制系统:BitKeeper,同时其他的软件配置管理遇到了对分布式系统的新需求.Linus Torvalds ...

  9. ARM学习笔记10——GNU ARM命令行工具

    一.编译器arm-linux-gcc 1.用arm-linux-gcc编译一个程序,一般它是要经过如下步骤的: 1.1.预处理阶段 编译器把上述代码中stdio.h编译进来,使用GCC的选项-E可以使 ...

随机推荐

  1. EF Core CodeFirst数据库自动迁移

    开发过程中都会遇到数据库数据结构更新的问题,怎么对数据库更新进行版本控制呢? 不同的项目对数据库版本更新控制的方式不同,常用的有第三方Evolve,开发人员将数据库更新脚本按照版本号的放在一起,然后执 ...

  2. linux系统修改不成功无法修改密码

    一.问题描述 新上架的浪潮服务器使用装机平台进行统一安装,安装完成后修改用户密码时统一无法修改,使用root账户无法修改其他用户密码,自身根密码也无法修改成功,报错如下 Changing passwo ...

  3. uni-app阻止事件向父级冒泡

    在官网找到的就只有这个方法,但是我放在app项目里并不支持,所以就想到vue的阻止事件冒泡的方法,现在分享,免得大家踩坑     <view class="parent" @ ...

  4. Mac上最好用的软件集合,没有之一

    前言 题主从 windows 系统换成 macOS 系统已经4年多了.对于没有用过 Mac 电脑的人来说,可能无法理解 Mac 好用在哪里.不过对于一个用过 Mac 的开发者来说,从 windows ...

  5. Docker学习笔记之基本命令使用

    测试的环境为Ubuntu1804. 1. search命令搜索镜像 sudo docker search centos 搜索centos相关的镜像,可以看到第一个最多星的的centos是官方的镜像,而 ...

  6. mysql的导入

    方法1 load data [local] infile 'filename' into table tablename[option] ields terminated by 'string'(字段 ...

  7. Os-hackNos-特权文件提权

    一 信息收集 netdiscover -i eth0 -r 10.10.10.0/24 扫描ip nmap -sP 192.168.43.0/24 扫描开放的端口 使用"-sP"选 ...

  8. 使用call、apply、bind继承及三者区别

    js里的继承方法有很多,比如:使用原型链的组合继承.es6的Class.寄生继承以及使用call.apply.bind继承.再说继承之前,我们先简单了解下它们的区别. 一.区别: 同:三者都是改变函数 ...

  9. 词嵌入之GloVe

    什么是GloVe GloVe(Global Vectors for Word Representation)是一个基于全局词频统计(count-based & overall statisti ...

  10. UI测试框架

    1. 从上到下共分成4层: 用例层  组件管理层  元素管理层  公共数据层 2. 用例层: 将每条用例使用参数化, 公共参数存储到"公共数据层", 中间参数通过组件层传递 3. ...