稳定发布不是挑一个“吉利时间”,而是让变更可验证、可观察、可停止、可回滚。所谓“周五不发版”真正保护的是支持窗口:高风险变更不应在人员即将离岗或业务高峰前上线。
测试分层
| 层级 | 验证内容 | 特点 |
|---|---|---|
| 单元测试 | 函数和领域规则 | 快、定位精确 |
| 集成测试 | 数据库、缓存、队列等协作 | 更接近真实依赖 |
| 契约测试 | 服务间请求响应兼容性 | 防止接口双方各自通过但无法协作 |
| E2E 测试 | 用户关键流程 | 覆盖面大但慢且脆弱 |
黑盒、白盒、灰盒描述测试者掌握内部实现的程度,不是与单元、集成、E2E 平行的一组执行层级。
性能测试也要分清
- Load Test:验证预期负载。
- Stress Test:寻找系统极限和失效方式。
- Spike Test:验证突发流量。
- Soak Test:长时间运行,观察泄漏和退化。
- A/B Test:比较产品方案,不是压力测试。
ab 适合做简单 HTTP 基准,不足以模拟复杂用户行为或现代浏览器页面。
一条可落地的流水线
1 | 提交代码 |
同一个制品应逐级晋升,避免测试环境和生产环境分别重新构建出不同内容。
三种发布方式
| 方式 | 做法 | 主要取舍 |
|---|---|---|
| 滚动 | 逐批替换实例 | 资源省,但新旧版本会共存 |
| 蓝绿 | 两套完整环境切换 | 回滚快,但资源成本高 |
| 灰度/金丝雀 | 少量实例或用户先使用 | 风险可控,需要流量与指标能力 |
数据库变更
采用 Expand-Migrate-Contract:
1 | Expand:先新增兼容字段或表 |
不可逆数据变更不能靠“回滚代码”恢复。上线前要准备备份、补偿脚本、兼容窗口和停止条件。
上线检查
发布前确认范围、制品、配置、迁移、监控和回滚;发布中记录版本、批次和指标;发布后验证核心链路、错误率、延迟、队列、定时任务和第三方回调。