负载均衡整体架构
负载均衡是现代大型系统架构中不可或缺的组成部分,其设计思路直接影响系统的性能、可靠性和可扩展性。在实际应用中,负载均衡通常采用多级架构设计,典型的完整架构包含四个级别的负载均衡层次。
第一级负载均衡通常在客户端(App/Browser)和DNS层面实现,主要解决地理位置和机房级别的流量分发问题。第二级负载均衡由F5或LVS等专业负载均衡设备实现,通常配合Keepalived实现高可用。第三级负载均衡则由Nginx集群承担,处理HTTP层面的请求分发。第四级负载均衡则在服务网关层和服务注册发现层实现,直接面向微服务架构中的具体服务实例。
这种多级级联的负载均衡架构设计看似复杂,实际上是基于性能需求和维护复杂度的权衡结果。多级级联确实会加长处理路径,但在实际应用中,这种影响通常是可接受的,因为每一级负载均衡都承担了不同的职责,共同构成了一个完整的负载均衡解决方案。
在实际应用中,并非所有业务都需要采用完整的四级负载均衡架构。对于规模较小或性能要求不高的业务,可以适当简化架构。例如,可以去掉F5/LVS这一级,直接使用Nginx集群作为第一级负载均衡;或者在更简单的场景下,甚至可以进一步去掉Nginx,只保留服务网关和服务注册发现机制。架构的选择应当基于具体业务需求,遵循简单性原则,避免过度设计。
负载均衡技术剖析
DNS负载均衡
DNS是最基础的负载均衡技术,主要应用于地理位置和机房级别的负载均衡。其优点是采用标准协议,实现简单,几乎所有系统都支持。然而,DNS负载均衡也存在明显的局限性:能力有限且不够灵活,无法根据服务器负载状态动态调整;容易受到DNS劫持的安全威胁;DNS缓存机制可能导致负载均衡策略更新不及时,影响效果。
HTTP-DNS技术
为了弥补传统DNS的不足,HTTP-DNS技术应运而生,主要应用于App和客户端场景。HTTP-DNS通过HTTP协议获取可用服务器列表,结合智能调度和健康监控机制,实现更灵活的负载均衡。其优点是可以根据业务和团队技术灵活定制,但缺点是采用非标准协议,不够通用,不太适合Web业务。
在HTTP-DNS架构中,智能调度模块可以独立存在,也可以嵌入到HTTP-DNS系统中。通常情况下,智能调度系统会独立成为运维系统的一部分,因为它不仅服务于HTTP-DNS,还有其他重要作用。在实际应用中,系统通常在正常情况下走传统DNS解析,只在异常情况下才启用HTTP-DNS机制。客户端SDK会缓存HTTP-DNS的解析结果,减少不必要的请求。HTTP-DNS不太适合Web业务的主要原因是Web浏览器环境限制了自定义DNS解析的能力。
#
GSLB全局负载均衡
GSLB(Global Server Load Balancing)是全局负载均衡技术,主要用于在多个区域拥有服务器的站点,使全球用户通过单一IP地址或域名就能访问到离自己最近的服务器,获得最快的访问速度。GSLB特别适合超大规模业务,尤其是多地甚至全球部署的业务,如Google、Facebook等。GSLB功能强大,可以实现就近访问、容灾切换和流量调节,但实现相对复杂。
GSLB主要有三种实现方式:基于DNS的GSLB、基于HTTP redirect的GSLB和基于IP欺骗的GSLB。基于DNS的GSLB实现简单、实施容易、成本低,但可能判断不准确,例如当用户手动指定DNS服务器时。基于HTTP redirect的GSLB能够获取用户真实IP,判断更准确,但仅适用于HTTP业务。基于IP欺骗的GSLB适用于所有类型的业务,但每次请求都必须经过GSLB设备,性能较低,通常与基于HTTP redirect的GSLB结合使用。
F5负载均衡设备
F5是专业的硬件负载均衡设备,配置强大,性能卓越。以某型号为例,配置包括英特尔四核Xeon处理器(共8个超线程逻辑处理器内核)、32GB内存和400GB SSD硬盘。性能方面,每秒可处理100万L7请求或400K L4连接,每秒L4 HTTP请求数可达7M,最大L4并发连接数为24M,L4吞吐量40Gbps,L7吞吐量18Gbps。
较低配置的F5设备也有不俗表现,例如单CPU、8GB基本内存、500GB硬盘、8个千兆端口和4个可选千兆光纤端口的配置,吞吐量可达4Gbps,性能量级约为30万。
LVS(Linux Virtual Server)
LVS是章文嵩博士1998年创建的开源项目,在Linux 2.4版本集成到内核。作为内核级别的负载均衡技术,LVS基本能跑满千兆网卡带宽,性能量级在10万到100万请求之间。
LVS有三种主要工作模式:LVS-NAT、LVS-DR和LVS-TUN。LVS-NAT模式中,LVS绑定VIP,客户端向VIP发起请求连接,LVS经过调度后选取RS(Real Server),将本地端口与RS的端口做映射,然后RS返回数据给LVS,LVS再将数据返回客户端。这种模式适用于反向代理场景,类似于Nginx,外部网络不知道内部服务器的任何信息。
LVS-DR模式中,LVS绑定VIP,客户端向VIP发起请求连接,LVS修改目的MAC地址为某个服务器RS,RS服务器处理后直接返回结果给客户端。这种模式适用于LVS和服务器在同一企业网络的场景。
LVS-TUN模式中,LVS绑定VIP,客户端向VIP发起请求连接,LVS通过隧道技术转发给某个RS服务器,RS服务器处理后直接返回结果给客户端。这种模式适用于LVS和服务器在不同企业网络,企业网络分为多个子网的场景。
负载均衡技术对比
F5、LVS和Nginx是三种常见的负载均衡技术,各有特点。从基本原理看,F5是硬件实现,LVS是Linux内核实现,Nginx是软件实现,性能上硬件优于内核,内核优于应用层。从流量类型看,F5和LVS主要处理L4层流量,而Nginx处理L7层流量,且仅限于HTTP协议。
从成本角度看,F5价格昂贵,LVS成本一般,需要较好CPU的服务器,Nginx则相对便宜。功能方面,F5功能最为强大,包括负载均衡、防火墙、高速缓存等;LVS专注于网络负载均衡;Nginx则主要提供反向代理功能。
性能量级上,F5可达100万到1000万,LVS在10万到100万之间,Nginx在5万到10万之间,而Spring Gateway等应用网关则在2万到3万左右。对于业务量级不大的场景,LVS配合Nginx也可以满足负载均衡要求。
负载均衡架构设计思考
负载均衡架构设计需要根据实际业务需求和性能要求进行权衡。负载均衡架构分级并非越多越好,应当根据业务的实际需求和长远发展进行合理规划。多级级联负载均衡架构确实会增加多次负载均衡处理,但对业务全流程处理性能的影响通常是可控的,各级负载均衡设备都经过优化,处理延迟通常在毫秒级。
HTTP-DNS技术确实可以用来弥补传统DNS的缺点,特别是在移动应用场景中。GSLB功能强大,但实现复杂,一般适合超大规模的业务。对于大多数中小规模业务,LVS配合Nginx的组合通常已经足够满足负载均衡需求。
在实际应用中,可以根据F5的性能指标进行容量规划。例如,一台性能达到100万请求/秒的F5设备,假设每个用户平均每秒产生0.5个请求,那么理论上可以支撑200万并发用户的ToC业务。当然,实际部署时还需考虑峰值流量、冗余设计和其他系统组件的性能限制。

