🕸️ 第五章 不同于Web的系统
📄 一句话概括

五个九不是【停得少】,是【一次都不能停】;而响应时间慢下来,在账单上直接换算成机器数量。

📝 本节和前面几节的关系

上一节讲【搬不动的系统】,从这一节开始讲【不能停的系统】。教材 5-2 的并列关键词是【关键任务系统】和【响应时间】。

一、几个九到底是多少时间

先说分母:一年 = 365 × 24 × 60 = 525600 分钟。所有【几个九】都是拿它乘出来的。

99%(两个九):一年能停 5256 分钟,约 3.65 天。这是很多内部系统的水平。

99.9%(三个九):525.6 分钟,8.76 小时。这是行业常说的【及格线】。

99.99%(四个九):52.56 分钟,不到 1 小时。

99.999%(五个九):5.256 分钟。一年只有 5 分钟。

教材 5-2 说关键任务系统【不能停止运行】,指的就是后两档。

二、为什么五个九是一个不同的世界

一年 5 分钟,不是【容错】,是【零容错】。

因为每一次计划内维护、每一次应用发布、每一次数据库迁移,都要从这 5 分钟里扣。一次普通的停机升级就要 10 到 30 分钟——连一次都不够。

所以真要做到五个九,办法不是【修得快】,而是让用户根本感知不到切换:热备、双活、数据库主从自动切换、滚动发布。这也是为什么这个级别的系统往往要多花几倍的钱,却换不来任何新功能。

顺带一句:这类系统的架构里,冗余本身就是成本——两台机器只当一台用,两个机房只算一个机房的价值。

三、停一分钟值多少钱

业界有三套被反复引用的口径:

Gartner 基准:全行业平均约 5600 美元/分钟,折算下来约 33.6 万美元/小时。

ITIC 2024 调查:中大型企业里,90% 以上每小时损失超 30 万美元;大型企业里 98% 每小时至少 10 万美元;41% 的企业每小时 100 万到 500 万美元。

Uptime Institute 2024 年度分析:54% 的运营商说最近一次重大中断损失超 10 万美元,五分之一超过 100 万美元。

把这张表和上一节的【几个九】叠起来看,就明白五个九为什么贵:一年的停机额度只值 2.9 万美元,堪堪抵得上一次一小时的意外(33.6 万美元)的十一分之一。

四、响应时间:慢就是贵

教材 5-2 把【响应时间】和【关键任务】并列写在一起,是有道理的——对用户来说,一个 2 秒才回应的系统,和一个挂掉的系统,体验上区别不大。

响应时间还是直接的成本。按利特尔法则:

并发数 = 每秒请求数 × 响应时间

每秒 1000 次请求、响应 100 毫秒,需要 100 个并发槽位;响应涨到 500 毫秒,同样 1000 次请求就需要 500 个槽位。

多出来的 400 个槽位,就是服务器要加的那部分。 响应时间慢 5 倍,机器就要多备 5 倍——它不是一个【优化项】,是容量的一部分。

五、动手 Demo:几个九的停机时间与停机成本

把【一年能停多久】和【停一分钟多少钱】放在一张表里,看看关键任务系统的账是怎么算的。

year = 365 * 24 * 60        # 525600 分钟
nines = [("两个九", 0.01), ("三个九", 0.001),
         ("四个九", 0.0001), ("五个九", 0.00001)]
for name, ratio in nines:
    mins = year * ratio
    print("  %-6s 一年可停 %8.2f 分钟 = %6.2f 小时" % (name, mins, mins / 60))

per_min = 5600              # Gartner 基准,美元
print("  五个九一年的额度 = %.3f 分钟 × %d = %.1f 万美元"
      % (year * 0.00001, per_min, year * 0.00001 * per_min / 10000))
print("  一次 1 小时中断   = 60 × %d = %.1f 万美元" % (per_min, 60 * per_min / 10000))
print("  相差 %.1f 倍" % (60 / (year * 0.00001)))

qps, ms = 1000, 100
print("  %d 次/秒,响应 %d 毫秒 → 并发 %d 个槽位"
      % (qps, ms, qps * ms / 1000))
print("  响应涨到 500 毫秒 → 并发 %d 个槽位" % (qps * 500 / 1000))

实跑输出:

