2022 年秋招的凌冽寒风刮到了 2023 年的春招实习,经过漫长又折磨的面试流程,终于有幸得到了珍贵的阿里云 OSS 对象存储实习 offer。或许是因为阿里系的集团拆分战略调整,尽管在三月底就完成了面试流程,主管也在四月初给了明确的通过,意向书还是拖到了五月中旬才发出,等入职已经是五月底了。
当初煎熬的等待过程中,四月中还拿了字节的 SDN 部门实习 offer 以及 RisingWave 的存储引擎实习 offer,对我来说都是很大的诱惑。但最后还是对这个能跟 AWS S3 掰手腕的系统的技术架构更感兴趣,所以还是选择了这个老牌产品。
在学校的时候也仔细阅读过阿里云在 FAST ’23 上发表的介绍盘古 2.0 的文章,也曾经投递过盘古部门,不过由于个人感觉盘古过于底层,可能和在学校的科研项目也比较接近,加上论文也已经把架构介绍得很完整了,所以选择了更贴近业务,公开资料也更少的 OSS 部门。
当然,进来之前也担忧 OSS 作为一个已经沉淀了十多年的成熟产品,新人会不会没有什么可以做的新东西。等真正开始实习并且大致了解 OSS 背后技术原理以及当前的用户需求后,发现其实我的担忧是多余的。哪怕是 OSS 最基本的桶管理以及对象存储以及读取的功能,面对爆发增长的数据量和数据性能需求,也会暴露出老架构的局限性,这里面就有很多性能优化的点可做;而在数据存储之上,有各种各样的增值功能(大部分对标 S3),例如跨区域复制、数据湖生态、HDFS 生态、对象函数计算等功能开发和优化也是还有很多问题等待解决;多种多样的存储介质,磁带、ZNS SSD、SMR HDD 等让存储成本有进一步优化的空间,也带来了软件层面的适配问题;对于专有云、私有云的部署场景也催生了针对小规模硬件集群的软件架构调整需求。所以,十几年的沉淀并不会掣肘开发者,其沉淀的首屈一指的数据规模、五花八门的用户需求反而是 OSS 生命力所在。
虽然有许多面向用户的需求,但和淘宝之类的系统并不一样,OSS 的需求是可以长期保留的,而不是像购物节大促一样生命周期极短,并且许多需求也具有相当的技术挑战性;而盘古等底层技术又过于接近硬件,脱离了需求后演进较慢,接口变化也不大,更多的时间在性能优化和硬件适配上;EBS、NAS 等则并不提供公网服务,和虚拟机 ECS 服务捆绑得更紧密。另一方面来说,OSS 作为低成本大容量的存储,往往是数据的最终流向。例如虚拟机或者块存储的快照、各种日志的归档、各种媒体文件的存储,即使是现在最火的 AI,数据集和模型权重最终也是会存放在对象存储中长期存储。所以,在可见的未来,对象存储仍有顽强的生命力。
就和 ChatGPT 极简的用户界面一样,OSS 只需要通过简单的 HTTP 请求就能读写数据,不需要格式化、不需要预分配空间、随存随取、容量无限、成本低;而在最简单的用户交互背后,往往是最复杂的技术在支撑。由于使用了廉价的硬件,如何在不可靠、低性能的硬件上构建出可靠、高效的系统变为一个非常有挑战性的问题。例如,硬盘可能随时达到读写寿命而下架,需要多副本保存数据来保证数据的可用性。但是多副本一方面会浪费空间,另一方面也会影响读写性能,这就需要设计高效的高可用机制,既能够满足数据安全性,又能提供不错的数据读写性能。另外,也需要设计有效的监控系统,及时发现并自动化处理硬件故障。
由于 OSS 也是直接提供公网服务,这里面也有很多网络安全相关的技术沉淀。和通用的安全防护不一样,OSS 的安全防护有更多结合业务的功能。例如,安全防护可以只针对某个被攻击的 Bucket 生效。
而对象存储的无限容量,实际上背后是有多套集群支撑的。一方面,机器过保等情况需要大批量下架替换服务器的情况下,需要将原有数据迁移到其他的集群;另一方面加入的新机器也可以参与到原有工作负载的平衡上。对于这些内部迁移的任务,也需要复杂的一致性算法设计来保证用户能够读写到正确的数据版本。
更多的技术细节可以参考《打造具备极致容灾能力的对象存储》 这篇技术分享文章。
接下来谈谈一些实习的感受吧。我分到的团队是服务层的跨区域复制小组,工作更多的是用 C++ 开发上层的业务逻辑。作为实习生,工作也是以完成小的功能需求、性能优化和修复一些 Bug 为主。跨区域复制牵扯到 Bucket 和 Object 的管理、网络、计算资源的调度,任务 SLA 保障和容错等,开发过程中需要利用到很多数据的底层组织结构还有 KV 存储的原理相关的知识。所以尽管不是做底层的 KV 存储工作,和一般的业务 CRUD 也有所区别。总体来说在整个产品处于一个中后台的位置,能接触到的技术面还是很广的,在工作的过程中慢慢就了解了 OSS 整体的业务和核心技术了,实习体验非常好。
团队的氛围还是比较融洽和纯粹的,大家的心思都是放在如何把产品做好以及打磨技术上,并不会有网上传言的 PUA 等现象。而我认识的一些在其他团队实习的朋友的体感则并不是那么好。在技术上,也有丰富和详细的技术文档沉淀,新人能快速地了解系统的整体架构和演进历程及其背后的一些设计过程等。由于是基础存储产品,对于代码质量的要求也是十分严格的,Code Review 和测试覆盖率等工程实践都执行得非常贯彻,这也是 OSS 系统稳定性的根基。和在学校写程序或者做项目随便手工测试不同,这边的测试都需要以代码形式固化下来,同时会有严格的回归测试保证新加入的代码不会影响旧的功能。对于新手或者实习生,就会出现开发功能可能只需要一两天,然后花上一两周甚至更长来 CR 还有补全测试。不过,对于代码正确性的保证还只是依赖于 CR 和测试覆盖率,导致线上还是会有一些 bug 的出现,和 S3 采用的形式化验证还有一些先进性上的距离。实习生的权限也很少,看不了内网的技术社区,有点可惜。不过短短几个月能把自己组内的技术细节吃透也已经受益匪浅了。
工作之余的话,组里偶尔会有聚餐活动,也有每周固定的羽毛球活动,下班时间也基本不谈工作(线上出问题需要 oncall 除外)。阿里云总部现在搬到了云谷园区,是真正意义上的荒郊野岭,周围只有工地、农田和山,也没有地铁,交通不是很便利。吃饭方面,食堂的话中规中矩,菜式还是挺多样的,但味道就确实一般般,价格在 20 元一顿左右;也有 KFC 或者和府捞面等商家入驻,价格就贵一些;园区太荒,也点不到什么外卖;聚餐也基本上要开车去几公里外才有繁华一点的商圈或者饭店。饮料店的话有古茗、星巴克、瑞幸、manner,虽然茶水间没有免费咖啡机,自费买咖啡提提神也是可以的。晚饭时间有 20 元餐券,可以去食堂吃,也可以拿面包牛奶走人,过时作废,不能累计。夜宵则是有 10 元餐券,同样是过时作废。总的来说,能满足大部分吃喝需求,不过选择不多。不知道以后那边会不会繁华起来。