数据结构论坛

首页 » 分类 » 分类 » 博士五年,我在清华做时序数据库CSDN
TUhjnbcbe - 2024/7/30 16:50:00

作者

铁头乔责编

孙胜

先自我介绍一下,乔嘉林,网名铁头乔,年西安交大计算机系本科毕业之后,来到清华大学软件学院直博,师从王建民教授,大师兄黄向东,今年顺利毕业。回首往事,没有虚度年华,也不算碌碌无为,主要在做一款时序数据库:ApacheIoTDB。

五年时间,见证了IoTDB从发布第一个版本,到应用于数十家企业;从公开源代码,到成为Apache基金会顶级项目;从只有实验室同学参与,到形成百余贡献者的开源社区。博士阶段最开心的不是论文中稿,而是做的系统能够运行在祖国的大地上。

毕业的事情忙完之后,便开始准备这篇文章了,总结了一下博士阶段的经历和教训,历时两周终于完成,献给大家。

前言

为什么读博?

选择读博的都是勇士,我读博的理由有三点:

(1)科研初体验还不错:15年在中科院自动化所实习,过了两周读论文写代码的生活,这种生活简单纯粹,像是回到了高三。

(2)简单的执念:清华是我从小的梦想,觉得在清华多待两年,就能多跟老师学点知识。

(3)想了解自己:本科经常听说读博压力大,想看看自己在这个过程中会有什么想法,做出什么选择。

读什么方向?

做系统。15年在西安神州数码实习,7人一组,两周做一个银行贷款系统,也是第一次领略到做系统的魅力,当把系统从用户到后台每一步都调通的时候,就像打通了任督二脉,这种爽劲也支撑我演示前一晚写代码写到2点多。

作为组长,我的职责就是把流程跑通,然后大家一起完善业务逻辑。演示当天,还有半个小时展示,系统又出幺蛾子,于是继续调,终于在演示之前搞定,顺利通过。

这次经历让我对做系统产生了浓厚的兴趣,而且很期待有一个紧密的团队,大家一起写代码,就像一起扛过枪上战场。那个时候对系统的感觉就是构建一个虚拟国家,定义各种规则,让各个部门协同运转起来。

但是同时,我也意识到,这种系统第一次做很新鲜,如果总做类似技术栈的系统,也会感到无聊。做系统不是单纯的堆功能、拼广度,而要追求深度。因此,读研的方向选择了做系统,希望能够学一学大型系统里的知识和优化方法。

初见导师

读研时候有一次听刘璘老师说,读博就像是选择一种婚姻,一辈子就一次,也不会有心境再来一次。这也说明了选择导师的重要性。结合自身的经历,我觉得选导师的原则就是:你想成为像导师一样的人。

15年与导师第一次见面,这次见面给我留下的最深刻的印象就是:王老师的精神状态比很多20多岁的年轻人还要好。

为什么这么说呢,以我本科为例,大四经常和舍友玩游戏到一两点,早上没课就睡到十一点。上午无精打采,下午逐渐恢复正常,晚上贼精神。到了暑假寒假,作息就更混乱了,闲的难受。后来也意识到这种生活没什么意思,我需要一些长远的目标,来保持良好的精神状态。

保研面试

在保研面试时,我说自己的梦想就是做系统,当架构师。

于是,一个斗志昂扬的23岁年轻人,就这样通过了面试、走进了读博生活。

读博第一阶段

本科毕设

博士的生活要从年3月来清华做毕设开始算,那个时候大家正在开发一种叫做TsFile(TimeseriesFile)的文件格式,主要用来存储时间序列数据。

我的第一个任务就是实现Spark和TsFile的连接器。对于一个本科只写过一些数据结构与算法,Github、Maven都没怎么用过的人来说,从哪下手都不知道,只能在Github上找类似的项目,然后看他们的源码。

