负载均衡算法-创新互联
负载均衡(Load Balance)
,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡能够平均分配客户请求到服务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群技术可以用最少的投资获得接近于大型主机的性能。
目前负载均衡算法主要分为两类:
静态负载均衡算法:以固定的概率分配任务,不考虑服务器的状态信息,如:轮询法、随机法、加权轮询法、加权随机法等。
动态负载均衡算法:以服务器的实时负载状态信息来决定任务的分配,如:最小连接法、映射分配、加权、Hash、最小时延等。
轮询算法是最简单的一种负载均衡算法。它的原理是把来自用户的请求轮流分配给内部的服务器:从服务器1开始,直到服务器N,然后重新开始循环
负载均衡算法:rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标 ,每次服务重启动后rest接口计数从1开始。
2.1.1.1. 优点服务器请求数目相同;
2.1.1.2. 缺点服务器压力不一样,不适合服务器配置不同的情况;
2.1.1.3. 结论轮询法适用于机器性能都在同一水平的服务,一旦某台机器性能不好,极有可能产生木桶效应,性能差的机器扛不住更多的流量。
2.1.2. 随机算法(Random)随机法,是随机选择一台服务器来分配任务。它保证了请求的分散性达到了均衡的目的。同时它是没有状态的不需要维持上次的选择状态和均衡因子。但是随着任务量的增大,它的效果趋向轮询后也会具有轮询算法的部分缺点。
2.1.2.1. 优点使用简单;
2.1.2.2. 缺点不适合机器配置不同的场景
2.1.2.3. 结论不适合机器配置不同的场景,一旦某台机器性能不好,极有可能产生木桶效应,性能差的机器扛不住更多的流量。
3.1.3. 加权轮询算法(Weight Round Robin)实际上,不同的服务器存在着配置和当前系统的负载不相同,因此它们的处理能力也不一样。所以对配置高、负载低的机器分配更高的权重,使其能够处理更多的请求,而配置低、负载高的机器,则给其分配较低的权重,降低其系统负载,加权轮询很好的处理了这一问题,并将请求按照顺序且根据权重分配给服务器。
加权轮询是对基本轮询算法的一个补充。加权轮询是指给后端的每个节点都赋予权重,分配请求时,不只按照节点数量轮询,而是按照节点的权重来决定轮询的个数。按照权重的总和来轮询,再根据没个权重所属的服务节点来决定将请求分配给哪个节点。
权重高的节点占用的轮询份数较多,被请求的次数增加,权重小的节点占用的轮询份数较少,被请求的次数减少。
3.1.4. 加权随机算法(Weight Random)与加权轮询法类似,加权随机法也是根据服务器不同的配置和负载情况来配置不同的权重。不同的是,它是按照权重来随机选择服务器的,而不是顺序。
该算法思想和大多数插卡游戏的控制卡片的稀有度是一致的。
最小连接法,将任务分配给此时具有最小连接数的服务器。当一台服务器收到一个请求后,它的连接数间1。但是根据连接数并不能真实的反应服务器的负载能力,当服务器不处于同一水平时,有可能连接数少的服务器处理能力差,而连接数多的服务器处理能力强。
最小连接数法是根据服务器当前的连接情况进行负载均衡的,当请求到来时,会选取当前连接数最少的一台服务器来处理请求。由此也可以延伸出,根据服务器 CPU 占用最少,根据单位时间内处理请求的效率高低等进行服务器选择。最小连接数法只是动态分配服务器的一种算法,通过各种维度的参数计算,可以找到适合不同场景的更均衡的动态分配服务器的方案。
2.2.2. 映射分配无状态的服务可采用轮询或随机算法。但有些服务是有状态的,例如,一些存储信息或具有缓存的服务。具有固定 Key 的请求要落在固定的节点上,这时就要通过静态分配来均衡分配请求。
2.2.3. 加权在轮询,随机,最少链接,Hash等算法的基础上,通过加权的方式,进行负载服务器分配
2.2.4. Hash 2.2.4.1. Hash分类- IP Hash
对请求的ip地址用hash算法映射到服务器上,保证一个客户端的所有请求都命中到一台服务器上,适合服务端保存客户端的状态,开启session会话的情况,但是不能跨服务器会话,如果服务器有新上线,下线,重启等导致服务器序号发生改变时会导致此种策略异常
- URL Hash
对url请求使用hash映射到指定服务器,可以配合缓存使用,在各服务器不共享缓存的情况下,对需要缓存的请求都打到一台服务器上避免其他服务器重复缓存
- 一致性Hash
一致性hash最初是用来解决分布式缓存中节点查找问题,由于缓存是多节点部署的,这些节点都存储了
不同的数据(每个节点可以是主备部署,实时同步),那我们在取数据的时候怎么取,通过hash算法可以定位到一个缓存节点,但是,当一个节点挂掉或者新增一个几点,节点的位置序号发生变动时,普通hash算法的定位就不准确了
于是一致性hash算法营运而生
将主机(ip或者主机名等唯一标识)按一致性hash算法分布在0 — 223-1的闭环圆圈上,当我们取某个值的时候,将这个数据的key用相同的hash算法映射到0 — 223-1上,从这个位置顺时针找到的第一个缓存节点,就是这个数据存储位置
数据容错性和可扩展性 :当我们删除或新增其中一个节点,影响的只是这个节点之前的数据,其他节点并未受影响
数据倾斜问题解决:几个缓存节点在圆上的分布可能并不是对称的,但我们可以增加虚拟的对称节点来解决
最小时延要统计服务器一段时间的客户端请求响应平均耗时,来确定下一次请求到来时选择当前最小连接数的服务器或者响应最快的服务器
3. Nginx支持的算法nginx可以支持轮询(默认),加权轮询,IP_Hash算法,像最小连接 最小时延这种智能的fair方式以及URL_Hash方式都需要第三方插件支持
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网页名称:负载均衡算法-创新互联
网页路径:http://hbruida.cn/article/dochgo.html