每个 PoP 都拥有平面的一部分
Voronoi 纹状化
在平面上放置 N 个点(PoPs:存在点)。在平面上绘制区域边界,使得每个点都分配给最近的 PoP。结果是 Voronoi 图:平面被分成 N 个单元,每个单元属于一个 PoP,包含距离其 PoP 更近的所有点。
CDN 几何:每个用户的请求都路由到最近的 PoP。每个 PoP 服务地理平面的一个单元。单元边界是邻近 PoP 之间线的垂直中点。
几何阅读:
- 添加一个 PoP 会缩小其邻居的单元(& 创建一个新的单元)
- 删除一个 PoP 会迫使其单元重新分配给邻居(容量洪峰在邻居处)
- 在单元边界附近的用户可能会随着负载平衡的变化而切换 PoP
- 一個 PoP 失败会使得每个邻居单元的实际大小变大
操作后果:当一个 PoP 失败时,它的负载不会消失;它会迁移到邻近的 PoP。如果邻近 PoP 只是为了它们的正常单元大小,那么洪峰会打破它们下一个(连锁 PoP 失败)。成熟的 CDN 提供商会为邻近故障预留空间。
您无法逃脱的不等式
物理设置了地板
光在真空中以约 300,000 公里/s传播。在纤维中约 200,000 公里/s,由于折射率。所以:
- 约 1,000 公里纤维 = 约 5 毫秒单向 = 约 10 毫秒往返
- 从美国沿岸到对岸 (~5,000 km) = ~50 ms 最小RTT
- 从美国到欧洲 (~8,000 km) = ~80 ms 最小RTT
- 对蹭点 (半周游) = ~200 ms 最小RTT
这只是一个底线。 实际的RTT始终更大 (路由跳转、交换、排队、拥塞)。没有应用程序可以超越物理限制。
三角不等式
对于三个节点A、B、C,三角不等式说 d(A,C) <= d(A,B) + d(B,C): 直接路径总是比(等于)任何间接路径短。
网络阅读: 如果您的服务路由A -> B -> C而不是A -> C直接路由,延迟将至少等于两条腿延迟的总和。通常是更多的,是由于在B的处理。
架构阅读: 每个间接性 (代理、负载平衡器、CDN跳转) 对用户的延迟至少增加一个回合。CDN的好处来自于使用户的腿更短 (PoP更接近原点),即使总跳数增加。
跨区域陷阱: 一个服务从区域A读取但将数据写入区域B,每次写入都会产生A到B的延迟。如果A & B相隔100 ms,每次写入至少需要>= 100 ms。拉伸数据库每次都支付这个底线。
支付底线
服务在两个区域运行:美国东部 (us-east-1) & 欧洲西部 (eu-west-1)。这两个区域大约相隔5500公里。服务在美国东部的主数据库。欧洲用户的请求由欧洲西部后端处理,但每次写入都需要回到美国东部主数据库。
地理容量设计
合成
您现在可以将Voronoi细胞视为PoP流量捕获、计算光速延迟底线和在代理层应用排队曲线。
应用所有三项。
一支团队为一个服务规划CDN覆盖范围,该服务的用户分布在三个大洲:北美洲(60%的用户)、欧洲(30%)和亚洲(10%)。他们有预算为6个PoP。每个PoP在70%利用率时可以稳定地服务一个细胞,而不超过排队曲线的弯肱。
关闭伙伴课程
关闭伙伴课程
您已完成所有五个geometry-of-*伙伴课程:
- 代理与源:有向图、跳数、fan-in / fan-out、间接性
- 无状态水平扩展:Little's Law作为面积、排队曲线及其弯肱
- 入口与出口分离:双部件结构、切点消除、分区容差
- 故障模式与爆炸半径:betweenness中心性、min-cut、直径
- 可观察性与容量(本课程):Voronoi PoP细胞、延迟三角底线、地理空间容量设计
主线:分布式系统具有几何结构。每个架构都是一个图。每个延迟底线都是一个三角不等式。每个容量决策都是一个曲线和一个弯肱。一旦看到几何,就会从中得出操作决策。
与五个主要课程(cs_distsys_*)结合,您将拥有一种关于Web规模分布式系统的工作_mental_model以及图论纪律来推理它。
好工。