谭新宇的博客

谭新宇的博客

马上订阅 谭新宇的博客 RSS 更新: https://tanxinyu.work/atom.xml

2022 年终总结:记清华硕士的秋招之年

2023年1月19日 12:00

前言

忙忙碌碌又是一年,终于到了 2022 年底。去年第一次写年终总结受到了不少的关注,我在这一年里也时常会重读自己的 2021 年终总结来鞭策自己。今年由于家里的特殊原因需要在医院过年,时间比较仓促,勉强抽出了一天的时间来简短写写年终总结。一方面是给 2022 年的自己一个交代,另一方面也是给 2023 年的自己一个警醒。希望我的经历和感悟能给大家一些启发。

首先依然是自我介绍环节,我叫谭新宇,清华本硕,现在清华大学软件学院 Apache IoTDB 组就读研三,师从王建民/黄向东老师,我对共识算法,分布式存储系统,时序数据库和分布式事务都比较感兴趣。

接着简单介绍一下我们组的工作:Apache IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。Apache IoTDB 采用轻量式架构,具有高性能和丰富的功能,并与 Apache Hadoop、Spark 和 Flink 等进行了深度集成,可以满足工业物联网领域的海量数据存储、高速数据读取和复杂数据分析需求。

2022

介绍完背景之后,在这里回顾下 2022 年的经历。

2 月,Apache IoTDB 社区的新分布式架构设计正在整个社区的努力下如火如荼的进行着,社区针对分布式时序数据库架构的方方面面都进行了广泛的调研和讨论,我也很幸运地参加了若干模块的调研设计,收获良多。对于分区方式,我们结合一致性哈希和查找表的优缺点,选择了一个更符合时序场景 trade-off 的分区方式,既不引入较大的存储成本,又具备一定的负载均衡灵活性,而且还留有足够的扩展性。对于扩展能力,我们将时序元数据与时序数据等同来看都做了多分片,使得集群拥有很强的横向扩展能力。对于查询引擎,我们调研了 Trino/Impala/Doris 等系统的 MPP 框架,又基于我们对时序场景的理解设计出了针对时序场景特殊优化的 MPP 框架和 Pipeline 执行引擎。对于共识算法,我们观察到不同的业务对于共识算法一致性和性能之间的 trade-off 有不一样的倾向,开始思考并着手设计一个能够支持不同共识算法的通用共识框架。

2 月下旬,在为 Talent Plan 社区提交若干代码修复并做了 3 次有关共识算法和分布式事务的公开分享之后,我荣幸的被 Talent Plan 社区接纳为了 mentor,期待以后能够继续和志同道合的小伙伴在 Talent Plan 社区沟通交流。

3 月,需要毕设开题的我结合 Apache IoTDB 新分布式架构对通用共识框架的需求,开始调研学术界和工业界在通用共识框架领域的相关工作。在调研中,我发现了 Facebook 的 Delos 框架不仅支持在一套接口下实现不同的共识算法,还能够支持生产环境动态变更共识算法,他们的工作也得到了学术界的认可,成为了 2020 OSDI 的 Best Paper。沿着他们的思路,在摒弃了当前 ROI 收益较低的生产环境动态变更共识算法后,我便开始着手设计通用共识框架的接口,该框架不仅需要先支持强一致性的 Raft 算法和弱一致性的异步复制共识算法,还需要为未来更好更丰富的共识算法接入留下扩展性(例如 2021 FAST 的 Best Paper 就是基于异步复制的思路在提升写性能的同时又在读时添加了一些约束,从而提供了跨客户端单调读一致性,基于 ZK 实现后相比 ZK 性能能够提升 1.8-3.3 倍)。由于这个思路在学术界和工业界都相对新颖,我的开题便较为顺利的被通过了。

3-4 月,由于毕设开题读了一大堆论文状态比较好,我开始在知乎上回答自己感兴趣领域的很多问题,并幸运的在最开始就得到了很多赞,这些对我的认可又成为了我进一步在知乎上学习和活跃的动力,从而形成了一个正反馈效应。正如去年年终总结的感悟中所提到的,这种正向反馈对于我自己的激励作用是非常大的。现在回过头来看,那段时间尽管我也有一些输出得到了很多赞,但收获最大的还是在此过程中阅读了知乎上分布式系统领域非常多的优秀回答,学到了很多技术知识,了解了很多思考维度。

4 月,忙完毕设开题的我开始面试暑期实习,尽管八股和项目由于日常的积累都没有什么问题,但由于实在提不起兴趣和动力刷题,所以在面试过程中还是多少有些磕磕绊绊。幸运的是最后投的几家公司除了微软之外总体都面的不错,最后思考再三后还是选择去 PingCAP 实习。一方面是 PingCAP 的三轮面试官(赵磊老师,徐锐老师,金鹏老师)给我的面试体验都非常好,另一方面则是我一直对 PingCAP 的很多体系(例如工程服务体系,架构演进体系,开源体系等等)非常敬佩和好奇,想要借此机会去学习感悟。

