跳转到内容

XiHan.Framework.Upgrade

升级引擎:版本存储、迁移执行、分布式锁、启动自动检查。

  • NuGetXiHan.Framework.Upgrade
  • 模块类XiHanUpgradeModule
  • 所在层:基础设施层

这是什么

XiHan.Framework.Upgrade 是分布式安全升级的底层引擎与流程编排。它把「检测版本 → 抢分布式锁 → 进维护模式 → 按序执行迁移脚本 → 回写版本 → (可选)替换文件/滚动重启」这一整套升级流程抽象成统一编排,并对每个环节留下可插拔扩展点。它只提供基础能力与抽象,具体的数据库存储、锁实现、迁移执行由业务侧模块提供实现。

何时使用

  • 应用启动或运维时,需要判断当前应用/数据库版本是否落后并自动升级。
  • 多节点部署下,需要用分布式锁保证同一时刻只有一个节点执行升级。
  • 按语义化版本发现、排序并幂等执行 SQL 迁移脚本,避免重复执行。
  • 升级期间需要维护模式、程序文件替换、滚动重启等运维动作的统一编排。

安装

bash
dotnet add package XiHan.Framework.Upgrade

启用

csharp
[DependsOn(typeof(XiHanUpgradeModule))]
public class MyModule : XiHanModule { }

模块会读取配置节 XiHan:Upgrade,并为各扩展点注册默认实现(TryAdd,可被业务侧替换)。默认实现中版本存储与锁均为内存版(InMemoryUpgradeVersionStore / InMemoryUpgradeLockProvider),生产环境通常需要业务侧替换为持久化 / 分布式实现。

核心能力

  • 版本存储与状态管理IUpgradeVersionStore 负责建表、获取或创建版本记录、写升级中/完成/失败状态、追加并去重迁移历史。
  • 迁移执行UpgradeEngine 按语义化版本分组排序脚本,逐条幂等执行(已有历史则跳过),通过 IUpgradeMigrationExecutor 执行 SQL 并保证事务。
  • 分布式锁IUpgradeLockProvider 抢占带过期时间的资源锁,IUpgradeLockTokenIAsyncDisposable)负责释放,确保集群内单节点升级。
  • 启动自动检查XiHanUpgradeModuleOnPostApplicationInitializationAsync 中,当 EnableAutoCheckOnStartup=true 时调用 IUpgradeStatusService.EnsureInitializedAsync 初始化。
  • 语义化版本比较SemanticVersion 提供 major/minor/patch 解析与比较,用于强制升级判定与脚本排序。
  • 主节点 / 多租户编排:可配置仅主节点执行升级,并支持多租户隔离逐租户升级。
  • 运维扩展:维护模式、程序文件替换、滚动重启均为可插拔扩展点(默认提供空实现)。

主要类型

类型说明
XiHanUpgradeModule升级模块,注册服务并在启动后触发自动检查
IUpgradeEngine / UpgradeEngine升级引擎,编排检测、锁、迁移、回写全流程
IUpgradeCoordinator升级协调器,后台启动升级
IUpgradeStatusService升级状态服务,初始化与查询版本快照/状态
IUpgradeVersionStore版本与升级状态存储、迁移历史
IUpgradeMigrationExecutor迁移脚本执行器(内部保证事务)
IUpgradeLockProvider / IUpgradeLockToken分布式锁提供者与锁令牌
IUpgradeScriptProvider迁移脚本发现来源(默认 FileSystemUpgradeScriptProvider
SemanticVersion语义化版本解析与比较
XiHanUpgradeOptions升级选项(配置节 XiHan:Upgrade
UpgradeStatus升级状态枚举(Normal/Upgrading/Completed/Failed)

依赖模块

相关模块

Released under The MIT License.