作者介绍
赖铮(Allen Lai),前MySQL官方团队成员,专注数据库内核开发近二十年,先后就职于达梦、Teradata、北大方正以及MySQL InnoDB存储引擎团队。是达梦数据库内核,方正XML数据库,以及MySQL InnoDB的GIS支持,透明加密功能的主要开发者。现任腾讯TEG云架构平台部数据库团队专家工程师,负责腾讯云CDB数据库内核的研发。
2012年的春天,阳光明媚,鸟语花香。我正在张江一栋橙黄色的大楼里跟我的小伙伴们一起奋力敲打着键盘,随着一阵轻柔的电话铃声响起,手机屏幕上显示出一个陌生的号码。
是不是又是骚扰电话?没管它,我接着敲自己的键盘。但手机一直震动着,好像在催促着我,我拿起它。
电话接通了,那头传来一个非常轻柔而且职业化的女声,“你好,我是Oracle的招聘顾问Amy,请问您现在方便吗?…”。
从此,我的职业生涯与MySQL发生了交集。
Amy告诉我MySQL InnoDB团队有意在中国招聘合适的数据库内核工程师,问我有没有兴趣加入。
我去,MySQL,the world’s most popular open source database,邀请我加入?
我想都没想就回答她,当然有,而且兴趣很大。
Amy是个非常专业的HR,她很有效率地安排了我后面的面试事宜。怀着一丝忐忑和兴奋,我开始了进入MySQL团队的面试。
面试第一轮:InnoDB团队manager Calvin,是数据库领域的专家,早年中科大毕业出国的那批牛人之一(后续的文章我会专门介绍MySQL的牛人们);
面试第二轮:InnoDB性能优化专家Innam,是缓冲池性能优化的作者;
面试第三轮:InnoDB大神Marko,他是InnoDB创始团队成员之一,存储引擎技术的大神级专家;
面试第四轮:InnoDB架构师Jimmy,也是数据库内核的全能型专家,而且是之前是sybase内核团队的老大。
MySQL的面试并没有想象中那么高难度和有那么多的规则,前后4轮,基本都是聊天,主要围绕以前做过的事情和对数据库内核的理解。
印象比较深的有三件事,
一个是Innam的口音实在太重,加上从遥远的加拿大打过来,我英语听力的水平也的确不高。所以,好多问题都没听懂,当时是慌得一批;
另外一个是Marko用google talk问了一个如何发现事务死锁的问题,而且打字速度超级快,以至于我认为对面是个打字机器。直到见到他真人才发现,他真的就是一台没有感情的程序机器(其实,Marko还是很有意思的一个人,后面的连载会介绍他的一些趣事);
Jimmy的面试是在一个南京西路的咖啡厅里面进行的,两个人似曾相识一般聊了蛮久。Jimmy是特别赞的一个人,很有亲和力,所以整个面试的流程总体感觉比较轻松,我也没有刻意准备,或许真的是幸运。
就传统的软件企业来说,MySQL的团队架构相对比较扁平化,层级很少。像我这样的基础员工,离Oracle的老板Larry Ellison也就隔了五层。
其中的原因主要是Oracle收购MySQL之后的很长一段时间里,基本保留了MySQL团队的原本架构和人员,只做了一些简单的接入。
整个MySQL分成了好几个大的团队,有MySQL kernel、MySQL replication、MySQL NDB等等。这些大团队里,又细分了若干小的团队,比如:MySQL kernel团队里面又分优化器、server层、InnoDB、QA等。
当时,我所在的InnoDB团队当时有base在美国的Calvin、Kevin、Jimmy,芬兰的Marko,澳大利亚的Sunny,加拿大的Innam、Michael,瑞典的Mattias,印度的Satya,保加利亚的Vasil,再加上中国的我,总共才十一个人却来自八个不同的国家,是一个完全全球化的研发团队。
团队里的每一个人都是经验丰富的数据库内核程序员,比如:Marko是2003年就加入InnoDB的资历最深的大神,Sunny是日后的InnoDB manager,Kevin也是曾经参与过Falcon存储引擎开发的老将,Jimmy曾经领导过Sybase的研发团队等等。
可以跟那么多大佬一起工作,实在是一件幸运的事情。
2013 Team meeting in Shanghai
*右起:Jimmy,Yasufumi, Allen, Kevin, Marko, Shaohua, Mattias, Satya, Sunny, Vasil,Aditya, ??, Annamalai, Bin, Michael, ??, Krunal…
在InnoDB工作,是一件非常开心的事情,因为可以在家上班。这对于一个每天需要接送孩子的家长来说,是非常难得的福利。
另外也为我节省了大量的通勤时间。要知道,去一次Oracle在上海的办公室,来回要两个多小时的时间。
由于这是一个全球化的团队,而且成员也比较有经验,所以大家的工作方式也很特别。基本上每个人都专注于自己的工作,大家相对比较独立。需要合作的时候,会通过pigeon、邮件或电话沟通。
我们每周会开一次周会,大家各自汇报自己的工作进展情况,并进行讨论。每年组织一次team meeting,大家从全球各地汇聚到一起,总结上年的工作,规划明年的目标,再谈谈理想、聊聊人生。
在MySQL,研发的流程非常规范。以一个bug修复为例,大致要经历以下几个步骤:
首先,需要根据bug report来分析并复现bug,然后找到修复方法,经过和5级大佬的讨论后,确定修复方案并通过bzr创建新的代码分支;
编码完成后,还需要创建对应的MTR test case,并和修复代码一起,放到reviewboard上面请大佬review。而Review的过程可能会持续好几轮,因为像Marko这样的大神review的时候非常严谨,不会放过任何一个出问题的细节;
Review完成后,需要把要提交的代码放到测试集群上面去测试。这个自动化测试系统非常强劲,它会同时在多平台上面编译好debug和release版本,再并行测试;
测试完成,确认没有问题后代码才能最终被合并到主干。
我的第一个提交
以上只是一个简单的bug修复过程,而对于更为复杂的特性开发,步骤还会包括前期的创建任务worklog,并在worklog里面相应的填写HLD(High Level Design),LLD(Low Level Design)等设计内容,并且开发原型等。
我做的check空间索引的特性worklog
在InnoDB工作的六年时间里,我一共做了461次提交,其中做过的主要特性包括InnoDB支持空间索引、透明加密、新的数据字典等等,以下是其中一些worklog的列表:
WL#6968 InnoDB GIS: R-tree index support
WL#6455 InnoDB: GEOMETRY datatypes support
WL#6745 InnoDB GIS: support DML operation for InnoDB R-tree Index
WL#7740 InnoDB GIS: Enhance Check Table for InnoDB Spatial index
WL#8548 InnoDB: Transparent data encryption
WL#9290 InnoDB: Support Transparent Data Encryption for Redo Log
WL#9289 InnoDB: Support Transparent Data Encryption for Undo Tablespaces
WL#9531 InnoDB_New_DD: Enable table encryption and transparent compression
WL#9535. InnoDB_New_DD: Remove InnoDB system table and modify the view of their I_S counterparts
WL#9537 InnoDB_New_DD: Support InnoDB table import/export for new DD
在这六年里,自己感觉收获了很多很多,也体验到了像MySQL这样一个开源的数据库软件产品进行研发的整个过程,还了解了一个成熟的研发体系和国际化团队是如何运作的。
和国外的大神们一起工作,不仅仅学习到了知识和技能,也从他们身上发现了另外一种与我们完全不一样的工作思维、生活习惯、乃至思维方式。
随着互联网公司的爆发式崛起,以及MySQL生态链的迅速发展,MySQL团队的很多成员都获得了更好的发展机会而逐渐离开。而我也开始了和腾讯云数据库CDB内核TXSQL的不解之缘。
巧的是,就在我离开MySQL不到一年,Oracle就宣布关闭中国研发中心。
对于Oracle来说,面对着诸如亚马逊、阿里、腾讯的强势冲击以及去O的浪潮,它将经历一段艰难的转型期。而对于MySQL来说,在可预见的未来依旧会是the world’s most popular open source database。
身为曾经的MySQL人,我也会在腾讯继续助力MySQL的发展,通过CDB内核TXSQL为MySQL生态链贡献自己的力量。
在后续的系列文章里,我将会陆续跟大家分享一些跟MySQL相关的有意思的事情,让大家更了解MySQL和它的腾讯版本TXSQL,希望大家喜欢。
如果字段的最大可能长度超过255字节,那么长度值可能…
只能说作者太用心了,优秀
感谢详解
一般干个7-8年(即30岁左右),能做到年入40w-50w;有…
230721