插件模型
插件是平台的扩展机制:以编排一等公民身份进入请求管线——与内置步骤同一管线、
同一编译校验、同一目录,随配置世代发布热切换。
四个核心概念
| 概念 |
定义 |
| 包(package) |
作用域单元——一份 DI 容器、一份 SDK 注入、一次启停、一个私有存储子树 |
| feature |
编排单元——包内一个可编入链的功能(一包可含 n 个 feature,数据全共享) |
| 命名空间(ns) |
隔离与协作域——{ns}/{name}/{version} 身份;存储子树/事件话题/私有槽位随 ns 划界 |
| catalog 键 |
{ns}/{name}/{code}——feature 的编排执行单元唯一标识 |
双单元形态
| 单元 |
锚点 |
语义 |
| 管线特性 |
HttpFeatureBase 等基类 |
编入链当 step(请求处理) |
| 后台任务 |
IPluginBackgroundTask |
托管长任务(共享线程多路复用——非独占线程) |
两者都实现 IPluginFeature(唯一扫描锚点,零成员)——扫描器一次扫描、按次级契约
分类进 catalog 或托管池。code 绑定三级回落:特性 [PluginFeature] → 清单元数据 → 裸类名。
发现与生效
- 安装——包落卷(TierFs write-once)+清单注册;
- 启用——租户面 plugin 实体 draft→publish(无热改旁路);
- 发现——装载期扫描特性+后台任务,汇入 FeatureCatalog(目录=内置+
本租户已启用插件的 feature 全集);
- 编排——画布 palette/CLI 从 catalog 消费;插件步骤与内置步骤同链同校验;
- 切换——插件变更走 draft→publish 热切换,不停机。
安全三层
| 层 |
机制 |
| 能力声明制 |
清单 capabilities 未声明→SDK 桥不注册→构造解析即失败 |
| ALC 程序集白名单 |
插件间只共享 Contracts+框架程序集——跨插件强转物理不可行 |
| ns 边界 |
存储/事件/槽位按命名空间划界——跨 ns 仅 public 槽可达 |
分发
- 平台域(platform)——平台公共面,租户可见性按三形态过滤;
- 租户私有域(tenant)——本租户锚签名+ALC 禁用形态,配额闸(包数/包体积/托管进程);
- 包仓库/签名信任/远端目录见包仓库与信任。