负载均衡的方案

来源:互联网 发布:土耳其人 知乎 编辑:程序博客网 时间:2024/05/01 08:06

负载均衡:在计算机集群、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。

负载均衡既可以采用硬件实现,也可以采用软件实现。比较知名的F5负载均衡器,就是基于硬件实现的,性能上优于大部分软件方式,不过成本也比较昂贵。大部分用户都会选用软件实现的方式来解决。
(下面图片来自网络)

负载均衡方案

1.HTTP重定向负载均衡

这里写图片描述
这种适用于WEB服务器,负载均衡器根据HTTP请求,计算出实际服务器地址,通过302重定向,用户再去请求实际的服务器地址。这种方案比较简单,但性能较差,需要2次请求才能返回结果。目前一般都不会采用这种方式了。

2.DNS域名解析负载均衡

这里写图片描述
在DNS中存储实际主机IP,域名解析的时候,根据负载均衡算法返回匹配的IP地址。
这种方案的优点是负载均衡由DNS来完成工作,对服务器是透明的,服务器本身不用维护负载均衡。
缺点是负载均衡不是服务器维护,无法精细控制,DNS在客户端往往有缓存,服务器的变更,出问题等很难及时反映到客户端上。

3.反向代理负载均衡

这里写图片描述
反向代理服务器解析客户端请求,根据负载均衡算法转发到不同的服务器,用户和后台服务器不再有直接的连接。请求、响应都由反向代理服务器进行转发。
优点是集成在一起,部署简单。
缺点是所有请求响应都要经过反向代理服务器,其本身可能成为性能的瓶颈。
如Nginx就可以部署为反向代理服务器。

4.IP负载均衡

这里写图片描述
上面的反向代理属于应用层的负载均衡,而IP负载均衡属于网络层。
用户请求包到达负载均衡服务器,在操作系统内核层获取网络包,根据负载均衡算法得出后台服务器地址,修改数据包的源地址、目的地址,转发给服务器,整个过程都在内核层中处理,收到响应包后在修改为正确的源地址、目的地址转发给用户。
优点是整个过程都在内核层处理,具有更好的性能。
缺点是所有响应包都要经过负载均衡服务器,其网卡带宽很容易成为系统的瓶颈。

5.数据链路层负载均衡

这里写图片描述
上面的方法时在网络层来处理,而数据链路层负载均衡就是在TCP/IP协议中的最底层进行负载均衡了。
该方法通过修改数据报文的MAC地址来实现负载均衡。在服务器集群中所有机器虚拟IP和负载均衡服务器IP一致,达到不用修改源地址和目的地址就能进行数据分发。这种方式又称为直接路由方式。

目前使用最广泛的一种方式就是数据链路层负载均衡,如LVS(Linux Virtual Server)同时支持IP负载均衡和数据链路层负载均衡。

负载均衡算法

经典的8种负载均衡算法

  1. 轮询调度
    按顺序轮流分配到真实服务器上,均等地对待每台服务器,不管服务器的实际连接数和系统负载。
  2. 加权轮询
    根据服务器的不同处理能力来调度请求。保证处理能力强的服务器处理更多访问流量。调度器动态地调整权值。
  3. 最少连接
    动态地将请求调度到已建立连接数最好的服务器上。如果集群服务器的性能相近,采用这种方式可以较好地负载均衡。
  4. 加权最少连接
    在服务器性能差异较大,这种方式比较适合。有较高权值的服务器承受较大比例的活动连接负载。
  5. 基于局部性的最少连接
    先根据目标地址找出最近使用的服务器,若该服务器没超载,将请求发送到该服务器上,若服务器不存在,或超载且处于一半的工作负载,则用“最少连接”选择一个可用的服务器处理请求。
    目前主要用于Cache集群。
  6. 带复制的基于局部性最少连接
    也是主要用于Cache集群。
  7. 目标地址散列
    将请求的目标IP地址作为散列键,从静态分配的散列表中找出服务器,若服务器可用未超载,则由该服务器处理请求。
  8. 源地址散列
    原理同上,但是将源地址作为散列键。
0 0
原创粉丝点击