Apache APISIX

Apache APISIX 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。

你可以使用 Apache APISIX 来处理传统的南北向流量,以及服务间的东西向流量, 也可以当做 k8s ingress controller 来使用。

Apache APISIX 的技术架构如下图所示:

特性

你可以把 Apache APISIX 当做流量入口,来处理所有的业务数据,包括动态路由、动态上游、动态证书、 A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵御恶意攻击、监控报警、服务可观测性、服务治理等。

  • 全平台

    • 云原生: 平台无关,没有供应商锁定,无论裸机还是 Kubernetes,APISIX 都可以运行。
    • 运行环境: OpenResty 和 Tengine 都支持。
    • 支持 ARM64: 不用担心底层技术的锁定。
  • 多协议

    • : 动态 TCP/UDP 代理。
    • Dubbo 代理: 动态代理 HTTP 请求到 Dubbo 后端。
    • : 支持用 client_id 对 MQTT 进行负载均衡,同时支持 MQTT 3.1.* 和 两个协议标准。
    • gRPC 代理:通过 APISIX 代理 gRPC 连接,并使用 APISIX 的大部分特性管理你的 gRPC 服务。
    • :支持协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API。
    • Websocket 代理
    • Proxy Protocol
    • Dubbo 代理:基于 Tengine,可以实现 Dubbo 请求的代理。
    • HTTP(S) 反向代理
  • 全动态能力

    • 热更新和热插件: 无需重启服务,就可以持续更新配置和插件。
    • : 支持重写请求上游的hosturischemaenable_websocketheaders信息。
    • 输出内容重写: 支持自定义修改返回内容的 status codebodyheaders
    • : 在 APISIX 的每一个阶段,你都可以添加并调用自己编写的函数。
    • 动态负载均衡:动态支持有权重的 round-robin 负载平衡。
    • 支持一致性 hash 的负载均衡:动态支持一致性 hash 的负载均衡。
    • 健康检查:启用上游节点的健康检查,将在负载均衡期间自动过滤不健康的节点,以确保系统稳定性。
    • 熔断器: 智能跟踪不健康上游服务。
    • : 提供镜像客户端请求的能力。
    • 流量拆分: 允许用户逐步控制各个上游之间的流量百分比。
  • 精细化路由

  • 安全防护

    • 多种身份认证方式: key-auth, , basic-auth, 。
    • IP 黑白名单
    • IdP 支持: 支持外部的身份认证服务,比如 Auth0,Okta,Authing 等,用户可以借此来对接 Oauth2.0 等认证方式。
    • 限制请求数
    • 防御 ReDoS(正则表达式拒绝服务):内置策略,无需配置即可抵御 ReDoS。
    • CORS:为你的 API 启用 CORS。
    • :根据 URI 拦截用户请求。
    • 请求验证器
  • 运维友好

    • OpenTracing 可观测性: 支持 和 Zipkin
    • 对接外部服务发现:除了内置的 etcd 外,还支持 和 Nacos,以及 。
    • 监控和指标: Prometheus
    • 集群:APISIX 节点是无状态的,创建配置中心集群请参考 。
    • 高可用:支持配置同一个集群内的多个 etcd 地址。
    • 控制台: 操作 APISIX 集群。
    • 版本控制:支持操作的多次回滚。
    • CLI: 使用命令行来启动、关闭和重启 APISIX。
    • : 支持从本地配置文件中加载路由规则,在 kubernetes(k8s) 等环境下更友好。
    • 全局规则:允许对所有请求执行插件,比如黑白名单、限流限速等。
    • 高性能:在单核上 QPS 可以达到 18k,同时延迟只有 0.2 毫秒。
    • REST Admin API: 使用 REST Admin API 来控制 Apache APISIX,默认只允许 127.0.0.1 访问,你可以修改 conf/config.yaml 中的 allow_admin 字段,指定允许调用 Admin API 的 IP 列表。同时需要注意的是,Admin API 使用 key auth 来校验调用者身份,在部署前需要修改 conf/config.yaml 中的 admin_key 字段,来保证安全。
    • 外部日志记录器:将访问日志导出到外部日志管理工具。(, TCP Logger, , UDP Logger)
  • 高度可扩展

    • : 允许挂载常见阶段,例如init, rewriteaccessbalancer,,body filterlog 阶段。
    • 自定义负载均衡算法:可以在 balancer 阶段使用自定义负载均衡算法。
    • 自定义路由: 支持用户自己实现路由算法。

