在上半象限都是一些巨头公司,例如 google、IBM 等等,都是公有云的闭源项目,具有领导地位,跟各自产品深度绑定在一起 。在下半象限都是援建者,都是开源项目,例如: Kong,挑战着闭源项目, 随着时间的推移我们发现——软件在吞噬世界、开源软件在吞噬软件 。以下是近几年发生的很多 API 网关厂商相关的收购案例:
- 2015 年,IBM 收购 StrongLoop
- 2015 年,谷歌 6.25 亿美元收购 apigee
- 2018 年,Salesforce 65 亿美元收购 MuleSoft
- 2018 年,Broadcom 189 亿美元收购 CA Technologies
- 2019 年,F5 收购 6.7 亿美元收购 NGINX
深入浅出 Apache APISIX设计思路API 网关的数据面和控制面分离 。控制面不仅能控制 Apache APISIX 还能控制其他组件;数据面不仅仅能被我的控制面控制,还能被其他组件所控制
通过插件机制来方便二次开发和运维 。拿 Envoy 来说,Envoy 的插件是使用 C++ 编写的,C++ 本身就具有很大的复杂性;再来对比下 Kong,Kong 开发一个 IP 黑白名单插件需要写 300+ 行代码,并且插件配置解析、插件逻辑等代码分布在 3-4 个文件中;而 Apache APISIX 开发同样功能的插件只需要一个文件并且只需要70行代码 。
【基于Apache APISIX的全流量API网关统筹集群流量】默认高可用,没有单点故障 。因为使用了 ETCD 来存储和分发路由数据
安全和稳定第一 。Apache APISIX 基于 Nginx 实现,支持mTLS 认证以及敏感信息加密加盐 (salt) 保存 。为什么选择 Nginx 呢?它是基于 C 语言开发的程序,性能优化到极致,Nginx 的底层开发做的非常好,并且在大规模适用上得到充分有效的验证,从性能角度上是最佳选择
高性能 。Apache APISIX 基于 Nginx 的网络层,其单核心 QPS 1.5 万,延迟低于 0.7 毫秒 。
运维友好 。它支持 Prometheus、SkyWalking 动态追踪、流量复制、故障注入等功能
技术架构Apache APISIX 架构如图,其主要分为数据面和控制面 。
- 数据面:以 Nginx 的网络库为基础,(弃用 Nginx 的路由匹配、静态配置和 C 模块),使用 Lua 和 Nginx 动态控制请求流量,通过插件机制来实现各种流量处理和分发的功能:限流限速、日志记录、安全检测、故障注入等,同时支持用户编写自定义插件来对数据面进行扩充 。
- 控制面:使用 etcd 来存储和同步网关的配置数据,管理员通过 admin API 或者 dashboard 可以在毫秒级别内通知到所有的数据面节点,同时 etcd 集群也保证了系统的高可用 。
文章插图
因为 Apache APISIX 使用了 ETCD 作为配置中心,在对应其他组件时会非常方便,可以把 ETCD 直接就当做服务注册发现中心来使用(服务注册、发现),当然同时也支持 Consul、Eureka、Nacos 等服务注册中心 。
文章插图
高性能Apache 只是使用了 Nginx 的网络库而并没有使用路由库,重写优化了路由算法 。
- Apache APISIX 的路由复杂度是 O (k),只和 URI 的长度有关,和路由数量无关;kong 的路由时间复杂度是 O (n) ,随着路由数量线性增长,K 指 URI 长度,和路由数量没有关系,例如有一百万条路由,ApiSix 路由的时间复杂度都是一样的,而 Kong 却不是这样的;
- Apache APISIX 的 IP 匹配时间复杂度是 O (1),不会随着大量 IP 判断而导致 CPU 资源跑满;kong 的最新版本也换用了 Apache APISIX 的 IP 匹配库;不管有多少IP都是一次命中,而 Kong 却不是这样的;
- Apache APISIX 的路由匹配,接受 nginx 的所有变量作为条件,并且支持自定义函数;其他网关都是内置的几个条件;
- Apache APISIX 使用 etcd 作为配置中心,没有单点,任意宕掉一台机器,网关集群还能正常运行 。其他基于 MySQL,postgres 的网关都会有单点问题;
- Apache APISIX 的配置下发只要 1 毫秒就能达到所有网关节点,使用的是 etcd 的 watch;其他网关是定期轮询数据库,一般需要 5 秒才能获取到最新配置;
- 只有 Apache APISIX 开放了自定义负载均衡的挂载点,其他网关都不支持 。
通过插件编排的方式可以把 Apache APISIX 的四十多个插件的上下游关系全部串联起来形成一个新的插件 。
当前,Kong支持 Go 编写的插件,Envoy支持 Lua、WASM 编写的 filter 。那么,Apache APISIX 的使用者为什么要“写”插件?我们认为运维、PM 也可以直接通过浏览器页面创造一个自己的插件 。
推荐阅读
- 基于开源的API测试工具!不再为web服务负载测试而发愁
- .net core IIS部署教程
- 基于netty手写Tomcat
- 用Pytorch基于MNIST实现手写数字识别
- 基于GO语言实现web客服即时通讯与客服管理系统GO-FLY
- 基于.NET Core+Bootstrap的快速后台开发框架
- 利用 Milvus 搭建基于图的推荐系统
- 基于Pyqt5的C/S模式客户端在线升级方案
- 基于聚类的指代消解算法
- 基于.NET Core的Orchard Core框架出来了