在流量到达之前识别出的瓶颈节点
介数中心性
对于图中的每一对节点,它们之间存在一条最短路径。节点 N 的介数中心性 = 所有经过 N 的最短路径所占的比例。
高介数节点位于许多其他节点对之间的路径上。 如果它变慢,许多流量都会变慢。如果它失效,许多流量都会中断。
架构解读:高介数节点是每次架构评审都应格外关注的对象。它们集瓶颈、单点故障(SPOF)和容量关键组件于一身。它们通常是:
- DNS 提供商(位于每个客户端与每个服务之间)
- 入口代理(位于每个客户端与每个后端之间)
- 数据库主节点(位于每个后端与每次读取操作之间)
- 认证服务(位于每个用户与每个授权操作之间)
无需测量的检测:仅凭图拓扑即可识别高介数中心性节点。你不需要流量数据,只需要架构图。一个位于许多其他节点对之间的节点在结构上是关键的。
运营后果:高介数中心性节点值得在以下方面获得不成比例的投资:(1) 容量余量,(2) 冗余性,(3) 可观测性,以及 (4) 事件响应手册。
最小割断开的是最小的切片
用通俗语言解释最小割定理
图中两个节点之间的最小割 = 为断开它们连接必须移除的最少边(或节点)数量。
操作性解读:最小割限制了最坏情况下的爆炸半径。如果 'clients' 与 'database' 之间的最小割为 1 条边(即单个代理),那么失去这条边就会使所有客户端与数据库断开连接。如果最小割为 5,则需要同时失去 5 个组件才能完全断开连接;虽然这是坏运气,但影响范围是有界的。
针对爆炸半径的设计:在每个重要边界处增加最小割。使用多个代理;多个缓存节点;数据中心之间多条网络路径。每增加一项,最小割值增加 1。
图论中的舱壁模式:将资源划分为彼此不共享最小割的独立子图。由于边不存在,一个子图内的故障无法传播到其他子图。
直径决定故障传播距离
图直径 = 任意两个节点之间最短路径中的最长者。
故障传播:当节点故障且重试流量回流时,它们会触及上游节点,直到距离达到直径为止。一个直径为 3 的系统(客户端 -> 代理 -> 后端 -> 数据库)意味着数据库故障会在重试风暴中影响 3 层上游。
影响:更短的直径 = 更快的故障遏制,但也意味着更高的节点集中度。每种设计都有其权衡。
为真实架构计算最小割
一个架构:1 个 DNS,1 个 CDN,3 个反向代理,12 个后端副本,1 个数据库主节点。
基于图指标的故障模式审计
综合
你现在可以识别高介数节点,计算每个边界的最小割,并通过直径估算故障传播距离。
应用以上三点。
一个系统:50 个客户端点 -> 1 个 DNS -> 2 个 CDN 节点 -> 4 个反向代理 -> 16 个后端副本 -> { 数据库集群(1 个主节点 + 2 个备节点),Redis 集群(5 个节点),3 个外部 API }。
配套笔记
配套笔记
本“几何学”课程通过图指标(介数中心性、最小割、直径)重新诠释了故障模式与爆炸半径主课程的内容。
最后一份配套笔记 geometry_of_observability_and_capacity 探讨了 CDN PoP 覆盖区域的 Voronoi 单元、延迟三角形的光速下限,以及在代理层重新审视排队曲线。
干得好。