--------------------------------------------------------------------
D2 不能停的系统,一年能停多久
--------------------------------------------------------------------
  教材 5-2 讲关键任务系统与响应时间。先把【几个九】换算成真正的时间:

  一年 = 365 × 24 × 60 = 525600 分钟

  可用性              一年允许停多久        折合
  ------------------------------------------------------------------------
  99%(两个九)       5256 分钟             87.6 小时,约 3.65 天
  99.9%(三个九)     525.6 分钟            8.76 小时
  99.99%(四个九)    52.56 分钟            不到 1 小时
  99.999%(五个九)   5.256 分钟            约 5 分钟

  这里有个反直觉的地方:**五个九不是【停得少】,是【一次都不能停】。**
  一年总共 5 分钟,等于全年只够一次 5 分钟的意外,再加一次重启就用完。

  再看停一分钟值多少钱(三套公开口径):

  来源                    对象            数字
  ------------------------------------------------------------------------------------
  Gartner 基准            全行业平均      约 5600 美元/分钟
  ITIC 2024 调查          中大型企业      90% 以上每小时超 30 万美元
  ITIC 2024 调查          大型企业        98% 每小时至少 10 万美元
  ITIC 2024 调查          头部企业        41% 每小时 100 万至 500 万美元
  Uptime Institute        单次重大中断    54% 超 10 万美元,1/5 超 100 万美元

  把两件事叠起来算:

  ----------------------------------------------------------------------------------------
    五个九一年的停机额度 = 5.256 分钟 × 5600 美元 ≈ 2.9 万美元
    一次 1 小时的中断    = 60 × 5600 = 33.6 万美元
    33.6 ÷ 2.9 ≈ 11.6 倍
  ----------------------------------------------------------------------------------------

  **一次一小时的意外,会把整年的可用性预算一次烧掉,还超 11 倍。**

  教材 5-2 还提了【响应时间】。它不是可用性的附属品,它直接换算成机器数量。
  按利特尔法则:并发数 = 每秒请求数 × 响应时间

  ----------------------------------------------------------------------------------------
    每秒 1000 次请求,响应 100 毫秒 → 需要 100 个并发槽位
    同样 1000 次请求,响应涨到 500 毫秒 → 需要 500 个并发槽位
    多出来的 400 个槽位,就是服务器要加的那部分
  ----------------------------------------------------------------------------------------

  结论:**响应时间慢 5 倍,机器就要多备 5 倍。慢,在账单上就是贵。**

先看前四行:从两个九到五个九,停机额度缩了 1000 倍(5256 分钟到 5.256 分钟)。但实现成本不是线性涨的——它是在某个点之后突然变陡,因为到了那一档,靠【修得快】已经没用了,只能靠架构。 再看中间两行:2.9 万对 33.6 万。五个九一年的停机额度,只够一次一小时的普通意外。这就是关键任务系统为什么宁可多买一倍机器——它买的不是性能,是那 5 分钟。 最后两行就是利特尔法则。记住这一句:响应时间是容量指标,不只是体验指标。

30 秒实验

  1. 算一下你们公司系统的可用性目标是多少个九,折算成一年能停多久。
  2. 打开一个你常用的网站,按 F12 看某个接口的耗时——超过 500 毫秒的就算慢。
  3. 想想一个每秒 1000 次请求、每次耗时 1 秒的接口,需要多少个并发才能撑住。

常见误区

  1. 错误:五个九就是【很少出错】。——纠正:是【几乎不许有计划内停机】。一年 5 分钟,一次常规的版本升级就用光了,所以必须做到用户感知不到切换。
  2. 错误:响应时间只是体验问题,跟成本无关。——纠正:它直接决定要买多少台机器。按利特尔法则,响应时间翻 5 倍,需要的并发槽位就翻 5 倍。
  3. 错误:停机成本只能事后统计。——纠正:它可以事先估。用【每分钟损失 × 停机分钟数】就能算出上限,这也是决定【值不值得为可用性多花钱】的依据。
自测三问(点开对答案) 1. 99.999% 的可用性,一年允许停多长时间? —— **5.256 分钟**。一年是 525600 分钟,乘以 0.00001 就是这个数。**这个额度大约只够一次 5 分钟的意外**,所以达到五个九靠的不是修得快,而是热备与双活。 2. 为什么说【响应时间是容量指标】? —— 因为按利特尔法则 **并发数 = 每秒请求数 × 响应时间**。每秒 1000 次请求、响应 100 毫秒时需要 100 个并发槽位;响应涨到 500 毫秒就需要 500 个。**响应时间翻几倍,服务器就要加几倍。** 3. 一次一小时的停机,大概值多少钱? —— 按 Gartner 的基准约 **33.6 万美元**(5600 美元/分钟 × 60 分钟)。而五个九一年的停机额度折成钱只有约 **2.9 万美元**——**一次意外就会把整年的预算烧掉,还超 11 倍**。

相关笔记