从开源小白到 Apache Member,我的成长之路

我们走过的每一步路,都会留下印记,越坚实,越清晰。

近日,Apache 软件基金会(ASF)官方 Blog 宣布全球新增 40 位 Apache Member,张乎兴有幸成为其中一位。

目前,全球共有771位 ASF Member,中国仅13位。本文将分享作者从0基础的开源小白,一路走来的感触,希望把期间的经历分享出来,让更多的人看到,世界开源舞台的中国力量。只要有持续的付出,总会有所收获。

初次参与开源

2014年,我加入阿里巴巴中间件团队,开始接手集团应用容器的维护工作。当时集团的应用容器绝大部分都是基于 JBoss,老旧且无人维护,另外有一小部分跑在 Jetty 和 Tomcat 之上,当时中间件团队维护了 Tomcat 的一个私有分支,最大的目标就是要统一所有集团的应用容器为 Tomcat。而在那之前,我从未接触过 Tomcat 的开发和运维,对我来说,挑战很大。然而,更大的挑战来自于团队大 leader 提出的,在当时看来几乎是无法实现的目标:成为 Apache Tomcat 的 committer。

要知道,作为 Apache 的核心项目之一,Tomcat 自1999年发布第一版以来,一直是开源届和 Apache 基金会的明星项目,至今仍然在应用容器领域市场占有率保持第一,历经20年发展,依旧热度不减。Tomcat 历经这么多年的发展,却从未出现过一位来自中国的 committer。而我们小团队只有4个人,根本没有任何开源的经验,也完全不知道从何做起。团队 leader 问我们,谁愿意挑战一下的时候,我也没有多想,就承担了下来。

就这样,我开始了自己的 Apache 开源之旅。

说实话,一开始,自己并没有太多的思路,于是开始反复浏览 Tomcat 官网,希望能够查询到一些有用的信息。所有的 Apache 项目几乎都会有新用户指南,介绍如何参与到此开源项目当中,Tomcat也不例外。很快,我从修复 bug 开始,第一个 patch 是修复一个Websocket 测试用例失败的问题,修复该问题涉及到了对代码的一些重构。

还记得当时提交之前我非常谨慎,和 leader 一起反复讨论了很多次,终于形成了一个比较满意的方案。提交给 Tomcat 社区之后,很快,社区便有了响应,并合并了我提交的补丁。**第一次提交便获得了认可,心里很开心,紧张的情绪也缓解了。看到 Tomcat 的 release note 里面出现了自己的名字,真的非常开心。
**

Apache Roadshow China

2015年10月,我有幸在北京参加了 Apache Roadshow China 的活动,算是第一次和Apache 基金会有了亲密接触。在大会上,亲眼目睹了时任 Apache 基金会主席的 Brett Porter、Apache 基金会副总裁 Niclas Hedhman 等大牛们的演讲,以及在 Panel Disussion 里面,和他们,以及几位来自中国的 Apache 成员,一起探讨社区领导的开发流程等。

当时觉得自己离他们似乎非常遥远。

2015年的时候,国内参与 Apache 社区的几乎全是在外企工作的华人。而如今来看,国内公司参与开源的程度已经有了显著提升。这次参与中国路演,有幸和 Niclas heldman 做了些交流,我问了他一个问题:

“我正在参与 Tomcat 社区,如何才能成为 committer?”

他给了我一些至今对我影响依然非常深远的建议:参与社区讨论,从简单的新手任务入手,修复 bug,以及参与 release vote。这么多年过去了,这些建议依旧适用。

Tomcat Committer

尝到了贡献的甜头后,团队的目标也有所调整。内部版本的 Tomcat 和开源版本的结构要保持完全一致:

使得合并开源 Apache Tomcat 变得非常容易;

内部做的增强也更加方便合并到社区。

后续向社区的贡献,主要来源于三个方面:

第一:阿里内使用 Tomcat,在大规模、高并发场景下遇到的问题修复。

比较典型的是当时无线网关应用采用的是 Tomcat NIO+AsyncServlet 的架构,作为一个入口应用,曾经因为Tomcat 在高并发下的异常出现过一个比较大的故障,后来排查这个问题花了非常多的精力,最终彻底修复了这个问题。详细的排查过程记录在《逆流而上-阿里巴巴技术成长之路》一书中的《山洪暴发,高流量触发 Tomcat bug 引起集群崩溃》。修复方案也一起提交给了 Tomcat 社区,虽然改动量不大,但凝聚了团队相当多的心血。

第二,Tomcat 大面积在阿里铺开时遇到的问题修复。

例如,发现了一些不符合 Servlet 规范的行为等,包括应对双十一时所做的一些优化、并行类加载等等。

第三,主动参与开源社区,针对一些一直存在的问题的修复。

