Files
mc-gateway/docs/plugin-implementation-plan.md

8.0 KiB
Raw Blame History

插件系统阶段实现计划

本文以 plugin-system-design.md 作为最终目标设计文档,把插件系统拆分成多个可上线的实现阶段。每个阶段都必须在结束时保持 gateway 当前可用:可以启动、可以回滚、可以排障,且不会要求后续阶段补齐后才能恢复基本能力。

插件开发工具链作为跨阶段交付项单独设计,见 plugin-development-toolchain-design.md。工具链主入口为 gateway plugin init/build/test,并需要从第一批 Go plugin 示例开始预留未来 runtime adapter。

拆分原则

  • 以可用的纵向切片拆分而不是按数据库、API、UI、SDK 等横向模块拆分。
  • 每个阶段都必须有明确的启用路径、失败回退路径和最小运维证据。
  • 默认运行路径保持保守:先稳定 go-plugin + upstream.connect/v1,再增加源码包、治理、观测和未来 runtime。
  • 未来能力必须可关闭、可灰度或只做设计预留,不能破坏前一阶段的可用状态。
  • plugin-system-design.md 是目标状态;阶段文档只描述实现顺序和阶段边界。

阶段总览

阶段 文档 阶段结束时可用状态
1 Managed Binary Plugin MVP 管理员可以上传二进制 .mcgp,通过 Admin API/CLI 加载、启用、禁用、删除可信插件;upstream.connect/v1 dialer mode 可用
2 Protocol Proxy MVP upstream.connect/v1 protocol-proxy mode 可用,插件可以接管 MC 字节流并实现登录代理示例
3 Source Package Builder 管理员可以上传 source .mcgp,受控 builder 产出可加载 artifact构建失败不影响当前插件
4 Admin UI, Config, Secret, Rollback 管理页具备可操作的插件管理闭环,支持配置 schema、secret、配置快照和回滚
5 Governance And Release Gates 生产启用前有准入策略、review、冲突分析、preflight/self-test、性能门禁和安全公告处理
6 Observability And Operations 插件 metrics、events、trace、日志、诊断、background task、plugin_data 和文件资源治理可用
7 Extension Ecosystem 在稳定主路径上增加 route/status/provider/event/rule/Admin auth 等扩展点和官方插件能力
8 Future Runtimes And Distribution 可选引入 go-plugin-process、sandbox/WASM、ingress service、仓库、签名和构建期增强默认路径仍可运行

功能到阶段映射

下表用于确认 plugin-system-design.md 中的目标能力已经拆入某个阶段。一个能力可能在早期阶段先实现最小可用版本后续阶段再补齐治理、UI 或生态扩展。

目标能力 阶段 拆分说明
.mcgp binary artifact、manifest 静态校验、artifact 登记 1 先支持二进制可信 Go plugin上传不执行代码
Plugin Manager、desired/runtime state、dispatch table、审计 1 建立正式管理路径,替代探索式 config 插件入口
upstream.connect/v1 dialer mode 1 第一条可用数据路径,覆盖 upstream rewrite、自定义拨号
upstream.connect/v1 protocol-proxy mode 和 net.Conn 接管 2 支持完整 MC 字节流接管、initial data replay、draining
MC 正版/三方登录插件、forwarding、登录后协议处理 2 由 protocol-proxy 插件实现core 不消费认证结果
Minecraft capability manifest、protocol smoke fixture 2 支撑管理页展示和后续发布门禁
source .mcgp、builder、构建 provenance 3 源码包构建成 plugin.so 后复用阶段 1/2 加载路径
builder 隔离、Go/module/ABI 记录、source/build log GC 3 构建失败不影响 active artifact
gateway plugin init/build/test 开发工具链 1-3后续扩展 阶段 1/2 提供 Go plugin 模板和 harness阶段 3 收敛 source/binary 打包;后续 runtime 通过 adapter 接入
Admin 页面基础管理闭环 4 上传、构建状态、加载、启用、禁用、删除、回滚
配置 schema、配置快照、配置迁移入口 4 错误配置不切换 active artifact
SecretStore、secret version、reload/rotation 基础 4 secret 不在页面、日志、审计中明文展示
artifact rollback、config rollback 4 回滚前重新执行当前基础门禁
admission policy、review、risk、warning override 5 生产启用前可解释和可审计
composition conflict、scope overlap、dispatch plan 5 阻断 protocol-proxy 重叠、provider 单例冲突等
preflight/self-test、benchmark release gate 5 高风险插件启用前有证据
denylist、quarantine、revoke、安全公告 5 阻断受影响 artifact 的 enable/rollback
metrics、custom metrics、business events、trace 6 提供运行时观测和脱敏摘要
plugin logger、diagnostic package、Runbook 支撑 6 插件故障可定位、可降级、可导出摘要
background task、ExternalClient、外部依赖治理 6 周期同步、受控外联、熔断和健康状态
PluginDataStore、PluginFileStore、runtime file GC 6 插件私有数据和文件资源受配额/retention 管理
route resolver/provider、route decision 7 降低动态路由和外部 CMDB 集成成本
status ping、MOTD、维护模式 7 不必完整 protocol-proxy 即可定制状态响应
middleware、provider、event subscriber、rule/policy engine 7 补齐 Hook 之外的生产扩展形态
Admin auth provider、外部身份绑定 7 只影响管理页登录,保留本地 break-glass
go-plugin-process 服务启动模式、进程级卸载、fd/shm 迁移 8 未来可选,默认 in-process 路径仍可运行
sandbox-process、WASM、capability enforcement 8 面向隔离、跨语言和轻量规则场景
ingress.service/v1 自定义入口服务 8 由 gateway/supervisor 管理 listener不允许插件任意监听
插件仓库、签名、SBOM 漏洞扫描、license policy 8 仓库只导入本地 artifact不自动启用
build-time instrumentation 8 官方/组织 CI 能力,产物是 gateway binary不是热加载插件
promotion、drift、DR drill 4-6 阶段 4 建立回滚和快照,阶段 5/6 补齐门禁、diff、诊断和演练证据

全阶段不变量

这些规则从阶段 1 开始就不能被破坏:

  • 上传包校验不能执行插件代码。
  • 生产路径统一以 .mcgp artifact 为单位管理。
  • 插件管理写操作必须有审计日志。
  • 启用失败不能破坏旧 dispatch table。
  • 禁用插件后,新连接不能再进入该插件。
  • 已加载 Go plugin 不能承诺真正热卸载;只能逻辑禁用或未来通过 go-plugin-process 退出子进程回收。
  • MC 正版/三方登录、身份映射、forwarding 和后续协议处理属于 protocol-proxy 插件,不由 gateway core 拼装。
  • 玩家名、UUID、source IP、secret、token、session response 和 packet payload 默认不进入指标标签、审计明文或普通诊断输出。

阶段推进规则

进入下一阶段前必须满足:

  • 当前阶段文档中的验收项全部通过。
  • 已实现能力有最小自动化测试或可重复手动验证步骤。
  • 失败路径已验证:加载失败、启用失败、禁用、删除、重启恢复。
  • 文档已更新:用户怎么启用、怎么回滚、怎么排障。

如果某阶段出现实现复杂度超出预期,允许拆出子阶段,但子阶段也必须保持“当前可用”。