导语

如今,「开源」在国内外已不是一个新名词,随着数字化转型、云原生、各路玩家的加入,开源生态日新月异。

除了早年已建立起庞大社区和丰富生态的 Docker、Nginx、Kubernetes 等开源项目,近年来,也涌现出一批优秀的开源项目,比如 Apache APISIX、Apache SkyWalking、TiDB 等,吸引了一大批有技术热情、喜欢开源文化的同学。

Apache APISIX PMC 成员王院生如是说,「参与开源,让我觉得自己终于与这个世界融为一体,不再是孤立的个体。」

两周前,院生以「我的第一次开源贡献给了 Apache APISIX 」为题,邀请了部分 Apache APISIX 的开源贡献者,回顾了他们与 Apache APISIX 开源网关项目的缘分,以及从新人成长为社区贡献者的心路历程。

他们当中有能独当一面的程序媛,有爱捣鼓的在校大学生,也有大年初一还在提交 PR 的技术狂热爱好者;他们或因公司项目结缘 Apache APISIX,或因纯粹喜欢开源社区的技术氛围而深度参与、持续贡献;他们有人曾经在开源上走过弯路,认为开源只是公开一段代码,后来才发现 The Apache Way 的文化是「社区大于代码」,社区赋予了贡献者价值,贡献者也赋予了社区价值。

徘徊在开源门口的你,可能想不通开源社区有何魅力,能吸引天涯海角素不相识的你我齐聚一堂,产生技术上的联结、思想上的碰撞,甚至结出难能可贵的友谊?如果你也对开源感兴趣,想一探究竟,请跟随这几位开源贡献者直击开源现场,听他们娓娓道来,揭开「开源给予个人的价值」、「我能为开源社区做何贡献」、「开源新人如何参与开源」这几个问题的谜底。

曦冉:首位女性 APISIX PMC 成员

1

加入 APISIX 的契机

时间来到 2020 年 8 月,当时我们团队计划基于开源项目做 API 网关。经过调研后我们选择了 Apache APISIX 开源项目,主要考虑到三点,一是 APISIX 功能匹配度较高且灵活,二是 APISIX 性能表现比较优秀,三是有 Apache 顶级项目的背书。

选定 APISIX 开源项目后,我们发现 APISIX 在不断向前迭代,社区在不断往前走,我们要如何使我们的内部项目快速跟上开源社区的脚步,把 APISIX 的迭代功能更好、更快地集成进来,使我们开发的代码更兼容 APISIX?

相信这是基于开源项目做二次开发的团队都会遇到的共性问题。思来想去,我们选择采用上游优先的方式来开发。在开发通用功能前,我们会先到社区提 Issue,发起充分的社区讨论,再形成方案,最终把代码提交到社区。如此一来,我们的内部产品就可以和社区向前迭代、协同进步。

2

上山打虎,过关斩将

初次接触开源的我,既不懂网关,也不懂开源社区。所幸社区中有很多非常耐心的 Mentor,比如致远,引导我了解项目,熟悉社区。我的第一个 PR 和 Apache APISIX Dashboard 国际化有关,原以为挺简单的项目,没想到困难重重。

难住我的主要有两点,一是社区沟通,二是测试用例。社区沟通方面,如何以英文书面的形式,在社区提 Issue,清晰且有逻辑地表达观点,并有效参与社区讨论,最终形成方案和落地?这对我来说是个挑战。

此外,我没有和陌生人远程协作的经历,再加上语言问题,怕引起误解,导致语言组织非常耗时。而且社区沟通是异步沟通,发起问题后不一定能得到及时的反馈,有时需要漫长的等待。

CI 方面,主要是 CI 跑不过,环境起不来。虽然我们都认为「CI 是个魔鬼」,但慢慢地,我们明白了,开源项目由全球开发者共同参与、共同贡献,要保证质量,需要靠 CI/CD 和社区的流程机制。

3

主动出击,不放过任何一个贡献机会

进入社区后,我发现一个特别好的贡献机会,Dashboard 上有个插件在路由和消费者两个模块都有配置页面,和技术文档明显不符。嗅到机会的我觉得这是个 Bug ,修复起来可能比较简单,必须把握住这次机会。

但因为对项目的了解程度不够,我没有把握住问题修复的方向。后来在社区大佬的引导下,通过投票,我们最终选定、落地了一个相对较好的方案。

