vlambda博客
学习文章列表

从新手村出来,我在 Apache APISIX 社区发出了第一个 PR

当我看到那个 issue 后,就有种强烈的想要参与到社区的冲动。看了社区的新手指南后,我像从新手村出来的勇者,准备打怪。

—— Apache APISIX committer 屠正松

历时 282 天,屠正松(GitHub ID:tzssangglass)从开源社区的小白成长为了 Apache APISIX 的 committer。

2021 年 7 月 22 日,屠正松因为深度参与了 Apache APISIX 的多语言支持计划合作、与社区合作开发了让 Apache APISIX 支持使用 Java 编写插件的项目的初始版本等贡献,被推选为 Apache APISIX committer。

在一个平淡的下午,我们和正松连线聊了聊。因为疫情关系,居住在南京的他已经多日未外出。在没有和他聊天之前,我没有想到,胡子拉碴的他,竟然走过了这么曲折的路。

大学,我的大学

我大学的时候学的是通信工程,每天最开心的事就是踢球。现在有时候会想,如果能带着现在的记忆回到大学时光就好了。

正松在大学期间里面其实没怎么接触过编程,他当年其实有 C 语言的编程课,但是因为忙着踢球,挂科了。可是,他挂科之后的补考也没过,导致重修。最尴尬的是,他重修也没过,后来怎么办呢?毕业之前还有毕业清考。这可不能再挂了,于是正松就去图书馆去借了一本 C 语言的书来看。

“我当时心想,C 语言真的这么难吗?”正松说。

然后他就一直看一直看,看着看着就突然发现编程好像有那么点意思,他看懂了!最后他在毕业前顺利通过了考试。在毕业之后,找到了一份做程序员的工作。

“我本来都准备毕业回家找个厂上班了”,他半开玩笑地说。

彼时,他可能不会想到如今的他会成为数个知名开源项目的 developer,参与一些支撑着千万级并发流量的基础设施的开发。

出象牙塔记

在工业界,真实的业务场景和学校里学的很不一样的

正松的第一份工作就职于一家做穿戴设备的创业公司,从事智能手环的研发工作。正松和他的前同事们需要通过处理从智能手环上的获取的各种传感器数据,来完成对用户的心率、运动量、血压等的监测。

“工作蛮好玩的,因为在工业界,真实的业务场景和学校里学的很不一样的,很多东西都得从头开始学”,正松说。

有一天下班之后,这家公司的老板娘突然发了一条信息,说公司的员工暂时休假,什么时候上班等通知。

正松当时就觉得不对劲,怎么好好的上着班,突然就休假了?然后他立马打开招聘软件,开始找新的工作。后来才知道,公司的老板跟供应商有合同纠纷,公司短暂停摆了。

然后,正松便到另外一家公司从事后端业务开发的工作,学习业界规范、进一步增进技术。过了快一年,因为正松比较喜欢 Nginx、OpenResty、Netty 这类简洁和高性能的技术,他进入一家大公司的开发团队,从事中间件相关开发工作。

“在这家大公司,我做的离业务稍微远那么一点点,更偏向技术一些。“正松说。

正松接触 Apache APISIX 的时间是 2020 年 9 月份,那时候,他所在的团队使用的是 Kong,但是当时 Kong 无法完全满足他们的需求,于是他们便重新做网关的技术选型,试图寻找更好的方案。正松担任本次技术选型的负责人,于是他关注到了 Apache 基金会的顶级项目 Apache APISIX,进而接触了 Apache APISIX 的社区。

彼时的他,已经毕业三年多了。

出新手村

我可以给 Apache 基金会的顶级项目提交代码了!作为一个技术工作者,这是一种技术上的自信。

正松在开源社区的第一个 PR 是一个 enhancement(功能增强)类型的 PR,这个 PR 让 Apache APISIX 支持了多端口监听。

  • issue:https://github.com/apache/apisix/issues/1195
  • PR:https://github.com/apache/apisix/pull/2409

这个功能是正松公司需要的,在 issue 区也早有人提到,但是不知为何一直无人认领。之前,正松正好对这方面的知识有所了解,于是他想:”可以给 Apache APISIX 提个 PR 来 fix 这个问题。“所以他在 issue 里主动要求把这个问题指派给他。

他说:“当时我有一种强烈的参与社区的冲动,然后我看了一下 Apache APISIX 社区的新手指南,然后就像拿着武器从新手村出来一样,兴致冲冲的准备参与。”

选择了这个 issue 之后,正松开始在 GitHub 上面开始跟社区的伙伴讨论细节上的问题,像是配置端口的 style、实现的思路等。在讨论完之后,他开始动手实现。每天晚上下班之后去翻看 Apache APISIX 的代码,测试相关用例。在经历了三四个晚上的奋斗后,测试第一次跑通了!

当时正松内心非常的兴奋,马上按照那个新手指南的引导把 PR 提上去了。然后接受 Code Review 的意见,进一步修改代码。终于,在 10 月 18 号,PR 顺利地 merge 进了仓库。

“当时我非常的激动,感觉自己终于实质性地参与到开源社区里面去了。我可以给 Apache 基金会的顶级项目提交代码了!作为一个技术工作者,这是一种技术上的自信。”

这是正松在开源世界的第一个 PR。

在社区印象深刻的事