5-6 月,我专心投入到了 Apache IoTDB 新分布式框架的实现中。最主要的工作便是通用共识框架,这期间一方面抽象了其对上对下的通用接口,另一方面则是为其支持了若干共识算法。对于强一致性共识算法,我调研了 Java 实现的若干 Raft 库的成熟度,并最终得出只有 SofaJRaft 和 Apache Ratis 可以使用的结论。基于此结论,我和子阳探索了 Apache Ratis 的实现并将其集成到了我们的共识框架中,这使得 Apache IoTDB 的新分布式架构具备了强一致性的能力(这半年以来,子阳在 Apache Ratis 的稳定性和性能优化上投入了大量的精力,令人开心的是目前他已经得到了 Apache Ratis 社区的认可,成为了 Committer,可以说是双赢了)。对于弱一致性共识算法,我们结合时序场景写写冲突极少的业务特点,设计并实现了基于异步复制思路的弱一致性共识算法 IoTConsensus。我和乔老师,恺丰,海铭,金瑞,洪胤,厚亮和珍姐都参与了 IoTConsensus 的设计实现与迭代测试。IoTConsensus 做了非常多的工程优化,包括但不限于 Batching,Pipeline,Thrift AsyncClient/AsyncServer 等等,所以流程非常复杂。虽然实现和 debug 的过程非常艰苦,但我们在异步编程,内存控制,可观测性,debug 技巧等方面都有了显著的进步,可以说是既痛苦又有收获吧。此外,为了兼容统一的共识框架,避免单副本时共识框架的额外开销,我们还专门针对单副本的场景(只需要 scale out 而不需要 high availability 的场景)设计了极为轻量的 SimpleConsensus,避免出现 RaftLog 和存储引擎 WAL 双写的现象出现。在未来,我们还计划为 Apache IoTDB 的共识框架加入更多的共识算法实现,例如 SofaJRaft 和我们组今年中的 ICDE NB-Raft 等等。我非常期待 Apache IoTDB 共识框架的文档,功能,性能,稳定性和正确性等等都能够迅速成熟,甚至可以成为大家未来使用通用共识框架的范式,这样如果业务上对共识算法一致性和性能的 trade-off 有不同的需求,便可以直接使用我们已经封装好的共识框架而不用再去造轮子了。这里也非常欢迎对共识算法感兴趣的同学一起参与进来~

7-10 月,我在 PingCAP 进行了全职实习。在 PingCAP 的暑期实习是我个人体验最好的一次实习。在技术上,我不仅可以去学习公司内部海量的技术积累(Rust,分布式数据库,TiKV,调优培训等)和流程规范(如何建立可扩展的工程服务体系和可持续的架构演进体系 -> 可观测性 + 分级 Support && 业务场景持续打磨),也可以系统学习 TiKV 事务引擎演进的历史(乐观事务->悲观事务->大事务->Async Commit/1PC-> 悲观事务内存悲观锁等)来培养自己的产品思维,最后还可以基于这些成长去做一些深入的探索并取得了不错的成果。在生活上,同事们会非常耐心友善地回答我的种种问题,工程经验十分丰富的 mentor 徐锐老师也花了非常多的时间和我 one-one 沟通我的种种疑问来帮助我快速成长(技术问题。如何平衡技术驱动和业务驱动?如何评估架构演进和工程服务的 ROI 等等),金鹏老师和 HRBP 也会和我定期沟通最近的工作进展。PingCAP 是国内开源数据库和开源社区的佼佼者,非常推荐大家有机会前去实习,一定会不虚此行~

8-10 月,我海投了很多感兴趣的数据库团队,并以没有任何职业背景的身份参加了 41 场秋招面试。虽然非常忙碌,但这些面试尤其是终面加面环节对我技术的成长和产品思维的提升有很大的帮助。在面试过程中我也有幸认识了很多大佬,并幸运地拿到了不少 offer,在这里表达对相关面试官和 HR 的真诚感谢。

10 月中旬,我被评选为了 2022 软件学院科研科创年度人物,这令我诚惶诚恐。在我看来,这个奖项更适合论文发到手软的大佬。询问之后发现现在的评审规则中也包含了开源贡献,所以现在做系统做工程的同学也可以得到学院的认可。在这里也真诚感谢学院对我的认可。

10 月下旬,我和祥威洪胤子阳参加了 2022 TiDB Hackathon,并最终拿到了产品组的最佳校园奖。在这次...

剩余内容已隐藏

查看完整文章以阅读更多