解释“ Canary 补丁”在小流量实例中的发布流程。

解读

面试官真正想考察的是:

  1. 你是否理解 Cloud SQL 作为全托管服务的灰度发布机制;
  2. 能否把“Canary 补丁”与“小流量实例”这两个关键词放在国内合规、网络隔离、业务低峰的真实场景里讲清楚;
  3. 是否具备可回滚、可观测、可自动化的闭环思维,而不仅仅是“先升级一台试试”。

一句话:让你设计一条“用户几乎无感、出问题 5 分钟内可回滚”的补丁灰度路径。

知识点

  1. Canary 补丁定义:Google 内部对“补丁”级别的灰度叫“Minor Version Rollout”,国内对应“小版本热补丁”,只改二进制或内存态,不改数据页,因此无需实例重启即可回滚。
  2. 小流量实例筛选条件
    • Region 选非金融专区、非双可用区(减少爆炸半径);
    • CPU 利用率 <30%QPS <500/s(降低性能回退敏感度);
    • 无只读副本、无正在运行的长事务(避免复制 lag 放大);
    • 客户标签非“GA-Trusted-Tester”(国内大客户白名单)即可进入灰度池。
  3. 发布流水线阶段
    • T-0:发布系统(国内叫“云舰”)自动拉出 5% 实例做“影子 Canary”,只读阶段,不写磁盘,对比 p99 延迟、错误率;
    • T-30min:指标无异常,再扩至 20%,此时真正替换进程,但保留旧容器镜像 30 min;
    • T-60min:若无“SLO 违规”(国内定义为错误率>0.1% 或延迟>基线 5%),全量推送;
    • 任意阶段触发回滚:通过热补丁逆向内存注入(bpftrace)2 分钟内回退,无需重启。
  4. 观测手段
    • Stackdriver(国内落地为“云监控日志国标版”)实时拉取 error.log、slow.log;
    • Cloud SQL Admin API 每 10 s 采样 innodb_row_lock_waitsactive_connections
    • Canary Analyzer 自动跑 Kolmogorov-Smirnov 检验判断指标分布漂移。
  5. 合规与权限
    • 所有补丁需提前 72 h 在“信安备案系统”登记,灰度过程写入操作审计链(不可改、不可删);
    • 涉及跨境容灾的实例(如香港->上海)需数据驻留检查,Canary 阶段禁止同步到海外副本。

答案

“Canary 补丁”在 Cloud SQL 的小流量实例发布流程可拆成五步:

  1. 实例筛选:系统根据Region、负载、标签三条规则自动捞出 5% 小流量实例,确保非核心业务、低峰时段、无副本
  2. 影子验证:新补丁以只读模式注入内存,不落地磁盘,对比 p99 延迟、锁等待、错误率,30 分钟内零异常则晋级。
  3. 真实替换:扩大至 20% 实例,原子替换进程,旧镜像保留 30 分钟;同时关闭自动备份窗口,防止补丁期间产生不一致备份
  4. 全量决策Canary Analyzer 跑统计检验,若SLO 无违规信安审计链完整,剩余 80% 实例在维护窗口内滚动推送,单实例中断 <30 s
  5. 应急回滚:任意阶段触发一键回滚,通过bpftrace 热卸载补丁2 分钟内内存回退无需重启数据库,并自动打开事件工单通知客户。

整个流程零人工干预、可观测、可审计,符合国内等保三级对“变更管理”的留痕要求。

拓展思考

  1. 如果客户启用了私有 IP + 自定义路由,Canary 阶段如何确保回滚时路由收敛时间 <1 min
    提示:提前把旧进程 socket fd 挂到SO_REUSEPORT 的 backup 组,回滚时秒级切换,无需重新建连。
  2. 面对MySQL 8.0.32→8.0.33这种逻辑升级(需改数据字典),Canary 策略为何必须降级为“蓝绿副本”而非热补丁?
    提示:数据页格式变化属于Major Version,无法内存回退,必须走新建只读副本→切换 VIP 的经典蓝绿。