Apache APISIX 是一个动态、实时、高性能的开源 API 网关,由 Apache 软件基金会维护。它提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能126。APISIX 基于 NGINX 和 LuaJIT 构建,具有超高性能,单核 QPS 高达 23000,平均延迟仅为 0.2 毫秒1。
使用场景
APISIX 适用于以下场景:
- 企业内部微服务治理 :集中管理和监控微服务,实现统一认证与安全策略4。
- 公有云与混合云环境 :提供跨云一致的流量管理与监控4。
- API 生命周期管理 :支持 API 从设计到下线的全生命周期管理4。
- 高并发和实时性要求高的场景 :如视频直播业务,需要处理高并发访问和实时数据传输3。
代码示例
以下是一个使用 Docker 部署 APISIX 并配置 API 路由的示例:
步骤 1:安装 Docker
确保你的系统上已安装 Docker。
步骤 2:启动 APISIX
使用以下命令启动 APISIX:
bash
bash
docker run -d --name apisix \
-v /usr/local/apisix/conf:/usr/local/apisix/conf \
-v /usr/local/apisix/logs:/usr/local/apisix/logs \
-p 9080:9080 -p 9443:9443 \
apache/apisix:2.10-alpine
步骤 3:配置路由
在 /usr/local/apisix/conf/config.yaml
中添加以下配置:
yaml
text
apisix:
upstream:
backend1:
nodes:
- host: backend1.example.com
port: 80
route:
- name: api1
uris: ['/api/v1']
methods: ['GET']
plugins:
- name: prometheus
- name: limit-count
config:
count: 1000
time_window: 60
upstream: backend1
步骤 4:启动 APISIX
sql
bash
/usr/local/apisix/bin/apisix start
步骤 5:验证配置
使用 curl
验证配置是否生效:
bash
bash
curl "http://127.0.0.1:9080/api/v1" --head
这个示例配置了一个 API 路由,当访问 /api/v1
时,会转发到 backend1.example.com:80
并进行流量控制和监控7。
Lua 插件示例
以下是一个自定义 Lua 插件的示例,用于在 API 请求时添加一个特定的 HTTP 头信息:
lua
lua
function plugin:new()
local plugin = {
name = "my-plugin",
fields = {
header_name = {type = "string", default = "X-My-Header"}
}
}
return setmetatable(plugin, {__index = self})
end
function plugin:access(conf, request)
ngx.header[conf.header_name] = "my-header-value"
end
return plugin
这个插件在 API 请求时添加一个名为 X-My-Header
的 HTTP 头信息,并设置为 my-header-value
7。
实践案例
咪咕视频的实践
咪咕视频使用 APISIX 来处理高并发的视频直播业务,主要应用在流量调度、动态路由和安全防护三个方面2。通过 APISIX 的动态路由功能,可以在不重新加载服务的情况下进行路由配置更新,提高了业务的灵活性和稳定性2。
又拍云的实践
又拍云将 APISIX 应用于公网网关和 Ingress 网关场景,主要用于处理 CDN 边缘节点的 API 访问和官网静态页面流量4。APISIX 的高性能和动态配置能力帮助又拍云实现了流量管理和备份需求4。