标签:
当web服务器的垂直扩展变得话费很高或困难的时候,我们需要考虑服务器的水平扩展,即负载均衡技术。负载均衡有很多技术,这里我们来一一介绍。
1.HTTP重定向
我们可以在代码层面实现,通过设定访问特定页面如index.php,在php代码中设置header的location值,返回重定向指令。这实际上是web应用程序自己来实现。
2.DNS负载均衡
DNS负责域名和IP地址之间的映射。DNS服务器可以作为调度器(DNS的常见策略是RR Round Robin方式)。
尽管基于HTTP重定向的负载均衡系统受到主站点性能的制约,但是不可否认这种方案中的调度策略具有很好的灵活性,你完全可以通过Web应用程序实现任何你能想到的调度策略。
相比之下,为DNS服务器开发自定义的调度策略就不那么容易了,但是,类似bind这样的DNS服务器软件提供了丰富的调度策略供你选择。DNS服务器充当了一个粗放型的请求调度器。
3.反向代理负载均衡
它工作在HTTP层面,也就是TCP七层结构中的应用层,所以基于反向代理的负载均衡也称为七层负载均衡。
这种方案负载均衡服务器是有瓶颈效应的,这种效应随着后端服务器内容处理时间的减少而逐渐明显,这不难解释,反向代理服务器进行转发操作本身是需要一定开销的,比如创建线程,与后端服务器建立TCP连接,接受后端服务器返回的处理结果,分析http头信息,用户空间和内核空间的频繁切换等,通常这部分时间并不长,但是当后端服务器处理请求的时间非常短时,转发的开销就显得尤为突出。
4.IP层负载均衡LVS-NAT
我们需要在HTTP层面以下实现负载均衡,这些负载均衡调度器的工作必须由linux内核来完成,因为我们希望网络数据包在从内核缓冲区进入进程用户地址空间之前,尽早地被转发到其他实际服务器上。而且正因为可以将调度器工作在应用层之下,这些负载均衡系统可以支持更多的网络服务协议,比如ftp,smtp,dns,以及流媒体和VoIP等应用。
DNAT: 反向NAT,将实际服务器放置在内部网络,而作为网关的NAT服务器将来自用户端的数据包转发给内部网络的实际服务器(需要修改的是数据包的目标地址和端口)。比较著名的例子是LVS。NAT调度器的吞吐率很高是因为其在内核中进行请求转发的较低开销。
但是NAT服务器的带宽却成为了瓶颈。幸运的是,LVS提供了另一种负载均衡的方式,那就是直接路由。
5.直接路由LVS-DR
不同于NAT机制,直接路由的负载均衡调度器工作在数据链路层上,简单地说,它通过修改数据包的目标mac地址,将数据包转发到实际服务器上,并且重要的是,实际服务器的响应数据包将直接发送给客户端,不经过调度器。适用于视频网站(响应的数据包远远超过请求的数据包)。对于LVS-DR,一旦调度器失效,你可以马上将LVS-DR切换到DNS-RR模式
6. IP隧道
LVS-TUN与LVS-DR不同的是,实际服务器可以和调度器不在同一个wan网段。
标签:
原文地址:http://www.cnblogs.com/softhyb/p/5302828.html