← 返回题目列表

高可用系统为什么也需要维护窗口?

中等 第 19 / 27 题 更新于 2026/09/30
维护窗口变更管理风险控制高可用
学习 AI 实战项目

简化版

维护窗口不是承认系统不高可用,而是把高风险升级、数据迁移和基础设施操作放进人员、容量与回滚条件最充分的时段,限制同时变更数量和故障半径。 真正高可用的系统应尽量无损滚动维护,但仍需窗口管理不可完全在线或需要强协同的操作。

详细版

窗口前冻结无关变更,确认备份/副本、N-1 容量、值班人员、监控和回滚;窗口中分批执行,每批设置成功率、P99、复制 lag 和业务指标护栏;窗口结束前完成验证或回滚,不能把未完成风险留给无人时段。

维护动作必须区分可在线滚动、需要降级和必须停机三类。对用户有影响时提前公告并给出范围;无感维护也要记录实际容量下降。窗口不能成为跳过灰度和测试的借口。

完整版教学

一、为什么冗余系统仍怕变更

高可用依赖副本和故障域,但维护会主动减少副本、迁移数据或改变协议。此时再叠加一个真实故障,冗余可能被耗尽。窗口的价值是把人员、观察时间和风险预算集中起来,而不是简单选择“夜里流量低”。

记忆钩子:维护窗口管理的是“变更期间暂时变薄的安全余量”。

二、维护任务分级

类型示例用户影响
在线滚动应用小版本、证书轮换应为无感
受控降级大规模 Rebalance、索引重建延迟或功能降低
计划停机不兼容核心升级明确不可用窗口

能滚动就不应默认停机,但“支持滚动”必须经过版本兼容与容量验证,而非依赖文档宣称。

三、窗口前的准入条件

检查备份可恢复、复制健康、磁盘水位、剩余容量、回滚包、权限和依赖联系人。若 10 个实例当前流量需要 8 个,滚动批次最多只能同时下线 2 个,且还没有额外故障余量;更安全的批次可能是 1 个。

maintenance_capacity = healthy_capacity - batch_removed_capacity
必须 >= peak_load + safety_margin

四、窗口内按批次和护栏推进

先 canary,再 10%、25%、50%,每批等待足够样本。错误率比基线高 0.5 个百分点、P99 高 20% 或复制 lag 超 60 秒时自动暂停。操作人和观察人分离,避免同一人忙于命令而错过指标。

并行操作要检查共同故障域。不能同时维护同一分片的多个副本,也不能在一个 AZ 做网络升级时又把流量集中到该 AZ。

五、Schema 与数据迁移的特殊风险

数据库变更采用 expand/contract:先增加兼容结构,新旧代码共存,数据回填并校验,切读后再删除旧结构。一步 rename/drop 会让回滚代码无法运行。大规模回填独立限速,不能挤占在线事务日志和 I/O。

假设回填 1 亿行、每秒 5000 行,理论需约 5.6 小时,必须确认窗口是否容纳;若不能,就把回填设计成跨窗口可续跑任务,而不是临时提高速度。

六、结束条件和沟通

窗口结束不等于命令执行完。需要核心交易验证、容量恢复、无异常积压、监控和告警正常、临时开关清理。无法完成时在预留的回滚截止点前退回,不能因“已经做了大半”赌博。

记录实际开始/结束、每批指标、偏差、用户影响和待办。对外公告应描述受影响能力与时间,不泄露内部敏感拓扑;内部则保留完整审计。

七、常见误区与追问

  • 误区:高可用系统不应该有维护窗口。 窗口是高风险变更治理,不等于必须停机。
  • 误区:低峰期容量一定更安全。 夜间可能人员不足,批处理负载反而更高。
  • 误区:窗口内可以跳过灰度。 维护窗口不能替代分批和护栏。
  • 误区:命令成功就可以关闭变更单。 还要恢复容量、验证业务和清理临时状态。
  • 追问:如何做到用户无感? 冗余容量、优雅摘流、滚动批次和前后兼容共同保证。
  • 追问:窗口超时怎么办? 到回滚截止点立即回退或停在预定义安全状态。
  • 追问:紧急变更还需窗口吗? 可走应急流程,但仍需范围、审批、护栏和事后审计。

八、加强记忆

维护窗口按“准入—分批—护栏—截止—验证”管理。窗口前确认备份、容量和回滚,窗口中只做受控变更并避免共同故障域,截止点前果断回退,结束时恢复所有安全余量。它让维护风险可预测,而不是给停机找理由。

窗口排期还应避开大促、账务日切和上游集中变更,并预留观察期,不能把“命令执行完”直接当作维护结束。

对有状态系统,备份可恢复验证、复制追平时间和索引重建时间都应进入窗口预算,而不只是应用发布时间。