wasm-go 源码学习
20 天 · 每天 30 分钟 · 逐层读懂 Higress 的 Go 语言 Wasm 插件开发 SDK——它让你用 Go 写网关插件(限流、鉴权、AI 处理…),编译成 Wasm 跑进 Envoy。这是 higress-group 系列的收官站:前四站教你网关怎么工作,这一站教你怎么给网关加自己的能力。
开篇 · 这是个什么项目
wasm-go(github.com/higress-group/wasm-go)是 Higress 官方的 Go 语言 Wasm 插件 SDK。你用 Go 写一个插件(比如"拦截含某关键词的请求"),用它提供的封装 SetCtx/ParseConfig/ProcessRequestHeaders 等,编译成 .wasm 文件,打成 OCI 镜像,Higress 网关就能加载运行。
🎯 一句话:wasm-go = proxy-wasm ABI 的 Go 友好封装。它把 Envoy 底层晦涩的 Wasm 宿主调用,包装成"填几个回调函数就能写插件"的极简 SDK。你只写业务逻辑,生命周期/配置解析/规则匹配/HTTP&Redis 调用 SDK 全帮你搞定。
极简插件模型
init 里 SetCtx 注册回调,填 parseConfig + 各阶段钩子即可。
规则匹配
RuleMatcher 按路由/域名/服务匹配不同配置。
外部调用
HttpCall / RedisCall 异步调后端,回调式编程。
AI 能力
tokenusage 多协议解析 LLM Token 用量。
higress-group/wasm-go/{pkg,examples},是个只有约 2500 行的精悍 SDK。架构全景(动起来看)
下图那颗发光小球是"一个请求进网关 → 触发你的 Wasm 插件 → 插件处理"的旅程。从上到下:请求 → Envoy Wasm VM → wasm-go SDK 封装 → 你的插件逻辑。
写一个插件的心智模型是"注册回调 → 解析配置 → 匹配规则 → 处理请求 → 返回 Action":
怎么用这份教程
每天 30 分钟
一天一个独立页面,跟着"今日小结 + 动手"收尾。
零基础友好
不假设你懂 Wasm/Go 泛型/回调式编程,术语首次出现都有大白话解释。
精确到行号
关键代码标 文件:行号,可在真源码里跳转对照。
项目全景(插件 SDK)
wasm-go 是什么、和 Envoy/Higress/proxy-wasm 的关系。
第一个插件 request-block
main/init/SetCtx/ParseConfig/钩子全流程。
proxy-wasm 与 ABI
Wasm 虚拟机、宿主调用、下行/上行钩子。
三级 Context
CommonVmCtx/PluginCtx/HttpContext + iface 接口。
SetCtx 与函数式选项
CtxOption 模式、8 个 Process* 钩子、新旧 API。
配置解析
ParseConfig 家族、gjson、raw/context 变体。
RuleMatcher 规则匹配
_rules_、四种 category、匹配数据结构。
运行时匹配 GetMatchConfig
按 :authority/route_name/cluster_name 选配置。
全局配置 vs 规则配置
ParseOverrideConfig、规则级隔离容错。
OnPluginStart 生命周期
配置加载、pluginID、tick 注册、IO 限流。
HTTP 请求/响应钩子
headers/body/streaming/streamDone、Action 语义。
HttpContext 能力
UserAttribute/自定义日志/DontReadBody/RouteCall。
Cluster 集群抽象
8 种集群:Route/K8s/Nacos/FQDN/Static/Dns/Consul。
HTTP 外部调用
HttpCall/ClusterClient、异步回调、Pause/Resume。
Redis 调用
RedisClusterClient、Init、Get/Set/Eval、resp。
日志与安全日志
Log 接口、SafeLog、Unsafe*、custom_log。
Leader 选举与共享数据
DoLeaderElection/Lease/SharedData CAS。
AI Token 用量解析
tokenusage 多协议 GetTokenUsage、gjson path。
性能、稳定性与测试
rebuild 重建、IO 限流、streaming inject、单元测试。
构建部署与收官串讲
编译 wasm + Docker + WasmPlugin CRD + 五站串讲。
✅ 全部 20 天已就绪(higress-group 系列 5/5 收官完成)。建议先学 Envoy 和 Higress 再学本课。