Apache APISIX API 网关
Apache APISIX 是一个动态、实时、高性能的 API 网关。
APISIX API 网关提供丰富的流量管理功能,如负载均衡、动态上游、金丝雀发布、断路器、身份验证、可观察性等。
您可以使用 APISIX API 网关 来处理传统的南北向流量,以及服务之间的东西向流量。它还可以用作 k8s 入口控制器。
Apache APISIX 的技术架构:
社区
- 请在 G2 上为 APISIX 写一篇评论。
- 邮件列表:发送邮件至 dev-subscribe@apisix.apache.org,按照回复订阅邮件列表。
- Slack 工作区 - 邀请链接(如果链接过期,请提交一个问题),然后加入 #apisix 频道(Channels -> Browse channels -> 搜索 "apisix")。
- - 使用标签
#ApacheAPISIX
关注并与我们互动 - 文档
- 讨论
- 博客
特性
您可以使用 APISIX API 网关作为流量入口来处理所有业务数据,包括动态路由、动态上游、动态证书、A/B 测试、金丝雀发布、蓝绿部署、限速、防御恶意攻击、指标、监控报警、服务可观察性、服务治理等。
-
全平台
- 云原生:平台无关,无供应商锁定,APISIX API 网关可以在裸机到 Kubernetes 上运行。
- 支持 ARM64:无需担心基础设施技术的锁定。
-
多协议
- TCP/UDP 代理:动态 TCP/UDP 代理。
- Dubbo 代理:动态 HTTP 到 Dubbo 代理。
- 动态 MQTT 代理:支持通过
client_id
进行 MQTT 负载均衡,同时支持 MQTT 3.1.* 和 5.0。 - gRPC 代理:代理 gRPC 流量。
- gRPC Web 代理:将 gRPC Web 流量代理到 gRPC 服务。
- gRPC 转码:支持协议转码,使客户端可以使用 HTTP/JSON 访问您的 gRPC API。
- 代理 WebSocket
- 代理协议
- HTTP(S) 转发代理
- SSL:动态加载 SSL 证书
- HTTP/3 与 QUIC
-
全动态
-
热更新和热插件:无需重启即可持续更新配置和插件!
-
代理重写:支持在发送到上游之前重写请求的
host
、uri
、schema
、method
、headers
。 -
响应重写:为客户端设置自定义的响应状态码、正文和头部。
-
动态负载均衡:带权重的轮询负载均衡。
-
基于哈希的负载均衡:使用一致性哈希会话进行负载均衡。
-
健康检查:对上游节点启用健康检查,并在负载均衡时自动过滤不健康的节点,以确保系统稳定性。
-
熔断器:智能跟踪不健康的上游服务。
-
代理镜像:提供镜像客户端请求的能力。
-
流量分割:允许用户逐步将流量百分比分配到不同的上游。
-
精细化路由
- 支持全路径匹配和前缀匹配
- 支持所有 Nginx 内置变量作为路由条件,因此您可以使用
cookie
、args
等作为路由条件来实现金丝雀发布、A/B 测试等。 - 支持各种运算符作为路由判断条件,例如
{"arg_age", ">", 24}
- 支持自定义路由匹配函数
- IPv6:使用 IPv6 匹配路由。
- 支持 TTL
- 支持优先级
- 支持批量 HTTP 请求
- 支持通过 GraphQL 属性过滤路由
-
安全性
-
运维友好
-
Zipkin 跟踪: Zipkin
-
开源 APM: 支持 Apache SkyWalking
-
支持外部服务发现: 除了内置的 etcd,还支持 Consul、Consul_kv、Nacos、Eureka 和 Zookeeper (CP)。
-
监控和指标: Prometheus
-
集群: APISIX 节点无状态,对配置中心进行集群化,请参考 etcd 集群指南。
-
高可用: 支持在同一集群中配置多个 etcd 地址。
-
版本控制: 支持操作回滚。
-
命令行界面: 通过命令行启动、停止、重载 APISIX。
-
独立模式: 支持从本地 YAML 文件加载路由规则,更适合如 Kubernetes(K8s) 等环境。
-
全局规则: 允许对所有请求运行任何插件,如限速、IP 过滤等。
-
高性能: 单核 QPS 达到 18k,平均延迟低于 0.2 毫秒。
-
REST 管理 API: 使用 REST 管理 API 控制 Apache APISIX,默认只允许 127.0.0.1 访问,可以修改
conf/config.yaml
中的allow_admin
字段来指定允许调用管理 API 的 IP 列表。另外,管理 API 使用密钥认证来验证调用者身份。 -
外部日志记录器: 将访问日志导出到外部日志管理工具。(HTTP 日志记录器、TCP 日志记录器、Kafka 日志记录器、UDP 日志记录器、RocketMQ 日志记录器、SkyWalking 日志记录器、阿里云日志服务(SLS)、Google Cloud 日志记录、Splunk HEC 日志记录、文件日志记录器、SolarWinds Loggly 日志记录、腾讯云 CLS)。
-
ClickHouse: 将日志推送到 ClickHouse。
-
Elasticsearch: 将日志推送到 Elasticsearch。
-
Datadog: 通过 UDP 协议将自定义指标推送到 DogStatsD 服务器,该服务器随 Datadog 代理 一起提供。DogStatsD 基本上是 StatsD 协议的一种实现,它为 Apache APISIX 代理收集自定义指标,将其聚合成单个数据点,并发送到配置的 Datadog 服务器。
-
HashiCorp Vault: 支持在低信任环境中从 Vault 安全存储访问机密的解决方案。目前,在 jwt-auth 认证插件中可以使用 APISIX Secret 资源从 vault 链接 RS256 密钥(公私密钥对)或密钥。
-
高度可扩展
- 自定义插件: 允许挂钩常见阶段,如
rewrite
、access
、header filter
、body filter
和log
,还允许挂钩balancer
阶段。 - 插件可以用 Java/Go/Python 编写
- 插件可以用 Proxy Wasm SDK 编写
- 自定义负载均衡算法: 您可以在
balancer
阶段使用自定义负载均衡算法。 - 自定义路由: 支持用户自行实现路由算法。
- 自定义插件: 允许挂钩常见阶段,如
-
多语言支持
- Apache APISIX 是一个支持插件开发的多语言网关,并通过
RPC
和Wasm
提供支持。 - RPC 方式是当前的方式。开发者可以根据需求选择语言,在启动独立的 RPC 进程后,通过本地 RPC 通信与 APISIX 交换数据。目前,APISIX 支持 Java、Golang、Python 和 Node.js。
- Wasm 或 WebAssembly 是一种实验性方式。APISIX 可以通过 APISIX wasm 插件加载和运行用 Proxy Wasm SDK 编写的 Wasm 字节码。开发者只需按照 SDK 编写代码,然后将其编译成可在 APISIX 的 Wasm VM 上运行的 Wasm 字节码。
- Apache APISIX 是一个支持插件开发的多语言网关,并通过
-
无服务器
- Lua 函数:在 APISIX 的每个阶段调用函数。
- AWS Lambda:将 AWS Lambda 函数集成为动态上游,将特定 URI 的所有请求代理到 AWS API 网关端点。支持通过 API 密钥和 AWS IAM 访问密钥进行授权。
- Azure Functions:与 Azure 无服务器函数无缝集成,作为动态上游将特定 URI 的所有请求代理到 Microsoft Azure 云。
- Apache OpenWhisk:与 Apache OpenWhisk 无缝集成,作为动态上游将特定 URI 的所有请求代理到您自己的 OpenWhisk 集群。
入门指南
-
安装
请参考安装文档。
-
开始使用
入门指南是学习 APISIX 基础知识的好方法。只需按照入门指南中的步骤操作即可。
此外,您可以按照文档尝试更多插件。
-
管理 API
Apache APISIX 提供 REST 管理 API 来动态控制 Apache APISIX 集群。
-
插件开发
更多文档,请参考 Apache APISIX 文档网站
基准测试
使用 AWS 的八核服务器,APISIX 的 QPS 达到 140,000,延迟仅为 0.2 毫秒。
基准测试脚本已开源,欢迎尝试和贡献。
APISIX 在 AWS graviton3 C7g 上也表现出色。
用户案例
谁在使用 APISIX API 网关?
各种公司和组织将 APISIX API 网关用于研究、生产和商业产品,以下是其中一些:
- Airwallex
- 哔哩哔哩
- CVTE
- 欧洲 eFactory 平台
- 欧洲哥白尼参考系统
- 吉利
- 荣耀
- 地平线机器人
- 爱奇艺
- 联想
- NASA JPL
- 奈雪的茶
- OPPO
- 青云
- 瑞士电信
- 腾讯游戏
- 中国航信
- vivo
- 新浪微博
- 微城
- 金山办公
- 小鹏汽车
- Zoom
标志
致谢
灵感来自 Kong 和 Orange。