立刻开始

APISIX 在以下操作系统中可顺利安装并做过测试:

CentOS 7, Ubuntu 16.04, Ubuntu 18.04, Debian 9, Debian 10, macOS, ARM64 Ubuntu 18.04

  1. 源码编译(适用所有系统)

    • 安装运行时依赖:OpenResty 和 etcd,以及编译的依赖:luarocks。参考
    • 下载最新的源码发布包:

    • 安装运行时依赖的 Lua 库:

      1. $ make deps
    • 检查 APISIX 的版本号:

      1. $ ./bin/apisix version
    • 启动 APISIX:

  2. Docker 镜像(适用所有系统)

    默认会拉取最新的 Apache 发布包:

    1. $ docker pull apache/apisix

    Docker 镜像中并不包含 etcd,你可以参考 来启动一个测试集群。

  3. RPM 包(只适用于 CentOS 7)

    • 安装依赖:OpenResty, etcd 和 OpenSSL develop library,参考依赖安装文档
    • 安装 APISIX:
    1. $ sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm
    • 检查 APISIX 的版本号:

    • 启动 APISIX:

      1. $ apisix start

注意:Apache APISIX 从 v2.0 开始不再支持 etcd v2 协议,并且 etcd 最低支持版本为 v3.4.0,如果有需要请进行升级。如果需要将数据迁移至 etcd v3,请按照 进行迁移。

  1. 对于开发者而言,可以使用最新的 master 分支来体验更多功能

    • 源码编译
    1. $ git clone git@github.com:apache/apisix.git
    2. $ cd apisix
    • Docker 镜像
  2. 入门指南

    入门指南是学习 APISIX 基础知识的好方法。按照 入门指南的步骤即可。

  3. Admin API

    Apache APISIX 提供了 ,方便动态控制 Apache APISIX 集群。

  4. 插件二次开发

    可以参考插件开发指南,以及 的文档和代码实现。

    请注意,Apache APISIX 的插件新增、更新、删除等都是热加载的,不用重启服务。

更多文档请参考 Apache APISIX 文档索引

性能测试

使用 AWS 的 8 核心服务器来压测 APISIX,QPS 可以达到 140000,同时延时只有 0.2 毫秒。

性能测试脚本,以及已经开源,欢迎补充。

API 网关核心功能点,两者均已覆盖

Apache APISIX 的优势

功能 Apache APISIX KONG
项目归属 Apache 软件基金会 Kong Inc.
技术架构 Nginx + etcd Nginx + postgres
交流渠道 微信群、QQ 群、邮件列表、GitHub、、meetup GitHub、论坛、freenode
单核 QPS (开启限流和 prometheus 插件) 18000 1700
平均延迟 0.2 毫秒 2 毫秒
支持 Dubbo 代理
配置回滚
支持生命周期的路由
插件热更新
用户自定义:负载均衡算法、路由
resty <—> gRPC 转码
支持 Tengine 作为运行时
MQTT 协议支持
配置生效时间 事件通知,低于 1 毫秒更新 定期轮询,5 秒
自带控制台
对接外部身份认证服务
配置中心高可用(HA)
指定时间窗口的限速
支持任何 Nginx 变量做路由条件

性能对比测试详细内容如下

视频和文章

用户实际使用案例

APISIX 的用户有哪些?

有很多公司和组织把 APISIX 用于学习、研究、生产环境和商业产品中,包括:

Apache APISIX - 图9

欢迎用户把自己加入到 Powered By 页面。

  Apache APISIX - 图11

APISIX 被纳入

Logo

贡献

我们欢迎来自开源社区、个人和合作伙伴的各种贡献。

致谢