路线图
XiHan Framework 5 的路线图按门槛推进,不按日期。每个阶段列出退出条件,满足才进入下一阶段;没有「预计某月发布」这种承诺,因为我宁可晚一点,也不想为了赶日期把没通过门禁的东西放出去。这一页列出各阶段的内容、退出条件与当前状态。
阶段总览
text
P0 定边界 → P1 内核 → P2 子系统 → P3 协议与宿主 → P4 插件与跨语言 → P5 GA → 后续版本| 阶段 | 内容 | 退出条件 | 状态 |
|---|---|---|---|
| P0 定边界 | 总体方案拍板;目录骨架;规范草案(原语、清单、上下文、管道阶段、术语表);CI 门禁 | 架构决策通过;原语层公开 API 进入冻结候选;空解决方案过全部门禁 | 完成 |
| P1 内核 | 原语层;内核的清单解析、阶段化管道、调用上下文、生命周期状态机、诊断桥、安全原语;进程内插件;测试基座 | 零 Provider 的示例应用可运行;Native AOT 发布通过;内核预算达标 | 完成 |
| P2 子系统 | Domain 与持久化、缓存、消息、安全、多租户五个子系统的抽象、默认实现、一致性套件与首批 Provider;Minimal 与 Standard 组合包;本地化 | Standard 组合应用在零外部设施下运行;换成 EF Core、Redis、RabbitMQ 只改配置与包引用;所有默认实现与 Provider 通过套件 | 完成 |
| P3 协议与宿主 | 操作契约与源生成器;HTTP、gRPC、MCP、CloudEvents 适配器;命令行宿主;对象存储、调度、远程配置、审计;OpenTelemetry;xihan pack;Full 组合包 | 一份契约同时在三种协议上服务,共用一份 Schema;Kubernetes 示例通过探针与停机宽限对齐测试 | 完成 |
| P4 插件与跨语言 | 进程外插件协议;Wasm 实验实现;Go SDK;规范独立仓库 | Go 写的插件在 .NET 宿主中服务一个操作,崩溃时宿主降级不退出;Go SDK 通过全部一致性向量;规范仓库公开 | 完成 |
| P5 GA | 批量优先审查、SqlSugar Provider、能力补齐、工作流与 AI 子系统、BasicApp 接入、API 审查、包验证基线、性能基准、文档站 | BasicApp 核心模块全量跑在框架上;全部门禁通过;性能目标达标 | 进行中 |
P5 的进度
P5 的任务按执行顺序排列,前面的已经完成:
| 任务 | 状态 |
|---|---|
| 批量优先:抽象层所有对集合的操作都有一次调用完成的批量方法,逐项结果,Provider 原生批量;架构测试禁止在循环里调单条方法 | 完成 |
Persistence.SqlSugar:依赖 SqlSugarCore,协议约定映射,SQLite 通过全部一致性用例 | 完成 |
能力补齐:租户分片、IDistributedCache 适配、S3 对象存储 | 完成 |
Messaging.Kafka、Caching.Hybrid、Configuration.Nacos | 完成 |
调度子系统重做(引擎进抽象包,Provider 只实现存储与领导选举)与 Scheduling.Database、Workflow.Database | 完成 |
| 工作流与 AI 子系统:原计划放到后续版本,提前进入 5.0 | 完成 |
| 十项能力补齐:SqlSugar 多库与分表、Validate 阶段契约校验、领域事件派发、三个数据库 Provider、Resilience 阶段、Provider 健康项、OpenAPI 权限扩展 | 完成 |
| 雪花标识、OpenAPI 文案与分组、调用来源、条件引擎、IP 归属地、对象存储进阶能力、绕过管道的端点认证、运行信息、作业重试与执行时限、出站地址策略 | 完成 |
| 第一个与第二个预览版发布到 nuget.org | 完成 |
| BasicApp 接入:核心模块以能力包与操作契约重写在框架上 | 进行中 |
API 审查:所有公开 API 带稳定性标记,公开面从 Unshipped 转入 Shipped | 待做 |
| 包验证基线、性能基准回归、安全审查、SBOM | 待做 |
| 文档站:教程、逐包参考、规范链接 | 进行中,就是你正在读的这一站 |
| 发布 5.0.0,声明 LTS | 待做 |
后续版本
5.0 正式版之后的内容,按优先级:
| 优先级 | 内容 |
|---|---|
| 高 | Search.* 子系统(索引与查询的抽象、内存实现与 Elasticsearch 等 Provider) |
| 高 | Plugins.Wasm 从 Experimental 到正式;TypeScript SDK |
| 中 | 实时通信与网关的专门包(当前实时通信直接用 ASP.NET Core SignalR,见实时通信) |
| 中 | Actors.* 子系统;Kubernetes Operator |
| 中 | 管道阶段内的并行分支(计算图形态) |
| 低 | Persistence.MongoDB、Messaging.Nats、Scheduling.Quartz 等更多 Provider |
有两件事在 5.0 里明确不做:把 4.x 的模块迁移到 5.0 的自动化工具,以及 4.x 到 5.0 的兼容层。4.x 单独维护,5.0 是一条新的线;自动迁移机制保留给 5.x 到 6.x。
版本策略
| 项 | 规则 |
|---|---|
| 版本线 | 所有包共享一条版本线,从 5.0.0 起;SemVer 2.0 |
| 大版本 | 每三年一次,对齐一个 .NET LTS;LTS 大版本三年活跃支持加一年安全修复 |
| 小版本 | 约每六个月;补丁随时 |
| 目标框架 | 当前 LTS;上一个 LTS 保留 12 个月过渡期 |
| 预览版 | X.Y.Z-preview.N,安装时带 --prerelease |
| 破坏性变更 | 大版本内为零;原语层永远为零,必须破坏时发布新包 ID 并存 |
性能目标
| 指标 | 目标 |
|---|---|
| 冷启动额外开销 | 在 ASP.NET Core 基线之上小于 50 毫秒 |
| 管道执行,单个中间件 | 小于 0.1 毫秒 |
| 管道执行,五个中间件 | 小于 0.5 毫秒 |
| 空应用常驻内存 | 小于 30 MB |
| 原语层加内核的包大小 | 小于 500 KB |
| 基准回归阈值 | 5% |
基准项目在仓库的 framework/benchmarks 下,本地运行,不进 CI。
风险
我把最大的几个风险也写在这里,免得读者只看到好的一面:
| 风险 | 缓解 |
|---|---|
| 抽象过度,只剩一堆接口 | 每个抽象必须有能用的默认实现;每个阶段的退出条件都是「跑起来」 |
| 规范成为没人实现的文档 | 第二语言 SDK 是 P4 的退出条件,不是愿景;现在已经有了 |
| 单人维护带宽不足 | 当前范围只含内核与 Standard、Full 两组子系统,其余进孵化区 |
| 源生成器与 AOT 成本 | 允许手写替代;生成器只覆盖操作登记、契约 Schema 与仓储登记 |
| 命名漂移 | 术语表走规范流程,包 ID 文法由架构测试强制 |
