2. 变更窗口定义
变更窗口(Change Window)是 SRE 实践中用于控制变更风险的核心时间约束机制。它规定了允许对生产环境执行变更操作的具体时间段,是 Error Budget 策略在变更管理维度的落地载体。通过定义变更窗口,团队可以将变更风险限制在可控的时间范围内,避免在业务高峰期或系统脆弱期引入额外风险。
2.1 变更窗口的概念
变更窗口的本质是一个时间边界,它包含三个核心要素:
- 允许时间范围:变更可以开始和结束的时间段。
- 持续时间上限:单次变更操作的最大耗时,超时自动回滚或暂停。
- 冷却间隔:相邻两次变更窗口之间的最小间隔,用于观察系统稳定性。
核心公式:变更窗口可用性 = 窗口总时长 / 评估周期总时长 × 100%
例如:每周一凌晨 02:00-04:00 为变更窗口,则窗口可用性 = 2小时 / (7×24小时) ≈ 1.19%。
2.2 变更窗口的类型
根据时间分布和触发方式,变更窗口主要分为以下两种类型:
| 类型 | 定义 | 适用场景 | 典型示例 |
|---|---|---|---|
| 固定窗口 | 在每周/每月的固定时间点开放,时间严格预定,不可随意调整。 | 核心业务系统、金融交易系统、合规要求严格的变更。 | 每周三凌晨 03:00-05:00 为数据库主从切换窗口。 |
| 滚动窗口 | 基于 Error Budget 消耗状态动态计算,当剩余预算充足时自动开放。 | 微服务、非关键链路、快速迭代的 DevOps 团队。 | Error Budget 剩余 > 50% 时,每 4 小时开放 30 分钟变更窗口。 |
实践建议:在《Error Budget 变更窗口主从切换项目》中,建议采用固定窗口 + 滚动窗口混合策略:主从切换这类高风险操作使用固定窗口,配置更新等低风险操作使用滚动窗口。
2.3 变更窗口与 Error Budget 的关联
变更窗口不是孤立的时间段,它与 Error Budget 存在紧密的双向驱动关系:
- 预算消耗触发窗口调整:当 Error Budget 消耗超过阈值(如 70%),系统自动缩短或暂停后续变更窗口。
- 窗口内变更消耗预算:每次变更操作消耗一定比例的 Error Budget(通常按变更风险等级预分配)。
- 预算恢复后窗口恢复:当 Error Budget 通过无故障运行恢复到安全线以上,变更窗口自动重新开放。
下图展示了 Error Budget 与变更窗口之间的动态联动机制:
2.4 变更窗口配置示例
以下是一个基于 Error Budget 状态的变更窗口配置示例,展示了固定窗口与滚动窗口的混合使用:
# 变更窗口配置 - production.yaml
change_window:
# 固定窗口:高风险变更
fixed_windows:
- name: "database-maintenance"
day_of_week: "Wednesday"
start_time: "03:00"
end_time: "05:00"
timezone: "Asia/Shanghai"
max_duration_minutes: 120
risk_level: "high"
error_budget_consumption: 0.05 # 每次消耗 5% 预算
# 滚动窗口:低风险变更
rolling_windows:
- name: "config-update"
min_interval_minutes: 240
window_duration_minutes: 30
risk_level: "low"
error_budget_consumption: 0.01 # 每次消耗 1% 预算
budget_threshold: 0.50 # 预算剩余 > 50% 时开放
# 全局规则
global_rules:
budget_pause_threshold: 0.30 # 预算剩余 < 30% 时暂停所有窗口
budget_resume_threshold: 0.50 # 预算恢复到 50% 时恢复窗口
cooldown_hours: 72 # 主从切换后冷却 72 小时
关键提醒:变更窗口配置必须与 Error Budget 的 SLO 目标对齐。如果 SLO 为 99.9%(月故障预算约 43 分钟),则单次主从切换的预算消耗不应超过 5%(约 2 分钟),否则一次失败变更就会耗尽当月预算。
2.5 变更窗口决策矩阵
在实际项目中,变更窗口的选择需要综合考虑风险等级、Error Budget 状态和业务影响。以下决策矩阵可作为参考:
| 变更风险等级 | Error Budget 状态 | 推荐窗口类型 | 窗口时长 | 冷却间隔 |
|---|---|---|---|---|
| 高(主从切换) | 充足(> 50%) | 固定窗口 | 120 分钟 | 72 小时 |
| 高(主从切换) | 紧张(30%-50%) | 固定窗口(缩短) | 60 分钟 | 96 小时 |
| 中(配置变更) | 充足(> 50%) | 滚动窗口 | 30 分钟 | 4 小时 |
| 中(配置变更) | 紧张(30%-50%) | 滚动窗口(缩短) | 15 分钟 | 8 小时 |
| 低(日志轮转) | 任意 | 滚动窗口 | 10 分钟 | 1 小时 |
通过上述定义和配置,变更窗口成为 Error Budget 策略的可执行组件,确保变更操作在风险可控的前提下高效推进。