从 0 到 1:Apache APISIX 的 Apache 之路
2019 年 12 月 14 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 广州站活动,本次活动,邀请了来自Apache APISIX、又拍云、腾讯云、HelloTalk 等企业的技术专家,分享网关和高性能服务的实战经验。Apache APISIX PPMC 温铭做了题为《Apache APISIX 的 Apache 之路》的分享。
温铭,深圳支流科技创始人,Apache APISIX PPMC,《OpenResty 从入门到实战》专栏作者,创业之前在互联网安全公司工作了 10 年,主要从事服务端的开发和架构,负责开发过木马云查杀、反钓鱼系统和企业安全产品。曾在奇虎 360 担任架构师,开源委员会发起人、委员。支流科技是一家开源底层技术初创公司,致力于微服务相关技术的创新和实现。
以下是分享全文:
Apache APISIX 是一个很年轻的项目,今年 6 月份开源,7 月份加入到 CNCF 全景图,10 月份进入 Apache 孵化器,所以我会和大家分享一下 APISIX 是如何从 0 到 1,进入 Apache 孵化器的。
Apache APISIX 现在有 17 个 committer,分别来自 16 家不同的公司,是一个非常社区化的项目。每个 committer 有一票,决定版本的发布、选举新的 committer 和 PPMC 等比较重大的事情。
Apache Way
Apache Way 是大家都比较熟悉的概念:社区大于代码。烂代码可以改,Apache 的导师并不会指导你怎么写出更高水平的代码,他们更关心的是社区是否在健康的发展,只要有一个好的社区,烂代码一定会有更高水平的人进行重构,变成更好的代码。所以只要社区在,那这个项目就能够一直存活下去,这在 Apache 是最重要的。
邮件列表优先是另一个重要的点,没有在邮件列表中出现过的,就当做不存在。这在中国其实是一个非常大的挑战,大家在文化上和习惯上都不太喜欢用邮件:第一是时间不够及时,可能发一封邮件后隔 1-2 天才能收到回复;第二是邮件列表的很多东西是公开的,有些人喜欢私聊;第三邮件列表里面只能出现英文,但其实中国人的英文是不差的,我们比大部分其他国家的人的英语已经好很多了,毕竟我们学了很多年英语,还有各种翻译的软件,即使出现语法错误,都不是大问题。
第三是精英治理,在 Apache 社区中大家用贡献来获得更多的话语权,更高的 title 意味着更多的付出和责任。
第四是民主,所有人都可以参与 Apache 的投票,即使你不在 Apache 社区,但不是所有人的票都是有效的。比如 APISIX 当时进 Apache 孵化器的时候需要投票,我也可以投支持票,但后面要写 no binding,表示我支持并关注这个项目,但我是一个观察员的身份,但这一票对于项目能否进 Apache 是没有决定性的。只有对孵化器做了贡献并得到社区认可的人,即 Apache 孵化器的 PMC,他们的票才是有效的,这就是 Apache 社区的民主。
开源社区的治理模式
我们知道很多开源项目有一些是在基金会下面,有一些则不是。在基金会下面的项目,比如 Linux 基金会、Apache 基金会,他们的治理模式叫做“社区共识”,需要先在社区内讨论,在达成一个共识后进行投票,而非直接投票。如果直接投票,没有前面的讨论和共识,那这个投票是没有意义的。这个效率可能会很慢,但只有整个社区达成共识,后面才没有异议。
第二种是商业公司共识,只要商业公司的人达成共识,那么这个 PR 或者 feature 就可以被合并,而社区的人说话是没有用的,因为它是被商业公司控制的一个项目,而如果你给商业公司贡献代码,能否被合并决定权在商业公司手里。这对于个人开发者可能无所谓,但是对于参与项目的企业则是有所谓的,通常企业会有私有版本,企业想把自己的 feature 贡献回社区,但商业公司可能因为这个东西和自己的商业版本冲突,就会拒绝掉。
第三种是仁慈的独裁者,最典型的就是 Python,个人决定着开源项目的发展。
上述是开源社区的三种模式,如果是企业选择项目,一般的我们会推荐 Apache、Linux 基金会的项目,它首先在法律上是没有隐患的,其次它是一个社区共识,我们可以通过向社区贡献这种方式获得更多的话语权,这样就形成了一个良性的循环。
如何进入 Apache 孵化器
Apache 现在有接近 50 个孵化器的项目,其中来自中国的有 10 个,APISIX 是现在国内唯一一个由创业公司进入 Apache 的项目,其他很多是来自华为、阿里、百度等大公司的项目。
一个项目要想进入 Apache 孵化器,需要明白以下名词和步骤:
Champion:他是你项目的引荐人,这是你首先要去联系到的最重要的角色,他需要熟悉你以及这个项目。
Mentor:项目的导师,在项目进入 Apache 孵化器之后,Champion 就转换成导师的角色,一个项目至少需要 1 个 Champion,2 个 Mentor,所以至少需要找到 3 个合适的人选。Mentor 会指导项目怎么从孵化器里边的一个项目,一步一步地成长为 Apache 的顶级项目,这其中包括发布 Apache 版本、品牌管理、壮大社区等。如果变成了顶级项目,那么这个项目以后就是社区自治了。
Proposal:找到 Champion 和 Mentor 之后,下一步需要写一个 Proposal,即一个提案,介绍我是谁,解决了什么问题,为什么要加入 Apache,项目现在的代码文件有没有和 Apache license 冲突的地方,初始的 committer 有哪些人、来自哪些公司,有没有什么潜在的风险,后面要如何发展等。
Discuss:接着会发起一个讨论的邮件,看有多少人对这个感兴趣,这个阶段也可以找到一些有兴趣的 PMC 来加入 Mentor 指导项目。
Vote:最后是投票,投票通过,项目就可以进入 Apache 孵化器了。
Apache Way 和国内开源文化的冲突
国内的 Apache 项目会遇到很多不一样的挑战,这和国内外的开源环境和文化有关系。
比如国内的工程师会觉得太忙,经常 996 加班,所以没有时间和精力去做开源。但其实不少工程师在工作中也会使用到开源项目,写过开源项目的 feature,但是他们并不会主动提交 PR,也不会在写代码之前在社区内发起讨论,这就是很多文化上不同的地方。
沟通方式上,Apache 提倡的是在邮件列表中公开讨论,但是国内的很多开发者更喜欢微信、QQ、电话等非公开的方式来沟通。特别是如果一个项目的 PPMC 大都来自同一家公司,那么可能开早会的时候就把一个功能敲定了,但在邮件列表里也没有出现,这就不符合 Apache 的文化。
关于投票,很多开发者可能觉得自己英语不好或者人微言轻,不太愿意在邮件列表中发表自己的意见,也不参与投票,那么最终他就会被忽略掉。所以你需要积累一些”功绩“,去帮助别人,慢慢地增加自己的影响力。Apache 是一个由个人组成的基金会,每个人的行为都只代表自己,不代表公司,每个PMC 的一票都是对等的。
关于 Title,在 Apache 里,最高的职位叫做 Apache 基金会主席,每个项目的管理者是 VP,然后是 PMC(项目管理员会)、 Committer、 Contributor ,他有一个类似于我们企业内职称晋级的通道。但是在 Apache里,即使你的职位变得很高,也并不意味着拥有更多的投票权,更多的是义务,比如对于 Apache APISIX 选举新的 committer 的投票而言,孵化器主席的票和我的票是一样的。Title 在 Apache 里面更多的是一种荣誉,因为 Apache 基金会是一个非营利组织,它强调的是贡献,这就是文化上的冲突。
版权问题
版权是一个非常重要的问题,前段时间发生的 Nginx 作者被抓就是因为版权问题。一个项目在正式加入 Apache 孵化器之前,所有 committer 和公司都要签署 CLA,说明将这个项目的版权,全部捐给 Apache 基金会。加入 Apache 孵化器之后,最重要的里程碑就是发布第一个 Apache 的 Release,这个版本就是要理清 license 上的风险,让用户可以放心的使用。所以,商业公司使用 Apache 的项目是有保障的,不会涉及到版权不清晰的问题。
最后,Apache APISIX 是一个正在快速发展的开源项目,希望大家多多参与和贡献,多谢。
推荐阅读
从 0 到 1:Apache APISIX 的 Apache 之路的更多相关文章
- 基于 Apache APISIX 的下一代微服务架构
2019 年 12 月 14 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 广州站活动,Apache APISIX PPMC 温铭做了题为 ...
- 王院生:Apache APISIX 微服务网关极致性能架构解析
2019 年 10 月 27 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 杭州站活动,Apache APISIX PPMC 成员王院生做 ...
- Apache APISIX 的安装和配置请求转发url匹配
安装apisix套件 创建一个apisix文件夹,在apisix文件夹下再创建一个etcd_data文件夹,用来持久化etcd的数据 在apisix文件夹下 新建3个文件 config.yaml, ...
- CVE-2021-45232 Apache APISIX 从未授权访问到RCE
00x1漏洞环境 Apache APISIX Dashboard 2.7 - 2.10 版本受到影响 通过git拉取在docker搭建环境 git clone https://github.com/a ...
- Linux安装php-7.0.16,完成php和apache的配置
Linux安装php-7.0.16,完成php和apache的配置 版本:php-7.0.16.tar.gz,libxml2-2.9.2.tar.gz(php需要它的支持,首先安装它) 说明 ...
- 《从0到1学习Flink》—— Apache Flink 介绍
前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...
- 网关 apache APISIX
网关 apache - 国内版 Binghttps://cn.bing.com/search?q=%E7%BD%91%E5%85%B3+apache&qs=n&form=QBRE&am ...
- linux下安装apache与php;Apache+PHP+MySQL配置攻略
1.apache 在如下页面下载apache的for Linux 的源码包 http://www.apache.org/dist/httpd/; 存至/home/xx目录,xx是自建文件 ...
- m2eclipse Error:ArtifactTransferException: Failure to transfer org.apache.felix:org.apache.felix.res
Issue: When you create and compile a project with pom.xml using m2eclipse, it may report some error ...
随机推荐
- js -- 操作sqlite数据库
最近看到一个使用js来操作sqlite数据库的,测试了一下,具体使用的是 js操作类: https://github.com/kripken/sql.js/(sqlite js 驱动) 异步请求:ht ...
- mybatis(六):设计模式 - 责任链模式
- L2-3 名人堂与代金券
题解 这题的话,每一个人都要占一个排名,即使排名并列了. 对于最后一个排名来说,即使人数超过了指定的k,也要加入. 代码 #include <bits/stdc++.h> using na ...
- 洛谷 P5569 [SDOI2008]石子合并 GarsiaWachs算法
石子合并终极通用版 #include<bits/stdc++.h> using namespace std ; ]; int n,t,ans; void combine(int k) { ...
- wamp修改MySQL密码
wamp默认密码为空 用户名为root: 左击wamp绿色小图标,打开phpMyAdmin ->执行 ->账号 ->找到用户名为root的修改权限&&点击修改权限 - ...
- 在x64的Ubuntu系统下安装64bit的交叉编译工具aarch64-linux-gnu-gcc【转】
sudo apt-cache search aarch64 查看哪些版本可以安装: sudo apt--aarch64-linux-gnu 安装一个gcc开头的5版本的支持64bit ARM linu ...
- python中GraphViz's executables not found的解决方法以及决策树可视化
出现GraphViz's executables not found报错很有可能是环境变量没添加上或添加错地方. 安装pydotplus.graphviz库后,开始用pydotplus.graph_f ...
- Spring 属性依赖注入
1.1 属性依赖注入 依赖注入方式:手动装配 和 自动装配 手动装配:一般进行配置信息都采用手动 基于xml装配:构造方法.setter方法 基于注解装配: 自动装配:struts和spring ...
- 自己常用的Linux命令和Hadoop命令
记录自己常用的Linux命令: ss的启动命令:ssserver -c /etc/shadowsocks.json jupyter notebook的启动命令:jupyter notebook --a ...
- 单机架设传奇服务器第47课:定时器OnTimer功能详解
传奇定时器OnTimer功能详解(泡点.时间触发.任务活动) 定时器功能,是服务端中非常常见的一种功能,常见如:泡点脚本.赌博脚本,任务活动指定时间刷怪,时间触发一些都需要用到OnTimer功能,定时 ...