经过一年多的持续投入贡献,2016年8月23日,在一个平常工作日的上午,我打开邮箱,看到一封来自 Tomcat 社区核心开发、Java EE 规范专家组成员、时任 Apache 基金会董事会成员 Mark Thomas 的来信,邀请我成为 Tomcat Committer。打开邮件的那一刻,感觉自己的心都在颤抖,激动之情有点不能自已。当时的确出乎了自己的意料,没有想到梦想的那一天真的会到来。

Tomcat PMC Member

成为 Committer 之后,有了代码的直接提交权限,其实意味着更大的责任。

那一年,Tomcat 已经成为了阿里内部应用容器的标准,集群的规模在全球范围内都是领先的。而我也并没有停止参与社区的贡献,直到2017年,ApacheCon 北美大会即将在5月美国迈阿密召开,收到了 Call for participation 邮件的时候,我突然萌生了一个想法:

为什么不把阿里巴巴在大规模高并发下遇到的挑战,在 ApacheCon 大会上分享呢?

每年的 ApacheCon,基本都会为 Tomcat 开设专场「TomcatCon」。之前从来没有在国外大会上分享的经验,也不知道能否被大会接受,我怀着忐忑的心情提交了提案,也没有抱太大的信心。直到那年3月,我收到一封邮件,通知我的提案被 ApacheCon 大会接受了,那种被认可的感觉真的很棒。

在5月份的大会上,我有幸见到了经常在社区里面交流却素未见面的一群开发者,比如来自英国的 Mark Thomas、来自美国的 Christopher Schultz、来自法国的 Jean-Frederic Clere等等,他们都是 Tomcat 社区的顶尖专家,有的甚至10余年来一直参与 Tomcat 社区的贡献。

和之前邮件讨论起问题来非常的直率、甚至是严厉的印象不同,他们都非常的亲切,演讲当天也在场下默默地支持我,演讲很成功,让世界看到了一个中国企业在贡献 Tomcat 社区所作出的努力,我觉得挺骄傲的。

演讲第二天的晚宴上,气氛很轻松,台上正在进行着闪电演讲,Mark 拿着啤酒走过来和我说,想邀请我成为 Tomcat PMC Member。天啊,我完全没有想到能够和面前这群大神们站在同样的位置上,于是很开心地接受了。

结缘 Dubbo

2017年,阿里重启了 Dubbo 的开源维护工作,而团队正好承担了这一重要使命。

Dubbo 在停更后,社区的很多用户只能选择 fork 分支,自行维护。重启维护之后,需要思考的问题是,社区会不会有类似的担心。因此,团队决定把 Dubbo 捐献给 Apache 软件基金会,希望能够通过“社区大于代码“、“公开透明“、“共识决策“等Apache 之道,来打消开发者们的顾虑。

已经有过几年 Apache 社区参与经验的我,自然地承担起帮助 Dubbo 进入 Apache 基金会孵化的工作,从联系导师到修改提案,终于,Dubbo 通过了 Apache 孵化器的社区投票,正式开始孵化。那天是2017年的大年三十,我坐在家里的电脑前,发送出正式投票结果邮件的那一刻,我在想,这注定是个值得铭记的日子。

在 Apache 孵化器中孵化,就像一个浪子在江湖上横冲直撞了很多年后,突然想静下心来开始求学,自然要循序很多规则,也会有很多文化和意识心态上的冲突。**我开始思考如何能够帮助 Dubbo 更好地践行 Apache 之道,这里面有很多东西需要做。

**

Dubbo 和其他项目不同的一点是,Dubbo 在加入 Apache 之前,已经是一个巨无霸级别的项目了,上万的star、庞大的社区、国内大规模被采用,社区一天的活动量所发送的邮件就会让导师觉得无所适从,简直没有办法看了。

如何能让这个巨无霸遵循 Apache 之道来发展,成为了一个很大的挑战。

有一个很鲜活的例子,当时社区在关注:“问题的讨论是应该在邮件列表上进行还是在Github issue上进行?”

Dubbo 的用户早已经习惯了在 Github issue 上讨论,但是导师之一的 Mark 却指出,邮件列表仍然是这个星球上最为普适的通讯工具。因为世界上仍然有一些国家,在某些环境下,上网的网速可能只有几十k/s,甚至只能拨号上网。

如果在 Github 上讨论,对于这些网络环境不佳,却想参与社区的人就是灾难性的。或许我们可以放弃那部分用户,但这并不是 Apache 的价值观。类似的例子还有很多,我有点遗憾没有及时把他们都记录下来,会尝试在另外一篇文章中分享。

第一次的 release,是孵化过程中很重要的一个里程碑。在我看来,release 的意义远大于代码层面的工作,还包括了准确的 License 和版权声明、符合规范的代码及依赖、准确一致的签名等。Dubbo 花了很多的时间去准备,也把整个过程完全的文档化,孵化过程中,由7位不同的 Release Manger 轮流负责,确保不同的人都可以完成发布。

