Yuchen Cheng's Blog

@rudeigerc

年终总结 | 2020 年终总结:「转」

2020-12-31year-in-review

2020 年可谓是多灾多难的一年,由难以扑灭的澳洲野火开始,人们甚至还在讨论会不会成为今年最严重的事件的时候,紧接着就是至今为止仍在影响着人们生活的新冠疫情。 就我个人而言今年可以说是转变的一年,无论是由于疫情的影响造成的生活方式的转变,还是迈入研究生的第二年之后心态的转变。 近年来汉字文化圈的国家都很流行评选当年的年度汉字,算是对当年度的一个总结,今年中国的年度国内字是「民」,而日本的年度汉字是「密」,可能也代表着两国在疫情之下的不同现状。 回到我自身,我的年度汉字应该就是「转」吧。

其实我每年都想尝试写一下年度总结,不过最终一直都没有下笔,一方面我不是很想把自己的想法暴露出来,另一方面也确实没什么好写的,抑或是没什么亮点。 尤其是 2019 年对我来说真的是充斥着痛苦与挣扎的一年,实在是不堪回首,唯一值得庆幸的只有在实验室的期间认识了不少朋友,对前几年的我来说这是相当难以想象的。 从结果而言,我在 2019 年艰难地从本科毕业,并开启了我的研究生生涯,实际上我读研并没有什么特别的目的性,硬要说的话可能只是想给予本科生涯失败的自己更多的一点希望吧。 我并没有什么远大的科研抱负,也没有什么具有前瞻性的职业生涯规划,只是想要多一点时间看看能不能够做出不同的选择。

今年看到了高策学长的年终总结的时候,又兴起了这个每年都会有的想法。 我认为年度总结就是重新审视当年的自己的一个过程,可能往年不是很想提笔也是因为没有勇气直面自己,今年总算是鼓起了勇气,虽然可能最后会是一篇流水账式的文章,也算是给 2020 年的自己一个交代。

从今年年初开始说起的话,年初主要是在做上半学期的收尾工作,印象中只剩下 CSP 的综述,主题是并发控制。 虽然现在说起来有点丢人,老实说那时候选了这个主题的主要原因是其它的我都看得不是那么懂,并发控制的话至少基本的 2PL 还有 OCC 还是有点基础的认识的,虽然后面证明这个基础的认识用处并不是那么大。 我那时候主要负责的是 H-Store1,后续又看了一些混合并发控制的文章,如 TicToc2 和 Sundial3,当然那时候时间上比较紧张,所以也没有留下什么具有参考价值的笔记,最后靠着队友们的帮忙形成了一份大概勉强还算过得去的综述,我的秋季学期也就这样划上了句号。

春节之后没多久,我就开始就项目的重构开始与甲方从需求上开始进行重新的磋商。 虽然熟悉我的朋友肯定知道这个项目,不过我还是简单介绍一下,简要来说这个项目就是将某线下的流程转移到线上进行的一个平台。 虽然说的是重构,不过实际上和重写也没什么太大的区别了,毕竟需求发生了大幅的变化,对方也希望能够就页面进行重新的设计。

一开始我主要负责的是前端的重写,由我先搭建好大概的骨架,后续和同学们一起合作开发。 实际上和甲方的磋商给我带来了不小的压力,这意味着我必须每隔一段时间就要有成果的产出,尤其是中期的时候我还面临同时期的课程的压力,实在不是一个我愿意回忆的时期。 从软件工程的角度来讲这次重构也算是失败的,当时我没办法承受同时需要担任开发和管理,并且还要和甲方沟通的压力与间接造成的时间压力,最终舍弃了代码审查的流程,也导致了代码质量的不可控以及整体项目的暴走。

进入四月份春季学期正式开始之后,我的重心就转移到了课业上,虽然对于研究生来说除了奖学金以外成绩并不是特别重要,不过我想应该也没人会因此放纵自己。 今年由于疫情的原因课程全部采取线上教学,原先我为了方便选课的时候把好几门课放在了同一天,结果变成线上之后真的是折磨,需要连续坐在电脑前六七个小时。

下半学期最为挣扎的除了算法就是 CSDI 了,每周大概一半以上的时间都会花费在算法的作业上,而 CSDI 则是广度比较大,基本上涉及了所有存储相关的主题,这对之前在存储方面几乎是一张白纸的我着实带来了巨大的挑战,也间接影响了这门课的 project 的选题,虽然只需要提出 proposal 就行了,我还是相当挣扎。 原先受到 CSP 的影响,打算继续研究一下混合并发控制的,后面感觉这方面很大一部分都是基于 ML/DL 去进行的(可能实际并不是这么一回事,只是当初我片面地了解之后是这种感觉),对不管是存储还是机器学习都是纸上谈兵的我而言负担过大,最后就作罢了。

之后的一段时间我都在转辗于各个数据库相关的实验室或者课程的主页来找寻可能的灵感,最后给予我灵感的是 Harvard 的 CS265: Big Data Systems,让我决定选择 Log-Structured Merge Tree 作为主题,这门课程最后的作业就是要学生实现 LSM-tree 并且在此基础之上进行优化,而我对 LSM-tree 也有基础的了解(主要是 RocksDB)。 之后又从这篇综述4开始慢慢对学术界针对 LSM-tree 的优化有了一定的了解,最终选择针对读这个场景提出可能的优化,缝合了 Rosetta5、ElasticBF6 和 EvenDB7,形成了也还算过得去的 proposal,当然作为缝合怪 novelty 肯定是不足的,不过姑且是在最后完成了论文。

虽然最后的论文本身可能并没有什么学术价值,不过也算是我第一次从零开始调研并学习一个方向,我认为对我自己还是挺有帮助的,同时也对 LSM-tree 这个领域有了一个宏观的认识。 幸运的是,这篇论文也给实验室的学弟的毕设带来了一定的启发,也算是让它有了更好的归宿。