以前自认为写代码不发愁,很多时候写一遍代码,没有bug直接能跑。那时候才意识到仅会给输入输出,写个算法是不够的。很多时候不是哪个算法写不出来,而是不知道在哪写这个算法。而在大型项目中,经常需要尝试新技术,走通一条技术路线,显然我在这方面缺乏经验。

进度缓慢,于是开始堆时间,每天早上8点多到实验室,晚上10点多出实验室。也因此没怎么锻炼身体。碰巧这时候又遇到了我的中国好舍友,孙林。他买了各种各样的零食,但是他不怎么吃,都给我吃了,于是一直62.5Kg的我,这时候到73Kg。

于是我逐层分析原因,从本科没重视实践,只学了书本知识,到高考没考好,再到初中经常玩电脑。把当时的困难归咎于过去的经历。甚至在想,如果当初没来清华,可能就不会遇到这些困难。

后来想通了,悟已往之不谏,知来者之可追。过去的事情已经无法改变,无论我做何选择,总会在前进的道路上遇到困难,而这时候只能硬着头上。

当你真心想做一件事时,全世界都会来帮你。当时有三个复旦的同学也来我们实验室,嘉烨、仔仔和齐童,其中嘉烨做的工作和我相关,于是我有了可以请教的人,在他的帮助下,我又开始有了进展。

此外,有时候遇到问题,我开始在其他开源项目里提问,有个国外小哥经常及时帮我解答,有时候甚至直接给我丢过来一段代码,这也是第一次接触开源。

于是,项目逐渐步入正轨。还好大四下学期提前来适应了一下实验室生活,不然博一又要上课,又要做项目,估计忙不过来。所以,如果有机会提前进入下一阶段,就要主动。

团队成型

年秋天,IoTDB初始团队成立。

(1)东哥:在我逐步适应项目节奏时,那个男人回来了,他就是从遥远的澳大利亚留学归国的东哥。作为我们组带头大哥,统筹全局。

在科研方面,带我一篇篇读论文,每篇论文读完之后讨论半个多小时,也让我这个科研小白逐渐学会了怎么读论文。

项目方面,他需要做IoTDB的规划和项目实施,经常熬夜。所以我就尽量帮他分担一些工作。

(2)宗姐姐:实验室的行政老师,和我们打成一片,在生活上对我们非常关照,思想上排忧解难。

铁头乔也是宗姐姐叫出来的,我觉得非常适合自己,哈哈哈。

(3)大哥:实验室的山东大汉,比我高一级,他平时开发经常涉及到位运算,但是从他嘴里说出来的位都成了“味儿”,大家可以感受一下,“这一味儿与上那一味儿”。大哥是海底捞黑海会员,于是有时候也不可避免地成为了大鸽。

我经常会找大哥要接口,我们的经典对话就是,“大哥,这个接口能不能支持?”,大哥回:“你问我支持不支持,那肯定要支持啊!”

(4)康博:比我高一级的博士师兄,主要做写入和存储引擎,康博是典型的很负责任的清华学子。

在我们研一准备考试时候,又有新任务,康博说了一句让我至今印象深刻的话:“交给我们,让他们去复习考试吧”。

(5)馨逸:我们级唯一的女生。也是我们实验室唯一的产品经理,在馨逸的努力下,我们有了第一版高质量用户手册和ApacheIoTDB沿用至今的logo图标。

(6)小飞飞:实验室的另一位山东小汉,是大哥的接班人,也是我们每天的快乐源泉。

有一次写代码写的比较晚,一直在优化一个数据结构DynamicOneColumn(DOC),我和小飞飞骑车回宿舍的时候,小飞飞就快乐地唱了起来:“DOC~DOC~我是一个DOC~”。

(7)老年人:康博的接班人,他的爱好和老年人一毛一样。性格也比较稳,被东哥认定为磐石。

当时做毕设时候,我们去吃快餐炸鸡,老年人说:“来个冰激凌,吃点甜的,每天过的太苦了。”老年人的口头禅:“这个鬼东西”。

