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 存在紧密的双向驱动关系:

  1. 预算消耗触发窗口调整:当 Error Budget 消耗超过阈值(如 70%),系统自动缩短或暂停后续变更窗口。
  2. 窗口内变更消耗预算:每次变更操作消耗一定比例的 Error Budget(通常按变更风险等级预分配)。
  3. 预算恢复后窗口恢复:当 Error Budget 通过无故障运行恢复到安全线以上,变更窗口自动重新开放。

下图展示了 Error Budget 与变更窗口之间的动态联动机制:

Error Budget 与变更窗口联动机制 Error Budget SLO 剩余可用预算 预算消耗 > 70%? 阈值触发判断 变更窗口 固定 / 滚动 窗口状态 开放 / 关闭 / 缩短 变更执行 主从切换 / 部署 结果反馈 成功 / 失败 / 回滚 消耗 <= 70% 消耗 > 70% 更新预算消耗 联动规则 1. 预算充足 → 窗口正常开放 2. 预算紧张 → 窗口缩短/关闭 3. 变更失败 → 消耗额外预算 4. 预算恢复 → 窗口自动恢复 主从切换场景 固定窗口:周三 03:00-05:00 滚动窗口:预算 > 50% 时开放 冷却间隔:至少 72 小时

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 策略的可执行组件,确保变更操作在风险可控的前提下高效推进。