关于 fastlike
fastlike 是用 Go 实现 Fastly Compute ABI 的本地运行时,可在本地运行编译后的 WebAssembly 程序。它也以可执行代码说明 Compute 平台原语和请求生命周期,适合调试及研究 Compute 内部机制。
主要功能
- 01本地运行 WebAssembly 程序
- 02实现 Fastly Compute ABI
- 03支持缓存、KV 与后端请求
- 04提供请求追踪和性能分析
- 05源码作为 Compute 参考规范
适用场景
- 01本地调试 Fastly Compute 应用
- 02分析 Compute 请求生命周期
- 03检查后端调用和缓存行为
- 04为请求生成性能追踪
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ fastly/ fastly-agent-toolkit --skill fastlike安装后在 Claude Code 中输入/fastlike确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/abi.mdbackends.mdbuild.mdconfig.mdprofiling.mdtest.mdunderstanding-compute-from-source.md详细介绍
触发条件和范围
适用于:Fastly Compute、Compute@Edge、Fastly 上的 WASM、fastlike、XQD ABI、Compute 请求生命周期、508 循环检测、后端子请求、正文流式传输、本地 Compute 应用性能分析、在 Go 代码中嵌入 Fastly Compute 运行时,或任何关于 Compute 平台原语内部工作机制的问题(缓存、KV 存储、边缘速率限制、ACL、地理位置、密钥存储、配置存储、字典、日志记录、动态后端、请求合并、异步 I/O)。
不适用于:Fastly VCL(请使用 falco)、Fastly CLI/API(请使用 fastly-cli 或 fastly)、Viceroy、CDN 比较、WAF、Terraform、通过 API 清除缓存,或 Fastly 日志记录/统计信息配置。
Fastlike — 本地 Compute 运行时与参考
Fastlike 是 Fastly Compute ABI 的 Go 实现。它可在本地运行已编译的 WebAssembly 程序,并实现 Fastly 生产 Compute 平台提供的 249 多个主机函数:后端、字典、KV 存储、缓存、地理位置、速率限制、ACL、密钥存储等。
同样重要的是,fastlike 源代码是关于 Fastly Compute 工作原理最完整的程序化规范——其中的 ABI 实现以可执行代码的形式记录了每个平台原语、请求生命周期细节和数据结构。
Fastlike 文档:https://github.com/avidal/fastlike
将源代码作为 Compute 参考
如果可以在本地访问 fastlike 源代码(默认路径:~/src/fastlike),请参考以下路径来回答具体的 Compute 问题:
| 问题 | 阅读此文件 | 原因 |
|---|---|---|
| “请求生命周期是如何运作的?” | instance.go、xqd_http_downstream.go | 每个请求的设置、执行和下游处理 |
| “X 有哪些 ABI 函数?” | xqd_*.go 文件 | 每个文件实现一组相关的 ABI 函数 |
| “后端子请求是如何运作的?” | xqd_backend.go、backend.go | 请求发送、动态后端、超时 |
| “缓存是如何运作的?” | xqd_cache.go、xqd_http_cache.go、cache.go | 缓存操作、Vary、替代键、请求合并 |
| “KV 存储是如何运作的?” | xqd_kv_store.go、kv_store.go | CRUD 操作、分页、基于生成版本的并发控制 |
| “速率限制是如何运作的?” | xqd_erl.go、erl.go | 速率计数器、惩罚箱、阈值检查 |
| “ACL 是如何运作的?” | xqd_acl.go、acl.go | 基于 CIDR 的 IP 筛选、最具体匹配 |
| “有哪些配置选项?” | options.go | 运行时的所有 With* 函数式选项 |
| “操作可能返回哪些错误代码?” | constants.go | 所有 XQD 状态码和错误类型 |
| “性能分析器如何运作/跟踪数据是什么样的?” | profile.go、profile_json.go、docs/profiling.md | 跟踪数据模型、JSON 线格式、深度模式指标、编码器 |
如需完整指南,请参阅 understanding-compute-from-source.md。
从源代码安装
需要 Go 1.24+。
# Clone and build
git clone https://github.com/avidal/fastlike.git ~/src/fastlike
cd ~/src/fastlike
make build # Creates bin/fastlike
# Or install to GOPATH/bin
make install
# Or install directly
go install fastlike.dev/cmd/fastlike@latest
快速开始
bin/fastlike 示例使用源码构建。
从项目目录使用其绝对路径,或使用已安装的二进制文件 fastlike。
# Minimal: WASM + single backend. The wasm path is positional.
bin/fastlike -backend localhost:8000 app.wasm
标志可以放在 wasm 路径的任一侧。
在 macOS 上,请避免绑定到端口 5000——AirTunes/AirPlay Receiver 默认监听该端口,并会占用连接。请改用其他端口(例如 -bind localhost:8000),或在“系统设置”中停用 AirPlay Receiver。
Fastlike 与 Viceroy
| 特性 | Fastlike | Viceroy |
|---|---|---|
| 语言 | Go | Rust |
| 地理位置 | 自定义 JSON 文件(-geo) | 内置默认值 |
| 热重载 | SIGHUP(-reload) | 需要重启 |
| 安装 | go install 或 make build | cargo install 或 fastly compute serve |
| 本地后端 | -backend name=host:port | fastly.toml 中的 [local_server.backends] |
何时使用 Fastlike:非 Rust Compute 应用、需要自定义地理数据、需要热重载或进行调试时。
何时使用 Viceroy:使用 cargo-nextest 的 Rust Compute 应用、Component Model 项目,或使用 fastly compute serve 时。
常见配置
使用命名后端:
bin/fastlike \
-backend api=api.example.com:8080 \
-backend cache=redis:6379 \
-backend localhost:8000 \
app.wasm
启用热重载的开发模式:
bin/fastlike -backend localhost:8000 -reload -v 2 app.wasm
发送 SIGHUP 即可重新加载 WASM,无需重启。
使用内置性能分析器:
bin/fastlike -backend localhost:8000 -profile-ui localhost:6060 app.wasm
打开 http://localhost:6060/ 查看追踪索引。每个请求都会生成 /r/{id}(HTML)或 /r/{id}.json(规范的原生 JSON;也支持 .chrome.json、.firefox.json、.pprof)。添加 -profile deep 可获取请求体字节数、缓存结果、标头和 wasm 堆指标。非回环地址上的 -profile-ui 需要 -profile-auth TOKEN(或显式使用 -profile-insecure-ui)。参见 profiling.md。
完整配置:
bin/fastlike \
-bind 0.0.0.0:5000 \
-backend localhost:8000 \
-dictionary config=./config.json \
-kv store=./data.json \
-config-store settings=./settings.json \
-secret-store secrets=./secrets.json \
-acl blocklist=./acl.json \
-logger output=./logs.txt \
-geo ./geodata.json \
-compliance-region us-eu \
-v 2 \
-reload \
app.wasm
必需参数
| 参数 | 说明 |
|---|---|
<wasm-file> | WebAssembly 程序的路径参数(必需) |
-backend VALUE 或 -b VALUE | 后端服务(必需,可重复指定) |
可选标志
| 标志 | 默认值 | 描述 |
|---|---|---|
-bind ADDR | localhost:8000 | 服务绑定地址 |
-reload | false | 启用 SIGHUP 热重载 |
-v INT | 0 | 详细程度(0-2) |
-dictionary NAME=FILE or -d | - | 从 JSON 加载词典 |
-kv NAME[=FILE] | - | KV 存储(空存储或从 JSON 加载) |
-config-store NAME=FILE | - | 从 JSON 加载配置存储 |
-secret-store NAME=FILE | - | 从 JSON 加载密钥存储 |
-acl NAME=FILE | - | 从 JSON 加载 ACL |
-logger NAME[=FILE] | - | 日志端点(文件或 stdout) |
-geo FILE | - | 地理位置 JSON 文件 |
-compliance-region REGION | - | 合规区域(none、us-eu、us) |
-profile MODE | trace | off、trace、native、combined、deep。参见 profiling.md。 |
-profile-ui ADDR | - | 在 ADDR 上绑定性能分析 UI 监听器(使用与 -bind 不同的套接字)。 |
-profile-auth TOKEN | - | UI 请求所需的 Bearer 令牌。除非设置了 -profile-insecure-ui,否则非环回 -profile-ui 必须提供此令牌。 |
-profile-insecure-ui | false | 允许非环回 -profile-ui 不设置 -profile-auth(仅在外部身份验证保护下使用)。 |
-profile-retain N | 256 | 已完成跟踪的 LRU 大小。 |
-profile-backend-cap N | 512 | 每个请求记录的后端调用上限。 |
-profile-async-grace DUR | 100ms | finalize 等待正在执行的异步后端的时长。传入 0 可禁用。 |
-profile-dir PATH | cwd | 存放 wasm-symbols-{pid}.json 和各进程性能分析产物的目录。 |
参考资料
| 主题 | 文件 | 适用场景 |
|---|---|---|
| 从源码理解 Compute | understanding-compute-from-source.md | 通过阅读 fastlike 的实现来理解 Compute 内部机制 |
| 性能分析 | profiling.md | 按请求查看 hostcall 和后端跟踪、深入指标、原生 JSON 架构、pprof 导出 |
| 后端 | backends.md | 配置命名后端、全匹配后端和微服务路由 |
| 配置 | config.md | 为字典、KV 存储、密钥、ACL、地理位置创建 JSON 配置文件 |
| 构建 | build.md | 从源码构建 Fastlike、运行代码检查工具、使用 make 目标 |
| 测试 | test.md | 运行 Go 测试和 Fastly Compute ABI 规范测试 |
| ABI | abi.md | Fastly Compute ABI 内部机制、实现新的 ABI 函数、句柄系统 |