你的位置:首页 > ASP.net教程

[ASP.net教程]web负载均衡


web负载均衡

  在有些时候进行扩展是显而易见的,比如下载服务由于带宽不足而必须进行的扩展,但是,另一些时候,很多人一看到站点性能不尽如人意,就马上实施负载均衡等扩展手段,真的需要这样做吗?当然这个问题也只有他们自己能回答,除了出于高可用性和就近部署的考虑,大多数情况下这种行为都显得有些过早,也许当你阅读了前面的章节后,你的 Web 服务器已经从5 台又变回了1 台,然后你要做的就是回家闭门思过。 那么,是不是一开始就完全不必考虑规模扩展呢?答案完全相反,作为架构师的你,从一开始就要思考未来的扩展计划,并且为扩展而进行架构设计,但是关键在于,你必须能够意识到何时需要实施扩展,并且有足够的数据来证明这种必要性。 值得一提的是,服务器自身硬件的垂直扩展不在我们的讨论之中,这一章我们所谈及的扩展,主要是指水平扩展,我们经常用可扩展性来反映这种扩展能力,所谓可扩展性,实际上是指系统通过扩展规模来提升承载能力的本领,这种本领往往体现在增加物理服务器或者集群节点等方面,可以说,这种本领越强,承载能力可提升的空间就越大。但是,这种本领总是受到或多或少的制约,比如,我们之所以不讨论单机垂直扩展,就是因为单机的扩展能力非常有限,很快就会遇到技术制约,并且随着规模的增大而越来越昂贵,的确,即使最强大的单机也无法满足我们的需要。

常用负载均衡

  HTTP 重定向

  对于HTTP 重定向,你一定不陌生,它可以将 HTTP 请求进行转移,在 Web 开发中我们经常会用它来完成自动跳转,比如用户登录成功后跳转到相应的管理页面。 这种重定向完全由HTTP 定义,并且由HTTP 代理和Web 服务器共同实现。很简单,当HTTP 代理(比如浏览器)向Web服务器请求某个URL后,Web 服务器可以通过HTTP 响应头信息中的Location 标记来返回一个新的URL,这意味着HTTP代理需要继续请求这个新的URL ,这便完成了自动跳转。当然,如果你自己写了一个 HTTP 代理,也可以不支持重定向,也就是对于Web 服务器返回的Location 标记视而不见,虽然这可能不符合HTTP 标准,但这完全取决于你的应用需要。 也正是因为HTTP 重定向具备了请求转移和自动跳转的本领,所以除了满足应用程序需要的各种自动跳转之外,它还可以用于实现负载均衡,以达到Web 扩展的目的。

  DNS 负载均衡

  我们知道,DNS负责提供域名解析服务,当我们访问某个站点时,实际上首先需要通过该站点域名的DNS服务器来获取域名指向的IP 地址,在这一过程中,DNS服务器完成了域名到IP 地址的映射,同样,这种映射也可以是一对多的,这时候,DNS 服务器便充当了负载均衡调度器(也称均衡器),它就像前面提到的重定向转移策略一样,将用户的请求分散到多台服务器上,但是它的实现机制完全不同。

  反向代理负载均衡

  反向代理服务器的核心工作便是转发 HTTP 请求,因此它工作在 HTTP 层面,也就是 TCP 七层结构中的应用层(第七层),所以基于反向代理的负载均衡也称为七层负载均衡,实现它并不困难,目前几乎所有主流的 Web 服务器都热衷于支持基于反向代理的负载均衡,随后我们将进行Nginx反向代理负载均衡的实验

  IP 负载均衡

  事实上,在数据链路层(第二层)、网络层(第三层)以及传输层(四层)都可以实现不同机制的负载均衡,但有所不同的是,这些负载均衡调度器的工作必须由Linux 内核来完成,因为我们希望网络数据包在从内核缓冲区进入进程用户地址空间之前,尽早地被转发到其他实际服务器上,没错,Linux 内核当然可以办得到,位于内核的Netfilter和IPVS可以解决问题,而用户空间的应用程序对此却束手无策。 另一方面,也正是因为可以将调度器工作在应用层以下,这些负载均衡系统可以支持更多的网络服务协议,比如FTP 、SMTP 、DNS ,以及流媒体和Vo I P 等应用。