Apache APISIX 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。
你可以使用 Apache APISIX 来处理传统的南北向流量,以及服务间的东西向流量, 也可以当做 k8s ingress controller 来使用。
Apache APISIX 的技术架构如下图所示:
#apisix
频道以便与成员交流。#ApacheAPISIX
关注我们并与我们互动。你可以把 Apache APISIX 当做流量入口,来处理所有的业务数据,包括动态路由、动态上游、动态证书、 A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵御恶意攻击、监控报警、服务可观测性、服务治理等。
全平台
多协议
client_id
对 MQTT 进行负载均衡,同时支持 MQTT 3.1.* 和 5.0 两个协议标准。全动态能力
host
、uri
、schema
、enable_websocket
、headers
信息。status code
、body
、headers
。精细化路由
cookie
, args
等做为路由的条件,来实现灰度发布、A/B 测试等功能{"arg_age", ">", 24}
安全防护
运维友好
conf/config.yaml
中的 allow_admin
字段,指定允许调用 Admin API 的 IP 列表。同时需要注意的是,Admin API 使用 key auth 来校验调用者身份,在部署前需要修改 conf/config.yaml
中的 admin_key
字段,来保证安全。高度可扩展
init
, rewrite
,access
,balancer
,header filter
,body filter
和 log
阶段。balancer
阶段使用自定义负载均衡算法。APISIX 在以下操作系统中可顺利安装并做过测试:
CentOS 7, Ubuntu 16.04, Ubuntu 18.04, Debian 9, Debian 10, macOS, ARM64 Ubuntu 18.04
有以下几种方式来安装 APISIX 的 Apache Release 版本:
源码编译(适用所有系统)
安装运行时依赖:OpenResty 和 etcd,以及编译的依赖:luarocks。参考依赖安装文档
下载最新的源码发布包:
$ mkdir apisix-2.5 $ wget https://downloads.apache.org/apisix/2.5/apache-apisix-2.5-src.tgz $ tar zxvf apache-apisix-2.5-src.tgz -C apisix-2.5
安装运行时依赖的 Lua 库:
$ make deps
检查 APISIX 的版本号:
$ ./bin/apisix version
启动 APISIX:
$ ./bin/apisix start
Docker 镜像(适用所有系统)
默认会拉取最新的 Apache 发布包:
$ docker pull apache/apisix
Docker 镜像中并不包含 etcd,你可以参考 docker compose 的示例来启动一个测试集群。
RPM 包(只适用于 CentOS 7)
$ sudo yum install -y https://github.com/apache/apisix/releases/download/2.5/apisix-2.5-0.x86_64.rpm
检查 APISIX 的版本号:
$ apisix version
启动 APISIX:
$ apisix start
注意:Apache APISIX 从 v2.0 开始不再支持 etcd v2 协议,并且 etcd 最低支持版本为 v3.4.0,如果有需要请进行升级。如果需要将数据迁移至 etcd v3,请按照 etcd 迁移指南 进行迁移。
对于开发者而言,可以使用最新的 master 分支来体验更多功能
$ git clone git@github.com:apache/apisix.git $ cd apisix $ make deps
$ git clone https://github.com/apache/apisix-docker.git $ cd apisix-docker $ sudo docker build -f alpine-dev/Dockerfile .
入门指南
入门指南是学习 APISIX 基础知识的好方法。按照 入门指南的步骤即可。
更进一步,你可以跟着文档来尝试更多的插件。
Admin API
Apache APISIX 提供了 REST Admin API,方便动态控制 Apache APISIX 集群。
插件二次开发
可以参考插件开发指南,以及示例插件 echo 的文档和代码实现。
请注意,Apache APISIX 的插件新增、更新、删除等都是热加载的,不用重启服务。
更多文档请参考 Apache APISIX 文档索引。
使用 AWS 的 8 核心服务器来压测 APISIX,QPS 可以达到 140000,同时延时只有 0.2 毫秒。
功能 | Apache APISIX | KONG |
---|---|---|
动态上游 | 支持 | 支持 |
动态路由 | 支持 | 支持 |
健康检查和熔断器 | 支持 | 支持 |
动态 SSL 证书 | 支持 | 支持 |
七层和四层代理 | 支持 | 支持 |
分布式追踪 | 支持 | 支持 |
自定义插件 | 支持 | 支持 |
REST API | 支持 | 支持 |
CLI | 支持 | 支持 |
功能 | Apache APISIX | KONG |
---|---|---|
项目归属 | Apache 软件基金会 | Kong Inc. |
技术架构 | Nginx + etcd | Nginx + postgres |
交流渠道 | 微信群、QQ 群、邮件列表、GitHub、Slack、meetup | GitHub、论坛、freenode |
单核 QPS (开启限流和 prometheus 插件) | 18000 | 1700 |
平均延迟 | 0.2 毫秒 | 2 毫秒 |
支持 Dubbo 代理 | 是 | 否 |
配置回滚 | 是 | 否 |
支持生命周期的路由 | 是 | 否 |
插件热更新 | 是 | 否 |
用户自定义:负载均衡算法、路由 | 是 | 否 |
resty <--> gRPC 转码 | 是 | 否 |
支持 Tengine 作为运行时 | 是 | 否 |
MQTT 协议支持 | 是 | 否 |
配置生效时间 | 事件通知,低于 1 毫秒更新 | 定期轮询,5 秒 |
自带控制台 | 是 | 否 |
对接外部身份认证服务 | 是 | 否 |
配置中心高可用(HA) | 是 | 否 |
指定时间窗口的限速 | 是 | 否 |
支持任何 Nginx 变量做路由条件 | 是 | 否 |
性能对比测试详细内容如下。
有很多公司和组织把 APISIX 用于学习、研究、生产环境和商业产品中,包括:
欢迎用户把自己加入到 Powered By 页面。
我们欢迎来自开源社区、个人和合作伙伴的各种贡献。
灵感来自 Kong 和 Orange。