孵化的过程中,知识产权清理也是一个重要的环节,Apache 对于商标和 License,有着近乎严苛的要求,每次 release 的时候都会仔细检查,最典型的例子就是 github.com/dubbo 这个 group。在我们看来很正常,但是在 Apache 基金会的视角来看,由于 Dubbo 这个商标已经被转移给 Apache,任何第三方的使用都会构成侵权,因此也是不被允许的。最终的解决方案是把这个 group 下的所有项目清空,一部分迁移到 Apache,另一部分迁移回其他 group。

其他还有很多问题,例如,发展社区 PMC member/Committer、举办一场符合规范的Meetup 等等,有机会在单独的文章中分享。

成为 Apache Member

在 Dubbo 即将毕业的前夕,突然有一天,我按惯例打开邮箱,突然发现躺了一封 Invitation to join The Apache Software Foundation Membership。我心中一阵惊喜,点开之后,发现是邀请我成为 Apache Member 的邮件,这让我非常的出乎意料。

说实话,也曾梦想过未来有一天能成为Apache Member,但没有想到这一天来得如此之快。成为 Apache Member 意味着是 Apache 的771成员之一,从法律上成为了 Apache 基金会的股东。**但是这并不意味着,贡献的终止。就像打怪升级,当你通过了当前这一关,你会遇到更大的 boss。
**

作为 Apache Member,更多的是从一个个独立的项目中抽离出来,关注基金会层面横向的事务。但我觉得成为 Member 最大的意义是在于自己在开源这条路上并不孤独,尤其是还有这么多来自中国的 Member,更加坚定了中国的开源项目可以在世界的舞台上表现的更好。

成为 Member 之后,我们会通过 Apache 基金会,帮助更多中国的开源软件及开发者,和全世界建立更广泛深入的连接。一方面是走进来,帮助扩大 Apache 基金会在中国的影响力,让更多的开发者参与到世界顶级的优秀开源项目中来;另一方面是走出去,帮助中国开源项目进入到 Apache 基金会孵化,提升中国开源软件的国际影响力。其实国内有很多非常优秀的开源项目,只是缺少一个向世界展示的窗口,希望 Apache 基金会能够作为这样的一座桥梁。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当你打开天猫的那一刻,推荐系统做了哪些工作?

当年打开天猫的那一刻,它为你完成了华丽的变身,成为世上独一无二的“天猫”,这就是智能推荐的力量。今天,来自阿里巴巴搜索推荐事业部的算法工程师陈启伟为你介绍天猫如何玩转首页个性化推荐,揭开搜索推荐的神秘面纱。…

百万人学AI:CSDN重磅共建人工智能技术新生态

站在AI发展的新十年起点上,CSDN将发挥开发者优势,与中国AI各行业和企业共建“百万人学AI”新技术生态。作者 | CSDN新媒体事业部8年前,现图灵奖得主Hinton团队在ImageNet竞赛中首次使用深度学习完胜Google等其它团队,顿时让工业界…

牛客网SQL篇刷题篇(38-47)

1.视图:视图是可视化的表。 视图的作用: 第一点:使用视图,可以定制用户数据,聚焦特定的数据。 解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话&#xff0…

SpringBoot2 集成 xxl-job任务调度中心_参数传递

文章目录一、xxl-job任务调度中心1. 调度中心创建任务2. 调度中心创建执行器二、执行器任务编码2.1. 单参数2.2. 多参数三、调度中心参数传递测试3.1. 单个参数传递3.2. 多个参数传递前提:执行器和xxl-job任务调度中心启动完毕 一、xxl-job任务调度中心 1. 调度中心…

Java-用IDEA创建Java项目

1. 创建项目 2. 创建空项目 3. 输入项目名 4.配置JDK 点击Project Structure 配置JDK 点击Apply->OK 5. 新建模块 https://www.bilibili.com/video/BV12J41137hu?p21&spm_id_frompageDriver

DevOps:从「蒸汽时代」到「高铁时代」,SUNMI DevOps转型之路 | 原力计划

作者 | 文振熙、刘文沣责编 | 徐威龙封图| CSDN 下载于视觉中国商米科技成立于 2013 年,总部位于上海市杨浦区创智天地,是一家具有产品创新基因和互联网基因的公司。商米在短时间内迅速成长为一家近1000人的企业,产品研发人数占比一度超过70%…

SpringBoot2 集成 xxl-job任务调度中心_路由策略

文章目录一、简述二、故障转移演示2.1. 启动2个执行器2.2. 添加执行器ip2.3. 故障转移策略2.4. 启动任务2.5. 模拟8081执行器宕机2.6. 结论三、轮训策略演示3.1. 启动2个执行器3.2. 添加执行器ip3.3. 轮训策略3.4. 启动任务3.5. 日志分析3.6. 故障转移3.7. 重新启动8082执行器四…

