题目重点:把大规模 rollout 拆成目标群体、版本分发、健康观测、逐环放量、暂停回滚和审计。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版支持服务端组件发布,部署目标按 region/cluster 划分;若原题是桌面软件/设备端更新,离线、签名和带宽模型应重新讨论。
- 发布单元含不可变 artifact、版本、配置、依赖和回滚目标;数据迁移遵循前后版本兼容窗口。
- 成功不仅是部署完成,还包括错误率、延迟、业务护栏和用户影响在门槛内。
解题路线
- 先问系统形态、同时在线实例数、地域、可用性目标、依赖及允许多久传播;明确 artifact 签名、SBOM/来源和版本固定。
- 控制面定义 rolloutId、目标集合、ring 顺序、每环比例、并发上限、批准人和健康门槛;数据面从区域镜像/缓存拉不可变 artifact,避免中心仓库被并发下载打爆。
- 按内部→小比例 canary→更多 region/ring 扩散,每环等待足够观察窗口;比较新旧版本的错误率、p95 延迟、关键业务转化与资源使用,考虑流量构成差异。
- 控制器以目标实例为幂等单位记录 desired/observed 版本,重试安装不重复执行危险迁移;限制每故障域同时替换数,留足健康副本。
- 门槛失败自动暂停并保留证据,再按兼容策略回滚二进制/配置;不可逆 schema 迁移须采用 expand-migrate-contract,不能只靠把旧镜像重新启动。
- 区域断网或控制面失效时目标实例继续上一个已验证版本,发布计划可恢复;审计谁批准、何时对哪些目标放量和回滚。
手动走一遍
新版本先到单一区域 1% 实例,CPU 持平但支付成功率下降,控制器因业务护栏失败暂停扩散。即使发布系统报告所有 canary 实例健康,也不能继续。回滚前确认新版本写入的数据旧版本仍可读,否则先执行兼容修复。
规模与取舍
若目标实例 N、每环并发上限 C,部署波次数至少 ceil(N/C),再乘每环健康观察时间;artifact 传输量约 N×包大小但缓存/分层分发可减少中心出口。发布状态 O(N);题目无规模数值,不能断言具体机器数。
易错点与追问
容易失分的边界
- 一次推所有实例,没有故障域隔离和用户护栏。
- 只看 pod/进程存活,不看错误率与业务结果。
- 把回滚理解为换回旧镜像,忽略不兼容数据迁移。
- 控制面重试导致同一 migration 重复执行。
- 把 Rust 改写背景说成原题限定。
继续深挖
- 客户端离线几周后恢复时怎样安全跨版本升级?
- 实验流量和 canary 分流的地域偏差如何校正?
- 数据库 schema 必须先发还是应用先发?
- 极端大包如何使用区域缓存或差分更新?
