知识卡片
通用可扩展性定律:在阿姆达尔定律上加了"协调开销"这一项
内容
可扩展性的严格定义不是”加了资源系统就变快”,而是”投入资源和获得能力 提升之间的投入产出比”——理想情况下资源翻倍、容量也翻倍(线性扩展), 但绝大多数真实系统达不到这条直线,甚至存在一个临界点,过了这个点再 增加资源,吞吐量反而会下降。[[阿姆达尔定律给出值不值得优化的量化判断标准]] 解释了其中一个原因:只要系统里有一部分工作无法并行(必须串行执行), 不管堆多少并发资源,这部分串行时间都甩不掉,吞吐量最终会趋于一个 平台期。Gunther博士提出的通用可扩展性定律(USL)在这个基础上补上了 第二项:节点/进程之间的通信和协调开销。这项开销的关键特征是它按 “工作者数量的二次方”增长——因为节点越多,两两之间可能需要交互的信道 组合数就越多,这个增长速度比新增节点带来的收益增长快得多。这解释了 为什么单靠阿姆达尔定律无法说明”扩展性倒退”(继续加资源反而更慢)这种 现象:阿姆达尔定律本身最多只能让吞吐量趋平,而只有再叠加上随节点数 平方增长的协调开销,才能让曲线在某个点之后真正向下弯折。USL给使用者 的实际启发不是套公式算出精确数字(它本身只是一个简化模型,无法完美 刻画真实系统),而是指出一条构建高可扩展系统的方向:尽量减少系统内 需要串行化的部分,也尽量减少节点之间彼此依赖、彼此通信协调的部分—— 这两类开销才是”加资源却换不来对应产出”的根本原因。
结构图:
flowchart LR
A[线性扩展<br/>资源翻倍→容量翻倍] --> B[叠加串行化部分<br/>阿姆达尔定律]
B --> C[吞吐量趋于平台期<br/>无法继续线性增长]
C --> D[再叠加协调开销<br/>随节点数的平方增长]
D --> E[USL扩展曲线<br/>超过某点后吞吐量反而下降]
参考来源
- 位置:《高性能MySQL:第3版》第11章"可扩展的MySQL"11.1.1节"正式的
可扩展性定义"(源文件:_epub-src/OEBPS/Text/part0018.xhtml)
- 结论依据:原文明确"USL说的是线性扩展的偏差可通过两个因素来建立
模型:无法并发执行的一部分工作,以及需要交互的另外一部分工作……
这种通信的代价取决于通信信道的数量,而信道的数量将按照系统内工作者
数量的二次方增长。因此最终开销比带来的收益增长得更快,这是产生
扩展性倒退的原因",直接说明USL如何在阿姆达尔定律基础上叠加协调
开销、并解释扩展性倒退的成因。
- 原始内容:USL说的是线性扩展的偏差可通过两个因素来建立模型:无法
并发执行的一部分工作,以及需要交互的另外一部分工作……信道的数量
将按照系统内工作者数量的二次方增长。