2017年10月10日,世界权威数据库管理系统之一的MariaDB的 10.3.2 Alpha版本发布,在版本更新介绍里,出现了这么两行字:
其实,早在去年发布的MariaDB 10.2.3版本中,腾讯互娱运营部DBA团队提交的两个新特性第一次被被集成到新版本中,被点名感谢了!
时隔半年,MariaDB在更新版本的时候再一次特别感谢了腾讯。据了解,新的版本里增加了腾讯互娱运营部DBA团队输出的功能特性,这个新的版本里,新增了我们从2013年就开始在腾讯游戏场景中大规模使用的TenDB(aka TMySQL)两大核心特性:InnoDB快速加字段以及大字段压缩。
看到这里,身在这个生态圈外的你可能想问:
MariaDB是什么?DBA团队做什么?
对于圈外人来说,DBA和MariaDB是个抽象的存在。但是对圈内的人来说,置身在MySQL的生态圈是所有DBA的人生幸事。说到MariaDB就不得不提MySQL,它原本是一个开放源代码的关系数据库管理系统,在过去由于性能高、成本低、可靠性好,成为最流行的开源数据库,后来被甲骨文公司收购了。然而,MySQL原创始人麦克尔·维德纽斯(Monty)认为oracle的收购,有将MySQL闭源的潜在风险。因此Monty以MySQL为基础,成立分支计划MariaDB。由于MariaDB具有众多领先MySQL的新特性,原先很多使用MySQL的开源软件现在逐渐转向MariaDB,短短几年过去,MariaDB已成为全球排名前20的数据库,并且使用人数和影响力都在稳步提升。
从43200秒到0.04秒 1080000倍的质变
腾讯互娱运营部的DBA(Database administrator)团队,一直都是MySQL等开源软件的使用者,致力于为游戏提供稳定、高效的在线数据存取服务,根据腾讯游戏的业务需求,不断改进数据库和提升性能,提供高性能、可扩展、稳定可靠的数据库解决方案。团队发现,每次游戏停机维护,花在数据库的变更上的时间最长,这对用户体验和收入都有影响。“每次半夜数据库更新,每台机器都要花费数小时,我们也必须盯着等着,生怕出错导致更新延迟,太不智能。我们团队就想寻求突破,改变以往只从外围做修改的方式,而是从内核上做出改动,实现质的突破。这是之前不曾有过的。”互动娱乐运营部存储与计算资源中心的Robincui说。
通过大半年的努力,DBA团队基于MySQL官方版本的定制了TMySQL(后来改名为TenDB),提供业界领先的在线加字段功能——使用MySQL作为存储的业务实例中,TMySQL占比97.78%。
“这个版本出了之后,我们在一些游戏上进行了测试,效果明显。先前,某游戏在数据更新的时候对日志DB中一个约74G的分区表执行加字段操作,当时这个机器的配置比较低,结果耗时约12个小时,还导致正常入库操作延迟数小时。而将该DB升级成我们的版本后,执行类似的加字段操作,仅需0.04秒就完成了!”互动娱乐运营部存储与计算资源中心的Vinchen举了个例子。
从43200秒(12小时)到0.04秒,该游戏在数据库更新加字段的操作上,效率提高了1080000倍!这只是一个举例,但是据DBA团队介绍,数据量越大,该特性带来的效果越明显。
获MySQL和MariaDB创始人Monty的认可
一直以来,腾讯游戏的DBA团队都是MySQL等开源软件的使用者,也通过对MySQL的管理和维护工作,逐步积累了丰富的MySQL运维经验技术和源码能力,TMySQL和TSpider版本也是基于MySQL的系统定制的。“我们从MySQL受益这么多,也很想为开源社区做一点贡献。我们梦想着有一天,我们能与MySQL的开源社区共同成长。”互动娱乐运营部存储与计算资源中心的Felixliang说起了DBA团队的开源梦。“我们知道,这做起来很难,但却价值最大:从开源社区中来,再把我们的经验和成果回馈到社区去,让广大MySQL使用者和爱好者可以更加放心地使用我们的功能特性。”
2015年8月,团队将Replication的两个功能提交给MySQL的复制团队及MySQL邮件组,得到了MySQL官方团队的积极认可。但可惜的是,鉴于Oracle公司或流程或制度上过于严谨的考虑,这些功能迄今还未能落地。
转机出现在2016年7月,在开源社区爱好者联盟的帮助下,团队见到了MySQL和MariaDB的创始人Monty先生。
这是一位有传奇色彩的程序员,他是MySQL第一行代码的作者,已经54岁了,白发苍苍,依旧亲自参与写代码,先后创立了MySQL,MaxDB和MariaDB(这三个项目分别是老爷子用自己的三个孩子名字命名的)。
在见到Monty之后,团队抓住机会将腾讯游戏的业务场景及定制化的两个产品TenDB和TenDB Cluster的设计和功能特性做了详细地阐述。“那天下午,一位业界泰斗,认真聆听我们给他讲feature,表述不清的时候,大家在白板上边写边画。能身处其中,我真的觉得特别幸运。”Vinchen回忆。
(图说:DBA团队在向Mysql之父介绍我们的feature并进行交流)
最后团队表达回馈开源社区的愿望,希望把TenDB和TenDB Cluster的部分功能特性提交给MariaDB,集成到MariaDB的主干代码。而这个想法也得到了Monty的大力支持,而且这些feature正是MairaDB所需要的。尤其是快速加字段特性,是整个MySQL生态都急迫需要的特性。“他对我们产品的功能表示了认可,他说我们的Idea是他们之前没想过的。能得到创始人的认可,让我们看到了圆梦的曙光,备受鼓舞!”Robincui说。
(当天团队和Monty的合照)
圆梦MariaDB 新特性回馈开源社区
作别Monty之后,团队开始按照MariaDB的代码规范,在github上提交了我们的pull request,经过各种PK和比较,团队提交的2个pull request都得到了认可。
(Vinchen与MariaDB的Marko、Monty等讨论快速加字段的设计及实现)
2016年10月,团队第一次参加了MariaDB的开发者大会,确定了TMySQL Replication优化的两个特性集成到MariaDB 10.2.3的测试版本。
这是腾讯游戏的DBA团队第一次出现在了MariaDB的感谢名单里!今年的10月10日,MariaDB10.3.2 Alpha版本发布,新增了TenDB的两个核心功能:快速加字段和大字段压缩。这两个功能分别解决了超级大业务加字段导致的停机时间太长的问题,及业务大字段压缩问题,提升DB服务器的IO吞吐和磁盘空间利用率;这两个功能可以应用到包括游戏在内的其他场景中!
这个版本发布之后,Innodb第一个全职员工、最资深的开发专家之一Marko还专门写了一篇博客给新增加快速加字段功能点赞:
“Perhaps one of the most important InnoDB changes coming in MariaDB Server 10.3 is Instant ADD COLUMN for InnoDB tables. ”
快速加字段功能是mariadb 10.3最重要的特性之一。
“A prototype was developed by Vin Chen from the Tencent Game DBA Team.”
这个设计是来自腾讯游戏DBA团队的Vinchen。
“不管是版本更新信息的致谢,还是Marko的认可,都是对我们团队最大的肯定。尤其是我们使用了多年的特性,能合并到主流的MySQL分支中,对社区做贡献,让更多使用者受益,这才是最值得高兴的事情。”Vinchen笑称。
“自己有产出并被大量使用才是对开源社区最大的贡献和回馈。”这一直是团队的梦想,这句话也一直激励了DBA团队一路向前。只要有利于开源和社区发展,团队都愿意尝试。最终,腾讯互娱运营部的DBA团队也做到了。
我们能为开源社区做点啥?DBA团队用行动已经给出了答案。
这样的DBA才有意思,不是么?
更多腾讯游戏DBA团队对外开源进展请进入《 社区初鸣,梦想始兴 – 腾讯游戏DBA携手MariaDB开源起航 》查看!