整个过程下来,我感受颇深。一是就产品而言,我解决了一个 Bug,优化了产品,非常有成就感。二是就社区合作而言,仅仅通过一个开源项目,我就收获了很多志同道合的朋友。

泽平:年纪最小的 PMC 成员

1

闲不住家里蹲后,偶遇 APISIX

大家好,我是白泽平,商学院在读大四学生。遥想当年,2020 年 4 月,新冠病毒横行,我只能家里蹲,闲来无事,瞎捣鼓些小项目。因为要用到网关,所以接触到 Kong、APISIX 等开源网关项目。项目部署完,发现 Dashboard 有些问题,v1 版本的 Dashboard 有两个功能不完整。我当即提了个 PR,把它补充完整,这就是我在 APISIX 社区的开始。

后来 Dashboard 不断演进,进入到 v2 版本,我也做了些微小的工作。成为 Apache APISIX 的 Committer 后,我开始尝试贡献 APISIX 的插件,比如已经开发完的 Open Policy Agent 插件。

2

人气高但依旧低调行事的六边形战士

进入社区后,我从 Dashboard 的前端 JS 写到 Manager API 的后端 Golang,还用 Lua 写了 APISIX 项目和 Nginx 模块。

在社区中,我一直顶着「bzp2010」的 ID,解答大家的问题。院生问我:你帮了那么多人,社区中很多人都感谢你,你自己是什么感受,有没有飘?

我想说的是,我也是从开源新人慢慢成长起来的,从参与开源、加入社区,到现在,我从社区用户问题中发现了自己不少的知识盲区。在社区回答大家的问题,我很开心,既帮助了大家,又不断更新了自己的库存,慢慢地,懂得就多了。

就像院生说的,愿意泡在社区里的人,能力想不强都不行。因为社区在不停地问你那些比较重要的问题。你把这些问题解决了,时间长了,你就会觉得这些问题很简单。你只能被迫去看更高级的问题,社区在强迫我们做提炼。

阿杜:春节都不放过的狂热爱好者

1

观察许久才迟迟出动

我和 APISIX 的缘分其实早就开始了,当时我在 OpenResty 的 QQ 群里潜了很久,看到院生发了个链接,我马上就加进去了。看着 APISIX 开始发展,插件越来越多,人也越来越多,逐渐发现了一些问题。但很长一段时间,我只是作为一个旁观者,没有实际参与。

后来我提交了第一个 PR——Kubernetes 服务发现插件,当时我公司的内部项目有同样的需求,只是用的语言不同,公司内部用 C++,APISIX 开源项目用 Lua。对我来说,这个功能在逻辑上没有太大难度,只是需要学习下 Lua 的语法。

2

人类的悲欢不相通,但相似

虽然第一个 PR 在代码逻辑上没有太大难度,写代码也没花多少时间,但整个过程并不顺利,可以说是一波三折。从 21 年 7 月 8 日开始提 Issue,8 月提交 PR,大部分时间,我都在解决 CI 的问题。主要有以下三点:

  1. 第一,在不同环境跑测试用例,因为环境差异,且没有 Docker 或容器,无法跨文件系统读取文件,导致个别环境通过不了。

  2. 第二,IDE 工具的格式和社区的代码格式规范不一致,导致提交的代码常有空格、空行等格式问题,CI 跑不过。

  3. 第三,APISIX 的插件较多,安装依赖多,导致内存不足,机器宕机,测试过程超时。

相信大家在参与社区贡献时,或多或少都遇到过上述问题,但开心的是,在社区的帮助下,这些问题最终都能迎刃而解。

3

对开源新人的分享

基于我的开源经历,我有两点感受可以和大家分享。一是要勇敢一点,不要一直做旁观者。APISIX 刚开源时,其实有很多功能和 PR 可以做,但我一直没有参与,现在想想有点遗憾。

二是参与开源项目,一定要注意现有的代码规范。不要以为代码跑起来了,CI 过了,就万事大吉。当时院生给我指出了风格和代码结构上的一些问题,包括文件定义,随后我对代码逐渐调优,收获很大。

金卫:二话不说直接捐项目的大佬

1

第一个 PR 贡献给了 Apache APISIX

我的经历和大家类似,在原公司做网关技术选型时,我们选择了 Apache APISIX。因为在架构上,etcd 配置管理中心比关系型数据库更友好。在大流量场景下,不管是性能还是稳定性,Apache APISIX 的表现都更强大。

