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 之路的更多相关文章

  1. 基于 Apache APISIX 的下一代微服务架构

    2019 年 12 月 14 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 广州站活动,Apache APISIX PPMC 温铭做了题为 ...

  2. 王院生:Apache APISIX 微服务网关极致性能架构解析

    2019 年 10 月 27 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 杭州站活动,Apache APISIX PPMC 成员王院生做 ...

  3. Apache APISIX 的安装和配置请求转发url匹配

    安装apisix套件 创建一个apisix文件夹,在apisix文件夹下再创建一个etcd_data文件夹,用来持久化etcd的数据 在apisix文件夹下 新建3个文件 config.yaml,  ...

  4. CVE-2021-45232 Apache APISIX 从未授权访问到RCE

    00x1漏洞环境 Apache APISIX Dashboard 2.7 - 2.10 版本受到影响 通过git拉取在docker搭建环境 git clone https://github.com/a ...

  5. 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需要它的支持,首先安装它) 说明 ...

  6. 《从0到1学习Flink》—— Apache Flink 介绍

    前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...

  7. 网关 apache APISIX

    网关 apache - 国内版 Binghttps://cn.bing.com/search?q=%E7%BD%91%E5%85%B3+apache&qs=n&form=QBRE&am ...

  8. linux下安装apache与php;Apache+PHP+MySQL配置攻略

    1.apache   在如下页面下载apache的for Linux 的源码包    http://www.apache.org/dist/httpd/;   存至/home/xx目录,xx是自建文件 ...

  9. 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 ...

随机推荐

  1. c++/cli mixed codes for standard c++ and csharp

    混合DotNet与Win32API来实现的Hidlibrary,c/c++可直接使用,c#可直接使用 异步IO,拔插事件订阅,数据读取事件订阅 工程目录结构 HidEvent.h #pragma on ...

  2. OpenCV——仿射变换

    什么是仿射变换? 一个任意的仿射变换都能表示为 乘以一个矩阵 (线性变换) 接着再 加上一个向量 (平移). 综上所述, 我们能够用仿射变换来表示: 旋转 (线性变换) 平移 (向量加) 缩放操作 ( ...

  3. css美化Div边框的样式实例*(转载)

    css美化Div边框的样式实例   很多时候如果不是用了很多样式,很难把边框修饰得好看,看了一篇博文,觉得真的挺漂亮,也挺好看. 转载的博文地址 将这段美化的css代码 border:1px soli ...

  4. jvm(2):垃圾收集和内存分配

    typora-root-url: ./ 垃圾收集 垃圾收集器关注的是线程共享的这部分内存. jvisualvm用来监控JVM的运行情况,可以用它来查看和浏览Heap Dump.Thread Dump. ...

  5. spring(三):BeanFactory

  6. Redis Distributed lock

    using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using ...

  7. dea创建Maven工程用c3p0连接数据库报错java.sql.SQLException: Connections could not be acquired from the underlying

    idea   java.sql.SQLException: Connections could not be acquired from the underlying database! 转载自:ht ...

  8. es8中对string补白的方式

    //允许将空字符串或其他字符串添加到原始字符串的开头或结尾for(let i = 1; i < 32; i++) { if(i < 10) { console.log(`0{i}`) }e ...

  9. Qt入门-表格类QTableWidget

    原文 :http://blog.csdn.net/xgbing/article/details/7774737 表格是GUI中常用的控件,在Qt中,常用的表格类是QTableWidget. 示例: Q ...

  10. Bugku-CTF加密篇之python(N1CTF) [HRlgC2ReHW1/WRk2DikfNBo1dl1XZBJrRR9qECMNOjNHDktBJSxcI1hZIz07YjVx]

    python(N1CTF)