设计发布系统
需求分析
发布系统是将代码从构建产物安全地部署到生产环境的核心平台。
核心功能:发布单管理、审批流程、灰度发布、回滚、多环境、发布锁
架构设计
发布策略
| 策略 | 原理 | 适用场景 |
|---|---|---|
| 滚动更新 | 逐个替换 Pod | K8s 默认,通用 |
| 蓝绿部署 | 切换整套环境 | 需要即时回滚 |
| 金丝雀发布 | 按比例引流新版本 | 需要逐步验证 |
| A/B 发布 | 按用户特征路由 | 功能实验 |
关键设计点
发布锁
同一应用同一时间只允许一个发布单在执行,防止版本冲突。
发布窗口
生产环境限定发布时间窗口(如工作日 10:00-17:00),非窗口期需要特殊审批。
自动化回滚触发
# 发布后自动监控关键指标
rollback_triggers:
- metric: error_rate_5xx
threshold: 5% # 5xx 错误率超过 5%
duration: 2m
- metric: p99_latency
threshold: 3000ms # P99 延迟超过 3s
duration: 3m
- metric: pod_restart
threshold: 3 # Pod 重启超过 3 次
发布单状态机
常见面试问题
Q1: 如何设计发布系统的回滚方案?
答案:
- 镜像级回滚:K8s
kubectl rollout undo,秒级切回上一版本 - 配置快照:发布前保存完整的 Deployment YAML,回滚时恢复
- 数据库兼容:发布要求新旧版本兼容(数据库 Schema 只加不删),否则回滚时数据不兼容
- 自动触发:监控指标异常自动回滚,不依赖人工判断
- 回滚演练:定期演练回滚流程,确保可用