乐趣区

关于nginx:有了-NGINX-和-Kong为什么还需要-Apache-APISIX

2021 年 5 月,云原生社区技术沙龙·广州站,Apache APISIX 开源我的项目创始人 & PMC 王院生在流动上做了《有了 NGINX 和 Kong,为什么还须要 Apache APISIX》的分享,以下是现场分享的文字版。
以下分享仅代表作者个人观点。

大家好,十分开心给大家分享一个让我冲动的主题《有了 NGINX 和 Kong,为什么还须要 Apache APISIX》。

之所以咱们要做 NGINX 和 Kong 的代替我的项目,理论和咱们后端架构演变史大背景非亲非故,我会先和大家一起分享后端架构演变过程,这十分重要。

首先做下自我介绍,自己叫王院生。和这次大会主办者净超一样咱们都做社区很久,我在 15 年写了一本电子书叫《OpenResty 最佳实际》,通过这本书结成了一个超万人社区。从那个时候开始集体对开源自身越发感兴趣,15 年以前我基本上次要是开源软件的使用者,而后缓缓变成社区的一个协办者,再往后变成社区领导者,兴许你会问为什么?很简略,因为这本书是你写的,他人遇到各种各样的问题,有高级的也有比拟一般的,问得多了我就逐渐成为老师并最终成了社区领导者,像那句名言“走的人多了,也变成了路”。

2019 年我与合伙人温铭一起开办了深圳干流科技公司,它是一家以开源为依靠的商业化公司。这家公司承载了我俩很多集体现实,也能够说是在做每一位一般程序员的现实,不想庸庸碌碌 996,我常常对他人说我的幻想就是“把我的名字刻入史册”,悲催的是人类曾经不须要史册了。

这是咱们团队,大家次要是近程合作,所有人聚在一起比拟难。公司晚期阶段只有五六个人时,还能比拟容易的把团队聚起来,但从往年之后就始终没聚齐过,这是咱们往年到目前以来最齐的一次(但仍然有几位同学没能一起)。
作为一家技术说了算的商业公司,技术在我司有十分大的话语权,尊重技术从尊重技术人才开始。没有 996,没有下班打卡,近程办公,欢送感兴趣的同学分割咱们,期待有幻想、有现实的你退出我司。

这次演讲主题须要一些背景,咱们先说说后端架构演变史。先跟大家回顾一下这张图,右图局部从上到下它不是具体数据流程图,它是咱们后端架构演变史。从最传统的单体大利用,而后变成面向服务架构 (SOA),而后是微服务,别离呈现了 Spring Cloud 和 Kubernetes。Spring Cloud 架构次要服务 JAVA 语言开发者,Kubernetes 是容器编排反对任何语言,以及最近社区比拟热的话题服务网格。
我常常跟公司共事说,咱们展望未来五年,甚至是十年之后,哪个架构是最终极计划?从目前信息看,服务网格会大概率胜出。即便当下它还有很多问题,但我置信这些问题都能被解决。

在守业之初,在脑子里过这张图的时候特地有意思。咱们可能看到,随着咱们后端架构的逐渐迭代,咱们引入了各种不同组件。比方到了 SOA 也就是面向服务的架构,引入反向代理组件,选型通常是 NGINX,HAProxy。迭代到微服务架构后,通常会抉择一些更古代的 API 网关产品,比方 Kong、Traefik,当然也有一些用户因为惯性习惯,还会持续抉择应用 NGINX,尽管它有能力弱、应用不不便等毛病,但胜在稳固、牢靠。说句题外话,从寰球市场占有率看,NGINX 成为占有率最高的 Web Server 是在 2019 年 4 月份,感兴趣的同学能够到看下最新的 netcraft 报告 April 2021 Web Server Survey。

随着后端架构继续迭代,进入到了 Kubernetes 时代后,流量出入口 Ingress 大家默认会应用官网的 Kubernetes Ingress,这个我的项目是基于 NGINX 本地配置文件。在国内也有一些公司在应用 Traefik 作为 Ingress,这与国内 Golang 开发者基数比拟大有很大关系。

咱们再看看左侧比拟有意思的 JAVA,Spring Cloud 内置 API 网关先后经验了 ZUUL、ZUUL2,但还是不好用,性能、架构官网都不称心,所以 Spring Cloud 官网发动了新我的项目 Spring Cloud Gateway,最终造成全家桶解决方案。

最初说说右下角局部的服务网格,对于服务网格曾经造成一种抉择就是 istio(CP) + envoy(DP)。前面咱们又看到了阿里巴巴开源的 mosn,一句话概括:Golang 版本的 envoy。

回顾后面的架构演变图,置信很多同学都曾经发现问题在哪里。从上到下,从左到右,针对不同场景,咱们最终“正当”的引入了各种组件来别离解决咱们的问题,架构师生存法令:抉择当下最适宜的。

