2020 年是多灾多难的一年,新冠疫情作为历史上少有的黑天鹅事件,改变了很多人的生活。我的生活也有了非常大的变化,堪称跌宕起伏。在这一年中,我跟女朋友缔结了法律上的夫妻关系,持证上岗。工作上也有了非常大的变化,面临了更多的挑战。虽然也遇到了一些挫折,但整体而言,还算顺遂。

在一月份的时候,疫情还没有彻底展开。远在美国的同学就在提醒我们,要关注武汉的流感的发展。没想到一语成戳,疫情的发展远超预期。一直到 2 月 10 号,我和小徐一直在我爸妈家里远程工作。回到上海后,我们也一直在家里办公,每天消毒多次。在 3 月份去上班的时候,我基本是下图全副武装的样子的。

全副武装

因为疫情的缘故,这段时间连外卖都不敢点,一直在自己做饭。我和小徐都不是很会做饭,或者说基本不会做。于是这段时间的生活可以称得上是水深火热,每天吃的最多的就是面条,和包子。面条下水水煮一下可以直接吃,包子可以买成品微波炉加热一下。偶尔兴致来了,可能会买一些鸡腿肉和土豆之类的,按照下厨房 app 上的菜谱做一些简单的尝试。目前为止,应该红烧鸡腿肉还算比较成功,得到了小徐的胃的认可。

在工作上,这三个月我主要在关注内部业务的重构和优化,将我们的后端架构以更加云原生的方式重写。在开源领域投入的时间就很少了,基本只有在周末空闲的时间里关注一下 Ray 和 Spark on K8s 的社区进展。蚂蚁金服给 Ray 贡献了一个比较简陋的 Operator 实现,那时还存在不少的问题,我提的几个 PR 都是围绕这个展开的。当时在我看来,蚂蚁的方案对于 Ray 的弹性伸缩的支持实现起来会比较困难,因此也私下里设计了一下新的方案,做了一个原型,不过后来也没有被采用。Ray 的团队出来创业,设计了一个基于 Ray Autoscaler 的 Operator 方案,最近刚刚完成,跟之前方案最大的不同在于,它是用 Python 实现的,因此可以复用 Ray 自身的 Monitor,在 Operator 里直接创建新的进程(or 线程,不确定)监控对应的 Ray 集群的 Redis 中的全局状态。这样的设计确实要更加优雅一些。

但是 Ray 在 Kubernetes 上仍然存在很多问题,这与 Ray 本身的设计有关。Ray 本身需要一个 Long Running 的 RayLet,因此没有办法像 Spark 等等离线计算的框架那样,原生地运行在 Kubernetes 上,而需要先运行 Head 和 Worker,在 Kubernetes 上构成一个 Ray 的集群,再把 Ray 任务分发到 Ray 集群上执行。这样在一定程度上会降低资源的利用率,也提高了运维的成本。这个问题在 19 年的博客文章的结尾里有简单谈到,就不再赘述了。

4 月到 6 月的三个月时间里,我们真正开始了利用 OCI Artifacts 管理机器学习模型的开源项目 kleveross/ormb 的设计和开发。之前三个月的重构主要集中在训练侧,这三个月主要关注在模型管理和模型服务侧。通过和 devops 组的同事 hyy0322 的合作,我们在 Harbor 社区里推动了对自定义 OCI Artifact 类型的扩展性支持。通过这一特性,我们的客户可以在 Harbor 中统一地管理常规的 Docker 镜像,Helm Chart,以及机器学习模型。

7 月到 11 月,是才云被字节收购后,我加入字节度过的半年左右的时光。字节是一家非常杰出的公司,各种意义上的杰出。在文化上,字节的职级不可见,让我非常非常认可。在内部的各种文章和实践,质量都非常高。但是这段经历,我能够介绍的比较少。一部分原因是担心有什么商业秘密,另一方面,由于字节大小周的原因,我在开源领域,博客文章方面也乏陈可善,这是非常令人沮丧的。

