集群的可扩展性及其分布式体系结构之十
2008-12-01 11:03:05 来源:WEB开发网1、应用级代理
应用级代理广泛的应用于HTTP代理,HTTP缓存等领域,扮演着当今重要的网络服务角色。
一般的应用层代理都采用应用层连接粘合代理(split-connection),代理服务器位于客户端和被访问的服务站点之间,代理服务器透明的将客户请求和服务器响应进行双向转换,以协助双方完成通信的全过程。从HTTP缓存服务器(众所周知的Squid)到安全防火墙,代理服务器始终保持了对现有网络服务协议的兼容性(主要是HTTP等)以及对现有应用框架的集成性。
当用户提交请求,代理将请求转发给服务器,对于服务器而言,代理充当了客户端的角色;当服务器响应请求,代理收到后将数据返回客户端,对于客户端而言,充当服务端的角色。
但是,连接粘合代理存在着几大致命的问题:首先,代理服务器的性能始终是大规模通信的瓶颈;其次,由于代理服务器对任何方向上的数据都要进行转换,大大增加了通信延迟;最后,代理本质上对端到端的传输协议进行了修改,难免会存在传输协议的兼容性问题。
因此,在集群应用中,特别是大规模负载平衡集群系统中很难看到应用级代理的身影。
图一:应用层代理原理示意图
当客户端向服务器发起请求的时候,连接被重定向到代理服务器的指定端口上(例如IE浏览器中设定的代理一样);代理接收到这一连接请求以后,根据请求的目标地址和端口,向被访问的服务器发出另一个连接请求,并将客户端发来的请求转发到目标服务器上;随后,代理服务器强制在两个连接上进行互相转发请求数据和应答数据,成为客户端和服务器之间必经之路。因此,代理实现客户端对服务器的透明访问。本质上,代理将客户端的请求进行适当的修改,重新通过另一个连接发送到服务器端,反之依然。这样子的缺点是显然的:数据的双向拷贝需要经由核心的TCP/IP协议栈到用户空间,修改后再由用户空间到TCP/IP层进行处理转发,频繁的上下文交换导致代理的效率低下。而代理服务器也不得不维护至少双倍于请求数量的连接,这对于代理服务器的内存和CPU调度都有极高的要求。
更多精彩
赞助商链接