(8)徐总:清本毕业,自成一派,负责SQL解析和RPC,平时负责审PR,被东哥认定为利刃,把好最后一道关。

徐总非常自律,从来不吃外卖,实验室集体加班时候也不吃外卖,只吃食堂,风雨无阻。

横空出世

我们每个月会进行IoTDB的版本发布。第一个版本发布是年4月1日愚人节,我们发布了0.1.0版本,也标志着一个产品的诞生。

这时候的IoTDB,在我看来就像是一个刚出世的孩子,无法预料它会发展成什么样子,又会对我的人生轨迹产生怎样的影响。

青海西宁的日子

年10月左右重返学校后,我和学弟江天(我的天)被派往青海西宁,和昆仑数据的团队一起参与青海新能源大数据平台建设,应该是国内第一个风电物联网平台。

我们的目标有两个,一个是用国外产品接住线上数据,第二就是验证IoTDB。不得不说,这一次近距离体会到了和国外技术的差距。也从这次实践中,我们开始重视乱序数据的处理,并且完善自己的产品。

出差过程中也结识了一帮好朋友,我的天话不多,代码写得贼6,平时比较宅,晚上下班却乖乖被我拉出去,在冬天的西宁吹着冷风溜达。

还有昆仑数据的一帮兄弟,统筹帷幄的蒋总,数据平台总负责人鹏哥,负责数据接入的景帅,负责查询的一鸣,驻场的陈明、远程支援的振兴哥,还有上飞机前一分钟还坐地上抱着电脑运维的远哥。

那时候每天中午大家会去一个小饭馆吃碗面,晚上就找大饭店吃一顿好的,涮羊肉、涮牛肉、烤鱼,附近的饭店基本都被我们吃遍了。周末不忙的时候大家还会一起爬个山,在西宁的日子还是很不错的。

读博之路如此艰辛我始料未及

这是年龟给我分享的一句话,我觉得非常贴切那时候的我。我高中最差的科目就是语文,大学好不容易不用学语文了,可把我高兴坏了。读了博发现要发英文论文才能毕业,我就意识到了,这将是我人生中最艰难的一段时期。

尽管项目开始有了起色,但是论文的压力又逐渐增大。此时,机器学习方向逐渐火热。相比之下,数据库系统方向不是那么好发论文。这时候有两个选择摆在我面前,是去做机器学习,还是继续数据库系统方向。

当这个问题从脑子里冒出来的时候,其实就已经有了答案:还是做系统。

读博并不是为了毕业的那个时刻,而是为了过程中的每一天,每一件事。当下定决心在一条路走到黑的时候,就没有那么多时间纠结和彷徨了,也就进入了博士第二阶段。

读博第二阶段

积极的生活状态

年过了几个月非常规律的生活。

7点30:起床

7点50:去食堂点一碗小米粥和两个鸡蛋,后来打饭阿姨看到我直接给我固定套餐。

8点30-12点:干活

12点-12点30:去离实验室最近的食堂吃饭

12点30-13点30:午休

13点30-17点:干活

17点-18点30:去操场锻炼,吃饭

18点30-22点:干活

回顾整个博士阶段,这应该是我最喜欢的生活节奏。如果说找到健康的生活节奏是安装了一台高级发动机,那接下来的事情就是找到前进的方向。

走向开源

年夏天,王老师做了一个开创性的决定,要把IoTDB捐给Apache基金会,从内部项目转为开源项目。原因有几项:

(1)当时的开源大数据软件大多是国外贡献的,国内大多是在使用,我们应该为中国的开源软件做出自己的贡献。

(2)学校里很多项目随着一波学生毕业也就停掉了。而系统软件是需要五年、十年的投入,并且需要众多优秀的贡献者参与,形成良好的社区才能长久发展。

就这样,我们提交了申请书,经过投票进入了Apache,成为Apach唯一的物联网时序数据库项目。