夏季学期我主要担任本科生 SE128: Design and Development of Internet Products 课程的助教,虽然我从大四的时候开始常年担任各种课程的助教,不过暑假大作业这种类型的应该算是第一次。 先前也提到过,今年由于疫情的原因课程全部改在线上进行,夏季学期也包括在内,不过暑假大作业这种需要团队合作的课程在线上进行无论对老师还是学生来说都相当具有挑战性,有些在线下的时候很容易解决的问题到线上需要花费很多时间。

今年在授课内容上也产生了较大的变化,当然这也和学院培养计划的调整有关,在此不再多加评价,但是整体而言要求有了较为显著的提高,即需要学生对项目的开发有比较整体的认识,包括过程管理以及团队合作等,我认为这对之前没有接触过软件工程的学生来说是非常具有挑战性的。

实际上我原先十分担心由于远距离协作的影响以及要求的提高可能会对完成度带来不可预知的影响,但事实上最后答辩的时候大部分同学的完成度都超出我们的预期。 毫不夸张地说,我当年自己做出来的东西放到现在的话大概只能敬陪末座吧,尤其是现在每天到洗手间的时候都能看到当年的展板,真的是对内心的拷问,希望早日能够处理掉

秋季学期开始之后,我也回到了学校,从这时候开始到年底我就主要开始烦恼毕业设计的选题了,可以说是,这一年当中最为挣扎的一段时间。

为了督促自己,大概也带有对自己的期许,我们在学期初的时候新建了 sjtu-sail/seminar 并且每周召开组会进行分享,主要的主题遍及分布式系统的各个领域,包括资源管理、批/流处理、存储和 Serverless 等,大部分情况下都是我前一个星期一拍脑子决定的,虽然仔细看的话大部分情况下只有包括我在内的两个人在不停地循环。

因为之前我主要接触的是批处理相关的工作,所以我想作为其延伸的流处理可能会相对比较能形成比较好的想法,当然实际上没有那么简单,将流处理作为最后的选题也是在 11 月下旬才决定的事情。 这段时间主要是针对论文的梳理,虽然一直有想产出几片文章留下一点记录,不过最后还是没有成文,只有零散的几篇简单的记录,我认为这也是我近期开题报告进展如此缓慢的主要原因之一,可能也算是自食其果吧 (近期打算写一篇)。 从结果而言,这半年感觉好像没有做成什么事情,每天处于焦虑之中,时不时再处理一下项目相关的事情,今年也就这样在没有完成开题的情况之下画上了不圆满的句号。

去年在《剑/盾》的驱使之下买了 Switch,事实上今年打通了的游戏也就只有《剑/盾》而已,剩下的不管是《塞尔达》、《风花雪月》、《AI:梦境档案》、《莱莎》还是《异度之刃 DE》都只有玩到一半(虽然《莱莎》大概快通关了,《异度之刃 DE》已经打了一大半了),下半年精神上实在是没有玩游戏的心情,只有时不时玩一下手游(主要是《アナザーエデン 時空を超える猫》),所以大部分的游戏都还是上半年时候的进度。最近有在动的大概只有健身环和有氧拳击,周末的时候时不时还会锻炼一下,虽然本质上还是处于三天打鱼两天晒网的状态。

在地铁上的时候我有时候会读小说打发时间,今年原本想要把森博嗣老师的《すべてがFになる》读完的,不过由于是日文原版的阅读速度有一定的局限性(主要是翻译版已经绝版了),最后还是没有成功在年内结束,不过应该已经到了解谜的部分了,顺利的话近两个月应该可以读完,希望今年能多读几本 S&M 系列的作品。

我在文初的时候提到了我的年度汉字是「转」,不过并没有提到是往正面还是负面「转」的——可能处在振荡之中吧,就像预测模型可能会因为数据的瞬时变化产生震荡一样,我认为我在这一年也是处于振荡之中的,可能主要是由于对未来的迷茫。

我经常开玩笑地和我身边的人说,我原先是为了逃离系统才在本科的时候选择了信息系统方向,而这个选择又成为了我选择就读研究生的契机,结果最终到了研究生的时候我的研究方向是分布式系统,所以研究生阶段的我仿佛是在为本科阶段的自己还债。 可能有些人会难以理解,不过我并不以曾经有这种逃避的想法的自己为耻,这也是我所做出的决定,有了这段经历也才成就了现在的我。 我一直认为如何准确地评价自己是一件非常难的事情,还是学会和自己和解吧,虽然现阶段的我看来还是没有很好地学会。

最后来进行一个简单的展望吧,大一点的话就是希望疫情尽早得到控制,小一点的话大概就是顺利找到实习并且顺利完成毕业论文的撰写,虽然现在具体的方案还八字没有一撇,「なんとかなる」。


  1. H-Store: A High-Performance, Distributed Main Memory Transaction Processing System, VLDB ’08. ↩︎

  2. TicToc: Time Traveling Optimistic Concurrency Control, SIGMOD ’16. ↩︎

  3. Sundial: Harmonizing Concurrency Control and Caching in a Distributed OLTP Database Management System, VLDB ’18. ↩︎

  4. LSM-based storage techniques: a survey, VLDBJ, 2020. ↩︎

  5. Rosetta: A Robust Space-Time Optimized Range Filter for Key-Value Stores, SIGMOD ’20. ↩︎

  6. ElasticBF: Elastic Bloom Filter with Hotness Awareness for Boosting Read Performance in Large Key-Value Stores, USENIX ATC ’19. ↩︎

  7. EvenDB: Optimizing Key-Value Storage for Spatial Locality, EuroSys ’20. ↩︎