本文字数:8888字git
阅读时间:23分钟github
序面试
先自我介绍一下,笔名铁头乔,2016年西安交大计算机系本科毕业以后,来到清华大学软件学院直博,师从王建民教授,大师兄黄向东,今年顺利毕业。回首往事,没有虚度年华,也不算碌碌无为,主要在作一款时序数据库:Apache IoTDB。算法
五年时间,见证了 IoTDB 从发布第一个版本,到应用于数十家企业;从公开源代码,到成为 Apache 基金会顶级项目;从只有实验室同窗参与,到造成百余贡献者的开源社区。博士阶段最开心的不是论文中稿,而是作的系统可以运行在祖国的大地上。数据库
毕业的事情忙完以后,便开始准备这篇文章了,总结了一下博士阶段的经历和教训,历时两周终于完成,献给你们。编程
前言微信
读博第一阶段数据结构
读博第二阶段架构
后记运维
前言
为何读博?
选择读博的都是勇士,我读博的理由有三点:
(1)科研初体验还不错:15年在中科院自动化所实习,过了两周读论文写代码的生活,这种生活简单纯粹,像是回到了高三。
(2)简单的执念:清华是我从小的梦想,以为在清华多待两年,就能多跟老师学点知识。
(3)想了解本身:本科常常据说读博压力大,想看看本身在这个过程当中会有什么想法,作出什么选择。
读什么方向?
作系统。15年在西安神州数码实习,7人一组,两周作一个银行贷款系统,也是第一次领略到作系统的魅力,当把系统从用户到后台每一步都调通的时候,就像打通了任督二脉,这种爽劲也支撑我演示前一晚写代码写到2点多。
做为组长,个人职责就是把流程跑通,而后你们一块儿完善业务逻辑。演示当天,还有半个小时展现,系统又出幺蛾子,因而继续调,终于在演示以前搞定,顺利经过。
此次经历让我对作系统产生了浓厚的兴趣,并且很期待有一个紧密的团队,你们一块儿写代码,就像一块儿扛过枪上战场。那个时候对系统的感受就是构建一个虚拟国家,定义各类规则,让各个部门协同运转起来。
可是同时,我也意识到,这种系统第一次作很新鲜,若是总作相似技术栈的系统,也会感到无聊。作系统不是单纯的堆功能、拼广度,而要追求深度。所以,读研的方向选择了作系统,但愿可以学一学大型系统里的知识和优化方法。
初见导师
读研时候有一次听刘璘老师说,读博就像是选择一种婚姻,一生就一次,也不会有心境再来一次。这也说明了选择导师的重要性。结合自身的经历,我以为选导师的原则就是:你想成为像导师同样的人。
15年与导师第一次见面,此次见面给我留下的最深入的印象就是:王老师的精神状态比不少20多岁的年轻人还要好。
为何这么说呢,以我本科为例,大四常常和舍友玩游戏到一两点,早上没课就睡到十一点。上午无精打彩,下午逐渐恢复正常,晚上贼精神。到了暑假寒假,做息就更混乱了,闲的难受。后来也意识到这种生活没什么意思,我须要一些长远的目标,来保持良好的精神状态。
保研面试
在保研面试时,我说本身的梦想就是作系统,当架构师。
因而,一个斗志昂扬的23岁年轻人,就这样经过了面试、走进了读博生活。
读博第一阶段
本科毕设
博士的生活要从2016年3月来清华作毕设开始算,那个时候你们正在开发一种叫作 TsFile(Time series File) 的文件格式,主要用来存储时间序列数据。
个人第一个任务就是实现 Spark 和 TsFile 的链接器。对于一个本科只写过一些数据结构与算法,github、maven 都没怎么用过的人来讲,从哪下手都不知道,只能在 github 上找相似的项目,而后看他们的源码。
之前自认为写代码不发愁,不少时候写一遍代码,没有bug直接能跑。那时候才意识到仅会给输入输出,写个算法是不够的。不少时候不是哪一个算法写不出来,而是不知道在哪写这个算法。而在大型项目中,常常须要尝试新技术,走通一条技术路线,显然我在这方面缺少经验。
进度缓慢,因而开始堆时间,天天早上8点多到实验室,晚上10点多出实验室。也所以没怎么锻炼身体。碰巧这时候又遇到了个人中国好舍友,孙林。他买了各类各样的零食,可是他不怎么吃,都给我吃了,因而一直 62.5Kg 的我,这时候到了 73Kg。
因而我逐层分析缘由,从本科没重视实践,只学了书本知识,到高考没考好,再到初中常常玩电脑。把当时的困难归咎于过去的经历。甚至在想,若是当初没来清华,可能就不会遇到这些困难。
后来想通了,悟已往之不谏,知来者之可追。过去的事情已经没法改变,不管我作何选择,总会在前进的道路上遇到困难,而这时候只能硬着头上。
当你真心想作一件事时,全世界都会来帮你。当时有三个复旦的同窗也来咱们实验室,嘉烨、仔仔和齐童,其中嘉烨作的工做和我相关,因而我有了能够请教的人,在他的帮助下,我又开始有了进展。
此外,有时候遇到问题,我开始在其余开源项目里提问,有个国外小哥常常及时帮我解答,有时候甚至直接给我丢过来一段代码,这也是第一次接触开源。
因而,项目逐渐步入正轨。还好大四下学期提早来适应了一下实验室生活,否则博一又要上课,又要作项目,估计忙不过来。因此,若是有机会提早进入下一阶段,就要主动。
团队成型
2016年秋天,IoTDB 初始团队成立。
(1)东哥:在我逐步适应项目节奏时,那个男人回来了,他就是从遥远的澳大利亚留学归国的东哥。做为咱们组的头,统筹全局。
在科研方面,带我一篇篇读论文,每篇论文读完以后讨论半个多小时,也让我这个科研小白逐渐学会了怎么读论文。
项目方面,他须要作 IoTDB 的规划和项目实施,常常熬夜。因此我就尽可能帮他分担一些工做。
(2)宗姐姐:实验室的行政老师,和咱们打成一片,在生活上对咱们很是关照,思想上排忧解难。
铁头乔也是宗姐姐叫出来的,我以为很是适合本身,哈哈哈。
(3)大哥:实验室的山东大汉,比我高一级,他平时开发常常涉及到位运算,可是从他嘴里说出来的位都成了“味儿”,你们能够感觉一下,“这一味儿与上那一味儿”。大哥是海底捞黑海会员,因而有时候也不可避免地成为了大鸽。
我常常会找大哥要接口,咱们的经典对话就是,“大哥,这个接口能不能支持?”,大哥回:“你问我支持不支持,那确定要支持啊!”
(4)康博:比我高一级的博士师兄,主要作写入和存储引擎,康博是典型的很负责任的清华学子。
在咱们研一准备考试时候,又有新任务,康博说了一句让我至今印象深入的话:“交给咱们,让他们去复习考试吧”。
(5)馨逸:咱们级惟一的女生。也是咱们实验室惟一的产品经理,在馨逸的努力下,咱们有了初版高质量用户手册和Apache IoTDB沿用至今的logo图标。
馨逸买了零食以后,她的桌子放不下,就放在做为同桌的个人桌子里了,就被我吃吃吃。
(6)小飞飞:实验室的另外一位山东小汉,是大哥的接班人,也是咱们天天的快乐源泉。
有一次写代码写的比较晚,一直在优化一个数据结构 DynamicOneColumn(DOC),我和小飞飞骑车回宿舍的时候,小飞飞就快乐地唱了起来:“DOC~ DOC~ 我是一个DOC~”。
(7)老年人:康博的接班人,他的爱好和老年人一毛同样。性格也比较稳,被东哥认定为磐石。
当时作毕设时候,咱们去吃快餐炸鸡,老年人说:“来个冰激凌,吃点甜的,天天过的太苦了。” 老年人的口头禅:“这个鬼东西”。
(8)徐总:清本毕业,自成一派,负责SQL解析和RPC,平时负责审PR,被东哥认定为利刃,把好最后一道关。
徐总很是自律,历来不吃外卖,实验室集体加班时候也不吃外卖,只吃食堂,风雨无阻。
横空出世
咱们每月会进行 IoTDB 的版本发布。第一个版本发布是 2017 年4月1日愚人节,咱们发布了 0.1.0 版本,也标志着一个产品的诞生。
这时候的 IoTDB,在我看来就像是一个刚出世的孩子,没法预料它会发展成什么样子,又会对个人人生轨迹产生怎样的影响。
公众号的前身
2017年夏天考完最后一科,正好去作了一个膝盖的手术,作完手术后只能在家作康复训练,而且注册了一个公众号 “乔村儿”,也就是这个公众号的前身,主要用来记录和分享生活,也收获了不少:
(1)与家人分享平常生活。可能男生都或多或少跟家人交流很少,经过写做的方式,让家人感觉到个人关心。虽然不能常回家陪伴,可是可让个人文字陪伴他们。很开心的是,有一次姐姐说,爷爷在给奶奶读手机上的东西,一看是我写的文章。
(2)与朋友紧密联系。许久不见的朋友,读到个人文章以后,也来分享本身的生活。也让本身时刻意识到,生活有千百种过法,我只是其中一种,就让咱们在各自的生活中加油吧!
(3)在更广阔的的天地寻找本身的位置(来源于阿德勒心理学)。生活不能所有被工做和科研占据,当工做的小圈子遇到问题,须要有更广阔的的圈子接纳本身。而公众号就是一个更广阔的共同体。
(4)锻炼文字表达能力。我历来不喜欢写做文,可是写这些还能够。写得多了,对于写做也就不发愁了,也算克服了一项缺点。
青海西宁的日子
2017年10月左右重返学校后,我和学弟江天(个人天)被派往青海西宁,和昆仑数据的团队一块儿参与青海新能源大数据平台建设,应该是国内第一个风电物联网平台。
咱们的目标有两个,一个是用国外产品接住线上数据,第二就是验证 IoTDB。不得不说,这一次近距离体会到了和国外技术的差距。也从此次实践中,咱们开始重视乱序数据的处理,而且完善本身的产品。
出差过程当中也结识了一帮好朋友,个人天话很少,代码写得贼6,平时比较宅,晚上下班却乖乖被我拉出去,在冬天的西宁吹着冷风溜达。
还有昆仑数据的一帮兄弟,统筹帷幄的蒋总,数据平台总负责人鹏哥,负责数据接入的景帅,负责查询的一鸣,驻场的陈明、远程支援的振兴哥,还有上飞机前一分钟还坐地上抱着电脑运维的远哥。
那时候天天中午你们会去一个小饭馆吃碗面,晚上就找大饭店吃一顿好的,涮羊肉、涮牛肉、烤鱼,附近的饭店基本都被咱们吃遍了。周末不忙的时候你们还会一块儿爬个山,在西宁的日子仍是很不错的。
读博之路如此艰辛我始料未及
这是2017年龟给我分享的一句话,我以为很是贴切那时候的我。我高中最差的科目就是语文,大学好不容易不用学语文了,可把我高兴坏了。读了博发现要发英文论文才能毕业,我就意识到了,这将是我人生中最艰难的一段时期。
尽管项目开始有了转机,可是论文的压力又逐渐增大。此时,机器学习方向逐渐火热。相比之下,数据库系统方向不是那么好发论文。这时候有两个选择摆在我面前,是去作机器学习,仍是继续数据库系统方向。
当这个问题从脑子里冒出来的时候,其实就已经有了答案:仍是作系统。
读博并非为了毕业的那个时刻,而是为了过程当中的每一天,每一件事。当下定决心在一条路走到黑的时候,就没有那么多时间纠结和彷徨了,也就进入了博士第二阶段。
读博第二阶段
积极的生活状态
2018年过了几个月很是规律的生活。
7点30:起床
7点50:去食堂点一碗小米粥和两个鸡蛋,后来打饭阿姨看到我直接给我固定套餐。
8点30-12点:干活
12点-12点30:去离实验室最近的食堂吃饭
12点30-13点30:午休
13点30-17点:干活
17点-18点30:去操场锻炼,吃饭
18点30-22点:干活
回顾整个博士阶段,这应该是我最喜欢的生活节奏。若是说找到健康的生活节奏是安装了一台高级发动机,那接下来的事情就是找到前进的方向。
走向开源
2018年夏天,王老师作了一个开创性的决定,要把 IoTDB 捐给 Apache 基金会,从内部项目转为开源项目。缘由有几项:
(1)当时的开源大数据软件大可能是国外贡献的,国内大可能是在使用,咱们应该为中国的开源软件作出本身的贡献。
(2)学校里不少项目随着一波学生毕业也就停掉了。而系统软件是须要五年、十年的投入,而且须要众多优秀的贡献者参与,造成良好的社区才能长久发展。
就这样,咱们提交了申请书,通过投票进入了 Apache ,成为 Apache 惟一的物联网时序数据库项目。
全部进入 Apache 的项目都要先进入孵化器,完成相应的任务(建设社区)后,才能毕业成为顶级项目。而没法毕业的就会退休,退出 Apache 基金会。
在进入 Apache 后的一段时间,咱们把项目代码从清华的仓库迁移到了 Apache 的仓库。而且按照 Apache 的要求作了不少事务性工做。同时,在项目导师的指导下,咱们尽可能把讨论放到了邮件列表中(这是一件很痛苦的事情)。
尽管咱们是 Apache 开源项目,可是并不知道怎么建设开源社区。好像进入 Apache 开源对咱们来讲,只是增长了一些繁琐的工做。github star 也并很少,更不知道怎么吸引社区开发者和用户。在幻想一进入 Apache 以后就能拥有活跃的社区开发者和用户的咱们,被泼了一盆冷水。
第一道坎:上海地铁
2019年5月30号要上线上海地铁,须要写入延迟低于200ms。线上系统是用的 KairosDB,咱们首先须要适配 KairosDB 接口,因而从2月开始,学弟刘睿带一个实习生作了 IoTDB 兼容 KairosDB 的 Rest 接口:IKR(起名就是这么直接),到5月基本完成。
通过初步测试,咱们的写入延迟有时候会达到几十秒,平均延迟也不知足要求。说实话,这个时候我对存储引擎并不熟悉,看了看代码只以为很复杂。可是我也知道,这是 IoTDB 的一道坎,迈过去了就一马平川。
这时候,正值女友毕业旅行,我跟她说:“你去吧,等你回来以前我确定把系统搞好!”
送走了女友,我拉上了个人天和天安两大主力学弟,在东哥初步趟了路以后,开始重写存储引擎。
已经毕业的大哥据说咱们的计划以后,说大家不要太激进。确实,我没什么把握,可是仍是想拼一把。借用 stormzhang 的一句话,就是干!
就这样,三我的结对编程,天天早上9点到晚上11点,花了一周时间,基本写好了一版,开始测试。测试能看到初步结果须要半个小时,这半个小时就像等出高考成绩同样忐忑。而第一次的测试结果也没有让咱们失望,果真不稳定,稳定才见鬼了。可是不怕,咱们还有一周,带周末的那种。
找问题,完善方案,继续修改,提交测试。这个过程持续到了第二周的周六。周六下午组会东哥须要汇报一周的工做,咱们周六上午10点出了一波结果,发现还有问题,东哥说:“我心脏难受。。。”
通过了一周的磨合,我隐约感受,此次改完估计就稳了。11点开始提交测试,测到下午1点30,看写入延迟监控,系统一切正常,平均延迟25ms,起飞!
后续芮蕾和苏月适配完查询引擎,成功上线上海地铁,替换了以前的 9 台 KairosDB 集群。
同级硕士毕业
我这我的常常后知后觉,在我忙完上海地铁项目,才发现同级的硕士朋友们已经离校了(尤为是拉开抽屉,发现没有零食了...)。对于博士生来讲,这是一个标志性的时刻。曾经用在东哥身上的 “干走了一届又一届硕士”,我也可以体会到是什么感受了。
做为还在学校的咱们,能作的惟有坚持,不让你们的努力白费,但愿他们以后在和别人聊天,听到 IoTDB 在某个场景里被用起来的时候,可以开心地和别人说:“我也是 IoTDB 的贡献者”。
借用《1408幻影凶间》结尾的台词:We are here to do the job, and we don't rattle(咱们是为了这个故事而来,咱们要不慌不忙)。
从哪里入手呢?好的开源项目都有活跃的社区,所以,个人想法就是建设开源社区。社区是一帮有共同目的的人,接下来就是怎么找到这些人。
盘点了一下手上的资源,咱们能够在一些大会上进行宣传,也可以经过实验室的一些项目打磨产品,可是这还不够。咱们须要更多的用户、贡献者和更丰富的测试场景。
实验室没有专门作社区运营的同窗,也没有打广告的预算,只能本身想办法了。
社区建设
“乔村儿”断更的时候,我并无中止写做,而是新开了一个技术公众号“数据库漫游指南”。刚开始并无推广 IoTDB,主要缘由是那时候还不稳定。可是,在经历了上海地铁的洗礼以后,我对 IoTDB 和本身的运维能力已经有了的信心,因而开始在公众号上进行宣传,后来直接改为了 Apache IoTDB。
除了公众号,也在CSDN、OSChina上写文章,包括版本发布、使用教程、常见问题、运维经验等,前先后后估计写了上百篇。此外,组建了微信和QQ用户群,而且把本身的微信放到了公众号上,不少加过来的用户跟我说的第一句话就是:“看了你的文章,颇有帮助,但愿进群”,这也是对个人激励。
此外,还有一些用户加好友的备注是“IoTDB爱好者”,这应该是每一个软件开发者最开心的时刻了。固然,也不乏扔臭鸡蛋的,而咱们须要作的就是及时改进,一往无前。
我曾经想过要不要弄个机器人加群,后来想一想仍是算了,毕竟不是全部人都习惯在群里说话,直接加到我,可以让用户和开发者第一时间找到我,离社区更近一些。
找到第一个贡献者
开源社区的发展是从找到第一个社区贡献者开始。对于我来讲,就是刘大伟。
2019年末大伟哥进入咱们社区,他比我大两岁,是四维智联的架构师,也是个人老乡。正好年末升级查询引擎,就拉上他一块儿讨论设计方案,并且初步实现就交给了大伟哥。
查询引擎涉及的地方很是多,他初版改完以后,上百个测试类不经过,搁谁都头大。原本我预想的是等我忙完,咱们就一块儿来修测试,没想到他一我的把测试一点一点都调好了,那段时间他常常搞到晚上两三点。实话说,这股精神我很是佩服。
除了社区的活动,咱们也会常常约饭,而且一块儿参加其余开源社区的活动。大伟哥凭借优秀的人格魅力,已经成为社区的明星人物,如今也是社区的 PMC。
如何参与开源社区?我尝试从大伟哥的经历总结一下:贡献**、承认、热爱**。这三个词每个都不是单向的,而是社区和贡献者之间的双向互动。
第一个开源用户
2020年疫情爆发,开始在家办公,疫情期间咱们主要作了一件事:和大唐先一的张景一块儿,让 IoTDB 在湖南几个电厂上线。
最开始景哥跟我交流,说:“5月有个项目准备上线 IoTDB,能不能支持一下”。我说:“只要大家决定用,咱们就全力支持。”
正值重构完查询引擎,bug 比较多,时不时就给我反馈测试问题,而咱们就经过微信沟通,一步步排查。
就这样,过了一段时间解 bug 的日子,每次我自认为没啥 bug 了,就跟女友说:“这确定是最后一个 bug。” 而后立刻就来打脸,她就在旁边乐。
有的bug我自感一天搞不定,没思路,就拉上田原、个人天、劳模昊男四堂会审。事实证实,及时求助他人,确实可以加速问题的解决。虽然过程比较艰难,磨合了三四个月,最后终于成功上线。
我对用户的态度就是大哥的那句话:“你问我支持不支持,那确定要支持啊!”
开源社区
在参与开源项目的日子里,也接触到了很多中国的开源人物。包括咱们项目的姜宁导师;开源布道师李建盛老师;在家脱产写了一年代码的APISIX的温铭总;Sharding Sphere 的亮哥和娟神;海豚调度的东哥;Pulsar的翟哥、示说网的程总等等。
关于社区建设,我时不时会想,若是有我的可以全职宣传就行了,可是 Apache APISIX 的温总的一句话改变了个人想法:“社区建设这么重要的事,固然要本身上了。” 一件让 CEO 亲自上阵的事情,值得咱们认真对待。
咱们的开源社区也在不断壮大,如今已经有122位贡献者了。其中不只有战队,如东方国信的超哥、厚亮、海媚、艳虹;阿里的金竹老师团队;云智慧的红闪;用友的永伟、瑞杰;华为的秉华、超哥、一夫、鲁铭。也有如宗翰、魏小涵、宇翔、刘煜、亚东、佳俊等单兵联盟。此外,也有非技术同窗的加入,如禹任、李琳、泰丞等等,你们一块儿组织活动,编辑公众号文章。
铁打的实验室流水的兵,实验室的队伍也在不断融入新鲜血液,咱们的团队也在壮大,我也有了本身的小弟,田原、书记泽嵩、老中医恺丰、愈园、祥威、新宇、凌哲、Steve宇荣、旭鑫。在学校的好处就是可以接触年轻人的新思惟,心态永远年轻。
收获
我的收获:2020年,学院奖学金的评审规则进行了修改,增长了开源贡献。这也标志着,不只仅发论文可以受到学院的承认,作系统、作软件的同窗也可以受到承认。对于咱们实验室这些作系统的同窗来讲,无疑是一个好消息。在学生时代的最后一年,我也有幸得到了国家奖学金和清华软件奖。
产品方面:不彻底统计,IoTDB 已经有数十家用户,部署的实例有数百个,在多个场景中实现了对 InfluxDB 等国外产品的替代,实现了工业软件的国产化。
社区方面:随着社区的成长,每一个参与社区的人都会共享社区发展的成果,近期最直接的例子就是招聘 IoTDB 人才的岗位愈来愈多。能够说,社区是一个为你们创造机会的平台,我也但愿可以让参与 IoTDB 的朋友们有所回报,不只是精神方面,还有物质方面。
毕业
不得不说,博士毕业都要脱层皮,预答辩、毕业论文、格式审查、盲审、学位答辩,每一个环节都有可能挂掉,庆幸的是在朋友们的帮助和鼓励下,都顺利经过,也深入感觉到了开源对于个人影响。毕业答辩时,评委老师说了一句话:作系统不容易,尤为是作生产级的系统。
若是说淮海战役是人民群众用小车推出来的,那个人博士之路则是学校和开源社区共同铺就的。
毕业答辩不少素材和场景都来源于社区,感谢中车的晓晨哥、大唐的张景、瑞恩的李总、嘉信的万总、绍兴的发哥、拓维的斌哥、华哥、鹤爷、平哥、天远的翟哥。感谢全部 IoTDB 的用户、贡献者和帮助过个人朋友们。
五年的博士生涯即将结束,但对于数据库系统软件却刚刚起步,我会继续在 Apache IoTDB 社区发光发热,和社区的朋友们一块儿打造世界级的时序数据库产品。
后记
总结
总结一下经验教训:
(1)在团队中,作一个许三多同样的人,利人就是最大的利己。
(2)时常反思,找到缘由后不纠结,想如何解决问题,而且避免再次掉坑。
(3)坚持长期主义,多阅读、多分享。
(4)坚持锻炼,为祖国健康工做50年。
(5)建设开源社区没有捷径,惟有付出真心。
一句话归纳:找到热爱的事业,用创业的态度去对待。
关于本公众号
我的公众号《铁头乔》从新开张,本号有留言功能,会长期经营,分享生活感悟、读书笔记、研究生生活、时序数据库知识,欢迎你们关注转发。
本文分享自微信公众号 - IoTDB漫游指南(Apache-IoTDB)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。