插件系统
设计目标
当前插件系统的目标仍然是:
- 轻核心、重插件
- 可按插件拆分 runtime 逻辑
- 可按插件拆分 DB schema / query
- 可按插件拆分 management API 注册
当前能力面
一个插件当前可以提供:
- route middleware
- route pipeline stages
- db schema / sql queries
- management ConnectRPC services
注册入口仍然是 plugins/registry.go。
当前 route pipeline 语义
现在的 route pipeline 不再是“启动时构建一条固定链”,而是:
- 请求先命中 route
- runtime resolver 拿到当前 route / tenant / matched route
- 再按这条 route 的字段动态构建 pipeline
这让认证插件可以按 route 条件注入,而不是全局固定开启。
当前认证插件
当前内置认证相关插件主要有:
passthrough-auth-tokenlegacy-api-key-authconsumer
route 级注入优先级:
disable_authpassthrough_auth_tokenlegacy_bearer_auth_tokensconsumer
其中:
passthrough-auth-token命中后直接 allowlegacy-api-key-auth校验 route 自带 bearer tokenconsumer负责consumer_api_keys鉴权和 consumer 约束
多认证插件并存时,语义是 AND。
认证插件与分组
auth 插件现在还可以向 runtime state 输出“可用组约束”。
规则是:
- 空约束表示“不限制组”
- 非空约束会参与 route / consumer / api key 的组交集
最终 upstream selector 使用这个交集去筛 upstreams.group。
Plugin-owned schema
当前 schema 已经开始按插件拆分:
consumer插件拥有 consumer / consumer api key 相关 schema 与查询passthrough-auth-token插件拥有 route passthrough auth token 相关 schema
核心原则仍然是:
- 业务能力尽量归属插件
- runtime / management / schema 一起按插件收口
- 不再依赖旧的全局大表去承载所有功能
当前未完成项
插件系统后续仍会继续承接:
- fallback / retry 策略插件化
- 更完整的负载均衡策略
- protocol conversion
- 计费 / credit runtime hook