1、四层和七层的区别

负载均衡设备也常被称为四到七层交换机,那么四层和七层两者到底区别在哪里?

1.1、技术原理上的区别

所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。四层负载均衡是目标地址和端口的交换。

以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。

所谓七层负载均衡,也称为内容交换,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

以常见的TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。负载均衡设备在这种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。所以从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。那么,为什么还需要七层负载均衡呢?

1.2、应用场景的需求

七层应用负载的好处,是使得整个网络更智能化, 参考这篇文章 利用负载均衡优化和加速HTTP应用,就可以基本上了解这种方式的优势所在。例如访问一个网站的用户流量,可以通过七层的方式,将对图片类的请求转发到特定的图片服务器并可以使用缓存技术;将对文字类的请求可以转发到特定的文字服务器并可以使用压缩技术。当然这只是七层应用的一个小案例,从技术原理上,这种方式可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性。很多在后台,(例如Nginx或者Apache)上部署的功能可以前移到负载均衡设备上,例如客户请求中的Header重写,服务器响应中的关键字过滤或者内容插入等功能。

另外一个常常被提到功能就是安全性。网络中最常见的SYN Flood攻击,即黑客控制众多源客户端,使用虚假IP地址对同一目标发送SYN攻击,通常这种攻击会大量发送SYN报文,耗尽服务器上的相关资源,以达到Denial of Service(DoS)的目的。从技术原理上也可以看出,四层模式下这些SYN攻击都会被转发到后端的服务器上;而七层模式下这些SYN攻击自然在负载均衡设备上就截止,不会影响后台服务器的正常运营。另外负载均衡设备可以在七层层面设定多种策略,过滤特定报文,例如SQL Injection等应用层面的特定攻击手段,从应用层面进一步提高系统整体安全。

现在的7层负载均衡,主要还是着重于应用广泛的HTTP协议,所以其应用范围主要是众多的网站或者内部信息平台等基于B/S开发的系统。 4层负载均衡则对应其他TCP应用,例如基于C/S开发的ERP等系统。

1.3、七层应用需要考虑的问题

  • 是否真的必要,七层应用的确可以提高流量智能化,同时必不可免的带来设备配置复杂,负载均衡压力增高以及故障排查上的复杂性等问题。在设计系统时需要考虑四层七层同时应用的混杂情况。
  • 是否真的可以提高安全性。例如SYN Flood攻击,七层模式的确将这些流量从服务器屏蔽,但负载均衡设备本身要有强大的抗DDoS能力,否则即使服务器正常而作为中枢调度的负载均衡设备故障也会导致整个应用的崩溃。
  • 是否有足够的灵活度。七层应用的优势是可以让整个应用的流量智能化,但是负载均衡设备需要提供完善的七层功能,满足客户根据不同情况的基于应用的调度。最简单的一个考核就是能否取代后台Nginx或者Apache等服务器上的调度功能。能够提供一个七层应用开发接口的负载均衡设备,可以让客户根据需求任意设定功能,才真正有可能提供强大的灵活性和智能性。

2、HTTP协议的优化和加速

2.1、TCP 连接复用(TCP Connection Reuse)

TCP连接复用技术通过将前端多个客户的HTTP请求复用到后端与服务器建立的一个TCP连接上。这种技术能够大大减小服务器的性能负载,减少与服务器之间新建TCP连接所带来的延时,并最大限度的降低客户端对后端服务器的并发连接数请求,减少服务器的资源占用。

一般情况下,客户端在发送HTTP请求之前需要先与服务器进行TCP三次握手,建立TCP连接,然后发送HTTP请求。服务器收到HTTP请求后进行处理,并将处理的结果发送回客户端,然后客户端和服务器互相发送FIN并在收到FIN的ACK确认后关闭连接。在这种方式下,一个简单的HTTP请求需要十几个TCP数据包才能处理完成。

