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

相关推荐
uzong3 小时前
程序员从大厂回重庆工作一年
java·后端·面试
四问四不知6 小时前
github上的几个热门项目
github
码事漫谈6 小时前
【精华】C++成员初始化列表完全指南:为什么、何时以及如何正确使用
后端
码事漫谈7 小时前
C++ 强制类型转换:类型安全的多维工具
后端
CoderJia程序员甲7 小时前
GitHub 热榜项目 - 日榜(2025-12-3)
ai·开源·llm·github·ai教程
RainbowSea8 小时前
github 仓库主页美化定制
后端
RainbowSea8 小时前
从 Spring Boot 2.x 到 3.5.x + JDK21:一次完整的生产环境迁移实战
java·spring boot·后端
笨手笨脚の8 小时前
Spring Core常见错误及解决方案
java·后端·spring
计算机毕设匠心工作室8 小时前
【python大数据毕设实战】全球大学排名数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
VX:Fegn08959 小时前
计算机毕业设计|基于Java人力资源管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端·课程设计