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等图片格式的内容,由于本身已经进行过压缩处理,压缩效率并不高 。所以,需要负载均衡支持选择性压缩,即可以根据对象的类型进行选择性压缩 。
SSL加速器(SSL Acceleration)
一般情况下,HTTP采用明文的方式在网络上传输,有可能被非法窃听,尤其是用于认证的口令信息等 。为了避免出现这样的安全问题,一般采用SSL协议(即:HTTPS)对HTTP协议进行加密,以保证整个传输过程的安全性 。在SSL通信中,首先采用非对称密钥技术交换认证信息,并交换服务器和浏览器之间用于加密数据的会话密钥,然后利用该密钥对通信过程中的信息进行加密和解密 。
SSL是需要耗费大量CPU资源的一种安全技术 。目前,大多数负载均衡设备均采用SSL加速芯片进行SSL信息的处理 。这种方式比传统的采用服务器的SSL加密方式提供更高的SSL处理性能,从而节省大量的服务器资源,使服务器能够专注于业务请求的处理 。另外,采用集中的SSL处理,还能够简化对证书的管理,减少日常管理的工作量 。
文章插图
图例 5 SSL加速
SSL的处理流程如下:
1、客户端发起HTTPS连接请求,协商传输的加密算法,确认双方身份,并交换会话密钥 。
2、负载均衡收到客户端加密的HTTPS请求后,对请求的信息进行解密,然后通过HTTP的方式发送给后端的服务器 。
3、服务器将请求的处理结果返回给负载均衡设备 。
4、负载均衡设备利用会话密钥对请求的结果进行加密,然后将结果返回给客户端 。
5、客户端采用会话密钥对返回结果进行解密,并显示在浏览器上 。
在负载均衡设备中实现SSL加速功能,只需要在负载均衡设备上导入SSL证书和密钥即可 。当客户端发起对虚拟服务器的HTTPS请求时,负载均衡设备自动和客户端进行SSL协议的协商并交换会话密钥 。客户端发送的请求以及负载均衡返回的响应均采用会话密钥进行加密,而负载均衡设备与后端服务器之间则采用HTTP的方式进行请求的发送和处理 。
在实际环境中应用负载均衡产品需要注意的问题
负载均衡设备提供的这些HTTP优化和加速功能,能够大大的降低客户端的响应时间,降低带宽利用率,并且能降低服务器端负载情况,节省服务器资源 。但是,目前主流的负载均衡产品在同时开启多个HTTP优化和加速功能时,设备的处理性能会大大降低 。尽管各个厂家均宣称自己的设备有较高的性能处理指标,并通过第三方的测评机构公布一些产品性能测试数据,但是,这些数据一般都是在一些特别设置的实验环境下测试出来的,只能作为不同厂商产品之间性能对比的依据,而不能作为用户实际应用环境的选型依据 。
此外,大多数厂商都采用基本硬件平台上加装功能卡或购买许可证的方式提供这些HTTP的优化和加速功能 。如果用户想在应用加速的整体解决方案中采用这些功能,需要花费更多的采购成本 。对于用户来说,这些高级特性和功能如同水中之月,可望而不可及 。因此,在选购负载均衡产品的时候,一定要了解自己的应用究竟需要采用哪些功能特性,而实现这些特性又需要哪些额外的费用 。
推荐阅读
- Go 语言使用 TCP_NODELAY 控制发包流量
- IP、UDP和TCP的关系
- linux抓包工具tcpdup,对抓包结果作数据分析
- 如何用 Python 实现 TCP 的连接与通信?
- 4000 字详解TCP超时与重传,看完没收获算我输
- Win10:如何快速开启/关闭TCP/IP半开连接数限制
- 一个TCP连接可以发多少个HTTP请求?
- DNS何时使用TCP协议,何时使用UDP协议?
- 检测TCP/UDP端口的连通性
- Mysql报too many connections详解