标签搜索

API网关之apisix介绍

mrui
2025-12-08 / 0 评论 / 12 阅读 / 正在检测是否收录...

Apache APISIX 是 Apache 软件基金会下的顶级项目,由 API7.ai 开发并捐赠。它是一个具有 动态、实时、高性能 等特点的云原生 API 网关。

你可以使用 APISIX 网关作为所有业务的流量入口,它提供了动态路由、动态上游、动态证书、A/B 测试、灰度发布(金丝雀发布)、蓝绿部署、限速、防攻击、收集指标、监控报警、可观测、服务治理等功能。

项目地址: apisix.apache.org

中文帮助文档: 点击查看

容器化安装:APISIX 可以借助 quickstart 脚本快速安装并启动:

curl -sL https://run.api7.ai/apisix/quickstart | sh

说明:为了提供更好的体验,管理 API 默认无需授权,请在生产环境中打开授权开关。

nginx作为网关使用的一些痛点:

业务要加个新域名?改 nginx.conf。后端服务扩容了,IP 变了?改 upstream。要做个黑白名单防刷?改配置,加 Lua 脚本。

改完之后呢?nginx -t 测试一下,然后 nginx -s reload。

但是当upstream 有几千个的时候,或者一天要变更几百次配置的时候,这个 reload 就是个定时炸弹。比如Nginx 在高并发下 reload,新的 worker 进程起来了,旧的 worker 还在处理长连接,这时候系统负载会瞬间飙升,甚至导致这一瞬间的请求处理延迟极高,客户端直接超时。

而且,它是静态的。哪怕你只是想改一个限流的参数,从每秒 100 改成 200,你都得重载进程。

而APISIX是一个不需要reload,就能随意 控制流量、随意插拔插件 的超级 Nginx。

它底子还是 Nginx(确切地说是 OpenResty),所以性能上你完全不用担心,Nginx 能扛多少,它基本就能扛多少。甚至在某些场景下,因为它的路由算法优化得好,性能比原生的 Nginx 配置还要猛。

APISIX 放弃了传统的数据库,转而拥抱了 etcd。

  • 快:etcd 是基于 Raft 协议的,数据一致性强,而且对这种 KV 类型的配置读取速度极快。
  • 推送机制:这是重点!Nginx 读取配置是启动时读文件的,而 APISIX 是通过 etcd 的 watch 机制。一旦你在 etcd 里改了配置(或者通过 APISIX 的 Admin API 改了配置),etcd 会瞬间把变更推送到所有的 APISIX 节点。

整个过程中,长连接不会断,业务没有任何感知,配置就生效了。

路由(Route)——比 Nginx 灵活太多了

在 Nginx 里,我们写 location,正则匹配有时候写得头皮发麻。APISIX 的路由匹配算法用的是 Radix Tree(基数树)。这玩意儿不仅快,而且支持各种花式匹配。

你可以根据 HTTP Header、Query 参数、甚至 Cookie 来进行路由分发。

举个真实例子,咱们做灰度发布(金丝雀发布)。
以前在 Nginx 里,你可能得写一大堆 if 或者用 split_clients 模块,配置看着就晕。
在 APISIX 里,你只需要调一下 API,发个 JSON 过去:
“嘿,把 Header 里带着 version: v2 的请求,或者 ID 尾号是 1 的用户,转到这个新服务去。”

这就完事了。想停?再发个 API,立马切回来。

插件(Plugin)——这才是核心生产力

APISIX 之所以叫“全生命周期管理”,靠的就是插件。它自带了几十上百个插件,咱们日常运维需要的,基本都有。

  • 限流限速:limit-req,limit-count。不怕被刷爆了。
  • 身份认证:Key-auth,JWT,Basic-auth。以前这些逻辑可能要写在业务代码里,现在全扔给网关,业务服务只管处理逻辑,多爽。
  • 可观测性:这个我太喜欢了。一键开启 Prometheus 插件,Metrics 直接暴露出来,Grafana 面板都不用自己画,官方给你现成的。还有 SkyWalking、Zipkin 这种链路追踪,配置一下 IP 端口就能连上。
  • 安全:IP 黑白名单、CORS、URI 阻断,甚至还有 WAF(Web应用防火墙)功能的插件。

而且,它的插件架构设计得很“散装”。什么意思呢?就是你可以给每一个路由单独配插件。

比如 A 接口重要,我给它配个鉴权 + 链路追踪;B 接口是公共查询,我给它配个限流 + 缓存。互不干扰。

多语言支持

虽然 OpenResty 是 Lua 也就是 LuaJIT 的天下,但说实话,Lua 这语言,写点小脚本还行,逻辑复杂了维护起来真得掉头发。

APISIX 这点做得特别鸡贼(褒义)。它支持 Plugin Runner。
你是写 Java 的?写 Go 的?写 Python 的?没事,你可以用你熟悉的语言写插件,然后通过 RPC 的方式跟 APISIX 通信。

最近它还支持了 Wasm (WebAssembly)。这就更猛了,把插件编译成 Wasm 跑在网关里,既安全又快,还不用受语言限制。

为什么说它适合云原生?

现在大家都在搞 K8s,搞微服务。传统的 Nginx 在 K8s 里用也就是做个 Ingress Controller。APISIX 也有 APISIX Ingress Controller。

但它比官方那个 Nginx Ingress Controller 强在哪?

官方那个 Nginx Ingress,每次你改个 Ingress 资源,它其实是在后台偷偷改 nginx.conf 然后 reload。如果你集群大,Ingress 经常变,那 Nginx 就不停地 reload,性能抖动很明显。

APISIX 的 Ingress Controller 是全动态的。你改了 K8s 的资源,它直接转化成 APISIX 的配置通过 etcd 下发,全程无 reload。这就是为什么大厂上了 K8s 之后,很多都把网关换成了 APISIX。

0

评论 (0)

取消