入站与出站作为不同的集合
网络架构中的二分图
二分图将节点划分为两个集合,边仅允许存在于集合之间(绝不在同一集合内部)。
网络边界具有天然的二分结构:
- 入口侧:外部客户端位于一侧,内部服务位于另一侧。边:进入的外部请求和发出的内部响应。
- 出口侧(Egress side):一侧是内部服务,另一侧是外部目的地。边表示:内部服务发起的出站调用,以及返回的外部响应。
不对称性:
- 入口(Ingress):源集合是无界的(互联网上的任何人)。目标集合很小(少数几个服务)。流量随用户数量扩展。
- 出口(Egress):源集合很小(少数几个内部服务)。目标集合是有界的(少数几个已知的合作伙伴)。流量随内部活动扩展。
单节点设计通过一个节点将两个二分图部分合并。该节点既有来自外部的扇入(入口),也有来自内部的扇入(出口的反向方向)。该节点的负载 = 两侧负载之和。
分离式设计在独立的节点上保留两个二分图部分。每个节点处理一个角色,并采用其相应的扩展轴。
分裂之前:无处不在的割点
单盒:一个顶点承载一切
在拆分之前,每个外部/内部对之间都只有一个代理框。用图论术语来说,它是一个高序割点:移除该节点会导致所有客户端与所有后端断开连接,并且所有内部服务与所有外部合作伙伴也断开连接。
该节点的连通度为 1。任何干扰该节点的因素(进程崩溃、网络故障、OOM 终止)都会断开所有依赖路径。
拆分后:割点被两个较轻的节点取代
拆分为入站(ingress)和出站(egress)后,原本的一个图节点变成了两个。现在每个节点仅位于一个二分图半区:
- 入站节点:是“外部客户端到内部服务”这一二分图半区的割点
- 出站节点:是“内部服务到合作伙伴”这一二分图半区的割点
发夹回路(hairpin loop)在几何上消失了:在单框图中,内部服务若要通过公共地址访问面向外部的服务,需要两次遍历同一个顶点(先以出站角色出去,再以入站角色进来)。在拆分后的图中,遍历过程会经过两个不同的顶点。
每侧的连通度仍保持为 1,但这两个割点可以独立替换。增加第二个入站代理可将入站侧的连通度提升至 2,而无需改变出站侧。
每侧的复制
生产集群通常运行 2 个或更多入站代理(高可用)以及 2 个或更多出站代理(高可用)。每一侧独立地达到 2 连通性。每侧的容量可根据需求进行水平扩展。
网络分区容错性
综合应用
你现在可以将网络架构视为二分图,识别割点,并跟踪每一侧的连通性。
将此应用于网络分区。
网络分区是一种图割:跨越分区的边失效;两侧继续运行但无法相互访问。
一个地理分布式系统拥有两个数据中心,通过单一的数据中心间链路连接。入站流量通过 DC1 进入;出站流量通过 DC1 流向外部合作伙伴;部分内部服务位于 DC2,并回调 DC1 以执行有状态操作。
配套笔记
配套笔记
本几何学课程将入口与出口分离主课程重新表述为二分图分析。
下一个配套课程 geometry_of_failure_modes_and_blast_radius 将推导介数中心性(识别瓶颈节点)和最小割(界定爆炸半径)。
干得好。