English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

访客
1 / ?
返回课程列表

入站与出站作为不同的集合

网络架构中的二分图

二分图将节点划分为两个集合,边仅允许存在于集合之间(绝不在同一集合内部)。

网络边界具有天然的二分结构:

- 入口侧:外部客户端位于一侧,内部服务位于另一侧。边:进入的外部请求和发出的内部响应。

- 出口侧(Egress side):一侧是内部服务,另一侧是外部目的地。边表示:内部服务发起的出站调用,以及返回的外部响应。

不对称性:

- 入口(Ingress):源集合是无界的(互联网上的任何人)。目标集合很小(少数几个服务)。流量随用户数量扩展。

- 出口(Egress):源集合很小(少数几个内部服务)。目标集合是有界的(少数几个已知的合作伙伴)。流量随内部活动扩展。

单节点设计通过一个节点将两个二分图部分合并。该节点既有来自外部的扇入(入口),也有来自内部的扇入(出口的反向方向)。该节点的负载 = 两侧负载之和。

分离式设计在独立的节点上保留两个二分图部分。每个节点处理一个角色,并采用其相应的扩展轴。

二分图入口与出口:独立的节点集,独立的割点

为一个小型 SaaS 绘制二分图:5 个外部客户端点(发送传入请求)、3 个内部服务(后端)以及 4 个外部合作伙伴 API(出站调用)。识别哪些边属于入口二分图部分,哪些边属于出口二分图部分。预测如果其中一个内部服务发生故障,图的连通性会发生什么变化。

分裂之前:无处不在的割点

单盒:一个顶点承载一切

在拆分之前,每个外部/内部对之间都只有一个代理框。用图论术语来说,它是一个高序割点:移除该节点会导致所有客户端与所有后端断开连接,并且所有内部服务与所有外部合作伙伴也断开连接。

该节点的连通度为 1。任何干扰该节点的因素(进程崩溃、网络故障、OOM 终止)都会断开所有依赖路径。

拆分后:割点被两个较轻的节点取代

拆分为入站(ingress)和出站(egress)后,原本的一个图节点变成了两个。现在每个节点仅位于一个二分图半区:

- 入站节点:是“外部客户端到内部服务”这一二分图半区的割点

- 出站节点:是“内部服务到合作伙伴”这一二分图半区的割点

发夹回路(hairpin loop)在几何上消失了:在单框图中,内部服务若要通过公共地址访问面向外部的服务,需要两次遍历同一个顶点(先以出站角色出去,再以入站角色进来)。在拆分后的图中,遍历过程会经过两个不同的顶点。

每侧的连通度仍保持为 1,但这两个割点可以独立替换。增加第二个入站代理可将入站侧的连通度提升至 2,而无需改变出站侧。

每侧的复制

生产集群通常运行 2 个或更多入站代理(高可用)以及 2 个或更多出站代理(高可用)。每一侧独立地达到 2 连通性。每侧的容量可根据需求进行水平扩展。

一个团队目前运行一台代理服务器(对于双向流量而言,这是一个单点故障/割点)。他们将其拆分为一个入站代理和一个出站代理,随后又添加了一个第二入站代理(形成高可用对),但出站代理仍保持为单个。请逐步分析每一步中图连通性的变化,并指出在第 3 步之后,哪一侧的二分图半边仍然是 1 连通的(因此仍然是容错能力最低的故障模式)。

网络分区容错性

综合应用

你现在可以将网络架构视为二分图,识别割点,并跟踪每一侧的连通性。

将此应用于网络分区。

网络分区是一种图割:跨越分区的边失效;两侧继续运行但无法相互访问。

一个地理分布式系统拥有两个数据中心,通过单一的数据中心间链路连接。入站流量通过 DC1 进入;出站流量通过 DC1 流向外部合作伙伴;部分内部服务位于 DC2,并回调 DC1 以执行有状态操作。

预测如果数据中心间链路失效会发生什么:(1) 每个数据中心内哪些二分图部分保持连通,(2) 哪些流量流继续 & 哪些停止,& (3) 提出一项架构变更,使系统能够以有限降级而非完全中断的方式容忍此分区。

配套笔记

配套笔记

本几何学课程将入口与出口分离主课程重新表述为二分图分析。

下一个配套课程 geometry_of_failure_modes_and_blast_radius 将推导介数中心性(识别瓶颈节点)和最小割(界定爆炸半径)。

干得好。