负载均衡概念理解和相关算法

目录

    • 什么是负载均衡
    • 负载均衡算法
      • 1. 轮询调度()
      • 2. 加权轮询调度
      • 3. 最小连接调度
      • 4. 加权最小连接调度
      • 5. 基于局部的最少连接
      • 6. 带复制的基于局部性的最少连接()
      • 7. 目标地址散列调度
      • 8. 源地址散列调度U
      • 9. 最短的期望的延迟
      • 10. 最少队列调度

什么是负载均衡

负载均衡(Load balance,LB),是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。

通俗点理解有点类似于常说的一句话,一碗水端平。如果我们只有一个碗,那么无论有多少水,那么我们只能装一碗水。在单服务器的应用场景,碗就是服务器,而水就是流量。所以我们知道,一旦水(流量)过大时,一个碗肯定是不够用的。这时候就需要多来几个碗(服务器)来支撑更多的水(流量)。但是不能让这个碗接的水满满的,而有的碗没有水,或者水少,水就是负载,而这种就是负载不均衡了。负载均衡就是为了让所有碗里的水都尽量一样多,不至于让有的服务器压力大,而有的服务器压力小甚至用不上。

那么我们知道尽管有很多的碗,能够装得下足够多的水,但是这么多碗,哪个先用,哪个后用呢?这时候我们可以想象以前读书的时候的洗衣池,一个池子上面有n个水龙头,这时候每个水龙头下都放这一个碗,这样就能够保证这些碗基本是同时被使用到的,而这种就是分布式服务器集群的基本概念了。

那么这些碗如何能够达到负载均衡呢?因为会有有得水龙头流量大,有得水龙头流量小的情况,这样的话流量大的地方的碗的负载压力就大。那么这时候,如果我们把所有的碗都打通,然后再用一个水管把他们连起来,这样是不是就能够基本保证,所有的碗的水都一样多了?因为水多的碗里面的水也很流到水少的碗里。这样就能够达到负载均衡的目的了。这里面用来连接碗之间的水管就是连通器的概念,但是连通器其实只是用于解决服务器之间的通信问题,其并不是减轻服务器性能的算法。负载均衡就是通过分流算法,合理的分摊服务器压力,达到服务器性能的最大优化。但是这里也不能简单地理解为分配给所有实际服务器一样多的工作量,因为不同的服务器在硬件配置、网络带宽的不同,导致它们具体的承载能力也不相同,这里的“均衡”,其实就是尽可能地使得所有的服务器都不要过载,并且能够最大程序地发挥作用。

总结:负载均衡(Load Balance),就是是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行,用来解决高性能,单点故障(高可用),扩展性(水平伸缩)的场景需求!

转自:https://www.zhihu.com/tardis/bd/art/390877240?source_id=1001

负载均衡算法

如何将负载分配到某个操作单元上,实践过程中有如下的一些算法,实际上生活中也有很多类似的例子。 也是实际不断的优化算法的过程

1. 轮询调度()

轮询调度(Round Robin 简称’RR’)算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。

2. 加权轮询调度

加权轮询(Weight Round Robin 简称’WRR’)算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。

3. 最小连接调度

最小连接调度(Least Connections 简称’LC’)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。

(集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)

4. 加权最小连接调度

加权最少连接(Weight Least Connections 简称’WLC’)算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

5. 基于局部的最少连接

基于局部的最少连接调度(Locality-Based Least Connections 简称’LBLC’)算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。

6. 带复制的基于局部性的最少连接()

带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication 简称’LBLCR’)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

7. 目标地址散列调度

目标地址散列调度(Destination Hashing 简称’DH’)算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。

8. 源地址散列调度U

源地址散列调度(Source Hashing 简称’SH’)算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。

9. 最短的期望的延迟

最短的期望的延迟调度(Shortest Expected Delay 简称’SED’)算法基于WLC算法。举例: ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算

A:(1+1)/ 1=2
B:(1+2)/ 2=3/2
C:(1+3)/ 3=4/3
就把请求交给得出运算结果最小的服务器。

10. 最少队列调度

最少队列调度(Never Queue 简称’NQ’)算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。

你可能感兴趣的:(负载均衡,算法,运维)