Uniapp组件之间传参

1.父组件内引入子组件&#xff0c;并且子组件使用父组件内的数据 将子组件引入到父组件&#xff1a; <uni-pop :opts"defaultOptions"></uni-pop> import uniPop from /components/uniPop/uniPop.vue 子组件使用父组件内的数据&#xff1a; 2------创建…

基于大数据的舆情分析系统架构 - 架构篇

前言 互联网的飞速发展促进了很多新媒体的发展&#xff0c;不论是知名的大V&#xff0c;明星还是围观群众都可以通过手机在微博&#xff0c;朋友圈或者点评网站上发表状态&#xff0c;分享自己的所见所想&#xff0c;使得“人人都有了麦克风”。不论是热点新闻还是娱乐八卦&am…

Java-标识符和关键字

关键字 标识符 https://www.bilibili.com/video/BV12J41137hu?p22&spm_id_frompageDriver

SpringBoot2 集成 xxl-job任务调度中心_阻塞策略

阻塞处理策略&#xff1a;调度过于密集执行器来不及处理时的处理策略&#xff0c;策略包括&#xff1a;单机串行&#xff08;默认&#xff09;、丢弃后续调度、覆盖之前调度 阻塞处理策略说明单机串行&#xff08;默认&#xff09;任务依次排队执行丢弃后续调度当上一个任务没…

反转!Python再次卫冕2020年编程榜,Java和C回落,你怎么看?​

2020年转眼Q1季度快要结束&#xff0c;在近几个月的榜单中&#xff0c;Python持续19年的火爆&#xff0c;走在在卫冕的道路&#xff0c;并且与老牌语言Java、C的差距拉得更远了一些。近期Udemy 制作了一份《2020 年职场学习趋势报告》&#xff0c;指出了哪些技能最受职场人关注…

HTTP状态码415 springboot项目

1.415报错&#xff0c;有可能是parameter写错了&#xff0c;前台不接收这种形式 controller写RequestBody&#xff0c;前台url写&#xff1f;name1&number1就会报错415

Windows下安装ab

文章目录1. 官网地址2. 传送门3. 发起压测1. 官网地址 https://www.apachelounge.com/download/ https://www.apachelounge.com/download/ 2. 传送门 快速下载 httpd-2.4.46-win32 快速下载 httpd-2.4.46-win64 3. 发起压测 进入bin目录 模拟100个请求 10个并发 请求慕…

Hive 热门数据分析面试题解析

作者 | 数据管道责编 | 徐威龙封图| CSDN 下载于视觉中国SQL中有一类函数叫聚合函数&#xff0c;比如count、sum、avg、min、max等&#xff0c;这些函数的可以将多行数据按照规整聚集为一行&#xff0c;一般聚集前的数据行要大于聚集后的数据行。而有时候我们不仅想要聚集前的数…

不改代码也能全面 Serverless 化,阿里中间件如何破解这一难题?

Serverless 话题涉及范围极广&#xff0c;几乎包含了代码管理、测试、发布、运维和扩容等与应用生命周期关联的所有环节。在线应用如何不改代码也能迁移到 Serverless 架构&#xff1f;今天&#xff0c;我们来揭秘阿里巴巴成千上万在线应用的Serverless 演进过程。 AWS Lambda …

java中的值传递

1.概述 引用类型中&#xff0c;java中全部都是值传递&#xff0c;传递对象里的值&#xff0c;而不会传递对象本身。 2.代码示例 public class Main {public static void main(String[] args) {Student a new Student();Student b new Student();a.setName("zhangsan&q…

linux 环境搭建 Sentinel 控制台

文章目录一、搭建Sentinel 控制台1. Sentine文档2. 下载稳定版本3. 启动sentinel4. 登录 sentinel一、搭建Sentinel 控制台 1. Sentine文档 https://github.com/alibaba/Sentinel/wiki/控制台 2. 下载稳定版本 https://github.com/alibaba/Sentinel/releases wget https:/…

2019阿里巴巴技术面试题集锦(含答案)

为帮助开发者们提升面试技能、有机会入职阿里&#xff0c;云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次整体放出。并通过这些笔试真题开放阿里巴巴工作机会&#xff0c;让更多的开发者加入到阿里这个大平台。 …

揭秘!闲鱼拉新投放系统如何设计

背景 闲鱼目前已经是国内最大的闲置物品交易平台。随着闲鱼体量的增长和用户规模不断扩大&#xff0c;闲鱼App上的一个普通banner抑或是feeds中的一张普通的卡片&#xff0c;每天都可能被数以千万计的人看到。 为了更好地服务好广大的用户群体&#xff0c;更加个性化的内容推…