加入社区后,我的第一个 PR 贡献给了 Apache APISIX,做了一些 APISIX 的原生周边项目,比如 Apache APISIX Ingress Controller,负责 Ingress 项目的编写和落地实现,这个项目后来捐赠给了 Apache 社区。

2

参与开源的三种渐进式喜悦

从在门外,到跨进门内,再到成为 PMC 成员,我体验了三种不一样的喜悦:

  1. 当我在 Github 上提 Issue,社区成员答复了我的问题时,我会很开心;

  2. 当我开始回复其他成员的 Issue,帮他人解决问题时,我会觉得自己被需要;

  3. 当我提出的方案被采纳或设计模式被肯定,我感觉自己深深地融入了社区。

3

新人如何参与开源

参与开源其实没有想象中的那么难。首先要摆正认知,认知到开源不只是 Open Source,Apache 有个概念叫 「社区大于代码」。有了正确的认知后,可以尝试参与 Apache 等开源社区的顶级项目,从 Good First Issue 入手,建立起项目的知识体系,参与社区的互动交流。

其次是为开源做贡献,除了改 Bug、补全功能、优化功能、开发新特性或插件等代码贡献,还有非代码贡献,比如回复 Issue、更新维护或创作文档、布道宣传、修改 Typo、参与邮件列表讨论。

4

开源给予个人的价值

社区提供了一个开放共享的环境,当你在开源社区中,你会发现你远比自己想象得更「出名」。因为社区连接了你我他,为有共同需求或兴趣的我们提供了一个开放协同的创作平台。

我们可以在社区里贡献价值,并与其他成员共享价值。你会发现社区模糊了我们和技术大牛之间的距离感,我们有更多机会扩大个人的技术圈和人际圈。

小结

有些贡献者因为公司业务或项目需求与 Apache APISIX 相遇,有些贡献者因为个人兴趣与 Apache APISIX 相识。虽然大家和 APISIX 有不一样的缘分,但像我们本文中没有提到的兴望、刘朋、军旭、正松等其他贡献者一样,我们因社区积极向上的互动氛围,因为一句老话「饮水思源」,因为社区带来的归属感、价值感、成就感,因为热爱,加入了社区,留在了社区,依然活跃在社区。

社区也正是因为有了这些可爱的贡献者,才有一个健康的生态系统。大家可以在其中从事有意义的工作,快速成长,并且有动力、有能力持续成长,帮助维持社区的长久成功。这是一个相互被需要的过程。

听完这些开源贡献者的切身感受,想必徘徊在门口的你对开源社区有了更深入的了解,与其徘徊不定,不如跨进门看一看,身体力行。■

腾源会是腾讯云成立的汇聚开源项目、开源爱好者、开源领导者的开放社区,致力于帮助开源项目健康成长、开源爱好者能交流协助、开源领导者能发挥领袖价值,让全球开源生态变得更加繁荣。

想了解更多 Apache APISIX 相关内容,欢迎关注公众号「APISIX 云原生微服务网关」

期待你的「在看」

