2021 年终总结:记我在清华 Apache IoTDB 组的成长
前言
2021 年即将结束,这一年忙忙碌碌收获许多,也认识到了定期总结定期反省的重要性。今年回家后意识到自己应该养成写年终总结的习惯了,于是断断续续用近一周的时间写了第一次年终总结,算给自己的一整年一个交代。希望我的经历和感悟能给大家一些启发。
首先进行一个简单的自我介绍,我叫谭新宇,清华本硕,现在清华大学软件学院 Apache IoTDB 组就读研二,师从王建民/黄向东老师,我对分布式系统,时序数据库和共识算法较感兴趣。
接着简单介绍一下我们组的工作:Apache IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。 Apache IoTDB 采用轻量式架构,具有高性能和丰富的功能,并与 Apache Hadoop、Spark 和 Flink 等进行了深度集成,可以满足工业物联网领域的海量数据存储、高速数据读取和复杂数据分析需求。截止 2021 年底,Apache IoTDB 是国内高校唯一在 Apache TLP 中的开源软件,目前已经被建设成了百余贡献者的开源社区。
本科经历
既然是第一次年终总结,在此简单提提自己的本科经历。
2016 年,高考完填清华志愿的我并不知道自己的专业兴趣是什么,也并不知道不同的专业有什么区别,于是随便报了个机械大类便入学了。
在大一下的时候,一方面是成绩尚可(前 10%),另一方面是大一下接触编程课的印象还不错。对游戏一直很感兴趣的我便萌生了转专业的想法,最终也顺利的平转到了对编程萌新相对友好的软件学院。
在大二刚转过来的时候,我感受到的课程压力是非常大的,当然主要原因还是自己的编程基础太差。因为大学之前从未接触过编程,而且大一只学了一门针对机械学院同学开的比较水的编程课,所以大二学数据结构操作系统的时候非常吃力。幸运的是,软件学院的大佬同学们(教主,杰神,方舟,冯老板,伟哥等等)和辅导员们(岳导,李导)帮助了我很多,再结合自己的努力,我的成绩也慢慢能够跟上来了。
在大三的时候,得益于学院这个大平台和自己的努力,我分别在旷视和微软进行了短期实习。在旷视,我主要在 Data 组打杂,也是在这个时候开始了解分布式系统领域,学习了 Google 的三篇马车(GFS/MapReduce/BigTable)和 Facebook 的小文件冷热存储解决方案(HayStack/F4)并逐渐对这个领域产生了浓厚的兴趣。此外,我在旷视的 mentor 庄大师(外号纯纯)也给我留下了非常深刻的印象,现在他已经是成功人士了(手动狗头)。在微软,我们跟着邹欣老师(现在已经跳槽到 CSDN 当副总裁了)组队完成了一个 NLP 领域的 CodeSearch 项目,主要功能是实现一个 VSCode 插件,能够输入自然语言输出对应的代码,这个工作还拿到微软内部 Hackathon 比赛的奖。不过我的任务主要是爬虫数据清理之类的工作,一方面是自己对 AI 不是很感兴趣,另一方面也是自己炼丹的能力不足。这段经历到现在留给我的印象就是微软内部和谐友好的氛围了,是真的很 WLB 啊。
到了大四做保研还是工作的决定时,有很厉害的学长劝我早点到工业界,说很多研究生的工作都是在虚度年华,贵清也不例外。我的父母则是坚持要求我接着读书。在平衡各方面利弊后,我最终决定继续读个硕士,给自己一些缓冲的时间,并希望能够找到一个不虚度年华的实验室。
最开始我找到了李振华老师的实验室,主要原因是振华老师在上本科课程《网络系统》时实在是太过于风趣幽默,吸引了一大批小学弟。在振华组里最开始我是希望能够做一段有意义的科研的,然而呆了半年后我逐渐感觉到,我所感兴趣的分布式系统方面振华老师做的工作不多,我自己也很难独立的搞出一份科研工作出来。此外,振华老师喜欢的学生特质是英文写作能力强,基础扎实,对计算机网络/操作系统感兴趣,而当时的我与这三个特质都不太搭边,因此我的离开便不是很意外了。不过 u1s1,振华老师写论文的功底真的非常强,MobiCom,NSDI 年年发,21 年他们组还中了软院第一篇 SIGCOMM,可谓是风光无限了。尽管会比较 push,但好歹 push 的结果对大家都好,满足上述三个特征的同学也可以去跟振华老师联系。
当时,我和同在振华组里的苏总相约好了一起润,我们几乎打听了学院的所有实验室,在过滤掉不感兴趣的搞前后端和 AI 的实验室后,我们最后面临了两个选择,一个是散养的实验室,去了之后可以在企业自由的实习三年。一个是学院里在做的时序数据库 Apache IoTDB(当时还是孵化器项目),尽管去了之后会比较忙,但由于主力是学生,相比在外实习可能能得到更多的锻炼,而且硕士期间也能够拥有三年的数据库内核开发经验,对找工作比较友好。最终经过深思熟虑,我们相约一起润去了 Apache IoTDB 实验室。
进组后,我当时给自己的目标便是利用研究生三年时间提升自己的理论知识水平和工程能力。因而我一进去就开始了解开源,学习数据库知识并加入了分布式模块进行实践。做了不到一年,2020 年底我便被社区接纳为了 committer,这里也很感谢组里分布式模块的实力大哥江天学长的举荐。
如果让我在 2020 年底反思读研是否值得,我可能还很难给出明确的答案。但如果让我现在反思读研是否值得的话,我的答案一定是值得。这与我进实验室后的经历有关,我不确定当时直接工作的话在企业是否也能得到这样的成长,但至少 2021 年在实验室的成长已经让我觉得读研不虚此行了。其实仅仅深度参与一个开源基础软件从雏形不断发展壮大再到可能的商业化,感受项目管理,产品功能,人员心态,宣传运营,社区交流等方面的进化就已经是非常难得的一段经历了,更不要谈在这期间借助这个平台我们自己的成长了。
当然,读研到底是不是正收益。家庭情况,实验室情况,个人兴趣,时代发展,专业方向,人脉关系这些都是影响很大的因素,不可一概而论。
2021
讲完了之前的经历,在这里谈谈 2021 年的经历。如果要给 2021 年的自己一个关键字的话,我觉得应该是成长。
卷了一整个本科的我在研究生选课时遵循了兴趣导向的原则。即对于自己不感兴趣的课水水即可,对于自己感兴趣的课付出大量精力。前半年,我了解到了贵系陈康老师的《分布式导论》课程,这门课基本 Follow 了 MIT 6.824 的课纲,大作业也是完成 6.824 的 lab。尽管听起来就很硬核,但我毅然决然的选了它。在上这门课的时候,我一方面同步听了线下陈康老师和线上 MIT Robert Morris 老师的课程,另一方面花费了大量的精力去完成大作业,尽管大作业不要求完成 challenge 的内容,但我还是完成了 lab1-4 和 challenge 1-2 的全部内容,最终我如愿以偿的拿到了 A+ 的成绩,这门课也成为了我在贵清收获最大的课。现在想想,这一门课上下来,我阅读了近 20 篇经典论文,学习了很多分布式经典理论,包括各种一致性级别,CAP,BASE,FLP,共识算法,偏序/全序关系,若干系统架构等等,基本重铸了分布式系统的知识体系。此外,我也将我的大作业文档在 Github 上进行了开源,短短半年已经收获近 300 个 star,新增 160+ follower。而且我在知乎上也给自己的文档打了广告,半年收获了 13 万+ 阅读,500+ 赞,1200+ 收藏,成为了”如何的才能更好地学习 MIT6.824 分布式系统课程?”排名第三的答案(第一是 PingCAP 的黄东旭老师)。通过这些关注,我在这半年里也认识了很多志同道合的朋友,这是一生的财富。
7 月,刷完 6.824 收获很大的我又开始关注另一门课 CMU 15-445,想要就此机会认真学习一下数据库理论。用时一个多月,我利用晚上和周末的时间学习完了 15-445 的线上课程并被 Andy 老师的个人魅力深深吸引。无论是上课时的 DJ drop table,还是 Andy 老师对数据库知识的热情都让我印象深刻。通过这门课程,我基本了解了如何实现一个支持 ACID 的单机关系型数据库。略感遗憾的是,其大作业 bustub 的 codebase 是 C++,我一方面对 C++ 没有技术积累,另一方面也对自己的代码有一定的洁癖,如果我不足够了解 C++ 的话,我也不想写出一堆很丑陋的 lab 代码出来。主要是基于这个原因,我放弃了刷 bustub,换为 MIT 6.830 数据库课程的 lab (codebase 是 Java)刷了刷,但后来刷到 lab2 便由于时间原因被搁置了,之后有机会的话希望能重捡起来。
8 月,经过一年多的开发,我们终于迎来了 Apache IoTDB 分布式版本的第一个线上用户,针对于 20TB 每天的入库流量,我们用 3 节点的分布式 IoTDB 集群替代了 20 节点的 HBase 集群, 经过初步统计,预约未来 5 年能为企业节省上百万的硬件成本。尽管在上线前的内测期间我们遇到了不少问题,但我们顶住了压力并都进行了修复,最终也顺利上线。通过这次经历,我不仅进一步认可了自己在做的工作,也理解了能为用户创造实际价值才是项目存亡的关键。
8 月底,对 TiDB 架构一直感兴趣的我发现 PingCAP 提供了免费的 PCTA (TiDB 系统管理基础能力认证)考试机会,于是看了看文档考了一个 PCTA 证书玩玩。
在暑假,我参加了中科院组织的开源之夏活动,题目为 《Apache IoTDB 分布式混沌测试框架》。这份工作基于阿里的 ChaosBlade...
剩余内容已隐藏