核心指标:可用性、延迟分位数与可扩展性

01-基础与模型 入门 约 15 分钟 #SLA#延迟#可扩展性#分位数 更新 2026-10-02
当前状态:未学
本文基于模型知识整理(生成时未联网核对),关键结论建议对照经典文献复核。

一句话定义

评价分布式系统的四个核心维度是可用性(服务多久能响应)、性能(多快响应,看分位数)、可扩展性(加资源能换来多少吞吐)与一致性(响应语义多"新"、多"对"),它们之间本质上是互相制衡的。

为什么重要

没有指标就没有工程:容量规划、故障定义、架构权衡都建立在这些指标上。更关键的是,这些指标互相冲突——追求极致一致性会牺牲可用性(kp-012),追求低延迟的尾部分位数要付出冗余与超时预算的成本。指标不清,权衡就是空的。

前置知识

kp-001;百分位数的基本统计概念。

核心概念

  • 可用性:常以"几个 9"表述。99.9%(三个 9)= 每年约 8.8 小时不可用;99.99%(四个 9)= 每年约 52 分钟。通常以 SLA(对外承诺)、SLO(内部目标)、SLI(实际测量指标)三层管理。
  • 延迟分位数:用 P50/P99/P999 而非平均值描述延迟。尾部延迟(tail latency)由最慢的请求决定整体体验。
  • 可扩展性:吞吐随资源增加而增长的能力。受限于串行部分(Amdahl 定律:加速比 ≤ 1/(串行比例 + 并行比例/节点数))与协调开销。
  • 一致性:响应所承诺的数据新鲜度与顺序语义(谱系见 kp-013)。

原理与机制

为什么看分位数不看均值:延迟分布是重尾的。若 P99 = 1s,意味着每 100 个请求有 1 个超过 1 秒;一次页面加载往往并行发起几十个请求,用户看到"慢"的概率 ≈ 1-(0.99)^n——n=30 时约 26% 的请求会踩到长尾。因此尾部延迟被并行度放大,均值完全掩盖这一点。

扇出放大:一个后端请求扇出到 30 个下游,即使每个下游可用性 99.9%,全链路成功率 ≈ 0.999^30 ≈ 97%。可用性随扇出指数级劣化,这解释了为什么架构要控制扇出、做部分降级。

可扩展性的天花板:任何需要"所有节点都参与"的步骤(如全局锁、全量共识)都是串行段。横向扩展的第一原则是消除全局协调点(如按 key 分区,见 kp-025)。

公式或模型

  • 可用性换算:99.9% → 年不可用 ≈ 365×24×0.001 ≈ 8.76 小时。
  • Amdahl 加速比:S(n) = 1 / (s + (1-s)/n),s 为串行比例。s=10% 时 n→∞ 的极限加速比为 10 倍。

实例或案例

电商大促:目标是 P99 延迟 < 500ms、可用性 99.95%。预案通常包括:按分位数做容量压测(而非按均值)、非核心链路降级(关闭推荐、简化页面)、读多写少数据上缓存。这些手段本质都在四指标间做取舍——牺牲一致性(缓存可能旧)换可用性与延迟。

常见误区

  • 误区一:用平均延迟汇报性能。重尾分布下均值无意义,必须看 P99/P999。
  • 误区二:把"可用性 99.99%"当作纯粹的数字游戏。统计口径(按月/按年、是否计计划内维护)不定义清楚,数字没有意义。
  • 误区三:以为堆机器可以无限扩展。全局协调点(单主写入、全局唯一 ID 发号器)会成为瓶颈,需识别并消除或分片。

与其他知识点的关系

  • kp-006:超时时间的选择直接决定 P99 尾部与故障恢复速度的权衡。
  • kp-025:分区是消除全局瓶颈、提升可扩展性的主要手段。
  • kp-012:可用性与一致性的制度性权衡(CAP/PACELC)。

自测题

  1. 服务并行调用 20 个下游,每个下游 P99=100ms,为什么端到端 P99 可能远大于 100ms?

答:端到端延迟近似取最慢者,20 个独立调用中"至少一个踩到尾部"的概率远高于单调用;P99 会被放大到接近 1-(0.99)^20≈18% 分位的更差水平。

  1. 三个 9 的可用性对应每年多少停机时间?

答:约 8.76 小时。

  1. 为什么消除全局协调点是横向扩展的第一原则?

答:全局协调点(全量共识、全局锁、单点写入)是串行段,受 Amdahl 定律约束,节点再多也无法绕过;必须把它消除(无主复制)或打碎(分区)。

延伸阅读

  • Brendan Gregg 关于延迟分位数与 USE 方法的文章。
  • Jeffrey Dean & Luiz Barroso, "The Tail at Scale"(CACM, 2013)。