夏天渐行渐远,秋天匆匆晃过,开源之夏2022在洁白如新的冬天如期收获了350 位同学的结项成果,这些同学也在开源软件社区留下了自己的足迹,感谢各位同学的支持。今年我们依旧按照最佳质量奖、突出贡献奖、最快进步奖、最具潜力奖四个角度评选出了具有代表性的20位优秀学生。
本次采访,我们邀请了突出贡献奖获奖者杨振华,分享他的经验。
姓名:杨振华
性别:男
年龄:25
学校:华东师范大学
--自我介绍--
1、首先请简单介绍一下自己。
我是杨振华,目前就读于华东师范大学数据科学与工程学院,即将硕士研究生毕业。
2、最开始是在哪里了解开源的,是什么让你决定参与开源?
最初了解到开源大概可以追溯到2016年大一。当时发现并注册了Github,对其的理解是可以下载到很多好用的工具、库。后来在使用过程中发现有些仓库中存在一些缺陷,也零星地提了一些PR。此外,部分开源社区会举办一些面向新contributor的活动,这也是我参与开源的契机。
3、之前做过哪些项目,请分享一个让你收获最大的项目。
研究生阶段我主要参与的项目包括优化异步检查点、使用异构处理器加速SQL执行等。其中第二个项目是我主导的,另外有一位同学参与。在经过约一年的时间后虽然有了一定的成果,但最终未达到预期的目标,令我比较印象深刻。从这个项目里面我收获到的是面对一个全新的领域或者问题,在项目进行时需要做好风险控制。在有了初步的想法以后应当快速实现一个粗略的原型以判断这种想法实际的可行性,随后再考虑根据在原型实现过程中的获得的体会进行完善或者重写。毕竟实际动手之前的分析可能无法覆盖到一些问题。
--关于开源之夏2022--
4、请简单介绍一下你在开源之夏2022中的项目。
我在开源之夏2022中负责的项目是来自Open Cluster Management(OCM)社区的Topology aware scheduling in cloud native multi-cluster/multi-cloud environments,主要解决多k8s集群下资源在多个故障域上的均匀分发问题。
OCM是一个CNCF沙箱项目,专注于面向多集群和多云的场景提供对于集群联邦的管理功能。具体地,用户可以声明需要被管理的K8s集群为托管集群并在OCM控制面上进行注册。随后,用户可以通过OCM的控制面下发K8s资源如Deployment到托管集群。此外,OCM提供插件机制从而支持多样化的功能。下图展示了OCM整体的主从架构。
在进行资源下发时需要考虑到调度问题。在OCM的语境下,调度是一个从全部托管集群的集合中选出若干个集群以进行资源下发的过程,由多集群控制面中的调度器placement-controller实际负责。在进行调度时,一个值得考虑的点是故障域。例如对于地域这一维度,托管集群可能分布在北京和上海两个城市。出于容灾、负载均衡等考虑,通常用户期望调度器在进行集群选择时均匀地选择位于北京和位于上海的集群。此外,故障域还可能是一个分层的结构,假设某个OCM控制面的实例管理位于多个国家的集群,用户可能期望调度器首先按国家其次按城市对集群进行均匀选择。
在本项目中,我在分析用户场景和需求的基础上设计和实现了进行均匀选择需要的CRD部分,并对placement-controller进行了修改,最终在OCM社区会议上进行了该功能的演示。
5、在申请前有做那些准备吗?
由于我在研究生阶段的主要研究方向是数据库系统和大数据处理系统,在校内进行的项目也聚焦在这两个方向上,在此之前我对云原生的了解其实相当有限。所以我先根据互联网上公开的资料学习了K8s的架构、使用和部分二次开发的知识,并对包括Service Mesh等其它云原生涉及的领域进行了了解。在开源之夏开放选题以后我结合个人兴趣和与导师的交流初步决定申请的项目。随后我结合官方文档对OCM进行了学习,并调研了课题在其它集群联邦系统如Karmada中的实现。
6、是在哪里了解到开源之夏活动的,你期望通过参加活动得到哪些提升?
我最初对开源之夏活动的了解是来自实验室同学转发的微信公众号文章。作为研三的学生,通过参与活动,我最期望得到的是一段云原生领域的经历,从而支持我从数据库和大数据系统“转行”到云原生领域。其次,我期望在开源这样一个特殊的协作模式下提升沟通等软实力。
7、在项目中遇到最印象深刻的问题是什么?如何解决的?有什么收获吗?
在项目中遇到最深刻的问题其实是API设计上的分歧问题。解决的方案主要是借助代码评审、Slack、视频会议等方法进行充分的沟通以达成共识。作为学生以及项目的参与者,在此过程中应当充分提出自己的想法,同时听取社区导师的意见、分析意见背后的本质原因,从而学习到一些实际项目开发中的经验。例如,在API设计方面应应当考虑用户使用的简单程度和可理解性,同时留有未来进行进一步扩展的空间。
--关于开源和学习--
8、恭喜你这次被评选为突出贡献奖,之前参加过开源社区吗,通过这次活动,你对开源社区有哪些认识?
我之前有开源贡献的经验但没有深入了解开源社区。通过这次活动,我认识到开源社区的工作机理和流程。总的来说,我认为开源社区是由一群分布在全球各地、但有着共同目标和极强自驱力的人,借助各种高效的在线协同工具完成工作的一个松散的组织。
9、分享一个你喜欢的云原生相关的开源项目吧。
我目前在学习CNCF孵化项目Dragonfly。Dragonfly主要解决大规模镜像下载、远距离传输、带宽成本控制、安全传输等问题。特别地,Dragonfly通过P2P传输技术、CDN缓存技术和动态压缩等技术优化了镜像分发的性能。
10、开源对你的学习有哪些帮助,分享一下参加开源的心得吧。
我认为参与开源项目是一个很好的将课内学习到的理论知识与最新的工业界实践进行结合的机会。从开源项目的issue或者开源活动入手进行学习,比自己没有头绪地学习可以达成更好的效果。另外,对于研究生而言,在参与开源项目的过程中或许可以找到一些可以进一步进行科研的课题,对学业也有帮助。
11、英语能力在做项目时也是很重要的个人优势,给大家分享一下坚持学习英语的方法吧。
我其实没有刻意地保持对英语的学习,英语水平和成绩也并不突出。作为一个在境内高校就读的理工科研究生,我认为日常学习任务中对英语的使用(包括输入和输出)和锻炼在很大程度上能够支持开源协作时对英语的需要。其中输入包括日常听一些国外高校的英语课程如著名的数据库课程CMU 15-445、阅读本领域发表在国际会议上的学术论文等,输出包括使用英语进行的汇报和学术论文的撰写等。另外,像DeepL、Grammarly、Quillbot等工具对英语的学习和使用也有相当大的帮助。