负载均衡的常用算法

1、随机算法:

负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,然后把连接发送给它。同样一个请求一会落到机器A,一会落到机器B上,Cache会被频繁淘汰,使得cache命中率低。

2、轮询算法:

轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器。轮询算法在大多数情况下都工作的不错,但是如果负载均衡的设备在处理速度、连接速度和内存等方面不是完全均等,那么效果就会不好。当然cache命中率也不高

3、加权轮询算法:

每个机器接受的连接数量是按权重比例分配的。这是对普通轮询算法的改进,比如你可以设定:第三台机器的处理能力是第一台机器的两倍,那么负载均衡器会把两倍的连接数量分配给第3台机器。

4、动态轮询算法:

类似于加权轮询,但是,权重值基于对各个服务器的持续监控,并且不断更新。这是一个动态负载均衡算法,基于服务器的实时性能分析分配连接,比如每个节点的当前连接数或者节点的最快响应时间等。

5、最快响应算法:

平衡器记录自身到每一个集群节点的网络响应时间,并将下一个到达的连接请求分配给响应时间最短的节点;

6、最少连接算法:

平衡器纪录目前所有活跃连接,把下一个新的请求发给当前含有最少连接数的节点。

7、哈希散列算法:

散列法也叫哈希法(HASH),通过单射不可逆的HASH函数,按照某种规则将网络请求发往集群节点,将具有相同源地址的数据包发给同一服务器。以后对相同的请求, 相同的服务器组,计算出来的hash结果相同,从而达到HASH分布的效果。

根据不同的均衡要求选择不同的均衡算法

当然:对于哈希散列算法我们

计算全部服务器的idx_key=hash(query_key+server_idx),其中计算得到idx_key最大的server_idx就是需要的idx。

假设开始3台后端服务器,请求用标志串 req = "abcd" 来标志,服务器用 S1, S2, S3来标志, 那么,通过对 req + Sx 合并起来计算签名就可以对每个服务器得到一个数值:

(req = "abcd" + S1) = K1
(req = "abcd" + S2) = K2
(req = "abcd" + S3) = K3
计算的方法可以使用crc,也可以使用MD5,目的的得到一个*散列*的数字,这样在K1,K2,K3中 必定有一个最大的数值,假设是K2,那么可以将请求req扔给S2,这样,以后对相同的请求, 相同的服务器组,计算出来的结果必定是K2最大,从而达到HASH分布的效果。
巧妙的地方在于,新增或者删除一台服务器的时候,不会引起已有服务器的cache大规模失效, 假设新增一台服务器S4,那么对S1,S2,S3计算的K值都完全相同,那么对S4可以计算得到一个新值K4,如果计算K的算法足够散列,那么原先计算到 S1,S2,S3的请求,理论上都会有1/4的请求新计算得到的K4比原先的K大, 那么这1/4的请求会转移到S4,从而新增的S4服务器会负担1/4的请求,原先的S1,S2,S3也只会负担原先的3/4。

cache命中率最高,并且新增和删除(考虑到服务器宕机的情况)服务器的影响最小

时间: 2024-09-30 14:21:01

负载均衡的常用算法的相关文章

负载均衡的那些算法们

