From c2278876c796ce96b11880e372687cbfdeddd458 Mon Sep 17 00:00:00 2001 From: isno Date: Tue, 31 Oct 2023 11:05:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=9F=E8=BD=BD=E5=9D=87=E8=A1=A1=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/balancer-ha-2.svg | 1 + balance/balance4-ha.md | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 assets/balancer-ha-2.svg diff --git a/assets/balancer-ha-2.svg b/assets/balancer-ha-2.svg new file mode 100644 index 00000000..67cfd02f --- /dev/null +++ b/assets/balancer-ha-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/balance/balance4-ha.md b/balance/balance4-ha.md index a61f3c97..6928d58a 100644 --- a/balance/balance4-ha.md +++ b/balance/balance4-ha.md @@ -11,12 +11,18 @@ 主备方式的方案在现今的分布式系统中仍然有大量应用,但这种方式存在明显的缺陷。主备方式平稳状态下 50% 的容量是空闲的,备用服务器一直空转,**资源利用率不足**。其次,现代分布式系统设计**一直追求更高的容错性**。例如,理想情况下一个系统有多个实例同时挂掉仍能继续运行,而主备实例同时挂掉时,服务就彻底挂了。 -接下来我们再看**基于集群的一致性哈希容错和可扩展设计方案**。 +接下来我们再看**基于集群的一致性哈希容错和可扩展设计方案**。它的工作原理如图所示。 -我们可以看到以上的设计如何避免 HA pair 的不足: +
+ +

图4-4 负载均衡高可用设计

+
-- 边缘路由器和负载均衡器实例可以按需添加。每一层都用到了 ECMP,当新实例加入的时候,ECMP 能最大程度地减少受影响的 flow 数量 -- 在预留足够的突发量(burst margin)和容错的前提下,系统的资源利用率想达到多高就可以到多高 +- 多个边缘路由器以相同的 BGP 权重通告所有 Anycast VIP,通过 ECMP(Equal-cost, Multi-path routing)保证每个 flow 的所有包都会到达同一个边缘路由器。 +- 多个四层负载均起以相同的 BGP 权重向所有的边缘路由器通告所有的 VIP 继续使用 ECMP 的方式为相同 flow 的包选择相同的四层负载均衡器。 +- 每个四层负载均衡器实例会做部分连接跟踪(connection tracking)工作,然后使用一致性哈希为每个 flow 选择 一个后端。通过 GRE 封装将包从负载均衡器发送到后端。 +- 然后使用 DSR 将应答包从后端直接发送到边缘路由器,最后到客户端。 +所有现代四层负载均衡系统都在朝着这种设计演进,其中最有名的两个分别是来自 Google 的 Maglev 和来自 Amazon 的 Network Load Balancer 。我们可以看到以上的设计如何避免主备方式的不足:边缘路由器和负载均衡器实例可以按需添加。因为每一层都用到了 ECMP,当新实例加入的时候,能最大程度地减少受影响的 flow 数量;在预留足够的突发量和容错的前提下,系统的资源利用率想达到多高就可以到多高。 -所有现代 L4 负载均衡系统都在朝着这种设计(或其变种)演进。其中最有名的两个分别是来自 Google 的 Maglev 和来自 Amazon 的 Network Load Balancer 。 \ No newline at end of file +, \ No newline at end of file