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

相关推荐
yyuuuzz3 小时前
aws亚马逊入门常见认知误区
运维·服务器·网络·云计算·github·aws
野生技术架构师4 小时前
2026年最全Java面试题及答案汇总(建议收藏,面试前看这篇就够了)
java·开发语言·面试
程序员飞哥4 小时前
重构 AI 思维(一):Prompt Engineering,如何下达不可违抗的指令?
人工智能·后端
一只叫煤球的猫5 小时前
ThreadForge 源码解读一:ThreadScope 如何把并发任务放进清晰边界?
java·面试·开源
皮皮林5515 小时前
@Autowired 和 @Resource 注解有啥区别?你这项目怎么还混着用呢?
后端
程序员小假6 小时前
HTTP3 性能更好,为什么内网微服务依然多用 HTTP2?HTTP2 内网优势是什么?
java·后端
wangbing11256 小时前
踩坑:el8应用装在el9上
开发语言·后端·ruby
kyriewen117 小时前
你等的Babel编译,够喝三杯咖啡了——用Rust重写的SWC,只需眨个眼
开发语言·前端·javascript·后端·性能优化·rust·前端框架
IT_陈寒7 小时前
SpringBoot自动配置坑了我,原来要这样绕过去
前端·人工智能·后端
东方小月7 小时前
Claude Code 完整上手指南:MCP、Skills、第三方模型配置一次搞定
前端·人工智能·后端