这也是我后来选择离开字节的一部分原因。对我个人而言,我可以接受临时的因为业务压力导致的加班,但是大小周这样的制度性的加班,对我来说还是有些困难。对于一个职业生涯早期的工程师而言,我觉得周末是非常重要的。除了周末之外,又有什么大段的空闲时间可以拿来提高自己的呢。字节当然在经济上的回报应该是很大的,但是长期来看,我感觉对发展没有特别正面的帮助。如果不是因为被字节收购,我可能会在才云多工作几年,只能说,一个人的命运啊,不止XX,还要看XXX。

再见,朋友

在 11 月的时候,我加入了腾讯云容器团队。我一直以来对公有云就有比较强的好奇。我认为公有云是云计算的未来,虽然未来成为现实可能还要 10 多年 :-) 刚刚入职一个半月,没有太多的体悟,很多事情也在持续探索和推进的过程中。希望明年能够有比较好的结果能够在年终总结中分享。一个比较好的地方在于,公有云对于影响力的塑造是比较在意的,我也可以能够有一些计划内的时间参与开源,规划新的开源项目。相信在未来大家应该能够看到团队在开源领域更多的声音。

今年虽然没有达到去年的目标,认真学习一下 PyTorch 和 nsq 的源码,但是也阅读了不少的书籍:

  • DDIA 重读第 N 次
  • 数据库系统内幕,茄子和 Eric 翻译的版本
  • 现代操作系统原理与实现,夏老师和海波老师的书
  • Harbor 权威指南,Henry 的书
  • Computer Architecture: A Quantitative Approach
  • Stream Processing With Apache Flink
  • 精益创业
  • 精益创业实战

其中数据库系统内幕和 Computer Architecture: A Quantitative Approach,是比较友善的读物,我对数据库和体系架构都不太了解,但是这两本书是处于我能读得懂的范围内,因此推荐一下。包括字节里有一份关于字节跳动推荐系统的新人串讲,非常非常推荐,不过是内部材料,比较可惜。精益创业系列这个应该都是老生常谈了,我个人在管理和产品经验上都不多,所以读起来收获还是挺大的。

在源码方面,学习了一下 Argo,Seldon Core,KFServing 的设计和实现,但是没有太大的收获,与工作的领域太相近了。在论文方面,今年有留下阅读笔记的论文只有 7 篇,远低于 19 年的 30 篇。一方面是因为今年读书比较多,精力有所倾斜,另外一方面,大小周确实也对我产生了比较大的困扰,让原本产出相对比较多的 8 月到 11 月基本没有做什么事情。这里有两篇论文,比较适合扩宽视野:

  • Gobi: WebAssembly as a Practical Path to Library Sandboxing
  • Overlapping Experiment Infrastructure: More, Better, Faster Experimentation

第一篇是讲利用 WebAssembly 进行 Software fault isolation(SFI) 的,第二篇是谷歌在 2010 年发表在 KDD’10 上的,关于 A/B 测试的论文。可以视作是互联网大规模 A/B 测试(之前的工作主要关注在 web-based experiment 和小规模)系统领域的开山之作。工业界无论是 ToB 的 A/B 测试产品,还是内部的 A/B 测试工具,都或多或少借鉴了这篇论文的思想。

明年在学习方向上,有两个新的期望。一个是希望能够更偏向上层一些。之前读的很多论文都比较底层,是系统方向的论文,希望明年能够更加了解 CV,强化学习等等方向的研究工作。另外一个是加强对 Flink 等流处理框架的学习。流处理被提到的次数和场合越来越多,值得投入更多的时间来了解和学习。

今年的总结就到这里了,原本这个周末是打算造轮子的,因为家里经常跳闸,代码写起来体验太差,因此拿出了家里的上网本 XPS’13 把时间花在了写总结上。希望这篇总结不是为大家带来更多成长的焦虑,而是能够帮助到大家,跟大家分享今年中我看到的一些比较好的书籍和论文,我在遇到问题时的思考路径,给大家做参考。

License

  • This article is licensed under CC BY-NC-SA 3.0.
  • Please contact me for commercial use.

评论