每个 PoP 拥有平面中的一个单元
Voronoi 镶嵌
在平面上放置 N 个点(PoP:接入点)。绘制区域边界,使得平面上的每一点都分配给最近的 PoP。结果是一个 Voronoi 图:平面被划分为 N 个单元,每个 PoP 对应一个单元,每个单元包含所有距离其 PoP 比距离其他任何 PoP 更近的点。
CDN 几何结构:每个用户的请求路由到最近的 PoP。每个 PoP 服务于地理平面上的一个单元。单元边界是相邻 PoP 之间连线的垂直平分线。
几何解读:
- 添加一个 PoP 会缩小其邻居的单元(& 创建一个新单元)
- 移除一个 PoP 会迫使它的单元重新分配给邻居(邻居处出现容量激增)
- 位于单元边界附近的用户可能会随着负载均衡的变化而在不同的 PoP 之间切换
- 一个 PoP 的故障会在故障期间扩大所有邻居的有效单元
运营后果:当一个 PoP 故障时,其负载不会消失;它会迁移到邻近的 PoP。如果邻居仅按正常单元规模配置,激增的负载会接着导致它们故障(级联 PoP 故障)。成熟的 CDN 提供商在配置每个 PoP 时都会考虑邻居故障时的激增情况。
无法规避的三角不等式
物理设定下限
光在真空中的传播速度约为 300,000 公里/秒。在光纤中,由于折射率的影响,速度约为 200,000 公里/秒。这意味着:
- ~1,000 公里光纤 = ~5 毫秒单程 = ~10 毫秒往返
- 美国东西海岸(~5,000 公里)= ~50 毫秒往返时间(RTT)最低值
- 美国到欧洲(~8,000 公里)= ~80 毫秒往返时间(RTT)最低值
- 对跖点(地球另一端)= ~200 毫秒往返时间(RTT)最低值
这是一个下限。 实际往返时间(RTT)总是更大(路由器跳转、交换、排队、拥塞)。没有任何应用程序能比物理允许的速度更快。
三角不等式
对于三个节点 A、B、C,三角不等式指出 d(A,C) <= d(A,B) + d(B,C):直接路径比(或等于)任何间接路径更短。
网络解读:如果你的服务将 A -> B -> C 路由而非直接 A -> C,延迟至少是两段延迟之和。通常由于 B 处的处理,延迟会更高。
架构解读:每一次间接层(代理、负载均衡器、CDN 跳转)都会为用户感知到的延迟增加至少一个往返行程。CDN 的优势在于缩短了用户侧的行程(边缘节点比源站更靠近用户),尽管总跳数增加了。
多区域陷阱:如果服务从区域 A 读取但向区域 B 写入,每次写入都会产生 A 到 B 的延迟。如果 A 和 B 相距 100 毫秒,那么每次写入至少需要 100 毫秒。跨地域数据库每次都要支付这个延迟底线。
支付底线成本
一项服务运行在两个区域:美东(us-east-1)和欧盟西部(eu-west-1)。这两个区域相距约 5,500 公里。该服务的主数据库位于美东。欧盟用户的请求由欧盟西部的后端处理,但每次写入都需要回调美东的主数据库。
地理容量设计
综合
你现在可以将 Voronoi 单元视为 PoP 的集水区,计算光速延迟下限,并在代理层应用排队曲线。
应用以上三点。
一个团队计划为某服务部署 CDN 覆盖,用户分布在三个大洲:北美(60% 的用户)、欧洲(30%)和亚洲(10%)。他们的预算支持部署 6 个 PoP(接入点)。每个 PoP 可以在 70% 的利用率下稳定服务一个单元,而不会触及排队曲线的拐点。
结束配套课程
结束配套课程
你已完成全部五门“几何之(geometry-of-)”配套课程:
- 代理与源站(Proxies & Origins):有向图、跳数(hop count)、扇入 / 扇出(fan-in / fan-out)、间接寻址(indirection)
- 无状态水平扩展(Stateless Horizontal Scaling):将利特尔法则(Little's Law)视为面积、排队曲线及其拐点(knee)
- 入口与出口分离(Ingress & Egress Separation):二部图结构、割点消除、分区容错性
- 故障模式与爆炸半径(Failure Modes & Blast Radius):介数中心性(betweenness centrality)、最小割(min-cut)、直径(diameter)
- 可观测性与容量(Observability & Capacity)(本课):Voronoi PoP 单元、延迟三角形下限、地理容量设计
贯穿主线:分布式系统具有几何结构。每一个架构都是一张图。每一个延迟下限都是一个三角不等式。每一个容量决策都是一条曲线及其拐点。一旦你看到了这种几何结构,运维决策便随之自然推导而出。
结合五门主课程(cs_distsys_*),你已建立起关于 Web 级分布式系统的可用心智模型,以及用于推理该系统的图论方法论。
干得好。