4.3 负载均衡拓扑类型 前面介绍了负载均衡高层概览、四层负载均衡与七层负载均衡的区别,接下来介绍它们的分布式部署拓扑,建立对负载均衡的全局性认识。 下面介绍的每种拓扑都适用于四层和七层负载均衡器。 第一种类型为中间代理型拓扑,如图 4-5 所示。这应该是大家最熟悉负载均衡部署模式:负载均衡器位于客户端和后端服务器之间,将客户端的请求转发至多个后端服务器。明显具有中间代理拓扑特征的负载均衡产品有: 硬件设备:Cisco、Juniper、F5 Networks 等公司的产品。 纯软件方案:Nginx、HAProxy、Envoy、Traefik 等。
前面介绍了负载均衡高层概览、四层负载均衡与七层负载均衡的区别,接下来介绍它们的分布式部署拓扑,建立对负载均衡的全局性认识。
:::tip 注意
下面介绍的每种拓扑都适用于四层和七层负载均衡器。
:::
第一种类型为中间代理型拓扑,如图 4-5 所示。这应该是大家最熟悉负载均衡部署模式:负载均衡器位于客户端和后端服务器之间,将客户端的请求转发至多个后端服务器。明显具有中间代理拓扑特征的负载均衡产品有:
总结中间代理型拓扑的优缺点:
:::center
图 4-5 中间代理型负载均衡拓扑
:::
第二种边缘代理型拓扑实际上是中间代理型拓扑变种。
一个典型的边缘代理示例是本书第二章 2.7 节中提到的动态请求“加速”技术。Akamai 在全球多个数据中心部署了多个具有代理功能的边缘节点,用户的请求被路由至距离最近的边缘节点。边缘节点收到请求后,执行安全检查(如 DDoS 防护),根据缓存策略决定是否返回缓存内容(CDN 技术),或将请求继续转发至源服务器(请求加速技术)。
总结边缘代理型拓扑的优缺点:
:::center
图 4-6 网络边缘型负载均衡拓扑
:::
为解决中间代理型拓扑模式的单点问题,出现了一些更复杂的解决方案。如将负载均衡器以 SDK 库的形式嵌入客户端内部(图 4-7 所示)。SDK 库就是大家熟知的 Finagle、Eureka、Ribbon 和 Hystrix 等微服务治理方案。
虽然这些库功能各异,但还是能总结出它们的共同优缺点:
:::center
图 4-7 客户端内嵌库实现负载均衡
:::
客户端内嵌库的一个变种是边车代理(sidecar)型拓扑。
近年来边车型代理拓扑非常流行,被称为“服务网格”(service mesh)。边车代理拓扑的核心思路是:将流量导到另一个进程,牺牲一点(延迟)性能,实现客户端内嵌库模式的所有好处,而无任何语言绑定。当下,最流行的网络型边车代理有 Envoy、Linkerd 等,笔者将第八章详细阐述服务网格的技术原理。
:::center
图 4-8 Sidecar 代理实现负载均衡
:::
总体上讲,中间代理型的负载均衡器正在演变成功能更为强大的“网关”,所有请求通过唯一的入口(即网关)进入集群。这种架构中,负载均衡器不仅负责基本的流量分发功能,还需提供额外的“API 网关”功能,如 TLS 卸载、流量限制、身份验证,以及复杂的内容路由等。另一方面,在处理东西向流量(服务间通信)的场景中,边车代理模式将代理部署在服务实例旁边,透明接管服务间通信治理,正逐渐取代其他所有的拓扑类型。