103 lines
3.8 KiB
Markdown
103 lines
3.8 KiB
Markdown
---
|
||
title: "Deployment vs Release (部署与发布分离)"
|
||
tags: [devops, continuous-delivery, feature-management, release-management]
|
||
aliases: [Decoupled Deployment and Release]
|
||
created: 2026-04-25
|
||
---
|
||
|
||
# Deployment vs Release (部署与发布分离)
|
||
|
||
**Deployment vs. Release** 是 [[Feature Flag]] 实现的核心理念:代码**部署**(Deploy)到生产环境,与功能对用户**可见**(Release),是两个独立的事件。
|
||
|
||
## Definition
|
||
|
||
> "Traditional deployments are all-or-nothing: you push code and everyone gets it immediately. This is why deployments are scary and why teams deploy at 2 AM 'just in case.'"
|
||
|
||
> "Deploy whenever you want, release when you're ready."
|
||
|
||
## Aliases
|
||
- Decoupled Deployment and Release
|
||
- 部署发布分离
|
||
|
||
## 核心对比
|
||
|
||
| 维度 | 传统方式(部署=发布) | Feature Flag(部署≠发布) |
|
||
|------|---------------------|--------------------------|
|
||
| 代码到达生产 | 与用户可见同步 | 提前到达,用户不可见 |
|
||
| 回滚能力 | 需要重新部署 | 配置变更,秒级 |
|
||
| 发布时机 | 必须与部署同步 | 任意时刻可发布 |
|
||
| 团队压力 | 2AM 部署"以防万一" | 白天从容发布 |
|
||
| 实验能力 | 低(全量或无) | 高(灰度、可控放量) |
|
||
|
||
## 生命周期对比
|
||
|
||
### 传统方式
|
||
|
||
```
|
||
开发 → 测试 → 合并 → 部署 → 发布(全量)
|
||
↑
|
||
部署=发布
|
||
```
|
||
|
||
### Feature Flag 方式
|
||
|
||
```
|
||
开发 → 测试 → 合并 → 部署 → 发布控制 → 渐进放量
|
||
↑ ↑
|
||
代码到达 用户可见
|
||
生产环境 由开关控制
|
||
```
|
||
|
||
## 关键价值
|
||
|
||
### 1. 降低部署风险
|
||
> "Feature flags change this. You can deploy code to production without releasing it to users."
|
||
|
||
代码可以在生产环境中就绪,但功能对用户保持隐藏,直到团队确认质量。
|
||
|
||
### 2. 加速交付
|
||
团队不再需要等待"完美时机"发布功能。代码就绪即可部署,功能发布由业务决定。
|
||
|
||
### 3. 赋能团队
|
||
- 产品:随时决定发布节奏
|
||
- 工程:随时部署,无需等待发布窗口
|
||
- 运营:渐进放量,数据驱动决策
|
||
|
||
### 4. 重新定义 RTO
|
||
当部署≠发布时,恢复(Rollback)不再是回滚部署,而是关闭 Feature Flag。
|
||
|
||
## 与 [[CI-CD-Pipeline]] 的关系
|
||
|
||
部署与发布的分离重构了 CI/CD 流程:
|
||
|
||
| 阶段 | 传统 CI/CD | Decoupled CI/CD |
|
||
|------|-----------|-----------------|
|
||
| Build | 构建产物 | 构建产物 |
|
||
| Test | 单元/集成测试 | 单元/集成测试 |
|
||
| Deploy | 部署到 prod | 部署到 prod(用户不可见) |
|
||
| Release | — | Feature Flag 控制 |
|
||
| Monitor | 部署后监控 | 渐进放量期间监控 |
|
||
| Rollback | 重新部署旧版本 | 关闭 Feature Flag |
|
||
|
||
## 风险模型转变
|
||
|
||
| 维度 | 传统模型 | Decoupled 模型 |
|
||
|------|----------|----------------|
|
||
| 风险集中点 | 部署时刻 | 功能发布时刻 |
|
||
| 风险暴露范围 | 全量用户 | 当前放量比例 |
|
||
| 应急响应 | 小时级回滚 | 秒级开关 |
|
||
| 团队心态 | 防御性(害怕部署) | 进攻性(敢于实验) |
|
||
|
||
## Related Concepts
|
||
|
||
- [[Feature Flag]] — 实现部署与发布分离的核心机制
|
||
- [[CI-CD-Pipeline]] — Decoupled Deployment 是现代 CI/CD 的重要理念
|
||
- [[Progressive Rollout]] — 部署与发布分离使渐进放量成为可能
|
||
- [[Kill Switch]] — 发布控制权的极端体现(紧急关闭)
|
||
- [[RTO]] — 部署与发布分离将 RTO 从部署回滚转向配置变更
|
||
- [[Micro-Recovery]] — 部署与发布分离使 feature 级别恢复成为可能
|
||
|
||
## Sources
|
||
|
||
- [[sources/rto-vs-rpo-key-differences-for-modern-disaster-recovery.md]]
|