采用TCP连接复用技术后,客户端(如:ClientA)与负载均衡设备之间进行三次握手并发送HTTP请求。负载均衡设备收到请求后,会检测服务器是否存在空闲的长连接,如果不存在,服务器将建立一个新连接。当HTTP请求响应完成后,客户端则与负载均衡设备协商关闭连接,而负载均衡则保持与服务器之间的这个连接。当有其它客户端(如:ClientB)需要发送HTTP请求时,负载均衡设备会直接向与服务器之间保持的这个空闲连接发送HTTP请求,避免了由于新建TCP连接造成的延时和服务器资源耗费。

在HTTP 1.0中,客户端的每一个HTTP请求都必须通过独立的TCP连接进行处理,而在HTTP 1.1中,对这种方式进行了改进。客户端可以在一个TCP连接中发送多个HTTP请求,这种技术叫做HTTP复用(HTTP Multiplexing)。它与TCP连接复用最根本的区别在于,TCP连接复用是将多个客户端的HTTP请求复用到一个服务器端TCP连接上,而HTTP复用则是一个客户端的多个HTTP请求通过一个TCP连接进行处理。前者是负载均衡设备的独特功能;而后者是HTTP 1.1协议所支持的新功能,目前被大多数浏览器所支持。

2.2、内容缓存(RAM Caching)

内容缓存技术将应用服务器中的一些经常被用户访问的热点内容缓存在负载均衡设备的内存中。当客户端访问这些内容时,负载均衡设备截获客户端请求,从缓存中读取客户端需要的内容并将这些内容直接返回给客户端。由于是直接从内存中读取,这种技术能够提高网络用户的访问速度,并大大减轻后端服务器的负载情况。

内容缓存技术采用了HTTP协议中的一些标准缓存处理技术,将本应保存在客户端本地浏览器缓存中的内容共享给其他用户。因此,对于客户端来说,内容缓存技术是完全透明的。最常见的对象包括:gif/jpg图片,静态的css/js/html等文本文件等。

2.3、TCP缓冲机制

TCP缓冲是为了解决后端服务器网速与客户的前端网络速度不匹配而造成的服务器资源浪费的问题。由于服务器与负载均衡设备之间的网络带宽速率高,时延小,通过将服务器端的请求缓冲在负载均衡设备的缓冲区中,防止由于客户端缓慢的网络链路和较高的时延造成服务器端连接阻塞问题(客户端网络慢会导致单个客户端的请求和响应时间增长,客户端一多起来就会导致服务器连接阻塞)。

通过采用TCP缓冲技术,可以提高服务器端响应时间和处理效率,减少由于通信链路问题给服务器造成的连接负担。另外,由负载均衡设备来处理网络阻塞造成的数据包重传,使每个客户端的流量得到最佳的控制。

TCP缓存流程如下:

  1. 负载均衡收到客户端发来的HTTP请求并将其转发给后端的服务器进行处理;
  2. 服务器对请求进行处理后,将响应的内容依次返回负载均衡设备,负载均衡设备收到响应的数据包后,会将数据包依次缓存在缓冲区中,服务器的响应速度将依据负载均衡和服务器之间的链路质量;
  3. 当负载均衡上缓存了第一个响应的数据包后,负载均衡将响应的数据包按次序返回给客户端,此时,响应的速度将依赖于负载均衡与客户端之间的链路质量;
  4. 当响应内容数据包依次传送给客户端并收到客户端的ACK确认请求后,负载均衡将缓冲区资源释放出来为其它TCP连接使用。

TCP缓冲技术是L7应用负载均衡的核心,它将服务器与客户端之间的TCP连接分成两个独立的TCP连接,并分别进行处理,以适应两边不同的网络环境。此外,通过TCP缓冲技术,将客户端的HTTP请求完整的接收下来并进行分析,还可以提供一些高级负载均衡的应用功能,如:URL-Hashing,URL交换(URL-Switching),基于Cookie或会话的连接保持(Cookie/Session Persistence)等等。

2.4、HTTP压缩(HTTP Compression)

