把它做成生产功能之前,需要先拆开协议事实、产品承诺和运行成本,三者混在一起很容易得到错误结论。 如果 HTML 已引用新 hash 资源而文件尚未全部就位,用户会得到永久 404。所有文件先写完整并校验,再切换入口指针。
发布方案必须可复现、可观察并可回退,且回退要包含配置和数据兼容性。健康检查只证明进程存活,核心路由、依赖和后台任务还需单独验收。
落地方案的关键部件
先把下面几项写成可评审的规则,而不是散落在回调和界面判断里。规则越清楚,后续扩容、兼容和排错越少靠猜。
- 保留当前与上一版本目录,切换使用 rename 或符号链接原子操作;数据库迁移采用 expand/contract,旧程序在兼容窗内仍能读写。
- 所有输入都设置大小、次数和时间预算,并在超限时返回可操作的稳定错误码。
- 上线参数必须有保守默认值、服务端上限和灰度开关,不能把浏览器传来的数字直接当作资源预算。
“原子发布与回滚:切版本不能留下半套前端半套后端”的交付标准是正常路径可用、异常路径收敛、资源有界,并且用户能理解系统为何采用当前状态。 这样得到的不是演示代码,而是能解释、能降级、能回滚的生产能力。
别让错误假设进入生产
不要把异常路径理解成弹一次提示。它还包括在途工作如何停、对端如何获知、残留数据如何处置,以及下一次操作是否会继承旧状态。
- 部署脚本先删旧文件再复制会形成空窗;破坏性迁移与代码同刻上线会让二进制回滚后无法读取数据。
- 旧响应在新任务建立后迟到,如果没有版本隔离,会把健康状态覆盖成失败或再次启动已取消工作。
- 指标标签直接包含用户或任务标识,既制造高基数成本,也让诊断数据泄露不必要的身份信息。
发布闸门应该检查什么
用已知输入和可控故障建立金样本,然后把线上低基数指标与测试结果对齐。只有指标能提前识别同类退化,验证才真正延伸到生产。
- 在复制 10%、切指针前后和健康检查中断电,逐次确认请求只命中完整版本、缓存 URL 有效且回滚不需人工修数据。
- 让刷新、取消、超时和远端完成在同一调度窗口发生,断言系统只产生一个终态和一次副作用。
- 分别覆盖直连、中转、弱网、后台标签页和移动端,报告不能只给平均值或一次成功截图。
可以上线的标准是:用户知道当前发生了什么,系统在异常后能停止或恢复,资源不会无界增长,运维也能从最小必要证据定位阶段。