Apache APISIX:云原生时代的 API 网关利器

APISIX 是一个动态、实时、高性能的 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。
📋 目录
什么是 APISIX
Apache APISIX 是由 Apache 软件基金会孵化的开源项目,于 2020 年成为 Apache 顶级项目(Top-Level Project)。它是一个云原生、动态、实时、高性能的 API 网关,基于 OpenResty + etcd 构建。
诞生的背景
随着微服务架构的普及,API 网关的重要性日益凸显:
- 单体应用拆分为成百上千个微服务
- 服务间通信复杂度指数级增长
- 流量管理、安全防护、可观测性需求迫切
传统的 Nginx 虽然性能优秀,但配置变更需要 reload,无法满足动态、实时的流量管理需求。APISIX 正是为解决这一痛点而生。
核心特性
🚀 1. 动态配置 - 无需重启
APISIX 的最大亮点是完全动态:
- 添加/修改路由、上游、插件无需重启服务
- 配置变更通过 etcd 实时推送,毫秒级生效
- 支持多集群配置同步
# 创建一条路由(即时生效)
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: your-api-key' -X PUT -d '
{
"uri": "/hello",
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'
🔌 2. 丰富的插件生态
内置 80+ 开箱即用的插件:
| 类别 | 代表插件 | 功能 |
|---|---|---|
| 认证鉴权 | key-auth, jwt-auth, oauth2, ldap-auth | 身份验证与授权 |
| 安全防护 | cors, ip-restriction, ua-restriction, referer-restriction | 访问控制 |
| 流量控制 | limit-req, limit-conn, limit-count, request-validation | 限流限速 |
| 可观测性 | prometheus, skywalking, zipkin, elasticsearch-logger | 监控追踪 |
| 协议转换 | grpc-transcode, http-logger, dubbo-proxy | 协议适配 |
| Serverless | serverless-functions, aws-lambda, openwhisk | 函数计算 |
⚡ 3. 极致性能
基于 OpenResty(Nginx + LuaJIT)构建,性能表现优异:
- QPS: 单核可达 18,000+ 请求/秒
- 延迟: P99 延迟低于 1 毫秒
- 内存: 路由热加载,内存占用低
官方基准测试:在 AWS 8 核机器上,APISIX 的 QPS 是 Kong 的 2 倍,延迟只有 Kong 的一半。
☸️ 4. 云原生友好
- 原生 Kubernetes 支持:通过 Ingress Controller 无缝对接 K8s
- 服务发现:支持 Consul, Nacos, Eureka, DNS 等多种服务注册中心
- 多语言开发:支持 Go, Java, Python, JavaScript 等语言编写自定义插件
架构设计

控制平面与数据平面分离
| 组件 | 职责 | 技术栈 |
|---|---|---|
| 控制平面 | 管理配置、API 接口、Dashboard | Go + etcd |
| 数据平面 | 处理流量、执行插件 | OpenResty (Nginx + LuaJIT) |
| 配置中心 | 存储配置、实时同步 | etcd |
数据流向
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Client │────▶│ APISIX │────▶│ Upstream │
│ │ │ (OpenResty)│ │ (Backend) │
└─────────────┘ └──────┬──────┘ └─────────────┘
│
▼
┌─────────────┐
│ etcd │
│ (配置中心) │
└─────────────┘
- 管理员通过 Admin API 或 Dashboard 修改配置
- 配置写入 etcd
- APISIX 监听 etcd 变更,实时加载新配置
- 客户端请求到达 APISIX,匹配路由并执行插件链
- 请求被代理到上游服务
与竞品对比
APISIX vs Kong vs Nginx
| 特性 | APISIX | Kong | Nginx |
|---|---|---|---|
| 动态配置 | ✅ 完全动态 | ⚠️ 部分动态 | ❌ 需 reload |
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 插件数量 | 80+ | 50+ | 需自行开发 |
| K8s 集成 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 多语言插件 | ✅ 支持 | ❌ 仅 Lua | ❌ N/A |
| 开源协议 | Apache 2.0 | Apache 2.0 | BSD |
| 社区活跃度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
选择建议
- 选择 APISIX:需要极致性能、动态配置、丰富插件、云原生场景
- 选择 Kong:需要成熟的商业支持、企业级功能
- 选择 Nginx:简单反向代理、静态资源服务
快速入门
使用 Docker 一键启动
# 启动 APISIX + etcd + Dashboard
git clone https://github.com/apache/apisix-docker.git
cd apisix-docker/example
docker-compose -p docker-apisix up -d
配置第一条路由
# 1. 创建上游服务
curl http://127.0.0.1:9180/apisix/admin/upstreams/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}'
# 2. 创建路由规则
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/get",
"upstream_id": "1"
}'
# 3. 测试访问
curl http://127.0.0.1:9080/get
启用限流插件
# 为路由添加限流插件(每分钟 100 请求)
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/get",
"upstream_id": "1",
"plugins": {
"limit-count": {
"count": 100,
"time_window": 60,
"rejected_code": 429
}
}
}'
实际应用场景
场景一:微服务网关

在 Kubernetes 环境中,APISIX Ingress Controller 可以作为微服务的统一入口:
- 统一认证鉴权
- 流量治理(金丝雀发布、蓝绿部署)
- 服务熔断与降级
- 灰度发布与 A/B 测试
场景二:API 全生命周期管理
- 设计:OpenAPI 规范定义
- 发布:一键发布到多个环境
- 运营:实时监控、告警、分析
- 下线:平滑下线,不影响存量请求
场景三:多集群流量管理
# APISIX 支持多集群部署
clusters:
- name: beijing
etcd:
- http://10.0.1.10:2379
- name: shanghai
etcd:
- http://10.0.2.10:2379
总结
Apache APISIX 作为一款云原生、高性能、动态化的 API 网关,凭借以下优势成为越来越多企业的选择:
| 优势 | 说明 |
|---|---|
| 动态实时 | 配置变更毫秒级生效,无需重启 |
| 性能卓越 | 基于 OpenResty,单核 18k+ QPS |
| 插件丰富 | 80+ 开箱即用插件,覆盖全场景 |
| 生态完善 | 活跃的社区,完善的文档,商业支持可选 |
| 云原生 | 深度集成 Kubernetes,支持多语言插件 |
学习资源
- 📖 官方文档:https://apisix.apache.org/zh/docs/
- 💻 GitHub:https://github.com/apache/apisix
- 🎥 视频教程:Apache APISIX Bilibili 官方账号
- 💬 社区交流群:搜索「APISIX 社区」
APISIX 不仅是网关,更是云原生时代的流量管理中枢。
如果你正在寻找一款高性能、易扩展、社区活跃的 API 网关,APISIX 绝对值得一试!
本文撰写于 2025 年,基于 APISIX 3.x 版本
评论区