开源究竟有什么魅力?听完这 4 个故事你也许会明白相关推荐

  1. 【完结】听完这12次分享,你应该完成了AI小白的蜕变

    文章首发于微信公众号<有三AI> [完结]听完这12次分享,你应该完成了AI小白的蜕变 专栏<AI白身境>正式完结了,在这一个专题中,我们给大家从Linux的基本知识,讲到了深 ...

  2. 听完计算机讲座的感想,听讲座心得体会5篇

    听讲座心得体会5篇 讲座是一种教学形式,多利用报告会.广播等方式进行.以下是小编整理的听讲座心得体会,欢迎大家参考! 听讲座心得体会1 我认为一位师德高尚的老师,应该不只是爱正常的学生,还要学会爱每一 ...

  3. 听完计算机知识讲座后感悟,听专题讲座心得体会范文(精选10篇)

    听专题讲座心得体会范文(精选10篇) 我们在一些事情上受到启发后,不妨将其写成一篇心得体会,让自己铭记于心,它可以帮助我们了解自己的这段时间的学习.工作生活状态.怎样写好心得体会呢?以下是小编整理的听 ...

  4. 为什么计算机模拟不了人脑,为什么计算机永远不会拥有人类的意识?听完科学家的解释恍然大悟...

    原标题:为什么计算机永远不会拥有人类的意识?听完科学家的解释恍然大悟 人类是现在地球的霸主,是智慧生命.地球在6500万年前也有一类霸主生物,它们就是恐龙.可是恐龙尽管称霸地球1.6亿年的岁月,但是它 ...

  5. 端午回家,听完你是做程序员,你家里人是什么反应?

    端午回家,听完你做程序员,家里人什么反应? ▽▽▽ 做安卓底层? 那你们这个要做几年才能做到中上层? ●●● 打英语,偶尔打英文, 一天一两百行,有时候十几行, 一行大概三四块, 每天写得越多越不值钱 ...

  6. php的和谐脏话,大司马仅有的两次说脏话,听完网友笑出声,直播效果一片和谐!...

    原标题:大司马仅有的两次说脏话,听完网友笑出声,直播效果一片和谐! 大司马仅有的两次说脏话,听完网友笑出声,直播效果一片和谐! 其实主播这个行业非常的复杂,在这行业里,素质高的人也特别多,像一些素质低 ...

  7. 揭开后端开发-中间组件、内存数据库Redis的迷雾,听完瞬间豁然开朗丨C/C++Linux服务器开发丨中间件

    揭开后端开发-中间组件.内存数据库Redis的迷雾,听完瞬间豁然开朗 视频讲解如下: 揭开后端开发-中间组件.内存数据库Redis的迷雾,听完瞬间豁然开朗丨C/C++Linux服务器开发丨中间件丨组件 ...

  8. 详解5种红黑树的场景,从Linux内核谈到Nginx源码,听完醍醐灌顶丨Linux服务器开发丨Linux后端开发

    5种红黑树的场景,从Linux内核谈到Nginx源码,听完醍醐灌顶 1. 进程调度CFS的红黑树场景 2. 虚拟内存管理的红黑树场景 3. 共享内存slab的红黑树场景 视频讲解如下,点击观看: [干 ...

  9. 红黑树在linux中的3种应用场景,听完受益匪浅

    红黑树在linux中的3种应用场景,听完终身难忘 1. 虚拟内存管理 2. 进程管理 调度器实现 3. 网络协议栈的红黑树 [Linux后台开发系列]红黑树在linux中的3种应用场景,听完受益匪浅 ...

最新文章

  1. python如何调用参数配置文件_python参数设置
  2. 使用Physics_Body_Editor获得json文件的类
  3. 读《大道至简——失败的过程也是过程》有感
  4. BAT 批处理命令 - 文件批量复制、克隆功能实例演示
  5. 【Python】程序的分支结构之异常处理
  6. Python计算一个文件中大写字母的数量
  7. bootstrap 模态框满屏_解决Ueditor在bootstarp 模态框中全屏问题
  8. 设置 JDK环境变量(Windows)
  9. HBuilder的快捷操作
  10. 软件工程---16.基于构件的软件工程
  11. 剑指offer之替换空格
  12. 学习node js 之微信公众帐号接口开发 准备工作
  13. 广播接收者的特点和版本差异
  14. radius源码下载
  15. 15个素材下载网站,从此不做「伸手党」!
  16. lcl手术和飞秒区别_全飞秒、半飞秒、ICL、TPRK...教你分清近视手术区别
  17. linux 硬盘开启apm,硬盘 APM 设置
  18. 车管所服务器维护还能考科目四吗,车管所可以预约科目四吗
  19. 在工作站计算机中创建策略,禁止任何计算机访问本机 8000 端口
  20. spring-boot-maven-plugin:3.0.0:repackage 报错【解决】

热门文章

  1. 对不起,精英主义与特斯拉精神背道而驰
  2. anaconda下使用python怎样实现图像增强_如何用anaconda进行python开发
  3. html页面设计参考文献英文,网页设计网站参考文献(国外英文资料).doc
  4. VSCode配置文件“.vscode/c_cpp_properties.json”不断被覆盖的原因及解决方法
  5. Spring Cloud 异常“ Caused by: java.net.UnknownHostException: discovery.host ”
  6. 从罗永浩进军AR聊开
  7. R语言并行计算 deviation of null beta diversity(beta多样性零偏差)
  8. 统计自然语言处理梳理二:句法分析
  9. 活码生成器是什么?怎么用活码生成器制作活码?有没有免费的活码生成器?
  10. CF-Predictor安装教程