跳转至

可靠性 —— 系统如何保持健壮

xiangqin 每天在背后跑6 个自动化演练 + 1 套指标观测,保证服务不会悄悄失效。这一页说清楚我们做了什么、为什么,以及你可以怎么验证。

两类风险,两套策略

风险 场景 策略
防腐烂 备份恢复、机器迁移这类"半年才用一次"的流程,真要用时才发现已经坏了 定期自动演练 → 早发现
防降级 响应变慢、错误率悄悄抬升,用户反馈才知道已经晚了 每日聚合指标 + 徽章可视化

行业叫法:Chaos Engineering(Netflix 首创)+ Observability(Google SRE)。大厂标配。

6 个自动化演练 + 1 套指标

每个都在 GitHub Actions 上定时自动跑。你可以打开 repo 的 Actions 页面看历史成功率。

防腐烂(4 个备份恢复演练)

代号 一句话 频率
M1 备份新鲜度 每小时问一次云存储:"最新备份是多久以前的?" 超过 26 小时就报警 每小时
M2 备份完整性 每天把最新备份下载到本地,用 sqlite 工具打开,确认文件没损坏、核心表都在 每天
M3 异地恢复演练 每周在一台全新干净的机器上从云备份恢复数据库,模拟"服务器整机丢失还能救吗" 每周日
M4 装机流程演练 每月真开一台新机器,跑装环境脚本、部署服务、smoke 测试,再销毁;证明"换机流程没生锈" 每月 1 号
M6 完整迁移演练 每月跑一次真数据迁移:开新机 → 拉最新备份 → 恢复到新机 → 用真数据验证服务能响应;证明"到期换机"整套流程能跑通 每月 15 号

防降级(1 套指标)

代号 一句话 频率
M5 性能指标聚合 每天算过去 24 小时 API 响应时间(p50/p95/p99)+ 错误率,展示为徽章(绿/黄/红) 每天

怎么验证我们真做了

打开主仓 README 顶部的徽章墙 —— 每个演练对应一个徽章

  • 绿色 passing = 最近一次跑成功,系统健康
  • 红色 failing = 失败了,代码仓里有人正在修(或等修)
  • 点击徽章直接跳到 GitHub Actions 历史

任何人都能看到: - 哪个演练多久跑一次 - 最近 N 次跑的历史 - 失败的具体错误原因(log 公开)

透明 = 可信。我们没有隐藏任何故障。

当你最担心什么

"你们的备份真的有用吗 / 数据丢了能救回来吗?"

M1/M2/M3 覆盖。每小时确认备份在、每天确认备份能读、每周真从备份恢复一遍。如果这三个徽章全绿 —— 意味着昨晚的数据现在立刻能恢复到任意全新机器

"服务器挂了怎么办 / 换机要多久?"

M4/M6 覆盖。每月演练"从零开机到服务起来"的完整流程。目前实测大约 10 分钟完成(装机 + 部署 + 验证),一次演练成本几分钱。

真换机(业务切换)采用维护窗口模式:用户看到 1-5 分钟的"系统升级中" → 然后完全恢复。对 SQLite 架构这是合理上限(真 zero-downtime 需要 Postgres 主从,待 v0.5+ 业务规模需要时实现)。

"性能会不会悄悄变慢?"

M5 覆盖。每天徽章显示 p95 响应时间:

  • 绿:< 100ms(体感即时)
  • 黄:100-1000ms(有点慢但可用)
  • 红:> 1000ms(明显感知)

连续多天黄或红 → 我们已经在看问题。

我们从失败里学到什么

演练的价值不只是"预防",还是"暴露"隐藏问题。举个实例:

2026-04-23 第一次跑 M4 迁移演练,在新机器上部署时挂了 —— 原因是 SSH 空闲超时(小机器装依赖较慢)。如果不是 chaos drill 先暴露,这个 bug 会在真换机时才被发现(那时候是灾难场景)。

每次失败都是一次免费的真实事故演练。这才是 chaos engineering 的核心价值。

未来改进方向

  • 性能退化告警:当 M5 指标连续多天恶化 → 主动 notify
  • 告警链路本身演练(演练演练本身)
  • 依赖包安全扫描定期:防供应链攻击

如果你对实现细节感兴趣,所有演练都是 GitHub Actions workflow,yaml 配置公开在 .github/workflows/chaos-*