参与开源,Offer拿到手软 -- 来自一名2019阿里巴巴编程之夏同学的亲述
参与开源,Offer拿到手软
— 来自一名2019阿里巴巴编程之夏同学的亲述
作者:廖春涛
作者简介:
- 阿里巴巴 nacos 项目管理委员会成员
- 阿里巴巴 spring-cloud-alibaba 项目提交者
- 阿里巴巴 nacos-spring-project 项目维护者
- 阿里巴巴 nacos-springboot-project 项目维护者
- spring-cloud/spring-cloud-sleuth 项目贡献者
- 阿里巴巴云原生日讲师
- 2019年第一季阿里巴巴编程之夏学员
- 2018年中国大学生服务外包大赛三等奖(国家级)
- 2017年大学生创新创业大赛校级立项
- 2017年杭州电子科技大学互联网+大赛二等奖
起源
不知不觉大学四年时光就过去了,而我的毕业,不仅仅是作为一名普通应届毕业生,同时,也是作为一名开源项目的PMC。
与开源结缘是在大三上的时候,那时与同学承接了一个商业外包,需要使用一个WxJava的开源项目。在项目交接之后,我打算用golang重新翻译此项目,顺便去学习了一下。在学习过程中,我在发现了几个小问题的过程中,贡献了一个优化,由此算正式与开源结缘了。
真正完全参与开源,是从大三下开始。那个时候经常和学长去参与各种技术讲座,比如Apache Flink、Apache APISIX、Service Mesh、分布式DB、服务治理等等。在四月的一天,学长推给我了一个有关服务治理的开源项目社区群,而我正好打算从理论到实践,将所学真真切切应用在实际当中。从这一天开始,真真切切的开始投入到开源当中。
前进
参与开源,其过程就好比RPG游戏一般,一路升级打怪。从最开始的在SDK侧新增简单的增删改查功能,到参与维护两个Spring生态组建的维护。这期间,我重新学习了Spring内部的原理。在此期间,我对于Spring的整个设计理解更近了一步,彼时我能够更加灵活地运用Spring提供的各种钩子去实现用户对于组件的需求。
期间比较自豪的事情是发现了spring-cloud-seluth的bug,提交PR并进行了fix。其实发现这个问题的过程是比较曲折,最开始是有用户反馈zipkin无法与服务治理中心进行整合,于是我带着疑问,通过资料查找和研究源码等路径,发现zipkin从某个版本开始,他们自己写了一个webserver,因此无法使用spring相关的能力将zipkin-server注册到服务治理中心,因此我进行了一个简单的测试,将注册时机进行了简单的调整。但是由于过于定制化,因此没有进行回馈(其实问题的根本原因倒不是这个),只是将方案告诉给有此问题的相关用户。后面再持续跟进此问题时,发现仍然有zipkin与服务治理中心存在整合问题,但是这次是客户端,因此进行长时间的问题跟踪调试,最终确定问题的原因,接着进行反馈,最终提交PR进行修复。这一次的经历,让我学习到解决问题不应该只会埋头谷歌或者百度,而是应该从问题本身出发,去跟踪、观察问题,并成功解决。
突破
有了一次的成功经验,我变得更加有信心了。后面,我从客户端转战服务端,真正切入服务治理中心的核心。而此时,我已经成为一名committer了。为了能够更好地参与项目,同时符合committer的身份,我重新开始学习项目的源码、设计,纠正了许多第一次看源码时出现的理解误区,对于某些功能模块代码的设计有了更深的理解。同时,将高可用思想穿插于源码中,令我后面参与实习时,参与项目改造时,能够有更多的思考。 成为committer之后,不知道是不是初生牛犊不怕虎,我接受了内核模块的重构以及去MySQL依赖这两个艰巨的任务。其内核重构设计了一致性协议层的抽象设计、寻址模式的统一、事件机制的统一。其中,最难的莫过于一致性协议层的抽象以及设计了。其实,我对于一致性协议了解的并不是很多,只是知道CAP、BASE理论而已。但即使如此,我在接过任务之后,就开始各种开源项目源码的探究,比如JRaft、Etcd、Memberlist、hashicorp/raft等等,同时下载了各类的电子PDF进行学习,为我后面的工作打下了一定的理论基础。
探索
待秋招以及实习结束之后,我正式开始了相关任务的工作,设计文档编写、基础理论支持、相关项目设计学习、代码编写,其实就是一个需求,从成立到最终产出的全过程,综合性挺强的。这个时候的代码设计不再是随心所欲了,将一个单机的关系型存储变为一个分布式强一致性的关系型存储,其必须保证数据的一致性、事务的ACID性质,需要结合大量的资料以及前人项目的设计进行参考,当时提出的思路方案就有四五种。其中,为了从数据库内部解决这个问题,我还去学习了apache derby的源码——了解到插入一条数据的流程是怎么样的以及其master-slave机制的实现。可以说,通过这些的前期准备以及与其他大佬们的交流,令我后面的代码编写变得更加游刃有余。
感想
对于应届生的我来说,参与开源项目并且成为committer,也算是我的一项优势吧,也正因如此,我在秋招的时候基本是面试一家,收获一家公司的offer,其中也不乏SP。
参与开源项目,是一个将理论付诸于生产实践的有效途径,它让你需要考虑各种因素,比如接口设计、新老版本的数据兼容、可扩展性、边界因素的思考等等,同时还会使得自己知识面的横向以及纵向的延伸;不仅如此,参与开源的过程中,你需要和世界不同的开发者进行思想的碰撞交流,有时候通过交流,能够使得自己对于自己的设计有更深的认识,发现设计上的不足,同时也锻炼了自己口述、文字的能力。
虽然自己没几天就要去某大厂工作了,但是还是希望自己能够保证工作质量同时深入学习工作方向内容的空闲时间,保持对开源参与的热情,从开源中学习,并将自己学习的知识回馈当中。
最后汇报一下今年阿里巴巴编程之夏的最新进展。经过 3 轮的严格筛选,本次阿里巴巴编程之夏共有 29 名同学突出重围,马上开始 coding 的夏天啦!献上部分同学“开学照”,唯有热爱,可抵岁月漫长,加油,同学们!
Nacos 团队招人啦~ 欢迎21年毕业同学加入阿里云,共建云原生!
一、招聘对象
2020年11月- 2021年10月毕业的应届毕业生
二、部门介绍
我们是谁?
云原生致力于打造世界上最先进、稳定的云原生基础设施,是阿里云最核心的部门之一。 我们的目标是让云成为成本最低,效率最高,稳定性最强的应用运行环境。在这里,我们设计超大规模容器与调度系统,发挥出云的极致弹性能力;我们构建高性能微服务架构,提供云端应用的无限拓展的能力;我们打造标准易用的 PaaS 平台,让云上研发变得简单、可控。 在这里,你会参与到容器、Kubernetes、Service Mesh、Serverless 等最前沿的技术研发与探索中来;你也会与 CNCF TOC 和 SIG 联席主席, etcd 创始人、K8s Operator 创始人等组成的国内最顶尖的云原生技术团队一同工作。 在这里,你会参与到全球最顶级的开源项目(如 Kubernetes、Containerd、OAM、Apache Dubbo、Nacos、Arthas)研发工作中,一同拓展云技术的边界,既赋能阿里巴巴全球经济体,更服务全世界的开发者用户。
团队大咖
- 丁宇(花名:叔同,研究员),云原生应用平台团队负责人。2010 年加入淘宝,9 次参与双 11 作战,阿里高可用架构、双 11 稳定性负责人,阿里容器、调度、集群管理、运维技术负责人,推动和参与了双 11 几代技术架构的演进和升级。
- 张瓅玶(花名:谷朴,研究员),负责集群资源管理和利用率优化。之前在 Google 基础设施事业群的集群管理部门工作了 5 年多,并领导了资源管理和优化调度团队,负责了 FlexBorg, Autoscaling 等多个产品。加入 Google 前在加州大学伯克利分校从事智能系统的研究工作,本科和博士毕业于清华大学。
- 易立(花名:微垣,资深技术专家),目前负责阿里云区块链服务和容器服务的研发工作。之前曾在IBM中国开发中心工作,担任资深技术专员;作为架构师和主要开发人员负责或参与了一系列在云计算、区块链、Web 2.0,SOA领域的产品研发和创新。本科和硕士毕业于北京大学。
- 李响(资深技术专家),基础软件开源方向战略负责人,CNCF 全球 9 位 TOC 之一。前 CoreOS 分布式项目主管,负责 Kubernetes、etcd 等分布式系统相关项目在 CoreOS 的开发工作,他的主要兴趣在于分布式一致协议、分布式存储、分布式系统调度等,开源项目 etcd 作者。
- 张磊(高级技术专家),Kubernetes项目资深成员和联合维护者,主要关注容器运行时接口(CRI)、调度、资源管理和基于虚拟化技术的容器运行时等特性,共同负责Kubernetes上游和阿里集团大型集群管理系统的工程工作,曾就职于微软研究院(MSR)和KataContainers团队。
三、岗位要求
- 本科及以上学历,计算机、数学、电子工程、通信等相关专业;
- 具备扎实的数据结构和计算机系统基础,精通一种开发语言;
- 对基础软件充满热情,具备较好的动手能力和技术热情,有成功的研究型或实战型项目技术成果落地者优先;
- 关注开源技术,有开源贡献者优先;
- 快速学习,不断突破技术瓶颈,乐于探索未知领域,随时准备好去面对新挑战;
- 良好的团队合作精神,能够做到严谨、皮实、乐观。
四、开放职位
- Golang研发工程师
- JAVA研发工程师
- C/C++研发工程师
- 基础平台研发工程师
- 前端开发工程师
五、工作地点
杭州/北京/深圳