94 lines
3.7 KiB
Markdown
94 lines
3.7 KiB
Markdown
---
|
||
title: "Micro-Recovery (微恢复)"
|
||
tags: [devops, disaster-recovery, reliability, feature-management]
|
||
created: 2026-04-25
|
||
---
|
||
|
||
# Micro-Recovery (微恢复)
|
||
|
||
**Micro-Recovery**(微恢复)是指不回滚整个部署,而是针对特定功能(Feature)进行精准恢复的能力。它是 [[Feature Flag]] 带来的核心理念转变:不再将整个应用视为单一恢复单元,而是按功能粒度进行风险管理。
|
||
|
||
## Definition
|
||
|
||
> "Don't treat your entire app like one big system. Different features have different risks and business impacts, so they should have different recovery targets."
|
||
|
||
传统灾备将整个系统作为恢复目标,而 Micro-Recovery 将恢复粒度缩小到单个功能模块。
|
||
|
||
## 传统方式 vs. Micro-Recovery
|
||
|
||
| 维度 | 传统全量回滚 | Micro-Recovery |
|
||
|------|-------------|----------------|
|
||
| 恢复粒度 | 整个部署/系统 | 单个功能 |
|
||
| RTO | 小时级 | 秒级 |
|
||
| RPO | 取决于备份频率 | 近零 |
|
||
| 影响范围 | 全局(所有用户) | 局部(可定向) |
|
||
| 用户体验 | 可能感知到中断 | 可能完全无感知 |
|
||
|
||
## Feature-Level Recovery Targets
|
||
|
||
不同功能有不同的风险和业务影响:
|
||
|
||
| 功能类型 | RTO 目标 | RPO 目标 | 恢复策略 |
|
||
|----------|----------|----------|----------|
|
||
| 核心支付处理 | 秒级 | 零丢失 | Kill Switch → 备用提供商 |
|
||
| 新推荐引擎 | 5 分钟 | 15 分钟 | Feature Flag → 旧算法 |
|
||
| Beta 仪表盘功能 | 30 分钟 | 1 小时 | Feature Flag → 禁用该功能 |
|
||
|
||
## Micro-Recovery 的优势
|
||
|
||
### 1. 精准止血
|
||
发现某功能异常时,只关闭该功能,其他正常功能不受影响。
|
||
|
||
### 2. 用户无感知
|
||
> "Your checkout flow has a bug? Disable the new version and fall back to the old one in seconds. Users might not even notice."
|
||
|
||
### 3. 数据保护
|
||
[[Feature Flag]] 切换只改变代码执行路径,不触碰数据层,RPO 不受影响。
|
||
|
||
### 4. 定向恢复
|
||
如果某功能只影响特定地区或用户群,可以只针对该群体禁用,其他用户继续使用新功能。
|
||
|
||
## 实现方式
|
||
|
||
Micro-Recovery 通过 [[Feature Flag]] 实现:
|
||
|
||
```javascript
|
||
// 结账流程示例
|
||
async function checkoutFlow(userId, cart) {
|
||
// Feature Flag 控制是否使用新版结账
|
||
if (await flags.enabled('new-checkout-v2', userId)) {
|
||
return newCheckoutProcess(cart); // 故障时 → 切换到旧版
|
||
}
|
||
return legacyCheckoutProcess(cart);
|
||
}
|
||
```
|
||
|
||
## Micro-Recovery vs. 其他恢复模式
|
||
|
||
| 模式 | 恢复粒度 | RTO | RPO | 复杂度 |
|
||
|------|----------|-----|-----|--------|
|
||
| 传统灾备 | 系统/数据中心 | 小时级 | 取决于备份 | 高 |
|
||
| CI/CD 回滚 | 部署版本 | 分钟级 | 可能丢失 | 中 |
|
||
| Kill Switch | 组件/功能 | 秒级 | 近零 | 低 |
|
||
| **Micro-Recovery** | **单个功能** | **秒级** | **近零** | **低** |
|
||
|
||
## 实践建议
|
||
|
||
1. **功能分级**:不是所有功能都需要 Micro-Recovery 能力,关键路径必须有
|
||
2. **Fallback 路径**:每个 Feature Flag 需要有明确的降级路径(Fallback)
|
||
3. **可观测性**:每次切换需要有清晰的日志和监控
|
||
4. **文档化**:哪些功能支持 Micro-Recovery?团队需要知道
|
||
|
||
## Related Concepts
|
||
|
||
- [[Feature Flag]] — Micro-Recovery 的技术基础
|
||
- [[Kill Switch]] — Micro-Recovery 的紧急实现方式
|
||
- [[RTO]] — Micro-Recovery 将 RTO 从小时降至秒级
|
||
- [[RPO]] — Micro-Recovery 保护 RPO(不触碰数据层)
|
||
- [[Progressive Rollout]] — Micro-Recovery 与渐进式放量结合实现精细化风险控制
|
||
- [[Disaster Recovery]] — Micro-Recovery 是现代灾备的重要组成部分
|
||
|
||
## Sources
|
||
|
||
- [[sources/rto-vs-rpo-key-differences-for-modern-disaster-recovery.md]]
|