HTTP协议在v 1.1中新增了压缩功能,如果客户端浏览器和服务器都支持压缩功能的话,通过客户端和服务器进行协商,对客户端的响应请求进行压缩处理。大幅节省内容传输时所需要的带宽,并加快客户端的响应速度。但是,压缩算法本身需要耗费大量的CPU资源,因此,负载均衡设备通过对HTTP压缩功能进行支持,减轻Web服务器的资源耗费,提高其处理效率。另外,由于负载均衡一般都采用硬件的方式进行压缩,因此,压缩的效率更高。此外,对于一些不支持HTTP压缩功能的老版本的Web服务器,通过启用负载均衡上的压缩功能,可以实现对系统的优化和加速。

在负载均衡上实现HTTP压缩功能的流程如下:

  1. 客户端与负载均衡建立TCP连接后,发送HTTP请求(如Get请求),客户端会将自身浏览器所支持的功能和配置情况发送给负载均衡,如:是否支持压缩、支持的压缩算法、是否支持Keep-alive(连接保持)、连接保持的时间等;
  2. 负载均衡在收到HTTP请求后,会将其中的有关压缩的标记删除,然后将请求转发给服务器进行处理;
  3. 服务器将响应的内容转发给负载均衡;
  4. 负载均衡收到响应的内容后,依照与客户端之间协商的压缩算法对响应的内容进行压缩,然后将压缩后的内容发送回客户端;
  5. 客户端收到响应的内容后,由浏览器对网页内容进行解压缩并进行浏览。

由于HTTP压缩采用的是HTTP v1.1协议中支持的标准压缩算法,因此,目前主流的浏览器(如:Internet Explorer,Firefox,Opera,Netscape等)均默认支持HTTP v1.1中的压缩功能。对于用户来说,无需修改浏览器配置也不需要安装任何插件。采用负载均衡来代替服务器做压缩,能够大幅节省服务器的资源,可以使服务器专注于应用的处理,从而提高业务处理量。另外,即使服务器不支持HTTP压缩,通过负载均衡也能实现压缩功能。

压缩能力的大小取决于被压缩对象的性质。一般来说,HTTP压缩算法对于文本格式的内容有较好的压缩效率;而对于gif等图片格式的内容,由于本身已经进行过压缩处理,压缩效率并不高。所以,需要负载均衡支持选择性压缩,即可以根据对象的类型进行选择性压缩。

2.5、SSL加速(SSL Acceleration)

一般情况下,HTTP采用明文的方式在网络上传输,有可能被非法窃听,尤其是用于认证的口令信息等。为了避免出现这样的安全问题,一般采用SSL协议(即:HTTPS)对HTTP协议进行加密,以保证整个传输过程的安全性。在SSL通信中,首先采用非对称密钥技术交换认证信息,并交换服务器和浏览器之间用于加密数据的会话密钥,然后利用该密钥对通信过程中的信息进行加密和解密。

SSL是需要耗费大量CPU资源的一种安全技术。目前,大多数负载均衡设备均采用SSL加速芯片进行SSL信息的处理。这种方式比传统的采用服务器的SSL加密方式提供更高的SSL处理性能,从而节省大量的服务器资源,使服务器能够专注于业务请求的处理。另外,采用集中的SSL处理,还能够简化对证书的管理,减少日常管理的工作量。

SSL的处理流程如下:

  1. 客户端发起HTTPS连接请求,协商传输的加密算法,确认双方身份,并交换会话密钥。
  2. 负载均衡收到客户端加密的HTTPS请求后,对请求的信息进行解密,然后通过HTTP的方式发送给后端的服务器。
  3. 服务器将请求的处理结果返回给负载均衡设备。
  4. 负载均衡设备利用会话密钥对请求的结果进行加密,然后将结果返回给客户端。
  5. 客户端采用会话密钥对返回结果进行解密,并显示在浏览器上。

在负载均衡设备中实现SSL加速功能,只需要在负载均衡设备上导入SSL证书和密钥即可。当客户端发起对虚拟服务器的HTTPS请求时,负载均衡设备自动和客户端进行SSL协议的协商并交换会话密钥。客户端发送的请求以及负载均衡返回的响应均采用会话密钥进行加密,而负载均衡设备与后端服务器之间则采用HTTP的方式进行请求的发送和处理。