.. | ||
architecture-design | ||
discovery | ||
plugins | ||
admin-api.md | ||
batch-processor.md | ||
benchmark.md | ||
certificate.md | ||
CHANGELOG.md | ||
CODE_STYLE.md | ||
config.json | ||
control-api.md | ||
customize-nginx-configuration.md | ||
debug-function.md | ||
discovery.md | ||
external-plugin.md | ||
FAQ.md | ||
getting-started.md | ||
grpc-proxy.md | ||
health-check.md | ||
how-to-build.md | ||
install-dependencies.md | ||
mtls.md | ||
plugin-develop.md | ||
plugin-interceptors.md | ||
profile.md | ||
README.md | ||
router-radixtree.md | ||
stand-alone.md | ||
stream-proxy.md |
title |
---|
Apache APISIX |
Apache APISIX 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。
你可以使用 Apache APISIX 来处理传统的南北向流量,以及服务间的东西向流量, 也可以当做 k8s ingress controller 来使用。
Apache APISIX 的技术架构如下图所示:
社区
- 邮件列表 - 发送任意内容到 dev-subscribe@apisix.apache.org 后,根据回复以订阅邮件列表。
- QQ 群 - 578997126
- Slack - 请 订阅邮件列表 后发送邮件获取邀请链接
- - 使用标签
#ApacheAPISIX
关注我们并与我们互动。 - 哔哩哔哩
- 新手任务列表
- 微信公众号
- 微信视频号
特性
你可以把 Apache APISIX 当做流量入口,来处理所有的业务数据,包括动态路由、动态上游、动态证书、 A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵御恶意攻击、监控报警、服务可观测性、服务治理等。
-
全平台
- 云原生: 平台无关,没有供应商锁定,无论裸机还是 Kubernetes,APISIX 都可以运行。
- 支持 ARM64: 不用担心底层技术的锁定。
-
多协议
- TCP/UDP 代理: 动态 TCP/UDP 代理。
- Dubbo 代理: 动态代理 HTTP 请求到 Dubbo 后端。
- 动态 MQTT 代理: 支持用
client_id
对 MQTT 进行负载均衡,同时支持 MQTT 3.1.* 和 5.0 两个协议标准。 - gRPC 代理:通过 APISIX 代理 gRPC 连接,并使用 APISIX 的大部分特性管理你的 gRPC 服务。
- gRPC Web 代理:通过 APISIX 代理 gRPC Web 请求到上游 gRPC 服务。
- gRPC 协议转换:支持协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API。
- Websocket 代理
- Proxy Protocol
- HTTP(S) 反向代理
- SSL:动态加载 SSL 证书。
-
全动态能力
- 热更新和热插件: 无需重启服务,就可以持续更新配置和插件。
- 代理请求重写: 支持重写请求上游的
host
、uri
、schema
、enable_websocket
、headers
信息。 - 输出内容重写: 支持自定义修改返回内容的
status code
、body
、headers
。 - Serverless: 在 APISIX 的每一个阶段,你都可以添加并调用自己编写的函数。
- 动态负载均衡:动态支持有权重的 round-robin 负载平衡。
- 支持一致性 hash 的负载均衡:动态支持一致性 hash 的负载均衡。
- 健康检查:启用上游节点的健康检查,将在负载均衡期间自动过滤不健康的节点,以确保系统稳定性。
- 熔断器: 智能跟踪不健康上游服务。
- 代理镜像: 提供镜像客户端请求的能力。
- 流量拆分: 允许用户逐步控制各个上游之间的流量百分比。
-
精细化路由
- 支持全路径匹配和前缀匹配
- 支持使用 Nginx 所有内置变量做为路由的条件,所以你可以使用
cookie
,args
等做为路由的条件,来实现灰度发布、A/B 测试等功能 - 支持各类操作符做为路由的判断条件,比如
{"arg_age", ">", 24}
- 支持自定义路由匹配函数
- IPv6:支持使用 IPv6 格式匹配路由
- 支持路由的自动过期(TTL)
- 支持路由的优先级
- 支持批量 Http 请求
- 支持通过GraphQL属性过滤路由
-
安全防护
- 多种身份认证方式: key-auth, JWT, basic-auth, wolf-rbac, casbin, keycloak。
- IP 黑白名单
- Referer 黑白名单
- IdP 支持: 支持外部的身份认证服务,比如 Auth0,Okta,Authing 等,用户可以借此来对接 Oauth2.0 等认证方式。
- 限制速率
- 限制请求数
- 限制并发
- 防御 ReDoS(正则表达式拒绝服务):内置策略,无需配置即可抵御 ReDoS。
- CORS:为你的 API 启用 CORS。
- URI 拦截器:根据 URI 拦截用户请求。
- 请求验证器。
- CSRF:基于
Double Submit Cookie
的方式保护你的 API 远离 CSRF 攻击。
-
运维友好
- OpenTracing 可观测性: 支持 Apache Skywalking 和 Zipkin。
- 对接外部服务发现:除了内置的 etcd 外,还支持 Consul 和 Nacos,以及 Eureka。
- 监控和指标: Prometheus
- 集群:APISIX 节点是无状态的,创建配置中心集群请参考 etcd Clustering Guide。
- 高可用:支持配置同一个集群内的多个 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
字段,来保证安全。 - 外部日志记录器:将访问日志导出到外部日志管理工具。(HTTP Logger、TCP Logger、Kafka Logger、UDP Logger、RocketMQ Logger、SkyWalking Logger、Alibaba Cloud Logging(SLS)、Google Cloud Logging、Splunk HEC Logging)
- Helm charts
-
高度可扩展
- 自定义插件: 允许挂载常见阶段,例如
init
,rewrite
,access
,balancer
,header filter
,body filter
和log
阶段。 - 插件可以用 Java/Go/Python 编写
- 自定义负载均衡算法:可以在
balancer
阶段使用自定义负载均衡算法。 - 自定义路由: 支持用户自己实现路由算法。
- 自定义插件: 允许挂载常见阶段,例如
-
多语言支持
-
Apache APISIX 是一个通过
RPC
和WASM
支持不同语言来进行插件开发的网关.- RPC 是当前采用的开发方式。开发者可以使用他们需要的语言来进行 RPC 服务的开发,该 RPC 通过本地通讯来跟 APISIX 进行数据交换。到目前为止,APISIX 已支持Java, Golang, Python 和 Node.js。
- WASM 或 WebAssembly 是实验性的开发方式。 APISIX 能加载运行使用Proxy WASM SDK编译的 WASM 字节码。开发者仅需要使用该 SDK 编写代码,然后编译成 WASM 字节码,即可运行在 APISIX 中的 WASM 虚拟机中。
-
Serverless
- Lua functions: 能在 APISIX 每个阶段调用 lua 函数.
- Azure functions: 能无缝整合进 Azure Serverless Function 中。作为动态上游,能将特定的 URI 请求全部代理到微软 Azure 云中。
- Apache OpenWhisk: 与Apache OpenWhisk集成。作为动态上游,能将特定的 URI 请求代理到你自己的 OpenWhisk 集群。
立刻开始
-
安装
APISIX 在以下操作系统中可顺利安装并做过测试:
CentOS 7, Ubuntu 16.04, Ubuntu 18.04, Debian 9, Debian 10, macOS, ARM64 Ubuntu 18.04
请参考安装文档。
-
入门指南
入门指南是学习 APISIX 基础知识的好方法。按照 入门指南的步骤即可。
更进一步,你可以跟着文档来尝试更多的插件。
-
Admin API
Apache APISIX 提供了 REST Admin API,方便动态控制 Apache APISIX 集群。
-
插件二次开发
可以参考插件开发指南,以及示例插件
example-plugin
的代码实现。 阅读插件概念 会帮助你学到更多关于插件的知识。
更多文档请参考 Apache APISIX 文档站。
性能测试
使用 AWS 的 8 核心服务器来压测 APISIX,QPS 可以达到 140000,同时延时只有 0.2 毫秒。
Apache APISIX 和 Kong 的比较
API 网关核心功能点,两者均已覆盖
功能 | Apache APISIX | KONG |
---|---|---|
动态上游 | 支持 | 支持 |
动态路由 | 支持 | 支持 |
健康检查和熔断器 | 支持 | 支持 |
动态 SSL 证书 | 支持 | 支持 |
七层和四层代理 | 支持 | 支持 |
分布式追踪 | 支持 | 支持 |
自定义插件 | 支持 | 支持 |
REST API | 支持 | 支持 |
CLI | 支持 | 支持 |
Apache APISIX 的优势
功能 | 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 转码 | 是 | 否 |
MQTT 协议支持 | 是 | 否 |
配置生效时间 | 事件通知,低于 1 毫秒更新 | 定期轮询,5 秒 |
自带控制台 | 是 | 否 |
对接外部身份认证服务 | 是 | 否 |
配置中心高可用(HA) | 是 | 否 |
指定时间窗口的限速 | 是 | 否 |
支持任何 Nginx 变量做路由条件 | 是 | 否 |
性能对比测试详细内容如下。
贡献者变化
访问此处 使用贡献者数据服务。
视频和文章
- 2020.10.16 Apache APISIX: How to implement plugin orchestration in API Gateway
- 2020.10.16 Improve Apache APISIX observability with Apache Skywalking
- 2020.1.17 API 网关 Apache APISIX 和 Kong 的选型对比
- 2019.12.14 从 0 到 1:Apache APISIX 的 Apache 之路
- 2019.12.14 基于 Apache APISIX 的下一代微服务架构
- 2019.10.30 Apache APISIX 微服务架构极致性能架构解析
- 2019.9.27 想把 APISIX 运行在 ARM64 平台上?只要三步
- 2019.8.31 APISIX 技术选型、测试和持续集成
- 2019.8.31 APISIX 高性能实战 2
- 2019.7.6 APISIX 高性能实战
用户实际使用案例
- 新浪微博: 基于 Apache APISIX,新浪微博 API 网关的定制化开发之路
- 欧盟数字工厂平台: API Security Gateway – Using APISIX in the eFactory Platform
- 贝壳找房:如何基于 Apache APISIX 搭建网关
- 360:Apache APISIX 在基础运维平台项目中的实践
- HelloTalk:基于 OpenResty 和 Apache APISIX 的全球化探索之路
- 腾讯云:为什么选择 Apache APISIX 来实现 k8s ingress controller?
- 思必驰:为什么我们重新写了一个 k8s ingress controller?
APISIX 的用户有哪些?
有很多公司和组织把 APISIX 用于学习、研究、生产环境和商业产品中,包括:
欢迎用户把自己加入到 Powered By 页面。
全景图
APISIX 被纳入 云原生软件基金会 API 网关全景图
Logo
贡献
我们欢迎来自开源社区、个人和合作伙伴的各种贡献。
致谢
灵感来自 Kong 和 Orange。