稳定发布不是挑一个“吉利时间”,而是让变更可验证、可观察、可停止、可回滚。所谓“周五不发版”真正保护的是支持窗口:高风险变更不应在人员即将离岗或业务高峰前上线。

测试分层

层级 验证内容 特点
单元测试 函数和领域规则 快、定位精确
集成测试 数据库、缓存、队列等协作 更接近真实依赖
契约测试 服务间请求响应兼容性 防止接口双方各自通过但无法协作
E2E 测试 用户关键流程 覆盖面大但慢且脆弱

黑盒、白盒、灰盒描述测试者掌握内部实现的程度,不是与单元、集成、E2E 平行的一组执行层级。

性能测试也要分清

  • Load Test:验证预期负载。
  • Stress Test:寻找系统极限和失效方式。
  • Spike Test:验证突发流量。
  • Soak Test:长时间运行,观察泄漏和退化。
  • A/B Test:比较产品方案,不是压力测试。

ab 适合做简单 HTTP 基准,不足以模拟复杂用户行为或现代浏览器页面。

一条可落地的流水线

1
2
3
4
5
6
7
8
9
提交代码
-> 格式、静态检查和单元测试
-> 构建一次不可变制品
-> 集成与安全检查
-> 部署测试环境并验收
-> 审批或自动策略
-> 灰度生产流量
-> 观察指标
-> 全量或回滚

同一个制品应逐级晋升,避免测试环境和生产环境分别重新构建出不同内容。

三种发布方式

方式 做法 主要取舍
滚动 逐批替换实例 资源省,但新旧版本会共存
蓝绿 两套完整环境切换 回滚快,但资源成本高
灰度/金丝雀 少量实例或用户先使用 风险可控,需要流量与指标能力

数据库变更

采用 Expand-Migrate-Contract:

1
2
3
Expand:先新增兼容字段或表
Migrate:迁移数据并切换读写
Contract:确认旧版本退出后再删除旧结构

不可逆数据变更不能靠“回滚代码”恢复。上线前要准备备份、补偿脚本、兼容窗口和停止条件。

上线检查

发布前确认范围、制品、配置、迁移、监控和回滚;发布中记录版本、批次和指标;发布后验证核心链路、错误率、延迟、队列、定时任务和第三方回调。

延伸阅读

站内搜索

没有找到内容!