上周发了问卷,想了解一下大家对老王有没有什么建议,然后好多朋友都投了票,想了解编程技术和服务器架构的干货,所以接下来会先聊聊编程和架构相关的算法,然后大概在6月下旬会跟大家聊聊面试那些事儿(老王到目前大约参加了几百次的面试,可以从面试官的角度来聊聊不一样的面试).老王聊技术有个特点,就是绝不假大空,只求贴地飞行.所以,聊的东西一定会跟实际有关联,大家在平时也有可能用得着. 今天跟大伙儿聊的是负载均衡相关的一些算法.老王在百度的时候(估计是5-6年前),写过一个通用的基础库(不知道现在还有没有部门

[转帖]利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞

利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞 2018年08月02日 10:06:03 Minza 阅读数 483 https://blog.csdn.net/ha_weii/article/details/81350087 学习一下如何使用sticky 版权声明:创作不易,转载请注明出处 https://blog.csdn.net/ha_weii/article/details/81350087 一,普通的负载均衡 1,启动nginx服务器 之前已经把/us

实现负载均衡的基本算法

平衡算法设计的好坏直接决定了集群在负载均衡上的表现,设计不好的算法,会导致集群的负载失衡.一般的平衡算法主要任务是决定如何选择下一个集群节点,然后将新的服务请求转发给它.有些简单平衡方法可以独立使用,有些必须和其它简单或高级方法组合使用.而一个好的负载均衡算法也并不是万能的,它一般只在某些特殊的应用环境下才能发挥最大效用.因此在考察负载均衡算法的同时,也要注意算法本身的适用面,并在采取集群部署的时候根据集群自身的特点进行综合考虑,把不同的算法和技术结合起来使用. 一.轮转法: 轮转算法是所有调度

负载均衡的基本算法

负载均衡的基本算法,主要有以下几种(参考F5产品): 随机:负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,然后把连接发送给它.虽然许多均衡产品都支持该算法,但是它的有效性一直受到质疑,除非把服务器的可运行时间看的很重. 轮询:轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器.轮询算法在大多数情况下都工作的不错,但是如果负载均衡的设备在处理速度.连接速度和内存等方面不是完全均等,那么效果会更好. 加权轮询:该算法中,每个机器

nginx 负载均衡(默认算法)

使用 nginx 的upstream模块只需要几步就可以实现一个负载均衡: 在 nginx 配置文件中添加两个server server { listen 81; server_name 192.168.1.129; root /var/www/html1; } server { listen 82; server_name 192.168.1.129; root /var/www/html2; } 使用upstream把这两个 server 绑定到一个负载sever上提供统一入口: upstr

LVS负载均衡模型及算法概述

集群类型 LB: Load Balancing,负载均衡 HA:High Availability, 高可用 HP:High Performance, 高性能   负载均衡 负载均衡设备 Hardware: F5,BIG IP Citrix,Netscaler A10 最便宜 Software: 四层 性能高,支持的特性少 LVS 中国 七层:反向代理,性能略次于四层,支持高级特性 nginx 俄罗斯 http.smtp.pop3.imap haproxy 主要应用场景http.其他tcp(my

LVS NAT和DR的负载均衡,及算法

LVS负载均衡集群介绍负载均衡集群的作用:提供一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载带宽.增加吞吐量,加强网络数据处理能力.提高网络的灵活性和可用性.1)把单台计算机无法承受的大规模的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间,提升用户体验.2)单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高.3)7*24小时的服务保证,任意一个或多个设备节点设备宕机,不能影响到业务.在负载均

负载均衡算法的几种常用方案

总结下负载均衡的常用方案及适用场景 轮询调度 以轮询的方式依次请求调度不同的服务器:实现时,一般为服务器带上权重:这样有两个好处: 针对服务器的性能差异可分配不同的负载: 当需要将某个结点剔除时,只需要将其权重设置为0即可: 优点:实现简单.高效:易水平扩展: 缺点:请求到目的结点的不确定,造成其无法适用于有写的场景(缓存,数据库写) 应用场景:数据库或应用服务层中只有读的场景: 随机方式 请求随机分布到各个结点:在数据足够大的场景能达到一个均衡分布: 优点:实现简单.易水平扩展: 缺点:同Ro

GlusterFS集群文件系统研究(负载均衡的最常用办法) good

http://blog.csdn.net/liuaigui/article/details/6284551 http://blog.csdn.net/liuaigui/article/details/17331557 负载均衡最为常用的一种方法是RR-DNS,它为同一个主机名配置多个IP地址,在应答DNS查询时根据Round Robin算法返回不同的IP地址,客户端使用返回的IP连接主机,从而实现负载均衡的目的.RR-DNS负载均衡方法的优点是简单.灵活.方便.成本低,客户端和服务端都不要作修改