因为 etcd 有 MaxCallRecvMsgSize 的限制,就从 etcd 的源头去解决,这是最优雅,也是最适合的。

当我们问到,正松在社区印象最深刻的事情是什么的时候,正松想了想说,可能是一个和 bug 有关的问题:etcd 的 MaxCallRecvMsgSize 限制。

正松曾经被 etcd 限制返回体大小的问题折磨过,社区内也多次反映、讨论过这个问题,但在 Apache APISIX 上无论怎么处理都不是很优雅。

直到今年 4 月份,支流科技的一位小伙伴给 etcd 提交了 PR,最终解决了这个问题。正松听说这个消息时,感到非常的震撼,当时他没有想过这个事情会以这样的方式去解决。但是现在来看的话,这个方法确实是最适合的。

“因为 etcd 有 MaxCallRecvMsgSize 的限制,就从 etcd 的源头去解决,这是最优雅,也是最适合的。这是很棒的跨社区合作的示例”,正松说。

Sir, this way

大家分工合作不同,但是都是在为开源做贡献。

正松说,他刚开始参与社区的时候,把当时能看到的 APISIX 文档大部分都过了一遍。所以当时在所在公司工作的时候,同事问他问题,他虽然并不是很清楚,但是他清楚项目的文档分布情况,直接把文档找出来看一下,就大概知道是什么问题了。他认为看文档是熟悉项目的一个合适的方式。

Apache APISIX 的项目官网上,有完善的包括如何提 PR 的新手指南。如果想参与社区的话,可以先把官网和 Github 上的主要的文档都看一下,对项目有基本的了解,也清楚项目的文档分布情况,后面再按需索引文档。

如果想在代码方面做贡献,或者参与设计的话,一些 Ngnix 或者 OpenResty 方面的知识的储备是必要的。包括看他们官方的文档及和代码,学习他们对于相关 feature 的实现等。

正松说:“我觉得这一步是无法跳过的。”

当然,你可以以使用者的身份,去参与到社区里。比如说你觉得文档有问题,或者说你按照文档去实践的时候,发现并不是那样,你也可以去提一些 issue 指出这些问题。

大家分工合作不同,但是都是在为开源做贡献。

社区欢迎所有人

但这样做更好

正松说,大家都在开源社区,首先要注意的就是要遵守社区的一些规矩,和社区的小伙伴平等交流。

交流时要注意的点可以分成两种。

第一种是,假如你遇到了一些问题,那你应该尽量准确地描述问题,提供可复现的用例。这个其实是最受欢迎的,或者说最能提高沟通效率的一个方式。如果你能把一个问题描述的很清晰,那大家回答问题的效率自然会非常高。

第二种是,如果是提出想法,解决问题等,在动手做之前,对于有歧义的点,需要在公开的场合,比如 issue ,邮件列表等上面讨论,在社区内达成一致,取得共识之后,再开始做。

关于 Apache Way

共识也会更新,它是社区推动项目前进的一种力量。

正松理解的 Apache Way,是社区大于代码。

他认为,社区本质上是人与人之间的合作,大家分工合作,各司其职。但是在合作和各司其职之前,大家是需要形成一些共识。

共识是一点点积累起来的。社区参与者们抛出一个个问题,社区内会讨论,辩驳,验证,直至最后解决这些问题。在这个过程中,共识在社区内慢慢形成,共识可能是规范,也可能是边界,或者其他的形式。共识也会更新,它是社区推动项目前进的一种力量。这个过程带有一些理想主义色彩。

社区的共识其实比你做代码贡献更重要,因为有了共识之后,后面去回溯某一个改动的点的时候,会更加清晰,知道这个改动的起源和当时的视角。

最后

最后在关麦之前,我们请正松给我们推荐一些东西。正松想了想,说:“我推荐了一部德国电影,跟社会工程学相关的《我是谁:没有绝对安全的系统》,和一本书,孔飞力老师的《叫魂:1768年中国妖术大恐慌》。希望大家在忙碌的工作中,也不要忘了充实自己的精神生活。“

这就是这次的采访啦!下回,我们会采访哪位社区的小伙伴呢?快来 Apache APISIX 社区瞧一瞧吧!没准,下一位 committer 就是你!

关于 Apache APISIX

Apache APISIX 是一个动态、实时、高性能的开源 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 可以帮忙企业快速、安全的处理 API 和微服务流量,包括网关、Kubernetes Ingress 和服务网格等。

全球已有数百家企业使用 Apache APISIX 处理关键业务流量,涵盖金融、互联网、制造、零售、运营商等等,比如美国航空航天局(NASA)、欧盟的数字工厂、中国航信、中国移动、腾讯、华为、微博、网易、贝壳找房、360、泰康、奈雪的茶等。

200 余位贡献者,一同缔造了 Apache APISIX 这个世界上最活跃的开源网关项目。聪明的开发者们!快来加入这个活跃而多样化的社区,一起来给这个世界带来更多美好的东西吧!

  • Apache APISIX GitHub:https://github.com/apache/apisix
  • Apache APISIX 官网:https://apisix.apache.org/
  • Apache APISIX 文档:https://apisix.apache.org/zh/docs/apisix/getting-started
APISIX 云原生微服务网关
APISIX 是一个云原生、高性能、可扩展的微服务 API 网关
47篇原创内容
Official Account

点击阅读原文,跳转 Apache APISIX 的官网