不同层次中负载均衡的实现:

DNS负载均衡:

  DNS负责提供域名解析服务,当访问某个站点时,实际上首先需要通过该站点域名的DNS服务器来获取域名指向的IP地址,在这一过程中,DNS服务器完成了域名到IP地址的映射,同样,这样映射也可以是一对多的,这时候,DNS服务器便充当了负载均衡调度器,将用户的请求分散到多台服务器上。例如我们使用dig www.baidu.com命令来看下”baidu”的DNS设置。

可以看出,百度有三个a记录。这种技术的优点是实现简单,易于实现,成本低,适合大多数TCP/IP应用,DNS服务器可以从所有可用的a记录中找到最近的服务器。然而,它的缺点也非常明显。首先,这个方案并不是真正的负载平衡。DNS服务器将HTTP请求平均分配到后台web服务器(或根据地理位置),而不考虑每个web服务器的当前负载;如果后台web服务器的配置和处理能力不同,最慢的web服务器将成为系统的瓶颈,处理能力强的服务器无法充分发挥其作用;其次,没有考虑容错。如果后台的web服务器出现故障,DNS服务器仍会将DNS请求分配给故障服务器,从而导致对客户端的响应失败。最后一点是致命的,这可能会导致相当多的客户无法享受web服务,并且由于DNS缓存的原因,其后果将持续很长时间(通常DNS的刷新周期约为24小时)。因此,在国外最新的建设中心网站方案中,很少采用这种方案。

链路层(OSI 第二层)负载均衡

  在通信协议的数据链路层修改mac地址,进行负载均衡。数据分发时,不修改ip地址(因为还看不到ip地址),只修改目标mac地址,并且配置所有后端服务器虚拟ip和负载均衡器ip地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的。实际处理服务器ip和数据请求目的ip一致,不需要经过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。也称为直接路由模式(DR模式)。如下图:性能很好,但是配置复杂,目前应用比较广泛。

传输层(OSI 第四层)负载均衡:

  传输层是 OSI 模型的第四层,包括 TCP 和 UDP协议。流行的传输层负载均衡器有 HAProxy(这个也用于应用层负载均衡)和 IPVS。主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。

应用层(OSI 第七层)负载均衡:

  应用层是 OSI 模型的第七层。它包括 HTTP、HTTPS 和 WebSockets。一款非常流行又久经考验的应用层负载均衡器就是 Nginx[恩静埃克斯 = Engine X]。所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

以普通TCP为例,如果负载平衡设备想要根据实际应用层内容选择服务器,只有在最终服务器和客户端建立连接(三次握手)之后,我们才能看到客户端发送的实际应用层内容的消息,然后根据消息中的特定字段和负载平衡设备设置的服务器选择模式确定最终选择的内部服务器。在这种情况下,负载平衡设备更类似于代理服务器。负载平衡和前端客户端和后端服务器分别建立TCP连接.因此,从这一技术原理出发,七层负载均衡显然需要更高的负载平衡设备,并且处理七层的能力必然低于四层部署模式。那么,为什么还需要七层负载平衡呢?

七层负载平衡的好处是使整个网络更加”智能化”,例如上面列出的负载平衡好处,其中大多数基于七层负载平衡。例如,访问网站的用户流量可以以七层方式将图片类请求转发到特定的图片服务器,并且可以使用缓存技术;对文本类的请求可以转发到特定的文本服务器,压缩技术也可以使用。当然,这只是七层应用程序的一小部分.在技术原理上,可以任意修改客户端的请求和服务器的响应,大大提高了应用系统在网络层的灵活性。

另一个经常提到的特性是安全。网络中最常见的SYNFlood攻击,即黑客控制许多源客户端,使用虚假IP地址向同一目标发送SYN攻击。通常,这种攻击会发送大量SYN消息,耗尽服务器上的相关资源,以达到DenialofService(DoS)的目的。从技术原理上也可以看出,这些四层模式的SYN攻击将被转发到后端服务器,而在七层模式下,这些SYN攻击自然会在负载平衡设备上停止,不会影响后台服务器的正常运行。此外,负载平衡设备还可以在七层级别设置各种策略来过滤特定消息,例如SQLInjection和应用程序级别上的其他特定攻击手段,并从应用程序级别进一步提高系统的总体安全性。

目前,七层的负载均衡主要集中在广泛使用的HTTP协议上,其应用范围主要是基于B/S的大量网站或内部信息平台等系统,四层负载均衡对应于其他的tcp应用,如基于C≤S的erp。