负载均衡的几种原理
程序员文章站
2022-07-10 16:29:22
...
什么是负载均衡?
就得说说负载均衡的作用了,负载均衡主要解决系统之间的高并发问题。当一台服务器的访问数量达到极限时,可能访问延迟,甚至宕机。我们可以使用服务器集群来提高网站的整体性能。那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台服务器的负载情况将请求分配给某一台后端服务器去处理。
那么在这个过程中,调度者如何合理分配任务,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡问题。
如图:
负载均衡实现一般分硬件和软件。硬件有如F5,软件有nginx,zookeeper,redis等。
以zookeeper的负载均衡为例;
zookeeper的调度算法可分为:Round-Robin算法,随机算法,源地址哈希算法,WeightedRound-Robin算法,加权随机算法,最小连接算法。
1:Round-Robin算法(仑询)
Round-Robin是最简单的一种负载均衡算法。它的原理是把来自用户的请求轮流分配给内部的服务器:从服务器1开始,直到服务器N,然后重新开始循环。
算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
算法假设所有服务器的处理性能都相同,不关心每台服务器的当前连接数和响应速度。当请求服务间隔时间变化比较大时,算法容易导致服务器间的负载不平衡。所以此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。
2:WeightedRound-Robin(加权仑询)
算法并没有考虑每台服务器的处理能力,实际中可能并不是这种情况。由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,算法的原理就是:根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
3:权随机算法
加权随机算法一般应用在以下场景:有一个集合S,里面比如有A,B,C,D这四项。这时我们想随机从中抽取一项,但是抽取的概率不同,比如我们希望抽到A的概率是50%,抽到B和C的概率是20%,D的概率是10%。一般来说,我们可以给各项附一个权重,抽取的概率正比于这个权重。那么上述集合就成了:{A:5,B:2,C:2,D:1}
4:最小连接调度(Least-Connection Scheduling)算法
是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减一。
5:源地址哈希(hash)算法
获取客户端IP地址值,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是要访问的服务器的序号。采用哈希算法进行负载均衡,同一个IP的客户端,当后台服务器列表不变时,它每次访问的都是同一台服务器。
你妹的,对“轮”和“询”组合字敏感。我也醉了
就得说说负载均衡的作用了,负载均衡主要解决系统之间的高并发问题。当一台服务器的访问数量达到极限时,可能访问延迟,甚至宕机。我们可以使用服务器集群来提高网站的整体性能。那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台服务器的负载情况将请求分配给某一台后端服务器去处理。
那么在这个过程中,调度者如何合理分配任务,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡问题。
如图:
负载均衡实现一般分硬件和软件。硬件有如F5,软件有nginx,zookeeper,redis等。
以zookeeper的负载均衡为例;
zookeeper的调度算法可分为:Round-Robin算法,随机算法,源地址哈希算法,WeightedRound-Robin算法,加权随机算法,最小连接算法。
1:Round-Robin算法(仑询)
Round-Robin是最简单的一种负载均衡算法。它的原理是把来自用户的请求轮流分配给内部的服务器:从服务器1开始,直到服务器N,然后重新开始循环。
算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
算法假设所有服务器的处理性能都相同,不关心每台服务器的当前连接数和响应速度。当请求服务间隔时间变化比较大时,算法容易导致服务器间的负载不平衡。所以此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。
2:WeightedRound-Robin(加权仑询)
算法并没有考虑每台服务器的处理能力,实际中可能并不是这种情况。由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,算法的原理就是:根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
3:权随机算法
加权随机算法一般应用在以下场景:有一个集合S,里面比如有A,B,C,D这四项。这时我们想随机从中抽取一项,但是抽取的概率不同,比如我们希望抽到A的概率是50%,抽到B和C的概率是20%,D的概率是10%。一般来说,我们可以给各项附一个权重,抽取的概率正比于这个权重。那么上述集合就成了:{A:5,B:2,C:2,D:1}
4:最小连接调度(Least-Connection Scheduling)算法
是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减一。
5:源地址哈希(hash)算法
获取客户端IP地址值,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是要访问的服务器的序号。采用哈希算法进行负载均衡,同一个IP的客户端,当后台服务器列表不变时,它每次访问的都是同一台服务器。
你妹的,对“轮”和“询”组合字敏感。我也醉了
上一篇: VUE axios 加载中提示封装
下一篇: 发布jar包到Maven*仓库
推荐阅读