基于 WASM 的插件系统设计与落地
TL;DR —
#169对我来说不是“加一个插件入口”,而是把 PPanel 从一个固定功能集的后端,往“可扩展平台”推进了一步。我最后选择了WASM + wazero + WASI这条路线:宿主只暴露受控能力,插件通过plugin.proto和env.*host functions 跟宿主通信;HTTP 侧不直接热改主路由树,而是用固定 dispatcher 做动态分发;同时,我还把开发侧一起补齐,做了ppanel-sdk,用 Rust 宏、host wrapper 和一个轻量 async runtime 把底层 ABI 封装掉。现在回头看,#169最难的其实不是“让插件跑起来”,而是在第一版里接受很多保守取舍:实例池先锁在1,异步先把 ABI 形状立住,数据库能力先做白名单收敛。也正因为这些取舍,这套系统最后才能比较稳地落地。