所有进入Apache的项目都要先进入孵化器,完成相应的任务(建设社区)后,才能毕业成为顶级项目。而无法毕业的就会退休,退出Apache基金会。

在进入Apache后的一段时间,我们把项目代码从清华的仓库迁移到了Apache的仓库。并且按照Apache的要求做了很多事务性工作。同时,在项目导师的指导下,我们尽量把讨论放到了邮件列表中(这是一件很痛苦的事情)。

尽管我们是Apache开源项目,但是并不知道怎么建设开源社区。好像进入Apache开源对我们来说,只是增加了一些繁琐的工作。Githubstar也并不多,更不知道怎么吸引社区开发者和用户。在幻想一进入Apache之后就能拥有活跃的社区开发者和用户的我们,被泼了一盆冷水。

第一道坎:上海地铁

年5月30号要上线上海地铁,需要写入延迟低于ms。线上系统是用的KairosDB,我们首先需要适配KairosDB接口,于是从2月开始,学弟刘睿带一个实习生做了IoTDB兼容KairosDB的Rest接口:IKR(起名就是这么直接),到5月基本完成。

经过初步测试,我们的写入延迟有时候会达到几十秒,平均延迟也不满足要求。说实话,这个时候我对存储引擎并不熟悉,看了看代码只觉得很复杂。但是我也知道,这是IoTDB的一道坎,迈过去了就一马平川。

这时候,正值女朋友毕业旅行,我跟她说:“你去吧,等你回来之前我肯定把系统搞好!”

送走了女朋友,我拉上了我的天和天安两大主力学弟,在东哥初步趟了路之后,开始重写存储引擎。

已经毕业的大哥听说我们的计划之后,说你们不要太激进。确实,我没什么把握,但是还是想拼一把。

就这样,三个人结对编程,每天早上9点到晚上11点,花了一周时间,基本写好了一版,开始测试。测试能看到初步结果需要半个小时,这半个小时就像等出高考成绩一样忐忑。而第一次的测试结果也没有让我们失望,果然不稳定,稳定才见鬼了。但是不怕,我们还有一周,带周末的那种。

找问题,完善方案,继续修改,提交测试。这个过程持续到了第二周的周六。周六下午组会东哥需要汇报一周的工作,我们周六上午10点出了一波结果,发现还有问题,东哥说:“我心脏难受。。。”

经过了一周的磨合,我隐约感觉,这次改完估计就稳了。11点开始提交测试,测到下午1点30,看写入延迟监控,系统一切正常,平均延迟25ms,起飞!

后续芮蕾和苏月适配完查询引擎,成功上线上海地铁,替换了之前的9台KairosDB集群。

同级硕士毕业

我这个人经常后知后觉,在我忙完上海地铁项目,才发现同级的硕士朋友们已经离校了。对于博士生来说,这是一个标志性的时刻。曾经用在东哥身上的“干走了一届又一届硕士”,我也能够体会到是什么感觉了。

作为还在学校的我们,能做的唯有坚持,不让大家的努力白费,希望他们之后在和别人聊天,听到IoTDB在某个场景里被用起来的时候,能够开心地和别人说:“我也是IoTDB的贡献者”。

借用《幻影凶间》结尾的台词:Weareheretodothejob,andwedontrattle(我们是为了这个故事而来,我们要镇定自若)。

从哪里入手呢?好的开源项目都有活跃的社区,因此,我的想法就是建设开源社区。社区是一帮有共同目的的人,接下来就是怎么找到这些人。

盘点了一下手上的资源,我们可以在一些大会上进行宣传,也能够通过实验室的一些项目打磨产品,但是这还不够。我们需要更多的用户、贡献者和更丰富的测试场景。

实验室没有专门做社区运营的同学,也没有打广告的预算,只能自己想办法了。

社区建设

在经历了上海地铁的洗礼之后,我对IoTDB和自己的运维能力已经有了的信心,于是开始在

1
查看完整版本: 博士五年,我在清华做时序数据库CSDN