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

相关推荐
一路向北⁢4 分钟前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(三)
java·spring boot·后端·sse
qq_2975746723 分钟前
SpringBoot项目长时间未访问,Tomcat临时文件夹被删除?解决方案来了
spring boot·后端·tomcat
一个有梦有戏的人29 分钟前
Python3基础:函数基础,解锁模块化编程新技能
后端·python
逍遥德35 分钟前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring
weixin_66843 分钟前
GitHub 2026年AI项目详细数据汇总表-AI分析-分享
人工智能·github
qq_297574679 小时前
【实战教程】SpringBoot 实现多文件批量下载并打包为 ZIP 压缩包
java·spring boot·后端
马猴烧酒.14 小时前
【面试八股|Java集合】Java集合常考面试题详解
java·开发语言·python·面试·八股
CoderJia程序员甲17 小时前
GitHub 热榜项目 - 日榜(2026-02-05)
ai·开源·大模型·github·ai教程
闻哥17 小时前
从测试坏味道到优雅实践:打造高质量单元测试
java·面试·单元测试·log4j·springboot