Apache APISIX 简介与实践

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-value7

实践案例

咪咕视频的实践

咪咕视频使用 APISIX 来处理高并发的视频直播业务,主要应用在流量调度、动态路由和安全防护三个方面2。通过 APISIX 的动态路由功能,可以在不重新加载服务的情况下进行路由配置更新,提高了业务的灵活性和稳定性2

又拍云的实践

又拍云将 APISIX 应用于公网网关和 Ingress 网关场景,主要用于处理 CDN 边缘节点的 API 访问和官网静态页面流量4。APISIX 的高性能和动态配置能力帮助又拍云实现了流量管理和备份需求4

相关推荐
MarkHD19 分钟前
AI编程助手入门指南:GitHub Copilot、Cursor与Claude的安装与基础使用
github·copilot·ai编程
陈随易1 小时前
Element Plus 2.10.0 重磅发布!新增Splitter组件
前端·后端·程序员
陈随易1 小时前
2025年100个产品计划之第11个(哆啦工具箱) - 像哆啦A梦口袋一样丰富的工具箱
前端·后端·程序员
不爱说话郭德纲1 小时前
面试官:你给我讲讲async/await
前端·深度学习·面试
PetterHillWater1 小时前
Automa-RPA实现京东商品自动搜索
后端
前端小巷子2 小时前
Promise 链式调用:让异步编程更优雅
前端·面试·promise
肖笙XiaoSheng2 小时前
用Gemini调整我的定时任务代码
后端·aigc·ai编程
WindSearcher2 小时前
OAuth协议
后端
LanLance2 小时前
ES101系列09 | 运维、监控与性能优化
java·运维·后端·elasticsearch·云原生·性能优化·golang
Piper蛋窝2 小时前
我所理解的 Go 的 `panic` / `defer` / `recover` 异常处理机制
后端·go