跳至正文
← 全部技术洞察

TECHNICAL INSIGHTS / 技术洞察

每次发布都要停机?.NET 团队应先补齐哪些交付能力

“每次上线都要通知客户停用系统”,往往让技术负责人希望尽快引入微服务或 Kubernetes。但如果没有确认停机发生在哪一步,新的部署平台也可能只是接替原来的手工操作。改造发布流程,应先识别停机原因,再决定需要哪些工程能力。

一、把一次发布拆成可以观察的步骤

选择最近一次真实发布,记录构建、传包、停进程、修改配置、变更数据库、启动服务和业务验证各用了多久。分别标出“人员在操作”“系统不可用”和“等待确认”的时间。发布总耗时与客户受影响时间是两种指标,不应混在一起。

例如,构建耗时较长,可以提前生成并验证产物;只有一个实例,可能需要评估多实例承载与流量切换;数据库变更会阻塞业务,则要单独设计变更方式。它们对应的工作不同。

二、先让同一个版本能够重复部署

建议将源码版本、构建过程、依赖和发布产物建立对应关系,测试与生产尽量使用同一份已验证产物,而不是上线时临时重新编译。环境差异通过明确的配置管理,不依赖个人电脑里的文件。

  • 发布记录能否追溯到代码版本与镜像或安装包?
  • 配置变更是否有人评审,敏感信息是否独立管理?
  • 部署失败时,是否知道当前运行的是哪个版本?
  • 没有原实施人员在场,其他成员能否照文档部署?

三、增加实例之前,检查应用是否能同时运行

评估会话、文件上传、后台任务和本地缓存是否依赖单个进程。两个实例同时运行时,定时任务会不会重复执行?请求切换到另一个实例,用户是否仍能继续操作?对于长连接和耗时任务,还应考虑停止接收新请求与等待在途工作结束的过程。

Kubernetes 的 Deployment 支持逐步替换副本,并通过滚动更新参数控制更新过程,但这不等于业务天然实现无中断发布。应用就绪状态、容量及新旧版本兼容仍需验证。参见Kubernetes Deployment 文档。

四、数据库变更要和程序发布分别设计

如果旧程序仍在处理请求,新版本就删除或改变它依赖的字段,滚动部署也可能失败。可以评估先增加兼容字段或接口、再迁移使用方、最后清理旧结构的顺序。具体步骤取决于数据规模、写入方式和业务约束。

程序回到上一版本,只完成了程序恢复的一部分。已经写入的数据、外部通知和业务状态变化,需要明确兼容、对账与补偿方式。

五、用一次演练验收交付流程

在约定环境演练新版本无法启动、依赖不可用和关键流程验证失败等情况。记录谁决定停止发布、怎样切回可用版本、如何确认业务恢复。停止条件应事先确定,不在故障现场临时协商。

验收可以包括:按流水线完成构建与部署、能追溯版本、关键流程通过、恢复步骤可执行,以及内部成员能独立操作。不要只用“流水线显示绿色”判断发布成功。

下一步:先改一条交付路径

如果你的 .NET 系统还依赖手工上线,可以先选择一个应用梳理发布全过程,形成容器化、CI/CD、健康检查及回滚的改进清单。可通过容器化与自动化交付服务沟通具体范围,再决定是否需要扩大到架构改造。