解释“ Canary 补丁”在小流量实例中的发布流程。
解读
面试官真正想考察的是:
- 你是否理解 Cloud SQL 作为全托管服务的灰度发布机制;
- 能否把“Canary 补丁”与“小流量实例”这两个关键词放在国内合规、网络隔离、业务低峰的真实场景里讲清楚;
- 是否具备可回滚、可观测、可自动化的闭环思维,而不仅仅是“先升级一台试试”。
一句话:让你设计一条“用户几乎无感、出问题 5 分钟内可回滚”的补丁灰度路径。
知识点
- Canary 补丁定义:Google 内部对“补丁”级别的灰度叫“Minor Version Rollout”,国内对应“小版本热补丁”,只改二进制或内存态,不改数据页,因此无需实例重启即可回滚。
- 小流量实例筛选条件:
- Region 选非金融专区、非双可用区(减少爆炸半径);
- CPU 利用率 <30% 且 QPS <500/s(降低性能回退敏感度);
- 无只读副本、无正在运行的长事务(避免复制 lag 放大);
- 客户标签非“GA-Trusted-Tester”(国内大客户白名单)即可进入灰度池。
- 发布流水线阶段:
- T-0:发布系统(国内叫“云舰”)自动拉出 5% 实例做“影子 Canary”,只读阶段,不写磁盘,对比 p99 延迟、错误率;
- T-30min:指标无异常,再扩至 20%,此时真正替换进程,但保留旧容器镜像 30 min;
- T-60min:若无“SLO 违规”(国内定义为错误率>0.1% 或延迟>基线 5%),全量推送;
- 任意阶段触发回滚:通过热补丁逆向内存注入(bpftrace)2 分钟内回退,无需重启。
- 观测手段:
- Stackdriver(国内落地为“云监控日志国标版”)实时拉取 error.log、slow.log;
- Cloud SQL Admin API 每 10 s 采样 innodb_row_lock_waits、active_connections;
- Canary Analyzer 自动跑 Kolmogorov-Smirnov 检验判断指标分布漂移。
- 合规与权限:
- 所有补丁需提前 72 h 在“信安备案系统”登记,灰度过程写入操作审计链(不可改、不可删);
- 涉及跨境容灾的实例(如香港->上海)需数据驻留检查,Canary 阶段禁止同步到海外副本。
答案
“Canary 补丁”在 Cloud SQL 的小流量实例发布流程可拆成五步:
- 实例筛选:系统根据Region、负载、标签三条规则自动捞出 5% 小流量实例,确保非核心业务、低峰时段、无副本。
- 影子验证:新补丁以只读模式注入内存,不落地磁盘,对比 p99 延迟、锁等待、错误率,30 分钟内零异常则晋级。
- 真实替换:扩大至 20% 实例,原子替换进程,旧镜像保留 30 分钟;同时关闭自动备份窗口,防止补丁期间产生不一致备份。
- 全量决策:Canary Analyzer 跑统计检验,若SLO 无违规且信安审计链完整,剩余 80% 实例在维护窗口内滚动推送,单实例中断 <30 s。
- 应急回滚:任意阶段触发一键回滚,通过bpftrace 热卸载补丁,2 分钟内内存回退,无需重启数据库,并自动打开事件工单通知客户。
整个流程零人工干预、可观测、可审计,符合国内等保三级对“变更管理”的留痕要求。
拓展思考
- 如果客户启用了私有 IP + 自定义路由,Canary 阶段如何确保回滚时路由收敛时间 <1 min?
提示:提前把旧进程 socket fd 挂到SO_REUSEPORT 的 backup 组,回滚时秒级切换,无需重新建连。 - 面对MySQL 8.0.32→8.0.33这种逻辑升级(需改数据字典),Canary 策略为何必须降级为“蓝绿副本”而非热补丁?
提示:数据页格式变化属于Major Version,无法内存回退,必须走新建只读副本→切换 VIP 的经典蓝绿。