砍掉 80% 年停机时间:可用性从 99.5% 到 99.9% 的 6 个工程决策与踩坑实录

概述 99.5% 的可用性听起来不错——直到你算一笔账。 一年 8760 小时,99.5% 意味着允许停机 43.8 小时。换算到每个月,差不多 3.65 小时的服务中断。如果是核心交易系统,这 3.65 小时可能就是几十万的订单损失。如果赶在大促期间,损失会翻几十倍。 99.9% 呢?年停机 8.77 小时,月均不到 44 分钟。停机时间砍掉 80%。 0.4 个百分点的提升,背后不是加几台服务器那么简单。我在某出行平台推动过一次这样的改造,从立项到稳定运行在 99.9% 以上,花了整整 14 个月。这期间踩的坑、做的权衡、推翻重来的方案,比写代码本身多得多。 这篇文章不讲理论框架,只拆解我们做过的 6 个关键工程决策,以及 3 个让我后背发凉的踩坑时刻。每个决策都附上我们当时的选型对比和最终方案,你拿去就能对照自己的系统查漏补缺。 可用性的数学本质:为什么 0.4% 这么难 先搞清楚一件事:可用性不是加法,是乘法。 假设你的系统由 3 个服务串联组成,每个服务可用性 99.5%。整个链路的可用性是多少? 0.995 × 0.995 × 0.995 = 0.9851 ≈ 98.51% 三个"还不错"的服务串联起来,整体可用性直接跌破 99%。年停机从单服务的 43.8 小时暴涨到 128 小时——超过 5 天。 反过来想:如果链路有 10 个服务,每个要达到整体 99.9% 的可用性,单个服务的可用性得是多少? 0.999^(1/10) ≈ 0.99990 → 99.99% 十个服务每个都得做到四个九。这就是为什么微服务架构下可用性提升的难度呈指数级增长。 关键认知:提升可用性不是给单个服务加机器,而是同时做三件事——减少串联依赖数量、提高单个服务可用性、在关键路径上做冗余和降级。 Google SRE 团队在 The Calculus of Service Availability 中提到一个观点:大多数服务的内部目标应该定在 99....

August 20, 2026 · 9 分钟 · 1764 字 · 徐保金

MTTR 从 40 分钟到 8 分钟:用四层防御把故障定位提速 5 倍

概述 凌晨三点,手机震动。告警群炸了 200 条消息,用户投诉已经涌进客服群。你爬起来打开电脑,登录跳板机,发现某个核心接口 P99 飙到 8 秒。接下来 30 分钟你都在翻日志、查 Grafana、问上下游——最终定位到是某个配置中心推了一行错误参数。 这个场景太熟悉了。在我经手的上百次线上故障中,定位环节消耗的时间占 MTTR 的 60% 以上。恢复操作本身可能只要 2 分钟(回滚、重启、切流量),但找到"到底哪里出了问题"往往要花 20-30 分钟。 MTTR(Mean Time To Repair/Recovery)衡量的是从故障发生到服务恢复的平均时间。但这个数字是个黑盒——30 分钟的 MTTR 里,到底哪些环节在拖后腿?检测花了多久?响应花了多久?定位花了多久?恢复花了多久?不拆开看,优化就无从下手。 这篇文章拆解我在某出行项目和某电商项目中实战验证的 MTTR 优化体系——四层防御模型:检测层、响应层、定位层、恢复层。每层有具体的工程手段和度量指标,不是空谈方法论。最终效果:核心服务 MTTR 从 40 分钟降到 8 分钟,故障定位时间从 30 分钟降到 5 分钟。 MTTR 拆解:你优化的是哪个环节 很多人把 MTTR 当成一个整体来优化,这是错的。MTTR 至少要拆成四个阶段: 阶段 全称 含义 典型耗时 优化重点 MTTD Mean Time To Detect 从故障发生到告警触发 1-5 min 监控覆盖、SLO 告警 MTTA Mean Time To Acknowledge 从告警触发到有人开始处理 2-10 min On-Call 机制、告警路由 MTTI Mean Time To Identify 从开始处理到定位根因 10-30 min 可观测性、诊断工具 MTTR Mean Time To Restore 从定位根因到服务恢复 1-5 min 回滚、自愈、预案 注意 MTTR 有两种常见解读:Repair(修复)和 Recovery(恢复)。SRE 语境下我更推荐用 Recovery——目标是恢复服务而非彻底修复 Bug。彻底修复是 Postmortem 之后的事(相关文章:故障复盘改进项跟踪)。...

July 28, 2026 · 9 分钟 · 1722 字 · 徐保金