在 APISIX 中使用 Wasm 插件
APISIX 支持按照 Proxy-Wasm 规范 开发的 WebAssembly (Wasm) 插件,该规范将 Wasm 功能扩展到代理。
使用 Wasm 开发 APISIX 插件有几个好处:
- 能够将许多编程语言编译为 Wasm。这允许你在开发 APISIX 插件时利用现有技术栈的功能。
- 在 APISIX 内本机运行 Wasm 插件,但在单独的 VM 中运行。即使插件崩溃,APISIX 也可以继续运行。
- APISIX 对 Wasm 的持续支持。这避免了维护针对不同编程语言的多个外部插件运行器。
本指南将帮助你了解 APISIX 如何支持 Wasm,以及如何使用 Proxy-Wasm Go SDK 在 Go 中开发示例 Wasm 插件,并将插件加载到 APISIX 中。
APISIX 如何支持 Wasm
APISIX 实现了 Proxy-Wasm 规范。该规范最初是为 Envoy 代理开发的,后来发展成为为代理编写 Wasm 插件的标准。任何使用 Proxy-Wasm SDK 编写的插件都可以在 APISIX 中运行。
APISIX 使用以下编程模型来处理 Wasm 插件。在编写自定义 Wasm 插件时,应实现所有这些接口。

每个插件都有自己的 VMContext,它可以为每条路由创建多个 PluginContext。例如,每个 PluginContext 对应于一个插件实例,因此如果服务配置了 Wasm 插件并且两个路由继承自该服务,则每个路由都将拥有自己的 PluginContext。
同样,一个 PluginContext 是多个 HTTPContext 的父级。每个命中配置的 HTTP 请求也将拥有自己的 HttpContext。例如,如果你同时配置了全局规则和路由,则 HTTP 请求将具有两个 HTTPContext