在业务发展的初期,一般使用一台标准化的服务器就能满足业务需要,但随着业务的发展,用户群体的扩大,单台服务器满足不了业务的需求,需要的并发量超过了单台设备的极限,这是需要采用多太服务器进行处理,采用集群技术。

那么如何将流量均衡分布到集群?这就是负载均衡所需要处理的问题。

问: 那什么是负载均衡呢?

答: 我们要使用统一的流量入口来对外提供服务,通过均衡的算法,将用户大量的请求流量均衡地分发到集群中不同的服务器上,这就是负载均衡

使用负载均衡可以给我们带来的几个好处:

(1)提高了系统的整体性能;
(2)提高了系统的扩展性;
(3)提高了系统的可用性;

负载均衡类型广义上大概可以分为 3 类:DNS 方式实现负载均衡、硬件负载均衡、软件负载均衡。

1、DNS 实现负载均衡

DNS 实现负载均衡是最基础简单的方式。
一个域名通过 DNS 解析到多个 IP,每个 IP 对应不同的服务器实例,这样就完成了流量的调度,虽然没有使用常规的负载均衡器,但实现了简单的负载均衡功能。

优点

(1)简单、成本低:负载均衡工作交给DNS服务处理,无须自己开发或维护负载均衡设备。
(2)就近访问,提升访问速度:DNS解析时可以根据请求来源IP,解析成距离用户最近的服务器地址,可以加快访问速度,从而到达改善性能。

缺点

(1)服务器故障切换延迟大,服务器升级不方便。我们知道 DNS 与用户之间是层层的缓存,即便是在故障发生时及时通过 DNS 修改或摘除故障服务器,但中间经过运营商的 DNS 缓存,且缓存很有可能不遵循 TTL 规则,导致 DNS 生效时间变得非常缓慢,有时候一天后还会有些许的请求流量。
(2)流量调度不均衡,粒度太粗。DNS 调度的均衡性,受地区运营商 LocalDNS 返回 IP 列表的策略有关系,有的运营商并不会轮询返回多个不同的 IP 地址。另外,某个运营商 LocalDNS 背后服务了多少用户,这也会构成流量调度不均的重要因素。
(3)流量分配策略太简单,支持的算法太少。DNS 一般只支持 rr 的轮询方式,流量分配策略比较简单,不支持权重、Hash 等调度算法。
(4)DNS 支持的 IP 列表有限制。我们知道 DNS 使用 UDP 报文进行信息传递,每个 UDP 报文大小受链路的 MTU 限制,所以报文中存储的 IP 地址数量也是非常有限的,阿里 DNS 系统针对同一个域名支持配置 10 个不同的 IP 地址。

2、硬件负载均衡

硬件负载均衡是通过专门的硬件设备来实现负载均衡功能,是专用的负载均衡设备。这类设备性能强劲、功能强大,但价格非常昂贵.

优点:

(1)功能强大:全面支持各层级的负载均衡,支持全面的负载均衡算法。
(2)性能强大:性能远超常见的软件负载均衡器。
(3)稳定性高:商用硬件负载均衡,经过了良好的严格测试,经过大规模使用,稳定性高。
(4)安全防护:还具备防火墙、防 DDoS 攻击等安全功能,以及支持 SNAT 功能。

缺点:

(1)价格贵;
(2)扩展性差,无法进行扩展和定制;
(3)调试和维护比较麻烦,需要专业人员;

3、软件负载均衡

软件负载均衡,可以在普通的服务器上运行负载均衡软件,实现负载均衡功能。目前常见的有 Nginx、HAproxy、LVS。其中的区别:

Nginx: 七层负载均衡,支持 HTTP、E-mail 协议,同时也支持 4 层负载均衡;
HAproxy: 支持七层规则的,性能也很不错。OpenStack 默认使用的负载均衡软件就是 HAproxy;
LVS: 运行在内核态,性能是软件负载均衡中最高的,严格来说工作在三层,所以更通用一些,适用各种应用服务。

优点:

(1)易操作:无论是部署还是维护都相对比较简单;
(2)便宜:只需要服务器的成本,软件是免费的;
(3)灵活:4 层和 7 层负载均衡可以根据业务特点进行选择,方便进行扩展和定制功能。

缺点:

(1)性能一般:功能、并发没有硬件负载均衡强大
(2)安全性远不如硬件负载均衡