maheensayuru/aegis-proxy
GitHub: maheensayuru/aegis-proxy
基于 Go 和 WebAssembly 构建的高并发反向代理,通过 Wasm 沙箱实现安全逻辑的热插拔与零停机更新。
Stars: 1 | Forks: 0
# Aegis:零停机 Wasm API 网关
一个使用 Go 构建的高并发反向代理,利用 WebAssembly (WASI) 实现可热插拔的中间件逻辑。
## 系统架构
Aegis 将网络路由引擎与安全/业务逻辑分离。宿主机 使用 Go 处理高吞吐量的 TCP 连接,而客户机 使用 Wasm 在严格隔离、默认拒绝的内存沙箱中处理请求授权。
### 系统流程
```
graph TD
Client([HTTP Client]) -->|Request| Proxy[Go Proxy Engine]
subgraph Engine [Aegis Runtime]
Proxy -->|RLock Acquire| Wasm{wazero Reactor}
Wasm -->|Execute Memory Pointers| Logic[auth.wasm]
end
Logic -->|Return 1| Allow[Forward to Target]
Logic -->|Return 0| Deny[Return 403 Forbidden]
subgraph Hot-Swap [Concurrency Control]
Watcher[fsnotify Watcher] -->|Detect Binary Write| Lock[Write Lock Acquire]
Lock -->|Microsecond Pause| Wasm
end
Compiler[TinyGo / LLVM] -.->|Compiles| Logic
```
## 零停机热插拔
标准网关需要完全重启进程才能更新中间件。Aegis 使用了带有防抖动的内核级文件系统监控器。在检测到已编译的 Wasm 二进制文件更新时,它会获取短暂的 `sync.RWMutex` 写锁,实例化具有唯一命名空间的 Wasm 模块,交换执行指针,然后释放锁——在几毫秒内完成安全逻辑的更新,而不会丢弃活跃的 TCP 连接。
## 已知限制与路线图
* **单线程 Wasm 内存:** 目前,引擎共享单个 WebAssembly 模块实例。虽然 `sync.RWMutex` 可以在实时更新期间安全地处理执行指针的热插拔,但高并发的负载测试(例如 100 个以上的并发工作线程)会在 Wasm 线性内存边界引发竞态条件,从而导致运行时 panic。
* **v2 架构(修复方案):** 下一次迭代将实现利用 Go `sync.Pool` 的**对象池模式**。引擎将维护一个预实例化的、相互隔离的 Wasm 模块热池,并基于每个请求进行分发,以确保在极高并发负载下的线程安全。
## 基础设施技术栈
* **运行时:** [wazero](https://wazero.io/)(适用于 Go 的零依赖 WebAssembly 运行时)。
* **编译器:** [TinyGo](https://tinygo.org/),用于严格遵守 LLVM 的 `//export` 编译指示。
* **优化器:** [Binaryen](https://github.com/WebAssembly/binaryen) (`wasm-opt`),用于缩减生成体积。
## 构建与执行
**1. 启动宿主引擎**
```
go run main.go
```
**2. 编译客户机逻辑**
修改 `plugins/main.go`,然后使用 WASI 目标进行编译。
```
tinygo build -o plugins/auth.wasm -target=wasi plugins/main.go
```
*注意:在宿主机运行期间执行编译器将自动触发热插拔例程。*
标签:AI工具, API网关, CISA项目, EVTX分析, Go语言, MacOS取证, Streamlit, TinyGo, WASI, wazero, WebAssembly, 中间件, 反向代理, 安全沙箱, 密码管理, 并发编程, 日志审计, 流量控制, 热插拔, 程序破解, 网络路由, 访问控制, 请求鉴权, 零停机, 高并发