从找不到需求险些被叫停,到支撑亿级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. 深入理解Kafka必知必会(1)

    Kafka的用途有哪些?使用场景如何? 消息系统: Kafka 和传统的消息系统(也称作消息中间件)都具备系统解耦.冗余存储.流量削峰.缓冲.异步通信.扩展性.可恢复性等功能.与此同时,Kafka 还 ...

  2. 《Spring Boot 实战纪实》之前言

    目录 前言 (思维篇)人人都是产品经理 1.需求文档 1.1 需求管理 1.2 如何攥写需求文档 1.3 需求关键点文档 2 原型设计 2.1 缺失的逻辑 2.2 让想法跃然纸上 3 开发设计文档 3 ...

  3. ICPC Central Russia Regional Contest (CRRC 19)题解

    题目连接:https://codeforces.com/gym/102780 寒假第二次训练赛,(某菜依旧是4个小时后咕咕咕),战况还行,个人表现极差(高级演员) A:Green tea 暴力枚举即可 ...

  4. 敏捷史话(三):笃定前行的勇者——Ken Schwaber

    很多人之所以平凡,并不在于能力的缺失,而是因为缺乏迈出一步的勇气.只有少部分的人可以带着勇气和坚持,走向不凡.Ken Schwaber 就是这样的人,他带着他的勇气和坚持在敏捷的道路上不断前行,以实现 ...

  5. 【MySQL 高级】架构介绍

    MySQL高级 架构介绍 MySQL 简介 MySQL 安装 Docker 安装 参考链接 Linux 安装 参考链接 MySQL 配置文件 log-bin:二进制日志文件.用于主从复制.它记录了用户 ...

  6. Linux学习笔记 | 常见错误之VMware启动linux后一直黑屏

    方法1: 宿主机(windows)管理员模式运行cmd 输入netsh winsock reset 然后重启电脑 netsh winsock reset命令,作用是重置 Winsock 目录.如果一台 ...

  7. python学习笔记 | 顺序表的常规操作

    ''' @author: 人人都爱小雀斑 @time: 2020/3/11 8:46 @desc: 顺序表的相关操作 ''' class SequenceList: def __init__(self ...

  8. MySQL常用的数据类型和字段属性

    数据类型 数值 tinyint 十分小的数据 1个字节 smallint 较小的数据 2个字节 mediumint 中等大小的数据 3个字节 int 标准的整数 4个字节 常用 bigint 较大的数 ...

  9. 【RAC】运行root.sh的时候报错root.sh Oracle CRS stack is already configured and will be running under init(1M)

    环境:oracle10g 系统:CentOS6.4 开始的时候,在节点1上运行root.sh发现出现90s 的时候hang住了,结束掉,结局完事后,再次运行root.sh报错 WARNING: dir ...

  10. MCU的心脏-晶振

    晶振是石英晶体谐振器(quartzcrystal oscillator)的简称,它被称为电路系统的心脏,它为整个系统提供"心跳".中央处理器(CPU)一切指令的执行都是建立在这个& ...