当咱们趁手工具不多,在性能、动静、性能等之间咱们总是要斗争放弃一些,大家早已习惯甚至麻痹。IT 技术倒退迅速,时至今日它们是否还是最合适计划?5G、物联网等倒退迅速,如何弹性扩缩容、动静对立治理等新问题,逼着咱们从新思考。

如图这些都是 NGINX 毛病,比方 NGINX 的低活跃度社区。尽管咱们能够在公司层面投入更多资源,但他的社区是真不敌对,不敌对到什么水平呢?下面这张图能够看失去,NGINX 在 Github 的仓库只是镜像,issue 性能是敞开的,想提交 issue 不可能了,即便你提交 PR 官网也是不会合并的。

除此之外 NGINX 本身路由比拟弱,比如说我要依据某个申请参数比方 id 取模运算做灰度,你会发现 NGINX 齐全无奈实现。所以咱们能看到很多小的开源零碎,只有解决了下面的灰度场景,就能够是个独立开源我的项目。此外 gRPC 调用在微服务调用中越来越风行,但 NGINX 对它的反对只能是“简略能用”。

最初就是 NGINX 集群对立治理,简直每家互联网厂商都有本人的 NGINX 配置管理系统,零碎尽管大同小异但就是没有对立计划,十几年了始终空白。

在进一步聊 Kong 之前,想和大家聊一下什么是云原生。这个名词从诞生到当初很久,但到当初没有对立明确的定义。我综合几家云厂商定义,概括云原生特色次要有两点:第一要反对容器,第二要反对弹性伸缩部署。我认为 Kong 不齐全满足第二条,官网主推的 PostgreSQL 关系型数据库是单点,无奈反对弹性扩缩容,是它架构选型硬伤。

最初简略总结一下 NGINX 和 Kong 的问题:

  • NGINX 和 Kong 都有各自不同利用场景;
  • NGINX 短少官网集群对立治理计划;
  • Kong 的管制面不是齐全云原生架构。

在介绍 APISIX 之前,还是有必要先感激两位前辈,站在伟人肩膀思考,的确让咱们从一开始就有更高起点。APISIX 曾经两岁多,请看架构图:

这张图的左右别离是 DP(Date Plane)和 CP(Control Plane),跟大家所相熟的后端服务体系一样。APISIX 从架构第一天就没有想去本人造新货色,所以对于配置核心抉择了当下最成熟的 etcd。

在这个架构外面,你找不到一个单点。这里的任何一个服务出现异常宕机等事变,都不会影响 APISIX 失常对外提供服务的能力。当整体架构中的每一个点都反对高可用时,用户生产零碎的高稳定性就非常容易实现。

这是 APISIX 的生态图,从该图能够精确看到目前都反对了哪些周边生态。左侧是反对的协定,能够看到常见的 7 层协定有 HTTP(S)、HTTP2、Dubbo、QUIC 和物联网协定 MQTT 等,4 层协定有 TCP/UDP。右侧局部则是一些开源或者 SaaS 服务,比方 SkyWalking、Prometheus、Vault 等。上面就是一些比拟常见的操作系统环境、云厂商和硬件环境,作为一家全球化公司,咱们也反对 ARM64 等更丰盛的平台。

给大家简略地汇报一下 APISIX 以后状态,APISIX 从开源到当初两年的工夫,APISIX 曾经成为了全世界最沉闷的开源 API 网关我的项目,而且这个状态曾经继续了一年多。请记住最上面一句话,APISIX 曾经生产可用,性能、性能、架构全面优于 Kong。在 2019 年 9 月份贝壳找房就曾经把 APISIX 我的项目用到生产环境。

简略解释一下这张图,能够叫它贡献者增长曲线。横坐标是工夫线,纵坐标是贡献者总数。可能看到 APISIX 和 Kong 这两个我的项目绝对更沉闷,APISIX 的增长速度从开源第一天就放弃着十分不错的增长率,在靠近 Kong 两倍的速度成长,可见 APISIX 受欢迎水平。当然评估一个我的项目活跃度还有很多其余办法,比方查看每月沉闷 issue、PR 总数等形式,很开心的和大家说,这些形式看 APISIX 的活跃度仍然第一。

通过咱们理论的客户走访,反对多语言这个个性是十分有必要的。毕竟对于很多公司而言,都有本人相熟的技术栈,很多公司对 NGINX C 和 Lua 这两个技术栈是空白。前些日子 APISIX 曾经正式发表反对多语言,目前曾经反对了 Java 语言,后续也将逐渐反对 Golang、Rust、NodeJS 等语言。

APISIX 的全动静、高性能,其实和高质量的周边生态是分不开的。APISIX 的路由应用我司主导并开源的我的项目叫 resty-radixtree,简略来说它应用 radixtree 形式实现路由匹配,匹配效率相比竞品晋升了一到两个数量级。其余还有 jsonschema、ipmatcher 等周边库,它们都比同类开源我的项目性能强几个数量级。

