内核选型
一份插件契约,五种运行内核——按插件的运行环境归属选择:谁来跑插件的运行环境、 谁来管它的依赖与生命周期。不引用对应内核可选包=该模式结构化拒绝(装载期报错, 不是静默失败)。
内核谱系
| 内核 | mode | 运行环境归属 | 适合 |
|---|---|---|---|
| ALC(缺省) | Assembly |
宿主归平台——CLR 共享宿主+SDK 桥 | C# 插件主通道;性能最敏感面 |
| WASM | Wasm |
标准自持(WASI 胶水) | 强沙箱/多语言 guest(fuel 计量+epoch 中断+内存限额) |
| gRPC | Grpc |
全自持(平台只写通信) | 进程外独立服务(ext_proc 同型运行器) |
| Script | Script |
零自持(API 面全自定义) | 轻逻辑/在线脚本(Jint+Fluid 双轨) |
| 子进程容器 | Subprocess |
进程级隔离(PluginHost 瘦 exe 承载) | 租户 C# 场景包——独立进程边界+六面 IPC 全代理 |
选型决策
| 问 | 答 → 选 |
|---|---|
| 是 C# 且要最好性能? | ALC(进程内直调,槽位零序列化) |
| guest 是 Rust/Go/其他 WASM 目标语言? | WASM |
| 插件是独立部署的服务(多语言/独立伸缩/独立故障域)? | gRPC |
| 逻辑很轻、要在线热更脚本? | Script |
| 租户自带 C# 包、要求进程级隔离(平台托管宿主进程)? | Subprocess |
能力兑现差异(声明×内核矩阵)
能力键(state.kv/net.call/…)按内核分三档兑现:
- Hosted——宿主提供:ALC 全量;WASM 经 import 注册;各内核的 headers/query 投影门;
- SelfHosted——自持设计域:gRPC 运行器进程自管 kv/events/net/metrics/trace+后台任务 (声明合法、平台不代管);
- Unsupported——该内核不支持该能力键:装载拒绝,或清单
degradedCapabilities逐键显式确认降级。
没有静默忽略:能力声明×内核的不匹配在装载期 fail-fast。
传输与压缩
- gRPC:unary 与流复用(
ProcessStream)双传输——流复用省连接建立(大载荷slots_codec=json+gzip); - WASM:traffic-v1 JSON ABI(UTF-8 字节流,非字符串);
- 槽位/settings 值面四内核统一按声明裁剪投递(K2 值面)。
内核包的引用形态
内核运行时是可选包:ALC 内核在平台核心内;WASM/gRPC/Script/Subprocess 是独立 可选包——部署不引用=对应 mode 的插件装载结构化拒绝(fail-fast),其余能力照常。