共计 4899 个字符,预计需要花费 13 分钟才能阅读完成。
我是刘继聪,2020 年毕业于复旦计算机专业,目前在涛思数据任职流计算引擎研发工程师。这篇文章是对于我过来这些年所做出抉择的复盘与回顾,我曾经验的迷茫与困惑——对于为什么放弃保研与出国、又为什么从热火朝天的 AI 转做数据库、以及为什么来到大厂退出 Startup 的故事。不知其中是否有与你类似的经验,你又是否从中取得一些共鸣,心愿能给到迷茫的人一些走出窘境的灵感。
从物理转入计算机,艰难、播种与成长
和很多人一样,我在进入大学时对本人感兴趣的业余并不清晰,从自然科学试验班分流进入物理系一段时间后,我才信心调转方向进入计算机专业。
我和计算机结缘于物理系的一个我的项目——实验室设施管理系统,须要实现的是 Web 与服务器相干的性能,我本人在网上找教程,用世界上最好的语言 PHP 写出了人生中的第一版程序——一个 LAMP 架构的 CRUD 零碎。同时我选修了物理系的 C++ 课程,第一个绝对较大的 C++ 我的项目就是这门课的期末我的项目,用经典的蒙特卡洛办法做 Ising model 的模仿。
一来二去,我发现写代码比在物理实验室修设施更乏味,加之复旦还提供转业余机会,就动了这个念头。不过那时我曾经大二了,依照规定大二转业余必须降一级,尽管在过后看来代价很大,不过当初想来,这相对是个正确的抉择。
话虽这么说,但在我刚转入计算机系时,也属实是被各路大神虐得遍体鳞伤,甚至一度狐疑本人是不是做错了决定。
过后我所在的拔尖班的数据结构课每周都会有机考打 OJ,OJ 和 LeetCode 有点像,但有一个典型的区别是,你只晓得你的答案错了,却不晓得有哪些测试数据,更不晓得错在了什么数据上,所以 Debug 齐全靠看代码猜。一开始,我做机考常常一分都拿不到,每周光是实现作业就简直要花掉我所有工夫。为了取得更好的问题,我有很屡次写代码直到天明。但提高是看得见的,缓缓地我可能在每周机考上获得满分,最初不仅这门课程我拿到了 A,绩点也取得了全系第一。
当初想来,我感觉这应该是一个台阶,你须要拼尽全力能力登上去,但只有登上去就会看到不一样的风光。 这段全力以赴刷算法题的经验对我起初找实习、找工作也起到了十分大的帮忙,基于此我才可能在长期起意、简直没有什么筹备的状况下进入字节跳动实习以及拿到各大厂的秋招 Offer。
拔尖班的益处是抉择的余地很多。除了数据库课外,我还选修了分布式系统、数据挖掘、密码学原理等课程。我和敌人们组队一起做了很多乏味的我的项目,部署 Hadoop 与 Hive,剖析不同工作中的性能瓶颈;应用 Spark 进行分布式的计算;实现数据库的块嵌套循环连贯,将执行工夫从十几秒优化到一秒以内……
在复旦,我拿过各种各样的处分,除了一等、二等、三等奖学金,还有数模比赛、物理学术比赛的国家一等奖和上海市一等奖、泛海学者、优秀学生等等。在求学之路上,我遇到了很多优良的同学、名师以及挑战,也播种了一路成长。
大学时的获奖证书
从 AI 到数据库,对于科研、实习与方向的抉择
在钻研畛域上,我也并非一开始就关注数据库,这其中还有一段波折的摸索过程。
我进入计算机系后,应拔尖班要求退出了 NLP(自然语言解决)实验室。在大三上学期期末考试完结之后,我成为了字节跳动 AI Lab 的一名 NLP 实习生,做的是中文错别字检测的工作,实习完结后进入港科大做暑期交换,尝试做更深刻的钻研。在这么几段短暂而又截然不同的 AI 钻研经验中,尽管导师都是业界、学术界的大牛,但我却没有做出什么厉害的成绩。
由此我产生了一些新的想法,要不要去做一些别的事件,或者我会感觉更乏味、也更能施展我的短处,就像我从物理转到计算机一样。我把这些想法和在不同钻研畛域的敌人们交换了一下,之后一位做数据库的同学引领我看到了另一个畛域——Data Infra。 接下来我成为了 TiDB 的贡献者并开始系统性地学习分布式系统和数据库,算是正式迈进了数据库的门槛。
但我在加入工作时却并没有间接进入这个行业。邻近毕业季,我面临着参加保研还是出国抑或是加入秋招的抉择。因为保研外校须要加入夏令营(但我那时在港科大交换),而本校又没有特地适合的导师,于是我放弃了保研,赶上了秋招的末班车。我做了两手筹备,即便没有找到适合的工作,依然能够申请出国,后果没想到秋招超乎设想地顺利,我拿到了加入面试的所有公司的 Offer:其中既有阿里、腾讯这类大厂,也有 PingCAP 这类守业公司。
在某互联网大厂的终面中,我遇到了一位同样复旦毕业、工作十多年的学长,他问我手上有哪些 Offer 以及偏向的抉择,我如实地答复了,并说我当初想去做数据库。他模棱两可,只是反诘我:“年轻人都想去做些有技术的事件,我当年也是。但去 Startup 做数据库,你是否真的想好了?在将来好几年,你可能都比你在互联网大厂做业务的同学薪资更低,同时还要承当更多不确定性的危险,你真的能承受吗?”
我真的想好了吗?或者的确没有。最终,我抉择了去阿里云,从事基础架构的工作,心愿能获得肯定的均衡。
疫情在那个冬天暴发、无奈返校,毕业时只来得及和局部同学匆匆相聚又相别。上海到杭州的动车不过 49 分钟的车程,恰如从学生到职场人的转变,快得令人猝不及防。下一站,杭州阿里。
退出阿里后,光荣、困惑与思考
或者是得益于我之前还算丰盛的实习经验,又或者是我在学生时代就做了很多有挑战的课程我的项目,我很快上手了新的工作内容。 第一个令我印象粗浅的工作,是我入职的第一个月,就解决了一个困扰了组内技术专家们半年之久的问题。
背景是这样的,咱们有一个监控零碎,监控的探针间接装置在客户 ECS 上,客户可能会购买很多 ECS,用 Kubernetes 或非 Kubernetes 的形式组成集群,咱们要做的事就是抓取出集群内的网络拓扑关系,比方 TCP 连贯,而后绘制成可视化的拓扑图。与个别的散布式微服务相比它存在三个难点:
- 不对用户的技术栈做假如的,Java、Python、PHP 都有可能
- 要做无侵入的,不心愿用户改代码
- 要适配 Kubernetes、非 Kubernetes,还有各种 Linux 内核版本
咱们是通过轮询 /proc 目录下的 TCP 文件来解决这些难点,但无奈保障抓取到全量数据。最好的解决办法是用过后比拟新的技术 eBPF 来做,却因为绝大多数客户环境不能很好地反对 eBPF 而难以落地。我花了一周业余时间做调研,发现一个内核模块 auditd 能够较好地解决这个问题,几周工夫后咱们的新版探针上线了。这个半年无解的难题失去了解决,也成为我进入职场之后第一件很有成就感的工作成绩。
但逐步地我发现,组里的工作属于典型的管控侧,管控侧的麻烦是适配用户各种各样简单的环境,但本身的外围能力、技术难度与挑战都显著弱于平台侧,因而,我能挑战的问题没有设想中那么多,提高的速度也渐趋迟缓,组里业务的倒退情况也并不好。
为了排解工作的枯燥乏味,再加上做数据库之心始终不死,我和敌人们一起加入了 PingCAP 2020 年的 Hackathon。咱们抉择的题目是基于 Raft Log 来实现物化视图,属于改内核的工作。在赛程中,我和小伙伴们通宵达旦地写着代码,调试与解决问题,这让我感到了在工作中久违的高兴——写代码、解决难题与本身提高的高兴。
经此一役后我开始思考将来,在当下的工作中尽管我失去了老板的信赖、成为了一些我的项目的 Owner,或者会有循序渐进的降职,但这些毫无波澜的人生轨迹也让我越发感到工作中的枯燥乏味。我决定要来到,但为了防止吃一堑; 长一智,我必须要先确定好指标。
从阿里到 Startup,重拾做数据库的想法
我策划着两条路——转岗或跳槽。我开始和公司内不同团队接触,然而后果却让我悲观:很多我认为做着内核研发的部门却实际上只做管控和写控制台;而另一些内核部门,一整个组的 Scope 都小得令人悲观;还有一些,并不欢送校招新人转岗……
而另一方面,整个 Data Infra 的环境却在悄悄扭转。 我身边开始呈现了一些令人振奋的声音,比方:
“所有人都看好 DoorDash 这些明星 Pre-IPO,而 Snowflake 这类公司招人都很艰难,但起初发现那些去了的人拿得是几百万刀的大包……”
“Snowflake 的发行价曾经上调了,上市当天就暴涨了超过 100%……”
“Snowflake 的数据的确好:它的 NRR 是 173%,也就是说假如一个用户去年在 Snowflake 上破费了 1 美元,那么往年他将均匀破费 1.73 美元……”
“Confluent 上市、Databricks 大额融资……”
……
这时我才惊醒,过后那位校招的终面官,有许多年工作教训、在大厂管着几百人的复旦学长所说的曾经不对了——去 Startup 做数据库,曾经不再是一件须要靠情怀去撑持的事。 随着这个行业内热钱的涌入,很多有前景的 Startup 实现了大额融资。更要害的是,对于这类技术公司而言,技术人才是外围,因而他们违心花钱、也给得起钱去和大厂抢人;而互联网的 ToC 业务却因流量见顶,发展前景反而没那么乐观。
通过一段时间系统性的学习与钻研,我认为本人曾经准备充分,我的首选指标是做 TDengine Database 的涛思数据。起因有二: 首先,TDengine 是开源的,在此之前,我曾经屡次看到过 TDengine 登上 GitHub Trending 榜;我可能间接去看代码、通过实际直接判断它是否有真材实料。其次, 通用 OLAP 尽管被炒得炽热,但竞争也十分强烈,或者不如从细分赛道动手,而细分赛道中时序数据库与图数据库的增长是最为迅速的,我置信 IoT 设施会继续一直增长,产出越来越多的数据,我看好它的前景。
为了理解时序数据库这个畛域,我残缺浏览了 Jeff(涛思数据创始人陶建辉)所创作的“十大特点”、“架构设计”等文章。在细分赛道中,只有静下心来对问题进行实实在在的建模与剖析、对畛域进行粗浅洞察,能力真正做出有外围且有竞争力的产品,在 Jeff 的文章中我切实领会到了。此外,涛思数据的招聘页上醒目地写着“超过 BAT 的薪资”,我认同这样的人才观,想要招聘到优质人才,愿景与待遇缺一不可。
携手 TDengine,我开始新的征程
在涛思的故事其实才刚刚开始。
2021 年 7 月,我正式退出涛思数据,很快上手了数据库内核的研发工作。在转正后的第一次季度总结时我拿到了“最佳新人奖”。
当初,我在涛思数据负责流式计算引擎的研发。TDengine 2.0 中提供了间断查问的能力,它实质上是一个工夫驱动的批处理,无奈解决乱序数据的问题,且性能耗费很大。我的指标是为现有的 TDengine 实现一个真正的流式计算引擎。
这项工作的 Scope 与挑战远远超过了我之前的所有工作与我的项目。我一边系统性地学习流式计算中 EOMP(Exactly Once Message Processing)、分布式快照等容错实践,一边钻研 Kafka、Flink 的源码与实现机制,一边跟踪 SIGMOD、VLDB、ICDE 等峰会中相干钻研的最新进展、理解 Railgun、Hazalcast Jet、Ray Streaming 这类新引擎的设计,同时关注着 Materialize、Decodable 这类流式 ETL 工具与 KsqlDB 这类流式数据库的产品状态与定义。我时刻揭示本人必须要关注前沿技术与新玩家,因为我不心愿做一个在设计之初就落后于时代的货色。
以一套执行引擎来交融 OLAP 的查问与流式计算,我会用代码来践行我的想法,也期待着面目一新的流式计算引擎,在往年下半年,随着 TDengine 3.0 的公布,一起与大家见面。
写在最初
在我过来的这些岁月中,失去了很多人的帮忙,帮我找到新的方向与路线,让我有勇气和信心来承受新的挑战。因而我也违心分享出我的经验,或者能给你一些启发与帮忙。
比起自觉地埋头苦干,我更置信“抉择”会对人生与职业倒退产生更大的影响,这篇文章中复盘了我人生中几个至关重要的抉择:从物理转入计算机、从过后热火朝天的 AI 转做 Data Infra、放弃出国与保研退出阿里、从阿里来到退出涛思。当然这些抉择的后果还远远没有盖棺定论,但至多当初来看正确与否也开始慢慢清晰了,我置信读者们也会有本人的判断。
想理解更多 TDengine 的具体细节,欢送大家在 GitHub 上查看相干源代码。