APISIX 反对多语言的个性,曾经放到开源我的项目,欢送感兴趣的同学能够随时关注并参加。这个实现计划的劣势是简略、通用,大家能够原生的应用本人相熟语言。

聊了这么多,给大家介绍下 APISIX 有哪些劣势?请看上图。

后面三个(基金会我的项目、平安、稳固)我感觉是最重要的,作为基金会我的项目,它曾经不属于某个人或某家公司,而是全人类的财产,咱们能够永远应用它。与之绝对应的是商业公司开源我的项目,它能够随时批改开源我的项目 License,大家最近都听过相似的音讯。APISIX 的平安和稳固得益于它的基石 NGINX,可能成为目前最风行、使用量最广的 web server,底蕴还是很厉害的。

高性能、动静、社区沉闷是 APISIX 的王牌,它们曾经造成了良性互动。

如果一句话概括 APISIX 的骄傲,我认为是:APISIX,全世界最沉闷的 API 网关我的项目。在此共识下,咱们把更多资源歪斜给社区,咱们置信社区会让 APISIX 持重健康成长。

看到这张图台下的你预计一下子就明确了 APISIX 要干什么。APISIX 指标:对立代理基础设施。

兴许台下的你这里会有疑难:APISIX 要反对这么多场景,是否会让 APISIX 变得四不像?这里我简略解释一下,APISIX 的外围是高性能代理服务,本身不绑定任何环境属性。当它演变为 Ingress、服务网格等产品,都是内部服务与 APISIX 配合,变动的是内部程序而不是 APISIX 本身,前面逐渐为大家阐明 APISIX 是如何具体反对这些场景。

针对传统的 LB 和 API Gateway 场景,APISIX 比拟大的劣势就是从动态变成全副动静,再也不须要 reload,要晓得很多科技公司的 NGINX reload 是半小时起步。后面提到的依据申请 id 取模运算灰度场景,在 APISIX 里应用精细化路由能够很容易实现。

APISIX Ingress Controller 则残缺解决了下面提到的所有问题,继承了 APISIX 的所有劣势,此外还反对原生 k8s CRD,不便用户迁徙。

服务网格,这外面有必要跟大家重点聊聊。将来五年或者十年之后,最有可能支流的服务端架构是什么?如果让我答复,我抉择服务网格。

右图局部就是 APISIX Mesh 的外部架构图。

聊了这么多 APISIX 的当下,也和大家聊聊 APISIX 的将来。

因为 APISIX 目前是 Apache 基金会我的项目,所以它曾经不再属于集体或公司,而是全人类共享财产。这样社区中的每一个你,都有权力决定他往哪个方向倒退。

开源版本 APISIX 目前默认搭配的配置核心是 etcd,尽管目前它仍旧是最好的抉择,但咱们在和用户沟通时仍然常常会听到是否反对其余配置核心,比拟常见的起因是 etcd 这个产品太新了,公司现有运维产品反对列表中没有它。所以咱们打算让 APISIX 能够与其余配置核心合作。

APISIX 曾经走在全流量数据面这条路上,置信大家都会问一些问题,比方:为什么要对立流量转发?对立是否给企业带来价值?对技术人员有什么收益?带着这些问题,咱们看下图:

对立自身不是指标,对立之后的收益才是咱们谋求的背地逻辑,上面别离给出几个不同角度来别离论述。

  • 运维角色:应用雷同的运维工具收集日志、Metric 指标等,复用已有积攒;
  • 开发角色:基于标准化的 APISIX 插件开发,能力能够不便复用,并且积攒的教训能够利用到 LB、API Gateway、K8s Ingress 等不同产品线;
  • 公司价值:对立技术栈,升高公司经营老本,升高过渡到微服务、云原生的难度,减速企业数字化转型。

对于 Apache APISIX

Apache APISIX 是一个动静、实时、高性能的开源 API 网关,提供负载平衡、动静上游、灰度公布、服务熔断、身份认证、可观测性等丰盛的流量治理性能。Apache APISIX 能够帮忙企业疾速、平安的解决 API 和微服务流量,包含网关、Kubernetes Ingress 和服务网格等。
寰球已有数百家企业应用 Apache APISIX 解决要害业务流量,涵盖金融、互联网、制作、批发、运营商等等,比方美国航空航天局(NASA)、欧盟的数字工厂、中国航信、中国移动、腾讯、华为、微博、网易、贝壳找房、360、泰康、奈雪的茶等。
200 余位贡献者,一起缔造了 Apache APISIX 这个世界上最沉闷的开源网关我的项目。聪慧的开发者们!快来退出这个沉闷而多样化的社区,一起来给这个世界带来更多美妙的货色吧!

  • Apache APISIX 我的项目地址:https://github.com/apache/apisix
  • Apache APISIX 官网:https://apisix.apache.org
退出移动版