如何定义月度错误预算并自动冻结发布?

解读

在国内互联网与金融级分布式系统中,“错误预算”是 SRE 与 DBA 团队对线上稳定性进行量化治理的核心抓手。CouchDB 作为多主复制、离线优先的 NoSQL,其节点数多、版本迭代快、移动端同步链路长,一旦发布引入回归缺陷,可能触发全网数据同步风暴视图索引重建雪崩。因此,面试官想考察的是:

  1. 你能否把“稳定性”翻译成可度量的数字;
  2. 你能否用这套数字反向驱动发布节奏,做到“代码写完不算完,预算用完就封板”;
  3. 你能否在 CouchDB 特有的复制与离线场景下,设计自动化的刹车机制,而不是靠人工喊停。

知识点

  1. 错误预算(Error Budget)公式
    月度预算 = (1 – 月度可用性目标) × 月度总时间
    例:可用性目标 99.9%,则预算 = 0.1% × 30×24×60 = 43.2 分钟。
  2. CouchDB 关键 SLI
    • 集群写入成功率(含冲突解决)
    • 视图索引构建延迟 P95
    • 双向同步延迟 P99(移动端←→云端)
    • 节点 OOM 与 文件描述符耗尽次数
  3. 预算消耗事件分级
    P0:全集群不可写;P1:分片不可读;P2:同步延迟>5 分钟;P3:单节点宕机。
  4. 自动冻结发布的技术实现
    • 监控:Prometheus + Exporter 采集 CouchDB 内置 /_stats、/_active_tasks、/_node 指标;
    • 预算燃尽速率:使用 Prometheus 的 rate() 函数实时计算 5 分钟滑动窗口内的“有效宕机时间”;
    • 决策:Grafana Alerting 或阿里 SLS 告警回调触发阿里云函数计算 FC / 腾讯云 SCF,调用 GitLab API 将主干分支设为 Protected + No Push,并给 Merge Request 打标签 budget-exhausted
    • 解封:每月 1 号 00:00 UTC 定时器自动解除保护,同时清零预算计数器。
  5. 国内合规补充
    • 金融类业务需向央行报备重大发布,预算耗尽触发冻结后,5 分钟内需通过企业微信机器人同步值班群与合规邮箱;
    • 若当月因监管演练进行主动切流,该时段不计入预算消耗,需在 Prometheus 记录规则里用 unless 关键字剔除。

答案

第一步:确定月度可用性目标。以国内头部 SaaS 厂商为例,对支付对账类 CouchDB 集群定 99.95%,对应错误预算 21.6 分钟。
第二步:选取 SLI 并落地监控。在 Prometheus 记录规则中新增:

- record: couchdb_effective_downtime_seconds  
  expr: |  
    (1 - couchdb_write_success_rate_5m) * 300  
    + increase(couchdb_view_index_delay_exceeded_5m[5m])  
    + increase(couchdb_sync_delay_p99_above_threshold[5m])  

第三步:配置告警。当 sum_over_time(couchdb_effective_downtime_seconds[30d]) ≥ 21.6×60 时,告警路由到 SCF。
第四步:SCF 函数逻辑(Python 3.9):

  1. 调用 GitLab 私有令牌 → 把 master 分支设为 Maintainers 级别不可合并
  2. 调用企业微信 API → 推送卡片“月度错误预算已耗尽,发布通道已自动冻结”;
  3. 在 CouchDB 集群 etcd 写入 freeze=true 键,CI 的 .gitlab-ci.yml 中预置判断:若键存在,则所有构建 job 直接 exit 1
    第五步:次月 1 号 00:00,定时触发“解冻”函数,清除保护、删除 etcd 键、清零 Prometheus 记录,同时生成《上月稳定性复盘》PDF 自动上传到 Confluence。

通过以上流程,把“稳定性”从口号变成可度量的分钟数,再把分钟数变成自动落地的代码锁,实现真正的“预算用完,发布封板”。

拓展思考

  1. 灰度与预算双轨制
    国内大厂常把 CouchDB 集群按流量染色拆成“金丝雀池”与“全量池”。灰度阶段只观察金丝雀池的独立预算,一旦灰度预算耗尽即回滚镜像,而全量预算不受污染,避免“小流量试跑直接把整月预算烧光”的窘境。
  2. 离线客户端的“边缘预算”
    移动端 SDK 内置 SQLite + PouchDB,离线场景下本地崩溃也会同步回包名与堆栈。可把本地崩溃率折算成“边缘错误预算”,当边缘预算耗尽时,应用市场灰度通道自动关闭,实现“云+端”一体化治理。
  3. 监管上报的自动化
    央行《金融科技创新监管工具》要求重大事件 2 小时内邮件+电话双通道上报。可在冻结函数中同步触发监管模板邮件,自动填充“故障起止时间、影响交易笔数、已用错误预算比例”,降低合规人员手工整理风险。